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 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 } | 151 } |
152 | 152 |
153 CanvasRenderingContext2D::~CanvasRenderingContext2D() {} | 153 CanvasRenderingContext2D::~CanvasRenderingContext2D() {} |
154 | 154 |
155 void CanvasRenderingContext2D::dispose() { | 155 void CanvasRenderingContext2D::dispose() { |
156 if (m_pruneLocalFontCacheScheduled) | 156 if (m_pruneLocalFontCacheScheduled) |
157 Platform::current()->currentThread()->removeTaskObserver(this); | 157 Platform::current()->currentThread()->removeTaskObserver(this); |
158 } | 158 } |
159 | 159 |
160 void CanvasRenderingContext2D::validateStateStack() const { | 160 void CanvasRenderingContext2D::validateStateStack() const { |
161 #if ENABLE(ASSERT) | 161 #if DCHECK_IS_ON() |
162 SkCanvas* skCanvas = canvas()->existingDrawingCanvas(); | 162 if (SkCanvas* skCanvas = canvas()->existingDrawingCanvas()) { |
163 if (skCanvas && m_contextLostMode == NotLostContext) { | 163 // The canvas should always have an initial save frame, to support |
164 ASSERT(static_cast<size_t>(skCanvas->getSaveCount()) == | 164 // resetting the top level matrix and clip. |
165 m_stateStack.size()); | 165 DCHECK_GT(skCanvas->getSaveCount(), 1); |
| 166 |
| 167 if (m_contextLostMode == NotLostContext) { |
| 168 DCHECK_EQ(static_cast<size_t>(skCanvas->getSaveCount()), |
| 169 m_stateStack.size() + 1); |
| 170 } |
166 } | 171 } |
167 #endif | 172 #endif |
168 CHECK(m_stateStack.first() | 173 CHECK(m_stateStack.first() |
169 .get()); // Temporary for investigating crbug.com/648510 | 174 .get()); // Temporary for investigating crbug.com/648510 |
170 } | 175 } |
171 | 176 |
172 bool CanvasRenderingContext2D::isAccelerated() const { | 177 bool CanvasRenderingContext2D::isAccelerated() const { |
173 if (!canvas()->hasImageBuffer()) | 178 if (!canvas()->hasImageBuffer()) |
174 return false; | 179 return false; |
175 return canvas()->buffer()->isAccelerated(); | 180 return canvas()->buffer()->isAccelerated(); |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 canvas()->dispatchEvent(event); | 277 canvas()->dispatchEvent(event); |
273 } | 278 } |
274 } | 279 } |
275 | 280 |
276 void CanvasRenderingContext2D::reset() { | 281 void CanvasRenderingContext2D::reset() { |
277 validateStateStack(); | 282 validateStateStack(); |
278 unwindStateStack(); | 283 unwindStateStack(); |
279 m_stateStack.resize(1); | 284 m_stateStack.resize(1); |
280 m_stateStack.first() = CanvasRenderingContext2DState::create(); | 285 m_stateStack.first() = CanvasRenderingContext2DState::create(); |
281 m_path.clear(); | 286 m_path.clear(); |
282 SkCanvas* c = canvas()->existingDrawingCanvas(); | 287 if (SkCanvas* c = canvas()->existingDrawingCanvas()) { |
283 if (c) { | 288 // The canvas should always have an initial/unbalanced save frame, which |
284 c->resetMatrix(); | 289 // we use to reset the top level matrix and clip here. |
285 c->clipRect(SkRect::MakeWH(canvas()->width(), canvas()->height()), | 290 DCHECK_EQ(c->getSaveCount(), 2); |
286 SkRegion::kReplace_Op); | 291 c->restore(); |
| 292 c->save(); |
| 293 DCHECK(c->getTotalMatrix().isIdentity()); |
| 294 #if DCHECK_IS_ON() |
| 295 SkIRect clipBounds; |
| 296 DCHECK(c->getClipDeviceBounds(&clipBounds)); |
| 297 DCHECK(clipBounds == c->imageInfo().bounds()); |
| 298 #endif |
287 } | 299 } |
288 validateStateStack(); | 300 validateStateStack(); |
289 } | 301 } |
290 | 302 |
291 void CanvasRenderingContext2D::restoreCanvasMatrixClipStack(SkCanvas* c) const { | 303 void CanvasRenderingContext2D::restoreCanvasMatrixClipStack(SkCanvas* c) const { |
292 restoreMatrixClipStack(c); | 304 restoreMatrixClipStack(c); |
293 } | 305 } |
294 | 306 |
295 bool CanvasRenderingContext2D::shouldAntialias() const { | 307 bool CanvasRenderingContext2D::shouldAntialias() const { |
296 return state().shouldAntialias(); | 308 return state().shouldAntialias(); |
(...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1128 } | 1140 } |
1129 return true; | 1141 return true; |
1130 } | 1142 } |
1131 | 1143 |
1132 void CanvasRenderingContext2D::resetUsageTracking() { | 1144 void CanvasRenderingContext2D::resetUsageTracking() { |
1133 UsageCounters newCounters; | 1145 UsageCounters newCounters; |
1134 m_usageCounters = newCounters; | 1146 m_usageCounters = newCounters; |
1135 } | 1147 } |
1136 | 1148 |
1137 } // namespace blink | 1149 } // namespace blink |
OLD | NEW |