Fix text overflowing in select and text box
This commit is contained in:
parent
4cbeaa6e64
commit
22bd69f415
@ -34,7 +34,28 @@ void zerokernel::Select::render()
|
|||||||
}
|
}
|
||||||
|
|
||||||
renderBorder(*color_border);
|
renderBorder(*color_border);
|
||||||
text.set(found ? found->name : "<?>");
|
std::string t;
|
||||||
|
if (found)
|
||||||
|
{
|
||||||
|
float x, y;
|
||||||
|
t = found->name;
|
||||||
|
resource::font::base.stringSize(t, &x, &y);
|
||||||
|
if (x + 5 > bb.getBorderBox().width)
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
resource::font::base.stringSize(t, &x, &y);
|
||||||
|
if (x + 13 > bb.getBorderBox().width)
|
||||||
|
{
|
||||||
|
t = t.substr(0, t.size() - 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
t.append("..");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
text.set(found ? t : "<?>");
|
||||||
text.render();
|
text.render();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -67,11 +88,17 @@ void zerokernel::Select::openModal()
|
|||||||
object->setParent(Menu::instance->wm.get());
|
object->setParent(Menu::instance->wm.get());
|
||||||
object->move(bb.getBorderBox().x, bb.getBorderBox().y);
|
object->move(bb.getBorderBox().x, bb.getBorderBox().y);
|
||||||
object->addMessageHandler(*this);
|
object->addMessageHandler(*this);
|
||||||
object->resize(bb.getBorderBox().width, -1);
|
int size = bb.getBorderBox().width;
|
||||||
for (auto &p : options)
|
for (auto &p : options)
|
||||||
{
|
{
|
||||||
object->addOption(p.name, p.value, p.tooltip);
|
object->addOption(p.name, p.value, p.tooltip);
|
||||||
|
float x, y;
|
||||||
|
resource::font::base.stringSize(p.name, &x, &y);
|
||||||
|
x += 10;
|
||||||
|
if (x > size)
|
||||||
|
size = x;
|
||||||
}
|
}
|
||||||
|
object->resize(size, -1);
|
||||||
debug::UiTreeGraph(object.get(), 0);
|
debug::UiTreeGraph(object.get(), 0);
|
||||||
Menu::instance->addModalObject(std::move(object));
|
Menu::instance->addModalObject(std::move(object));
|
||||||
}
|
}
|
||||||
@ -118,7 +145,7 @@ void zerokernel::Select::loadFromXml(const tinyxml2::XMLElement *data)
|
|||||||
printf("adding %s: %s\n", name, value);
|
printf("adding %s: %s\n", name, value);
|
||||||
auto has_tooltip = !(child->QueryStringAttribute("tooltip", &tooltip));
|
auto has_tooltip = !(child->QueryStringAttribute("tooltip", &tooltip));
|
||||||
options.push_back(option{ name, value, has_tooltip ? std::optional<std::string>(tooltip) : std::nullopt });
|
options.push_back(option{ name, value, has_tooltip ? std::optional<std::string>(tooltip) : std::nullopt });
|
||||||
};
|
}
|
||||||
child = child->NextSiblingElement(nullptr);
|
child = child->NextSiblingElement(nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,24 @@ void zerokernel::TextInput::render()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
text_object.setColorText(&*color_text);
|
text_object.setColorText(&*color_text);
|
||||||
text_object.set(getValue());
|
float x, y;
|
||||||
|
std::string t = getValue();
|
||||||
|
resource::font::base.stringSize(t, &x, &y);
|
||||||
|
if (x + 5 > bb.getBorderBox().width)
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
resource::font::base.stringSize(t, &x, &y);
|
||||||
|
if (x + 13 > bb.getBorderBox().width)
|
||||||
|
{
|
||||||
|
t = t.substr(0, t.size() - 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
t.append("..");
|
||||||
|
}
|
||||||
|
text_object.set(t);
|
||||||
}
|
}
|
||||||
text_object.render();
|
text_object.render();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user