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

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

Correctly mark layers dirty when drawing WebView.

Change-Id: I7ae0c3cfa0916d8fbeaf01e8da127c621a06a0f4
parent 321dce64
Loading
Loading
Loading
Loading
+15 −10
Original line number Diff line number Diff line
@@ -2447,21 +2447,26 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
                }
                cache = child.getDrawingCache(true);
            } else {
                if (layerType == LAYER_TYPE_SOFTWARE) {
                switch (layerType) {
                    case LAYER_TYPE_SOFTWARE:
                        child.buildDrawingCache(true);
                        cache = child.getDrawingCache(true);
                } else if (layerType == LAYER_TYPE_NONE) {
                        break;
                    case LAYER_TYPE_NONE:
                        // Delay getting the display list until animation-driven alpha values are
                        // set up and possibly passed on to the view
                        hasDisplayList = child.canHaveDisplayList();
                        break;
                }
            }
        }

        final boolean hasNoCache = cache == null || hasDisplayList;
        final boolean offsetForScroll = cache == null && !hasDisplayList &&
                layerType != LAYER_TYPE_HARDWARE;

        final int restoreTo = canvas.save();
        if (cache == null && !hasDisplayList) {
        if (offsetForScroll) {
            canvas.translate(cl - sx, ct - sy);
        } else {
            canvas.translate(cl, ct);
@@ -2477,7 +2482,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
                int transX = 0;
                int transY = 0;

                if (cache == null && !hasDisplayList) {
                if (offsetForScroll) {
                    transX = -sx;
                    transY = -sy;
                }
@@ -2532,7 +2537,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
        }

        if ((flags & FLAG_CLIP_CHILDREN) == FLAG_CLIP_CHILDREN) {
            if (cache == null && !hasDisplayList) {
            if (offsetForScroll) {
                canvas.clipRect(sx, sy, sx + (cr - cl), sy + (cb - ct));
            } else {
                if (!scalingRequired || cache == null) {
+11 −0
Original line number Diff line number Diff line
@@ -213,6 +213,17 @@ bool OpenGLRenderer::callDrawGLFunction(Functor *functor) {
    if (mDirtyClip) {
        setScissorFromClip();
    }

#if RENDER_LAYERS_AS_REGIONS
    // Since we don't know what the functor will draw, let's dirty
    // tne entire clip region
    if (hasLayer()) {
        Rect clip(*mSnapshot->clipRect);
        clip.snapToPixelBoundaries();
        dirtyLayerUnchecked(clip, getRegion());
    }
#endif

    status_t result = (*functor)();
    resume();
    return (result == 0) ? false : true;