Skip to content

Commit

Permalink
fix: remove assert in checking ygnode, add get_child_count
Browse files Browse the repository at this point in the history
  • Loading branch information
farism committed Apr 26, 2023
1 parent eaf73e6 commit ef60482
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 41 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,9 @@ All functions take a gui `node` as their first argument. This is used as the loo

`yoga.get_layout_padding(node: node): number`

`yoga.set_capcity(capacity: number): void`
`yoga.set_invert_y(inverted: boolean): void`

`yoga.set_capacity(capacity: number): void`

# LICENSE

Expand Down
8 changes: 1 addition & 7 deletions example/gui.gui_script
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,11 @@ function init(self)
yoga.set_min_height(footer, 50)
yoga.set_margin(footer, yoga.EDGE_TOP, 5)

yoga.set_parent(header, screen)
yoga.set_parent(body, screen)
yoga.set_parent(header, body)
yoga.set_parent(footer, screen)
yoga.calculate_layout(screen)
yoga.update_node(screen)

timer.delay(1, false, function()
-- yoga.delete_node(header)
-- yoga.calculate_layout(screen)
-- yoga.update_node(screen)
end)
end

function final(self)
Expand Down
82 changes: 50 additions & 32 deletions yoga/src/extension.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,6 @@ static YGFlexDirection GetInvertedFlexDirection(YGFlexDirection direction)
return direction;
}

static YGEdge GetInvertedEdge(YGEdge edge)
{
if (g_InvertY && edge == YGEdgeTop)
{
return YGEdgeBottom;
}
else if (g_InvertY && edge == YGEdgeBottom)
{
return YGEdgeTop;
}

return edge;
}

static int SetInvertY(lua_State *L)
{
g_InvertY = lua_toboolean(L, 2);
Expand All @@ -58,7 +44,21 @@ static int SetCapacity(lua_State *L)
return 0;
}

static YGEdge CheckEdge(lua_State *L)
static YGEdge GetInvertedEdge(YGEdge edge)
{
if (g_InvertY && edge == YGEdgeTop)
{
return YGEdgeBottom;
}
else if (g_InvertY && edge == YGEdgeBottom)
{
return YGEdgeTop;
}

return edge;
}

static YGEdge GetEdge(lua_State *L)
{
YGEdge edge = static_cast<YGEdge>(luaL_checkinteger(L, 2));

Expand All @@ -69,7 +69,13 @@ static YGNodeRef CheckYGNode(lua_State *L)
{
dmGui::HNode node = dmGui::LuaCheckNode(L, 1);
YGNodeRef *item = g_YGNodes.Get(node);
assert(*item != NULL);

if (item == NULL || *item == NULL)
{
luaL_error(L, "Could not find YGNodeRef. Was it manually freed?");
return NULL;
}

return *item;
}

Expand Down Expand Up @@ -181,7 +187,7 @@ static int SetPositionType(lua_State *L)
static int GetPosition(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);
YGEdge edge = CheckEdge(L);
YGEdge edge = GetEdge(L);
YGValue value = YGNodeStyleGetPosition(node, edge);
lua_pushnumber(L, value.value);

Expand All @@ -191,7 +197,7 @@ static int GetPosition(lua_State *L)
static int SetPosition(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);
YGEdge edge = CheckEdge(L);
YGEdge edge = GetEdge(L);
float value = luaL_checknumber(L, 3);
YGNodeStyleSetPosition(node, edge, value);

Expand All @@ -201,7 +207,7 @@ static int SetPosition(lua_State *L)
static int SetPositionPercent(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);
YGEdge edge = CheckEdge(L);
YGEdge edge = GetEdge(L);
float value = luaL_checknumber(L, 3);
YGNodeStyleSetPositionPercent(node, edge, value);

Expand Down Expand Up @@ -540,7 +546,7 @@ static int SetWidthHeight(lua_State *L)
static int GetBorder(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);
YGEdge edge = CheckEdge(L);
YGEdge edge = GetEdge(L);
lua_pushnumber(L, YGNodeStyleGetBorder(node, edge));

return 1;
Expand All @@ -549,7 +555,7 @@ static int GetBorder(lua_State *L)
static int SetBorder(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);
YGEdge edge = CheckEdge(L);
YGEdge edge = GetEdge(L);
float value = luaL_checknumber(L, 3);
YGNodeStyleSetBorder(node, edge, value);

Expand All @@ -559,7 +565,7 @@ static int SetBorder(lua_State *L)
static int GetPadding(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);
YGEdge edge = CheckEdge(L);
YGEdge edge = GetEdge(L);
YGValue padding = YGNodeStyleGetPadding(node, edge);
lua_pushnumber(L, padding.value);

Expand All @@ -569,7 +575,7 @@ static int GetPadding(lua_State *L)
static int SetPadding(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);
YGEdge edge = CheckEdge(L);
YGEdge edge = GetEdge(L);
float value = luaL_checknumber(L, 3);
YGNodeStyleSetPadding(node, edge, value);

Expand All @@ -579,7 +585,7 @@ static int SetPadding(lua_State *L)
static int SetPaddingPercent(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);
YGEdge edge = CheckEdge(L);
YGEdge edge = GetEdge(L);
float value = luaL_checknumber(L, 3);
YGNodeStyleSetPaddingPercent(node, edge, value);

Expand All @@ -589,7 +595,7 @@ static int SetPaddingPercent(lua_State *L)
static int GetMargin(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);
YGEdge edge = CheckEdge(L);
YGEdge edge = GetEdge(L);
YGValue margin = YGNodeStyleGetMargin(node, edge);
lua_pushnumber(L, margin.value);

Expand All @@ -599,10 +605,8 @@ static int GetMargin(lua_State *L)
static int SetMargin(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);
YGEdge edge = CheckEdge(L);
// YGEdge edge = static_cast<YGEdge>(luaL_checkinteger(L, 2));
YGEdge edge = GetEdge(L);
float value = luaL_checknumber(L, 3);
printf("setting margin: %d", edge);
YGNodeStyleSetMargin(node, edge, value);

return 0;
Expand All @@ -611,7 +615,7 @@ static int SetMargin(lua_State *L)
static int SetMarginPercent(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);
YGEdge edge = CheckEdge(L);
YGEdge edge = GetEdge(L);
float value = luaL_checknumber(L, 3);
YGNodeStyleSetMarginPercent(node, edge, value);

Expand Down Expand Up @@ -698,7 +702,7 @@ static int GetLayoutHeight(lua_State *L)
static int GetLayoutBorder(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);
YGEdge edge = CheckEdge(L);
YGEdge edge = GetEdge(L);
lua_pushnumber(L, YGNodeLayoutGetBorder(node, edge));

return 1;
Expand All @@ -707,7 +711,7 @@ static int GetLayoutBorder(lua_State *L)
static int GetLayoutMargin(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);
YGEdge edge = CheckEdge(L);
YGEdge edge = GetEdge(L);
lua_pushnumber(L, YGNodeLayoutGetMargin(node, edge));

return 1;
Expand All @@ -716,7 +720,7 @@ static int GetLayoutMargin(lua_State *L)
static int GetLayoutPadding(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);
YGEdge edge = CheckEdge(L);
YGEdge edge = GetEdge(L);
lua_pushnumber(L, YGNodeLayoutGetPadding(node, edge));

return 1;
Expand All @@ -726,6 +730,11 @@ static int GetLayout(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);

if (node == NULL)
{
return 0;
}

lua_newtable(L);

lua_pushstring(L, "x");
Expand Down Expand Up @@ -840,6 +849,14 @@ static int SetParent(lua_State *L)
return 0;
}

static int GetChildCount(lua_State *L)
{
YGNodeRef node = CheckYGNode(L);
lua_pushnumber(L, (lua_Number)YGNodeGetChildCount(node));

return 1;
}

// YGNodeRef YGNodeNewWithConfig(YGConfigRef config);
// YGNodeRef YGNodeClone(YGNodeRef node);
// void YGNodeFreeRecursiveWithCleanupFunc(YGNodeRef node, YGNodeCleanupFunc cleanup);
Expand Down Expand Up @@ -1055,6 +1072,7 @@ static const luaL_reg Module_methods[] =
{"delete_node", DeleteNode},
{"reset_node", ResetNode},
{"set_parent", SetParent},
{"get_child_count", GetChildCount},

{"get_overflow", GetOverflow},
{"set_overflow", SetOverflow},
Expand Down
4 changes: 3 additions & 1 deletion yoga/types/yoga.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,5 +98,7 @@ declare namespace yoga {
export function get_layout_margin(node: node): number
export function get_layout_padding(node: node): number

export function set_capcity(capacity: number): any
export function set_invert_y(inverted: boolean): any

export function set_capacity(capacity: number): any
}

0 comments on commit ef60482

Please sign in to comment.