Shrink saveLayer device bounds when it supplies an explicit bounds and has a complex...
authorrobertphillips <robertphillips@google.com>
Mon, 3 Nov 2014 16:19:44 +0000 (08:19 -0800)
committerCommit bot <commit-bot@chromium.org>
Mon, 3 Nov 2014 16:19:44 +0000 (08:19 -0800)
commit4d52afef5cf90a2fed3bb69db71675c6450ab397
tree2f9a90b273a9ed597f5e5817b11b567d77ecc537
parent66cad7669be6c47768d084090a3d498014dfc847
Shrink saveLayer device bounds when it supplies an explicit bounds and has a complex paint

This CL shrinks the bound computed for saveLayers that possess both an explicit
bound and a complex paint (e.g., one that affects transparent black). In this
case the bound of the layer should be the clipped explicit bound rather then
the clip prior/after the saveLayer/restore block.

In the following the first bound is the currently computed bound
while the second is the new/desired one:

For a 100x100 picture

saveLayer (no bound, no paint) [ 0 0 100 100 ]  [ 50 50 100 100 ]
  setMatrix (translate 50, 50) [ 0 0 100 100 ] [ 50 50 100 100 ]
  saveLayer (bound of 0, 0, 50, 50 - complex paint) [ 0 0 100 100 ] [ 50 50 100 100 ]
  restore [ 0 0 100 100 ] [ 50 50 100 100 ]
restore [ 0 0 100 100 ] [ 50 50 100 100 ]

Review URL: https://codereview.chromium.org/696763002
src/core/SkPicture.cpp
src/core/SkRecordDraw.cpp
src/core/SkRecordDraw.h
tests/RecordDrawTest.cpp