brush panel folding
This commit is contained in:
36
src/node.cpp
36
src/node.cpp
@@ -445,6 +445,7 @@ Node&& Node::operator=(Node&& o)
|
||||
Node::Node()
|
||||
{
|
||||
y_node = YGNodeNew();
|
||||
y_placeholder = nullptr;
|
||||
}
|
||||
|
||||
Node::Node(Node&& o)
|
||||
@@ -493,6 +494,8 @@ Node::~Node()
|
||||
m_children.clear();
|
||||
if (y_node)
|
||||
YGNodeFree(y_node);
|
||||
if (y_placeholder)
|
||||
YGNodeFree(y_placeholder);
|
||||
}
|
||||
|
||||
void Node::SetWidth(float value)
|
||||
@@ -629,6 +632,39 @@ void Node::SetRTL(YGDirection dir)
|
||||
YGNodeStyleSetDirection(y_node, dir);
|
||||
}
|
||||
|
||||
void Node::SetVisibility(bool visible)
|
||||
{
|
||||
if (m_display && !visible)
|
||||
{
|
||||
// hide
|
||||
int idx = parent->get_child_index(this);
|
||||
YGNodeRemoveChild(parent->y_node, y_node);
|
||||
y_placeholder = YGNodeNew();
|
||||
YGNodeInsertChild(parent->y_node, y_placeholder, idx);
|
||||
}
|
||||
else if (!m_display && visible)
|
||||
{
|
||||
int count = YGNodeGetChildCount(parent->y_node);
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
if (YGNodeGetChild(parent->y_node, i) == y_placeholder)
|
||||
{
|
||||
YGNodeRemoveChild(parent->y_node, y_placeholder);
|
||||
YGNodeInsertChild(parent->y_node, y_node, i);
|
||||
YGNodeFree(y_placeholder);
|
||||
y_placeholder = nullptr;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
m_display = visible;
|
||||
}
|
||||
|
||||
void Node::ToggleVisibility()
|
||||
{
|
||||
SetVisibility(!m_display);
|
||||
}
|
||||
|
||||
glm::vec2 Node::GetPosition()
|
||||
{
|
||||
return{ YGNodeLayoutGetLeft(y_node), YGNodeLayoutGetTop(y_node) };
|
||||
|
||||
Reference in New Issue
Block a user