Snapshot.cpp revision db8c9a6a4d9bf8c39f834b25611926caf21380f6
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), 29db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase invisible(false), empty(false), alpha(1.0f) { 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), 44db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase viewport(s->viewport), height(s->height), alpha(s->alpha) { 45ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 4621c9c8551d9ab36629cabc01f228d3a302e0c673Romain Guy clipRegion = NULL; 4721c9c8551d9ab36629cabc01f228d3a302e0c673Romain Guy 48ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy if (saveFlags & SkCanvas::kMatrix_SaveFlag) { 49ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy mTransformRoot.load(*s->transform); 50ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy transform = &mTransformRoot; 51ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } else { 52ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy transform = s->transform; 53ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } 54ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 55ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy if (saveFlags & SkCanvas::kClip_SaveFlag) { 56ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy mClipRectRoot.set(*s->clipRect); 57ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy clipRect = &mClipRectRoot; 58967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 59967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (s->clipRegion) { 60967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy mClipRegionRoot.merge(*s->clipRegion); 61967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion = &mClipRegionRoot; 62967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 63967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 64ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } else { 65ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy clipRect = s->clipRect; 66967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 67967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion = s->clipRegion; 68967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 69ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } 70ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 71ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy if (s->flags & Snapshot::kFlagFboTarget) { 72ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy flags |= Snapshot::kFlagFboTarget; 73ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy region = s->region; 74ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } else { 75ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy region = NULL; 76ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } 77ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy} 78ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 79ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy/////////////////////////////////////////////////////////////////////////////// 80ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy// Clipping 81ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy/////////////////////////////////////////////////////////////////////////////// 82ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 83967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guyvoid Snapshot::ensureClipRegion() { 84967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 85967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (!clipRegion) { 86967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion = &mClipRegionRoot; 87967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy android::Rect tmp(clipRect->left, clipRect->top, clipRect->right, clipRect->bottom); 88967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion->set(tmp); 89967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 90967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 91967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy} 92967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy 93967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guyvoid Snapshot::copyClipRectFromRegion() { 94967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 95967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (!clipRegion->isEmpty()) { 96967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy android::Rect bounds(clipRegion->bounds()); 97967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRect->set(bounds.left, bounds.top, bounds.right, bounds.bottom); 98967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy 99967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (clipRegion->isRect()) { 100967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion->clear(); 101967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion = NULL; 102967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 103967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } else { 104967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRect->setEmpty(); 105967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion = NULL; 106967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 107967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 108967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy} 109967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy 110967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guybool Snapshot::clipRegionOr(float left, float top, float right, float bottom) { 111967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 112967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy android::Rect tmp(left, top, right, bottom); 113967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion->orSelf(tmp); 114967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy copyClipRectFromRegion(); 115967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return true; 116967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#else 117967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return false; 118967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 119967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy} 120967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy 121967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guybool Snapshot::clipRegionXor(float left, float top, float right, float bottom) { 122967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 123967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy android::Rect tmp(left, top, right, bottom); 124967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion->xorSelf(tmp); 125967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy copyClipRectFromRegion(); 126967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return true; 127967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#else 128967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return false; 129967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 130967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy} 131967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy 132967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guybool Snapshot::clipRegionAnd(float left, float top, float right, float bottom) { 133967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 134967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy android::Rect tmp(left, top, right, bottom); 135967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion->andSelf(tmp); 136967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy copyClipRectFromRegion(); 137967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return true; 138967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#else 139967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return false; 140967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 141967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy} 142967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy 143967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guybool Snapshot::clipRegionNand(float left, float top, float right, float bottom) { 144967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#if STENCIL_BUFFER_SIZE 145967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy android::Rect tmp(left, top, right, bottom); 146967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion->subtractSelf(tmp); 147967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy copyClipRectFromRegion(); 148967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return true; 149967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#else 150967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy return false; 151967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy#endif 152967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy} 153967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy 154ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guybool Snapshot::clip(float left, float top, float right, float bottom, SkRegion::Op op) { 155ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy Rect r(left, top, right, bottom); 156ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy transform->mapRect(r); 157ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy return clipTransformed(r, op); 158ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy} 159ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 160ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guybool Snapshot::clipTransformed(const Rect& r, SkRegion::Op op) { 161ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy bool clipped = false; 162ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 163ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy switch (op) { 164967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy case SkRegion::kDifference_Op: { 165967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy ensureClipRegion(); 166967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipped = clipRegionNand(r.left, r.top, r.right, r.bottom); 167ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy break; 168967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 169967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy case SkRegion::kIntersect_Op: { 170967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (CC_UNLIKELY(clipRegion)) { 171967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipped = clipRegionOr(r.left, r.top, r.right, r.bottom); 172967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } else { 173967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipped = clipRect->intersect(r); 174967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (!clipped) { 175967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRect->setEmpty(); 176967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipped = true; 177967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 178ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } 179ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy break; 180967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 181967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy case SkRegion::kUnion_Op: { 182967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (CC_UNLIKELY(clipRegion)) { 183967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipped = clipRegionAnd(r.left, r.top, r.right, r.bottom); 184967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } else { 185967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipped = clipRect->unionWith(r); 186967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 187ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy break; 188967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 189967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy case SkRegion::kXOR_Op: { 190967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy ensureClipRegion(); 191967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipped = clipRegionXor(r.left, r.top, r.right, r.bottom); 192ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy break; 193967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 194967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy case SkRegion::kReverseDifference_Op: { 195967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy // TODO!!!!!!! 196ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy break; 197967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 198967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy case SkRegion::kReplace_Op: { 199967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy setClip(r.left, r.top, r.right, r.bottom); 200ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy clipped = true; 201ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy break; 202967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 203ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } 204ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 205ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy if (clipped) { 206ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy flags |= Snapshot::kFlagClipSet; 207ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy } 208ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 209ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy return clipped; 210ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy} 211ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy 212ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guyvoid Snapshot::setClip(float left, float top, float right, float bottom) { 213ada4d53d50dc869b8278573ad640dc44118d3bcfRomain Guy clipRect->set(left, top, right, bottom); 21421c9c8551d9ab36629cabc01f228d3a302e0c673Romain Guy#if STENCIL_BUFFER_SIZE 215967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy if (clipRegion) { 216967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion->clear(); 217967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy clipRegion = NULL; 218967e2bf3ac8943a8e8a374bf86021915445cda67Romain Guy } 21921c9c8551d9ab36629cabc01f228d3a302e0c673Romain Guy#endif 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