summaryrefslogtreecommitdiffstats
path: root/WebCore/rendering/RenderInline.h
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/rendering/RenderInline.h')
-rw-r--r--WebCore/rendering/RenderInline.h108
1 files changed, 95 insertions, 13 deletions
diff --git a/WebCore/rendering/RenderInline.h b/WebCore/rendering/RenderInline.h
index 83b8506..f3be72a 100644
--- a/WebCore/rendering/RenderInline.h
+++ b/WebCore/rendering/RenderInline.h
@@ -25,31 +25,39 @@
#ifndef RenderInline_h
#define RenderInline_h
-#include "RenderFlow.h"
+#include "RenderBoxModelObject.h"
+#include "RenderLineBoxList.h"
namespace WebCore {
class Position;
-class RenderInline : public RenderFlow {
+class RenderInline : public RenderBoxModelObject {
public:
RenderInline(Node*);
virtual ~RenderInline();
+ virtual RenderObjectChildList* virtualChildren() { return children(); }
+ virtual const RenderObjectChildList* virtualChildren() const { return children(); }
+ const RenderObjectChildList* children() const { return &m_children; }
+ RenderObjectChildList* children() { return &m_children; }
+
+ virtual void destroy();
+
virtual const char* renderName() const;
virtual bool isRenderInline() const { return true; }
- virtual bool childrenInline() const { return true; }
- virtual bool isInlineContinuation() const;
+ virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0);
+ void addChildToContinuation(RenderObject* newChild, RenderObject* beforeChild);
+ virtual void addChildIgnoringContinuation(RenderObject* newChild, RenderObject* beforeChild = 0);
- virtual void addChildToFlow(RenderObject* newChild, RenderObject* beforeChild);
void splitInlines(RenderBlock* fromBlock, RenderBlock* toBlock, RenderBlock* middleBlock,
- RenderObject* beforeChild, RenderFlow* oldCont);
+ RenderObject* beforeChild, RenderBoxModelObject* oldCont);
void splitFlow(RenderObject* beforeChild, RenderBlock* newBlockBox,
- RenderObject* newChild, RenderFlow* oldCont);
+ RenderObject* newChild, RenderBoxModelObject* oldCont);
- virtual void layout() { } // Do nothing for layout()
+ virtual void layout() { ASSERT_NOT_REACHED(); } // Do nothing for layout()
virtual void paint(PaintInfo&, int tx, int ty);
@@ -62,12 +70,20 @@ public:
virtual int offsetWidth() const { return linesBoundingBox().width(); }
virtual int offsetHeight() const { return linesBoundingBox().height(); }
- void absoluteRects(Vector<IntRect>&, int tx, int ty, bool topLevel = true);
+ // Just ignore top/bottom margins on RenderInlines.
+ virtual int marginTop() const { return 0; }
+ virtual int marginBottom() const { return 0; }
+ virtual int marginLeft() const;
+ virtual int marginRight() const;
+
+ virtual void absoluteRects(Vector<IntRect>&, int tx, int ty, bool topLevel = true);
virtual void absoluteQuads(Vector<FloatQuad>&, bool topLevel = true);
- virtual IntRect clippedOverflowRectForRepaint(RenderBox* repaintContainer);
+ virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer);
+ virtual IntRect rectWithOutlineForRepaint(RenderBoxModelObject* repaintContainer, int outlineWidth);
+ virtual void computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect& rect, bool fixed);
- virtual VisiblePosition positionForCoordinates(int x, int y);
+ virtual VisiblePosition positionForPoint(const IntPoint&);
IntRect linesBoundingBox() const;
@@ -77,13 +93,79 @@ public:
return IntRect(0, 0, boundingBox.width(), boundingBox.height());
}
+ InlineFlowBox* createInlineFlowBox();
+ void dirtyLineBoxes(bool fullLayout);
+ virtual void dirtyLinesFromChangedChild(RenderObject* child) { m_lineBoxes.dirtyLinesFromChangedChild(this, child); }
+
+ RenderLineBoxList* lineBoxes() { return &m_lineBoxes; }
+ const RenderLineBoxList* lineBoxes() const { return &m_lineBoxes; }
+
+ InlineFlowBox* firstLineBox() const { return m_lineBoxes.firstLineBox(); }
+ InlineFlowBox* lastLineBox() const { return m_lineBoxes.lastLineBox(); }
+
+ virtual int lineHeight(bool firstLine, bool isRootLineBox = false) const;
+
+ RenderBoxModelObject* continuation() const { return m_continuation; }
+ RenderInline* inlineContinuation() const;
+ void setContinuation(RenderBoxModelObject* c) { m_continuation = c; }
+
+ virtual void updateDragState(bool dragOn);
+
+ virtual void childBecameNonInline(RenderObject* child);
+
+ virtual void updateHitTestResult(HitTestResult&, const IntPoint&);
+
+ IntSize relativePositionedInlineOffset(const RenderBox* child) const;
+
+ virtual void addFocusRingRects(GraphicsContext*, int tx, int ty);
+ void paintOutline(GraphicsContext*, int tx, int ty);
+
+ virtual void imageChanged(WrappedImagePtr, const IntRect* = 0);
+
+ int verticalPositionFromCache(bool firstLine) const;
+ void invalidateVerticalPosition() { m_verticalPosition = PositionUndefined; }
+
+#if ENABLE(DASHBOARD_SUPPORT)
+ virtual void addDashboardRegions(Vector<DashboardRegionValue>&);
+#endif
+
protected:
- virtual void styleDidChange(RenderStyle::Diff, const RenderStyle* oldStyle);
+ virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
+ virtual void updateBoxModelInfoFromStyle();
+ virtual InlineFlowBox* createFlowBox(); // Subclassed by SVG
+
+ static RenderInline* cloneInline(RenderInline* src);
- static RenderInline* cloneInline(RenderFlow* src);
+private:
+ void paintOutlineForLine(GraphicsContext*, int tx, int ty, const IntRect& prevLine, const IntRect& thisLine, const IntRect& nextLine);
+ RenderBoxModelObject* continuationBefore(RenderObject* beforeChild);
+protected:
+ RenderObjectChildList m_children;
+ RenderLineBoxList m_lineBoxes; // All of the line boxes created for this inline flow. For example, <i>Hello<br>world.</i> will have two <i> line boxes.
+
+private:
+ RenderBoxModelObject* m_continuation; // Can be either a block or an inline. <b><i><p>Hello</p></i></b>. In this example the <i> will have a block as its continuation but the
+ // <b> will just have an inline as its continuation.
+ mutable int m_lineHeight;
+ mutable int m_verticalPosition;
};
+inline RenderInline* toRenderInline(RenderObject* o)
+{
+ ASSERT(!o || o->isRenderInline());
+ return static_cast<RenderInline*>(o);
+}
+
+inline const RenderInline* toRenderInline(const RenderObject* o)
+{
+ ASSERT(!o || o->isRenderInline());
+ return static_cast<const RenderInline*>(o);
+}
+
+// This will catch anyone doing an unnecessary cast.
+void toRenderInline(const RenderInline*);
+
} // namespace WebCore
#endif // RenderInline_h