Changeset 25372 in webkit


Ignore:
Timestamp:
Sep 5, 2007 1:25:30 PM (17 years ago)
Author:
zimmermann
Message:

Reviewed by Oliver.
Fix <mask> in userSpaceOnUse coordinates. Verified by new testcase taken from Batik.

Location:
branches/feature-branch
Files:
5 added
3 edited

Legend:

Unmodified
Added
Removed
  • branches/feature-branch/LayoutTests/ChangeLog

    r25370 r25372  
     12007-09-05  Nikolas Zimmermann  <zimmermann@kde.org>
     2
     3        Reviewed by Oliver.
     4
     5        Fix <mask> in userSpaceOnUse coordinates. Verified by new testcase taken from Batik.
     6
     7        * svg/batik/masking/maskRegions-expected.checksum: Added.
     8        * svg/batik/masking/maskRegions-expected.png: Added.
     9        * svg/batik/masking/maskRegions-expected.txt: Added.
     10        * svg/batik/masking/maskRegions.svg: Added.
     11
    1122007-09-04  Nikolas Zimmermann  <zimmermann@kde.org>
    213
  • branches/feature-branch/WebCore/ChangeLog

    r25371 r25372  
     12007-09-05  Nikolas Zimmermann  <zimmermann@kde.org>
     2
     3        Reviewed by Oliver.
     4
     5        Fix <mask> in userSpaceOnUse coordinates. Verified by new testcase taken from Batik.
     6
     7        * ksvg2/svg/SVGMaskElement.cpp:
     8        (WebCore::SVGMaskElement::drawMaskerContent):
     9
    1102007-09-03  Nikolas Zimmermann  <zimmermann@kde.org>
    211
  • branches/feature-branch/WebCore/ksvg2/svg/SVGMaskElement.cpp

    r21944 r25372  
    112112{   
    113113    // Determine specified mask size
    114     float xValue = x().valueAsPercentage();
    115     float yValue = y().valueAsPercentage();
    116     float widthValue = width().valueAsPercentage();
    117     float heightValue = height().valueAsPercentage();
    118    
     114    float xValue;
     115    float yValue;
     116    float widthValue;
     117    float heightValue;
     118
    119119    if (maskUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) {
    120         xValue *= targetRect.width();
    121         yValue *= targetRect.height();
    122         widthValue *= targetRect.width();
    123         heightValue *= targetRect.height();
    124     }
     120        xValue = x().valueAsPercentage() * targetRect.width();
     121        yValue = y().valueAsPercentage() * targetRect.height();
     122        widthValue = width().valueAsPercentage() * targetRect.width();
     123        heightValue = height().valueAsPercentage() * targetRect.height();
     124    } else {
     125        xValue = x().value();
     126        yValue = y().value();
     127        widthValue = width().value();
     128        heightValue = height().value();
     129    }
    125130
    126131    auto_ptr<ImageBuffer> maskImage = ImageBuffer::create(IntSize(lroundf(widthValue), lroundf(heightValue)), false);
    127132    if (!maskImage.get())
    128133        return maskImage;
     134
    129135    maskDestRect = FloatRect(xValue, yValue, widthValue, heightValue);
    130136    if (maskUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
     
    133139    GraphicsContext* maskImageContext = maskImage->context();
    134140    ASSERT(maskImageContext);
    135    
     141
    136142    maskImageContext->save();
    137143    maskImageContext->translate(-xValue, -yValue);
    138    
     144
    139145    if (maskContentUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) {
    140146        maskImageContext->save();
    141147        maskImageContext->scale(FloatSize(targetRect.width(), targetRect.height()));
    142148    }
    143    
     149
    144150    // Render subtree into ImageBuffer
    145151    for (Node* n = firstChild(); n; n = n->nextSibling()) {
     
    147153        if (!elem || !elem->isStyled())
    148154            continue;
    149        
     155
    150156        SVGStyledElement* e = static_cast<SVGStyledElement*>(elem);
    151157        RenderObject* item = e->renderer();
    152158        if (!item)
    153159            continue;
    154        
     160
    155161        ImageBuffer::renderSubtreeToImage(maskImage.get(), item);
    156162    }
    157    
     163
    158164    if (maskContentUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
    159165        maskImageContext->restore();
    160    
     166
    161167    maskImageContext->restore();
    162 
    163168    return maskImage;
    164169}
Note: See TracChangeset for help on using the changeset viewer.