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