};
class RenderTextFragment;
+class BackgroundImageGeometry;
// This class is the base for all objects that adhere to the CSS box model as described
// at http://www.w3.org/TR/CSS21/box.html
virtual void childBecameNonInline(RenderObject* /*child*/) { }
- void paintBorder(const PaintInfo&, const LayoutRect&, const RenderStyle*, BackgroundBleedAvoidance = BackgroundBleedNone, bool includeLogicalLeftEdge = true, bool includeLogicalRightEdge = true);
- bool paintNinePieceImage(GraphicsContext*, const LayoutRect&, const RenderStyle*, const NinePieceImage&, CompositeOperator = CompositeSourceOver);
- void paintBoxShadow(const PaintInfo&, const LayoutRect&, const RenderStyle*, ShadowStyle, bool includeLogicalLeftEdge = true, bool includeLogicalRightEdge = true);
- void paintFillLayerExtended(const PaintInfo&, const Color&, const FillLayer&, const LayoutRect&, BackgroundBleedAvoidance, InlineFlowBox* = 0, const LayoutSize& = LayoutSize(), CompositeOperator = CompositeSourceOver, RenderObject* backgroundObject = 0);
-
virtual bool boxShadowShouldBeAppliedToBackground(BackgroundBleedAvoidance, InlineFlowBox* = 0) const;
// Overridden by subclasses to determine line height and baseline position.
protected:
virtual void willBeDestroyed() OVERRIDE;
- class BackgroundImageGeometry {
- public:
- BackgroundImageGeometry()
- : m_hasNonLocalGeometry(false)
- { }
-
- IntPoint destOrigin() const { return m_destOrigin; }
- void setDestOrigin(const IntPoint& destOrigin)
- {
- m_destOrigin = destOrigin;
- }
-
- IntRect destRect() const { return m_destRect; }
- void setDestRect(const IntRect& destRect)
- {
- m_destRect = destRect;
- }
-
- // Returns the phase relative to the destination rectangle.
- IntPoint relativePhase() const;
-
- IntPoint phase() const { return m_phase; }
- void setPhase(const IntPoint& phase)
- {
- m_phase = phase;
- }
-
- IntSize tileSize() const { return m_tileSize; }
- void setTileSize(const IntSize& tileSize)
- {
- m_tileSize = tileSize;
- }
-
- // Space-size represents extra width and height that may be added to
- // the image if used as a pattern with repeat: space
- IntSize spaceSize() const { return m_repeatSpacing; }
- void setSpaceSize(const IntSize& repeatSpacing)
- {
- m_repeatSpacing = repeatSpacing;
- }
-
- void setPhaseX(int x) { m_phase.setX(x); }
- void setPhaseY(int y) { m_phase.setY(y); }
-
- void setNoRepeatX(int xOffset);
- void setNoRepeatY(int yOffset);
-
- void useFixedAttachment(const IntPoint& attachmentPoint);
-
- void clip(const IntRect&);
-
- void setHasNonLocalGeometry(bool hasNonLocalGeometry = true) { m_hasNonLocalGeometry = hasNonLocalGeometry; }
- bool hasNonLocalGeometry() const { return m_hasNonLocalGeometry; }
-
- private:
- IntRect m_destRect;
- IntPoint m_destOrigin;
- IntPoint m_phase;
- IntSize m_tileSize;
- IntSize m_repeatSpacing;
- bool m_hasNonLocalGeometry; // Has background-attachment: fixed. Implies that we can't always cheaply compute destRect.
- };
-
LayoutPoint adjustedPositionRelativeToOffsetParent(const LayoutPoint&) const;
bool calculateHasBoxDecorations() const;
- void calculateBackgroundImageGeometry(const RenderLayerModelObject* paintContainer, const FillLayer&, const LayoutRect& paintRect, BackgroundImageGeometry&, RenderObject* = 0) const;
- void getBorderEdgeInfo(class BorderEdge[], const RenderStyle*, bool includeLogicalLeftEdge = true, bool includeLogicalRightEdge = true) const;
- bool borderObscuresBackgroundEdge(const FloatSize& contextScale) const;
- bool borderObscuresBackground() const;
- RoundedRect backgroundRoundedRectAdjustedForBleedAvoidance(GraphicsContext*, const LayoutRect&, BackgroundBleedAvoidance, InlineFlowBox*, const LayoutSize&, bool includeLogicalLeftEdge, bool includeLogicalRightEdge) const;
- LayoutRect borderInnerRectAdjustedForBleedAvoidance(GraphicsContext*, const LayoutRect&, BackgroundBleedAvoidance) const;
-
- InterpolationQuality chooseInterpolationQuality(GraphicsContext*, Image*, const void*, const LayoutSize&);
RenderBoxModelObject* continuation() const;
void setContinuation(RenderBoxModelObject*);
LayoutRect localCaretRectForEmptyElement(LayoutUnit width, LayoutUnit textIndentOffset);
- static void clipRoundedInnerRect(GraphicsContext*, const LayoutRect&, const RoundedRect& clipRect);
-
bool hasAutoHeightOrContainingBlockWithAutoHeight() const;
public:
- static bool shouldAntialiasLines(GraphicsContext*);
// For RenderBlocks and RenderInlines with m_style->styleType() == FIRST_LETTER, this tracks their remaining text fragments
RenderTextFragment* firstLetterRemainingText() const;
private:
LayoutUnit computedCSSPadding(const Length&) const;
virtual bool isBoxModelObject() const OVERRIDE FINAL { return true; }
-
- IntSize calculateFillTileSize(const FillLayer&, const IntSize& scaledPositioningAreaSize) const;
-
- RoundedRect getBackgroundRoundedRect(const LayoutRect&, InlineFlowBox*, LayoutUnit inlineBoxWidth, LayoutUnit inlineBoxHeight,
- bool includeLogicalLeftEdge, bool includeLogicalRightEdge) const;
-
- bool fixedBackgroundPaintsInLocalCoordinates() const;
-
- void clipBorderSidePolygon(GraphicsContext*, const RoundedRect& outerBorder, const RoundedRect& innerBorder,
- BoxSide, bool firstEdgeMatches, bool secondEdgeMatches);
- void clipBorderSideForComplexInnerPath(GraphicsContext*, const RoundedRect&, const RoundedRect&, BoxSide, const class BorderEdge[]);
- void paintOneBorderSide(GraphicsContext*, const RenderStyle*, const RoundedRect& outerBorder, const RoundedRect& innerBorder,
- const IntRect& sideRect, BoxSide, BoxSide adjacentSide1, BoxSide adjacentSide2, const class BorderEdge[],
- const Path*, BackgroundBleedAvoidance, bool includeLogicalLeftEdge, bool includeLogicalRightEdge, bool antialias, const Color* overrideColor = 0);
- void paintTranslucentBorderSides(GraphicsContext*, const RenderStyle*, const RoundedRect& outerBorder, const RoundedRect& innerBorder, const IntPoint& innerBorderAdjustment,
- const class BorderEdge[], BorderEdgeFlags, BackgroundBleedAvoidance, bool includeLogicalLeftEdge, bool includeLogicalRightEdge, bool antialias = false);
- void paintBorderSides(GraphicsContext*, const RenderStyle*, const RoundedRect& outerBorder, const RoundedRect& innerBorder,
- const IntPoint& innerBorderAdjustment, const class BorderEdge[], BorderEdgeFlags, BackgroundBleedAvoidance,
- bool includeLogicalLeftEdge, bool includeLogicalRightEdge, bool antialias = false, const Color* overrideColor = 0);
- void drawBoxSideFromPath(GraphicsContext*, const LayoutRect&, const Path&, const class BorderEdge[],
- float thickness, float drawThickness, BoxSide, const RenderStyle*,
- Color, EBorderStyle, BackgroundBleedAvoidance, bool includeLogicalLeftEdge, bool includeLogicalRightEdge);
};
DEFINE_RENDER_OBJECT_TYPE_CASTS(RenderBoxModelObject, isBoxModelObject());