author | Ehsan Akhgari <ehsan@mozilla.com> |
Mon, 11 May 2015 13:52:24 -0400 | |
changeset 247741 | f6a0792e62591363b96683fc2d3c157096994f43 |
parent 247740 | fafce41ffcee0d907bb0be74c78cb6607b4fb70b |
child 247742 | 72c67850a705f986ef14b6a037f0a043196b3ad0 |
push id | 28881 |
push user | kwierso@gmail.com |
push date | Wed, 10 Jun 2015 01:59:03 +0000 |
treeherder | mozilla-central@d9156ad9b7a2 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | roc |
bugs | 1143570 |
milestone | 41.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
layout/generic/nsBlockFrame.cpp | file | annotate | diff | comparison | revisions | |
layout/generic/nsBlockFrame.h | file | annotate | diff | comparison | revisions |
--- a/layout/generic/nsBlockFrame.cpp +++ b/layout/generic/nsBlockFrame.cpp @@ -5354,24 +5354,26 @@ nsBlockInFlowLineIterator::nsBlockInFlow // rline_end. So we can safely increment it (i.e. move it to one line // earlier) to start searching there. ++rline; while (line != line_end || rline != rline_end) { if (line != line_end) { if (line->Contains(child)) { *aFoundValidLine = true; mLine = line; + aFrame->SetLineCursor(line.get()); return; } ++line; } if (rline != rline_end) { if (rline->Contains(child)) { *aFoundValidLine = true; mLine = rline; + aFrame->SetLineCursor(rline.get()); return; } ++rline; } } // Didn't find the line } @@ -6519,19 +6521,18 @@ void nsBlockFrame::ClearLineCursor() } void nsBlockFrame::SetupLineCursor() { if (GetStateBits() & NS_BLOCK_HAS_LINE_CURSOR || mLines.empty()) { return; } - - Properties().Set(LineCursorProperty(), mLines.front()); - AddStateBits(NS_BLOCK_HAS_LINE_CURSOR); + + SetLineCursor(mLines.front()); } nsLineBox* nsBlockFrame::GetFirstLineContaining(nscoord y) { if (!(GetStateBits() & NS_BLOCK_HAS_LINE_CURSOR)) { return nullptr; } @@ -6549,17 +6550,17 @@ nsLineBox* nsBlockFrame::GetFirstLineCon } while ((cursorArea.IsEmpty() || cursorArea.YMost() <= y) && cursor != mLines.back()) { cursor = cursor.next(); cursorArea = cursor->GetVisualOverflowArea(); } if (cursor.get() != property) { - props.Set(LineCursorProperty(), cursor.get()); + SetLineCursor(cursor.get()); } return cursor.get(); } /* virtual */ void nsBlockFrame::ChildIsDirty(nsIFrame* aChild) {
--- a/layout/generic/nsBlockFrame.h +++ b/layout/generic/nsBlockFrame.h @@ -372,16 +372,20 @@ protected: } #endif NS_DECLARE_FRAME_PROPERTY(LineCursorProperty, nullptr) nsLineBox* GetLineCursor() { return (GetStateBits() & NS_BLOCK_HAS_LINE_CURSOR) ? static_cast<nsLineBox*>(Properties().Get(LineCursorProperty())) : nullptr; } + void SetLineCursor(nsLineBox* aCursor) { + Properties().Set(LineCursorProperty(), aCursor); + AddStateBits(NS_BLOCK_HAS_LINE_CURSOR); + } nsLineBox* NewLineBox(nsIFrame* aFrame, bool aIsBlock) { return NS_NewLineBox(PresContext()->PresShell(), aFrame, aIsBlock); } nsLineBox* NewLineBox(nsLineBox* aFromLine, nsIFrame* aFrame, int32_t aCount) { return NS_NewLineBox(PresContext()->PresShell(), aFromLine, aFrame, aCount); } void FreeLineBox(nsLineBox* aLine) {