From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- layout/generic/ViewportFrame.h | 118 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 layout/generic/ViewportFrame.h (limited to 'layout/generic/ViewportFrame.h') diff --git a/layout/generic/ViewportFrame.h b/layout/generic/ViewportFrame.h new file mode 100644 index 0000000000..f369e4de7a --- /dev/null +++ b/layout/generic/ViewportFrame.h @@ -0,0 +1,118 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * rendering object that is the root of the frame tree, which contains + * the document's scrollbars and contains fixed-positioned elements + */ + +#ifndef mozilla_ViewportFrame_h +#define mozilla_ViewportFrame_h + +#include "mozilla/Attributes.h" +#include "nsContainerFrame.h" + +class nsPresContext; + +namespace mozilla { + +class nsDisplayWrapList; +class ServoRestyleState; + +/** + * ViewportFrame is the parent of a single child - the doc root frame or a + * scroll frame containing the doc root frame. ViewportFrame stores this child + * in its primary child list. + */ +class ViewportFrame : public nsContainerFrame { + public: + NS_DECL_QUERYFRAME + NS_DECL_FRAMEARENA_HELPERS(ViewportFrame) + + explicit ViewportFrame(ComputedStyle* aStyle, nsPresContext* aPresContext) + : ViewportFrame(aStyle, aPresContext, kClassID) {} + + virtual ~ViewportFrame() = default; // useful for debugging + + void Init(nsIContent* aContent, nsContainerFrame* aParent, + nsIFrame* aPrevInFlow) override; + +#ifdef DEBUG + void AppendFrames(ChildListID aListID, nsFrameList&& aFrameList) override; + void InsertFrames(ChildListID aListID, nsIFrame* aPrevFrame, + const nsLineList::iterator* aPrevFrameLine, + nsFrameList&& aFrameList) override; + void RemoveFrame(DestroyContext&, ChildListID, nsIFrame*) override; +#endif + + void BuildDisplayList(nsDisplayListBuilder* aBuilder, + const nsDisplayListSet& aLists) override; + + nsDisplayWrapList* BuildDisplayListForTopLayer(nsDisplayListBuilder* aBuilder, + bool* aIsOpaque = nullptr); + + nscoord GetMinISize(gfxContext* aRenderingContext) override; + nscoord GetPrefISize(gfxContext* aRenderingContext) override; + void Reflow(nsPresContext* aPresContext, ReflowOutput& aDesiredSize, + const ReflowInput& aReflowInput, + nsReflowStatus& aStatus) override; + + bool ComputeCustomOverflow(mozilla::OverflowAreas&) override { return false; } + + /** + * Adjust aReflowInput to account for scrollbars and pres shell + * GetVisualViewportSizeSet and + * GetContentDocumentFixedPositionMargins adjustments. + * @return the rect to use as containing block rect + */ + nsRect AdjustReflowInputAsContainingBlock(ReflowInput* aReflowInput) const; + + /** + * Update our style (and recursively the styles of any anonymous boxes we + * might own) + */ + void UpdateStyle(ServoRestyleState& aStyleSet); + + /** + * Return our single anonymous box child. + */ + void AppendDirectlyOwnedAnonBoxes(nsTArray& aResult) override; + + // Returns adjusted viewport size to reflect the positions that position:fixed + // elements are attached. + nsSize AdjustViewportSizeForFixedPosition(const nsRect& aViewportRect) const; + +#ifdef DEBUG_FRAME_DUMP + virtual nsresult GetFrameName(nsAString& aResult) const override; +#endif + + protected: + ViewportFrame(ComputedStyle* aStyle, nsPresContext* aPresContext, ClassID aID) + : nsContainerFrame(aStyle, aPresContext, aID), mView(nullptr) {} + + /** + * Calculate how much room is available for fixed frames. That means + * determining if the viewport is scrollable and whether the vertical and/or + * horizontal scrollbars are visible. Adjust the computed isize/bsize and + * available isize for aReflowInput accordingly. + * @return the current scroll position, or (0,0) if not scrollable. + */ + nsPoint AdjustReflowInputForScrollbars(ReflowInput* aReflowInput) const; + + nsView* GetViewInternal() const override { return mView; } + void SetViewInternal(nsView* aView) override { mView = aView; } + + private: + mozilla::FrameChildListID GetAbsoluteListID() const override { + return FrameChildListID::Fixed; + } + + nsView* mView; +}; + +} // namespace mozilla + +#endif // mozilla_ViewportFrame_h -- cgit v1.2.3