summaryrefslogtreecommitdiffstats
path: root/webkit/port/platform/graphics/skia/PlatformContextSkia.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/port/platform/graphics/skia/PlatformContextSkia.cpp')
-rw-r--r--webkit/port/platform/graphics/skia/PlatformContextSkia.cpp428
1 files changed, 0 insertions, 428 deletions
diff --git a/webkit/port/platform/graphics/skia/PlatformContextSkia.cpp b/webkit/port/platform/graphics/skia/PlatformContextSkia.cpp
deleted file mode 100644
index 7822bd6..0000000
--- a/webkit/port/platform/graphics/skia/PlatformContextSkia.cpp
+++ /dev/null
@@ -1,428 +0,0 @@
-// Copyright (c) 2008, Google Inc. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#include "config.h"
-#include "GraphicsContext.h"
-#include "NativeImageSkia.h"
-#include "PlatformContextSkia.h"
-#undef LOG
-#include "SkiaUtils.h"
-#include "wtf/MathExtras.h"
-
-#include "skia/ext/image_operations.h"
-#include "skia/ext/platform_canvas.h"
-
-#include "SkBitmap.h"
-#include "SkColorPriv.h"
-#include "SkShader.h"
-#include "SkDashPathEffect.h"
-
-#if defined(OS_LINUX)
-#include "GdkSkia.h"
-#endif
-
-// State -----------------------------------------------------------------------
-
-// Encapsulates the additional painting state information we store for each
-// pushed graphics state.
-struct PlatformContextSkia::State {
- State();
- State(const State&);
- ~State();
-
- // Common shader state.
- float m_alpha;
- SkPorterDuff::Mode m_porterDuffMode;
- SkShader* m_gradient;
- SkShader* m_pattern;
- bool m_useAntialiasing;
- SkDrawLooper* m_looper;
-
- // Fill.
- SkColor m_fillColor;
-
- // Stroke.
- WebCore::StrokeStyle m_strokeStyle;
- SkColor m_strokeColor;
- float m_strokeThickness;
- int m_dashRatio; // Ratio of the length of a dash to its width.
- float m_miterLimit;
- SkPaint::Cap m_lineCap;
- SkPaint::Join m_lineJoin;
- SkDashPathEffect* m_dash;
-
- // Text. (See cTextFill & friends in GraphicsContext.h.)
- int m_textDrawingMode;
-
- // Helper function for applying the state's alpha value to the given input
- // color to produce a new output color.
- SkColor applyAlpha(SkColor c) const;
-
-private:
- // Not supported.
- void operator=(const State&);
-};
-
-// Note: Keep theses default values in sync with GraphicsContextState.
-PlatformContextSkia::State::State()
- : m_alpha(1)
- , m_porterDuffMode(SkPorterDuff::kSrcOver_Mode)
- , m_gradient(0)
- , m_pattern(0)
- , m_useAntialiasing(true)
- , m_looper(0)
- , m_fillColor(0xFF000000)
- , m_strokeStyle(WebCore::SolidStroke)
- , m_strokeColor(0x0FF000000)
- , m_strokeThickness(0)
- , m_dashRatio(3)
- , m_miterLimit(4)
- , m_lineCap(SkPaint::kDefault_Cap)
- , m_lineJoin(SkPaint::kDefault_Join)
- , m_dash(0)
- , m_textDrawingMode(WebCore::cTextFill)
-{
-}
-
-PlatformContextSkia::State::State(const State& other)
-{
- memcpy(this, &other, sizeof(State));
-
- m_looper->safeRef();
- m_dash->safeRef();
- m_gradient->safeRef();
- m_pattern->safeRef();
-}
-
-PlatformContextSkia::State::~State()
-{
- m_looper->safeUnref();
- m_dash->safeUnref();
- m_gradient->safeUnref();
- m_pattern->safeUnref();
-}
-
-SkColor PlatformContextSkia::State::applyAlpha(SkColor c) const
-{
- int s = roundf(m_alpha * 256);
- if (s >= 256)
- return c;
- if (s < 0)
- return 0;
-
- int a = SkAlphaMul(SkColorGetA(c), s);
- return (c & 0x00FFFFFF) | (a << 24);
-}
-
-// PlatformContextSkia ---------------------------------------------------------
-
-// Danger: canvas can be NULL.
-PlatformContextSkia::PlatformContextSkia(skia::PlatformCanvas* canvas)
- : m_canvas(canvas)
- , m_stateStack(sizeof(State))
-{
- m_stateStack.append(State());
- m_state = &m_stateStack.last();
-#if defined(OS_LINUX)
- m_gdkskia = m_canvas ? gdk_skia_new(m_canvas) : NULL;
-#endif
-}
-
-PlatformContextSkia::~PlatformContextSkia()
-{
-#if defined(OS_LINUX)
- if (m_gdkskia) {
- g_object_unref(m_gdkskia);
- m_gdkskia = NULL;
- }
-#endif
-}
-
-void PlatformContextSkia::setCanvas(skia::PlatformCanvas* canvas)
-{
- m_canvas = canvas;
-}
-
-void PlatformContextSkia::save()
-{
- m_stateStack.append(*m_state);
- m_state = &m_stateStack.last();
-
- // Save our native canvas.
- canvas()->save();
-}
-
-void PlatformContextSkia::restore()
-{
- m_stateStack.removeLast();
- m_state = &m_stateStack.last();
-
- // Restore our native canvas.
- canvas()->restore();
-}
-
-void PlatformContextSkia::drawRect(SkRect rect)
-{
- SkPaint paint;
- int fillcolorNotTransparent = m_state->m_fillColor & 0xFF000000;
- if (fillcolorNotTransparent) {
- setupPaintForFilling(&paint);
- canvas()->drawRect(rect, paint);
- }
-
- if (m_state->m_strokeStyle != WebCore::NoStroke &&
- (m_state->m_strokeColor & 0xFF000000)) {
- if (fillcolorNotTransparent) {
- // This call is expensive so don't call it unnecessarily.
- paint.reset();
- }
- setupPaintForStroking(&paint, &rect, 0);
- canvas()->drawRect(rect, paint);
- }
-}
-
-void PlatformContextSkia::setupPaintCommon(SkPaint* paint) const
-{
-#ifdef SK_DEBUGx
- {
- SkPaint defaultPaint;
- SkASSERT(*paint == defaultPaint);
- }
-#endif
-
- paint->setAntiAlias(m_state->m_useAntialiasing);
- paint->setPorterDuffXfermode(m_state->m_porterDuffMode);
- paint->setLooper(m_state->m_looper);
-
- if (m_state->m_gradient)
- paint->setShader(m_state->m_gradient);
- else if (m_state->m_pattern)
- paint->setShader(m_state->m_pattern);
-}
-
-void PlatformContextSkia::setupPaintForFilling(SkPaint* paint) const
-{
- setupPaintCommon(paint);
- paint->setColor(m_state->applyAlpha(m_state->m_fillColor));
-}
-
-float PlatformContextSkia::setupPaintForStroking(SkPaint* paint,
- SkRect* rect,
- int length) const
-{
- setupPaintCommon(paint);
- float width = m_state->m_strokeThickness;
-
- // This allows dashing and dotting to work properly for hairline strokes.
- if (width == 0)
- width = 1;
-
- paint->setColor(m_state->applyAlpha(m_state->m_strokeColor));
- paint->setStyle(SkPaint::kStroke_Style);
- paint->setStrokeWidth(SkFloatToScalar(width));
- paint->setStrokeCap(m_state->m_lineCap);
- paint->setStrokeJoin(m_state->m_lineJoin);
- paint->setStrokeMiter(SkFloatToScalar(m_state->m_miterLimit));
-
- if (rect != 0 && (static_cast<int>(roundf(width)) & 1))
- rect->inset(-SK_ScalarHalf, -SK_ScalarHalf);
-
- if (m_state->m_dash) {
- paint->setPathEffect(m_state->m_dash);
- } else {
- switch (m_state->m_strokeStyle) {
- case WebCore::NoStroke:
- case WebCore::SolidStroke:
- break;
- case WebCore::DashedStroke:
- width = m_state->m_dashRatio * width;
- // Fall through.
- case WebCore::DottedStroke:
- SkScalar dashLength;
- if (length) {
- // Determine about how many dashes or dots we should have.
- int numDashes = length / roundf(width);
- if (!(numDashes & 1))
- numDashes++; // Make it odd so we end on a dash/dot.
- // Use the number of dashes to determine the length of a
- // dash/dot, which will be approximately width
- dashLength = SkScalarDiv(SkIntToScalar(length),
- SkIntToScalar(numDashes));
- } else {
- dashLength = SkFloatToScalar(width);
- }
- SkScalar intervals[2] = { dashLength, dashLength };
- paint->setPathEffect(
- new SkDashPathEffect(intervals, 2, 0))->unref();
- }
- }
- return width;
-}
-
-void PlatformContextSkia::setDrawLooper(SkDrawLooper* dl)
-{
- SkRefCnt_SafeAssign(m_state->m_looper, dl);
-}
-
-void PlatformContextSkia::setMiterLimit(float ml)
-{
- m_state->m_miterLimit = ml;
-}
-
-void PlatformContextSkia::setAlpha(float alpha)
-{
- m_state->m_alpha = alpha;
-}
-
-void PlatformContextSkia::setLineCap(SkPaint::Cap lc)
-{
- m_state->m_lineCap = lc;
-}
-
-void PlatformContextSkia::setLineJoin(SkPaint::Join lj)
-{
- m_state->m_lineJoin = lj;
-}
-
-void PlatformContextSkia::setPorterDuffMode(SkPorterDuff::Mode pdm)
-{
- m_state->m_porterDuffMode = pdm;
-}
-
-void PlatformContextSkia::setFillColor(SkColor color)
-{
- m_state->m_fillColor = color;
-}
-
-SkDrawLooper* PlatformContextSkia::getDrawLooper() const
-{
- return m_state->m_looper;
-}
-
-WebCore::StrokeStyle PlatformContextSkia::getStrokeStyle() const
-{
- return m_state->m_strokeStyle;
-}
-
-void PlatformContextSkia::setStrokeStyle(WebCore::StrokeStyle strokestyle)
-{
- m_state->m_strokeStyle = strokestyle;
-}
-
-void PlatformContextSkia::setStrokeColor(SkColor strokecolor)
-{
- m_state->m_strokeColor = strokecolor;
-}
-
-float PlatformContextSkia::getStrokeThickness() const
-{
- return m_state->m_strokeThickness;
-}
-
-void PlatformContextSkia::setStrokeThickness(float thickness)
-{
- m_state->m_strokeThickness = thickness;
-}
-
-int PlatformContextSkia::getTextDrawingMode() const
-{
- return m_state->m_textDrawingMode;
-}
-
-void PlatformContextSkia::setTextDrawingMode(int mode)
-{
- // cTextClip is never used, so we assert that it isn't set:
- // https://bugs.webkit.org/show_bug.cgi?id=21898
- ASSERT((mode & WebCore::cTextClip) == 0);
- m_state->m_textDrawingMode = mode;
-}
-
-void PlatformContextSkia::setUseAntialiasing(bool enable)
-{
- m_state->m_useAntialiasing = enable;
-}
-
-SkColor PlatformContextSkia::fillColor() const
-{
- return m_state->m_fillColor;
-}
-
-void PlatformContextSkia::beginPath()
-{
- m_path.reset();
-}
-
-void PlatformContextSkia::addPath(const SkPath& path)
-{
- m_path.addPath(path);
-}
-
-void PlatformContextSkia::setFillRule(SkPath::FillType fr)
-{
- m_path.setFillType(fr);
-}
-
-void PlatformContextSkia::setGradient(SkShader* gradient)
-{
- if (gradient != m_state->m_gradient) {
- m_state->m_gradient->safeUnref();
- m_state->m_gradient = gradient;
- }
-}
-
-void PlatformContextSkia::setPattern(SkShader* pattern)
-{
- if (pattern != m_state->m_pattern) {
- m_state->m_pattern->safeUnref();
- m_state->m_pattern = pattern;
- }
-}
-
-void PlatformContextSkia::setDashPathEffect(SkDashPathEffect* dash)
-{
- if (dash != m_state->m_dash) {
- m_state->m_dash->safeUnref();
- m_state->m_dash = dash;
- }
-}
-
-void PlatformContextSkia::paintSkPaint(const SkRect& rect,
- const SkPaint& paint)
-{
- m_canvas->drawRect(rect, paint);
-}
-
-const SkBitmap* PlatformContextSkia::bitmap() const
-{
- return &m_canvas->getDevice()->accessBitmap(false);
-}
-
-bool PlatformContextSkia::IsPrinting()
-{
- return m_canvas->getTopPlatformDevice().IsVectorial();
-}