Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ad37cd3b authored by Romain Guy's avatar Romain Guy
Browse files

Fix disappearing edges in lists/scrollviews/etc.

Bug #4093871

This bug was introduced by a change that modified the way fade areas
are cleared. The previous change relied on Rect::intersect() to empty
the intersected rect when the two rects don't intersect. Unfortunately
this is not what intersect() does. The fix is rather simple and
sets the layer's bounds to empty when they don't intersect with the
clip or the viewport. This has the side effect of ignoring the layer
which is the expected result.

Change-Id: Icf0038b9a476c53f8eff7084136aba3033d093e6
parent 57fccf12
Loading
Loading
Loading
Loading
+13 −9
Original line number Original line Diff line number Diff line
@@ -407,15 +407,19 @@ bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top,
        mSnapshot->transform->mapRect(bounds);
        mSnapshot->transform->mapRect(bounds);


        // Layers only make sense if they are in the framebuffer's bounds
        // Layers only make sense if they are in the framebuffer's bounds
        bounds.intersect(*snapshot->clipRect);
        if (bounds.intersect(*snapshot->clipRect)) {

            // We cannot work with sub-pixels in this case
            // We cannot work with sub-pixels in this case
            bounds.snapToPixelBoundaries();
            bounds.snapToPixelBoundaries();


            // When the layer is not an FBO, we may use glCopyTexImage so we
            // When the layer is not an FBO, we may use glCopyTexImage so we
            // need to make sure the layer does not extend outside the bounds
            // need to make sure the layer does not extend outside the bounds
            // of the framebuffer
            // of the framebuffer
        bounds.intersect(snapshot->previous->viewport);
            if (!bounds.intersect(snapshot->previous->viewport)) {
                bounds.setEmpty();
            }
        } else {
            bounds.setEmpty();
        }
    }
    }


    if (bounds.isEmpty() || bounds.getWidth() > mCaches.maxTextureSize ||
    if (bounds.isEmpty() || bounds.getWidth() > mCaches.maxTextureSize ||