10910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 30910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 50910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * you may not use this file except in compliance with the License. 60910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * You may obtain a copy of the License at 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * See the License for the specific language governing permissions and 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * limitations under the License. 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkPageFlipper.h" 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkPageFlipper::SkPageFlipper() { 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fWidth = 0; 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fHeight = 0; 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty0 = &fDirty0Storage; 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty1 = &fDirty1Storage; 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty0->setEmpty(); 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty1->setEmpty(); 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkPageFlipper::SkPageFlipper(int width, int height) { 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fWidth = width; 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fHeight = height; 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty0 = &fDirty0Storage; 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty1 = &fDirty1Storage; 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty0->setRect(0, 0, width, height); 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty1->setEmpty(); 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkPageFlipper::resize(int width, int height) { 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fWidth = width; 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fHeight = height; 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // this is the opposite of the constructors 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty1->setRect(0, 0, width, height); 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty0->setEmpty(); 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkPageFlipper::inval() { 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty1->setRect(0, 0, fWidth, fHeight); 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkPageFlipper::inval(const SkIRect& rect) { 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkIRect r; 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project r.set(0, 0, fWidth, fHeight); 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (r.intersect(rect)) { 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty1->op(r, SkRegion::kUnion_Op); 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkPageFlipper::inval(const SkRegion& rgn) { 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkRegion r; 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project r.setRect(0, 0, fWidth, fHeight); 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (r.op(rgn, SkRegion::kIntersect_Op)) { 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty1->op(r, SkRegion::kUnion_Op); 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkPageFlipper::inval(const SkRect& rect, bool antialias) { 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkIRect r; 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project rect.round(&r); 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (antialias) { 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project r.inset(-1, -1); 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project this->inval(r); 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkRegion& SkPageFlipper::update(SkRegion* copyBits) { 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // Copy over anything new from page0 that isn't dirty in page1 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project copyBits->op(*fDirty0, *fDirty1, SkRegion::kDifference_Op); 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTSwap<SkRegion*>(fDirty0, fDirty1); 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty1->setEmpty(); 820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return *fDirty0; 830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 86