mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-12 21:05:36 +00:00
Bug 755971 - Add methods to nsLayoutUtils to calculate the padding boxes. r=bz
This commit is contained in:
parent
761fd3103f
commit
9568f79303
@ -1926,21 +1926,25 @@ nsLayoutUtils::GetAllInFlowBoxes(nsIFrame* aFrame, BoxCallback* aCallback)
|
||||
}
|
||||
}
|
||||
|
||||
struct BoxToBorderRect : public nsLayoutUtils::BoxCallback {
|
||||
struct BoxToRect : public nsLayoutUtils::BoxCallback {
|
||||
typedef nsSize (*GetRectFromFrameFun)(nsIFrame*);
|
||||
|
||||
nsIFrame* mRelativeTo;
|
||||
nsLayoutUtils::RectCallback* mCallback;
|
||||
PRUint32 mFlags;
|
||||
GetRectFromFrameFun mRectFromFrame;
|
||||
|
||||
BoxToBorderRect(nsIFrame* aRelativeTo, nsLayoutUtils::RectCallback* aCallback,
|
||||
PRUint32 aFlags)
|
||||
: mRelativeTo(aRelativeTo), mCallback(aCallback), mFlags(aFlags) {}
|
||||
BoxToRect(nsIFrame* aRelativeTo, nsLayoutUtils::RectCallback* aCallback,
|
||||
PRUint32 aFlags, GetRectFromFrameFun aRectFromFrame)
|
||||
: mRelativeTo(aRelativeTo), mCallback(aCallback), mFlags(aFlags),
|
||||
mRectFromFrame(aRectFromFrame) {}
|
||||
|
||||
virtual void AddBox(nsIFrame* aFrame) {
|
||||
nsRect r;
|
||||
nsIFrame* outer = nsSVGUtils::GetOuterSVGFrameAndCoveredRegion(aFrame, &r);
|
||||
if (!outer) {
|
||||
outer = aFrame;
|
||||
r = nsRect(nsPoint(0, 0), aFrame->GetSize());
|
||||
r = nsRect(nsPoint(0, 0), mRectFromFrame(aFrame));
|
||||
}
|
||||
if (mFlags & nsLayoutUtils::RECTS_ACCOUNT_FOR_TRANSFORMS) {
|
||||
r = nsLayoutUtils::TransformFrameRectToAncestor(outer, r, mRelativeTo);
|
||||
@ -1951,11 +1955,31 @@ struct BoxToBorderRect : public nsLayoutUtils::BoxCallback {
|
||||
}
|
||||
};
|
||||
|
||||
static nsSize
|
||||
GetFrameBorderSize(nsIFrame* aFrame)
|
||||
{
|
||||
return aFrame->GetSize();
|
||||
}
|
||||
|
||||
void
|
||||
nsLayoutUtils::GetAllInFlowRects(nsIFrame* aFrame, nsIFrame* aRelativeTo,
|
||||
RectCallback* aCallback, PRUint32 aFlags)
|
||||
{
|
||||
BoxToBorderRect converter(aRelativeTo, aCallback, aFlags);
|
||||
BoxToRect converter(aRelativeTo, aCallback, aFlags, &GetFrameBorderSize);
|
||||
GetAllInFlowBoxes(aFrame, &converter);
|
||||
}
|
||||
|
||||
static nsSize
|
||||
GetFramePaddingSize(nsIFrame* aFrame)
|
||||
{
|
||||
return aFrame->GetPaddingRect().Size();
|
||||
}
|
||||
|
||||
void
|
||||
nsLayoutUtils::GetAllInFlowPaddingRects(nsIFrame* aFrame, nsIFrame* aRelativeTo,
|
||||
RectCallback* aCallback, PRUint32 aFlags)
|
||||
{
|
||||
BoxToRect converter(aRelativeTo, aCallback, aFlags, &GetFramePaddingSize);
|
||||
GetAllInFlowBoxes(aFrame, &converter);
|
||||
}
|
||||
|
||||
@ -1993,6 +2017,17 @@ nsLayoutUtils::GetAllInFlowRectsUnion(nsIFrame* aFrame, nsIFrame* aRelativeTo,
|
||||
: accumulator.mResultRect;
|
||||
}
|
||||
|
||||
nsRect
|
||||
nsLayoutUtils::GetAllInFlowPaddingRectsUnion(nsIFrame* aFrame,
|
||||
nsIFrame* aRelativeTo,
|
||||
PRUint32 aFlags)
|
||||
{
|
||||
RectAccumulator accumulator;
|
||||
GetAllInFlowPaddingRects(aFrame, aRelativeTo, &accumulator, aFlags);
|
||||
return accumulator.mResultRect.IsEmpty() ? accumulator.mFirstRect
|
||||
: accumulator.mResultRect;
|
||||
}
|
||||
|
||||
nsRect
|
||||
nsLayoutUtils::GetTextShadowRectsUnion(const nsRect& aTextAndDecorationsRect,
|
||||
nsIFrame* aFrame,
|
||||
|
@ -729,6 +729,13 @@ public:
|
||||
*/
|
||||
static void GetAllInFlowRects(nsIFrame* aFrame, nsIFrame* aRelativeTo,
|
||||
RectCallback* aCallback, PRUint32 aFlags = 0);
|
||||
/**
|
||||
* The same as GetAllInFlowRects, but it collects the CSS padding-boxes
|
||||
* rather than the CSS border-boxes. SVG frames are handled the same way
|
||||
* as in GetAllInFlowRects.
|
||||
*/
|
||||
static void GetAllInFlowPaddingRects(nsIFrame* aFrame, nsIFrame* aRelativeTo,
|
||||
RectCallback* aCallback, PRUint32 aFlags = 0);
|
||||
|
||||
/**
|
||||
* Computes the union of all rects returned by GetAllInFlowRects. If
|
||||
@ -740,6 +747,14 @@ public:
|
||||
static nsRect GetAllInFlowRectsUnion(nsIFrame* aFrame, nsIFrame* aRelativeTo,
|
||||
PRUint32 aFlags = 0);
|
||||
|
||||
/**
|
||||
* The same as GetAllInFlowRectsUnion, but it computes the union of the
|
||||
* rects returned by GetAllInFlowPaddingRects.
|
||||
*/
|
||||
static nsRect GetAllInFlowPaddingRectsUnion(nsIFrame* aFrame,
|
||||
nsIFrame* aRelativeTo,
|
||||
PRUint32 aFlags = 0);
|
||||
|
||||
enum {
|
||||
EXCLUDE_BLUR_SHADOWS = 0x01
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user