164e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard/* 264e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * Copyright 2012, The Android Open Source Project 364e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * 464e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * Redistribution and use in source and binary forms, with or without 564e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * modification, are permitted provided that the following conditions 664e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * are met: 764e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * * Redistributions of source code must retain the above copyright 864e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * notice, this list of conditions and the following disclaimer. 964e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * * Redistributions in binary form must reproduce the above copyright 1064e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * notice, this list of conditions and the following disclaimer in the 1164e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * documentation and/or other materials provided with the distribution. 1264e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * 1364e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 1464e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1564e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1664e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 1764e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 1864e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 1964e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 2064e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 2164e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2264e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2364e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2464e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard */ 2564e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard 2664e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard#ifndef platform_graphics_context_skia_h 2764e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard#define platform_graphics_context_skia_h 2864e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard 2964e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard#include "PlatformGraphicsContext.h" 3064e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard 3164e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roardnamespace WebCore { 3264e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard 3364e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roardclass PlatformGraphicsContextSkia : public PlatformGraphicsContext { 3464e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roardpublic: 3564e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard PlatformGraphicsContextSkia(SkCanvas* canvas, bool takeCanvasOwnership = false); 3664e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual ~PlatformGraphicsContextSkia(); 3764e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual bool isPaintingDisabled(); 383718b58e4da76b7025aa5316a51264c5e38f2569John Reck SkCanvas* canvas() { return mCanvas; } 3964e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard 4064e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual ContextType type() { return PaintingContext; } 4164e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual SkCanvas* recordingCanvas() { return mCanvas; } 4285fb59060a0fdfcff93ae1c70dd49e0f93e55ab6Chris Craik virtual void setTextOffset(FloatSize offset) {} 4364e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard 4464e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard // FIXME: This is used by ImageBufferAndroid, which should really be 4564e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard // managing the canvas lifecycle itself 4664e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard 4764e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual bool deleteUs() const { return m_deleteCanvas; } 4864e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard 4964e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard // State management 5064e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void beginTransparencyLayer(float opacity); 5164e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void endTransparencyLayer(); 5264e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void save(); 5364e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void restore(); 5464e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard 5564e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard // Matrix operations 5664e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void concatCTM(const AffineTransform& affine); 5764e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void rotate(float angleInRadians); 5864e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void scale(const FloatSize& size); 5964e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void translate(float x, float y); 6064e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual const SkMatrix& getTotalMatrix(); 6164e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard 6264e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard // Clipping 6364e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void addInnerRoundedRectClip(const IntRect& rect, int thickness); 6464e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void canvasClip(const Path& path); 6522ddc4a8f76077593fba14c8cafffc74f9170dabJohn Reck virtual bool clip(const FloatRect& rect); 6622ddc4a8f76077593fba14c8cafffc74f9170dabJohn Reck virtual bool clip(const Path& path); 6722ddc4a8f76077593fba14c8cafffc74f9170dabJohn Reck virtual bool clipConvexPolygon(size_t numPoints, const FloatPoint*, bool antialias); 6822ddc4a8f76077593fba14c8cafffc74f9170dabJohn Reck virtual bool clipOut(const IntRect& r); 6922ddc4a8f76077593fba14c8cafffc74f9170dabJohn Reck virtual bool clipOut(const Path& p); 7022ddc4a8f76077593fba14c8cafffc74f9170dabJohn Reck virtual bool clipPath(const Path& pathToClip, WindRule clipRule); 713718b58e4da76b7025aa5316a51264c5e38f2569John Reck virtual SkIRect getTotalClipBounds() { return mCanvas->getTotalClip().getBounds(); } 7264e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard 7364e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard // Drawing 7464e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void clearRect(const FloatRect& rect); 7564e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void drawBitmapPattern(const SkBitmap& bitmap, const SkMatrix& matrix, 7664e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard CompositeOperator compositeOp, const FloatRect& destRect); 7764e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src, 783718b58e4da76b7025aa5316a51264c5e38f2569John Reck const SkRect& dst, CompositeOperator op = CompositeSourceOver); 7964e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void drawConvexPolygon(size_t numPoints, const FloatPoint* points, 8064e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard bool shouldAntialias); 8164e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void drawEllipse(const IntRect& rect); 8264e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void drawFocusRing(const Vector<IntRect>& rects, int /* width */, 8364e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard int /* offset */, const Color& color); 8464e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void drawHighlightForText(const Font& font, const TextRun& run, 8564e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard const FloatPoint& point, int h, 8664e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard const Color& backgroundColor, ColorSpace colorSpace, 8764e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard int from, int to, bool isActive); 8864e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void drawLine(const IntPoint& point1, const IntPoint& point2); 8964e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void drawLineForText(const FloatPoint& pt, float width); 9064e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void drawLineForTextChecking(const FloatPoint& pt, float width, 91675402ef4358583f64a2476927a548db4841c856John Reck GraphicsContext::TextCheckingLineStyle); 9264e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void drawRect(const IntRect& rect); 9364e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void fillPath(const Path& pathToFill, WindRule fillRule); 9464e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void fillRect(const FloatRect& rect); 9564e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void fillRect(const FloatRect& rect, const Color& color); 9664e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void fillRoundedRect(const IntRect& rect, const IntSize& topLeft, 9764e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard const IntSize& topRight, const IntSize& bottomLeft, 9864e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard const IntSize& bottomRight, const Color& color); 9964e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void strokeArc(const IntRect& r, int startAngle, int angleSpan); 10064e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void strokePath(const Path& pathToStroke); 10164e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual void strokeRect(const FloatRect& rect, float lineWidth); 1023718b58e4da76b7025aa5316a51264c5e38f2569John Reck virtual void drawPosText(const void* text, size_t byteLength, 1033718b58e4da76b7025aa5316a51264c5e38f2569John Reck const SkPoint pos[], const SkPaint& paint); 1043718b58e4da76b7025aa5316a51264c5e38f2569John Reck virtual void drawMediaButton(const IntRect& rect, RenderSkinMediaButton::MediaButton buttonType, 1053718b58e4da76b7025aa5316a51264c5e38f2569John Reck bool translucent = false, bool drawBackground = true, 1063718b58e4da76b7025aa5316a51264c5e38f2569John Reck const IntRect& thumb = IntRect()); 10764e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard 10864e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roardprivate: 10964e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard 11064e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard // shadowsIgnoreTransforms is only true for canvas's ImageBuffer, which will 11164e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard // have a GraphicsContext 11264e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard virtual bool shadowsIgnoreTransforms() const { 11364e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard return m_gc && m_gc->shadowsIgnoreTransforms(); 11464e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard } 11564e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard 11664e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard SkCanvas* mCanvas; 11764e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard bool m_deleteCanvas; 11864e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard}; 11964e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard 12064e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard} 12164e4b265f84573b97d408f7d3e5aa99a647be057Nicolas Roard#endif 122