layout/generic/nsBlockReflowContext.h

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 // vim:cindent:ts=2:et:sw=2:
     3 /* This Source Code Form is subject to the terms of the Mozilla Public
     4  * License, v. 2.0. If a copy of the MPL was not distributed with this
     5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     7 /* class that a parent frame uses to reflow a block frame */
     9 #ifndef nsBlockReflowContext_h___
    10 #define nsBlockReflowContext_h___
    12 #include "nsIFrame.h"
    13 #include "nsHTMLReflowMetrics.h"
    15 class nsBlockReflowState;
    16 struct nsHTMLReflowState;
    17 class nsLineBox;
    18 class nsPresContext;
    19 class nsLineLayout;
    20 struct nsBlockHorizontalAlign;
    22 /**
    23  * An encapsulation of the state and algorithm for reflowing block frames.
    24  */
    25 class nsBlockReflowContext {
    26 public:
    27   nsBlockReflowContext(nsPresContext* aPresContext,
    28                        const nsHTMLReflowState& aParentRS);
    29   ~nsBlockReflowContext() { }
    31   nsresult ReflowBlock(const nsRect&       aSpace,
    32                        bool                aApplyTopMargin,
    33                        nsCollapsingMargin& aPrevMargin,
    34                        nscoord             aClearance,
    35                        bool                aIsAdjacentWithTop,
    36                        nsLineBox*          aLine,
    37                        nsHTMLReflowState&  aReflowState,
    38                        nsReflowStatus&     aReflowStatus,
    39                        nsBlockReflowState& aState);
    41   bool PlaceBlock(const nsHTMLReflowState& aReflowState,
    42                   bool                     aForceFit,
    43                   nsLineBox*               aLine,
    44                   nsCollapsingMargin&      aBottomMarginResult /* out */,
    45                   nsOverflowAreas&         aOverflowAreas,
    46                   nsReflowStatus           aReflowStatus,
    47                   nscoord                  aContainerWidth);
    49   nsCollapsingMargin& GetCarriedOutBottomMargin() {
    50     return mMetrics.mCarriedOutBottomMargin;
    51   }
    53   nscoord GetTopMargin() const {
    54     return mTopMargin.get();
    55   }
    57   const nsHTMLReflowMetrics& GetMetrics() const {
    58     return mMetrics;
    59   }
    61   /**
    62    * Computes the collapsed top margin for a block whose reflow state is in aRS.
    63    * The computed margin is added into aMargin.
    64    * If aClearanceFrame is null then this is the first optimistic pass which shall assume
    65    * that no frames have clearance, and we clear the HasClearance on all frames encountered.
    66    * If non-null, this is the second pass and
    67    * the caller has decided aClearanceFrame needs clearance (and we will
    68    * therefore stop collapsing there); also, this function is responsible for marking
    69    * it with SetHasClearance.
    70    * If in the optimistic pass any frame is encountered that might possibly need
    71    * clearance (i.e., if we really needed the optimism assumption) then we set aMayNeedRetry
    72    * to true.
    73    * We return true if we changed the clearance state of any line and marked it dirty.
    74    */
    75   static bool ComputeCollapsedTopMargin(const nsHTMLReflowState& aRS,
    76                                           nsCollapsingMargin* aMargin, nsIFrame* aClearanceFrame,
    77                                           bool* aMayNeedRetry, bool* aIsEmpty = nullptr);
    79 protected:
    80   nsPresContext* mPresContext;
    81   const nsHTMLReflowState& mOuterReflowState;
    83   nsIFrame* mFrame;
    84   nsRect mSpace;
    86   nscoord mX, mY;
    87   nsHTMLReflowMetrics mMetrics;
    88   nsCollapsingMargin mTopMargin;
    89 };
    91 #endif /* nsBlockReflowContext_h___ */

mercurial