From a753f4c6cb8558795e673df1896532cd148781e2 Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Thu, 24 Jul 2014 12:39:17 -0700 Subject: Move ClipBounds to native bug:15698973 Also simplifies RenderNode LTRB properties Change-Id: I09263a697b71d325a46b57cd5250a2b165f251c8 --- libs/hwui/RenderProperties.cpp | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) (limited to 'libs/hwui/RenderProperties.cpp') diff --git a/libs/hwui/RenderProperties.cpp b/libs/hwui/RenderProperties.cpp index 8848b2f76da7..250cadcfe51e 100644 --- a/libs/hwui/RenderProperties.cpp +++ b/libs/hwui/RenderProperties.cpp @@ -75,7 +75,7 @@ LayerProperties& LayerProperties::operator=(const LayerProperties& other) { } RenderProperties::PrimitiveFields::PrimitiveFields() - : mClipToBounds(true) + : mClippingFlags(CLIP_TO_BOUNDS) , mProjectBackwards(false) , mProjectionReceiver(false) , mAlpha(1) @@ -146,26 +146,34 @@ void RenderProperties::debugOutputProperties(const int level) const { } } - bool clipToBoundsNeeded = layerProperties().type() != kLayerTypeNone ? false : mPrimitiveFields.mClipToBounds; + const bool isLayer = layerProperties().type() != kLayerTypeNone; + int clipFlags = getClippingFlags(); if (mPrimitiveFields.mAlpha < 1) { - if (layerProperties().type() != kLayerTypeNone) { + if (isLayer) { + clipFlags &= ~CLIP_TO_BOUNDS; // bounds clipping done by layer + ALOGD("%*sSetOverrideLayerAlpha %.2f", level * 2, "", mPrimitiveFields.mAlpha); } else if (!mPrimitiveFields.mHasOverlappingRendering) { ALOGD("%*sScaleAlpha %.2f", level * 2, "", mPrimitiveFields.mAlpha); } else { - int flags = SkCanvas::kHasAlphaLayer_SaveFlag; - if (clipToBoundsNeeded) { - flags |= SkCanvas::kClipToLayer_SaveFlag; - clipToBoundsNeeded = false; // clipping done by save layer + Rect layerBounds(0, 0, getWidth(), getHeight()); + int saveFlags = SkCanvas::kHasAlphaLayer_SaveFlag; + if (clipFlags) { + saveFlags |= SkCanvas::kClipToLayer_SaveFlag; + getClippingRectForFlags(clipFlags, &layerBounds); + clipFlags = 0; // all clipping done by saveLayer } + ALOGD("%*sSaveLayerAlpha %d, %d, %d, %d, %d, 0x%x", level * 2, "", - 0, 0, getWidth(), getHeight(), - (int)(mPrimitiveFields.mAlpha * 255), flags); + (int)layerBounds.left, (int)layerBounds.top, (int)layerBounds.right, (int)layerBounds.bottom, + (int)(mPrimitiveFields.mAlpha * 255), saveFlags); } } - if (clipToBoundsNeeded) { + if (clipFlags) { + Rect clipRect; + getClippingRectForFlags(clipFlags, &clipRect); ALOGD("%*sClipRect %d, %d, %d, %d", level * 2, "", - 0, 0, getWidth(), getHeight()); + (int)clipRect.left, (int)clipRect.top, (int)clipRect.right, (int)clipRect.bottom); } } -- cgit v1.2.3-59-g8ed1b