/* -*- 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/. */ /* base class for rendering objects that do not have child lists */ #ifndef nsLeafFrame_h___ #define nsLeafFrame_h___ #include "mozilla/Attributes.h" #include "nsFrame.h" #include "nsDisplayList.h" /** * Abstract class that provides simple fixed-size layout for leaf objects * (e.g. images, form elements, etc.). Deriviations provide the implementation * of the GetDesiredSize method. The rendering method knows how to render * borders and backgrounds. */ class nsLeafFrame : public nsFrame { public: NS_DECL_ABSTRACT_FRAME(nsLeafFrame) // nsIFrame replacements virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsDisplayListSet& aLists) override { DO_GLOBAL_REFLOW_COUNT_DSP("nsLeafFrame"); DisplayBorderBackgroundOutline(aBuilder, aLists); } /** * Both GetMinISize and GetPrefISize will return whatever GetIntrinsicISize * returns. */ virtual nscoord GetMinISize(gfxContext *aRenderingContext) override; virtual nscoord GetPrefISize(gfxContext *aRenderingContext) override; /** * Our auto size is just intrinsic width and intrinsic height. */ virtual mozilla::LogicalSize ComputeAutoSize(gfxContext* aRenderingContext, mozilla::WritingMode aWM, const mozilla::LogicalSize& aCBSize, nscoord aAvailableISize, const mozilla::LogicalSize& aMargin, const mozilla::LogicalSize& aBorder, const mozilla::LogicalSize& aPadding, ComputeSizeFlags aFlags) override; /** * Each of our subclasses should provide its own Reflow impl: */ virtual void Reflow(nsPresContext* aPresContext, ReflowOutput& aDesiredSize, const ReflowInput& aReflowInput, nsReflowStatus& aStatus) override = 0; virtual bool IsFrameOfType(uint32_t aFlags) const override { // We don't actually contain a block, but we do always want a // computed width, so tell a little white lie here. return nsFrame::IsFrameOfType(aFlags & ~(nsIFrame::eReplacedContainsBlock)); } protected: nsLeafFrame(ComputedStyle* aStyle, ClassID aID) : nsFrame(aStyle, aID) {} virtual ~nsLeafFrame(); /** * Return the intrinsic isize of the frame's content area. Note that this * should not include borders or padding and should not depend on the applied * styles. */ virtual nscoord GetIntrinsicISize() = 0; /** * Return the intrinsic bsize of the frame's content area. This should not * include border or padding. This will only matter if the specified bsize * is auto. Note that subclasses must either implement this or override * Reflow and ComputeAutoSize; the default Reflow and ComputeAutoSize impls * call this method. */ virtual nscoord GetIntrinsicBSize(); /** * Set aDesiredSize to be the available size */ void SizeToAvailSize(const ReflowInput& aReflowInput, ReflowOutput& aDesiredSize); }; #endif /* nsLeafFrame_h___ */