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

Unified Diff: third_party/WebKit/Source/core/layout/BidiRunForLine.cpp

Issue 1468103002: Add context information to BidiResolver.isolatedRuns() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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 | « no previous file | third_party/WebKit/Source/core/layout/line/InlineIterator.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/layout/BidiRunForLine.cpp
diff --git a/third_party/WebKit/Source/core/layout/BidiRunForLine.cpp b/third_party/WebKit/Source/core/layout/BidiRunForLine.cpp
index 8ade9f83e1e5b644137cd5acf5b6874d37fa978e..288d76a0d5f88b769fe8be9bb3b673282e3cca55 100644
--- a/third_party/WebKit/Source/core/layout/BidiRunForLine.cpp
+++ b/third_party/WebKit/Source/core/layout/BidiRunForLine.cpp
@@ -114,17 +114,6 @@ static inline void setupResolverToResumeInIsolate(InlineBidiResolver& resolver,
}
}
-static void restoreIsolatedMidpointStates(InlineBidiResolver& topResolver,
- InlineBidiResolver& isolatedResolver)
-{
- while (!isolatedResolver.isolatedRuns().isEmpty()) {
- BidiRun* run = isolatedResolver.isolatedRuns().last();
- isolatedResolver.isolatedRuns().removeLast();
- topResolver.setMidpointStateForIsolatedRun(run,
- isolatedResolver.midpointStateForIsolatedRun(run));
- }
-}
-
void constructBidiRunsForLine(InlineBidiResolver& topResolver,
BidiRunList<BidiRun>& bidiRuns, const InlineIterator& endOfLine,
VisualDirectionOverride override, bool previousLineBrokeCleanly,
@@ -137,28 +126,15 @@ void constructBidiRunsForLine(InlineBidiResolver& topResolver,
const LayoutObject* currentRoot = topResolver.position().root();
topResolver.createBidiRunsForLine(endOfLine, override,
previousLineBrokeCleanly);
- struct BidiRunsWithRoot {
- const LayoutObject* root;
- Vector<BidiRun*> isolatedRuns;
- };
- Vector<BidiRunsWithRoot> isolatedRunsStack;
-
- while (true) {
- if (topResolver.isolatedRuns().isEmpty()) {
- if (isolatedRunsStack.isEmpty())
- break;
- topResolver.isolatedRuns().appendVector(isolatedRunsStack.last().isolatedRuns);
- ASSERT(!topResolver.isolatedRuns().isEmpty());
- currentRoot = isolatedRunsStack.last().root;
- isolatedRunsStack.removeLast();
- }
+ while (!topResolver.isolatedRuns().isEmpty()) {
// It does not matter which order we resolve the runs as long as we
// resolve them all.
- BidiRun* isolatedRun = topResolver.isolatedRuns().last();
+ BidiIsolatedRun isolatedRun = topResolver.isolatedRuns().last();
topResolver.isolatedRuns().removeLast();
+ currentRoot = &isolatedRun.root;
- LayoutObject* startObj = isolatedRun->object();
+ LayoutObject* startObj = &isolatedRun.object;
// Only inlines make sense with unicode-bidi: isolate (blocks are
// already isolated).
@@ -176,7 +152,7 @@ void constructBidiRunsForLine(InlineBidiResolver& topResolver,
LineMidpointState& isolatedLineMidpointState =
isolatedResolver.midpointState();
isolatedLineMidpointState = topResolver.midpointStateForIsolatedRun(
- isolatedRun);
+ isolatedRun.runToReplace);
EUnicodeBidi unicodeBidi = isolatedInline->style()->unicodeBidi();
TextDirection direction;
if (unicodeBidi == Plaintext) {
@@ -197,7 +173,7 @@ void constructBidiRunsForLine(InlineBidiResolver& topResolver,
// createBidiRunsForLine. This can be but is not necessarily the first
// run within the isolate.
InlineIterator iter = InlineIterator(LineLayoutItem(isolatedInline), LineLayoutItem(startObj),
- isolatedRun->m_start);
+ isolatedRun.position);
isolatedResolver.setPositionIgnoringNestedIsolates(iter);
// We stop at the next end of line; we may re-enter this isolate in the
// next call to constructBidiRuns().
@@ -209,16 +185,16 @@ void constructBidiRunsForLine(InlineBidiResolver& topResolver,
ASSERT(isolatedResolver.runs().runCount());
if (isolatedResolver.runs().runCount())
- bidiRuns.replaceRunWithRuns(isolatedRun, isolatedResolver.runs());
+ bidiRuns.replaceRunWithRuns(&isolatedRun.runToReplace, isolatedResolver.runs());
// If we encountered any nested isolate runs, save them for later
// processing.
- if (!isolatedResolver.isolatedRuns().isEmpty()) {
- isolatedRunsStack.resize(isolatedRunsStack.size() + 1);
- isolatedRunsStack.last().isolatedRuns.appendVector(
- isolatedResolver.isolatedRuns());
- isolatedRunsStack.last().root = isolatedInline;
- restoreIsolatedMidpointStates(topResolver, isolatedResolver);
+ while (!isolatedResolver.isolatedRuns().isEmpty()) {
+ BidiIsolatedRun runWithContext = isolatedResolver.isolatedRuns().last();
+ isolatedResolver.isolatedRuns().removeLast();
+ topResolver.setMidpointStateForIsolatedRun(runWithContext.runToReplace,
+ isolatedResolver.midpointStateForIsolatedRun(runWithContext.runToReplace));
+ topResolver.isolatedRuns().append(runWithContext);
}
}
}
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/layout/line/InlineIterator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698