Snapshot.cpp revision 967e2bf3ac8943a8e8a374bf86021915445cda67
1ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy/* 2ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy * Copyright (C) 2012 The Android Open Source Project 3ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy * 4ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy * you may not use this file except in compliance with the License. 6ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy * You may obtain a copy of the License at 7ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy * 8ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy * http://www.apache.org/licenses/LICENSE-2.0 9ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy * 10ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy * Unless required by applicable law or agreed to in writing, software 11ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy * See the License for the specific language governing permissions and 14ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy * limitations under the License. 15ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy */ 16ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 17ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy#include "Snapshot.h" 18ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 19ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy#include <SkCanvas.h> 20ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 21ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guynamespace android { 22ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guynamespace uirenderer { 23ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 24ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy/////////////////////////////////////////////////////////////////////////////// 25ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy// Constructors 26ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy/////////////////////////////////////////////////////////////////////////////// 27ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 28ada4d53d50dc869b8278573ad640dc44118d3bcfRomain GuySnapshot::Snapshot(): flags(0), previous(NULL), layer(NULL), fbo(0), 29ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy invisible(false), empty(false) { 30ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 31ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy transform = &mTransformRoot; 32ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy clipRect = &mClipRectRoot; 33ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy region = NULL; 34967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion = NULL; 35ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy} 36ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 37ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy/** 38ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy * Copies the specified snapshot/ The specified snapshot is stored as 39ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy * the previous snapshot. 40ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy */ 41ada4d53d50dc869b8278573ad640dc44118d3bcfRomain GuySnapshot::Snapshot(const sp<Snapshot>& s, int saveFlags): 42ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy flags(0), previous(s), layer(NULL), fbo(s->fbo), 43ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy invisible(s->invisible), empty(false), 44ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy viewport(s->viewport), height(s->height) { 45ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 46ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy if (saveFlags & SkCanvas::kMatrix_SaveFlag) { 47ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy mTransformRoot.load(*s->transform); 48ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy transform = &mTransformRoot; 49ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } else { 50ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy transform = s->transform; 51ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } 52ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 53ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy if (saveFlags & SkCanvas::kClip_SaveFlag) { 54ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy mClipRectRoot.set(*s->clipRect); 55ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy clipRect = &mClipRectRoot; 56967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 57967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (s->clipRegion) { 58967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy mClipRegionRoot.merge(*s->clipRegion); 59967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion = &mClipRegionRoot; 60967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } else { 61967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion = NULL; 62967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 63967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#else 64967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion = NULL; 65967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 66ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } else { 67ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy clipRect = s->clipRect; 68967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 69967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion = s->clipRegion; 70967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 71ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } 72ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 73ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy if (s->flags & Snapshot::kFlagFboTarget) { 74ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy flags |= Snapshot::kFlagFboTarget; 75ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy region = s->region; 76ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } else { 77ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy region = NULL; 78ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } 79ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy} 80ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 81ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy/////////////////////////////////////////////////////////////////////////////// 82ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy// Clipping 83ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy/////////////////////////////////////////////////////////////////////////////// 84ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 85967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guyvoid Snapshot::ensureClipRegion() { 86967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 87967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (!clipRegion) { 88967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion = &mClipRegionRoot; 89967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy android::Rect tmp(clipRect->left, clipRect->top, clipRect->right, clipRect->bottom); 90967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion->set(tmp); 91967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 92967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 93967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy} 94967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy 95967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guyvoid Snapshot::copyClipRectFromRegion() { 96967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 97967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (!clipRegion->isEmpty()) { 98967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy android::Rect bounds(clipRegion->bounds()); 99967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRect->set(bounds.left, bounds.top, bounds.right, bounds.bottom); 100967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy 101967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (clipRegion->isRect()) { 102967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion->clear(); 103967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion = NULL; 104967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 105967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } else { 106967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRect->setEmpty(); 107967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion = NULL; 108967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 109967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 110967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy} 111967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy 112967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guybool Snapshot::clipRegionOr(float left, float top, float right, float bottom) { 113967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 114967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy android::Rect tmp(left, top, right, bottom); 115967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion->orSelf(tmp); 116967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy copyClipRectFromRegion(); 117967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return true; 118967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#else 119967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return false; 120967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 121967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy} 122967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy 123967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guybool Snapshot::clipRegionXor(float left, float top, float right, float bottom) { 124967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 125967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy android::Rect tmp(left, top, right, bottom); 126967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion->xorSelf(tmp); 127967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy copyClipRectFromRegion(); 128967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return true; 129967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#else 130967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return false; 131967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 132967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy} 133967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy 134967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guybool Snapshot::clipRegionAnd(float left, float top, float right, float bottom) { 135967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 136967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy android::Rect tmp(left, top, right, bottom); 137967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion->andSelf(tmp); 138967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy copyClipRectFromRegion(); 139967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return true; 140967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#else 141967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return false; 142967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 143967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy} 144967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy 145967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guybool Snapshot::clipRegionNand(float left, float top, float right, float bottom) { 146967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 147967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy android::Rect tmp(left, top, right, bottom); 148967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion->subtractSelf(tmp); 149967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy copyClipRectFromRegion(); 150967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return true; 151967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#else 152967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return false; 153967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 154967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy} 155967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy 156ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guybool Snapshot::clip(float left, float top, float right, float bottom, SkRegion::Op op) { 157ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy Rect r(left, top, right, bottom); 158ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy transform->mapRect(r); 159ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy return clipTransformed(r, op); 160ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy} 161ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 162ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guybool Snapshot::clipTransformed(const Rect& r, SkRegion::Op op) { 163ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy bool clipped = false; 164ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 165ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy switch (op) { 166967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy case SkRegion::kDifference_Op: { 167967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy ensureClipRegion(); 168967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipped = clipRegionNand(r.left, r.top, r.right, r.bottom); 169ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy break; 170967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 171967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy case SkRegion::kIntersect_Op: { 172967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (CC_UNLIKELY(clipRegion)) { 173967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipped = clipRegionOr(r.left, r.top, r.right, r.bottom); 174967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } else { 175967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipped = clipRect->intersect(r); 176967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (!clipped) { 177967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRect->setEmpty(); 178967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipped = true; 179967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 180ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } 181ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy break; 182967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 183967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy case SkRegion::kUnion_Op: { 184967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (CC_UNLIKELY(clipRegion)) { 185967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipped = clipRegionAnd(r.left, r.top, r.right, r.bottom); 186967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } else { 187967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipped = clipRect->unionWith(r); 188967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 189ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy break; 190967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 191967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy case SkRegion::kXOR_Op: { 192967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy ensureClipRegion(); 193967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipped = clipRegionXor(r.left, r.top, r.right, r.bottom); 194ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy break; 195967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 196967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy case SkRegion::kReverseDifference_Op: { 197967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy // TODO!!!!!!! 198ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy break; 199967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 200967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy case SkRegion::kReplace_Op: { 201967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy setClip(r.left, r.top, r.right, r.bottom); 202ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy clipped = true; 203ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy break; 204967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 205ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } 206ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 207ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy if (clipped) { 208ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy flags |= Snapshot::kFlagClipSet; 209ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } 210ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 211ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy return clipped; 212ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy} 213ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 214ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guyvoid Snapshot::setClip(float left, float top, float right, float bottom) { 215ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy clipRect->set(left, top, right, bottom); 216967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (clipRegion) { 217967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion->clear(); 218967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion = NULL; 219967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 220ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy flags |= Snapshot::kFlagClipSet; 221ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy} 222ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 223ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guyconst Rect& Snapshot::getLocalClip() { 224ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy mat4 inverse; 225ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy inverse.loadInverse(*transform); 226ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 227ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy mLocalClip.set(*clipRect); 228ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy inverse.mapRect(mLocalClip); 229ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 230ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy return mLocalClip; 231ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy} 232ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 233ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guyvoid Snapshot::resetClip(float left, float top, float right, float bottom) { 234ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy clipRect = &mClipRectRoot; 235967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy setClip(left, top, right, bottom); 236ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy} 237ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 238ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy/////////////////////////////////////////////////////////////////////////////// 239ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy// Transforms 240ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy/////////////////////////////////////////////////////////////////////////////// 241ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 242ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guyvoid Snapshot::resetTransform(float x, float y, float z) { 243ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy transform = &mTransformRoot; 244ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy transform->loadTranslate(x, y, z); 245ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy} 246ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 247ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy/////////////////////////////////////////////////////////////////////////////// 248ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy// Queries 249ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy/////////////////////////////////////////////////////////////////////////////// 250ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 251ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guybool Snapshot::isIgnored() const { 252ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy return invisible || empty; 253ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy} 254ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 255ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy}; // namespace uirenderer 256ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy}; // namespace android 257