15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2003, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008-2009 Torch Mobile, Inc. 453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved. 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef GraphicsContext_h 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define GraphicsContext_h 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/PlatformExport.h" 32a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/fonts/Font.h" 331e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/FloatRect.h" 34f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)#include "platform/graphics/DashArray.h" 35d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "platform/graphics/DrawLooperBuilder.h" 36a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/ImageBufferSurface.h" 379e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)#include "platform/graphics/ImageFilter.h" 381e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/graphics/ImageOrientation.h" 39a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsContextAnnotation.h" 40a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsContextState.h" 41c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "platform/graphics/RegionTracker.h" 427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "platform/graphics/skia/SkiaUtils.h" 43e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/FastAllocBase.h" 44e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Forward.h" 45e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Noncopyable.h" 46e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/PassOwnPtr.h" 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochclass SkBitmap; 49591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochclass SkPaint; 50591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochclass SkPath; 51591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochclass SkRRect; 527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass SkTextBlob; 53591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochstruct SkRect; 54591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 55c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5719cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)class DisplayList; 5881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)class ImageBuffer; 5981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)class KURL; 6081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 61a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)class PLATFORM_EXPORT GraphicsContext { 6281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) WTF_MAKE_NONCOPYABLE(GraphicsContext); WTF_MAKE_FAST_ALLOCATED; 6381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)public: 6481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) enum AntiAliasingMode { 6581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) NotAntiAliased, 6681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) AntiAliased 6781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) }; 6881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) enum AccessMode { 6981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) ReadOnly, 7081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) ReadWrite 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 73323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) enum DisabledMode { 74323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) NothingDisabled = 0, // Run as normal. 75e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) FullyDisabled = 1 // Do absolutely minimal work to remove the cost of the context from performance tests. 76323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) }; 77323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // A 0 canvas is allowed, but in such cases the context must only have canvas 797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // related commands called when within a beginRecording/endRecording block. 807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Furthermore, save/restore calls must be balanced any time the canvas is 0. 81323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) explicit GraphicsContext(SkCanvas*, DisabledMode = NothingDisabled); 827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 8381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) ~GraphicsContext(); 8481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 8510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // Returns the canvas used for painting. Must not be called if painting is disabled. 8681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // Accessing the backing canvas this way flushes all queued save ops, 8781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // so it should be avoided. Use the corresponding draw/matrix/clip methods instead. 8881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) SkCanvas* canvas() 8981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) { 9081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // Flush any pending saves. 9107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch realizeCanvasSave(); 9281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 9381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) return m_canvas; 9481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) } 9510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch const SkCanvas* canvas() const 9610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch { 9710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return m_canvas; 9810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch } 99c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 100c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void resetCanvas(SkCanvas*); 101c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 102323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) bool contextDisabled() const { return m_disabledState; } 10381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 10493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // ---------- State management methods ----------------- 10593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void save(); 10693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void restore(); 107f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) unsigned saveCount() { return m_canvasStateStack.size(); } 108197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if ENABLE(ASSERT) 109f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) void disableDestructionChecks() { m_disableDestructionChecks = true; } 110f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#endif 11193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 11207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void saveLayer(const SkRect* bounds, const SkPaint*); 11393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void restoreLayer(); 11493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 115197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bool hasStroke() const { return strokeStyle() != NoStroke && strokeThickness() > 0; } 116197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 117d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) float strokeThickness() const { return immutableState()->strokeData().thickness(); } 118d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setStrokeThickness(float thickness) { mutableState()->setStrokeThickness(thickness); } 11993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 120d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) StrokeStyle strokeStyle() const { return immutableState()->strokeData().style(); } 121d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setStrokeStyle(StrokeStyle style) { mutableState()->setStrokeStyle(style); } 12293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 1237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Color strokeColor() const { return immutableState()->strokeColor(); } 124d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setStrokeColor(const Color& color) { mutableState()->setStrokeColor(color); } 125d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) SkColor effectiveStrokeColor() const { return immutableState()->effectiveStrokeColor(); } 12681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 1277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Pattern* strokePattern() const { return immutableState()->strokePattern(); } 12881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void setStrokePattern(PassRefPtr<Pattern>); 12981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 1307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Gradient* strokeGradient() const { return immutableState()->strokeGradient(); } 13181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void setStrokeGradient(PassRefPtr<Gradient>); 13281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 133d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setLineCap(LineCap cap) { mutableState()->setLineCap(cap); } 134d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setLineDash(const DashArray& dashes, float dashOffset) { mutableState()->setLineDash(dashes, dashOffset); } 135d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setLineJoin(LineJoin join) { mutableState()->setLineJoin(join); } 136d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setMiterLimit(float limit) { mutableState()->setMiterLimit(limit); } 13793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 138d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WindRule fillRule() const { return immutableState()->fillRule(); } 139d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setFillRule(WindRule fillRule) { mutableState()->setFillRule(fillRule); } 14093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 141d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) Color fillColor() const { return immutableState()->fillColor(); } 142d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setFillColor(const Color& color) { mutableState()->setFillColor(color); } 143d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) SkColor effectiveFillColor() const { return immutableState()->effectiveFillColor(); } 14481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 14581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void setFillPattern(PassRefPtr<Pattern>); 146d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) Pattern* fillPattern() const { return immutableState()->fillPattern(); } 14781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 14881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void setFillGradient(PassRefPtr<Gradient>); 149d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) Gradient* fillGradient() const { return immutableState()->fillGradient(); } 150e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 151d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) SkDrawLooper* drawLooper() const { return immutableState()->drawLooper(); } 15281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 15306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) bool getTransformedClipBounds(FloatRect* bounds) const; 15451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) SkMatrix getTotalMatrix() const; 15581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 156d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setShouldAntialias(bool antialias) { mutableState()->setShouldAntialias(antialias); } 157d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) bool shouldAntialias() const { return immutableState()->shouldAntialias(); } 15881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 159aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch // Disable the anti-aliasing optimization for scales/multiple-of-90-degrees 160aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch // rotations of thin ("hairline") images. 161aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch // Note: This will only be reliable when the device pixel scale/ratio is 162aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch // fixed (e.g. when drawing to context backed by an ImageBuffer). 163aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch void disableAntialiasingOptimizationForHairlineImages() { ASSERT(!isRecording()); m_antialiasHairlineImages = true; } 164aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch bool shouldAntialiasHairlineImages() const { return m_antialiasHairlineImages; } 165aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 166d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setShouldClampToSourceRect(bool clampToSourceRect) { mutableState()->setShouldClampToSourceRect(clampToSourceRect); } 167d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) bool shouldClampToSourceRect() const { return immutableState()->shouldClampToSourceRect(); } 1689bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 1699e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) // FIXME: the setter is only used once, at construction time; convert to a constructor param, 1709e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) // and possibly consolidate with other flags (paintDisabled, isPrinting, ...) 1719e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) void setShouldSmoothFonts(bool smoothFonts) { m_shouldSmoothFonts = smoothFonts; } 1729e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) bool shouldSmoothFonts() const { return m_shouldSmoothFonts; } 17381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 17493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // Turn off LCD text for the paint if not supported on this context. 1757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void adjustTextRenderMode(SkPaint*) const; 1767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool couldUseLCDRenderedText() const; 17781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 178d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setTextDrawingMode(TextDrawingModeFlags mode) { mutableState()->setTextDrawingMode(mode); } 179d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) TextDrawingModeFlags textDrawingMode() const { return immutableState()->textDrawingMode(); } 18081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 181d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setAlphaAsFloat(float alpha) { mutableState()->setAlphaAsFloat(alpha);} 182d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) int getNormalizedAlpha() const 183d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 184d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) int alpha = immutableState()->alpha(); 185d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return alpha > 255 ? 255 : alpha; 186d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 18781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 188d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setImageInterpolationQuality(InterpolationQuality quality) { mutableState()->setInterpolationQuality(quality); } 189d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) InterpolationQuality imageInterpolationQuality() const { return immutableState()->interpolationQuality(); } 19081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 191e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) void setCompositeOperation(CompositeOperator, WebBlendMode = WebBlendModeNormal); 192d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) CompositeOperator compositeOperation() const { return immutableState()->compositeOperator(); } 193e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebBlendMode blendModeOperation() const { return immutableState()->blendMode(); } 19481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 195c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) // Speicy the device scale factor which may change the way document markers 196c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) // and fonts are rendered. 197c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void setDeviceScaleFactor(float factor) { m_deviceScaleFactor = factor; } 198c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) float deviceScaleFactor() const { return m_deviceScaleFactor; } 19981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 20081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // If true we are (most likely) rendering to a web page and the 20181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // canvas has been prepared with an opaque background. If false, 20209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // the canvas may have transparency (as is the case when rendering 20381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // to a canvas object). 20481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void setCertainlyOpaque(bool isOpaque) { m_isCertainlyOpaque = isOpaque; } 20581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) bool isCertainlyOpaque() const { return m_isCertainlyOpaque; } 20681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 20781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // Returns if the context is a printing context instead of a display 20881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // context. Bitmap shouldn't be resampled when printing to keep the best 20981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // possible quality. 21081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) bool printing() const { return m_printing; } 21181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void setPrinting(bool printing) { m_printing = printing; } 21281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 21381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) bool isAccelerated() const { return m_accelerated; } 21481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void setAccelerated(bool accelerated) { m_accelerated = accelerated; } 21581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 21681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // The opaque region is empty until tracking is turned on. 21781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // It is never clerared by the context. 218c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) enum RegionTrackingMode { 219c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RegionTrackingDisabled = 0, 220c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RegionTrackingOpaque, 221c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RegionTrackingOverwrite 222c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) }; 223c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void setRegionTrackingMode(RegionTrackingMode); 224c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) bool regionTrackingEnabled() { return m_regionTrackingMode != RegionTrackingDisabled; } 225c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) const RegionTracker& opaqueRegion() const { return m_trackedRegion; } 22681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 22793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // The text region is empty until tracking is turned on. 22893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // It is never clerared by the context. 22993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void setTrackTextRegion(bool track) { m_trackTextRegion = track; } 23093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) const SkRect& textRegion() const { return m_textRegion; } 23181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 2325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) AnnotationModeFlags annotationMode() const { return m_annotationMode; } 2335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void setAnnotationMode(const AnnotationModeFlags mode) { m_annotationMode = mode; } 234c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 235c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) SkColorFilter* colorFilter() const; 2361e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) void setColorFilter(ColorFilter); 23793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // ---------- End state management methods ----------------- 23881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 23993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // Get the contents of the image buffer 24007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch bool readPixels(const SkImageInfo&, void* pixels, size_t rowBytes, int x, int y); 24181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 2425d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // Get the current fill style. 2435d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) const SkPaint& fillPaint() const { return immutableState()->fillPaint(); } 24481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 2455d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // Get the current stroke style. 2465d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) const SkPaint& strokePaint() const { return immutableState()->strokePaint(); } 24781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 24881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // These draw methods will do both stroking and filling. 24981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // FIXME: ...except drawRect(), which fills properly but always strokes 25081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // using a 1-pixel stroke inset from the rect borders (of the correct 25181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // stroke color). 25281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void drawRect(const IntRect&); 25381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void drawLine(const IntPoint&, const IntPoint&); 25481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void drawConvexPolygon(size_t numPoints, const FloatPoint*, bool shouldAntialias = false); 25581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 25681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void fillPath(const Path&); 25781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void strokePath(const Path&); 25881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 25981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void fillEllipse(const FloatRect&); 26081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void strokeEllipse(const FloatRect&); 26181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 26281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void fillRect(const FloatRect&); 2635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void fillRect(const FloatRect&, const Color&); 2645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void fillRect(const FloatRect&, const Color&, CompositeOperator); 2655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void fillRoundedRect(const IntRect&, const IntSize& topLeft, const IntSize& topRight, const IntSize& bottomLeft, const IntSize& bottomRight, const Color&); 2665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void fillRoundedRect(const RoundedRect&, const Color&); 26781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 26881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void clearRect(const FloatRect&); 26981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 2706f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch void strokeRect(const FloatRect&); 27181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void strokeRect(const FloatRect&, float lineWidth); 27281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 273d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void fillBetweenRoundedRects(const IntRect&, const IntSize& outerTopLeft, const IntSize& outerTopRight, const IntSize& outerBottomLeft, const IntSize& outerBottomRight, 274d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) const IntRect&, const IntSize& innerTopLeft, const IntSize& innerTopRight, const IntSize& innerBottomLeft, const IntSize& innerBottomRight, const Color&); 275d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void fillBetweenRoundedRects(const RoundedRect&, const RoundedRect&, const Color&); 276d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 27719cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) void drawDisplayList(DisplayList*); 27819cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) 2795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void drawImage(Image*, const IntPoint&, CompositeOperator = CompositeSourceOver, RespectImageOrientationEnum = DoNotRespectImageOrientation); 28043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) void drawImage(Image*, const IntRect&, CompositeOperator = CompositeSourceOver, RespectImageOrientationEnum = DoNotRespectImageOrientation); 2815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void drawImage(Image*, const FloatRect& destRect); 28243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) void drawImage(Image*, const FloatRect& destRect, const FloatRect& srcRect, CompositeOperator = CompositeSourceOver, RespectImageOrientationEnum = DoNotRespectImageOrientation); 283e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) void drawImage(Image*, const FloatRect& destRect, const FloatRect& srcRect, CompositeOperator, WebBlendMode, RespectImageOrientationEnum = DoNotRespectImageOrientation); 28481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 2855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void drawTiledImage(Image*, const IntRect& destRect, const IntPoint& srcPoint, const IntSize& tileSize, 286e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) CompositeOperator = CompositeSourceOver, WebBlendMode = WebBlendModeNormal, const IntSize& repeatSpacing = IntSize()); 2875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void drawTiledImage(Image*, const IntRect& destRect, const IntRect& srcRect, 28881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) const FloatSize& tileScaleFactor, Image::TileRule hRule = Image::StretchTile, Image::TileRule vRule = Image::StretchTile, 28943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) CompositeOperator = CompositeSourceOver); 29081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 291c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void drawImageBuffer(ImageBuffer*, const FloatRect& destRect, const FloatRect* srcRect = 0, CompositeOperator = CompositeSourceOver, WebBlendMode = WebBlendModeNormal); 292c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 293e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) void drawPicture(PassRefPtr<SkPicture>, const FloatRect& dest, const FloatRect& src, CompositeOperator, WebBlendMode); 29481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 29581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // These methods write to the canvas and modify the opaque region, if tracked. 29681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // Also drawLine(const IntPoint& point1, const IntPoint& point2) and fillRoundedRect 297d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void writePixels(const SkImageInfo&, const void* pixels, size_t rowBytes, int x, int y); 298d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void writePixels(const SkBitmap&, int x, int y); 29981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void drawBitmap(const SkBitmap&, SkScalar, SkScalar, const SkPaint* = 0); 3005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void drawBitmapRect(const SkBitmap&, const SkRect*, const SkRect&, const SkPaint* = 0); 30181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void drawOval(const SkRect&, const SkPaint&); 30281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void drawPath(const SkPath&, const SkPaint&); 30381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // After drawing directly to the context's canvas, use this function to notify the context so 30481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // it can track the opaque region. 30581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // FIXME: this is still needed only because ImageSkia::paintSkBitmap() may need to notify for a 30681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // smaller rect than the one drawn to, due to its clipping logic. 30781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void didDrawRect(const SkRect&, const SkPaint&, const SkBitmap* = 0); 30881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void drawRect(const SkRect&, const SkPaint&); 30993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void drawPosText(const void* text, size_t byteLength, const SkPoint pos[], const SkRect& textRect, const SkPaint&); 310197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch void drawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[], SkScalar constY, const SkRect& textRect, const SkPaint&); 3117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void drawTextBlob(const SkTextBlob*, const SkPoint& origin, const SkPaint&); 31281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 313d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void clip(const IntRect& rect) { clipRect(rect); } 31493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void clip(const FloatRect& rect) { clipRect(rect); } 315d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void clipRoundedRect(const RoundedRect&, SkRegion::Op = SkRegion::kIntersect_Op); 31693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void clipOut(const IntRect& rect) { clipRect(rect, NotAntiAliased, SkRegion::kDifference_Op); } 3177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void clipOut(const Path&); 31881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void clipOutRoundedRect(const RoundedRect&); 31993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void clipPath(const Path&, WindRule = RULE_EVENODD); 32081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void clipConvexPolygon(size_t numPoints, const FloatPoint*, bool antialias = true); 321d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void clipRect(const SkRect&, AntiAliasingMode = NotAntiAliased, SkRegion::Op = SkRegion::kIntersect_Op); 3227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // This clip function is used only by <canvas> code. It allows 3237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // implementations to handle clipping on the canvas differently since 3247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // the discipline is different. 3257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void canvasClip(const Path&, WindRule = RULE_EVENODD); 32681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 32793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void drawText(const Font&, const TextRunPaintInfo&, const FloatPoint&); 32893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void drawEmphasisMarks(const Font&, const TextRunPaintInfo&, const AtomicString& mark, const FloatPoint&); 32993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void drawBidiText(const Font&, const TextRunPaintInfo&, const FloatPoint&, Font::CustomFontNotReadyAction = Font::DoNotPaintIfFontNotReady); 3305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void drawHighlightForText(const Font&, const TextRun&, const FloatPoint&, int h, const Color& backgroundColor, int from = 0, int to = -1); 33181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 33281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void drawLineForText(const FloatPoint&, float width, bool printing); 33381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) enum DocumentMarkerLineStyle { 33481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) DocumentMarkerSpellingLineStyle, 335e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) DocumentMarkerGrammarLineStyle 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 33781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void drawLineForDocumentMarker(const FloatPoint&, float width, DocumentMarkerLineStyle); 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 339c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) void beginTransparencyLayer(float opacity, const FloatRect* = 0); 34009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void beginLayer(float opacity, CompositeOperator, const FloatRect* = 0, ColorFilter = ColorFilterNone, ImageFilter* = 0); 341c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) void endLayer(); 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 34307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void beginCull(const FloatRect&); 34407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void endCull(); 34507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 34619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) // Instead of being dispatched to the active canvas, draw commands following beginRecording() 3477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // are stored in a display list that can be replayed at a later time. Pass in the bounding 3487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // rectangle for the content in the list. 3497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void beginRecording(const FloatRect&, uint32_t = 0); 35019cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) PassRefPtr<DisplayList> endRecording(); 35119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) 35281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) bool hasShadow() const; 35393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void setShadow(const FloatSize& offset, float blur, const Color&, 354d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) DrawLooperBuilder::ShadowTransformMode = DrawLooperBuilder::ShadowRespectsTransforms, 355d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) DrawLooperBuilder::ShadowAlphaMode = DrawLooperBuilder::ShadowRespectsAlpha); 35693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void clearShadow() { clearDrawLooper(); } 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 35893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // It is assumed that this draw looper is used only for shadows 35993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // (i.e. a draw looper is set if and only if there is a shadow). 360d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) // The builder passed into this method will be destroyed. 361d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setDrawLooper(PassOwnPtr<DrawLooperBuilder>); 36293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void clearDrawLooper(); 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 36481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void drawFocusRing(const Vector<IntRect>&, int width, int offset, const Color&); 36581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void drawFocusRing(const Path&, int width, int offset, const Color&); 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 367591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch enum Edge { 368591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch NoEdge = 0, 369591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch TopEdge = 1 << 1, 370591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch RightEdge = 1 << 2, 371591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch BottomEdge = 1 << 3, 372591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch LeftEdge = 1 << 4 373591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }; 374591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch typedef unsigned Edges; 375591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch void drawInnerShadow(const RoundedRect&, const Color& shadowColor, const IntSize shadowOffset, int shadowBlur, int shadowSpread, Edges clippedEdges = NoEdge); 376591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 37793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // ---------- Transformation methods ----------------- 3785d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // Note that the getCTM method returns only the current transform from Blink's perspective, 3795d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // which is not the final transform used to place content on screen. It cannot be relied upon 3805d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // for testing where a point will appear on screen or how large it will be. 3815d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) AffineTransform getCTM() const; 3821e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) void concatCTM(const AffineTransform& affine) { concat(affineTransformToSkMatrix(affine)); } 3831e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) void setCTM(const AffineTransform& affine) { setMatrix(affineTransformToSkMatrix(affine)); } 38493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void setMatrix(const SkMatrix&); 38593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 3865d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void scale(float x, float y); 38781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void rotate(float angleInRadians); 38881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void translate(float x, float y); 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 39093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // This function applies the device scale factor to the context, making the context capable of 39193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // acting as a base-level context for a HiDPI environment. 3925d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void applyDeviceScaleFactor(float deviceScaleFactor) { scale(deviceScaleFactor, deviceScaleFactor); } 39393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // ---------- End transformation methods ----------------- 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 39593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // URL drawing 39693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void setURLForRect(const KURL&, const IntRect&); 39781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void setURLFragmentForRect(const String& name, const IntRect&); 39881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void addURLTargetAtPoint(const String& name, const IntPoint&); 39953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 40081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // Create an image buffer compatible with this context, with suitable resolution 40181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // for drawing into the buffer and then into this context. 402c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) PassOwnPtr<ImageBuffer> createRasterBuffer(const IntSize&, OpacityMode = NonOpaque) const; 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 40481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) static void adjustLineToPixelBoundaries(FloatPoint& p1, FloatPoint& p2, float strokeWidth, StrokeStyle); 40581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 406197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch void beginAnnotation(const AnnotationList&); 4075267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void endAnnotation(); 4085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 409c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void preparePaintForDrawRectToRect( 410c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) SkPaint*, 411c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) const SkRect& srcRect, 412c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) const SkRect& destRect, 413c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) CompositeOperator, 414e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebBlendMode, 415c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) bool isLazyDecoded = false, 416c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) bool isDataComplete = true) const; 417c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 418c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) static int focusRingOutsetExtent(int offset, int width) 419c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) { 420c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return focusRingOutset(offset) + (focusRingWidth(width) + 1) / 2; 421c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 422c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 42381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)private: 42409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) const GraphicsContextState* immutableState() const { return m_paintState; } 42509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 42609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) GraphicsContextState* mutableState() 42709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 42809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) realizePaintSave(); 42909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return m_paintState; 43009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 43109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 43281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) static void setPathFromConvexPoints(SkPath*, size_t, const FloatPoint*); 43381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) static void setRadii(SkVector*, IntSize, IntSize, IntSize, IntSize); 43481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 4351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) static PassRefPtr<SkColorFilter> WebCoreColorFilterToSkiaColorFilter(ColorFilter); 4361e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 4378abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#if OS(MACOSX) 438c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) static inline int focusRingOutset(int offset) { return offset + 2; } 439c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) static inline int focusRingWidth(int width) { return width; } 44081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)#else 441c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) static inline int focusRingOutset(int offset) { return 0; } 442c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) static inline int focusRingWidth(int width) { return 1; } 4437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static SkPMColor lineColors(int); 4447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static SkPMColor antiColors1(int); 4457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static SkPMColor antiColors2(int); 44681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) static void draw1xMarker(SkBitmap*, int); 44781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) static void draw2xMarker(SkBitmap*, int); 44881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)#endif 44981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 45081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // Helpers for drawing a focus ring (drawFocusRing) 451c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) float prepareFocusRingPaint(SkPaint&, const Color&, int width) const; 452c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void drawFocusRingPath(const SkPath&, const Color&, int width); 453c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void drawFocusRingRect(const SkRect&, const Color&, int width); 454c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 45581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // SkCanvas wrappers. 456d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void clipPath(const SkPath&, AntiAliasingMode = NotAntiAliased, SkRegion::Op = SkRegion::kIntersect_Op); 457d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void clipRRect(const SkRRect&, AntiAliasingMode = NotAntiAliased, SkRegion::Op = SkRegion::kIntersect_Op); 458d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void concat(const SkMatrix&); 459c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void drawRRect(const SkRRect&, const SkPaint&); 46081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 46109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Apply deferred paint state saves 46209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void realizePaintSave() 46381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) { 464323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (contextDisabled()) 465323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return; 466323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 467d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (m_paintState->saveCount()) { 468d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_paintState->decrementSaveCount(); 46909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ++m_paintStateIndex; 4705d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (m_paintStateStack.size() == m_paintStateIndex) { 4715d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) m_paintStateStack.append(GraphicsContextState::createAndCopy(*m_paintState)); 4725d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) m_paintState = m_paintStateStack[m_paintStateIndex].get(); 4735d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } else { 4745d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) GraphicsContextState* priorPaintState = m_paintState; 4755d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) m_paintState = m_paintStateStack[m_paintStateIndex].get(); 4765d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) m_paintState->copy(*priorPaintState); 4775d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 47809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 47909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 48009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 48109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Apply deferred canvas state saves 48207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void realizeCanvasSave() 48309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 484323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (!m_pendingCanvasSave || contextDisabled()) 48507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return; 48607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 4877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT(m_canvas); // m_pendingCanvasSave should never be true when no canvas. 48807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_canvas->save(); 48907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_pendingCanvasSave = false; 49081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) } 49181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 49293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void didDrawTextInRect(const SkRect& textRect); 49393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 494591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch void fillRectWithRoundedHole(const IntRect&, const RoundedRect& roundedHoleRect, const Color&); 495591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 49651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bool isRecording() const; 49751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 498323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) // null indicates painting is contextDisabled. Never delete this object. 49981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) SkCanvas* m_canvas; 50081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 50109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Paint states stack. Enables local drawing state change with save()/restore() calls. 50209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // This state controls the appearance of drawn content. 50309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // We do not delete from this stack to avoid memory churn. 50409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Vector<OwnPtr<GraphicsContextState> > m_paintStateStack; 50509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Current index on the stack. May not be the last thing on the stack. 50609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) unsigned m_paintStateIndex; 50709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Raw pointer to the current state. 50809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) GraphicsContextState* m_paintState; 50909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 51009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Currently pending save flags for Skia Canvas state. 51109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Canvas state includes the canavs, it's matrix and clips. Think of it as _where_ 51209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // the draw operations will happen. 51309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) struct CanvasSaveState; 51409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Vector<CanvasSaveState> m_canvasStateStack; 51507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch bool m_pendingCanvasSave; 51681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 5175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) AnnotationModeFlags m_annotationMode; 5185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 51919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) struct RecordingState; 52019cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) Vector<RecordingState> m_recordingStateStack; 52119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) 522197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if ENABLE(ASSERT) 5235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) unsigned m_annotationCount; 524c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) unsigned m_layerCount; 525f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) bool m_disableDestructionChecks; 52681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)#endif 52781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // Tracks the region painted opaque via the GraphicsContext. 528c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RegionTracker m_trackedRegion; 52981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 53093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // Tracks the region where text is painted via the GraphicsContext. 53193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) SkRect m_textRegion; 53293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 533323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) unsigned m_disabledState; 534323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 535c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) float m_deviceScaleFactor; 536c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 537323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) // Activation for the above region tracking features 538c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) unsigned m_regionTrackingMode : 2; 539323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) bool m_trackTextRegion : 1; 540323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 541e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) bool m_accelerated : 1; 542e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) bool m_isCertainlyOpaque : 1; 543e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) bool m_printing : 1; 544aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch bool m_antialiasHairlineImages : 1; 5459e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) bool m_shouldSmoothFonts : 1; 54681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)}; 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 548c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // GraphicsContext_h 551