@@ -361,106 +361,173 @@ void UIModding::setLayout(CCNode* node, matjson::Value attributes) {
361361
362362 matjson::Value layoutValue = attributes[" layout" ];
363363 if (layoutValue.isObject ()) {
364- AxisLayout * layout;
364+ Layout * layout;
365365
366366 if (node->getLayout ()) {
367- layout = typeinfo_cast<AxisLayout*>(node->getLayout ());
368- if (layoutValue.contains (" remove" )) {
369- matjson::Value removeValue = layoutValue[" remove" ];
370- if (removeValue.isBool ()) {
371- node->setLayout (nullptr );
367+ if (auto layout = typeinfo_cast<AxisLayout*>(node->getLayout ())) {
368+ if (layoutValue.contains (" remove" )) {
369+ matjson::Value removeValue = layoutValue[" remove" ];
370+ if (removeValue.isBool ()) {
371+ node->setLayout (nullptr );
372+ }
373+ }
374+ }
375+ if (auto layout = typeinfo_cast<SimpleAxisLayout*>(node->getLayout ())) {
376+ if (layoutValue.contains (" remove" )) {
377+ matjson::Value removeValue = layoutValue[" remove" ];
378+ if (removeValue.isBool ()) {
379+ node->setLayout (nullptr );
380+ }
372381 }
373382 }
374383 }
375384 else {
376- layout = AxisLayout ::create ();
385+ layout = SimpleAxisLayout ::create (Axis::Row );
377386 node->setLayout (layout);
378387 }
379- if (layout) {
388+ if (auto simpleAxisLayout = typeinfo_cast<SimpleAxisLayout*>(layout)) {
389+ if (layoutValue.contains (" axis" )) {
390+ matjson::Value axisValue = layoutValue[" axis" ];
391+ if (axisValue.isString ()) {
392+ std::string axis = axisValue.asString ().unwrapOr (" " );
393+ if (axis == " row" ) {
394+ simpleAxisLayout->setAxis (Axis::Row);
395+ }
396+ else if (axis == " column" ) {
397+ simpleAxisLayout->setAxis (Axis::Column);
398+ }
399+ }
400+ }
401+ if (layoutValue.contains (" flip-axis" )) {
402+ matjson::Value flipAxisValue = layoutValue[" flip-axis" ];
403+ if (flipAxisValue.isBool ()) {
404+ bool flipAxis = flipAxisValue.asBool ().unwrapOr (false );
405+ simpleAxisLayout->setMainAxisDirection (AxisDirection::RightToLeft);
406+ }
407+ }
408+ if (layoutValue.contains (" ignore-invisible" )) {
409+ matjson::Value ignoreInvisibleValue = layoutValue[" ignore-invisible" ];
410+ if (ignoreInvisibleValue.isBool ()) {
411+ bool ignoreInvisible = ignoreInvisibleValue.asBool ().unwrapOr (false );
412+ simpleAxisLayout->ignoreInvisibleChildren (ignoreInvisible);
413+ }
414+ }
415+ if (layoutValue.contains (" flip-cross-axis" )) {
416+ matjson::Value flipCrossAxisValue = layoutValue[" flip-cross-axis" ];
417+ if (flipCrossAxisValue.isBool ()) {
418+ bool flipCrossAxis = flipCrossAxisValue.asBool ().unwrapOr (false );
419+ simpleAxisLayout->setCrossAxisDirection (AxisDirection::RightToLeft);
420+ }
421+ }
422+ if (layoutValue.contains (" gap" )) {
423+ matjson::Value gapValue = layoutValue[" gap" ];
424+ if (gapValue.isNumber ()) {
425+ float gap = gapValue.asDouble ().unwrapOr (0 );
426+ simpleAxisLayout->setGap (gap);
427+ }
428+ }
429+ if (layoutValue.contains (" axis-alignment" )) {
430+ matjson::Value axisAlignmentValue = layoutValue[" axis-alignment" ];
431+ if (axisAlignmentValue.isString ()) {
432+ std::string axisAlignmentStr = axisAlignmentValue.asString ().unwrapOr (" " );
433+ MainAxisAlignment axisAlignment = getSimpleMainAxisAlignment (axisAlignmentStr);
434+ simpleAxisLayout->setMainAxisAlignment (axisAlignment);
435+ }
436+ }
437+ if (layoutValue.contains (" cross-axis-alignment" )) {
438+ matjson::Value crossAxisAlignmentValue = layoutValue[" cross-axis-alignment" ];
439+ if (crossAxisAlignmentValue.isString ()) {
440+ std::string crossAxisAlignmentStr = crossAxisAlignmentValue.asString ().unwrapOr (" " );
441+ CrossAxisAlignment axisAlignment = getSimpleCrossAxisAlignment (crossAxisAlignmentStr);
442+ simpleAxisLayout->setCrossAxisAlignment (axisAlignment);
443+ }
444+ }
445+ }
446+ if (auto axisLayout = typeinfo_cast<AxisLayout*>(layout)) {
380447
381448 if (layoutValue.contains (" axis" )) {
382449 matjson::Value axisValue = layoutValue[" axis" ];
383450 if (axisValue.isString ()) {
384451 std::string axis = axisValue.asString ().unwrapOr (" " );
385452 if (axis == " row" ) {
386- layout ->setAxis (Axis::Row);
453+ axisLayout ->setAxis (Axis::Row);
387454 }
388455 else if (axis == " column" ) {
389- layout ->setAxis (Axis::Column);
456+ axisLayout ->setAxis (Axis::Column);
390457 }
391458 }
392459 }
393460 if (layoutValue.contains (" flip-axis" )) {
394461 matjson::Value flipAxisValue = layoutValue[" flip-axis" ];
395462 if (flipAxisValue.isBool ()) {
396463 bool flipAxis = flipAxisValue.asBool ().unwrapOr (false );
397- layout ->setAxisReverse (flipAxis);
464+ axisLayout ->setAxisReverse (flipAxis);
398465 }
399466 }
400467 if (layoutValue.contains (" ignore-invisible" )) {
401468 matjson::Value ignoreInvisibleValue = layoutValue[" ignore-invisible" ];
402469 if (ignoreInvisibleValue.isBool ()) {
403470 bool ignoreInvisible = ignoreInvisibleValue.asBool ().unwrapOr (false );
404- layout ->ignoreInvisibleChildren (ignoreInvisible);
471+ axisLayout ->ignoreInvisibleChildren (ignoreInvisible);
405472 }
406473 }
407474 if (layoutValue.contains (" flip-cross-axis" )) {
408475 matjson::Value flipCrossAxisValue = layoutValue[" flip-cross-axis" ];
409476 if (flipCrossAxisValue.isBool ()) {
410477 bool flipCrossAxis = flipCrossAxisValue.asBool ().unwrapOr (false );
411- layout ->setCrossAxisReverse (flipCrossAxis);
478+ axisLayout ->setCrossAxisReverse (flipCrossAxis);
412479 }
413480 }
414481 if (layoutValue.contains (" auto-scale" )) {
415482 matjson::Value autoScaleValue = layoutValue[" auto-scale" ];
416483 if (autoScaleValue.isBool ()) {
417484 bool autoScale = autoScaleValue.asBool ().unwrapOr (false );
418- layout ->setAutoScale (autoScale);
485+ axisLayout ->setAutoScale (autoScale);
419486 }
420487 }
421488 if (layoutValue.contains (" grow-cross-axis" )) {
422489 matjson::Value growCrossAxisValue = layoutValue[" grow-cross-axis" ];
423490 if (growCrossAxisValue.isBool ()) {
424491 bool growCrossAxis = growCrossAxisValue.asBool ().unwrapOr (false );
425- layout ->setGrowCrossAxis (growCrossAxis);
492+ axisLayout ->setGrowCrossAxis (growCrossAxis);
426493 }
427494 }
428495 if (layoutValue.contains (" allow-cross-axis-overflow" )) {
429496 matjson::Value allowCrossAxisOverflowValue = layoutValue[" allow-cross-axis-overflow" ];
430497 if (allowCrossAxisOverflowValue.isBool ()) {
431498 bool allowCrossAxisOverflow = allowCrossAxisOverflowValue.asBool ().unwrapOr (false );
432- layout ->setCrossAxisOverflow (allowCrossAxisOverflow);
499+ axisLayout ->setCrossAxisOverflow (allowCrossAxisOverflow);
433500 }
434501 }
435502 if (layoutValue.contains (" gap" )) {
436503 matjson::Value gapValue = layoutValue[" gap" ];
437504 if (gapValue.isNumber ()) {
438505 float gap = gapValue.asDouble ().unwrapOr (0 );
439- layout ->setGap (gap);
506+ axisLayout ->setGap (gap);
440507 }
441508 }
442509 if (layoutValue.contains (" axis-alignment" )) {
443510 matjson::Value axisAlignmentValue = layoutValue[" axis-alignment" ];
444511 if (axisAlignmentValue.isString ()) {
445512 std::string axisAlignmentStr = axisAlignmentValue.asString ().unwrapOr (" " );
446513 AxisAlignment axisAlignment = getAxisAlignment (axisAlignmentStr);
447- layout ->setAxisAlignment (axisAlignment);
514+ axisLayout ->setAxisAlignment (axisAlignment);
448515 }
449516 }
450517 if (layoutValue.contains (" cross-axis-alignment" )) {
451518 matjson::Value crossAxisAlignmentValue = layoutValue[" cross-axis-alignment" ];
452519 if (crossAxisAlignmentValue.isString ()) {
453520 std::string crossAxisAlignmentStr = crossAxisAlignmentValue.asString ().unwrapOr (" " );
454521 AxisAlignment axisAlignment = getAxisAlignment (crossAxisAlignmentStr);
455- layout ->setCrossAxisAlignment (axisAlignment);
522+ axisLayout ->setCrossAxisAlignment (axisAlignment);
456523 }
457524 }
458525 if (layoutValue.contains (" cross-axis-line-alignment" )) {
459526 matjson::Value crossAxisLineAlignmentValue = layoutValue[" cross-axis-line-alignment" ];
460527 if (crossAxisLineAlignmentValue.isString ()) {
461528 std::string crossAxisLineAlignmentStr = crossAxisLineAlignmentValue.asString ().unwrapOr (" " );
462529 AxisAlignment axisAlignment = getAxisAlignment (crossAxisLineAlignmentStr);
463- layout ->setCrossAxisLineAlignment (axisAlignment);
530+ axisLayout ->setCrossAxisLineAlignment (axisAlignment);
464531 }
465532 }
466533 }
@@ -1675,6 +1742,43 @@ AxisAlignment UIModding::getAxisAlignment(std::string name) {
16751742 return axisAlignment;
16761743}
16771744
1745+ MainAxisAlignment UIModding::getSimpleMainAxisAlignment (std::string name) {
1746+ MainAxisAlignment axisAlignment = MainAxisAlignment::Start;
1747+ if (name == " start" ) {
1748+ axisAlignment = MainAxisAlignment::Start;
1749+ }
1750+ if (name == " center" ) {
1751+ axisAlignment = MainAxisAlignment::Center;
1752+ }
1753+ if (name == " end" ) {
1754+ axisAlignment = MainAxisAlignment::End;
1755+ }
1756+ if (name == " even" ) {
1757+ axisAlignment = MainAxisAlignment::Even;
1758+ }
1759+ if (name == " between" ) {
1760+ axisAlignment = MainAxisAlignment::Between;
1761+ }
1762+ if (name == " around" ) {
1763+ axisAlignment = MainAxisAlignment::Around;
1764+ }
1765+ return axisAlignment;
1766+ }
1767+
1768+ CrossAxisAlignment UIModding::getSimpleCrossAxisAlignment (std::string name) {
1769+ CrossAxisAlignment axisAlignment = CrossAxisAlignment::Start;
1770+ if (name == " start" ) {
1771+ axisAlignment = CrossAxisAlignment::Start;
1772+ }
1773+ if (name == " center" ) {
1774+ axisAlignment = CrossAxisAlignment::Center;
1775+ }
1776+ if (name == " end" ) {
1777+ axisAlignment = CrossAxisAlignment::End;
1778+ }
1779+ return axisAlignment;
1780+ }
1781+
16781782void UIModding::loadNodeFiles () {
16791783 std::vector<std::filesystem::path> packs = Utils::getActivePacks ();
16801784 for (std::filesystem::path path : packs) {
0 commit comments