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

Commit 8411f336 authored by Romain Guy's avatar Romain Guy
Browse files

Fix rendering issue with layers intersecting the clip rect.

Change-Id: Icbe35194fa219ef13ce639d33631235f8d7df3d7
parent 15107701
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -289,8 +289,11 @@ bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top,
    Rect bounds(left, top, right, bottom);
    mSnapshot->transform->mapRect(bounds);

    LayerSize size(bounds.getWidth(), bounds.getHeight());
    // Layers only make sense if they are in the framebuffer's bounds
    bounds.intersect(*mSnapshot->clipRect);
    if (bounds.isEmpty()) return;

    LayerSize size(bounds.getWidth(), bounds.getHeight());
    Layer* layer = mCaches.layerCache.get(size);
    if (!layer) {
        return false;
@@ -525,6 +528,7 @@ void OpenGLRenderer::drawPatch(SkBitmap* bitmap, Res_png_9patch* patch,
    Patch* mesh = mCaches.patchCache.get(patch);
    mesh->updateVertices(bitmap, left, top, right, bottom,
            &patch->xDivs[0], &patch->yDivs[0], patch->numXDivs, patch->numYDivs);
    mesh->dump();

    // Specify right and bottom as +1.0f from left/top to prevent scaling since the
    // patch mesh already defines the final size
+10 −0
Original line number Diff line number Diff line
@@ -119,6 +119,16 @@
            </intent-filter>
        </activity>

        <activity
                android:name="ThinPatchesActivity"
                android:label="_9patchThin"
                android:theme="@android:style/Theme.Translucent.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <activity
                android:name="NinePatchesActivity"
                android:label="_9patch">
+364 B
Loading image diff...
+442 B
Loading image diff...
+11 −17
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ public class NewLayersActivity extends Activity {
            super(c);

            mLayerPaint = new Paint();
            mLayerPaint.setAlpha(127);
            mRectPaint = new Paint();
            mRectPaint.setAntiAlias(true);
            mRectPaint.setTextSize(24.0f);
@@ -47,28 +48,21 @@ public class NewLayersActivity extends Activity {
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            
            canvas.drawRGB(128, 255, 128);
            canvas.translate(140.0f, 100.0f);
            
            mLayerPaint.setAlpha(127);
            int count = canvas.saveLayer(0.0f, 0.0f, 200.0f, 100.0f, mLayerPaint,
                    Canvas.ALL_SAVE_FLAG);

            mRectPaint.setColor(0x7fff0000);
            canvas.drawRect(-20.0f, -20.0f, 220.0f, 120.0f, mRectPaint);

            mRectPaint.setColor(0xff000000);
            canvas.drawText("This is a very long string to overlap between layers and framebuffer",
                    -100.0f, 50.0f, mRectPaint);
            canvas.save();

            canvas.restoreToCount(count);
            canvas.translate(140.0f, 100.0f);
            drawStuff(canvas, Canvas.ALL_SAVE_FLAG);

            canvas.translate(0.0f, 200.0f);
            drawStuff(canvas, Canvas.HAS_ALPHA_LAYER_SAVE_FLAG);
            
            mLayerPaint.setAlpha(127);
            count = canvas.saveLayer(0.0f, 0.0f, 200.0f, 100.0f, mLayerPaint,
                    Canvas.HAS_ALPHA_LAYER_SAVE_FLAG);
            canvas.restore();
        }

        private void drawStuff(Canvas canvas, int saveFlags) {
            int count = canvas.saveLayer(0.0f, 0.0f, 200.0f, 100.0f, mLayerPaint, saveFlags);

            mRectPaint.setColor(0x7fff0000);
            canvas.drawRect(-20.0f, -20.0f, 220.0f, 120.0f, mRectPaint);
Loading