Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1350)

Unified Diff: Source/core/layout/svg/SVGTextLayoutEngine.cpp

Issue 1156053002: Move SVGTextChunkBuilder out of SVGTextLayoutEngine (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/layout/svg/SVGTextLayoutEngine.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/layout/svg/SVGTextLayoutEngine.cpp
diff --git a/Source/core/layout/svg/SVGTextLayoutEngine.cpp b/Source/core/layout/svg/SVGTextLayoutEngine.cpp
index eab2a631a6e15504e399ccd3b760afb0e77346d1..7dfb40dab2b50a2d5488e0f898ff820b3e736d9d 100644
--- a/Source/core/layout/svg/SVGTextLayoutEngine.cpp
+++ b/Source/core/layout/svg/SVGTextLayoutEngine.cpp
@@ -22,6 +22,7 @@
#include "core/layout/svg/LayoutSVGInlineText.h"
#include "core/layout/svg/LayoutSVGTextPath.h"
+#include "core/layout/svg/SVGTextChunkBuilder.h"
#include "core/layout/svg/SVGTextLayoutEngineBaseline.h"
#include "core/layout/svg/SVGTextLayoutEngineSpacing.h"
#include "core/layout/svg/line/SVGInlineTextBox.h"
@@ -29,9 +30,6 @@
#include "core/svg/SVGLengthContext.h"
#include "core/svg/SVGTextContentElement.h"
-// Set to a value > 0 to dump the text fragments
-#define DUMP_TEXT_FRAGMENTS 0
-
namespace blink {
SVGTextLayoutEngine::SVGTextLayoutEngine(Vector<SVGTextLayoutAttributes*>& layoutAttributes)
@@ -182,8 +180,9 @@ void SVGTextLayoutEngine::beginTextPathLayout(LayoutObject* object, SVGTextLayou
float totalLength = 0;
unsigned totalCharacters = 0;
- lineLayout.m_chunkLayoutBuilder.buildTextChunks(lineLayout.m_lineLayoutBoxes);
- const Vector<SVGTextChunk>& textChunks = lineLayout.m_chunkLayoutBuilder.textChunks();
+ SVGTextChunkBuilder textPathChunkLayoutBuilder;
+ textPathChunkLayoutBuilder.buildTextChunks(lineLayout.m_lineLayoutBoxes);
+ const Vector<SVGTextChunk>& textChunks = textPathChunkLayoutBuilder.textChunks();
unsigned size = textChunks.size();
for (unsigned i = 0; i < size; ++i) {
@@ -259,78 +258,22 @@ void SVGTextLayoutEngine::layoutInlineTextBox(SVGInlineTextBox* textBox)
m_lineLayoutBoxes.append(textBox);
}
-#if DUMP_TEXT_FRAGMENTS > 0
-static inline void dumpTextBoxes(Vector<SVGInlineTextBox*>& boxes)
-{
- unsigned boxCount = boxes.size();
- fprintf(stderr, "Dumping all text fragments in text sub tree, %i boxes\n", boxCount);
-
- for (unsigned boxPosition = 0; boxPosition < boxCount; ++boxPosition) {
- SVGInlineTextBox* textBox = boxes.at(boxPosition);
- Vector<SVGTextFragment>& fragments = textBox->textFragments();
- fprintf(stderr, "-> Box %i: Dumping text fragments for SVGInlineTextBox, textBox=%p, textLayoutObject=%p\n", boxPosition, textBox, textBox->textLayoutObject());
- fprintf(stderr, " textBox properties, start=%i, len=%i, box direction=%i\n", textBox->start(), textBox->len(), textBox->direction());
- fprintf(stderr, " textLayoutObject properties, textLength=%i\n", textBox->textLayoutObject()->textLength());
-
- String characters = textBox->textLayoutObject()->text();
-
- unsigned fragmentCount = fragments.size();
- for (unsigned i = 0; i < fragmentCount; ++i) {
- SVGTextFragment& fragment = fragments.at(i);
- String fragmentString = characters.substring(fragment.characterOffset, fragment.length);
- fprintf(stderr, " -> Fragment %i, x=%lf, y=%lf, width=%lf, height=%lf, characterOffset=%i, length=%i, characters='%s'\n",
- i, fragment.x, fragment.y, fragment.width, fragment.height, fragment.characterOffset, fragment.length, fragmentString.utf8().data());
- }
- }
-}
-#endif
-
-void SVGTextLayoutEngine::finalizeTransformMatrices(Vector<SVGInlineTextBox*>& boxes)
-{
- unsigned boxCount = boxes.size();
- if (!boxCount)
- return;
-
- for (unsigned boxPosition = 0; boxPosition < boxCount; ++boxPosition) {
- SVGInlineTextBox* textBox = boxes.at(boxPosition);
- AffineTransform textBoxTransformation = m_chunkLayoutBuilder.transformationForTextBox(textBox);
- if (textBoxTransformation.isIdentity())
- continue;
-
- Vector<SVGTextFragment>& fragments = textBox->textFragments();
- unsigned fragmentCount = fragments.size();
- for (unsigned i = 0; i < fragmentCount; ++i) {
- ASSERT(fragments[i].lengthAdjustTransform.isIdentity());
- fragments[i].lengthAdjustTransform = textBoxTransformation;
- }
- }
-
- boxes.clear();
-}
-
void SVGTextLayoutEngine::finishLayout()
{
// After all text fragments are stored in their correpsonding SVGInlineTextBoxes, we can layout individual text chunks.
// Chunk layouting is only performed for line layout boxes, not for path layout, where it has already been done.
- m_chunkLayoutBuilder.layoutTextChunks(m_lineLayoutBoxes);
+ SVGTextChunkBuilder chunkLayoutBuilder;
+ chunkLayoutBuilder.layoutTextChunks(m_lineLayoutBoxes);
// Finalize transform matrices, after the chunk layout corrections have been applied, and all fragment x/y positions are finalized.
if (!m_lineLayoutBoxes.isEmpty()) {
-#if DUMP_TEXT_FRAGMENTS > 0
- fprintf(stderr, "Line layout: ");
- dumpTextBoxes(m_lineLayoutBoxes);
-#endif
-
- finalizeTransformMatrices(m_lineLayoutBoxes);
+ chunkLayoutBuilder.finalizeTransformMatrices(m_lineLayoutBoxes);
+ m_lineLayoutBoxes.clear();
}
if (!m_pathLayoutBoxes.isEmpty()) {
-#if DUMP_TEXT_FRAGMENTS > 0
- fprintf(stderr, "Path layout: ");
- dumpTextBoxes(m_pathLayoutBoxes);
-#endif
-
- finalizeTransformMatrices(m_pathLayoutBoxes);
+ chunkLayoutBuilder.finalizeTransformMatrices(m_pathLayoutBoxes);
+ m_pathLayoutBoxes.clear();
}
}
« no previous file with comments | « Source/core/layout/svg/SVGTextLayoutEngine.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698