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

Unified Diff: Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp

Issue 13616008: Remove CG codepaths from SVG (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 8 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/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
index b80cb52c163834821704ab317e43b026e98c57af..95fc858d7fe39cffa1c7c39b4ddc4f0404445d5c 100644
--- a/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
+++ b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
@@ -38,9 +38,6 @@ namespace WebCore {
RenderSVGResourceGradient::RenderSVGResourceGradient(SVGGradientElement* node)
: RenderSVGResourceContainer(node)
, m_shouldCollectGradientAttributes(true)
-#if USE(CG)
- , m_savedContext(0)
-#endif
{
}
@@ -58,59 +55,6 @@ void RenderSVGResourceGradient::removeClientFromCache(RenderObject* client, bool
markClientForInvalidation(client, markForInvalidation ? RepaintInvalidation : ParentOnlyInvalidation);
}
-#if USE(CG)
-static inline bool createMaskAndSwapContextForTextGradient(GraphicsContext*& context,
- GraphicsContext*& savedContext,
- OwnPtr<ImageBuffer>& imageBuffer,
- RenderObject* object)
-{
- RenderObject* textRootBlock = RenderSVGText::locateRenderSVGTextAncestor(object);
- ASSERT(textRootBlock);
-
- AffineTransform absoluteTransform;
- SVGRenderingContext::calculateTransformationToOutermostCoordinateSystem(textRootBlock, absoluteTransform);
-
- FloatRect repaintRect = textRootBlock->repaintRectInLocalCoordinates();
- OwnPtr<ImageBuffer> maskImage;
- if (!SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, maskImage, ColorSpaceDeviceRGB, Unaccelerated))
- return false;
-
- GraphicsContext* maskImageContext = maskImage->context();
- ASSERT(maskImageContext);
- ASSERT(maskImage);
- savedContext = context;
- context = maskImageContext;
- imageBuffer = maskImage.release();
- return true;
-}
-
-static inline AffineTransform clipToTextMask(GraphicsContext* context,
- OwnPtr<ImageBuffer>& imageBuffer,
- FloatRect& targetRect,
- RenderObject* object,
- bool boundingBoxMode,
- const AffineTransform& gradientTransform)
-{
- RenderObject* textRootBlock = RenderSVGText::locateRenderSVGTextAncestor(object);
- ASSERT(textRootBlock);
-
- AffineTransform absoluteTransform;
- SVGRenderingContext::calculateTransformationToOutermostCoordinateSystem(textRootBlock, absoluteTransform);
-
- targetRect = textRootBlock->repaintRectInLocalCoordinates();
- SVGRenderingContext::clipToImageBuffer(context, absoluteTransform, targetRect, imageBuffer, false);
-
- AffineTransform matrix;
- if (boundingBoxMode) {
- FloatRect maskBoundingBox = textRootBlock->objectBoundingBox();
- matrix.translate(maskBoundingBox.x(), maskBoundingBox.y());
- matrix.scaleNonUniform(maskBoundingBox.width(), maskBoundingBox.height());
- }
- matrix *= gradientTransform;
- return matrix;
-}
-#endif
-
bool RenderSVGResourceGradient::applyResource(RenderObject* object, RenderStyle* style, GraphicsContext*& context, unsigned short resourceMode)
{
ASSERT(object);
@@ -150,14 +94,8 @@ bool RenderSVGResourceGradient::applyResource(RenderObject* object, RenderStyle*
if (!gradientData->gradient) {
buildGradient(gradientData.get());
- // CG platforms will handle the gradient space transform for text after applying the
- // resource, so don't apply it here. For non-CG platforms, we want the text bounding
- // box applied to the gradient space transform now, so the gradient shader can use it.
-#if USE(CG)
- if (gradientUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX && !objectBoundingBox.isEmpty() && !isPaintingText) {
-#else
+ // We want the text bounding box applied to the gradient space transform now, so the gradient shader can use it.
if (gradientUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX && !objectBoundingBox.isEmpty()) {
-#endif
gradientData->userspaceTransform.translate(objectBoundingBox.x(), objectBoundingBox.y());
gradientData->userspaceTransform.scaleNonUniform(objectBoundingBox.width(), objectBoundingBox.height());
}
@@ -182,16 +120,8 @@ bool RenderSVGResourceGradient::applyResource(RenderObject* object, RenderStyle*
// Draw gradient
context->save();
- if (isPaintingText) {
-#if USE(CG)
- if (!createMaskAndSwapContextForTextGradient(context, m_savedContext, m_imageBuffer, object)) {
- context->restore();
- return false;
- }
-#endif
-
+ if (isPaintingText)
context->setTextDrawingMode(resourceMode & ApplyToFillMode ? TextModeFill : TextModeStroke);
- }
const SVGRenderStyle* svgStyle = style->svgStyle();
ASSERT(svgStyle);
@@ -215,42 +145,19 @@ void RenderSVGResourceGradient::postApplyResource(RenderObject* object, Graphics
{
ASSERT(context);
ASSERT(resourceMode != ApplyToDefaultMode);
+ UNUSED_PARAM(object);
- if (resourceMode & ApplyToTextMode) {
-#if USE(CG)
- // CG requires special handling for gradient on text
- GradientData* gradientData;
- if (m_savedContext && (gradientData = m_gradientMap.get(object))) {
- // Restore on-screen drawing context
- context = m_savedContext;
- m_savedContext = 0;
-
- AffineTransform gradientTransform;
- calculateGradientTransform(gradientTransform);
-
- FloatRect targetRect;
- gradientData->gradient->setGradientSpaceTransform(clipToTextMask(context, m_imageBuffer, targetRect, object, gradientUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX, gradientTransform));
- context->setFillGradient(gradientData->gradient);
-
- context->fillRect(targetRect);
- m_imageBuffer.clear();
- }
-#else
- UNUSED_PARAM(object);
-#endif
- } else {
- if (resourceMode & ApplyToFillMode) {
- if (path)
- context->fillPath(*path);
- else if (shape)
- shape->fillShape(context);
- }
- if (resourceMode & ApplyToStrokeMode) {
- if (path)
- context->strokePath(*path);
- else if (shape)
- shape->strokeShape(context);
- }
+ if (resourceMode & ApplyToFillMode) {
+ if (path)
+ context->fillPath(*path);
+ else if (shape)
+ shape->fillShape(context);
+ }
+ if (resourceMode & ApplyToStrokeMode) {
+ if (path)
+ context->strokePath(*path);
+ else if (shape)
+ shape->strokeShape(context);
}
context->restore();
« no previous file with comments | « Source/WebCore/rendering/svg/RenderSVGResourceGradient.h ('k') | Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698