diff options
| author | 2014-07-24 12:39:17 -0700 | |
|---|---|---|
| committer | 2014-07-25 20:56:50 +0000 | |
| commit | a753f4c6cb8558795e673df1896532cd148781e2 (patch) | |
| tree | ec290b59a9cc91bb71402b8643fbc976f95c82d2 /libs/hwui/RenderProperties.cpp | |
| parent | 543650bb10b1104dd4ebb81e4a9bbebf9fb4c535 (diff) | |
Move ClipBounds to native
bug:15698973
Also simplifies RenderNode LTRB properties
Change-Id: I09263a697b71d325a46b57cd5250a2b165f251c8
Diffstat (limited to 'libs/hwui/RenderProperties.cpp')
| -rw-r--r-- | libs/hwui/RenderProperties.cpp | 30 |
1 files changed, 19 insertions, 11 deletions
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); } } |