Fixed issue where canvas transforms were applied multiple times
in overscroll scenarios on Android Go devices. Added save/restore around TransformCanvas that is used to replay filtered drawing instructions to ensure hole punches are carried through even when a RenderNode is drawn into a layer. Previously this would end up with transforms being applied twice during overscroll stretch situations. This caused contents to be shifted during an overscroll at the end of a HorizontalScrollView or ScrollView where a SurfaceView was in the scene. Fixes: 241582783 Test: Added CTS tests to Horizontal and ScrollView tests Change-Id: Iac1717602fd5f251d3d6fa26109a4c532a9598b5
This commit is contained in:
@@ -293,8 +293,10 @@ void RenderNodeDrawable::drawContent(SkCanvas* canvas) const {
|
||||
// with the same canvas transformation + clip into the target
|
||||
// canvas then draw the layer on top
|
||||
if (renderNode->hasHolePunches()) {
|
||||
canvas->save();
|
||||
TransformCanvas transformCanvas(canvas, SkBlendMode::kDstOut);
|
||||
displayList->draw(&transformCanvas);
|
||||
canvas->restore();
|
||||
}
|
||||
canvas->drawImageRect(snapshotImage, SkRect::Make(srcBounds),
|
||||
SkRect::Make(dstBounds), sampling, &paint,
|
||||
|
||||
Reference in New Issue
Block a user