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