From 2d0231a9be0433f103a12dcb967d87c64f32c47e Mon Sep 17 00:00:00 2001 From: Neerja Pancholi Date: Mon, 30 Jan 2017 13:22:45 -0800 Subject: [PATCH] Bug 1166147 - Part3: Override GetWritingMode() and make it more robustly defer to root element, to avoid truncating printed vertical-WM docs. r=dholbert MozReview-Commit-ID: IYM3gzf1CpS --HG-- extra : rebase_source : fa8afc85a6f3139c3c8f296ed3a469a87020a746 --- layout/generic/nsCanvasFrame.h | 11 ++--------- layout/generic/nsFrame.cpp | 13 +++++++++++++ layout/generic/nsFrame.h | 2 ++ layout/generic/nsPageContentFrame.cpp | 2 +- layout/generic/nsPageContentFrame.h | 7 ++++++- layout/generic/nsPageFrame.h | 7 ++++++- layout/generic/nsSimplePageSequenceFrame.h | 5 +++++ 7 files changed, 35 insertions(+), 12 deletions(-) diff --git a/layout/generic/nsCanvasFrame.h b/layout/generic/nsCanvasFrame.h index 3443c03d2747..e75568bc8d5d 100644 --- a/layout/generic/nsCanvasFrame.h +++ b/layout/generic/nsCanvasFrame.h @@ -44,16 +44,9 @@ public: virtual void DestroyFrom(nsIFrame* aDestructRoot) override; - virtual mozilla::WritingMode GetWritingMode() const override + mozilla::WritingMode GetWritingMode() const override { - nsIContent* rootElem = GetContent(); - if (rootElem) { - nsIFrame* rootElemFrame = rootElem->GetPrimaryFrame(); - if (rootElemFrame) { - return rootElemFrame->GetWritingMode(); - } - } - return nsIFrame::GetWritingMode(); + return nsFrame::GetWritingModeDeferringToRootElem(); } #ifdef DEBUG diff --git a/layout/generic/nsFrame.cpp b/layout/generic/nsFrame.cpp index d2f21a40f617..1ee345345a54 100644 --- a/layout/generic/nsFrame.cpp +++ b/layout/generic/nsFrame.cpp @@ -3020,6 +3020,19 @@ nsFrame::FireDOMEvent(const nsAString& aDOMEventName, nsIContent *aContent) } } +WritingMode +nsFrame::GetWritingModeDeferringToRootElem() const +{ + Element* rootElem = PresContext()->Document()->GetRootElement(); + if (rootElem) { + nsIFrame* primaryFrame = rootElem->GetPrimaryFrame(); + if (primaryFrame) { + return primaryFrame->GetWritingMode(); + } + } + return nsIFrame::GetWritingMode(); +} + nsresult nsFrame::HandleEvent(nsPresContext* aPresContext, WidgetGUIEvent* aEvent, diff --git a/layout/generic/nsFrame.h b/layout/generic/nsFrame.h index 80fff2066262..ad4f2ac524ee 100644 --- a/layout/generic/nsFrame.h +++ b/layout/generic/nsFrame.h @@ -688,6 +688,8 @@ protected: // Fire DOM event. If no aContent argument use frame's mContent. void FireDOMEvent(const nsAString& aDOMEventName, nsIContent *aContent = nullptr); + mozilla::WritingMode GetWritingModeDeferringToRootElem() const; + private: void BoxReflow(nsBoxLayoutState& aState, nsPresContext* aPresContext, diff --git a/layout/generic/nsPageContentFrame.cpp b/layout/generic/nsPageContentFrame.cpp index 12cf4215db01..d272fba93a37 100644 --- a/layout/generic/nsPageContentFrame.cpp +++ b/layout/generic/nsPageContentFrame.cpp @@ -111,7 +111,7 @@ nsPageContentFrame::Reflow(nsPresContext* aPresContext, nsIAtom* nsPageContentFrame::GetType() const { - return nsGkAtoms::pageContentFrame; + return nsGkAtoms::pageContentFrame; } #ifdef DEBUG_FRAME_DUMP diff --git a/layout/generic/nsPageContentFrame.h b/layout/generic/nsPageContentFrame.h index 951ece32043a..fd58aaacfc68 100644 --- a/layout/generic/nsPageContentFrame.h +++ b/layout/generic/nsPageContentFrame.h @@ -43,7 +43,12 @@ public: * @see nsGkAtoms::pageContentFrame */ virtual nsIAtom* GetType() const override; - + + mozilla::WritingMode GetWritingMode() const override + { + return nsFrame::GetWritingModeDeferringToRootElem(); + } + #ifdef DEBUG_FRAME_DUMP // Debugging virtual nsresult GetFrameName(nsAString& aResult) const override; diff --git a/layout/generic/nsPageFrame.h b/layout/generic/nsPageFrame.h index aab2ac7b86ba..116a3cd66dc2 100644 --- a/layout/generic/nsPageFrame.h +++ b/layout/generic/nsPageFrame.h @@ -32,13 +32,18 @@ public: const nsRect& aDirtyRect, const nsDisplayListSet& aLists) override; + mozilla::WritingMode GetWritingMode() const override + { + return nsFrame::GetWritingModeDeferringToRootElem(); + } + /** * Get the "type" of the frame * * @see nsGkAtoms::pageFrame */ virtual nsIAtom* GetType() const override; - + #ifdef DEBUG_FRAME_DUMP virtual nsresult GetFrameName(nsAString& aResult) const override; #endif diff --git a/layout/generic/nsSimplePageSequenceFrame.h b/layout/generic/nsSimplePageSequenceFrame.h index 27012d2a4f4b..416dbed4c42f 100644 --- a/layout/generic/nsSimplePageSequenceFrame.h +++ b/layout/generic/nsSimplePageSequenceFrame.h @@ -60,6 +60,11 @@ public: NS_DECL_QUERYFRAME NS_DECL_FRAMEARENA_HELPERS + mozilla::WritingMode GetWritingMode() const override + { + return nsFrame::GetWritingModeDeferringToRootElem(); + } + // nsIFrame void Reflow(nsPresContext* aPresContext, ReflowOutput& aDesiredSize,