#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"
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);
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) {
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);