Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(626)

Side by Side Diff: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp

Issue 2640983002: Rename paint data structures (Closed)
Patch Set: DrawingDisplayItem Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 #include "core/layout/LayoutBox.h" 50 #include "core/layout/LayoutBox.h"
51 #include "core/layout/LayoutTheme.h" 51 #include "core/layout/LayoutTheme.h"
52 #include "modules/canvas2d/CanvasStyle.h" 52 #include "modules/canvas2d/CanvasStyle.h"
53 #include "modules/canvas2d/HitRegion.h" 53 #include "modules/canvas2d/HitRegion.h"
54 #include "modules/canvas2d/Path2D.h" 54 #include "modules/canvas2d/Path2D.h"
55 #include "platform/fonts/FontCache.h" 55 #include "platform/fonts/FontCache.h"
56 #include "platform/graphics/DrawLooperBuilder.h" 56 #include "platform/graphics/DrawLooperBuilder.h"
57 #include "platform/graphics/ExpensiveCanvasHeuristicParameters.h" 57 #include "platform/graphics/ExpensiveCanvasHeuristicParameters.h"
58 #include "platform/graphics/ImageBuffer.h" 58 #include "platform/graphics/ImageBuffer.h"
59 #include "platform/graphics/StrokeData.h" 59 #include "platform/graphics/StrokeData.h"
60 #include "platform/graphics/paint/PaintCanvas.h"
61 #include "platform/graphics/paint/PaintFlags.h"
60 #include "platform/graphics/skia/SkiaUtils.h" 62 #include "platform/graphics/skia/SkiaUtils.h"
61 #include "platform/text/BidiTextRun.h" 63 #include "platform/text/BidiTextRun.h"
62 #include "public/platform/Platform.h" 64 #include "public/platform/Platform.h"
63 #include "third_party/skia/include/core/SkCanvas.h"
64 #include "third_party/skia/include/core/SkImageFilter.h" 65 #include "third_party/skia/include/core/SkImageFilter.h"
65 #include "wtf/MathExtras.h" 66 #include "wtf/MathExtras.h"
66 #include "wtf/text/StringBuilder.h" 67 #include "wtf/text/StringBuilder.h"
67 #include "wtf/typed_arrays/ArrayBufferContents.h" 68 #include "wtf/typed_arrays/ArrayBufferContents.h"
68 69
69 namespace blink { 70 namespace blink {
70 71
71 static const char defaultFont[] = "10px sans-serif"; 72 static const char defaultFont[] = "10px sans-serif";
72 static const char inheritDirectionString[] = "inherit"; 73 static const char inheritDirectionString[] = "inherit";
73 static const char rtlDirectionString[] = "rtl"; 74 static const char rtlDirectionString[] = "rtl";
(...skipping 10 matching lines...) Expand all
84 // overdraw detection substitutes the recording canvas (to discard overdrawn 85 // overdraw detection substitutes the recording canvas (to discard overdrawn
85 // draw calls). 86 // draw calls).
86 class CanvasRenderingContext2DAutoRestoreSkCanvas { 87 class CanvasRenderingContext2DAutoRestoreSkCanvas {
87 STACK_ALLOCATED(); 88 STACK_ALLOCATED();
88 89
89 public: 90 public:
90 explicit CanvasRenderingContext2DAutoRestoreSkCanvas( 91 explicit CanvasRenderingContext2DAutoRestoreSkCanvas(
91 CanvasRenderingContext2D* context) 92 CanvasRenderingContext2D* context)
92 : m_context(context), m_saveCount(0) { 93 : m_context(context), m_saveCount(0) {
93 DCHECK(m_context); 94 DCHECK(m_context);
94 SkCanvas* c = m_context->drawingCanvas(); 95 PaintCanvas* c = m_context->drawingCanvas();
95 if (c) { 96 if (c) {
96 m_saveCount = c->getSaveCount(); 97 m_saveCount = c->getSaveCount();
97 } 98 }
98 } 99 }
99 100
100 ~CanvasRenderingContext2DAutoRestoreSkCanvas() { 101 ~CanvasRenderingContext2DAutoRestoreSkCanvas() {
101 SkCanvas* c = m_context->drawingCanvas(); 102 PaintCanvas* c = m_context->drawingCanvas();
102 if (c) 103 if (c)
103 c->restoreToCount(m_saveCount); 104 c->restoreToCount(m_saveCount);
104 m_context->validateStateStack(); 105 m_context->validateStateStack();
105 } 106 }
106 107
107 private: 108 private:
108 Member<CanvasRenderingContext2D> m_context; 109 Member<CanvasRenderingContext2D> m_context;
109 int m_saveCount; 110 int m_saveCount;
110 }; 111 };
111 112
(...skipping 29 matching lines...) Expand all
141 142
142 CanvasRenderingContext2D::~CanvasRenderingContext2D() {} 143 CanvasRenderingContext2D::~CanvasRenderingContext2D() {}
143 144
144 void CanvasRenderingContext2D::dispose() { 145 void CanvasRenderingContext2D::dispose() {
145 if (m_pruneLocalFontCacheScheduled) 146 if (m_pruneLocalFontCacheScheduled)
146 Platform::current()->currentThread()->removeTaskObserver(this); 147 Platform::current()->currentThread()->removeTaskObserver(this);
147 } 148 }
148 149
149 void CanvasRenderingContext2D::validateStateStack() const { 150 void CanvasRenderingContext2D::validateStateStack() const {
150 #if DCHECK_IS_ON() 151 #if DCHECK_IS_ON()
151 if (SkCanvas* skCanvas = canvas()->existingDrawingCanvas()) { 152 if (PaintCanvas* skCanvas = canvas()->existingDrawingCanvas()) {
152 // The canvas should always have an initial save frame, to support 153 // The canvas should always have an initial save frame, to support
153 // resetting the top level matrix and clip. 154 // resetting the top level matrix and clip.
154 DCHECK_GT(skCanvas->getSaveCount(), 1); 155 DCHECK_GT(skCanvas->getSaveCount(), 1);
155 156
156 if (m_contextLostMode == NotLostContext) { 157 if (m_contextLostMode == NotLostContext) {
157 DCHECK_EQ(static_cast<size_t>(skCanvas->getSaveCount()), 158 DCHECK_EQ(static_cast<size_t>(skCanvas->getSaveCount()),
158 m_stateStack.size() + 1); 159 m_stateStack.size() + 1);
159 } 160 }
160 } 161 }
161 #endif 162 #endif
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 275
275 ColorBehavior CanvasRenderingContext2D::drawImageColorBehavior() const { 276 ColorBehavior CanvasRenderingContext2D::drawImageColorBehavior() const {
276 return CanvasRenderingContext::colorBehaviorForMediaDrawnToCanvas(); 277 return CanvasRenderingContext::colorBehaviorForMediaDrawnToCanvas();
277 } 278 }
278 279
279 void CanvasRenderingContext2D::reset() { 280 void CanvasRenderingContext2D::reset() {
280 // This is a multiple inherritance bootstrap 281 // This is a multiple inherritance bootstrap
281 BaseRenderingContext2D::reset(); 282 BaseRenderingContext2D::reset();
282 } 283 }
283 284
284 void CanvasRenderingContext2D::restoreCanvasMatrixClipStack(SkCanvas* c) const { 285 void CanvasRenderingContext2D::restoreCanvasMatrixClipStack(
286 PaintCanvas* c) const {
285 restoreMatrixClipStack(c); 287 restoreMatrixClipStack(c);
286 } 288 }
287 289
288 bool CanvasRenderingContext2D::shouldAntialias() const { 290 bool CanvasRenderingContext2D::shouldAntialias() const {
289 return state().shouldAntialias(); 291 return state().shouldAntialias();
290 } 292 }
291 293
292 void CanvasRenderingContext2D::setShouldAntialias(bool doAA) { 294 void CanvasRenderingContext2D::setShouldAntialias(bool doAA) {
293 modifiableState().setShouldAntialias(doAA); 295 modifiableState().setShouldAntialias(doAA);
294 } 296 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 368
367 void CanvasRenderingContext2D::snapshotStateForFilter() { 369 void CanvasRenderingContext2D::snapshotStateForFilter() {
368 // The style resolution required for fonts is not available in frame-less 370 // The style resolution required for fonts is not available in frame-less
369 // documents. 371 // documents.
370 if (!canvas()->document().frame()) 372 if (!canvas()->document().frame())
371 return; 373 return;
372 374
373 modifiableState().setFontForFilter(accessFont()); 375 modifiableState().setFontForFilter(accessFont());
374 } 376 }
375 377
376 SkCanvas* CanvasRenderingContext2D::drawingCanvas() const { 378 PaintCanvas* CanvasRenderingContext2D::drawingCanvas() const {
377 if (isContextLost()) 379 if (isContextLost())
378 return nullptr; 380 return nullptr;
379 return canvas()->drawingCanvas(); 381 return canvas()->drawingCanvas();
380 } 382 }
381 383
382 SkCanvas* CanvasRenderingContext2D::existingDrawingCanvas() const { 384 PaintCanvas* CanvasRenderingContext2D::existingDrawingCanvas() const {
383 return canvas()->existingDrawingCanvas(); 385 return canvas()->existingDrawingCanvas();
384 } 386 }
385 387
386 void CanvasRenderingContext2D::disableDeferral(DisableDeferralReason reason) { 388 void CanvasRenderingContext2D::disableDeferral(DisableDeferralReason reason) {
387 canvas()->disableDeferral(reason); 389 canvas()->disableDeferral(reason);
388 } 390 }
389 391
390 AffineTransform CanvasRenderingContext2D::baseTransform() const { 392 AffineTransform CanvasRenderingContext2D::baseTransform() const {
391 return canvas()->baseTransform(); 393 return canvas()->baseTransform();
392 } 394 }
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 // The style resolution required for fonts is not available in frame-less 815 // The style resolution required for fonts is not available in frame-less
814 // documents. 816 // documents.
815 if (!canvas()->document().frame()) 817 if (!canvas()->document().frame())
816 return; 818 return;
817 819
818 // accessFont needs the style to be up to date, but updating style can cause 820 // accessFont needs the style to be up to date, but updating style can cause
819 // script to run, (e.g. due to autofocus) which can free the canvas (set size 821 // script to run, (e.g. due to autofocus) which can free the canvas (set size
820 // to 0, for example), so update style before grabbing the drawingCanvas. 822 // to 0, for example), so update style before grabbing the drawingCanvas.
821 canvas()->document().updateStyleAndLayoutTreeForNode(canvas()); 823 canvas()->document().updateStyleAndLayoutTreeForNode(canvas());
822 824
823 SkCanvas* c = drawingCanvas(); 825 PaintCanvas* c = drawingCanvas();
824 if (!c) 826 if (!c)
825 return; 827 return;
826 828
827 if (!std::isfinite(x) || !std::isfinite(y)) 829 if (!std::isfinite(x) || !std::isfinite(y))
828 return; 830 return;
829 if (maxWidth && (!std::isfinite(*maxWidth) || *maxWidth <= 0)) 831 if (maxWidth && (!std::isfinite(*maxWidth) || *maxWidth <= 0))
830 return; 832 return;
831 833
832 // Currently, SkPictureImageFilter does not support subpixel text 834 // Currently, SkPictureImageFilter does not support subpixel text
833 // anti-aliasing, which is expected when !creationAttributes().alpha(), so we 835 // anti-aliasing, which is expected when !creationAttributes().alpha(), so we
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
897 drawingCanvas()->save(); 899 drawingCanvas()->save();
898 drawingCanvas()->translate(location.x(), location.y()); 900 drawingCanvas()->translate(location.x(), location.y());
899 // We draw when fontWidth is 0 so compositing operations (eg, a "copy" op) 901 // We draw when fontWidth is 0 so compositing operations (eg, a "copy" op)
900 // still work. 902 // still work.
901 drawingCanvas()->scale((fontWidth > 0 ? (width / fontWidth) : 0), 1); 903 drawingCanvas()->scale((fontWidth > 0 ? (width / fontWidth) : 0), 1);
902 location = FloatPoint(); 904 location = FloatPoint();
903 } 905 }
904 906
905 draw( 907 draw(
906 [&font, &textRunPaintInfo, &location]( 908 [&font, &textRunPaintInfo, &location](
907 SkCanvas* c, const SkPaint* paint) // draw lambda 909 PaintCanvas* c, const PaintFlags* paint) // draw lambda
908 { 910 {
909 font.drawBidiText(c, textRunPaintInfo, location, 911 font.drawBidiText(c, textRunPaintInfo, location,
910 Font::UseFallbackIfFontNotReady, cDeviceScaleFactor, 912 Font::UseFallbackIfFontNotReady, cDeviceScaleFactor,
911 *paint); 913 *paint);
912 }, 914 },
913 [](const SkIRect& rect) // overdraw test lambda 915 [](const SkIRect& rect) // overdraw test lambda
914 { return false; }, 916 { return false; },
915 textRunPaintInfo.bounds, paintType); 917 textRunPaintInfo.bounds, paintType);
916 } 918 }
917 919
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
1075 !canvas()->isSupportedInteractiveCanvasFallback(*options.control())) { 1077 !canvas()->isSupportedInteractiveCanvasFallback(*options.control())) {
1076 exceptionState.throwDOMException(NotSupportedError, 1078 exceptionState.throwDOMException(NotSupportedError,
1077 "The control is neither null nor a " 1079 "The control is neither null nor a "
1078 "supported interactive canvas fallback " 1080 "supported interactive canvas fallback "
1079 "element."); 1081 "element.");
1080 return; 1082 return;
1081 } 1083 }
1082 1084
1083 Path hitRegionPath = options.hasPath() ? options.path()->path() : m_path; 1085 Path hitRegionPath = options.hasPath() ? options.path()->path() : m_path;
1084 1086
1085 SkCanvas* c = drawingCanvas(); 1087 PaintCanvas* c = drawingCanvas();
1086 1088
1087 if (hitRegionPath.isEmpty() || !c || !state().isTransformInvertible() || 1089 if (hitRegionPath.isEmpty() || !c || !state().isTransformInvertible() ||
1088 c->isClipEmpty()) { 1090 c->isClipEmpty()) {
1089 exceptionState.throwDOMException(NotSupportedError, 1091 exceptionState.throwDOMException(NotSupportedError,
1090 "The specified path has no pixels."); 1092 "The specified path has no pixels.");
1091 return; 1093 return;
1092 } 1094 }
1093 1095
1094 hitRegionPath.transform(state().transform()); 1096 hitRegionPath.transform(state().transform());
1095 1097
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1165 } 1167 }
1166 return true; 1168 return true;
1167 } 1169 }
1168 1170
1169 void CanvasRenderingContext2D::resetUsageTracking() { 1171 void CanvasRenderingContext2D::resetUsageTracking() {
1170 UsageCounters newCounters; 1172 UsageCounters newCounters;
1171 m_usageCounters = newCounters; 1173 m_usageCounters = newCounters;
1172 } 1174 }
1173 1175
1174 } // namespace blink 1176 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698