1d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Copyright (c) 2014 The Chromium Authors. All rights reserved.
2d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// found in the LICENSE file.
4d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
5d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "config.h"
6d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "platform/graphics/GraphicsContextState.h"
7d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
8323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#include "platform/graphics/skia/SkiaUtils.h"
9323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
10c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
11d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
12d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)GraphicsContextState::GraphicsContextState()
137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    : m_strokeColor(Color::black)
147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    , m_fillColor(Color::black)
15d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    , m_fillRule(RULE_NONZERO)
16d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    , m_textDrawingMode(TextModeFill)
17d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    , m_alpha(256)
18d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    , m_compositeOperator(CompositeSourceOver)
19e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    , m_blendMode(WebBlendModeNormal)
2043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)    , m_interpolationQuality(InterpolationDefault)
21d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    , m_saveCount(0)
22d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    , m_shouldAntialias(true)
23d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    , m_shouldClampToSourceRect(true)
24d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
25d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setStyle(SkPaint::kStroke_Style);
26d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setStrokeWidth(SkFloatToScalar(m_strokeData.thickness()));
277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokePaint.setColor(applyAlpha(m_strokeColor.rgb()));
28d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setStrokeCap(SkPaint::kDefault_Cap);
29d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setStrokeJoin(SkPaint::kDefault_Join);
30d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setStrokeMiter(SkFloatToScalar(m_strokeData.miterLimit()));
31323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    m_strokePaint.setFilterLevel(WebCoreInterpolationQualityToSkFilterLevel(m_interpolationQuality));
32d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setAntiAlias(m_shouldAntialias);
33d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPaint.setColor(applyAlpha(m_fillColor.rgb()));
34323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    m_fillPaint.setFilterLevel(WebCoreInterpolationQualityToSkFilterLevel(m_interpolationQuality));
35d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPaint.setAntiAlias(m_shouldAntialias);
36d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
37d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
385d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)GraphicsContextState::GraphicsContextState(const GraphicsContextState& other)
395d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    : m_strokePaint(other.m_strokePaint)
405d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_fillPaint(other.m_fillPaint)
415d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_strokeData(other.m_strokeData)
427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    , m_strokeColor(other.m_strokeColor)
437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    , m_strokeGradient(other.m_strokeGradient)
447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    , m_strokePattern(other.m_strokePattern)
455d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_fillColor(other.m_fillColor)
465d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_fillRule(other.m_fillRule)
475d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_fillGradient(other.m_fillGradient)
485d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_fillPattern(other.m_fillPattern)
495d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_looper(other.m_looper)
505d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_textDrawingMode(other.m_textDrawingMode)
515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_alpha(other.m_alpha)
525d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_colorFilter(other.m_colorFilter)
535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_compositeOperator(other.m_compositeOperator)
545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_blendMode(other.m_blendMode)
555d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_interpolationQuality(other.m_interpolationQuality)
565d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_saveCount(0)
575d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_shouldAntialias(other.m_shouldAntialias)
585d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_shouldClampToSourceRect(other.m_shouldClampToSourceRect) { }
595d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)
605d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void GraphicsContextState::copy(const GraphicsContextState& source)
61d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    this->~GraphicsContextState();
635d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    new (this) GraphicsContextState(source);
64d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
65d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
66d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)const SkPaint& GraphicsContextState::strokePaint(int strokedPathLength) const
67d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    if (m_strokeGradient && m_strokeGradient->shaderChanged())
697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        m_strokePaint.setShader(m_strokeGradient->shader());
70d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokeData.setupPaintDashPathEffect(&m_strokePaint, strokedPathLength);
71d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    return m_strokePaint;
72d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
73d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
74d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)const SkPaint& GraphicsContextState::fillPaint() const
75d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
76d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    if (m_fillGradient && m_fillGradient->shaderChanged())
77d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        m_fillPaint.setShader(m_fillGradient->shader());
78d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    return m_fillPaint;
79d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
80d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
81d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setStrokeStyle(StrokeStyle style)
82d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
83d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokeData.setStyle(style);
84d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
85d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
86d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setStrokeThickness(float thickness)
87d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
88d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokeData.setThickness(thickness);
89d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setStrokeWidth(SkFloatToScalar(thickness));
90d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
91d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
92d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setStrokeColor(const Color& color)
93d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokeGradient.clear();
957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokePattern.clear();
967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokeColor = color;
97d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setColor(applyAlpha(color.rgb()));
98d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setShader(0);
99d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
100d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
101d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setStrokeGradient(const PassRefPtr<Gradient> gradient)
102d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
1037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokeColor = Color::black;
1047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokePattern.clear();
1057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokeGradient = gradient;
106d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setColor(applyAlpha(SK_ColorBLACK));
1077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokePaint.setShader(m_strokeGradient->shader());
108d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
109d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
110d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::clearStrokeGradient()
111d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
1127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokeGradient.clear();
1137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    ASSERT(!m_strokePattern);
1147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokePaint.setColor(applyAlpha(m_strokeColor.rgb()));
115d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
116d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
117d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setStrokePattern(const PassRefPtr<Pattern> pattern)
118d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
1197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokeColor = Color::black;
1207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokeGradient.clear();
1217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokePattern = pattern;
122d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setColor(applyAlpha(SK_ColorBLACK));
1237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokePaint.setShader(m_strokePattern->shader());
124d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
125d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
126d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::clearStrokePattern()
127d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
1287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokePattern.clear();
1297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    ASSERT(!m_strokeGradient);
1307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokePaint.setColor(applyAlpha(m_strokeColor.rgb()));
131d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
132d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
133d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setLineCap(LineCap cap)
134d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
135d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokeData.setLineCap(cap);
136d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setStrokeCap((SkPaint::Cap)cap);
137d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
138d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
139d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setLineJoin(LineJoin join)
140d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
141d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokeData.setLineJoin(join);
142d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setStrokeJoin((SkPaint::Join)join);
143d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
144d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
145d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setMiterLimit(float miterLimit)
146d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
147d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokeData.setMiterLimit(miterLimit);
148d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setStrokeMiter(SkFloatToScalar(miterLimit));
149d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
150d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
151d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setFillColor(const Color& color)
152d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
153d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillColor = color;
154d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillGradient.clear();
155d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPattern.clear();
156d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPaint.setColor(applyAlpha(color.rgb()));
157d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPaint.setShader(0);
158d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
159d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
160d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setFillGradient(const PassRefPtr<Gradient> gradient)
161d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
162d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillColor = Color::black;
163d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPattern.clear();
164d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillGradient = gradient;
165d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPaint.setColor(applyAlpha(SK_ColorBLACK));
166d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPaint.setShader(m_fillGradient->shader());
167d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
168d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
169d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::clearFillGradient()
170d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
171d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillGradient.clear();
172d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    ASSERT(!m_fillPattern);
173d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPaint.setColor(applyAlpha(m_fillColor.rgb()));
174d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
175d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
176d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setFillPattern(const PassRefPtr<Pattern> pattern)
177d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
178d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillColor = Color::black;
179d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillGradient.clear();
180d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPattern = pattern;
181d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPaint.setColor(applyAlpha(SK_ColorBLACK));
182d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPaint.setShader(m_fillPattern->shader());
183d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
184d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
185d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::clearFillPattern()
186d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
187d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPattern.clear();
188d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    ASSERT(!m_fillGradient);
189d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPaint.setColor(applyAlpha(m_fillColor.rgb()));
190d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
191d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
192d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Shadow. (This will need tweaking if we use draw loopers for other things.)
193d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setDrawLooper(PassRefPtr<SkDrawLooper> drawLooper)
194d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
195d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_looper = drawLooper;
196d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setLooper(m_looper.get());
197d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPaint.setLooper(m_looper.get());
198d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
199d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
200d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::clearDrawLooper()
201d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
202d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_looper.clear();
203d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setLooper(0);
204d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPaint.setLooper(0);
205d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
206d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
207d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setAlphaAsFloat(float alpha)
208d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
209d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    if (alpha < 0) {
210d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        m_alpha = 0;
211d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    } else {
212d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        m_alpha = roundf(alpha * 256);
213d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        if (m_alpha > 256)
214d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            m_alpha = 256;
215d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    }
2167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokePaint.setColor(applyAlpha(m_strokeColor.rgb()));
217d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPaint.setColor(applyAlpha(m_fillColor.rgb()));
218d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
219d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
220d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setLineDash(const DashArray& dashes, float dashOffset)
221d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
222d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokeData.setLineDash(dashes, dashOffset);
223d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
224d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
225d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setColorFilter(PassRefPtr<SkColorFilter> colorFilter)
226d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
227d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_colorFilter = colorFilter;
228d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setColorFilter(m_colorFilter.get());
229d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPaint.setColorFilter(m_colorFilter.get());
230d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
231d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
232e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void GraphicsContextState::setCompositeOperation(CompositeOperator compositeOperation, WebBlendMode blendMode)
233d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
234d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_compositeOperator = compositeOperation;
235d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_blendMode = blendMode;
2367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    SkXfermode::Mode xferMode = WebCoreCompositeToSkiaComposite(compositeOperation, blendMode);
2377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_strokePaint.setXfermodeMode(xferMode);
2387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_fillPaint.setXfermodeMode(xferMode);
239d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
240d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
241d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setInterpolationQuality(InterpolationQuality quality)
242d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
243d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_interpolationQuality = quality;
244323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    m_strokePaint.setFilterLevel(WebCoreInterpolationQualityToSkFilterLevel(quality));
245323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    m_fillPaint.setFilterLevel(WebCoreInterpolationQualityToSkFilterLevel(quality));
246d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
247d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
248d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void GraphicsContextState::setShouldAntialias(bool shouldAntialias)
249d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
250d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_shouldAntialias = shouldAntialias;
251d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_strokePaint.setAntiAlias(shouldAntialias);
252d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    m_fillPaint.setAntiAlias(shouldAntialias);
253d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
254d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
255d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
256c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
257