| 1 |
|
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
|
|---|
| 7 |
|
|---|
| 8 |
|
|---|
| 9 |
|
|---|
| 10 |
|
|---|
| 11 |
|
|---|
| 12 |
|
|---|
| 13 |
|
|---|
| 14 |
|
|---|
| 15 |
|
|---|
| 16 |
|
|---|
| 17 |
|
|---|
| 18 |
|
|---|
| 19 |
|
|---|
| 20 |
|
|---|
| 21 |
|
|---|
| 22 |
|
|---|
| 23 |
|
|---|
| 24 |
|
|---|
| 25 |
#ifndef RenderObject_h |
|---|
| 26 |
#define RenderObject_h |
|---|
| 27 |
|
|---|
| 28 |
#include "CachedResourceClient.h" |
|---|
| 29 |
#include "Document.h" |
|---|
| 30 |
#include "RenderStyle.h" |
|---|
| 31 |
#include "ScrollTypes.h" |
|---|
| 32 |
#include "VisiblePosition.h" |
|---|
| 33 |
#include <wtf/HashMap.h> |
|---|
| 34 |
|
|---|
| 35 |
namespace WebCore { |
|---|
| 36 |
|
|---|
| 37 |
class AffineTransform; |
|---|
| 38 |
class AnimationController; |
|---|
| 39 |
class Color; |
|---|
| 40 |
class Document; |
|---|
| 41 |
class Element; |
|---|
| 42 |
class Event; |
|---|
| 43 |
class FloatRect; |
|---|
| 44 |
class FrameView; |
|---|
| 45 |
class HTMLAreaElement; |
|---|
| 46 |
class HitTestResult; |
|---|
| 47 |
class InlineBox; |
|---|
| 48 |
class InlineFlowBox; |
|---|
| 49 |
class PlatformScrollbar; |
|---|
| 50 |
class Position; |
|---|
| 51 |
class RenderArena; |
|---|
| 52 |
class RenderBlock; |
|---|
| 53 |
class RenderFlow; |
|---|
| 54 |
class RenderFrameSet; |
|---|
| 55 |
class RenderLayer; |
|---|
| 56 |
class RenderTable; |
|---|
| 57 |
class RenderText; |
|---|
| 58 |
class RenderView; |
|---|
| 59 |
class String; |
|---|
| 60 |
|
|---|
| 61 |
struct HitTestRequest; |
|---|
| 62 |
|
|---|
| 63 |
|
|---|
| 64 |
|
|---|
| 65 |
|
|---|
| 66 |
|
|---|
| 67 |
|
|---|
| 68 |
|
|---|
| 69 |
|
|---|
| 70 |
|
|---|
| 71 |
|
|---|
| 72 |
enum PaintPhase { |
|---|
| 73 |
PaintPhaseBlockBackground, |
|---|
| 74 |
PaintPhaseChildBlockBackground, |
|---|
| 75 |
PaintPhaseChildBlockBackgrounds, |
|---|
| 76 |
PaintPhaseFloat, |
|---|
| 77 |
PaintPhaseForeground, |
|---|
| 78 |
PaintPhaseOutline, |
|---|
| 79 |
PaintPhaseChildOutlines, |
|---|
| 80 |
PaintPhaseSelfOutline, |
|---|
| 81 |
PaintPhaseSelection, |
|---|
| 82 |
PaintPhaseCollapsedTableBorders, |
|---|
| 83 |
PaintPhaseTextClip, |
|---|
| 84 |
PaintPhaseMask |
|---|
| 85 |
}; |
|---|
| 86 |
|
|---|
| 87 |
enum PaintRestriction { |
|---|
| 88 |
PaintRestrictionNone, |
|---|
| 89 |
PaintRestrictionSelectionOnly, |
|---|
| 90 |
PaintRestrictionSelectionOnlyBlackText |
|---|
| 91 |
}; |
|---|
| 92 |
|
|---|
| 93 |
enum HitTestFilter { |
|---|
| 94 |
HitTestAll, |
|---|
| 95 |
HitTestSelf, |
|---|
| 96 |
HitTestDescendants |
|---|
| 97 |
}; |
|---|
| 98 |
|
|---|
| 99 |
enum HitTestAction { |
|---|
| 100 |
HitTestBlockBackground, |
|---|
| 101 |
HitTestChildBlockBackground, |
|---|
| 102 |
HitTestChildBlockBackgrounds, |
|---|
| 103 |
HitTestFloat, |
|---|
| 104 |
HitTestForeground |
|---|
| 105 |
}; |
|---|
| 106 |
|
|---|
| 107 |
enum VerticalPositionHint { |
|---|
| 108 |
PositionTop = -0x7fffffff, |
|---|
| 109 |
PositionBottom = 0x7fffffff, |
|---|
| 110 |
PositionUndefined = static_cast<int>(0x80000000) |
|---|
| 111 |
}; |
|---|
| 112 |
|
|---|
| 113 |
#if ENABLE(DASHBOARD_SUPPORT) |
|---|
| 114 |
struct DashboardRegionValue { |
|---|
| 115 |
bool operator==(const DashboardRegionValue& o) const |
|---|
| 116 |
{ |
|---|
| 117 |
return type == o.type && bounds == o.bounds && clip == o.clip && label == o.label; |
|---|
| 118 |
} |
|---|
| 119 |
bool operator!=(const DashboardRegionValue& o) const |
|---|
| 120 |
{ |
|---|
| 121 |
return !(*this == o); |
|---|
| 122 |
} |
|---|
| 123 |
|
|---|
| 124 |
String label; |
|---|
| 125 |
IntRect bounds; |
|---|
| 126 |
IntRect clip; |
|---|
| 127 |
int type; |
|---|
| 128 |
}; |
|---|
| 129 |
#endif |
|---|
| 130 |
|
|---|
| 131 |
|
|---|
| 132 |
|
|---|
| 133 |
typedef HashSet<RenderFlow*> RenderFlowSequencedSet; |
|---|
| 134 |
|
|---|
| 135 |
|
|---|
| 136 |
class RenderObject : public CachedResourceClient { |
|---|
| 137 |
friend class RenderContainer; |
|---|
| 138 |
friend class RenderSVGContainer; |
|---|
| 139 |
friend class RenderLayer; |
|---|
| 140 |
public: |
|---|
| 141 |
|
|---|
| 142 |
|
|---|
| 143 |
RenderObject(Node*); |
|---|
| 144 |
virtual ~RenderObject(); |
|---|
| 145 |
|
|---|
| 146 |
virtual const char* renderName() const { return "RenderObject"; } |
|---|
| 147 |
|
|---|
| 148 |
RenderObject* parent() const { return m_parent; } |
|---|
| 149 |
bool isDescendantOf(const RenderObject*) const; |
|---|
| 150 |
|
|---|
| 151 |
RenderObject* previousSibling() const { return m_previous; } |
|---|
| 152 |
RenderObject* nextSibling() const { return m_next; } |
|---|
| 153 |
|
|---|
| 154 |
virtual RenderObject* firstChild() const { return 0; } |
|---|
| 155 |
virtual RenderObject* lastChild() const { return 0; } |
|---|
| 156 |
|
|---|
| 157 |
RenderObject* nextInPreOrder() const; |
|---|
| 158 |
RenderObject* nextInPreOrder(RenderObject* stayWithin) const; |
|---|
| 159 |
RenderObject* nextInPreOrderAfterChildren() const; |
|---|
| 160 |
RenderObject* nextInPreOrderAfterChildren(RenderObject* stayWithin) const; |
|---|
| 161 |
RenderObject* previousInPreOrder() const; |
|---|
| 162 |
RenderObject* childAt(unsigned) const; |
|---|
| 163 |
|
|---|
| 164 |
RenderObject* firstLeafChild() const; |
|---|
| 165 |
RenderObject* lastLeafChild() const; |
|---|
| 166 |
|
|---|
| 167 |
virtual RenderLayer* layer() const { return 0; } |
|---|
| 168 |
RenderLayer* enclosingLayer() const; |
|---|
| 169 |
void addLayers(RenderLayer* parentLayer, RenderObject* newObject); |
|---|
| 170 |
void removeLayers(RenderLayer* parentLayer); |
|---|
| 171 |
void moveLayers(RenderLayer* oldParent, RenderLayer* newParent); |
|---|
| 172 |
RenderLayer* findNextLayer(RenderLayer* parentLayer, RenderObject* startPoint, bool checkParent = true); |
|---|
| 173 |
virtual void positionChildLayers() { } |
|---|
| 174 |
virtual bool requiresLayer(); |
|---|
| 175 |
|
|---|
| 176 |
virtual IntRect getOverflowClipRect(int , int ) { return IntRect(0, 0, 0, 0); } |
|---|
| 177 |
virtual IntRect getClipRect(int , int ) { return IntRect(0, 0, 0, 0); } |
|---|
| 178 |
bool hasClip() { return isPositioned() && style()->hasClip(); } |
|---|
| 179 |
|
|---|
| 180 |
virtual int getBaselineOfFirstLineBox() const { return -1; } |
|---|
| 181 |
virtual int getBaselineOfLastLineBox() const { return -1; } |
|---|
| 182 |
|
|---|
| 183 |
virtual bool isEmpty() const { return firstChild() == 0; } |
|---|
| 184 |
|
|---|
| 185 |
virtual bool isEdited() const { return false; } |
|---|
| 186 |
virtual void setEdited(bool) { } |
|---|
| 187 |
|
|---|
| 188 |
#ifndef NDEBUG |
|---|
| 189 |
void setHasAXObject(bool flag) { m_hasAXObject = flag; } |
|---|
| 190 |
bool hasAXObject() const { return m_hasAXObject; } |
|---|
| 191 |
#endif |
|---|
| 192 |
|
|---|
| 193 |
|
|---|
| 194 |
|
|---|
| 195 |
virtual RenderBlock* firstLineBlock() const; |
|---|
| 196 |
|
|---|
| 197 |
|
|---|
| 198 |
|
|---|
| 199 |
|
|---|
| 200 |
void handleDynamicFloatPositionChange(); |
|---|
| 201 |
|
|---|
| 202 |
|
|---|
| 203 |
|
|---|
| 204 |
RenderBlock* createAnonymousBlock(); |
|---|
| 205 |
|
|---|
| 206 |
|
|---|
| 207 |
|
|---|
| 208 |
bool hasStaticX() const; |
|---|
| 209 |
bool hasStaticY() const; |
|---|
| 210 |
virtual void setStaticX(int ) { } |
|---|
| 211 |
virtual void setStaticY(int ) { } |
|---|
| 212 |
virtual int staticX() const { return 0; } |
|---|
| 213 |
virtual int staticY() const { return 0; } |
|---|
| 214 |
|
|---|
| 215 |
|
|---|
| 216 |
|
|---|
| 217 |
virtual bool canHaveChildren() const; |
|---|
| 218 |
virtual bool isChildAllowed(RenderObject*, RenderStyle*) const { return true; } |
|---|
| 219 |
virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0); |
|---|
| 220 |
virtual void removeChild(RenderObject*); |
|---|
| 221 |
virtual bool createsAnonymousWrapper() const { return false; } |
|---|
| 222 |
|
|---|
| 223 |
|
|---|
| 224 |
virtual RenderObject* removeChildNode(RenderObject*, bool fullRemove = true); |
|---|
| 225 |
virtual void appendChildNode(RenderObject*, bool fullAppend = true); |
|---|
| 226 |
virtual void insertChildNode(RenderObject* child, RenderObject* before, bool fullInsert = true); |
|---|
| 227 |
|
|---|
| 228 |
|
|---|
| 229 |
virtual void moveChildNode(RenderObject*); |
|---|
| 230 |
|
|---|
| 231 |
|
|---|
| 232 |
protected: |
|---|
| 233 |
|
|---|
| 234 |
|
|---|
| 235 |
void setPreviousSibling(RenderObject* previous) { m_previous = previous; } |
|---|
| 236 |
void setNextSibling(RenderObject* next) { m_next = next; } |
|---|
| 237 |
void setParent(RenderObject* parent) { m_parent = parent; } |
|---|
| 238 |
|
|---|
| 239 |
private: |
|---|
| 240 |
void addAbsoluteRectForLayer(IntRect& result); |
|---|
| 241 |
|
|---|
| 242 |
public: |
|---|
| 243 |
#ifndef NDEBUG |
|---|
| 244 |
void showTreeForThis() const; |
|---|
| 245 |
#endif |
|---|
| 246 |
|
|---|
| 247 |
static RenderObject* createObject(Node*, RenderStyle*); |
|---|
| 248 |
|
|---|
| 249 |
|
|---|
| 250 |
|
|---|
| 251 |
void* operator new(size_t, RenderArena*) throw(); |
|---|
| 252 |
|
|---|
| 253 |
|
|---|
| 254 |
void operator delete(void*, size_t); |
|---|
| 255 |
|
|---|
| 256 |
private: |
|---|
| 257 |
|
|---|
| 258 |
void* operator new(size_t) throw(); |
|---|
| 259 |
|
|---|
| 260 |
public: |
|---|
| 261 |
RenderArena* renderArena() const { return document()->renderArena(); } |
|---|
| 262 |
|
|---|
| 263 |
virtual bool isApplet() const { return false; } |
|---|
| 264 |
virtual bool isBR() const { return false; } |
|---|
| 265 |
virtual bool isBlockFlow() const { return false; } |
|---|
| 266 |
virtual bool isCounter() const { return false; } |
|---|
| 267 |
virtual bool isFrame() const { return false; } |
|---|
| 268 |
virtual bool isFrameSet() const { return false; } |
|---|
| 269 |
virtual bool isImage() const { return false; } |
|---|
| 270 |
virtual bool isInlineBlockOrInlineTable() const { return false; } |
|---|
| 271 |
virtual bool isInlineContinuation() const; |
|---|
| 272 |
virtual bool isInlineFlow() const { return false; } |
|---|
| 273 |
virtual bool isListBox() const { return false; } |
|---|
| 274 |
virtual bool isListItem() const { return false; } |
|---|
| 275 |
virtual bool isListMarker() const { return false; } |
|---|
| 276 |
virtual bool isMedia() const { return false; } |
|---|
| 277 |
virtual bool isMenuList() const { return false; } |
|---|
| 278 |
virtual bool isRenderBlock() const { return false; } |
|---|
| 279 |
virtual bool isRenderImage() const { return false; } |
|---|
| 280 |
virtual bool isRenderInline() const { return false; } |
|---|
| 281 |
virtual bool isRenderPart() const { return false; } |
|---|
| 282 |
virtual bool isRenderView() const { return false; } |
|---|
| 283 |
virtual bool isSlider() const { return false; } |
|---|
| 284 |
virtual bool isTable() const { return false; } |
|---|
| 285 |
virtual bool isTableCell() const { return false; } |
|---|
| 286 |
virtual bool isTableCol() const { return false; } |
|---|
| 287 |
virtual bool isTableRow() const { return false; } |
|---|
| 288 |
virtual bool isTableSection() const { return false; } |
|---|
| 289 |
virtual bool isTextArea() const { return false; } |
|---|
| 290 |
virtual bool isTextField() const { return false; } |
|---|
| 291 |
virtual bool isWidget() const { return false; } |
|---|
| 292 |
|
|---|
| 293 |
|
|---|
| 294 |
bool isRoot() const { return document()->documentElement() == node(); } |
|---|
| 295 |
bool isBody() const; |
|---|
| 296 |
bool isHR() const; |
|---|
| 297 |
|
|---|
| 298 |
bool isHTMLMarquee() const; |
|---|
| 299 |
|
|---|
| 300 |
virtual bool childrenInline() const { return false; } |
|---|
| 301 |
virtual void setChildrenInline(bool) { } |
|---|
| 302 |
|
|---|
| 303 |
virtual RenderFlow* continuation() const; |
|---|
| 304 |
|
|---|
| 305 |
#if ENABLE(SVG) |
|---|
| 306 |
virtual bool isSVGRoot() const { return false; } |
|---|
| 307 |
virtual bool isSVGContainer() const { return false; } |
|---|
| 308 |
virtual bool isSVGHiddenContainer() const { return false; } |
|---|
| 309 |
virtual bool isRenderPath() const { return false; } |
|---|
| 310 |
virtual bool isSVGText() const { return false; } |
|---|
| 311 |
|
|---|
| 312 |
virtual FloatRect relativeBBox(bool includeStroke = true) const; |
|---|
| 313 |
|
|---|
| 314 |
virtual AffineTransform localTransform() const; |
|---|
| 315 |
virtual AffineTransform absoluteTransform() const; |
|---|
| 316 |
#endif |
|---|
| 317 |
|
|---|
| 318 |
virtual bool isEditable() const; |
|---|
| 319 |
|
|---|
| 320 |
bool isAnonymous() const { return m_isAnonymous; } |
|---|
| 321 |
void setIsAnonymous(bool b) { m_isAnonymous = b; } |
|---|
| 322 |
bool isAnonymousBlock() const |
|---|
| 323 |
{ |
|---|
| 324 |
return m_isAnonymous && style()->display() == BLOCK && style()->styleType() == RenderStyle::NOPSEUDO && !isListMarker(); |
|---|
| 325 |
} |
|---|
| 326 |
|
|---|
| 327 |
bool isFloating() const { return m_floating; } |
|---|
| 328 |
bool isPositioned() const { return m_positioned; } |
|---|
| 329 |
bool isRelPositioned() const { return m_relPositioned; } |
|---|
| 330 |
bool isText() const { return m_isText; } |
|---|
| 331 |
bool isInline() const { return m_inline; } |
|---|
| 332 |
bool isCompact() const { return style()->display() == COMPACT; } |
|---|
| 333 |
bool isRunIn() const { return style()->display() == RUN_IN; } |
|---|
| 334 |
bool isDragging() const { return m_isDragging; } |
|---|
| 335 |
bool isReplaced() const { return m_replaced; } |
|---|
| 336 |
|
|---|
| 337 |
bool hasLayer() const { return m_hasLayer; } |
|---|
| 338 |
|
|---|
| 339 |
bool hasBoxDecorations() const { return m_paintBackground; } |
|---|
| 340 |
bool mustRepaintBackgroundOrBorder() const; |
|---|
| 341 |
|
|---|
| 342 |
bool hasHorizontalBordersPaddingOrMargin() const { return hasHorizontalBordersOrPadding() || marginLeft() != 0 || marginRight() != 0; } |
|---|
| 343 |
bool hasHorizontalBordersOrPadding() const { return borderLeft() != 0 || borderRight() != 0 || paddingLeft() != 0 || paddingRight() != 0; } |
|---|
| 344 |
|
|---|
| 345 |
bool needsLayout() const { return m_needsLayout || m_normalChildNeedsLayout || m_posChildNeedsLayout || m_needsPositionedMovementLayout; } |
|---|
| 346 |
bool selfNeedsLayout() const { return m_needsLayout; } |
|---|
| 347 |
bool needsPositionedMovementLayout() const { return m_needsPositionedMovementLayout; } |
|---|
| 348 |
bool needsPositionedMovementLayoutOnly() const { return m_needsPositionedMovementLayout && !m_needsLayout && !m_normalChildNeedsLayout && !m_posChildNeedsLayout; } |
|---|
| 349 |
bool posChildNeedsLayout() const { return m_posChildNeedsLayout; } |
|---|
| 350 |
bool normalChildNeedsLayout() const { return m_normalChildNeedsLayout; } |
|---|
| 351 |
|
|---|
| 352 |
bool prefWidthsDirty() const { return m_prefWidthsDirty; } |
|---|
| 353 |
|
|---|
| 354 |
bool isSelectionBorder() const; |
|---|
| 355 |
|
|---|
| 356 |
bool hasOverflowClip() const { return m_hasOverflowClip; } |
|---|
| 357 |
virtual bool hasControlClip() const { return false; } |
|---|
| 358 |
virtual IntRect controlClipRect(int , int ) const { return IntRect(); } |
|---|
| 359 |
|
|---|
| 360 |
bool hasAutoVerticalScrollbar() const { return hasOverflowClip() && (style()->overflowY() == OAUTO || style()->overflowY() == OOVERLAY); } |
|---|
| 361 |
bool hasAutoHorizontalScrollbar() const { return hasOverflowClip() && (style()->overflowX() == OAUTO || style()->overflowX() == OOVERLAY); } |
|---|
| 362 |
|
|---|
| 363 |
bool scrollsOverflow() const { return scrollsOverflowX() || scrollsOverflowY(); } |
|---|
| 364 |
bool scrollsOverflowX() const { return hasOverflowClip() && (style()->overflowX() == OSCROLL || hasAutoHorizontalScrollbar()); } |
|---|
| 365 |
bool scrollsOverflowY() const { return hasOverflowClip() && (style()->overflowY() == OSCROLL || hasAutoVerticalScrollbar()); } |
|---|
| 366 |
|
|---|
| 367 |
virtual int verticalScrollbarWidth() const; |
|---|
| 368 |
virtual int horizontalScrollbarHeight() const; |
|---|
| 369 |
|
|---|
| 370 |
bool hasTransform() const { return m_hasTransform; } |
|---|
| 371 |
bool hasMask() const { return style() && style()->hasMask(); } |
|---|
| 372 |
virtual IntRect maskClipRect() { return borderBox(); } |
|---|
| 373 |
|
|---|
| 374 |
private: |
|---|
| 375 |
bool includeVerticalScrollbarSize() const { return hasOverflowClip() && (style()->overflowY() == OSCROLL || style()->overflowY() == OAUTO); } |
|---|
| 376 |
bool includeHorizontalScrollbarSize() const { return hasOverflowClip() && (style()->overflowX() == OSCROLL || style()->overflowX() == OAUTO); } |
|---|
| 377 |
|
|---|
| 378 |
public: |
|---|
| 379 |
RenderStyle* getPseudoStyle(RenderStyle::PseudoId, RenderStyle* parentStyle = 0) const; |
|---|
| 380 |
|
|---|
| 381 |
void updateDragState(bool dragOn); |
|---|
| 382 |
|
|---|
| 383 |
RenderView* view() const; |
|---|
| 384 |
|
|---|
| 385 |
|
|---|
| 386 |
Node* element() const { return m_isAnonymous ? 0 : m_node; } |
|---|
| 387 |
Document* document() const { return m_node->document(); } |
|---|
| 388 |
void setNode(Node* node) { m_node = node; } |
|---|
| 389 |
Node* node() const { return m_node; } |
|---|
| 390 |
|
|---|
| 391 |
bool hasOutlineAnnotation() const; |
|---|
| 392 |
bool hasOutline() const { return style()->hasOutline() || hasOutlineAnnotation(); } |
|---|
| 393 |
|
|---|
| 394 |
|
|---|
| 395 |
|
|---|
| 396 |
|
|---|
| 397 |
|
|---|
| 398 |
RenderObject* container() const; |
|---|
| 399 |
RenderObject* hoverAncestor() const; |
|---|
| 400 |
|
|---|
| 401 |
virtual void markAllDescendantsWithFloatsForLayout(RenderObject* floatToRemove = 0); |
|---|
| 402 |
void markContainingBlocksForLayout(bool scheduleRelayout = true, RenderObject* newRoot = 0); |
|---|
| 403 |
void setNeedsLayout(bool b, bool markParents = true); |
|---|
| 404 |
void setChildNeedsLayout(bool b, bool markParents = true); |
|---|
| 405 |
void setNeedsPositionedMovementLayout(); |
|---|
| 406 |
void setPrefWidthsDirty(bool, bool markParents = true); |
|---|
| 407 |
void invalidateContainerPrefWidths(); |
|---|
| 408 |
|
|---|
| 409 |
void setNeedsLayoutAndPrefWidthsRecalc() |
|---|
| 410 |
{ |
|---|
| 411 |
setNeedsLayout(true); |
|---|
| 412 |
setPrefWidthsDirty(true); |
|---|
| 413 |
} |
|---|
| 414 |
|
|---|
| 415 |
void setPositioned(bool b = true) { m_positioned = b; } |
|---|
| 416 |
void setRelPositioned(bool b = true) { m_relPositioned = b; } |
|---|
| 417 |
void setFloating(bool b = true) { m_floating = b; } |
|---|
| 418 |
void setInline(bool b = true) { m_inline = b; } |
|---|
| 419 |
void setHasBoxDecorations(bool b = true) { m_paintBackground = b; } |
|---|
| 420 |
void setRenderText() { m_isText = true; } |
|---|
| 421 |
void setReplaced(bool b = true) { m_replaced = b; } |
|---|
| 422 |
void setHasOverflowClip(bool b = true) { m_hasOverflowClip = b; } |
|---|
| 423 |
void setHasLayer(bool b = true) { m_hasLayer = b; } |
|---|
| 424 |
void setHasTransform(bool b = true) { m_hasTransform = b; } |
|---|
| 425 |
void setHasReflection(bool b = true) { m_hasReflection = b; } |
|---|
| 426 |
|
|---|
| 427 |
void scheduleRelayout(); |
|---|
| 428 |
|
|---|
| 429 |
void updateFillImages(const FillLayer*, const FillLayer*); |
|---|
| 430 |
void updateImage(StyleImage*, StyleImage*); |
|---|
| 431 |
|
|---|
| 432 |
virtual InlineBox* createInlineBox(bool makePlaceHolderBox, bool isRootLineBox, bool isOnlyRun = false); |
|---|
| 433 |
virtual void dirtyLineBoxes(bool fullLayout, bool isRootLineBox = false); |
|---|
| 434 |
|
|---|
| 435 |
|
|---|
| 436 |
|
|---|
| 437 |
|
|---|
| 438 |
virtual InlineBox* inlineBoxWrapper() const; |
|---|
| 439 |
virtual void setInlineBoxWrapper(InlineBox*); |
|---|
| 440 |
virtual void deleteLineBoxWrapper(); |
|---|
| 441 |
|
|---|
| 442 |
|
|---|
| 443 |
virtual int lineHeight(bool firstLine, bool isRootLineBox = false) const; |
|---|
| 444 |
|
|---|
| 445 |
|
|---|
| 446 |
virtual int verticalPositionHint(bool firstLine) const;< |
|---|