Skip to content
  • krit@webkit.org's avatar
    2010-02-08 Dirk Schulze <krit@webkit.org> · 2b95a9a6
    krit@webkit.org authored
            Reviewed by Nikolas Zimmermann.
    
            Add back an AffineTransform class for use by SVG
            https://bugs.webkit.org/show_bug.cgi?id=33750
    
            This adds back AffineTransform. This saves additional 4% memory consumption
            on the 50k rects stress test: https://bugs.webkit.org/attachment.cgi?id=46721
            It also makes it possible to optimize the calculations internally of
            AffineTransform to the needs of 2D transformations (the second benefit for SVG,
            which uses transformations relative often at the moment.
            Everything that is 2D related (like images, patterns, gradients, fonts), uses
            AffineTransform now.
    
            * WebCore.xcodeproj/project.pbxproj:
            * bindings/js/JSSVGMatrixCustom.cpp:
            (WebCore::JSSVGMatrix::multiply):
            (WebCore::JSSVGMatrix::inverse):
            (WebCore::JSSVGMatrix::rotateFromVector):
            * bindings/js/JSSVGPODTypeWrapper.h:
            * bindings/scripts/CodeGeneratorJS.pm:
            * bindings/scripts/CodeGeneratorObjC.pm:
            * bindings/scripts/CodeGeneratorV8.pm:
            * bindings/v8/V8Index.h:
            * bindings/v8/custom/V8SVGMatrixCustom.cpp:
            (WebCore::V8SVGMatrix::multiplyCallback):
            (WebCore::V8SVGMatrix::inverseCallback):
            (WebCore::V8SVGMatrix::rotateFromVectorCallback):
            * html/HTMLCanvasElement.cpp: Changed to AffineTransform now
            (WebCore::HTMLCanvasElement::baseTransform):
            * html/HTMLCanvasElement.h:
            * platform/graphics/FloatPoint.cpp:
            (WebCore::FloatPoint::matrixTransform):
            * platform/graphics/FloatPoint.h:
            * platform/graphics/GeneratedImage.cpp:
            (WebCore::GeneratedImage::drawPattern):
            * platform/graphics/GeneratedImage.h:
            * platform/graphics/Gradient.cpp:
            (WebCore::Gradient::setGradientSpaceTransform):
            (WebCore::Gradient::setPlatformGradientSpaceTransform):
            * platform/graphics/Gradient.h:
            (WebCore::Gradient::gradientSpaceTransform):
            * platform/graphics/GraphicsContext.h:
            * platform/graphics/Image.cpp:
            (WebCore::Image::drawTiled):
            * platform/graphics/Image.h:
            * platform/graphics/ImageBuffer.h:
            (WebCore::ImageBuffer::baseTransform):
            * platform/graphics/Path.h:
            * platform/graphics/Pattern.cpp:
            (WebCore::Pattern::setPatternSpaceTransform):
            * platform/graphics/Pattern.h:
            (WebCore::Pattern::create):
            (WebCore::Pattern::tileImage):
            * platform/graphics/cairo/FontCairo.cpp:
            (WebCore::Font::drawGlyphs):
            * platform/graphics/cairo/GraphicsContextCairo.cpp:
            (WebCore::setPlatformFill):
            (WebCore::setPlatformStroke):
            (WebCore::GraphicsContext::getCTM):
            * platform/graphics/cairo/ImageCairo.cpp:
            (WebCore::Image::drawPattern):
            * platform/graphics/cairo/PathCairo.cpp:
            * platform/graphics/cairo/PatternCairo.cpp:
            (WebCore::Pattern::createPlatformPattern):
            * platform/graphics/cg/GraphicsContextCG.cpp:
            (WebCore::GraphicsContext::getCTM):
            * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
            (WebCore::GraphicsContextPlatformPrivate::concatCTM):
            * platform/graphics/cg/ImageCG.cpp:
            (WebCore::Image::drawPattern):
            * platform/graphics/cg/PathCG.cpp:
            * platform/graphics/cg/PatternCG.cpp:
            (WebCore::Pattern::createPlatformPattern):
            * platform/graphics/haiku/GraphicsContextHaiku.cpp:
            (WebCore::GraphicsContext::getCTM):
            * platform/graphics/haiku/ImageHaiku.cpp:
            (WebCore::Image::drawPattern):
            * platform/graphics/haiku/PathHaiku.cpp:
            * platform/graphics/qt/FontQt.cpp:
            (WebCore::Font::drawComplexText):
            * platform/graphics/qt/GraphicsContextQt.cpp:
            (WebCore::GraphicsContext::getCTM):
            (WebCore::GraphicsContext::fillPath):
            (WebCore::GraphicsContext::strokePath):
            (WebCore::GraphicsContext::fillRect):
            * platform/graphics/qt/ImageQt.cpp:
            (WebCore::Image::drawPattern):
            * platform/graphics/qt/PathQt.cpp:
            * platform/graphics/qt/PatternQt.cpp:
            (WebCore::Pattern::createPlatformPattern):
            * platform/graphics/skia/GradientSkia.cpp:
            (WebCore::Gradient::setPlatformGradientSpaceTransform):
            * platform/graphics/skia/GraphicsContextSkia.cpp:
            (WebCore::GraphicsContext::getCTM):
            * platform/graphics/skia/ImageSkia.cpp:
            (WebCore::Image::drawPattern):
            * platform/graphics/skia/PathSkia.cpp:
            * platform/graphics/skia/PatternSkia.cpp:
            (WebCore::Pattern::platformPattern):
            * platform/graphics/skia/SkiaFontWin.cpp:
            (WebCore::windowsCanHandleTextDrawing):
            * platform/graphics/transforms/AffineTransform.cpp:
            (WebCore::AffineTransform::makeIdentity): needed by some parts of WebCore
            (WebCore::AffineTransform::scale): Didn't scale the complete matrix
            (WebCore::AffineTransform::translate): Didn't respect other transformations
            (WebCore::AffineTransform::shear): direct calculation, no extra multiply of matrices
            (WebCore::AffineTransform::map):
            (WebCore::AffineTransform::mapPoint):
            (WebCore::AffineTransform::mapRect):
            * platform/graphics/transforms/AffineTransform.h:
            (WebCore::AffineTransform::isIdentityOrTranslation):
            * platform/graphics/transforms/TransformationMatrix.cpp:
            (WebCore::TransformationMatrix::toAffineTransform):
            * platform/graphics/transforms/TransformationMatrix.h:
            * platform/graphics/win/FontCGWin.cpp:
            (WebCore::drawGDIGlyphs):
            * platform/graphics/win/GraphicsContextCGWin.cpp:
            * platform/graphics/win/GraphicsContextCairoWin.cpp:
            * platform/graphics/win/GraphicsContextWin.cpp:
            (WebCore::GraphicsContextPlatformPrivate::concatCTM):
            * platform/graphics/wince/FontWince.cpp:
            * platform/graphics/wince/GraphicsContextWince.cpp:
            (WebCore::GraphicsContextPlatformPrivate::concatCTM):
            (WebCore::GraphicsContext::fillPath):
            (WebCore::GraphicsContext::strokePath):
            (WebCore::GraphicsContext::getCTM):
            (WebCore::GraphicsContext::drawBitmapPattern):
            * platform/graphics/wince/ImageBufferWince.cpp:
            (WebCore::):
            (WebCore::BufferedImage::drawPattern):
            * platform/graphics/wince/PathWince.cpp:
            (WebCore::Path::transform):
            * platform/graphics/wince/PlatformPathWince.cpp:
            (WebCore::drawPolygons):
            (WebCore::PathPolygon::transform):
            (WebCore::PlatformPathElement::transform):
            (WebCore::PlatformPath::strokePath):
            (WebCore::PlatformPath::fillPath):
            (WebCore::PlatformPath::transform):
            * platform/graphics/wince/PlatformPathWince.h:
            (WebCore::):
            * platform/graphics/wx/GraphicsContextWx.cpp:
            (WebCore::GraphicsContext::getCTM):
            * platform/graphics/wx/ImageWx.cpp:
            (WebCore::BitmapImage::drawPattern):
            (WebCore::Image::drawPattern):
            * platform/graphics/wx/PathWx.cpp:
            * platform/gtk/RenderThemeGtk.cpp:
            (WebCore::paintMozillaGtkWidget):
            * plugins/win/PluginViewWin.cpp:
            (WebCore::PluginView::paintWindowedPluginIntoContext):
            * rendering/RenderBox.cpp:
            (WebCore::RenderBox::localTransform):
            * rendering/RenderBox.h:
            * rendering/RenderBoxModelObject.cpp:
            (WebCore::RenderBoxModelScaleData::RenderBoxModelScaleData):
            (WebCore::RenderBoxModelScaleData::transform):
            (WebCore::RenderBoxModelScaleData::setTransform):
            (WebCore::RenderBoxModelScaleObserver::shouldPaintBackgroundAtLowQuality):
            (WebCore::RenderBoxModelObject::paintBoxShadow):
            * rendering/RenderForeignObject.cpp:
            (WebCore::RenderForeignObject::translationForAttributes):
            (WebCore::RenderForeignObject::localToParentTransform):
            * rendering/RenderForeignObject.h:
            (WebCore::RenderForeignObject::localTransform):
            * rendering/RenderLayer.cpp:
            (WebCore::RenderLayer::paintLayer):
            * rendering/RenderObject.cpp:
            (WebCore::RenderObject::localTransform):
            (WebCore::RenderObject::localToParentTransform):
            (WebCore::RenderObject::absoluteTransform):
            * rendering/RenderObject.h:
            * rendering/RenderPath.cpp:
            (WebCore::RenderPath::localToParentTransform):
            (WebCore::RenderPath::localTransform):
            * rendering/RenderPath.h:
            * rendering/RenderSVGHiddenContainer.h:
            (WebCore::RenderSVGHiddenContainer::absoluteTransform):
            * rendering/RenderSVGImage.h:
            (WebCore::RenderSVGImage::localToParentTransform):
            (WebCore::RenderSVGImage::localTransform):
            * rendering/RenderSVGRoot.cpp:
            (WebCore::RenderSVGRoot::localToBorderBoxTransform):
            (WebCore::RenderSVGRoot::localToRepaintContainerTransform):
            (WebCore::RenderSVGRoot::localToParentTransform):
            (WebCore::RenderSVGRoot::absoluteTransform):
            (WebCore::RenderSVGRoot::localTransform):
            * rendering/RenderSVGRoot.h:
            * rendering/RenderSVGText.h:
            (WebCore::RenderSVGText::localToParentTransform):
            (WebCore::RenderSVGText::localTransform):
            * rendering/RenderSVGTransformableContainer.cpp:
            (WebCore::RenderSVGTransformableContainer::localToParentTransform):
            (WebCore::RenderSVGTransformableContainer::localTransform):
            (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
            * rendering/RenderSVGTransformableContainer.h:
            * rendering/RenderSVGViewportContainer.cpp:
            (WebCore::RenderSVGViewportContainer::markerBoundaries):
            (WebCore::RenderSVGViewportContainer::markerContentTransformation):
            (WebCore::RenderSVGViewportContainer::viewportTransform):
            (WebCore::RenderSVGViewportContainer::localToParentTransform):
            (WebCore::RenderSVGViewportContainer::absoluteTransform):
            * rendering/RenderSVGViewportContainer.h:
            * rendering/SVGCharacterLayoutInfo.cpp:
            (WebCore::SVGChar::characterTransform):
            * rendering/SVGCharacterLayoutInfo.h:
            (WebCore::SVGTextChunkWalker::operator()):
            * rendering/SVGInlineTextBox.cpp:
            (WebCore::SVGInlineTextBox::calculateGlyphBoundaries):
            (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::chunkPortionCallback):
            (WebCore::SVGInlineTextBoxSelectionRectWalker::chunkPortionCallback):
            (WebCore::SVGInlineTextBox::paintCharacters):
            (WebCore::SVGInlineTextBox::paintDecoration):
            * rendering/SVGMarkerLayoutInfo.h:
            (WebCore::MarkerLayout::MarkerLayout):
            * rendering/SVGRenderSupport.cpp:
            (WebCore::applyTransformToPaintInfo):
            * rendering/SVGRenderSupport.h:
            * rendering/SVGRenderTreeAsText.cpp:
            (WebCore::operator<<):
            * rendering/SVGRenderTreeAsText.h:
            * rendering/SVGRootInlineBox.cpp:
            (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):
            (WebCore::applyTextLengthCorrectionToTextChunk):
            (WebCore::SVGRootInlineBox::buildLayoutInformation):
            * rendering/TransformState.cpp:
            (WebCore::TransformState::applyTransform):
            * rendering/TransformState.h:
            * svg/GradientAttributes.h:
            (WebCore::GradientAttributes::gradientTransform):
            (WebCore::GradientAttributes::setGradientTransform):
            * svg/PatternAttributes.h:
            (WebCore::PatternAttributes::patternTransform):
            (WebCore::PatternAttributes::setPatternTransform):
            * svg/SVGAnimateMotionElement.cpp:
            (WebCore::SVGAnimateMotionElement::resetToBaseValue):
            (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
            (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
            * svg/SVGAnimateMotionElement.h:
            * svg/SVGAnimateTransformElement.cpp:
            * svg/SVGAnimateTransformElement.h:
            * svg/SVGElement.h:
            (WebCore::SVGElement::supplementalTransform):
            * svg/SVGFitToViewBox.cpp:
            (WebCore::SVGFitToViewBox::viewBoxToViewTransform):
            * svg/SVGFitToViewBox.h:
            * svg/SVGLocatable.cpp:
            (WebCore::SVGLocatable::getCTM):
            (WebCore::SVGLocatable::getScreenCTM):
            (WebCore::SVGLocatable::getTransformToElement):
            * svg/SVGLocatable.h:
            * svg/SVGMarkerElement.cpp:
            (WebCore::SVGMarkerElement::viewBoxToViewTransform):
            * svg/SVGMarkerElement.h:
            * svg/SVGMaskElement.cpp:
            (WebCore::SVGMaskElement::drawMaskerContent):
            * svg/SVGMatrix.idl:
            * svg/SVGPatternElement.cpp:
            (WebCore::SVGPatternElement::buildPattern):
            * svg/SVGPreserveAspectRatio.cpp:
            (WebCore::SVGPreserveAspectRatio::getCTM):
            * svg/SVGPreserveAspectRatio.h:
            * svg/SVGSVGElement.cpp:
            (WebCore::SVGSVGElement::viewport):
            (WebCore::SVGSVGElement::createSVGMatrix):
            (WebCore::SVGSVGElement::createSVGTransformFromMatrix):
            (WebCore::SVGSVGElement::getCTM):
            (WebCore::SVGSVGElement::getScreenCTM):
            (WebCore::SVGSVGElement::viewBoxToViewTransform):
            * svg/SVGSVGElement.h:
            * svg/SVGStyledLocatableElement.cpp:
            (WebCore::SVGStyledLocatableElement::getCTM):
            (WebCore::SVGStyledLocatableElement::getScreenCTM):
            * svg/SVGStyledLocatableElement.h:
            * svg/SVGStyledTransformableElement.cpp:
            (WebCore::SVGStyledTransformableElement::getCTM):
            (WebCore::SVGStyledTransformableElement::getScreenCTM):
            (WebCore::SVGStyledTransformableElement::animatedLocalTransform):
            (WebCore::SVGStyledTransformableElement::supplementalTransform):
            * svg/SVGStyledTransformableElement.h:
            (WebCore::SVGStyledTransformableElement::isStyledTransformable):
            (WebCore::SVGStyledTransformableElement::toPathData):
            * svg/SVGTextContentElement.cpp:
            (WebCore::SVGInlineTextBoxQueryWalker::chunkPortionCallback):
            * svg/SVGTextElement.cpp:
            (WebCore::SVGTextElement::getScreenCTM):
            (WebCore::SVGTextElement::getCTM):
            (WebCore::SVGTextElement::animatedLocalTransform):
            (WebCore::SVGTextElement::supplementalTransform):
            * svg/SVGTextElement.h:
            * svg/SVGTextPathElement.cpp:
            * svg/SVGTransform.cpp:
            (SVGTransform::SVGTransform):
            (SVGTransform::matrix):
            (SVGTransform::setMatrix):
            * svg/SVGTransform.h:
            * svg/SVGTransformDistance.cpp:
            (WebCore::SVGTransformDistance::SVGTransformDistance):
            (WebCore::SVGTransformDistance::scaledDistance):
            (WebCore::SVGTransformDistance::isZero):
            * svg/SVGTransformDistance.h:
            * svg/SVGTransformList.cpp:
            (SVGTransformList::createSVGTransformFromMatrix):
            (SVGTransformList::concatenate):
            (SVGTransformList::valueAsString):
            * svg/SVGTransformList.h:
            * svg/SVGTransformable.cpp:
            (WebCore::SVGTransformable::getCTM):
            (WebCore::SVGTransformable::getScreenCTM):
            (WebCore::SVGTransformable::parseTransformValue):
            * svg/SVGTransformable.h:
            (WebCore::SVGTransformable::):
            * svg/graphics/SVGPaintServerGradient.cpp:
            (WebCore::SVGPaintServerGradient::gradientTransform):
            (WebCore::SVGPaintServerGradient::setGradientTransform):
            (WebCore::clipToTextMask):
            (WebCore::SVGPaintServerGradient::setup):
            * svg/graphics/SVGPaintServerGradient.h:
            * svg/graphics/SVGPaintServerPattern.cpp:
            (WebCore::SVGPaintServerPattern::patternTransform):
            (WebCore::SVGPaintServerPattern::setPatternTransform):
            (WebCore::SVGPaintServerPattern::setup):
            * svg/graphics/SVGPaintServerPattern.h:
            * svg/graphics/SVGResourceClipper.cpp:
            (WebCore::SVGResourceClipper::applyClip):
            * svg/graphics/SVGResourceMarker.cpp:
            (WebCore::SVGResourceMarker::markerTransformation):
            (WebCore::SVGResourceMarker::draw):
            * svg/graphics/SVGResourceMarker.h:
            * svg/graphics/filters/SVGFEImage.cpp:
            * svg/graphics/filters/SVGFETile.cpp:
            (WebCore::FETile::apply):
    
    2010-02-08  Dirk Schulze  <krit@webkit.org>
    
            Reviewed by Nikolas Zimmermann.
    
            Add back an AffineTransform class for use by SVG
            https://bugs.webkit.org/show_bug.cgi?id=33750
    
            Some negative zero problems fixed, but new one were added on other places. A seperate
            patch should fix it all at once.
            use-on-disallowed-foreign-object-3 and 4 had wrong results. The old SVG code
            with TransformationMatrix used translateRight, that was wrong at this place and is
            fixed now.
    
            * platform/mac/svg/W3C-SVG-1.1/animate-elem-80-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/fonts-elem-01-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/fonts-elem-02-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/fonts-elem-03-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/fonts-elem-04-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/fonts-elem-07-b-expected.txt:
            * platform/mac/svg/custom/use-on-disallowed-foreign-object-3-expected.txt:
            * platform/mac/svg/custom/use-on-disallowed-foreign-object-4-expected.txt:
            * svg/dom/SVGMatrix-interface-expected.txt:
            * svg/dom/SVGMatrix-interface.xhtml:
    
    2010-02-08  Dirk Schulze  <krit@webkit.org>
    
            Reviewed by Nikolas Zimmermann.
    
            Add back an AffineTransform class for use by SVG
            https://bugs.webkit.org/show_bug.cgi?id=33750
    
            Use AffineTransform instead of TransformationMatrix here.
    
            * tests/TransparencyWinTest.cpp:
            (WebCore::TEST):
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@54503 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    2b95a9a6