Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / rendering / svg / SVGTextRunRenderingContext.cpp
index 2fd85e1..45b4e29 100644 (file)
@@ -26,6 +26,7 @@
 #include "core/rendering/RenderObject.h"
 #include "core/rendering/svg/RenderSVGInlineText.h"
 #include "core/rendering/svg/RenderSVGResourceSolidColor.h"
+#include "core/rendering/svg/SVGRenderSupport.h"
 #include "core/svg/SVGFontData.h"
 #include "core/svg/SVGFontElement.h"
 #include "core/svg/SVGFontFaceElement.h"
@@ -69,13 +70,6 @@ static inline RenderObject* renderObjectFromRun(const TextRun& run)
     return 0;
 }
 
-static inline RenderSVGResource* activePaintingResourceFromRun(const TextRun& run)
-{
-    if (TextRun::RenderingContext* renderingContext = run.renderingContext())
-        return static_cast<SVGTextRunRenderingContext*>(renderingContext)->activePaintingResource();
-    return 0;
-}
-
 float SVGTextRunRenderingContext::floatWidthUsingSVGFont(const Font& font, const TextRun& run, int& charsConsumed, Glyph& glyphId) const
 {
     WidthIterator it(&font, run);
@@ -95,36 +89,23 @@ void SVGTextRunRenderingContext::drawSVGGlyphs(GraphicsContext* context, const T
         return;
 
     // We can only paint SVGFonts if a context is available.
-    RenderSVGResource* activePaintingResource = activePaintingResourceFromRun(run);
     RenderObject* renderObject = renderObjectFromRun(run);
-    RenderObject* parentRenderObject = firstParentRendererForNonTextNode(renderObject);
-    RenderStyle* parentRenderObjectStyle = 0;
-
     ASSERT(renderObject);
-    if (!activePaintingResource) {
-        // TODO: We're only supporting simple filled HTML text so far.
-        RenderSVGResourceSolidColor* solidPaintingResource = RenderSVGResource::sharedSolidPaintingResource();
-        solidPaintingResource->setColor(context->fillColor());
-        activePaintingResource = solidPaintingResource;
-    }
 
     bool isVerticalText = false;
-    if (parentRenderObject) {
-        parentRenderObjectStyle = parentRenderObject->style();
+    if (RenderObject* parentRenderObject = firstParentRendererForNonTextNode(renderObject)) {
+        RenderStyle* parentRenderObjectStyle = parentRenderObject->style();
         ASSERT(parentRenderObjectStyle);
         isVerticalText = parentRenderObjectStyle->svgStyle().isVerticalWritingMode();
     }
 
     float scale = scaleEmToUnits(fontData->platformData().size(), fontFaceElement->unitsPerEm());
-    ASSERT(activePaintingResource);
 
     FloatPoint glyphOrigin;
     glyphOrigin.setX(svgFontData->horizontalOriginX() * scale);
     glyphOrigin.setY(svgFontData->horizontalOriginY() * scale);
 
     unsigned short resourceMode = context->textDrawingMode() == TextModeStroke ? ApplyToStrokeMode : ApplyToFillMode;
-    // From a resource perspective this ought to be treated as "text mode".
-    resourceMode |= ApplyToTextMode;
 
     FloatPoint currentPoint = point;
     for (int i = 0; i < numGlyphs; ++i) {
@@ -160,13 +141,7 @@ void SVGTextRunRenderingContext::drawSVGGlyphs(GraphicsContext* context, const T
         Path glyphPath = svgGlyph.pathData;
         glyphPath.transform(glyphPathTransform);
 
-        if (activePaintingResource->applyResource(parentRenderObject, parentRenderObjectStyle, context, resourceMode)) {
-            float strokeThickness = context->strokeThickness();
-            if (renderObject && renderObject->isSVGInlineText())
-                context->setStrokeThickness(strokeThickness * toRenderSVGInlineText(renderObject)->scalingFactor());
-            activePaintingResource->postApplyResource(parentRenderObject, context, resourceMode, &glyphPath, 0);
-            context->setStrokeThickness(strokeThickness);
-        }
+        SVGRenderSupport::fillOrStrokePath(context, resourceMode, glyphPath);
 
         if (isVerticalText)
             currentPoint.move(0, advance);