add 'min-length' panel property

This commit is contained in:
MihailRis 2025-01-18 05:55:02 +03:00
parent 8e8fed2aa2
commit 0ce5e23a2a
6 changed files with 24 additions and 5 deletions

View File

@ -65,6 +65,7 @@ Buttons and panels are also containers.
Buttons are also panels.
- `max-length` - maximal length of panel stretching before scrolling (if scrollable = true). Type: number
- `min-length` - minimal length of panel. Type: number
- `orientation` - panel orientation: horizontal/vertical.
# Common elements

View File

@ -67,6 +67,7 @@
В число панелей также входят кнопки.
- `max-length` - максимальная длина, на которую растягивается панель до начала скроллинга (если scrollable = true). Тип: число
- `min-length` - минимальная длина панели. Тип: число
- `orientation` - ориентация панели: horizontal/vertical.
# Основные элементы

View File

@ -23,6 +23,14 @@ int Panel::getMaxLength() const {
return maxLength;
}
void Panel::setMinLength(int value) {
minLength = value;
}
int Panel::getMinLength() const {
return minLength;
}
void Panel::setPadding(glm::vec4 padding) {
this->padding = padding;
refresh();
@ -34,9 +42,11 @@ glm::vec4 Panel::getPadding() const {
void Panel::cropToContent() {
if (maxLength > 0.0f) {
setSize(glm::vec2(getSize().x, glm::min(maxLength, actualLength)));
setSize(glm::vec2(
getSize().x, glm::max(minLength, glm::min(maxLength, actualLength))
));
} else {
setSize(glm::vec2(getSize().x, actualLength));
setSize(glm::vec2(getSize().x, glm::max(minLength, actualLength)));
}
}

View File

@ -9,6 +9,7 @@ namespace gui {
Orientation orientation = Orientation::vertical;
glm::vec4 padding {2.0f};
float interval = 2.0f;
int minLength = 0;
int maxLength = 0;
public:
Panel(
@ -31,6 +32,9 @@ namespace gui {
virtual void setMaxLength(int value);
int getMaxLength() const;
virtual void setMinLength(int value);
int getMinLength() const;
virtual void setPadding(glm::vec4 padding);
glm::vec4 getPadding() const;
};

View File

@ -289,12 +289,12 @@ const std::string& UINode::getId() const {
}
void UINode::reposition() {
if (positionfunc) {
setPos(positionfunc());
}
if (sizefunc) {
setSize(sizefunc());
}
if (positionfunc) {
setPos(positionfunc());
}
}
void UINode::setGravity(Gravity gravity) {

View File

@ -220,6 +220,9 @@ static void _readPanel(UiXmlReader& reader, const xml::xmlelement& element, Pane
if (element.has("max-length")) {
panel.setMaxLength(element.attr("max-length").asInt());
}
if (element.has("min-length")) {
panel.setMinLength(element.attr("min-length").asInt());
}
if (element.has("orientation")) {
auto &oname = element.attr("orientation").getText();
if (oname == "horizontal") {