Loading libs/hwui/RenderNode.cpp +23 −4 Original line number Diff line number Diff line Loading @@ -680,13 +680,32 @@ void RenderNode::issueDrawShadowOperation(const Matrix4& transformFromParent, T& float casterAlpha = properties().getAlpha() * properties().getOutline().getAlpha(); // holds temporary SkPath to store the result of intersections SkPath* frameAllocatedPath = NULL; const SkPath* outlinePath = casterOutlinePath; // intersect the outline with the reveal clip, if present if (revealClipPath) { // if we can't simply use the caster's path directly, create a temporary one SkPath* frameAllocatedPath = handler.allocPathForFrame(); frameAllocatedPath = handler.allocPathForFrame(); Op(*outlinePath, *revealClipPath, kIntersect_PathOp, frameAllocatedPath); outlinePath = frameAllocatedPath; } // intersect the outline with the clipBounds, if present if (properties().getClippingFlags() & CLIP_TO_CLIP_BOUNDS) { if (!frameAllocatedPath) { frameAllocatedPath = handler.allocPathForFrame(); } Rect clipBounds; properties().getClippingRectForFlags(CLIP_TO_CLIP_BOUNDS, &clipBounds); SkPath clipBoundsPath; clipBoundsPath.addRect(clipBounds.left, clipBounds.top, clipBounds.right, clipBounds.bottom); // intersect the outline with the convex reveal clip Op(*casterOutlinePath, *revealClipPath, kIntersect_PathOp, frameAllocatedPath); Op(*outlinePath, clipBoundsPath, kIntersect_PathOp, frameAllocatedPath); outlinePath = frameAllocatedPath; } Loading Loading
libs/hwui/RenderNode.cpp +23 −4 Original line number Diff line number Diff line Loading @@ -680,13 +680,32 @@ void RenderNode::issueDrawShadowOperation(const Matrix4& transformFromParent, T& float casterAlpha = properties().getAlpha() * properties().getOutline().getAlpha(); // holds temporary SkPath to store the result of intersections SkPath* frameAllocatedPath = NULL; const SkPath* outlinePath = casterOutlinePath; // intersect the outline with the reveal clip, if present if (revealClipPath) { // if we can't simply use the caster's path directly, create a temporary one SkPath* frameAllocatedPath = handler.allocPathForFrame(); frameAllocatedPath = handler.allocPathForFrame(); Op(*outlinePath, *revealClipPath, kIntersect_PathOp, frameAllocatedPath); outlinePath = frameAllocatedPath; } // intersect the outline with the clipBounds, if present if (properties().getClippingFlags() & CLIP_TO_CLIP_BOUNDS) { if (!frameAllocatedPath) { frameAllocatedPath = handler.allocPathForFrame(); } Rect clipBounds; properties().getClippingRectForFlags(CLIP_TO_CLIP_BOUNDS, &clipBounds); SkPath clipBoundsPath; clipBoundsPath.addRect(clipBounds.left, clipBounds.top, clipBounds.right, clipBounds.bottom); // intersect the outline with the convex reveal clip Op(*casterOutlinePath, *revealClipPath, kIntersect_PathOp, frameAllocatedPath); Op(*outlinePath, clipBoundsPath, kIntersect_PathOp, frameAllocatedPath); outlinePath = frameAllocatedPath; } Loading