LCOV - code coverage report
Current view: top level - layout/generic - nsBlockReflowContext.h (source / functions) Hit Total Coverage
Test: output.info Lines: 1 3 33.3 %
Date: 2017-07-14 16:53:18 Functions: 1 2 50.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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/. */
       6             : 
       7             : /* class that a parent frame uses to reflow a block frame */
       8             : 
       9             : #ifndef nsBlockReflowContext_h___
      10             : #define nsBlockReflowContext_h___
      11             : 
      12             : #include "nsIFrame.h"
      13             : #include "mozilla/ReflowOutput.h"
      14             : 
      15             : class nsLineBox;
      16             : class nsPresContext;
      17             : namespace mozilla {
      18             : class BlockReflowInput;
      19             : } // namespace mozilla
      20             : 
      21             : /**
      22             :  * An encapsulation of the state and algorithm for reflowing block frames.
      23             :  */
      24             : class nsBlockReflowContext {
      25             :   using BlockReflowInput = mozilla::BlockReflowInput;
      26             :   using ReflowInput = mozilla::ReflowInput;
      27             :   using ReflowOutput = mozilla::ReflowOutput;
      28             : 
      29             : public:
      30             :   nsBlockReflowContext(nsPresContext* aPresContext,
      31             :                        const ReflowInput& aParentRS);
      32          10 :   ~nsBlockReflowContext() { }
      33             : 
      34             :   void ReflowBlock(const mozilla::LogicalRect& aSpace,
      35             :                    bool                        aApplyBStartMargin,
      36             :                    nsCollapsingMargin&         aPrevMargin,
      37             :                    nscoord                     aClearance,
      38             :                    bool                        aIsAdjacentWithBStart,
      39             :                    nsLineBox*                  aLine,
      40             :                    ReflowInput&          aReflowInput,
      41             :                    nsReflowStatus&             aReflowStatus,
      42             :                    BlockReflowInput&         aState);
      43             : 
      44             :   bool PlaceBlock(const ReflowInput& aReflowInput,
      45             :                   bool                     aForceFit,
      46             :                   nsLineBox*               aLine,
      47             :                   nsCollapsingMargin&      aBEndMarginResult /* out */,
      48             :                   nsOverflowAreas&         aOverflowAreas,
      49             :                   nsReflowStatus           aReflowStatus);
      50             : 
      51             :   nsCollapsingMargin& GetCarriedOutBEndMargin() {
      52             :     return mMetrics.mCarriedOutBEndMargin;
      53             :   }
      54             : 
      55           0 :   const ReflowOutput& GetMetrics() const {
      56           0 :     return mMetrics;
      57             :   }
      58             : 
      59             :   /**
      60             :    * Computes the collapsed block-start margin (in the context's parent's
      61             :    * writing mode) for a block whose reflow state is in aRI.
      62             :    * The computed margin is added into aMargin, whose writing mode is the
      63             :    * parent's mode as found in mMetrics.GetWritingMode(); note this may not be
      64             :    * the block's own writing mode as found in aRI.
      65             :    * If aClearanceFrame is null then this is the first optimistic pass which
      66             :    * shall assume that no frames have clearance, and we clear the HasClearance
      67             :    * on all frames encountered.
      68             :    * If non-null, this is the second pass and the caller has decided
      69             :    * aClearanceFrame needs clearance (and we will therefore stop collapsing
      70             :    * there); also, this function is responsible for marking it with
      71             :    * SetHasClearance.
      72             :    * If in the optimistic pass any frame is encountered that might possibly
      73             :    * need clearance (i.e., if we really needed the optimism assumption) then
      74             :    * we set aMayNeedRetry to true.
      75             :    * We return true if we changed the clearance state of any line and marked it
      76             :    * dirty.
      77             :    */
      78             :   bool ComputeCollapsedBStartMargin(const ReflowInput& aRI,
      79             :                                     nsCollapsingMargin* aMargin,
      80             :                                     nsIFrame* aClearanceFrame,
      81             :                                     bool* aMayNeedRetry,
      82             :                                     bool* aIsEmpty = nullptr);
      83             : 
      84             : protected:
      85             :   nsPresContext* mPresContext;
      86             :   const ReflowInput& mOuterReflowInput;
      87             : 
      88             :   nsIFrame* mFrame;
      89             :   mozilla::LogicalRect mSpace;
      90             : 
      91             :   nscoord mICoord, mBCoord;
      92             :   nsSize mContainerSize;
      93             :   mozilla::WritingMode mWritingMode;
      94             :   ReflowOutput mMetrics;
      95             :   nsCollapsingMargin mBStartMargin;
      96             : };
      97             : 
      98             : #endif /* nsBlockReflowContext_h___ */

Generated by: LCOV version 1.13