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