1d0825bca7fe65beaee391d30da42e937db621564Steve Block/*
2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved.
3d0825bca7fe65beaee391d30da42e937db621564Steve Block *
4d0825bca7fe65beaee391d30da42e937db621564Steve Block * This library is free software; you can redistribute it and/or
5d0825bca7fe65beaee391d30da42e937db621564Steve Block * modify it under the terms of the GNU Library General Public
6d0825bca7fe65beaee391d30da42e937db621564Steve Block * License as published by the Free Software Foundation; either
7d0825bca7fe65beaee391d30da42e937db621564Steve Block * version 2 of the License, or (at your option) any later version.
8d0825bca7fe65beaee391d30da42e937db621564Steve Block *
9d0825bca7fe65beaee391d30da42e937db621564Steve Block * This library is distributed in the hope that it will be useful,
10d0825bca7fe65beaee391d30da42e937db621564Steve Block * but WITHOUT ANY WARRANTY; without even the implied warranty of
11d0825bca7fe65beaee391d30da42e937db621564Steve Block * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12d0825bca7fe65beaee391d30da42e937db621564Steve Block * Library General Public License for more details.
13d0825bca7fe65beaee391d30da42e937db621564Steve Block *
14d0825bca7fe65beaee391d30da42e937db621564Steve Block * You should have received a copy of the GNU Library General Public License
15d0825bca7fe65beaee391d30da42e937db621564Steve Block * along with this library; see the file COPYING.LIB.  If not, write to
16d0825bca7fe65beaee391d30da42e937db621564Steve Block * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17d0825bca7fe65beaee391d30da42e937db621564Steve Block * Boston, MA 02110-1301, USA.
18d0825bca7fe65beaee391d30da42e937db621564Steve Block */
19d0825bca7fe65beaee391d30da42e937db621564Steve Block
20d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "config.h"
21d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "GraphicsContext.h"
22d0825bca7fe65beaee391d30da42e937db621564Steve Block
23dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "AffineTransform.h"
24dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "KURL.h"
25d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "NotImplemented.h"
26d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "PainterOpenVG.h"
27d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "SurfaceOpenVG.h"
28d0825bca7fe65beaee391d30da42e937db621564Steve Block
29d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <wtf/Assertions.h>
30d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <wtf/MathExtras.h>
31d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <wtf/UnusedParam.h>
32d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <wtf/Vector.h>
33d0825bca7fe65beaee391d30da42e937db621564Steve Block
34d0825bca7fe65beaee391d30da42e937db621564Steve Block#if PLATFORM(EGL)
35d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "EGLDisplayOpenVG.h"
36d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "EGLUtils.h"
37d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <egl.h>
38d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif
39d0825bca7fe65beaee391d30da42e937db621564Steve Block
40d0825bca7fe65beaee391d30da42e937db621564Steve Blocknamespace WebCore {
41d0825bca7fe65beaee391d30da42e937db621564Steve Block
42d0825bca7fe65beaee391d30da42e937db621564Steve Block// typedef'ing doesn't work, let's inherit from PainterOpenVG instead
43d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass GraphicsContextPlatformPrivate : public PainterOpenVG {
44d0825bca7fe65beaee391d30da42e937db621564Steve Blockpublic:
45d0825bca7fe65beaee391d30da42e937db621564Steve Block    GraphicsContextPlatformPrivate(SurfaceOpenVG* surface)
46d0825bca7fe65beaee391d30da42e937db621564Steve Block        : PainterOpenVG(surface)
47d0825bca7fe65beaee391d30da42e937db621564Steve Block    {
48d0825bca7fe65beaee391d30da42e937db621564Steve Block    }
49d0825bca7fe65beaee391d30da42e937db621564Steve Block};
50d0825bca7fe65beaee391d30da42e937db621564Steve Block
51f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GraphicsContext::platformInit(SurfaceOpenVG* surface)
52d0825bca7fe65beaee391d30da42e937db621564Steve Block{
53f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    m_data = surface ? new GraphicsContextPlatformPrivate(surface) : 0;
54d0825bca7fe65beaee391d30da42e937db621564Steve Block    setPaintingDisabled(!surface);
55d0825bca7fe65beaee391d30da42e937db621564Steve Block}
56d0825bca7fe65beaee391d30da42e937db621564Steve Block
57f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GraphicsContext::platformDestroy()
58d0825bca7fe65beaee391d30da42e937db621564Steve Block{
59d0825bca7fe65beaee391d30da42e937db621564Steve Block    delete m_data;
60d0825bca7fe65beaee391d30da42e937db621564Steve Block}
61d0825bca7fe65beaee391d30da42e937db621564Steve Block
62d0825bca7fe65beaee391d30da42e937db621564Steve BlockPlatformGraphicsContext* GraphicsContext::platformContext() const
63d0825bca7fe65beaee391d30da42e937db621564Steve Block{
64d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
65d0825bca7fe65beaee391d30da42e937db621564Steve Block        return 0;
66d0825bca7fe65beaee391d30da42e937db621564Steve Block
67d0825bca7fe65beaee391d30da42e937db621564Steve Block    return m_data->baseSurface();
68d0825bca7fe65beaee391d30da42e937db621564Steve Block}
69d0825bca7fe65beaee391d30da42e937db621564Steve Block
70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockAffineTransform GraphicsContext::getCTM() const
71d0825bca7fe65beaee391d30da42e937db621564Steve Block{
72d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        return AffineTransform();
74d0825bca7fe65beaee391d30da42e937db621564Steve Block
75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return m_data->transformation();
76d0825bca7fe65beaee391d30da42e937db621564Steve Block}
77d0825bca7fe65beaee391d30da42e937db621564Steve Block
78d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::savePlatformState()
79d0825bca7fe65beaee391d30da42e937db621564Steve Block{
80d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
81d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
82d0825bca7fe65beaee391d30da42e937db621564Steve Block
83d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->save();
84d0825bca7fe65beaee391d30da42e937db621564Steve Block}
85d0825bca7fe65beaee391d30da42e937db621564Steve Block
86d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::restorePlatformState()
87d0825bca7fe65beaee391d30da42e937db621564Steve Block{
88d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
89d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
90d0825bca7fe65beaee391d30da42e937db621564Steve Block
91d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->restore();
92d0825bca7fe65beaee391d30da42e937db621564Steve Block}
93d0825bca7fe65beaee391d30da42e937db621564Steve Block
94d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::drawRect(const IntRect& rect)
95d0825bca7fe65beaee391d30da42e937db621564Steve Block{
96d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
97d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
98d0825bca7fe65beaee391d30da42e937db621564Steve Block
99d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->drawRect(rect);
100d0825bca7fe65beaee391d30da42e937db621564Steve Block}
101d0825bca7fe65beaee391d30da42e937db621564Steve Block
102d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::drawLine(const IntPoint& from, const IntPoint& to)
103d0825bca7fe65beaee391d30da42e937db621564Steve Block{
104d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
105d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
106d0825bca7fe65beaee391d30da42e937db621564Steve Block
107d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->drawLine(from, to);
108d0825bca7fe65beaee391d30da42e937db621564Steve Block}
109d0825bca7fe65beaee391d30da42e937db621564Steve Block
110d0825bca7fe65beaee391d30da42e937db621564Steve Block/**
111d0825bca7fe65beaee391d30da42e937db621564Steve Block * Draw the largest ellipse that fits into the given rectangle.
112d0825bca7fe65beaee391d30da42e937db621564Steve Block */
113d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::drawEllipse(const IntRect& rect)
114d0825bca7fe65beaee391d30da42e937db621564Steve Block{
115d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
116d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
117d0825bca7fe65beaee391d30da42e937db621564Steve Block
118d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->drawEllipse(rect);
119d0825bca7fe65beaee391d30da42e937db621564Steve Block}
120d0825bca7fe65beaee391d30da42e937db621564Steve Block
121d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::strokeArc(const IntRect& rect, int startAngle, int angleSpan)
122d0825bca7fe65beaee391d30da42e937db621564Steve Block{
123d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
124d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
125d0825bca7fe65beaee391d30da42e937db621564Steve Block
126d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->drawArc(rect, startAngle, angleSpan, VG_STROKE_PATH);
127d0825bca7fe65beaee391d30da42e937db621564Steve Block}
128d0825bca7fe65beaee391d30da42e937db621564Steve Block
129d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::drawConvexPolygon(size_t numPoints, const FloatPoint* points, bool shouldAntialias)
130d0825bca7fe65beaee391d30da42e937db621564Steve Block{
131d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
132d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
133d0825bca7fe65beaee391d30da42e937db621564Steve Block
134d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->drawPolygon(numPoints, points);
135d0825bca7fe65beaee391d30da42e937db621564Steve Block
136d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(shouldAntialias); // FIXME
137d0825bca7fe65beaee391d30da42e937db621564Steve Block}
138d0825bca7fe65beaee391d30da42e937db621564Steve Block
139f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GraphicsContext::fillPath(const Path& path)
140d0825bca7fe65beaee391d30da42e937db621564Steve Block{
141d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
142d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
143d0825bca7fe65beaee391d30da42e937db621564Steve Block
144f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    m_data->drawPath(path, VG_FILL_PATH, m_state.fillRule);
145d0825bca7fe65beaee391d30da42e937db621564Steve Block}
146d0825bca7fe65beaee391d30da42e937db621564Steve Block
147f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GraphicsContext::strokePath(const Path& path)
148d0825bca7fe65beaee391d30da42e937db621564Steve Block{
149d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
150d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
151d0825bca7fe65beaee391d30da42e937db621564Steve Block
152f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    m_data->drawPath(path, VG_STROKE_PATH, m_state.fillRule);
153d06194330da2bb8da887d2e1adeacb3a5c1504b2Steve Block}
154d06194330da2bb8da887d2e1adeacb3a5c1504b2Steve Block
155d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::fillRect(const FloatRect& rect)
156d0825bca7fe65beaee391d30da42e937db621564Steve Block{
157d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
158d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
159d0825bca7fe65beaee391d30da42e937db621564Steve Block
160d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->drawRect(rect, VG_FILL_PATH);
161d0825bca7fe65beaee391d30da42e937db621564Steve Block}
162d0825bca7fe65beaee391d30da42e937db621564Steve Block
163d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::fillRect(const FloatRect& rect, const Color& color, ColorSpace colorSpace)
164d0825bca7fe65beaee391d30da42e937db621564Steve Block{
165d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
166d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
167d0825bca7fe65beaee391d30da42e937db621564Steve Block
168d0825bca7fe65beaee391d30da42e937db621564Steve Block    Color oldColor = m_data->fillColor();
169d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setFillColor(color);
170d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->drawRect(rect, VG_FILL_PATH);
171d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setFillColor(oldColor);
172d0825bca7fe65beaee391d30da42e937db621564Steve Block
173d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(colorSpace); // FIXME
174d0825bca7fe65beaee391d30da42e937db621564Steve Block}
175d0825bca7fe65beaee391d30da42e937db621564Steve Block
176d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::fillRoundedRect(const IntRect& rect, const IntSize& topLeft, const IntSize& topRight, const IntSize& bottomLeft, const IntSize& bottomRight, const Color& color, ColorSpace colorSpace)
177d0825bca7fe65beaee391d30da42e937db621564Steve Block{
178d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
179d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
180d0825bca7fe65beaee391d30da42e937db621564Steve Block
181d0825bca7fe65beaee391d30da42e937db621564Steve Block    Color oldColor = m_data->fillColor();
182d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setFillColor(color);
183d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->drawRoundedRect(rect, topLeft, topRight, bottomLeft, bottomRight, VG_FILL_PATH);
184d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setFillColor(oldColor);
185d0825bca7fe65beaee391d30da42e937db621564Steve Block
186d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(colorSpace); // FIXME
187d0825bca7fe65beaee391d30da42e937db621564Steve Block}
188d0825bca7fe65beaee391d30da42e937db621564Steve Block
189d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::clip(const FloatRect& rect)
190d0825bca7fe65beaee391d30da42e937db621564Steve Block{
191d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
192d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
193d0825bca7fe65beaee391d30da42e937db621564Steve Block
194d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->intersectClipRect(rect);
195d0825bca7fe65beaee391d30da42e937db621564Steve Block}
196d0825bca7fe65beaee391d30da42e937db621564Steve Block
197f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GraphicsContext::clipPath(const Path& path, WindRule clipRule)
198d0825bca7fe65beaee391d30da42e937db621564Steve Block{
199d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
200d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
201d0825bca7fe65beaee391d30da42e937db621564Steve Block
202f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    m_data->clipPath(path, PainterOpenVG::IntersectClip, clipRule);
203d0825bca7fe65beaee391d30da42e937db621564Steve Block}
204d0825bca7fe65beaee391d30da42e937db621564Steve Block
205d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::drawFocusRing(const Vector<IntRect>& rects, int width, int offset, const Color& color)
206d0825bca7fe65beaee391d30da42e937db621564Steve Block{
207d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
208d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
209d0825bca7fe65beaee391d30da42e937db621564Steve Block
210d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (rects.isEmpty())
211d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
212d0825bca7fe65beaee391d30da42e937db621564Steve Block
213d0825bca7fe65beaee391d30da42e937db621564Steve Block    // FIXME: We just unite all focus ring rects into one for now.
214d0825bca7fe65beaee391d30da42e937db621564Steve Block    // We should outline the edge of the full region.
215d0825bca7fe65beaee391d30da42e937db621564Steve Block    offset += (width - 1) / 2;
216d0825bca7fe65beaee391d30da42e937db621564Steve Block    IntRect finalFocusRect;
217d0825bca7fe65beaee391d30da42e937db621564Steve Block
218d0825bca7fe65beaee391d30da42e937db621564Steve Block    for (unsigned i = 0; i < rects.size(); i++) {
219d0825bca7fe65beaee391d30da42e937db621564Steve Block        IntRect focusRect = rects[i];
220d0825bca7fe65beaee391d30da42e937db621564Steve Block        focusRect.inflate(offset);
221d0825bca7fe65beaee391d30da42e937db621564Steve Block        finalFocusRect.unite(focusRect);
222d0825bca7fe65beaee391d30da42e937db621564Steve Block    }
223d0825bca7fe65beaee391d30da42e937db621564Steve Block
224d0825bca7fe65beaee391d30da42e937db621564Steve Block    StrokeStyle oldStyle = m_data->strokeStyle();
225d0825bca7fe65beaee391d30da42e937db621564Steve Block    Color oldStrokeColor = m_data->strokeColor();
226d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setStrokeStyle(DashedStroke);
227d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setStrokeColor(color);
228d0825bca7fe65beaee391d30da42e937db621564Steve Block    strokeRect(FloatRect(finalFocusRect), 1.f);
229d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setStrokeStyle(oldStyle);
230d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setStrokeColor(oldStrokeColor);
231d0825bca7fe65beaee391d30da42e937db621564Steve Block}
232d0825bca7fe65beaee391d30da42e937db621564Steve Block
233d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::drawLineForText(const IntPoint& origin, int width, bool printing)
234d0825bca7fe65beaee391d30da42e937db621564Steve Block{
235d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
236d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
237d0825bca7fe65beaee391d30da42e937db621564Steve Block
238d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (width <= 0)
239d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
240d0825bca7fe65beaee391d30da42e937db621564Steve Block
241d0825bca7fe65beaee391d30da42e937db621564Steve Block    StrokeStyle oldStyle = m_data->strokeStyle();
242d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setStrokeStyle(SolidStroke);
243d0825bca7fe65beaee391d30da42e937db621564Steve Block    drawLine(origin, origin + IntSize(width, 0));
244d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setStrokeStyle(oldStyle);
245d0825bca7fe65beaee391d30da42e937db621564Steve Block
246d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(printing);
247d0825bca7fe65beaee391d30da42e937db621564Steve Block}
248d0825bca7fe65beaee391d30da42e937db621564Steve Block
2495ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid GraphicsContext::drawLineForTextChecking(const IntPoint& origin, int width, TextCheckingLineStyle style)
250d0825bca7fe65beaee391d30da42e937db621564Steve Block{
251d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
252d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
253d0825bca7fe65beaee391d30da42e937db621564Steve Block
254d0825bca7fe65beaee391d30da42e937db621564Steve Block    notImplemented();
255d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(origin);
256d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(width);
2575ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    UNUSED_PARAM(style);
258d0825bca7fe65beaee391d30da42e937db621564Steve Block}
259d0825bca7fe65beaee391d30da42e937db621564Steve Block
2602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochFloatRect GraphicsContext::roundToDevicePixels(const FloatRect& rect, RoundingMode)
261d0825bca7fe65beaee391d30da42e937db621564Steve Block{
262d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
263d0825bca7fe65beaee391d30da42e937db621564Steve Block        return FloatRect();
264d0825bca7fe65beaee391d30da42e937db621564Steve Block
265dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return FloatRect(enclosingIntRect(m_data->transformation().mapRect(rect)));
266d0825bca7fe65beaee391d30da42e937db621564Steve Block}
267d0825bca7fe65beaee391d30da42e937db621564Steve Block
26806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenvoid GraphicsContext::setPlatformShadow(const FloatSize& size, float blur, const Color& color, ColorSpace colorSpace)
269d0825bca7fe65beaee391d30da42e937db621564Steve Block{
270d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
271d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
272d0825bca7fe65beaee391d30da42e937db621564Steve Block
273d0825bca7fe65beaee391d30da42e937db621564Steve Block    notImplemented();
274d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(size);
275d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(blur);
276d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(color);
277d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(colorSpace);
278d0825bca7fe65beaee391d30da42e937db621564Steve Block}
279d0825bca7fe65beaee391d30da42e937db621564Steve Block
280d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::clearPlatformShadow()
281d0825bca7fe65beaee391d30da42e937db621564Steve Block{
282d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
283d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
284d0825bca7fe65beaee391d30da42e937db621564Steve Block
285d0825bca7fe65beaee391d30da42e937db621564Steve Block    notImplemented();
286d0825bca7fe65beaee391d30da42e937db621564Steve Block}
287d0825bca7fe65beaee391d30da42e937db621564Steve Block
288d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::beginTransparencyLayer(float opacity)
289d0825bca7fe65beaee391d30da42e937db621564Steve Block{
290d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
291d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
292d0825bca7fe65beaee391d30da42e937db621564Steve Block
293d0825bca7fe65beaee391d30da42e937db621564Steve Block    notImplemented();
294d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(opacity);
295d0825bca7fe65beaee391d30da42e937db621564Steve Block}
296d0825bca7fe65beaee391d30da42e937db621564Steve Block
297d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::endTransparencyLayer()
298d0825bca7fe65beaee391d30da42e937db621564Steve Block{
299d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
300d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
301d0825bca7fe65beaee391d30da42e937db621564Steve Block
302d0825bca7fe65beaee391d30da42e937db621564Steve Block    notImplemented();
303d0825bca7fe65beaee391d30da42e937db621564Steve Block}
304d0825bca7fe65beaee391d30da42e937db621564Steve Block
305d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::clearRect(const FloatRect& rect)
306d0825bca7fe65beaee391d30da42e937db621564Steve Block{
307d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
308d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
309d0825bca7fe65beaee391d30da42e937db621564Steve Block
310d0825bca7fe65beaee391d30da42e937db621564Steve Block    CompositeOperator op = m_data->compositeOperation();
311d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setCompositeOperation(CompositeClear);
312d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->drawRect(rect, VG_FILL_PATH);
313d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setCompositeOperation(op);
314d0825bca7fe65beaee391d30da42e937db621564Steve Block}
315d0825bca7fe65beaee391d30da42e937db621564Steve Block
316d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::strokeRect(const FloatRect& rect, float lineWidth)
317d0825bca7fe65beaee391d30da42e937db621564Steve Block{
318d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
319d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
320d0825bca7fe65beaee391d30da42e937db621564Steve Block
321d0825bca7fe65beaee391d30da42e937db621564Steve Block    float oldThickness = m_data->strokeThickness();
322d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setStrokeThickness(lineWidth);
323d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->drawRect(rect, VG_STROKE_PATH);
324d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setStrokeThickness(oldThickness);
325d0825bca7fe65beaee391d30da42e937db621564Steve Block}
326d0825bca7fe65beaee391d30da42e937db621564Steve Block
327d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::setLineCap(LineCap lc)
328d0825bca7fe65beaee391d30da42e937db621564Steve Block{
329d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
330d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
331d0825bca7fe65beaee391d30da42e937db621564Steve Block
332d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setLineCap(lc);
333d0825bca7fe65beaee391d30da42e937db621564Steve Block}
334d0825bca7fe65beaee391d30da42e937db621564Steve Block
335d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::setLineDash(const DashArray& dashes, float dashOffset)
336d0825bca7fe65beaee391d30da42e937db621564Steve Block{
337d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
338d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
339d0825bca7fe65beaee391d30da42e937db621564Steve Block
340d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setLineDash(dashes, dashOffset);
341d0825bca7fe65beaee391d30da42e937db621564Steve Block}
342d0825bca7fe65beaee391d30da42e937db621564Steve Block
343d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::setLineJoin(LineJoin lj)
344d0825bca7fe65beaee391d30da42e937db621564Steve Block{
345d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
346d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
347d0825bca7fe65beaee391d30da42e937db621564Steve Block
348d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setLineJoin(lj);
349d0825bca7fe65beaee391d30da42e937db621564Steve Block}
350d0825bca7fe65beaee391d30da42e937db621564Steve Block
351d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::setMiterLimit(float limit)
352d0825bca7fe65beaee391d30da42e937db621564Steve Block{
353d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
354d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
355d0825bca7fe65beaee391d30da42e937db621564Steve Block
356d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setMiterLimit(limit);
357d0825bca7fe65beaee391d30da42e937db621564Steve Block}
358d0825bca7fe65beaee391d30da42e937db621564Steve Block
359d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::setAlpha(float opacity)
360d0825bca7fe65beaee391d30da42e937db621564Steve Block{
361d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
362d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
363d0825bca7fe65beaee391d30da42e937db621564Steve Block
364d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setOpacity(opacity);
365d0825bca7fe65beaee391d30da42e937db621564Steve Block}
366d0825bca7fe65beaee391d30da42e937db621564Steve Block
367f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GraphicsContext::setPlatformCompositeOperation(CompositeOperator op)
368d0825bca7fe65beaee391d30da42e937db621564Steve Block{
369d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
370d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
371d0825bca7fe65beaee391d30da42e937db621564Steve Block
372d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setCompositeOperation(op);
373d0825bca7fe65beaee391d30da42e937db621564Steve Block}
374d0825bca7fe65beaee391d30da42e937db621564Steve Block
375d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::clip(const Path& path)
376d0825bca7fe65beaee391d30da42e937db621564Steve Block{
377d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
378d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
379d0825bca7fe65beaee391d30da42e937db621564Steve Block
380f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    m_data->clipPath(path, PainterOpenVG::IntersectClip, m_state.fillRule);
381d0825bca7fe65beaee391d30da42e937db621564Steve Block}
382d0825bca7fe65beaee391d30da42e937db621564Steve Block
383d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::canvasClip(const Path& path)
384d0825bca7fe65beaee391d30da42e937db621564Steve Block{
385d0825bca7fe65beaee391d30da42e937db621564Steve Block    clip(path);
386d0825bca7fe65beaee391d30da42e937db621564Steve Block}
387d0825bca7fe65beaee391d30da42e937db621564Steve Block
388d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::clipOut(const Path& path)
389d0825bca7fe65beaee391d30da42e937db621564Steve Block{
390d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
391d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
392d0825bca7fe65beaee391d30da42e937db621564Steve Block
393f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    m_data->clipPath(path, PainterOpenVG::SubtractClip, m_state.fillRule);
394d0825bca7fe65beaee391d30da42e937db621564Steve Block}
395d0825bca7fe65beaee391d30da42e937db621564Steve Block
396d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::scale(const FloatSize& scaleFactors)
397d0825bca7fe65beaee391d30da42e937db621564Steve Block{
398d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
399d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
400d0825bca7fe65beaee391d30da42e937db621564Steve Block
401d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->scale(scaleFactors);
402d0825bca7fe65beaee391d30da42e937db621564Steve Block}
403d0825bca7fe65beaee391d30da42e937db621564Steve Block
404d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::rotate(float radians)
405d0825bca7fe65beaee391d30da42e937db621564Steve Block{
406d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
407d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
408d0825bca7fe65beaee391d30da42e937db621564Steve Block
409d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->rotate(radians);
410d0825bca7fe65beaee391d30da42e937db621564Steve Block}
411d0825bca7fe65beaee391d30da42e937db621564Steve Block
412d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::translate(float dx, float dy)
413d0825bca7fe65beaee391d30da42e937db621564Steve Block{
414d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
415d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
416d0825bca7fe65beaee391d30da42e937db621564Steve Block
417d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->translate(dx, dy);
418d0825bca7fe65beaee391d30da42e937db621564Steve Block}
419d0825bca7fe65beaee391d30da42e937db621564Steve Block
420d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::clipOut(const IntRect& rect)
421d0825bca7fe65beaee391d30da42e937db621564Steve Block{
422d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
423d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
424d0825bca7fe65beaee391d30da42e937db621564Steve Block
425dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    Path path;
426dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    path.addRect(rect);
427f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    m_data->clipPath(path, PainterOpenVG::SubtractClip, m_state.fillRule);
428d0825bca7fe65beaee391d30da42e937db621564Steve Block}
429d0825bca7fe65beaee391d30da42e937db621564Steve Block
430d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::clipToImageBuffer(const FloatRect& rect, const ImageBuffer* imageBuffer)
431d0825bca7fe65beaee391d30da42e937db621564Steve Block{
432d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
433d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
434d0825bca7fe65beaee391d30da42e937db621564Steve Block
435d0825bca7fe65beaee391d30da42e937db621564Steve Block    notImplemented();
436d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(rect);
437d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(imageBuffer);
438d0825bca7fe65beaee391d30da42e937db621564Steve Block}
439d0825bca7fe65beaee391d30da42e937db621564Steve Block
440d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::addInnerRoundedRectClip(const IntRect& rect, int thickness)
441d0825bca7fe65beaee391d30da42e937db621564Steve Block{
442d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
443d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
444d0825bca7fe65beaee391d30da42e937db621564Steve Block
445dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    Path path;
446dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    path.addEllipse(rect);
447dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    path.addEllipse(FloatRect(rect.x() + thickness, rect.y() + thickness,
448dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        rect.width() - (thickness * 2), rect.height() - (thickness * 2)));
449dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
450f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    m_data->clipPath(path, PainterOpenVG::IntersectClip, m_state.fillRule);
451d0825bca7fe65beaee391d30da42e937db621564Steve Block}
452d0825bca7fe65beaee391d30da42e937db621564Steve Block
453dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid GraphicsContext::concatCTM(const AffineTransform& transformation)
454d0825bca7fe65beaee391d30da42e937db621564Steve Block{
455d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
456d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
457d0825bca7fe65beaee391d30da42e937db621564Steve Block
458dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    m_data->concatTransformation(transformation);
459d0825bca7fe65beaee391d30da42e937db621564Steve Block}
460d0825bca7fe65beaee391d30da42e937db621564Steve Block
46181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid GraphicsContext::setCTM(const AffineTransform& transformation)
46281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
46381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (paintingDisabled())
46481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return;
46581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
46681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_data->setTransformation(transformation);
46781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
46881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
469d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::setURLForRect(const KURL& link, const IntRect& destRect)
470d0825bca7fe65beaee391d30da42e937db621564Steve Block{
471d0825bca7fe65beaee391d30da42e937db621564Steve Block    notImplemented();
472d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(link);
473d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(destRect);
474d0825bca7fe65beaee391d30da42e937db621564Steve Block}
475d0825bca7fe65beaee391d30da42e937db621564Steve Block
476d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::setPlatformStrokeColor(const Color& color, ColorSpace colorSpace)
477d0825bca7fe65beaee391d30da42e937db621564Steve Block{
478d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
479d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
480d0825bca7fe65beaee391d30da42e937db621564Steve Block
481d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setStrokeColor(color);
482d0825bca7fe65beaee391d30da42e937db621564Steve Block
483d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(colorSpace); // FIXME
484d0825bca7fe65beaee391d30da42e937db621564Steve Block}
485d0825bca7fe65beaee391d30da42e937db621564Steve Block
486cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext::setPlatformStrokeStyle(StrokeStyle strokeStyle)
487d0825bca7fe65beaee391d30da42e937db621564Steve Block{
488d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
489d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
490d0825bca7fe65beaee391d30da42e937db621564Steve Block
491d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setStrokeStyle(strokeStyle);
492d0825bca7fe65beaee391d30da42e937db621564Steve Block}
493d0825bca7fe65beaee391d30da42e937db621564Steve Block
494d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::setPlatformStrokeThickness(float thickness)
495d0825bca7fe65beaee391d30da42e937db621564Steve Block{
496d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
497d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
498d0825bca7fe65beaee391d30da42e937db621564Steve Block
499d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setStrokeThickness(thickness);
500d0825bca7fe65beaee391d30da42e937db621564Steve Block}
501d0825bca7fe65beaee391d30da42e937db621564Steve Block
502d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::setPlatformFillColor(const Color& color, ColorSpace colorSpace)
503d0825bca7fe65beaee391d30da42e937db621564Steve Block{
504d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
505d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
506d0825bca7fe65beaee391d30da42e937db621564Steve Block
507d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setFillColor(color);
508d0825bca7fe65beaee391d30da42e937db621564Steve Block
509d0825bca7fe65beaee391d30da42e937db621564Steve Block    UNUSED_PARAM(colorSpace); // FIXME
510d0825bca7fe65beaee391d30da42e937db621564Steve Block}
511d0825bca7fe65beaee391d30da42e937db621564Steve Block
512d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::setPlatformShouldAntialias(bool enable)
513d0825bca7fe65beaee391d30da42e937db621564Steve Block{
514d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (paintingDisabled())
515d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
516d0825bca7fe65beaee391d30da42e937db621564Steve Block
517d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_data->setAntialiasingEnabled(enable);
518d0825bca7fe65beaee391d30da42e937db621564Steve Block}
519d0825bca7fe65beaee391d30da42e937db621564Steve Block
520d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::setImageInterpolationQuality(InterpolationQuality)
521d0825bca7fe65beaee391d30da42e937db621564Steve Block{
522d0825bca7fe65beaee391d30da42e937db621564Steve Block    notImplemented();
523d0825bca7fe65beaee391d30da42e937db621564Steve Block}
524d0825bca7fe65beaee391d30da42e937db621564Steve Block
525d0825bca7fe65beaee391d30da42e937db621564Steve BlockInterpolationQuality GraphicsContext::imageInterpolationQuality() const
526d0825bca7fe65beaee391d30da42e937db621564Steve Block{
527d0825bca7fe65beaee391d30da42e937db621564Steve Block    notImplemented();
528d0825bca7fe65beaee391d30da42e937db621564Steve Block    return InterpolationDefault;
529d0825bca7fe65beaee391d30da42e937db621564Steve Block}
530d0825bca7fe65beaee391d30da42e937db621564Steve Block
531d0825bca7fe65beaee391d30da42e937db621564Steve Block}
532