2010-09-10 Nikolas Zimmermann <nzimmermann@rim.com>
authorzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Sep 2010 15:35:50 +0000 (15:35 +0000)
committerzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Sep 2010 15:35:50 +0000 (15:35 +0000)
commit03a4eec1ebddd402237328bdc8ca4c349de388c0
tree896101f6ca2c297718fa1a820237deeb17f6aef0
parentb983b5ae5a3d2d289ae823e37cea930595015128
2010-09-10  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVG text chunk concept needs to be integrated in the InlineBox structure
        https://bugs.webkit.org/show_bug.cgi?id=45533

        Begin rewriting the SVG text layout code. As first step move the text chunk concept right into the inline box structure.
        This obsoletes the whole text chunk part concept (see SVGTextChunkLayoutInfo.h for details), and will soon simplify the
        whole layout code a lot. Previously we hacked around the fact that a single InlineTextBox could contain multiple text chunks
        For example: <text x="20 30 40">ABC</text> only led to the creation of one InlineTextBox containing three chunks. When
        painting such an InlineTextBox, we had to do nasty hacks (same for text selection etc.)

        This is finally fixed by incorporating the knownledge about text chunks into the line layout algorithm.
        Note, this has no impact on HTML at all, no worries.

        It's even required to do it this way as BiDi reordering shouldn't happen across text chunks.
        These are only the first bits, and currently slows down text layouting. Follow-up patches will remove the old layout
        algorithm, and will rely on the stored SVGTextLayoutAttributes in the RenerSVGInlineText renderers (instead of computing again).

        * Android.mk: Add rendering/svg/SVGTextLayoutAttributes.* & rendering/svg/SVGTextLayoutBuilder.* to build.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gyp/WebCore.gyp: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.vcproj/WebCoreCommon.vsprops: Ditto. (Recognize new rendering/svg directory.)
        * WebCore.vcproj/copyForwardingHeaders.cmd: Ditto. (Copy forwarding headers from rendering/svg directory.)
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/RenderBlockLineLayout.cpp: This is the key of the new concept, take text chunks into account when building the InlineBox structure.
        (WebCore::RenderBlock::findNextLineBreak): Split midpointState, if we encounter the beginning of a new text chunk.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGInline): New method, which will be used to identify RenderSVGInline objects.
        * rendering/RenderSVGInline.h:
        (WebCore::RenderSVGInline::isSVGInline): Return true.
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::linesBoundingBox): Overriden, to simplify the calculations for SVG.
        (WebCore::RenderSVGInlineText::characterStartsNewTextChunk): Determines wheter the given position starts a new text chunk.
        * rendering/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::storeLayoutAttributes): Stores the layout attributes calculated in the text layout process (will be used everywhere in follow-up patches).
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout): Invoke SVGTextLayoutBuilder before creating the inline box tree, so we can decide which characters start new text chunks.
        * rendering/RenderText.h: Made linesBoundingBox() virtual so RenderSVGInlineText can override it.
        * rendering/svg: Added.
        * rendering/svg/SVGTextLayoutAttributes.cpp: Added. Holds x/y/dx/dy/rotate values and all kerning/ligature information used during layout.
        * rendering/svg/SVGTextLayoutAttributes.h: Added.
        * rendering/svg/SVGTextLayoutBuilder.cpp: Added.
        * rendering/svg/SVGTextLayoutBuilder.h: Added.
2010-09-10  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVG text chunk concept needs to be integrated in the InlineBox structure
        https://bugs.webkit.org/show_bug.cgi?id=45533

        Updated all tests containing text chunks, to reflect the fact that more SVGInlineTextBoxes are created now.
        All 'startOffset' dumps now begin at 0, indicating that there's only one chunk contained in a single SVGInlineTextBox.
        These dumps will be removed in follow-up patches, as they don't make any sense anymore in the new concept.

        * platform/gtk/svg/text/select-x-list-1-expected.txt:
        * platform/gtk/svg/text/select-x-list-2-expected.txt:
        * platform/gtk/svg/text/select-x-list-3-expected.txt:
        * platform/gtk/svg/text/select-x-list-4-expected.txt:
        * platform/gtk/svg/text/select-x-list-with-tspans-1-expected.txt:
        * platform/gtk/svg/text/select-x-list-with-tspans-2-expected.txt:
        * platform/gtk/svg/text/select-x-list-with-tspans-3-expected.txt:
        * platform/gtk/svg/text/select-x-list-with-tspans-4-expected.txt:
        * platform/mac/svg/W3C-SVG-1.1/animate-elem-40-t-expected.txt:
        * platform/mac/svg/W3C-SVG-1.1/text-text-04-t-expected.txt:
        * platform/mac/svg/W3C-SVG-1.1/text-text-05-t-expected.txt:
        * platform/mac/svg/W3C-SVG-1.1/text-text-06-t-expected.txt:
        * platform/mac/svg/W3C-SVG-1.1/text-text-07-t-expected.txt:
        * platform/mac/svg/W3C-SVG-1.1/text-tspan-01-b-expected.txt:
        * platform/mac/svg/batik/text/textAnchor2-expected.txt:
        * platform/mac/svg/batik/text/textAnchor3-expected.txt:
        * platform/mac/svg/batik/text/textLayout-expected.txt:
        * platform/mac/svg/batik/text/textLayout2-expected.txt:
        * platform/mac/svg/batik/text/textOnPathSpaces-expected.txt:
        * platform/mac/svg/batik/text/textPosition-expected.txt:
        * platform/mac/svg/batik/text/textPosition2-expected.txt:
        * platform/mac/svg/custom/text-letter-spacing-expected.txt:
        * platform/mac/svg/custom/text-x-dx-lists-expected.txt:
        * platform/mac/svg/custom/text-x-override-in-tspan-child-expected.txt:
        * platform/mac/svg/text/select-x-list-1-expected.txt:
        * platform/mac/svg/text/select-x-list-2-expected.txt:
        * platform/mac/svg/text/select-x-list-3-expected.txt:
        * platform/mac/svg/text/select-x-list-4-expected.txt:
        * platform/mac/svg/text/select-x-list-with-tspans-1-expected.txt:
        * platform/mac/svg/text/select-x-list-with-tspans-2-expected.txt:
        * platform/mac/svg/text/select-x-list-with-tspans-3-expected.txt:
        * platform/mac/svg/text/select-x-list-with-tspans-4-expected.txt:
        * platform/mac/svg/text/text-text-04-t-expected.txt:
        * platform/mac/svg/text/text-text-05-t-expected.txt:
        * platform/mac/svg/text/text-text-06-t-expected.txt:
        * platform/mac/svg/text/text-text-07-t-expected.txt:
        * platform/mac/svg/text/text-tspan-01-b-expected.txt:
        * svg/custom/glyph-transformation-with-hkern-expected.txt:
        * platform/qt/svg/text/select-x-list-1-expected.txt:
        * platform/qt/svg/text/select-x-list-2-expected.txt:
        * platform/qt/svg/text/select-x-list-3-expected.txt:
        * platform/qt/svg/text/select-x-list-4-expected.txt:
        * platform/qt/svg/text/select-x-list-with-tspans-1-expected.txt:
        * platform/qt/svg/text/select-x-list-with-tspans-2-expected.txt:
        * platform/qt/svg/text/select-x-list-with-tspans-3-expected.txt:
        * platform/qt/svg/text/select-x-list-with-tspans-4-expected.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@67200 268f45cc-cd09-0410-ab3c-d52691b4dbfc
69 files changed:
LayoutTests/ChangeLog
LayoutTests/platform/gtk/svg/text/select-x-list-1-expected.txt
LayoutTests/platform/gtk/svg/text/select-x-list-2-expected.txt
LayoutTests/platform/gtk/svg/text/select-x-list-3-expected.txt
LayoutTests/platform/gtk/svg/text/select-x-list-4-expected.txt
LayoutTests/platform/gtk/svg/text/select-x-list-with-tspans-1-expected.txt
LayoutTests/platform/gtk/svg/text/select-x-list-with-tspans-2-expected.txt
LayoutTests/platform/gtk/svg/text/select-x-list-with-tspans-3-expected.txt
LayoutTests/platform/gtk/svg/text/select-x-list-with-tspans-4-expected.txt
LayoutTests/platform/mac/svg/W3C-SVG-1.1/animate-elem-40-t-expected.txt
LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-text-04-t-expected.txt
LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-text-05-t-expected.txt
LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-text-06-t-expected.txt
LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-text-07-t-expected.txt
LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-tspan-01-b-expected.txt
LayoutTests/platform/mac/svg/batik/text/textAnchor2-expected.txt
LayoutTests/platform/mac/svg/batik/text/textAnchor3-expected.txt
LayoutTests/platform/mac/svg/batik/text/textLayout-expected.txt
LayoutTests/platform/mac/svg/batik/text/textLayout2-expected.txt
LayoutTests/platform/mac/svg/batik/text/textOnPathSpaces-expected.txt
LayoutTests/platform/mac/svg/batik/text/textPosition-expected.txt
LayoutTests/platform/mac/svg/batik/text/textPosition2-expected.txt
LayoutTests/platform/mac/svg/custom/text-letter-spacing-expected.txt
LayoutTests/platform/mac/svg/custom/text-x-dx-lists-expected.txt
LayoutTests/platform/mac/svg/custom/text-x-override-in-tspan-child-expected.txt
LayoutTests/platform/mac/svg/text/select-x-list-1-expected.txt
LayoutTests/platform/mac/svg/text/select-x-list-2-expected.txt
LayoutTests/platform/mac/svg/text/select-x-list-3-expected.txt
LayoutTests/platform/mac/svg/text/select-x-list-4-expected.txt
LayoutTests/platform/mac/svg/text/select-x-list-with-tspans-1-expected.txt
LayoutTests/platform/mac/svg/text/select-x-list-with-tspans-2-expected.txt
LayoutTests/platform/mac/svg/text/select-x-list-with-tspans-3-expected.txt
LayoutTests/platform/mac/svg/text/select-x-list-with-tspans-4-expected.txt
LayoutTests/platform/mac/svg/text/text-text-04-t-expected.txt
LayoutTests/platform/mac/svg/text/text-text-05-t-expected.txt
LayoutTests/platform/mac/svg/text/text-text-06-t-expected.txt
LayoutTests/platform/mac/svg/text/text-text-07-t-expected.txt
LayoutTests/platform/mac/svg/text/text-tspan-01-b-expected.txt
LayoutTests/platform/qt/svg/text/select-x-list-1-expected.txt
LayoutTests/platform/qt/svg/text/select-x-list-2-expected.txt
LayoutTests/platform/qt/svg/text/select-x-list-3-expected.txt
LayoutTests/platform/qt/svg/text/select-x-list-4-expected.txt
LayoutTests/platform/qt/svg/text/select-x-list-with-tspans-1-expected.txt
LayoutTests/platform/qt/svg/text/select-x-list-with-tspans-2-expected.txt
LayoutTests/platform/qt/svg/text/select-x-list-with-tspans-3-expected.txt
LayoutTests/platform/qt/svg/text/select-x-list-with-tspans-4-expected.txt
LayoutTests/svg/custom/glyph-transformation-with-hkern-expected.txt
WebCore/Android.mk
WebCore/CMakeLists.txt
WebCore/ChangeLog
WebCore/GNUmakefile.am
WebCore/WebCore.gyp/WebCore.gyp
WebCore/WebCore.gypi
WebCore/WebCore.pro
WebCore/WebCore.vcproj/WebCore.vcproj
WebCore/WebCore.vcproj/WebCoreCommon.vsprops
WebCore/WebCore.vcproj/copyForwardingHeaders.cmd
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/rendering/RenderBlockLineLayout.cpp
WebCore/rendering/RenderObject.h
WebCore/rendering/RenderSVGInline.h
WebCore/rendering/RenderSVGInlineText.cpp
WebCore/rendering/RenderSVGInlineText.h
WebCore/rendering/RenderSVGText.cpp
WebCore/rendering/RenderText.h
WebCore/rendering/svg/SVGTextLayoutAttributes.cpp [new file with mode: 0644]
WebCore/rendering/svg/SVGTextLayoutAttributes.h [new file with mode: 0644]
WebCore/rendering/svg/SVGTextLayoutBuilder.cpp [new file with mode: 0644]
WebCore/rendering/svg/SVGTextLayoutBuilder.h [new file with mode: 0644]