OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. |
3 * All rights reserved. | 3 * All rights reserved. |
4 * Copyright (C) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies) | 4 * Copyright (C) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies) |
5 * Copyright (C) 2007 Alp Toker <alp@atoker.com> | 5 * Copyright (C) 2007 Alp Toker <alp@atoker.com> |
6 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> | 6 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> |
7 * Copyright (C) 2008 Dirk Schulze <krit@webkit.org> | 7 * Copyright (C) 2008 Dirk Schulze <krit@webkit.org> |
8 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. | 8 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. |
9 * Copyright (C) 2012, 2013 Intel Corporation. All rights reserved. | 9 * Copyright (C) 2012, 2013 Intel Corporation. All rights reserved. |
10 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. | 10 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 setShouldAntialias(true); | 134 setShouldAntialias(true); |
135 ThreadState::current()->registerPreFinalizer(this); | 135 ThreadState::current()->registerPreFinalizer(this); |
136 validateStateStack(); | 136 validateStateStack(); |
137 } | 137 } |
138 | 138 |
139 void CanvasRenderingContext2D::setCanvasGetContextResult( | 139 void CanvasRenderingContext2D::setCanvasGetContextResult( |
140 RenderingContext& result) { | 140 RenderingContext& result) { |
141 result.setCanvasRenderingContext2D(this); | 141 result.setCanvasRenderingContext2D(this); |
142 } | 142 } |
143 | 143 |
144 void CanvasRenderingContext2D::unwindStateStack() { | |
145 if (size_t stackSize = m_stateStack.size()) { | |
146 if (SkCanvas* skCanvas = canvas()->existingDrawingCanvas()) { | |
147 while (--stackSize) | |
148 skCanvas->restore(); | |
149 } | |
150 } | |
151 } | |
152 | |
153 CanvasRenderingContext2D::~CanvasRenderingContext2D() {} | 144 CanvasRenderingContext2D::~CanvasRenderingContext2D() {} |
154 | 145 |
155 void CanvasRenderingContext2D::dispose() { | 146 void CanvasRenderingContext2D::dispose() { |
156 if (m_pruneLocalFontCacheScheduled) | 147 if (m_pruneLocalFontCacheScheduled) |
157 Platform::current()->currentThread()->removeTaskObserver(this); | 148 Platform::current()->currentThread()->removeTaskObserver(this); |
158 } | 149 } |
159 | 150 |
160 void CanvasRenderingContext2D::validateStateStack() const { | 151 void CanvasRenderingContext2D::validateStateStack() const { |
161 #if DCHECK_IS_ON() | 152 #if DCHECK_IS_ON() |
162 if (SkCanvas* skCanvas = canvas()->existingDrawingCanvas()) { | 153 if (SkCanvas* skCanvas = canvas()->existingDrawingCanvas()) { |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 return; | 264 return; |
274 reset(); | 265 reset(); |
275 m_contextLostMode = NotLostContext; | 266 m_contextLostMode = NotLostContext; |
276 if (contextLostRestoredEventsEnabled()) { | 267 if (contextLostRestoredEventsEnabled()) { |
277 Event* event(Event::create(EventTypeNames::contextrestored)); | 268 Event* event(Event::create(EventTypeNames::contextrestored)); |
278 canvas()->dispatchEvent(event); | 269 canvas()->dispatchEvent(event); |
279 } | 270 } |
280 } | 271 } |
281 | 272 |
282 void CanvasRenderingContext2D::reset() { | 273 void CanvasRenderingContext2D::reset() { |
283 validateStateStack(); | 274 // This is a multiple inherritance bootstrap |
284 unwindStateStack(); | 275 BaseRenderingContext2D::reset(); |
285 m_stateStack.resize(1); | |
286 m_stateStack.first() = CanvasRenderingContext2DState::create(); | |
287 m_path.clear(); | |
288 if (SkCanvas* c = canvas()->existingDrawingCanvas()) { | |
289 // The canvas should always have an initial/unbalanced save frame, which | |
290 // we use to reset the top level matrix and clip here. | |
291 DCHECK_EQ(c->getSaveCount(), 2); | |
292 c->restore(); | |
293 c->save(); | |
294 DCHECK(c->getTotalMatrix().isIdentity()); | |
295 #if DCHECK_IS_ON() | |
296 SkIRect clipBounds; | |
297 DCHECK(c->getClipDeviceBounds(&clipBounds)); | |
298 DCHECK(clipBounds == c->imageInfo().bounds()); | |
299 #endif | |
300 } | |
301 validateStateStack(); | |
302 } | 276 } |
303 | 277 |
304 void CanvasRenderingContext2D::restoreCanvasMatrixClipStack(SkCanvas* c) const { | 278 void CanvasRenderingContext2D::restoreCanvasMatrixClipStack(SkCanvas* c) const { |
305 restoreMatrixClipStack(c); | 279 restoreMatrixClipStack(c); |
306 } | 280 } |
307 | 281 |
308 bool CanvasRenderingContext2D::shouldAntialias() const { | 282 bool CanvasRenderingContext2D::shouldAntialias() const { |
309 return state().shouldAntialias(); | 283 return state().shouldAntialias(); |
310 } | 284 } |
311 | 285 |
(...skipping 868 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1180 } | 1154 } |
1181 return true; | 1155 return true; |
1182 } | 1156 } |
1183 | 1157 |
1184 void CanvasRenderingContext2D::resetUsageTracking() { | 1158 void CanvasRenderingContext2D::resetUsageTracking() { |
1185 UsageCounters newCounters; | 1159 UsageCounters newCounters; |
1186 m_usageCounters = newCounters; | 1160 m_usageCounters = newCounters; |
1187 } | 1161 } |
1188 | 1162 |
1189 } // namespace blink | 1163 } // namespace blink |
OLD | NEW |