WebKit Bugzilla
Attachment 342359 Details for
Bug 186454
: REGRESSION(macOS Mojave): move-by-word-visually-multi-line.html fails
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
WIP
wip186454.patch (text/plain), 5.14 KB, created by
Ryosuke Niwa
on 2018-06-08 22:13:46 PDT
(
hide
)
Description:
WIP
Filename:
MIME Type:
Creator:
Ryosuke Niwa
Created:
2018-06-08 22:13:46 PDT
Size:
5.14 KB
patch
obsolete
>diff --git a/Source/WebCore/editing/VisibleUnits.cpp b/Source/WebCore/editing/VisibleUnits.cpp >index 55f2b708690..6464715eab0 100644 >--- a/Source/WebCore/editing/VisibleUnits.cpp >+++ b/Source/WebCore/editing/VisibleUnits.cpp >@@ -125,15 +125,15 @@ class CachedLogicallyOrderedLeafBoxes { > public: > CachedLogicallyOrderedLeafBoxes(); > >- const InlineBox* previousTextOrLineBreakBox(const RootInlineBox*, const InlineTextBox*); >- const InlineBox* nextTextOrLineBreakBox(const RootInlineBox*, const InlineTextBox*); >+ const InlineBox* previousTextOrLineBreakBox(const RootInlineBox*, const InlineBox*); >+ const InlineBox* nextTextOrLineBreakBox(const RootInlineBox*, const InlineBox*); > > size_t size() const { return m_leafBoxes.size(); } > const InlineBox* firstBox() const { return m_leafBoxes[0]; } > > private: > const Vector<InlineBox*>& collectBoxes(const RootInlineBox*); >- int boxIndexInLeaves(const InlineTextBox*) const; >+ int boxIndexInLeaves(const InlineBox*) const; > > const RootInlineBox* m_rootInlineBox { nullptr }; > Vector<InlineBox*> m_leafBoxes; >@@ -143,7 +143,7 @@ CachedLogicallyOrderedLeafBoxes::CachedLogicallyOrderedLeafBoxes() > { > } > >-const InlineBox* CachedLogicallyOrderedLeafBoxes::previousTextOrLineBreakBox(const RootInlineBox* root, const InlineTextBox* box) >+const InlineBox* CachedLogicallyOrderedLeafBoxes::previousTextOrLineBreakBox(const RootInlineBox* root, const InlineBox* box) > { > if (!root) > return nullptr; >@@ -164,7 +164,7 @@ const InlineBox* CachedLogicallyOrderedLeafBoxes::previousTextOrLineBreakBox(con > return nullptr; > } > >-const InlineBox* CachedLogicallyOrderedLeafBoxes::nextTextOrLineBreakBox(const RootInlineBox* root, const InlineTextBox* box) >+const InlineBox* CachedLogicallyOrderedLeafBoxes::nextTextOrLineBreakBox(const RootInlineBox* root, const InlineBox* box) > { > if (!root) > return nullptr; >@@ -196,7 +196,7 @@ const Vector<InlineBox*>& CachedLogicallyOrderedLeafBoxes::collectBoxes(const Ro > return m_leafBoxes; > } > >-int CachedLogicallyOrderedLeafBoxes::boxIndexInLeaves(const InlineTextBox* box) const >+int CachedLogicallyOrderedLeafBoxes::boxIndexInLeaves(const InlineBox* box) const > { > for (size_t i = 0; i < m_leafBoxes.size(); ++i) { > if (box == m_leafBoxes[i]) >@@ -205,7 +205,7 @@ int CachedLogicallyOrderedLeafBoxes::boxIndexInLeaves(const InlineTextBox* box) > return 0; > } > >-static const InlineBox* logicallyPreviousBox(const VisiblePosition& visiblePosition, const InlineTextBox* textBox, >+static const InlineBox* logicallyPreviousBox(const VisiblePosition& visiblePosition, const InlineBox* textBox, > bool& previousBoxInDifferentBlock, CachedLogicallyOrderedLeafBoxes& leafBoxes) > { > const InlineBox* startBox = textBox; >@@ -246,7 +246,7 @@ static const InlineBox* logicallyPreviousBox(const VisiblePosition& visiblePosit > } > > >-static const InlineBox* logicallyNextBox(const VisiblePosition& visiblePosition, const InlineTextBox* textBox, >+static const InlineBox* logicallyNextBox(const VisiblePosition& visiblePosition, const InlineBox* textBox, > bool& nextBoxInDifferentBlock, CachedLogicallyOrderedLeafBoxes& leafBoxes) > { > const InlineBox* startBox = textBox; >@@ -293,6 +293,11 @@ static UBreakIterator* wordBreakIteratorForMinOffsetBoundary(const VisiblePositi > > // FIXME: Handle the case when we don't have an inline text box. > const InlineBox* previousBox = logicallyPreviousBox(visiblePosition, textBox, previousBoxInDifferentBlock, leafBoxes); >+ while (previousBox && !is<InlineTextBox>(previousBox)) { >+ ASSERT(previousBox->renderer().isBR()); >+ previousBoxLength = true; >+ previousBox = logicallyPreviousBox(visiblePosition, previousBox, previousBoxInDifferentBlock, leafBoxes); >+ } > > string.clear(); > >@@ -313,6 +318,11 @@ static UBreakIterator* wordBreakIteratorForMaxOffsetBoundary(const VisiblePositi > > // FIXME: Handle the case when we don't have an inline text box. > const InlineBox* nextBox = logicallyNextBox(visiblePosition, textBox, nextBoxInDifferentBlock, leafBoxes); >+ while (nextBox && !is<InlineTextBox>(nextBox)) { >+ ASSERT(nextBox->renderer().isBR()); >+ nextBoxInDifferentBlock = true; >+ nextBox = logicallyNextBox(visiblePosition, nextBox, nextBoxInDifferentBlock, leafBoxes); >+ } > > string.clear(); > append(string, StringView(textBox->renderer().text()).substring(textBox->start(), textBox->len())); >@@ -405,6 +415,8 @@ static VisiblePosition visualWordPosition(const VisiblePosition& visiblePosition > || (!skipsSpaceWhenMovingRight && movingBackward)) { > bool logicalStartInRenderer = offsetInBox == static_cast<int>(textBox.start()) && previousBoxInDifferentBlock; > isWordBreak = isLogicalStartOfWord(iter, offsetInIterator, logicalStartInRenderer); >+ if (isWordBreak && offsetInBox == box->caretMaxOffset() && nextBoxInDifferentBlock) >+ isWordBreak = false; > } else { > bool logicalEndInRenderer = offsetInBox == static_cast<int>(textBox.start() + textBox.len()) && nextBoxInDifferentBlock; > isWordBreak = islogicalEndOfWord(iter, offsetInIterator, logicalEndInRenderer);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 186454
:
342359
|
342361
|
342362
|
342363