leds and tiny buttons measure actual preferred width

This commit is contained in:
2024-11-25 18:35:59 -06:00
committed by Celtic Minstrel
parent bab6b2f8f8
commit 9fb5cdbefd
3 changed files with 43 additions and 29 deletions

View File

@@ -7,12 +7,12 @@
</text>
<text name='scale-head' size='large' relative='pos-in pos' rel-anchor='prev' top='10' left='10' width='260' height='17'>Scale UI:</text>
<group name='scaleui'>
<led name='1' relative='pos-in pos' anchor='scale-head' top='4' left='15' width='33'>1</led>
<led name='1_5' relative='pos-in pos' anchor='scale-head' top='4' left='55' width='33'>1.5</led>
<led name='2' relative='pos-in pos' anchor='scale-head' top='4' left='95' width='33'>2</led>
<led name='3' relative='pos-in pos' anchor='scale-head' top='4' left='135' width='33'>3</led>
<led name='4' relative='pos-in pos' anchor='scale-head' top='4' left='175' width='33'>4</led>
<led name='other' relative='pos-in pos' anchor='scale-head' top='4' left='215' width='85'/>
<led name='1' relative='pos-in pos' anchor='scale-head' top='4' left='15'>1</led>
<led name='1_5' relative='pos-in pos' anchor='scale-head' top='4' left='55'>1.5</led>
<led name='2' relative='pos-in pos' anchor='scale-head' top='4' left='95'>2</led>
<led name='3' relative='pos-in pos' anchor='scale-head' top='4' left='135'>3</led>
<led name='4' relative='pos-in pos' anchor='scale-head' top='4' left='175'>4</led>
<led name='other' relative='pos-in pos' anchor='scale-head' top='4' left='215'/>
</group>
<text name='scalemap-head' size='large' relative='neg pos' anchor='scale-head' top='17' left='0' width='260' height='17'>Scale Map:</text>
<group name='scalemap'>
@@ -26,28 +26,28 @@
<text size='large' relative='pos-in pos' anchor='scalemap-head' top='30' left='0' width='182' height='17'>Display alignment:</text>
<text name='disp-frame' framed='true' relative='pos-in pos' rel-anchor='prev' top='6' left='0' width='277' height='102'/>
<group name='display'>
<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='8' width='228'>Small Window (not full screen)</led>
<led name='tl' relative='pos-in' anchor='disp-frame' top='7' left='8'>Top Left</led>
<led name='tr' relative='neg-in pos-in' anchor='disp-frame' top='7' left='128'>Top Right</led>
<led name='mid' relative='pos-in' anchor='disp-frame' top='40' left='83'>Center</led>
<led name='bl' relative='pos-in neg-in' anchor='disp-frame' top='24' left='8'>Bottom Left</led>
<led name='br' relative='neg-in' anchor='disp-frame' top='24' left='128'>Bottom Right</led>
<led name='win' relative='pos-in pos' anchor='disp-frame' top='9' left='8'>Small Window (not full screen)</led>
</group>
<text name='spd-head' size='large' relative='neg pos' anchor='disp-frame' top='31' left='0' width='182' height='17'>Game speed:</text>
<group name='speed'>
<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='85' width='53'>Medium</led>
<led name='slow' relative='pos-in pos' anchor='spd-head' top='4' left='155' width='53'>Slow</led>
<led name='snail' relative='pos-in pos' anchor='spd-head' top='4' left='225' width='70'>Quite Slow</led>
<led name='fast' relative='pos-in pos' anchor='spd-head' top='4' left='15'>Fast</led>
<led name='med' relative='pos pos-in' anchor='fast' top='0' left='15'>Medium</led>
<led name='slow' relative='pos pos-in' anchor='med' top='0' left='15'>Slow</led>
<led name='snail' relative='pos pos-in' anchor='slow' top='0' left='15'>Quite Slow</led>
</group>
<text name='misc-head' size='large' relative='pos-in pos' anchor='spd-head' top='30' left='0' width='182' height='17'>Miscellaneous:</text>
<led name='nosound' relative='pos-in pos' anchor='misc-head' top='6' left='15' 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='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='nohelp' relative='pos-in pos' rel-anchor='prev' top='10' left='0' width='306'>Never show instant help</led>
<button name='resethelp' type='tiny' relative='pos-in pos' rel-anchor='prev' top='10' left='0' width='340'>
<led name='nosound' relative='pos-in pos' anchor='misc-head' top='6' left='15'>No Sounds</led>
<led name='repeatdesc' relative='pos-in pos' rel-anchor='prev' top='10' left='0'>Show room descriptions more than once</led>
<led name='easier' relative='pos-in pos' rel-anchor='prev' top='10' left='0'>Make game easier (monsters much weaker)</led>
<led name='lesswm' relative='pos-in pos' rel-anchor='prev' top='10' left='0'>Fewer wandering monsters</led>
<led name='skipsplash' relative='pos-in pos' rel-anchor='prev' top='10' left='0'>Skip splash screen on startup</led>
<led name='nohelp' relative='pos-in pos' rel-anchor='prev' top='10' left='0'>Never show instant help</led>
<button name='resethelp' type='tiny' relative='pos-in pos' rel-anchor='prev' top='10' left='0'>
Reset instant help (all help windows will reappear)
</button>
<button name='okay' relative='abs pos' rel-anchor='prev' type='regular' top='17' left='354'>OK</button>

View File

@@ -61,6 +61,8 @@ bool cButton::isScrollable() const {
return false;
}
const int tiny_text_offset = 18;
void cButton::draw(){
rectangle from_rect, to_rect;
@@ -81,7 +83,7 @@ void cButton::draw(){
eTextMode textMode = eTextMode::CENTRE;
if(type == BTN_TINY) {
textMode = wrapLabel ? eTextMode::WRAP : eTextMode::LEFT_TOP;
to_rect.left += 18;
to_rect.left += tiny_text_offset;
style.colour = textClr;
} else if(type == BTN_PUSH) {
to_rect.top += 42;
@@ -175,13 +177,17 @@ void cButton::validatePostParse(ticpp::Element& elem, std::string fname, const s
if(labelledButtons.count(type)) {
if(!attrs.count("color") && !attrs.count("colour") && parent->getBg() == cDialog::BG_DARK)
setColour(sf::Color::White);
if(!getText().empty() && !attrs.count("width"))
throw xMissingAttr(elem.Value(), "width", elem.Row(), elem.Column(), fname);
}
}
location cButton::getPreferredSize() const {
return {btnRects[type][0].width(), btnRects[type][0].height()};
int width = btnRects[type][0].width();
if(type == BTN_TINY && !getText().empty()){
TextStyle style;
style.pointSize = textSize;
width = tiny_text_offset + string_length(getText(), style);
}
return {width, btnRects[type][0].height()};
}
void cButton::recalcRect() {

View File

@@ -86,6 +86,8 @@ bool cLed::manageFormat(eFormat prop, bool set, boost::any* val) {
return true;
}
const int text_offset = 18; // Possibly could be 20
void cLed::draw(){
rectangle from_rect, to_rect;
@@ -103,7 +105,7 @@ void cLed::draw(){
rect_draw_some_item(*ResMgr::graphics.get(buttons[btnGW[BTN_LED]]),from_rect,*inWindow,to_rect);
style.colour = textClr;
to_rect.right = frame.right;
to_rect.left = frame.left + 18; // Possibly could be 20
to_rect.left = frame.left + text_offset;
win_draw_string(*inWindow,to_rect,getText(),wrapLabel ? eTextMode::WRAP : eTextMode::LEFT_TOP,style);
}
@@ -152,5 +154,11 @@ bool cLed::parseContent(ticpp::Node& content, int n, std::string tagName, std::s
}
location cLed::getPreferredSize() const {
return {ledRects[0][0].width(), ledRects[0][0].height()};
int width = ledRects[0][0].width();
if(!getText().empty()){
TextStyle style;
style.pointSize = textSize;
width = text_offset + string_length(getText(), style);
}
return {width, ledRects[0][0].height()};
}