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

Commit dee94fa9 authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Fix rendering issue with layers intersecting the clip rect."

parents 727d593d 8411f336
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