Skip to content

Commit

Permalink
Added panel header margin
Browse files Browse the repository at this point in the history
  • Loading branch information
eduardodoria committed Jul 7, 2024
1 parent bf4ea2d commit 74cf061
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 19 deletions.
9 changes: 8 additions & 1 deletion engine/core/component/PanelComponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,18 @@ namespace Supernova{
int minWidth = 0;
int minHeight = 0;

int headerMarginLeft = 0;
int headerMarginTop = 0;
int headerMarginRight = 0;
int headerMarginBottom = 0;

bool defaultHeaderMargin = true;

int resizeMargin = 5;

bool canMove = true;
bool canResize = true;
bool canTopOnFocus = true;
bool canBringToFront = true;

bool headerPointerDown = false;
PanelEdge edgePointerDown = PanelEdge::NONE;
Expand Down
84 changes: 78 additions & 6 deletions engine/core/object/ui/Panel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,78 @@ void Panel::setHeaderTexture(std::string path){
getHeaderImageObject().setTexture(path);
}

void Panel::setHeaderMargin(int left, int top, int right, int bottom){
PanelComponent& panelcomp = getComponent<PanelComponent>();

panelcomp.headerMarginLeft = left;
panelcomp.headerMarginTop = top;
panelcomp.headerMarginRight = right;
panelcomp.headerMarginBottom = bottom;

panelcomp.defaultHeaderMargin = false;
panelcomp.needUpdatePanel = true;
}

void Panel::setHeaderMarginLeft(int left){
PanelComponent& panelcomp = getComponent<PanelComponent>();

panelcomp.headerMarginLeft = left;

panelcomp.defaultHeaderMargin = false;
panelcomp.needUpdatePanel = true;
}

int Panel::getHeaderMarginLeft() const{
PanelComponent& panelcomp = getComponent<PanelComponent>();

return panelcomp.headerMarginLeft;
}

void Panel::setHeaderMarginTop(int top){
PanelComponent& panelcomp = getComponent<PanelComponent>();

panelcomp.headerMarginTop = top;

panelcomp.defaultHeaderMargin = false;
panelcomp.needUpdatePanel = true;
}

int Panel::getHeaderMarginTop() const{
PanelComponent& panelcomp = getComponent<PanelComponent>();

return panelcomp.headerMarginTop;
}

void Panel::setHeaderMarginRight(int right){
PanelComponent& panelcomp = getComponent<PanelComponent>();

panelcomp.headerMarginRight = right;

panelcomp.defaultHeaderMargin = false;
panelcomp.needUpdatePanel = true;
}

int Panel::getHeaderMarginRight() const{
PanelComponent& panelcomp = getComponent<PanelComponent>();

return panelcomp.headerMarginRight;
}

void Panel::setHeaderMarginBottom(int bottom){
PanelComponent& panelcomp = getComponent<PanelComponent>();

panelcomp.headerMarginBottom = bottom;

panelcomp.defaultHeaderMargin = false;
panelcomp.needUpdatePanel = true;
}

int Panel::getHeaderMarginBottom() const{
PanelComponent& panelcomp = getComponent<PanelComponent>();

return panelcomp.headerMarginBottom;
}

void Panel::setMinSize(int minWidth, int minHeight){
PanelComponent& panelcomp = getComponent<PanelComponent>();

Expand Down Expand Up @@ -190,11 +262,11 @@ int Panel::getResizeMargin() const{
return panelcomp.resizeMargin;
}

void Panel::setWindowProperties(const bool canMove, const bool canResize, const bool canTopOnFocus){
void Panel::setWindowProperties(const bool canMove, const bool canResize, const bool canBringToFront){
PanelComponent& panelcomp = getComponent<PanelComponent>();
panelcomp.canMove = canMove;
panelcomp.canResize = canResize;
panelcomp.canTopOnFocus = canTopOnFocus;
panelcomp.canBringToFront = canBringToFront;
}

void Panel::setCanMove(const bool canMove){
Expand All @@ -217,12 +289,12 @@ bool Panel::isCanResize() const{
return panelcomp.canResize;
}

void Panel::setCanTopOnFocus(const bool canTopOnFocus){
void Panel::setCanBringToFront(const bool canBringToFront){
PanelComponent& panelcomp = getComponent<PanelComponent>();
panelcomp.canTopOnFocus = canTopOnFocus;
panelcomp.canBringToFront = canBringToFront;
}

bool Panel::isCanTopOnFocus() const{
bool Panel::isCanBringToFront() const{
PanelComponent& panelcomp = getComponent<PanelComponent>();
return panelcomp.canTopOnFocus;
return panelcomp.canBringToFront;
}
20 changes: 17 additions & 3 deletions engine/core/object/ui/Panel.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,20 @@ namespace Supernova{
void setHeaderPatchMargin(int margin);
void setHeaderTexture(std::string path);

void setHeaderMargin(int left, int top, int right, int bottom);

void setHeaderMarginLeft(int left);
int getHeaderMarginLeft() const;

void setHeaderMarginTop(int top);
int getHeaderMarginTop() const;

void setHeaderMarginRight(int right);
int getHeaderMarginRight() const;

void setHeaderMarginBottom(int bottom);
int getHeaderMarginBottom() const;

void setMinSize(int minWidth, int minHeight);
void setMinWidth(int minWidth);
void setMinHeight(int minHeight);
Expand All @@ -52,16 +66,16 @@ namespace Supernova{
void setResizeMargin(int resizeMargin);
int getResizeMargin() const;

void setWindowProperties(const bool canMove, const bool canResize, const bool canTopOnFocus);
void setWindowProperties(const bool canMove, const bool canResize, const bool canBringToFront);

void setCanMove(const bool canMove);
bool isCanMove() const;

void setCanResize(const bool canResize);
bool isCanResize() const;

void setCanTopOnFocus(const bool canTopOnFocus);
bool isCanTopOnFocus() const;
void setCanBringToFront(const bool canBringToFront);
bool isCanBringToFront() const;
};
}

Expand Down
2 changes: 1 addition & 1 deletion engine/core/script/binding/ECSClassesLua.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ void LuaBinding::registerECSClasses(lua_State *L){
.addProperty("resizeMargin", &PanelComponent::resizeMargin)
.addProperty("canMove", &PanelComponent::canMove)
.addProperty("canResize", &PanelComponent::canResize)
.addProperty("canTopOnFocus", &PanelComponent::canTopOnFocus)
.addProperty("canBringToFront", &PanelComponent::canBringToFront)
.addProperty("headerPointerDown", &PanelComponent::headerPointerDown)
.addProperty("onMove", [] (PanelComponent* self, lua_State* L) { return &self->onMove; }, [] (PanelComponent* self, lua_State* L) { self->onMove = L; })
.addProperty("onResize", [] (PanelComponent* self, lua_State* L) { return &self->onResize; }, [] (PanelComponent* self, lua_State* L) { self->onResize = L; })
Expand Down
7 changes: 6 additions & 1 deletion engine/core/script/binding/ObjectClassesLua.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -650,14 +650,19 @@ void LuaBinding::registerObjectClasses(lua_State *L){
.addFunction("setHeaderColor", (void(Panel::*)(const float, const float, const float, const float))&Panel::setHeaderColor)
.addFunction("setHeaderPatchMargin", &Panel::setHeaderPatchMargin)
.addFunction("setHeaderTexture", &Panel::setHeaderTexture)
.addFunction("setHeaderMargin", &Panel::setHeaderMargin)
.addProperty("headerMarginLeft", &Panel::getHeaderMarginLeft, &Panel::setHeaderMarginLeft)
.addProperty("headerMarginTop", &Panel::getHeaderMarginTop, &Panel::setHeaderMarginTop)
.addProperty("headerMarginRight", &Panel::getHeaderMarginRight, &Panel::setHeaderMarginRight)
.addProperty("headerMarginBottom", &Panel::getHeaderMarginBottom, &Panel::setHeaderMarginBottom)
.addFunction("setMinSize", &Panel::setMinSize)
.addProperty("minWidth", &Panel::getMinWidth, &Panel::setMinWidth)
.addProperty("minHeight", &Panel::getMinHeight, &Panel::setMinHeight)
.addProperty("resizeMargin", &Panel::getResizeMargin, &Panel::setResizeMargin)
.addFunction("setWindowProperties", &Panel::setWindowProperties)
.addProperty("canMove", &Panel::isCanMove, &Panel::setCanMove)
.addProperty("canResize", &Panel::isCanResize, &Panel::setCanResize)
.addProperty("canTopOnFocus", &Panel::isCanTopOnFocus, &Panel::setCanTopOnFocus)
.addProperty("canBringToFront", &Panel::isCanBringToFront, &Panel::setCanBringToFront)
.addFunction("getPanelComponent", &Panel::getComponent<PanelComponent>)
.endClass();

Expand Down
28 changes: 21 additions & 7 deletions engine/core/subsystem/UISystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -294,9 +294,13 @@ void UISystem::createPanelObjects(Entity entity, PanelComponent& panel){

headerui.color = Vector4(0, 0, 0, 0);
headerimagelayout.ignoreEvents = true;
headerimagelayout.anchorPreset = AnchorPreset::TOP_WIDE;
headerimagelayout.ignoreScissor = true;
headerimagelayout.usingAnchors = true;
// same of TOP_WIDE
headerimagelayout.anchorPointLeft = 0;
headerimagelayout.anchorPointTop = 0;
headerimagelayout.anchorPointRight = 1;
headerimagelayout.anchorPointBottom = 0;
}
if (panel.headercontainer == NULL_ENTITY){
panel.headercontainer = scene->createEntity();
Expand Down Expand Up @@ -436,19 +440,29 @@ void UISystem::updatePanel(Entity entity, PanelComponent& panel, ImageComponent&

UILayoutComponent& headerimagelayout = scene->getComponent<UILayoutComponent>(panel.headerimage);

headerimagelayout.height = img.patchMarginTop - panel.resizeMargin;
if (panel.defaultHeaderMargin){
panel.headerMarginLeft = img.patchMarginLeft;
panel.headerMarginRight = img.patchMarginRight;
panel.headerMarginTop = img.patchMarginBottom;
panel.headerMarginBottom = img.patchMarginBottom;
}

headerimagelayout.anchorOffsetLeft = panel.headerMarginLeft;
headerimagelayout.anchorOffsetTop = panel.headerMarginTop;
headerimagelayout.anchorOffsetRight = -panel.headerMarginRight;
headerimagelayout.anchorOffsetBottom = img.patchMarginTop - panel.headerMarginBottom;

if (panel.minWidth > layout.width){
panel.minWidth = layout.width;
}
if (panel.minHeight > layout.height){
panel.minHeight = layout.height;
}
if (panel.minWidth < (img.patchMarginLeft + img.patchMarginRight)){
panel.minWidth = img.patchMarginLeft + img.patchMarginRight;
if (panel.minWidth < (img.patchMarginLeft + img.patchMarginRight + 1)){
panel.minWidth = img.patchMarginLeft + img.patchMarginRight + 1;
}
if (panel.minHeight < (img.patchMarginTop + img.patchMarginBottom)){
panel.minHeight = img.patchMarginTop + img.patchMarginBottom;
if (panel.minHeight < (img.patchMarginTop + img.patchMarginBottom + 1)){
panel.minHeight = img.patchMarginTop + img.patchMarginBottom + 1;
}

UILayoutComponent& titlelayout = scene->getComponent<UILayoutComponent>(panel.headertext);
Expand Down Expand Up @@ -1631,7 +1645,7 @@ bool UISystem::eventOnPointerDown(float x, float y){
if (lastPanelFromPointer != NULL_ENTITY){
PanelComponent& panel = scene->getComponent<PanelComponent>(lastPanelFromPointer);

if (panel.canTopOnFocus){
if (panel.canBringToFront){
scene->moveChildToTop(lastPanelFromPointer);
}
}
Expand Down

0 comments on commit 74cf061

Please sign in to comment.