From f78db24f496937783d97612ac7ed1e418a99c9b7 Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Fri, 10 Apr 2026 10:32:39 +0300 Subject: [PATCH] Fixed 1 pixel edge bug in GUI --- src/GUIStuff/GUIManager.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/GUIStuff/GUIManager.cpp b/src/GUIStuff/GUIManager.cpp index 00e1419..09e65ea 100644 --- a/src/GUIStuff/GUIManager.cpp +++ b/src/GUIStuff/GUIManager.cpp @@ -1,4 +1,5 @@ #include "GUIManager.hpp" +#include #include #include #include @@ -79,11 +80,18 @@ void GUIManager::calculate_new_clip_rect(std::vector>& c void GUIManager::clip_rect_transform(SkCanvas* canvas, std::vector>& clipRectStack, std::optional>& clipRect, bool& clipNoDraw) { canvas->save(); + // Calculating clip rect before transform should resolve the 1 pixel edge bug + calculate_new_clip_rect(clipRectStack, clipRect, clipNoDraw); + if(clipRect.has_value()) { + SCollision::AABB c = clipRect.value(); + c.min += io.windowPos * io.guiScaleMultiplier; + c.max += io.windowPos * io.guiScaleMultiplier; + c.min *= io.guiScaleMultiplier; + c.max *= io.guiScaleMultiplier; + canvas->clipIRect(c.get_sk_irect()); + } canvas->scale(io.guiScaleMultiplier, io.guiScaleMultiplier); canvas->translate(io.windowPos.x(), io.windowPos.y()); - calculate_new_clip_rect(clipRectStack, clipRect, clipNoDraw); - if(clipRect.has_value()) - canvas->clipIRect(clipRect.value().get_sk_irect()); } void GUIManager::draw(SkCanvas* c, bool skiaAA) {