ClippingAnimation.cpp revision e4db79de127cfe961195f52907af8451026eaa20
1e4db79de127cfe961195f52907af8451026eaa20Chris Craik/* 2e4db79de127cfe961195f52907af8451026eaa20Chris Craik * Copyright (C) 2015 The Android Open Source Project 3e4db79de127cfe961195f52907af8451026eaa20Chris Craik * 4e4db79de127cfe961195f52907af8451026eaa20Chris Craik * Licensed under the Apache License, Version 2.0 (the "License"); 5e4db79de127cfe961195f52907af8451026eaa20Chris Craik * you may not use this file except in compliance with the License. 6e4db79de127cfe961195f52907af8451026eaa20Chris Craik * You may obtain a copy of the License at 7e4db79de127cfe961195f52907af8451026eaa20Chris Craik * 8e4db79de127cfe961195f52907af8451026eaa20Chris Craik * http://www.apache.org/licenses/LICENSE-2.0 9e4db79de127cfe961195f52907af8451026eaa20Chris Craik * 10e4db79de127cfe961195f52907af8451026eaa20Chris Craik * Unless required by applicable law or agreed to in writing, software 11e4db79de127cfe961195f52907af8451026eaa20Chris Craik * distributed under the License is distributed on an "AS IS" BASIS, 12e4db79de127cfe961195f52907af8451026eaa20Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e4db79de127cfe961195f52907af8451026eaa20Chris Craik * See the License for the specific language governing permissions and 14e4db79de127cfe961195f52907af8451026eaa20Chris Craik * limitations under the License. 15e4db79de127cfe961195f52907af8451026eaa20Chris Craik */ 16e4db79de127cfe961195f52907af8451026eaa20Chris Craik 17e4db79de127cfe961195f52907af8451026eaa20Chris Craik#include "TestSceneBase.h" 18e4db79de127cfe961195f52907af8451026eaa20Chris Craik 19e4db79de127cfe961195f52907af8451026eaa20Chris Craikclass ClippingAnimation; 20e4db79de127cfe961195f52907af8451026eaa20Chris Craik 21e4db79de127cfe961195f52907af8451026eaa20Chris Craikstatic TestScene::Registrar _RectGrid(TestScene::Info{ 22e4db79de127cfe961195f52907af8451026eaa20Chris Craik "clip", 23e4db79de127cfe961195f52907af8451026eaa20Chris Craik "Complex clip cases" 24e4db79de127cfe961195f52907af8451026eaa20Chris Craik "Low CPU/GPU load.", 25e4db79de127cfe961195f52907af8451026eaa20Chris Craik TestScene::simpleCreateScene<ClippingAnimation> 26e4db79de127cfe961195f52907af8451026eaa20Chris Craik}); 27e4db79de127cfe961195f52907af8451026eaa20Chris Craik 28e4db79de127cfe961195f52907af8451026eaa20Chris Craikclass ClippingAnimation : public TestScene { 29e4db79de127cfe961195f52907af8451026eaa20Chris Craikpublic: 30e4db79de127cfe961195f52907af8451026eaa20Chris Craik sp<RenderNode> card; 31e4db79de127cfe961195f52907af8451026eaa20Chris Craik void createContent(int width, int height, TestCanvas& canvas) override { 32e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.drawColor(Color::White, SkXfermode::kSrcOver_Mode); 33e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.insertReorderBarrier(true); 34e4db79de127cfe961195f52907af8451026eaa20Chris Craik 35e4db79de127cfe961195f52907af8451026eaa20Chris Craik card = TestUtils::createNode(0, 0, 200, 400, 36e4db79de127cfe961195f52907af8451026eaa20Chris Craik [](RenderProperties& props, TestCanvas& canvas) { 37e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.save(SkCanvas::kMatrixClip_SaveFlag); 38e4db79de127cfe961195f52907af8451026eaa20Chris Craik { 39e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.clipRect(0, 0, 200, 200, SkRegion::kIntersect_Op); 40e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.translate(100, 100); 41e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.rotate(45); 42e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.translate(-100, -100); 43e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.clipRect(0, 0, 200, 200, SkRegion::kIntersect_Op); 44e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.drawColor(Color::Blue_500, SkXfermode::kSrcOver_Mode); 45e4db79de127cfe961195f52907af8451026eaa20Chris Craik } 46e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.restore(); 47e4db79de127cfe961195f52907af8451026eaa20Chris Craik 48e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.save(SkCanvas::kMatrixClip_SaveFlag); 49e4db79de127cfe961195f52907af8451026eaa20Chris Craik { 50e4db79de127cfe961195f52907af8451026eaa20Chris Craik SkPath clipCircle; 51e4db79de127cfe961195f52907af8451026eaa20Chris Craik clipCircle.addCircle(100, 300, 100); 52e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.clipPath(&clipCircle, SkRegion::kIntersect_Op); 53e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.drawColor(Color::Red_500, SkXfermode::kSrcOver_Mode); 54e4db79de127cfe961195f52907af8451026eaa20Chris Craik } 55e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.restore(); 56e4db79de127cfe961195f52907af8451026eaa20Chris Craik }); 57e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.drawRenderNode(card.get()); 58e4db79de127cfe961195f52907af8451026eaa20Chris Craik 59e4db79de127cfe961195f52907af8451026eaa20Chris Craik canvas.insertReorderBarrier(false); 60e4db79de127cfe961195f52907af8451026eaa20Chris Craik } 61e4db79de127cfe961195f52907af8451026eaa20Chris Craik void doFrame(int frameNr) override { 62e4db79de127cfe961195f52907af8451026eaa20Chris Craik int curFrame = frameNr % 150; 63e4db79de127cfe961195f52907af8451026eaa20Chris Craik card->mutateStagingProperties().setTranslationX(curFrame); 64e4db79de127cfe961195f52907af8451026eaa20Chris Craik card->mutateStagingProperties().setTranslationY(curFrame); 65e4db79de127cfe961195f52907af8451026eaa20Chris Craik card->setPropertyFieldsDirty(RenderNode::X | RenderNode::Y); 66e4db79de127cfe961195f52907af8451026eaa20Chris Craik } 67e4db79de127cfe961195f52907af8451026eaa20Chris Craik}; 68