Loading editor/widgets/container/container.cpp +14 −1 Original line number Diff line number Diff line Loading @@ -1254,8 +1254,21 @@ extern "C" { " line-height: 0; pointer-events: none;"; dividerStyle += (pos == "top") ? " top: 0;" : " bottom: 0;"; if (!shapeDividerHeight.empty()) dividerStyle += " height: " + shapeDividerHeight + ";"; // Position and flip must be independent axis mirrors, not // rotate(180deg) + scaleX(-1): since rotate(180deg) is itself // equivalent to scaleX(-1) scaleY(-1), combining it with an // extra scaleX(-1) for "flip" always cancels the horizontal // component back out (diagonal transforms commute), leaving // only a vertical flip regardless of transform order -- so the // "mirror" checkbox silently did nothing (or the wrong thing) // whenever position was "top". Using scaleY(-1) for the top // position instead of rotate(180deg) gives the same baseline // look (identical for left-right-symmetric shapes, and the // intended vertical flip for asymmetric ones) while composing // cleanly with scaleX(-1): top+flip now yields a true combined // 180-degree-equivalent flip instead of cancelling. std::string transform; if (pos == "top") transform += "rotate(180deg) "; if (pos == "top") transform += "scaleY(-1) "; if (shapeDividerFlip) transform += "scaleX(-1) "; if (!transform.empty()) dividerStyle += " transform: " + transform + ";"; Loading Loading
editor/widgets/container/container.cpp +14 −1 Original line number Diff line number Diff line Loading @@ -1254,8 +1254,21 @@ extern "C" { " line-height: 0; pointer-events: none;"; dividerStyle += (pos == "top") ? " top: 0;" : " bottom: 0;"; if (!shapeDividerHeight.empty()) dividerStyle += " height: " + shapeDividerHeight + ";"; // Position and flip must be independent axis mirrors, not // rotate(180deg) + scaleX(-1): since rotate(180deg) is itself // equivalent to scaleX(-1) scaleY(-1), combining it with an // extra scaleX(-1) for "flip" always cancels the horizontal // component back out (diagonal transforms commute), leaving // only a vertical flip regardless of transform order -- so the // "mirror" checkbox silently did nothing (or the wrong thing) // whenever position was "top". Using scaleY(-1) for the top // position instead of rotate(180deg) gives the same baseline // look (identical for left-right-symmetric shapes, and the // intended vertical flip for asymmetric ones) while composing // cleanly with scaleX(-1): top+flip now yields a true combined // 180-degree-equivalent flip instead of cancelling. std::string transform; if (pos == "top") transform += "rotate(180deg) "; if (pos == "top") transform += "scaleY(-1) "; if (shapeDividerFlip) transform += "scaleX(-1) "; if (!transform.empty()) dividerStyle += " transform: " + transform + ";"; Loading