brush panel folding

This commit is contained in:
2019-02-19 23:29:07 +01:00
parent ccd23cd662
commit 7954e4d900
10 changed files with 101 additions and 34 deletions

View File

@@ -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) };