Lagrange [dev]

SDL 2.0.16 line drawing regression (OpenGL renderer)

=> 20f118801d8b18b0dd77ae35c8049ca5d6d9ad44

diff --git a/src/macos.m b/src/macos.m
index 6bec3c12..d588fa4a 100644
--- a/src/macos.m
+++ b/src/macos.m
@@ -60,6 +60,7 @@ static NSString *currentSystemAppearance_(void) {
 }
 
 iBool shouldDefaultToMetalRenderer_MacOS(void) {
+    /* TODO: Test if SDL 2.0.16 works better (no stutters with Metal?). */
     return iFalse; /*
     const iInt2 ver = macVer_();
     return ver.x > 10 || ver.y > 13;*/
diff --git a/src/ui/labelwidget.c b/src/ui/labelwidget.c
index d6cc31cb..edc36a49 100644
--- a/src/ui/labelwidget.c
+++ b/src/ui/labelwidget.c
@@ -300,14 +300,15 @@ static void draw_LabelWidget_(const iLabelWidget *d) {
                 bottomLeft_Rect(frameRect),
                 topLeft_Rect(frameRect),
                 topRight_Rect(frameRect),
-#if SDL_VERSION_ATLEAST(2, 0, 16) && defined (iPlatformApple)
-                /* A very curious regression in SDL 2.0.16 on macOS. */
-                addX_I2(bottomRight_Rect(frameRect), -1),
-#else
                 bottomRight_Rect(frameRect),
-#endif
                 bottomLeft_Rect(frameRect)
             };
+#if SDL_VERSION_ATLEAST(2, 0, 16)
+            if (isOpenGLRenderer_Window()) {
+                /* A very curious regression in SDL 2.0.16. */
+                points[3].x--;    
+            }
+#endif
             drawLines_Paint(&p, points + 2, 3, frame2);
             drawLines_Paint(
                 &p, points, !isHover && flags & d->flags.noTopFrame ? 2 : 3, frame);
diff --git a/src/ui/paint.c b/src/ui/paint.c
index 869238d5..79adb7d1 100644
--- a/src/ui/paint.c
+++ b/src/ui/paint.c
@@ -89,17 +89,19 @@ void drawRect_Paint(const iPaint *d, iRect rect, int color) {
     /* Keep the right/bottom edge visible in the window. */
     if (br.x == d->dst->size.x) br.x--;
     if (br.y == d->dst->size.y) br.y--;
-    const SDL_Point edges[] = {
+    SDL_Point edges[] = {
         { left_Rect(rect),  top_Rect(rect) },
         { br.x,             top_Rect(rect) },
         { br.x,             br.y },
-#if SDL_VERSION_ATLEAST(2, 0, 16) && defined (iPlatformApple)
-        { left_Rect(rect),  br.y - 1 }, /* regression in SDL 2.0.16? */
-#else
         { left_Rect(rect),  br.y },
-#endif
         { left_Rect(rect),  top_Rect(rect) }
     };
+#if SDL_VERSION_ATLEAST(2, 0, 16)
+    if (isOpenGLRenderer_Window()) {
+        /* A very curious regression in SDL 2.0.16. */
+        edges[3].y--;
+    }
+#endif
     setColor_Paint_(d, color);
     SDL_RenderDrawLines(renderer_Paint_(d), edges, iElemCount(edges));
 }
diff --git a/src/ui/window.c b/src/ui/window.c
index 6b8abb4d..86d22b1c 100644
--- a/src/ui/window.c
+++ b/src/ui/window.c
@@ -65,6 +65,8 @@ static float initialUiScale_ = 1.0f;
 static float initialUiScale_ = 1.1f;
 #endif
 
+static iBool isOpenGLRenderer_;
+
 iDefineTypeConstructionArgs(Window, (iRect rect), rect)
 
 /* TODO: Define menus per platform. */
@@ -446,6 +448,7 @@ void init_Window(iWindow *d, iRect rect) {
     /* Some info. */ {
         SDL_RendererInfo info;
         SDL_GetRendererInfo(d->render, &info);
+        isOpenGLRenderer_ = !iCmpStr(info.name, "opengl");
         printf("[window] renderer: %s%s\n", info.name,
                info.flags & SDL_RENDERER_ACCELERATED ? " (accelerated)" : "");
 #if !defined (NDEBUG)
@@ -1187,6 +1190,10 @@ iWindow *get_Window(void) {
     return theWindow_;
 }
 
+iBool isOpenGLRenderer_Window(void) {
+    return isOpenGLRenderer_;
+}
+
 void setKeyboardHeight_Window(iWindow *d, int height) {
     if (d->keyboardHeight != height) {
         d->keyboardHeight = height;
diff --git a/src/ui/window.h b/src/ui/window.h
index bb98dbe9..63f7e5f2 100644
--- a/src/ui/window.h
+++ b/src/ui/window.h
@@ -137,6 +137,8 @@ iRoot *     findRoot_Window         (const iWindow *, const iWidget *widget);
 iRoot *     otherRoot_Window        (const iWindow *, iRoot *root);
 iWindow *   get_Window              (void);
 
+iBool       isOpenGLRenderer_Window (void);
+
 #if defined (LAGRANGE_ENABLE_CUSTOM_FRAME)
 SDL_HitTestResult hitTest_Window(const iWindow *d, iInt2 pos);
 #endif
Proxy Information
Original URL
gemini://git.skyjake.fi/lagrange/dev/cdiff/20f118801d8b18b0dd77ae35c8049ca5d6d9ad44
Status Code
Success (20)
Meta
text/gemini; charset=utf-8
Capsule Response Time
28.271219 milliseconds
Gemini-to-HTML Time
0.420084 milliseconds

This content has been proxied by September (ba2dc).