Bug 1110277 patch 2 - Add nsLayoutUtils::LastContinuationOrIBSplitSibling(). r=bzbarsky
This is used in patch 3.
--- a/layout/base/nsLayoutUtils.cpp
+++ b/layout/base/nsLayoutUtils.cpp
@@ -3902,16 +3902,35 @@ nsLayoutUtils::FirstContinuationOrIBSpli
break;
result = f;
}
}
return result;
}
+nsIFrame*
+nsLayoutUtils::LastContinuationOrIBSplitSibling(nsIFrame *aFrame)
+{
+ nsIFrame *result = aFrame->FirstContinuation();
+ if (result->GetStateBits() & NS_FRAME_PART_OF_IBSPLIT) {
+ while (true) {
+ nsIFrame *f = static_cast<nsIFrame*>
+ (result->Properties().Get(nsIFrame::IBSplitSibling()));
+ if (!f)
+ break;
+ result = f;
+ }
+ }
+
+ result = result->LastContinuation();
+
+ return result;
+}
+
bool
nsLayoutUtils::IsFirstContinuationOrIBSplitSibling(nsIFrame *aFrame)
{
if (aFrame->GetPrevContinuation()) {
return false;
}
if ((aFrame->GetStateBits() & NS_FRAME_PART_OF_IBSPLIT) &&
aFrame->Properties().Get(nsIFrame::IBSplitPrevSibling())) {
--- a/layout/base/nsLayoutUtils.h
+++ b/layout/base/nsLayoutUtils.h
@@ -1249,16 +1249,23 @@ public:
/**
* Get the first frame in the continuation-plus-ib-split-sibling chain
* containing aFrame.
*/
static nsIFrame*
FirstContinuationOrIBSplitSibling(nsIFrame *aFrame);
/**
+ * Get the last frame in the continuation-plus-ib-split-sibling chain
+ * containing aFrame.
+ */
+ static nsIFrame*
+ LastContinuationOrIBSplitSibling(nsIFrame *aFrame);
+
+ /**
* Is FirstContinuationOrIBSplitSibling(aFrame) going to return
* aFrame?
*/
static bool
IsFirstContinuationOrIBSplitSibling(nsIFrame *aFrame);
/**
* Check whether aFrame is a part of the scrollbar or scrollcorner of