minor refactor Button

This commit is contained in:
MihailRis 2025-06-26 20:29:38 +03:00
parent ead46158d9
commit f473df33fb
4 changed files with 29 additions and 17 deletions

View File

@ -308,7 +308,7 @@ dv::value Parser::parseObject(dv::value&& object, int indent) {
object[std::string(name)] = parseFullValue(indent); object[std::string(name)] = parseFullValue(indent);
skipEmptyLines(); skipEmptyLines();
} }
return object; return std::move(object);
} }
dv::value yaml::parse(std::string_view filename, std::string_view source) { dv::value yaml::parse(std::string_view filename, std::string_view source) {

View File

@ -34,14 +34,12 @@ Button::Button(
const onaction& action, const onaction& action,
glm::vec2 size glm::vec2 size
) )
: Panel(gui, size, padding, 0) { : Panel(gui, size, padding, 0.0f) {
if (size.y < 0.0f) { if (size.x < 0.0f || size.y < 0.0f) {
size = glm::vec2( setContentSize({text.length() * 8, 16});
glm::max(padding.x + padding.z + text.length() * 8, size.x), } else {
glm::max(padding.y + padding.w + 16, size.y) setSize(size);
);
} }
setSize(size);
if (action) { if (action) {
listenAction(action); listenAction(action);
@ -50,13 +48,12 @@ Button::Button(
label = std::make_shared<Label>(gui, text); label = std::make_shared<Label>(gui, text);
label->setAlign(Align::center); label->setAlign(Align::center);
label->setSize( label->setSize(getContentSize());
size - glm::vec2(padding.z + padding.x, padding.w + padding.y) label->setInteractive(true);
);
label->setInteractive(false);
add(label); add(label);
setHoverColor(glm::vec4(0.05f, 0.1f, 0.15f, 0.75f));
setPressedColor(glm::vec4(0.0f, 0.0f, 0.0f, 0.95f)); setHoverColor({0.05f, 0.1f, 0.15f, 0.75f});
setPressedColor({0.0f, 0.0f, 0.0f, 0.95f});
} }
void Button::setText(std::wstring text) { void Button::setText(std::wstring text) {
@ -82,9 +79,7 @@ Button* Button::textSupplier(wstringsupplier supplier) {
void Button::refresh() { void Button::refresh() {
Panel::refresh(); Panel::refresh();
if (label) { if (label) {
label->setSize( label->setSize(getContentSize());
size - glm::vec2(padding.z + padding.x, padding.w + padding.y)
);
} }
} }

View File

@ -27,6 +27,17 @@ int Panel::getMinLength() const {
return minLength; return minLength;
} }
void Panel::setContentSize(const glm::ivec2& contentSize) {
setSize(glm::vec2(
glm::max(padding.x + padding.z + contentSize.x, size.x),
glm::max(padding.y + padding.w + contentSize.y, size.y)
));
}
glm::vec2 Panel::getContentSize() const {
return size - glm::vec2(padding.z + padding.x, padding.w + padding.y);
}
void Panel::cropToContent() { void Panel::cropToContent() {
if (maxLength > 0.0f) { if (maxLength > 0.0f) {
setSize(glm::vec2( setSize(glm::vec2(

View File

@ -27,6 +27,12 @@ namespace gui {
virtual void setMinLength(int value); virtual void setMinLength(int value);
int getMinLength() const; int getMinLength() const;
/// @brief .setSize wrapper automatically applying padding to size
/// @param size element size excluding padding
void setContentSize(const glm::ivec2& size);
/// @return element size excluding padding
glm::vec2 getContentSize() const;
protected: protected:
int minLength = 0; int minLength = 0;
int maxLength = 0; int maxLength = 0;