mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 14:45:29 +00:00
d77152fcd0
This patch is generated by the following script: function rename() { find layout\ -type f\ ! -path "./obj*"\ ! -path "./.git"\ ! -path "./.hg"\ \( -name "*.cpp" -or\ -name "*.h" \)\ -exec sed -i -r "s/$1/$2/g" "{}" \; } rename aChildRS aChildRI rename aContainingBlockRS aContainingBlockRI rename aFrameRS aFrameRI rename aLastRS aLastRI rename aOuterRS aOuterRI rename aRS aRI rename blockHtmlRS blockHtmlRI rename captionRS captionRI rename cellRS cellRI rename childRS childRI rename firstAncestorRS firstAncestorRI rename flexContainerRS flexContainerRI rename gridRS gridRI rename innerRS innerRI rename lastButOneRS lastButOneRI rename LineContainerRS LineContainerRI rename mBlockRS mBlockRI rename parentRS parentRI rename secondAncestorRS secondAncestorRI rename lastRSSize lastRISize rename lastRSPadding lastRIPadding MozReview-Commit-ID: YEgZs3WMow --HG-- extra : rebase_source : c26050c71a3a5b13ef46e6d3582e581702d49ee8
99 lines
3.7 KiB
C++
99 lines
3.7 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
// vim:cindent:ts=2:et:sw=2:
|
|
/* 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/. */
|
|
|
|
/* class that a parent frame uses to reflow a block frame */
|
|
|
|
#ifndef nsBlockReflowContext_h___
|
|
#define nsBlockReflowContext_h___
|
|
|
|
#include "nsIFrame.h"
|
|
#include "mozilla/ReflowOutput.h"
|
|
|
|
class nsLineBox;
|
|
class nsPresContext;
|
|
namespace mozilla {
|
|
class BlockReflowInput;
|
|
} // namespace mozilla
|
|
|
|
/**
|
|
* An encapsulation of the state and algorithm for reflowing block frames.
|
|
*/
|
|
class nsBlockReflowContext {
|
|
using BlockReflowInput = mozilla::BlockReflowInput;
|
|
using ReflowInput = mozilla::ReflowInput;
|
|
using ReflowOutput = mozilla::ReflowOutput;
|
|
|
|
public:
|
|
nsBlockReflowContext(nsPresContext* aPresContext,
|
|
const ReflowInput& aParentRS);
|
|
~nsBlockReflowContext() { }
|
|
|
|
void ReflowBlock(const mozilla::LogicalRect& aSpace,
|
|
bool aApplyBStartMargin,
|
|
nsCollapsingMargin& aPrevMargin,
|
|
nscoord aClearance,
|
|
bool aIsAdjacentWithBStart,
|
|
nsLineBox* aLine,
|
|
ReflowInput& aReflowInput,
|
|
nsReflowStatus& aReflowStatus,
|
|
BlockReflowInput& aState);
|
|
|
|
bool PlaceBlock(const ReflowInput& aReflowInput,
|
|
bool aForceFit,
|
|
nsLineBox* aLine,
|
|
nsCollapsingMargin& aBEndMarginResult /* out */,
|
|
nsOverflowAreas& aOverflowAreas,
|
|
nsReflowStatus aReflowStatus);
|
|
|
|
nsCollapsingMargin& GetCarriedOutBEndMargin() {
|
|
return mMetrics.mCarriedOutBEndMargin;
|
|
}
|
|
|
|
const ReflowOutput& GetMetrics() const {
|
|
return mMetrics;
|
|
}
|
|
|
|
/**
|
|
* Computes the collapsed block-start margin (in the context's parent's
|
|
* writing mode) for a block whose reflow state is in aRI.
|
|
* The computed margin is added into aMargin, whose writing mode is the
|
|
* parent's mode as found in mMetrics.GetWritingMode(); note this may not be
|
|
* the block's own writing mode as found in aRI.
|
|
* If aClearanceFrame is null then this is the first optimistic pass which
|
|
* shall assume that no frames have clearance, and we clear the HasClearance
|
|
* on all frames encountered.
|
|
* If non-null, this is the second pass and the caller has decided
|
|
* aClearanceFrame needs clearance (and we will therefore stop collapsing
|
|
* there); also, this function is responsible for marking it with
|
|
* SetHasClearance.
|
|
* If in the optimistic pass any frame is encountered that might possibly
|
|
* need clearance (i.e., if we really needed the optimism assumption) then
|
|
* we set aMayNeedRetry to true.
|
|
* We return true if we changed the clearance state of any line and marked it
|
|
* dirty.
|
|
*/
|
|
bool ComputeCollapsedBStartMargin(const ReflowInput& aRI,
|
|
nsCollapsingMargin* aMargin,
|
|
nsIFrame* aClearanceFrame,
|
|
bool* aMayNeedRetry,
|
|
bool* aIsEmpty = nullptr);
|
|
|
|
protected:
|
|
nsPresContext* mPresContext;
|
|
const ReflowInput& mOuterReflowInput;
|
|
|
|
nsIFrame* mFrame;
|
|
mozilla::LogicalRect mSpace;
|
|
|
|
nscoord mICoord, mBCoord;
|
|
nsSize mContainerSize;
|
|
mozilla::WritingMode mWritingMode;
|
|
ReflowOutput mMetrics;
|
|
nsCollapsingMargin mBStartMargin;
|
|
};
|
|
|
|
#endif /* nsBlockReflowContext_h___ */
|