Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(849)

Unified Diff: Source/core/html/canvas/CanvasRenderingContext2D.cpp

Issue 661053003: Make beginLayer() and CanvasRenderingContext2D use SkXfermode::Mode. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase to ToT Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/html/canvas/CanvasRenderingContext2D.cpp
diff --git a/Source/core/html/canvas/CanvasRenderingContext2D.cpp b/Source/core/html/canvas/CanvasRenderingContext2D.cpp
index a4454e0442e9e037c9a5eb3da89fb7194ceba4d4..0a9c32aeff5b770a8a8b2401bbd78cca464e3e3f 100644
--- a/Source/core/html/canvas/CanvasRenderingContext2D.cpp
+++ b/Source/core/html/canvas/CanvasRenderingContext2D.cpp
@@ -275,8 +275,7 @@ CanvasRenderingContext2D::State::State()
, m_shadowBlur(0)
, m_shadowColor(Color::transparent)
, m_globalAlpha(1)
- , m_globalComposite(CompositeSourceOver)
- , m_globalBlend(WebBlendModeNormal)
+ , m_globalComposite(SkXfermode::kSrcOver_Mode)
, m_invertibleCTM(true)
, m_lineDashOffset(0)
, m_imageSmoothingEnabled(true)
@@ -305,7 +304,6 @@ CanvasRenderingContext2D::State::State(const State& other, ClipListCopyMode mode
, m_shadowColor(other.m_shadowColor)
, m_globalAlpha(other.m_globalAlpha)
, m_globalComposite(other.m_globalComposite)
- , m_globalBlend(other.m_globalBlend)
, m_transform(other.m_transform)
, m_invertibleCTM(other.m_invertibleCTM)
, m_lineDashOffset(other.m_lineDashOffset)
@@ -349,7 +347,6 @@ CanvasRenderingContext2D::State& CanvasRenderingContext2D::State::operator=(cons
m_shadowColor = other.m_shadowColor;
m_globalAlpha = other.m_globalAlpha;
m_globalComposite = other.m_globalComposite;
- m_globalBlend = other.m_globalBlend;
m_transform = other.m_transform;
m_invertibleCTM = other.m_invertibleCTM;
m_imageSmoothingEnabled = other.m_imageSmoothingEnabled;
@@ -757,7 +754,7 @@ void CanvasRenderingContext2D::setGlobalAlpha(float alpha)
String CanvasRenderingContext2D::globalCompositeOperation() const
{
- return compositeOperatorName(state().m_globalComposite, state().m_globalBlend);
+ return compositeOperatorName(compositeOperatorFromSkia(state().m_globalComposite), blendModeFromSkia(state().m_globalComposite));
}
void CanvasRenderingContext2D::setGlobalCompositeOperation(const String& operation)
@@ -766,15 +763,15 @@ void CanvasRenderingContext2D::setGlobalCompositeOperation(const String& operati
WebBlendMode blendMode = WebBlendModeNormal;
if (!parseCompositeAndBlendOperator(operation, op, blendMode))
return;
- if ((state().m_globalComposite == op) && (state().m_globalBlend == blendMode))
+ SkXfermode::Mode xfermode = WebCoreCompositeToSkiaComposite(op, blendMode);
+ if (state().m_globalComposite == xfermode)
return;
GraphicsContext* c = drawingContext();
realizeSaves(c);
- modifiableState().m_globalComposite = op;
- modifiableState().m_globalBlend = blendMode;
+ modifiableState().m_globalComposite = xfermode;
if (!c)
return;
- c->setCompositeOperation(op, blendMode);
+ c->setCompositeOperation(xfermode);
}
void CanvasRenderingContext2D::setCurrentTransform(PassRefPtrWillBeRawPtr<SVGMatrixTearOff> passMatrixTearOff)
@@ -960,12 +957,12 @@ static bool validateRectForCanvas(float& x, float& y, float& width, float& heigh
return true;
}
-static bool isFullCanvasCompositeMode(CompositeOperator op)
+static bool isFullCanvasCompositeMode(SkXfermode::Mode op)
{
// See 4.8.11.1.3 Compositing
// CompositeSourceAtop and CompositeDestinationOut are not listed here as the platforms already
// implement the specification's behavior.
- return op == CompositeSourceIn || op == CompositeSourceOut || op == CompositeDestinationIn || op == CompositeDestinationAtop;
+ return op == SkXfermode::kSrcIn_Mode || op == SkXfermode::kSrcOut_Mode || op == SkXfermode::kDstIn_Mode || op == SkXfermode::kDstATop_Mode;
}
static WindRule parseWinding(const String& windingRuleString)
@@ -1008,7 +1005,7 @@ void CanvasRenderingContext2D::fillInternal(const Path& path, const String& wind
if (isFullCanvasCompositeMode(state().m_globalComposite)) {
fullCanvasCompositedDraw(bind(&GraphicsContext::fillPath, c, path));
didDraw(clipBounds);
- } else if (state().m_globalComposite == CompositeCopy) {
+ } else if (state().m_globalComposite == SkXfermode::kSrc_Mode) {
clearCanvas();
c->clearShadow();
c->fillPath(path);
@@ -1060,7 +1057,7 @@ void CanvasRenderingContext2D::strokeInternal(const Path& path)
if (isFullCanvasCompositeMode(state().m_globalComposite)) {
fullCanvasCompositedDraw(bind(&GraphicsContext::strokePath, c, path));
didDraw(clipBounds);
- } else if (state().m_globalComposite == CompositeCopy) {
+ } else if (state().m_globalComposite == SkXfermode::kSrc_Mode) {
clearCanvas();
c->clearShadow();
c->strokePath(path);
@@ -1242,12 +1239,12 @@ void CanvasRenderingContext2D::clearRect(float x, float y, float width, float he
}
context->setAlphaAsFloat(1);
}
- if (state().m_globalComposite != CompositeSourceOver) {
+ if (state().m_globalComposite != SkXfermode::kSrcOver_Mode) {
if (!saved) {
context->save();
saved = true;
}
- context->setCompositeOperation(CompositeSourceOver);
+ context->setCompositeOperation(SkXfermode::kSrcOver_Mode);
}
context->clearRect(rect);
if (m_hitRegionManager)
@@ -1298,7 +1295,7 @@ void CanvasRenderingContext2D::fillRect(float x, float y, float width, float hei
} else if (isFullCanvasCompositeMode(state().m_globalComposite)) {
fullCanvasCompositedDraw(bind(&fillRectOnContext, c, rect));
didDraw(clipBounds);
- } else if (state().m_globalComposite == CompositeCopy) {
+ } else if (state().m_globalComposite == SkXfermode::kSrc_Mode) {
clearCanvas();
c->clearShadow();
c->fillRect(rect);
@@ -1339,7 +1336,7 @@ void CanvasRenderingContext2D::strokeRect(float x, float y, float width, float h
if (isFullCanvasCompositeMode(state().m_globalComposite)) {
fullCanvasCompositedDraw(bind(&strokeRectOnContext, c, rect));
didDraw(clipBounds);
- } else if (state().m_globalComposite == CompositeCopy) {
+ } else if (state().m_globalComposite == SkXfermode::kSrc_Mode) {
clearCanvas();
c->clearShadow();
c->strokeRect(rect);
@@ -1513,14 +1510,13 @@ void CanvasRenderingContext2D::drawImageInternal(CanvasImageSource* imageSource,
if (imageSource->isCanvasElement())
canvas()->buffer()->willAccessPixels();
- CompositeOperator op = state().m_globalComposite;
if (rectContainsTransformedRect(dstRect, clipBounds)) {
drawImageOnContext(c, imageSource, image.get(), srcRect, dstRect);
didDraw(clipBounds);
- } else if (isFullCanvasCompositeMode(op)) {
+ } else if (isFullCanvasCompositeMode(state().m_globalComposite)) {
fullCanvasCompositedDraw(bind(&drawImageOnContext, c, imageSource, image.get(), srcRect, dstRect));
didDraw(clipBounds);
- } else if (op == CompositeCopy) {
+ } else if (state().m_globalComposite == SkXfermode::kSrc_Mode) {
clearCanvas();
drawImageOnContext(c, imageSource, image.get(), srcRect, dstRect);
didDraw(clipBounds);
@@ -1567,22 +1563,21 @@ void CanvasRenderingContext2D::fullCanvasCompositedDraw(PassOwnPtr<Closure> draw
GraphicsContext* c = drawingContext();
ASSERT(c);
- CompositeOperator previousOperator = c->compositeOperation();
if (shouldDrawShadows()) {
// unroll into two independently composited passes if drawing shadows
c->beginLayer(1, state().m_globalComposite);
- c->setCompositeOperation(CompositeSourceOver);
+ c->setCompositeOperation(SkXfermode::kSrcOver_Mode);
applyShadow(DrawShadowOnly);
(*draw)();
- c->setCompositeOperation(previousOperator);
+ c->setCompositeOperation(state().m_globalComposite);
c->endLayer();
}
c->beginLayer(1, state().m_globalComposite);
c->clearShadow();
- c->setCompositeOperation(CompositeSourceOver);
+ c->setCompositeOperation(SkXfermode::kSrcOver_Mode);
(*draw)();
- c->setCompositeOperation(previousOperator);
+ c->setCompositeOperation(state().m_globalComposite);
c->endLayer();
applyShadow(DrawShadowAndForeground); // go back to normal shadows mode
}
@@ -2146,7 +2141,7 @@ void CanvasRenderingContext2D::drawTextInternal(const String& text, float x, flo
if (isFullCanvasCompositeMode(state().m_globalComposite)) {
fullCanvasCompositedDraw(bind(&GraphicsContext::drawBidiText, c, font, textRunPaintInfo, location, Font::UseFallbackIfFontNotReady));
didDraw(clipBounds);
- } else if (state().m_globalComposite == CompositeCopy) {
+ } else if (state().m_globalComposite == SkXfermode::kSrc_Mode) {
clearCanvas();
c->clearShadow();
c->drawBidiText(font, textRunPaintInfo, location, Font::UseFallbackIfFontNotReady);
@@ -2298,7 +2293,7 @@ void CanvasRenderingContext2D::drawFocusRing(const Path& path)
c->save();
c->setAlphaAsFloat(1.0);
c->clearShadow();
- c->setCompositeOperation(CompositeSourceOver, WebBlendModeNormal);
+ c->setCompositeOperation(SkXfermode::kSrcOver_Mode);
c->drawFocusRing(path, focusRingWidth, focusRingOutline, focusRingColor);
c->restore();
validateStateStack();
« no previous file with comments | « Source/core/html/canvas/CanvasRenderingContext2D.h ('k') | Source/core/rendering/svg/RenderSVGResourceClipper.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698