Changeset 29031 in webkit


Ignore:
Timestamp:
Dec 29, 2007 8:06:23 AM (16 years ago)
Author:
Nikolas Zimmermann
Message:

Reviewed by Alexey.

Respect horiz-origin-x / horiz-origin-y / vert-origin-x / vert-origin-y properties when drawing SVG Fonts.
(Fixes fonts-elem-05-t.svg in a --svg-fonts build)

Location:
trunk/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r29029 r29031  
     12007-12-29  Nikolas Zimmermann  <zimmermann@kde.org>
     2
     3        Reviewed by Alexey.
     4
     5        Respect horiz-origin-x / horiz-origin-y / vert-origin-x / vert-origin-y properties when drawing SVG Fonts.
     6        (Fixes fonts-elem-05-t.svg in a --svg-fonts build)
     7
     8        * svg/SVGFont.cpp:
     9        (WebCore::Font::drawGlyphsWithSVGFont):
     10
    1112007-12-29  Nikolas Zimmermann  <zimmermann@kde.org>
    212
  • trunk/WebCore/svg/SVGFont.cpp

    r29029 r29031  
    6767    unsigned unitsPerEm = fontFace->unitsPerEm();
    6868    bool isVerticalText = isVerticalWritingMode(style->svgStyle());
     69    float scale = SVGFontData::convertEmUnitToPixel(fontSize, unitsPerEm, 1.0f);
    6970
    7071    SVGPaintServer* fillPaintServer = SVGPaintServer::fillPaintServer(style, renderObject);
     
    7273
    7374    FloatPoint startPoint = point;
     75
     76    FloatPoint glyphOrigin;
     77    if (!isVerticalText) {
     78        glyphOrigin.setX(SVGFontData::convertEmUnitToPixel(fontSize, unitsPerEm, svgFontData->horizontalOriginX));
     79        glyphOrigin.setY(SVGFontData::convertEmUnitToPixel(fontSize, unitsPerEm, svgFontData->horizontalOriginY));
     80    }
     81
    7482    for (int i = from; i < to; ++i) {
    7583        SVGGlyphIdentifier identifier = fontFace->glyphIdentifierForGlyphCode(glyphBuffer.glyphAt(i));
     
    7785        // TODO: Support arbitary SVG content as glyph (currently limited to <glyph d="..."> situations)
    7886        if (!identifier.pathData.isEmpty()) {
    79             float scale = SVGFontData::convertEmUnitToPixel(size(), fontFace->unitsPerEm(), 1.0f);
    80 
    81             AffineTransform ctm;
    82             ctm.translate(startPoint.x(), startPoint.y());
    83             ctm.scale(scale, -scale);
     87            if (isVerticalText) {
     88                glyphOrigin.setX(SVGFontData::convertEmUnitToPixel(fontSize, unitsPerEm, identifier.verticalOriginX));
     89                glyphOrigin.setY(SVGFontData::convertEmUnitToPixel(fontSize, unitsPerEm, identifier.verticalOriginY));
     90            }
    8491
    8592            context->save();
    86             context->concatCTM(ctm);
     93            context->translate(startPoint.x() + glyphOrigin.x(), startPoint.y() + glyphOrigin.y());
     94            context->scale(FloatSize(scale, -scale));
    8795
    8896            context->beginPath();
Note: See TracChangeset for help on using the changeset viewer.