Implement relative positioning system for DialogXML

This allows widgets to be positioned relative to other widgets.

Two dialogs have been converted to use relative positioning.

Also fix some issues with calculating the dialog rect.
This commit is contained in:
2020-02-23 22:00:01 -05:00
parent cd2ab1c16e
commit c65bac2a8f
14 changed files with 371 additions and 105 deletions

View File

@@ -1,46 +1,45 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<?xml-stylesheet href="dialog.xsl" type="text/xsl"?>
<dialog defbtn='okay'>
<!--
TODO: All the LEDs here should have bold labels according to the original DITL; do they get that by default? The XSL transformation with CSS stylesheet doesn't give them bold labels.
-->
<pict type='dlog' num='16' top='8' left='8'/>
<text size='large' top='6' left='49' width='218' height='16'>
Blades of Exile Preferences:
<text size='large' relative='pos pos-in' rel-anchor='prev' top='0' left='4' width='218' height='16'>
Blades of Exile Preferences
</text>
<text size='large' top='25' left='59' width='182' height='17'>Display alignment:</text>
<text framed='true' top='48' left='64' width='277' height='102'/>
<text size='large' relative='pos-in pos' rel-anchor='prev' top='3' left='10' width='182' height='17'>Display alignment:</text>
<text name='disp-frame' framed='true' relative='pos-in pos' rel-anchor='prev' top='6' left='5' width='277' height='102'/>
<group name='display'>
<led name='tl' top='55' left='72' width='54'>Top Left</led>
<led name='tr' top='55' left='213' width='62'>Top Right</led>
<led name='mid' top='88' left='147' width='75'>Center</led>
<led name='bl' top='126' left='72' width='104'>Bottom Left</led>
<led name='br' top='126' left='213' width='104'>Bottom Right</led>
<led name='win' top='159' left='66' width='228'>Small Window (not full screen)</led>
<led name='tl' relative='pos-in' anchor='disp-frame' top='7' left='8' width='54'>Top Left</led>
<led name='tr' relative='neg-in pos-in' anchor='disp-frame' top='7' left='128' width='62'>Top Right</led>
<led name='mid' relative='pos-in' anchor='disp-frame' top='40' left='83' width='75'>Center</led>
<led name='bl' relative='pos-in neg-in' anchor='disp-frame' top='24' left='8' width='104'>Bottom Left</led>
<led name='br' relative='neg-in' anchor='disp-frame' top='24' left='128' width='104'>Bottom Right</led>
<led name='win' relative='pos-in pos' anchor='disp-frame' top='9' left='2' width='228'>Small Window (not full screen)</led>
</group>
<text size='large' top='181' left='54' width='182' height='17'>Game speed:</text>
<text name='spd-head' size='large' relative='neg pos' anchor='disp-frame' top='31' left='10' width='182' height='17'>Game speed:</text>
<group name='speed'>
<led name='fast' top='202' left='69' width='53'>Fast</led>
<led name='med' top='202' left='151' width='53'>Medium</led>
<led name='slow' top='202' left='244' width='53'>Slow</led>
<led name='snail' top='202' left='328' width='70'>Quite Slow</led>
<led name='fast' relative='pos-in pos' anchor='spd-head' top='4' left='15' width='53'>Fast</led>
<led name='med' relative='pos-in pos' anchor='spd-head' top='4' left='97' width='53'>Medium</led>
<led name='slow' relative='pos-in pos' anchor='spd-head' top='4' left='190' width='53'>Slow</led>
<led name='snail' relative='pos-in pos' anchor='spd-head' top='4' left='274' width='70'>Quite Slow</led>
</group>
<text size='large' top='221' left='53' width='182' height='17'>For older machines:</text>
<led name='nofrills' top='244' left='53' width='335'>No graphics frills (lose special effects)</led>
<led name='noanim' top='264' left='53' width='335'>Turn off terrain animation</led>
<led name='noshore' top='284' left='53' width='335'>Turn of frills on shore</led>
<led name='nomaps' top='309' left='53' width='120'>Don't Save Maps</led>
<led name='nosound' top='309' left='228' width='117'>No Sounds</led>
<led name='repeatdesc' top='329' left='53' width='287'>Show room descriptions more than once</led>
<led name='nohelp' top='349' left='53' width='306'>Never show instant help</led>
<led name='resethelp' top='369' left='53' width='340'>
<text size='large' relative='pos-in pos' anchor='spd-head' top='23' left='0' width='182' height='17'>For older machines:</text>
<led name='nofrills' relative='pos-in pos' rel-anchor='prev' top='6' left='0' width='335'>
No graphics frills (lose special effects)
</led>
<led name='noanim' relative='pos-in pos' rel-anchor='prev' top='10' left='0' width='335'>Turn off terrain animation</led>
<led name='noshore' relative='pos-in pos' rel-anchor='prev' top='10' left='0' width='335'>Turn of frills on shore</led>
<led name='nomaps' relative='pos-in pos' rel-anchor='prev' top='15' left='0' width='120'>Don't Save Maps</led>
<led name='nosound' relative='pos-in pos' rel-anchor='prev' top='10' left='0' width='117'>No Sounds</led>
<led name='repeatdesc' relative='pos-in pos' rel-anchor='prev' top='10' left='0' width='287'>Show room descriptions more than once</led>
<led name='nohelp' relative='pos-in pos' rel-anchor='prev' top='10' left='0' width='306'>Never show instant help</led>
<led name='resethelp' relative='pos-in pos' rel-anchor='prev' top='10' left='0' width='340'>
Reset instant help (all help windows will reappear)
</led>
<led name='easier' top='389' left='53' width='352'>Make game easier (monsters much weaker)</led>
<led name='lesswm' top='409' left='53' width='340'>Fewer wandering monsters</led>
<led name='skipsplash' top='429' left='53' width='340'>Skip splash screen on startup</led>
<led name='scaleui' top='449' left='53' width='340'>Apply UI scaling</led>
<led name='easier' relative='pos-in pos' rel-anchor='prev' top='10' left='0' width='352'>Make game easier (monsters much weaker)</led>
<led name='lesswm' relative='pos-in pos' rel-anchor='prev' top='10' left='0' width='340'>Fewer wandering monsters</led>
<led name='skipsplash' relative='pos-in pos' rel-anchor='prev' top='10' left='0' width='340'>Skip splash screen on startup</led>
<led name='scaleui' relative='pos-in pos' rel-anchor='prev' top='10' left='0' width='340'>Apply UI scaling</led>
<button name='okay' type='regular' top='466' left='354'>OK</button>
<button name='cancel' type='regular' def-key='esc' top='466' left='281'>Cancel</button>
<button name='okay' relative='abs pos' rel-anchor='prev' type='regular' top='7' left='354'>OK</button>
<button name='cancel' relative='neg pos-in' anchor='okay' type='regular' def-key='esc' top='0' left='73'>Cancel</button>
</dialog>