OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) |
3 * (C) 2000 Antti Koivisto (koivisto@kde.org) | 3 * (C) 2000 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2000 Dirk Mueller (mueller@kde.org) | 4 * (C) 2000 Dirk Mueller (mueller@kde.org) |
5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) | 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) |
6 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
reserved. | 6 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
reserved. |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 19 matching lines...) Expand all Loading... |
30 #include "Document.h" | 30 #include "Document.h" |
31 #include "RenderObjectChildList.h" | 31 #include "RenderObjectChildList.h" |
32 #include "RenderStyle.h" | 32 #include "RenderStyle.h" |
33 | 33 |
34 namespace WebCore { | 34 namespace WebCore { |
35 | 35 |
36 class AnimationController; | 36 class AnimationController; |
37 class HitTestResult; | 37 class HitTestResult; |
38 class InlineBox; | 38 class InlineBox; |
39 class InlineFlowBox; | 39 class InlineFlowBox; |
| 40 class RenderBoxModelObject; |
40 class RenderInline; | 41 class RenderInline; |
41 class RenderBlock; | 42 class RenderBlock; |
42 class RenderFlow; | 43 class RenderFlow; |
43 class RenderLayer; | 44 class RenderLayer; |
44 class VisiblePosition; | 45 class VisiblePosition; |
45 | 46 |
46 /* | 47 /* |
47 * The painting of a layer occurs in three distinct phases. Each phase involve
s | 48 * The painting of a layer occurs in three distinct phases. Each phase involve
s |
48 * a recursive descent into the layer's render objects. The first phase is the
background phase. | 49 * a recursive descent into the layer's render objects. The first phase is the
background phase. |
49 * The backgrounds and borders of all blocks are painted. Inlines are not pain
ted at all. | 50 * The backgrounds and borders of all blocks are painted. Inlines are not pain
ted at all. |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 virtual RenderBlock* firstLineBlock() const; | 198 virtual RenderBlock* firstLineBlock() const; |
198 | 199 |
199 // Called when an object that was floating or positioned becomes a normal fl
ow object | 200 // Called when an object that was floating or positioned becomes a normal fl
ow object |
200 // again. We have to make sure the render tree updates as needed to accommo
date the new | 201 // again. We have to make sure the render tree updates as needed to accommo
date the new |
201 // normal flow object. | 202 // normal flow object. |
202 void handleDynamicFloatPositionChange(); | 203 void handleDynamicFloatPositionChange(); |
203 | 204 |
204 // This function is a convenience helper for creating an anonymous block tha
t inherits its | 205 // This function is a convenience helper for creating an anonymous block tha
t inherits its |
205 // style from this RenderObject. | 206 // style from this RenderObject. |
206 RenderBlock* createAnonymousBlock(); | 207 RenderBlock* createAnonymousBlock(); |
207 | 208 |
208 // Whether or not a positioned element requires normal flow x/y to be comput
ed | |
209 // to determine its position. | |
210 bool hasStaticX() const; | |
211 bool hasStaticY() const; | |
212 virtual void setStaticX(int /*staticX*/) { } | |
213 virtual void setStaticY(int /*staticY*/) { } | |
214 virtual int staticX() const { return 0; } | |
215 virtual int staticY() const { return 0; } | |
216 | |
217 // RenderObject tree manipulation | 209 // RenderObject tree manipulation |
218 ////////////////////////////////////////// | 210 ////////////////////////////////////////// |
219 virtual bool canHaveChildren() const { return virtualChildren(); } | 211 virtual bool canHaveChildren() const { return virtualChildren(); } |
220 virtual bool isChildAllowed(RenderObject*, RenderStyle*) const { return true
; } | 212 virtual bool isChildAllowed(RenderObject*, RenderStyle*) const { return true
; } |
221 virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0)
; | 213 virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0)
; |
222 virtual void addChildIgnoringContinuation(RenderObject* newChild, RenderObje
ct* beforeChild = 0) { return addChild(newChild, beforeChild); } | 214 virtual void addChildIgnoringContinuation(RenderObject* newChild, RenderObje
ct* beforeChild = 0) { return addChild(newChild, beforeChild); } |
223 virtual void removeChild(RenderObject*); | 215 virtual void removeChild(RenderObject*); |
224 virtual bool createsAnonymousWrapper() const { return false; } | 216 virtual bool createsAnonymousWrapper() const { return false; } |
225 ////////////////////////////////////////// | 217 ////////////////////////////////////////// |
226 | 218 |
(...skipping 25 matching lines...) Expand all Loading... |
252 private: | 244 private: |
253 // The normal operator new is disallowed on all render objects. | 245 // The normal operator new is disallowed on all render objects. |
254 void* operator new(size_t) throw(); | 246 void* operator new(size_t) throw(); |
255 | 247 |
256 public: | 248 public: |
257 RenderArena* renderArena() const { return document()->renderArena(); } | 249 RenderArena* renderArena() const { return document()->renderArena(); } |
258 | 250 |
259 virtual bool isApplet() const { return false; } | 251 virtual bool isApplet() const { return false; } |
260 virtual bool isBR() const { return false; } | 252 virtual bool isBR() const { return false; } |
261 virtual bool isBlockFlow() const { return false; } | 253 virtual bool isBlockFlow() const { return false; } |
| 254 virtual bool isBoxModelObject() const { return false; } |
262 virtual bool isCounter() const { return false; } | 255 virtual bool isCounter() const { return false; } |
263 virtual bool isFieldset() const { return false; } | 256 virtual bool isFieldset() const { return false; } |
264 virtual bool isFrame() const { return false; } | 257 virtual bool isFrame() const { return false; } |
265 virtual bool isFrameSet() const { return false; } | 258 virtual bool isFrameSet() const { return false; } |
266 virtual bool isImage() const { return false; } | 259 virtual bool isImage() const { return false; } |
267 virtual bool isInlineBlockOrInlineTable() const { return false; } | 260 virtual bool isInlineBlockOrInlineTable() const { return false; } |
268 virtual bool isListBox() const { return false; } | 261 virtual bool isListBox() const { return false; } |
269 virtual bool isListItem() const { return false; } | 262 virtual bool isListItem() const { return false; } |
270 virtual bool isListMarker() const { return false; } | 263 virtual bool isListMarker() const { return false; } |
271 virtual bool isMedia() const { return false; } | 264 virtual bool isMedia() const { return false; } |
272 virtual bool isMenuList() const { return false; } | 265 virtual bool isMenuList() const { return false; } |
273 virtual bool isRenderBlock() const { return false; } | 266 virtual bool isRenderBlock() const { return false; } |
| 267 virtual bool isRenderButton() const { return false; } |
274 virtual bool isRenderImage() const { return false; } | 268 virtual bool isRenderImage() const { return false; } |
275 virtual bool isRenderInline() const { return false; } | 269 virtual bool isRenderInline() const { return false; } |
276 virtual bool isRenderPart() const { return false; } | 270 virtual bool isRenderPart() const { return false; } |
277 virtual bool isRenderView() const { return false; } | 271 virtual bool isRenderView() const { return false; } |
278 virtual bool isSlider() const { return false; } | 272 virtual bool isSlider() const { return false; } |
279 virtual bool isTable() const { return false; } | 273 virtual bool isTable() const { return false; } |
280 virtual bool isTableCell() const { return false; } | 274 virtual bool isTableCell() const { return false; } |
281 virtual bool isTableCol() const { return false; } | 275 virtual bool isTableCol() const { return false; } |
282 virtual bool isTableRow() const { return false; } | 276 virtual bool isTableRow() const { return false; } |
283 virtual bool isTableSection() const { return false; } | 277 virtual bool isTableSection() const { return false; } |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 // FIXME: Temporary. If useTransforms is true, take transforms into account.
Eventually localToAbsolute() will always be transform-aware. | 524 // FIXME: Temporary. If useTransforms is true, take transforms into account.
Eventually localToAbsolute() will always be transform-aware. |
531 virtual FloatPoint localToAbsolute(FloatPoint localPoint = FloatPoint(), boo
l fixed = false, bool useTransforms = false) const; | 525 virtual FloatPoint localToAbsolute(FloatPoint localPoint = FloatPoint(), boo
l fixed = false, bool useTransforms = false) const; |
532 virtual FloatPoint absoluteToLocal(FloatPoint, bool fixed = false, bool useT
ransforms = false) const; | 526 virtual FloatPoint absoluteToLocal(FloatPoint, bool fixed = false, bool useT
ransforms = false) const; |
533 | 527 |
534 // Convert a local quad to absolute coordinates, taking transforms into acco
unt. | 528 // Convert a local quad to absolute coordinates, taking transforms into acco
unt. |
535 FloatQuad localToAbsoluteQuad(const FloatQuad& quad, bool fixed = false) con
st | 529 FloatQuad localToAbsoluteQuad(const FloatQuad& quad, bool fixed = false) con
st |
536 { | 530 { |
537 return localToContainerQuad(quad, 0, fixed); | 531 return localToContainerQuad(quad, 0, fixed); |
538 } | 532 } |
539 // Convert a local quad into the coordinate system of container, taking tran
sforms into account. | 533 // Convert a local quad into the coordinate system of container, taking tran
sforms into account. |
540 virtual FloatQuad localToContainerQuad(const FloatQuad&, RenderBox* repaintC
ontainer, bool fixed = false) const; | 534 virtual FloatQuad localToContainerQuad(const FloatQuad&, RenderBoxModelObjec
t* repaintContainer, bool fixed = false) const; |
541 | 535 |
542 // Return the offset from the container() renderer (excluding transforms) | 536 // Return the offset from the container() renderer (excluding transforms) |
543 virtual IntSize offsetFromContainer(RenderObject*) const; | 537 virtual IntSize offsetFromContainer(RenderObject*) const; |
544 | 538 |
545 virtual void absoluteRectsForRange(Vector<IntRect>&, unsigned startOffset =
0, unsigned endOffset = UINT_MAX, bool useSelectionHeight = false); | 539 virtual void absoluteRectsForRange(Vector<IntRect>&, unsigned startOffset =
0, unsigned endOffset = UINT_MAX, bool useSelectionHeight = false); |
546 | 540 |
547 virtual void absoluteRects(Vector<IntRect>&, int, int, bool = true) { } | 541 virtual void absoluteRects(Vector<IntRect>&, int, int, bool = true) { } |
548 // FIXME: useTransforms should go away eventually | 542 // FIXME: useTransforms should go away eventually |
549 IntRect absoluteBoundingBoxRect(bool useTransforms = false); | 543 IntRect absoluteBoundingBoxRect(bool useTransforms = false); |
550 | 544 |
(...skipping 26 matching lines...) Expand all Loading... |
577 }; | 571 }; |
578 | 572 |
579 void drawBorderArc(GraphicsContext*, int x, int y, float thickness, IntSize
radius, int angleStart, | 573 void drawBorderArc(GraphicsContext*, int x, int y, float thickness, IntSize
radius, int angleStart, |
580 int angleSpan, BorderSide, Color, const Color& textcolor,
EBorderStyle, bool firstCorner); | 574 int angleSpan, BorderSide, Color, const Color& textcolor,
EBorderStyle, bool firstCorner); |
581 void drawBorder(GraphicsContext*, int x1, int y1, int x2, int y2, BorderSide
, | 575 void drawBorder(GraphicsContext*, int x1, int y1, int x2, int y2, BorderSide
, |
582 Color, const Color& textcolor, EBorderStyle, int adjbw1, int
adjbw2); | 576 Color, const Color& textcolor, EBorderStyle, int adjbw1, int
adjbw2); |
583 | 577 |
584 // Return the RenderBox in the container chain which is responsible for pain
ting this object, or 0 | 578 // Return the RenderBox in the container chain which is responsible for pain
ting this object, or 0 |
585 // if painting is root-relative. This is the container that should be passed
to the 'forRepaint' | 579 // if painting is root-relative. This is the container that should be passed
to the 'forRepaint' |
586 // methods. | 580 // methods. |
587 RenderBox* containerForRepaint() const; | 581 RenderBoxModelObject* containerForRepaint() const; |
588 // Actually do the repaint of rect r for this object which has been computed
in the coordinate space | 582 // Actually do the repaint of rect r for this object which has been computed
in the coordinate space |
589 // of repaintContainer. If repaintContainer is 0, repaint via the view. | 583 // of repaintContainer. If repaintContainer is 0, repaint via the view. |
590 void repaintUsingContainer(RenderBox* repaintContainer, const IntRect& r, bo
ol immediate = false); | 584 void repaintUsingContainer(RenderBoxModelObject* repaintContainer, const Int
Rect& r, bool immediate = false); |
591 | 585 |
592 // Repaint the entire object. Called when, e.g., the color of a border chan
ges, or when a border | 586 // Repaint the entire object. Called when, e.g., the color of a border chan
ges, or when a border |
593 // style changes. | 587 // style changes. |
594 void repaint(bool immediate = false); | 588 void repaint(bool immediate = false); |
595 | 589 |
596 // Repaint a specific subrectangle within a given object. The rect |r| is i
n the object's coordinate space. | 590 // Repaint a specific subrectangle within a given object. The rect |r| is i
n the object's coordinate space. |
597 void repaintRectangle(const IntRect&, bool immediate = false); | 591 void repaintRectangle(const IntRect&, bool immediate = false); |
598 | 592 |
599 // Repaint only if our old bounds and new bounds are different. | 593 // Repaint only if our old bounds and new bounds are different. |
600 bool repaintAfterLayoutIfNeeded(RenderBox* repaintContainer, const IntRect&
oldBounds, const IntRect& oldOutlineBox); | 594 bool repaintAfterLayoutIfNeeded(RenderBoxModelObject* repaintContainer, cons
t IntRect& oldBounds, const IntRect& oldOutlineBox); |
601 | 595 |
602 // Repaint only if the object moved. | 596 // Repaint only if the object moved. |
603 virtual void repaintDuringLayoutIfMoved(const IntRect& rect); | 597 virtual void repaintDuringLayoutIfMoved(const IntRect& rect); |
604 | 598 |
605 // Called to repaint a block's floats. | 599 // Called to repaint a block's floats. |
606 virtual void repaintOverhangingFloats(bool paintAllDescendants = false); | 600 virtual void repaintOverhangingFloats(bool paintAllDescendants = false); |
607 | 601 |
608 bool checkForRepaintDuringLayout() const; | 602 bool checkForRepaintDuringLayout() const; |
609 | 603 |
610 // Returns the rect that should be repainted whenever this object changes.
The rect is in the view's | 604 // Returns the rect that should be repainted whenever this object changes.
The rect is in the view's |
611 // coordinate space. This method deals with outlines and overflow. | 605 // coordinate space. This method deals with outlines and overflow. |
612 IntRect absoluteClippedOverflowRect() | 606 IntRect absoluteClippedOverflowRect() |
613 { | 607 { |
614 return clippedOverflowRectForRepaint(0); | 608 return clippedOverflowRectForRepaint(0); |
615 } | 609 } |
616 virtual IntRect clippedOverflowRectForRepaint(RenderBox* repaintContainer);
| 610 virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintC
ontainer); |
617 virtual IntRect rectWithOutlineForRepaint(RenderBox* repaintContainer, int o
utlineWidth); | 611 virtual IntRect rectWithOutlineForRepaint(RenderBoxModelObject* repaintConta
iner, int outlineWidth); |
618 | 612 |
619 // Given a rect in the object's coordinate space, compute a rect suitable fo
r repainting | 613 // Given a rect in the object's coordinate space, compute a rect suitable fo
r repainting |
620 // that rect in view coordinates. | 614 // that rect in view coordinates. |
621 void computeAbsoluteRepaintRect(IntRect& r, bool fixed = false) | 615 void computeAbsoluteRepaintRect(IntRect& r, bool fixed = false) |
622 { | 616 { |
623 return computeRectForRepaint(0, r, fixed); | 617 return computeRectForRepaint(0, r, fixed); |
624 } | 618 } |
625 // Given a rect in the object's coordinate space, compute a rect suitable fo
r repainting | 619 // Given a rect in the object's coordinate space, compute a rect suitable fo
r repainting |
626 // that rect in the coordinate space of repaintContainer. | 620 // that rect in the coordinate space of repaintContainer. |
627 virtual void computeRectForRepaint(RenderBox* repaintContainer, IntRect&, bo
ol fixed = false); | 621 virtual void computeRectForRepaint(RenderBoxModelObject* repaintContainer, I
ntRect&, bool fixed = false); |
628 | 622 |
629 virtual unsigned int length() const { return 1; } | 623 virtual unsigned int length() const { return 1; } |
630 | 624 |
631 bool isFloatingOrPositioned() const { return (isFloating() || isPositioned()
); } | 625 bool isFloatingOrPositioned() const { return (isFloating() || isPositioned()
); } |
632 virtual bool containsFloats() { return false; } | 626 virtual bool containsFloats() { return false; } |
633 virtual bool containsFloat(RenderObject*) { return false; } | 627 virtual bool containsFloat(RenderObject*) { return false; } |
634 virtual bool hasOverhangingFloats() { return false; } | 628 virtual bool hasOverhangingFloats() { return false; } |
635 | 629 |
636 virtual bool avoidsFloats() const; | 630 virtual bool avoidsFloats() const; |
637 bool shrinkToAvoidFloats() const; | 631 bool shrinkToAvoidFloats() const; |
(...skipping 23 matching lines...) Expand all Loading... |
661 // The current selection state for an object. For blocks, the state refers
to the state of the leaf | 655 // The current selection state for an object. For blocks, the state refers
to the state of the leaf |
662 // descendants (as described above in the SelectionState enum declaration). | 656 // descendants (as described above in the SelectionState enum declaration). |
663 SelectionState selectionState() const { return static_cast<SelectionState>(m
_selectionState);; } | 657 SelectionState selectionState() const { return static_cast<SelectionState>(m
_selectionState);; } |
664 | 658 |
665 // Sets the selection state for an object. | 659 // Sets the selection state for an object. |
666 virtual void setSelectionState(SelectionState state) { m_selectionState = st
ate; } | 660 virtual void setSelectionState(SelectionState state) { m_selectionState = st
ate; } |
667 | 661 |
668 // A single rectangle that encompasses all of the selected objects within th
is object. Used to determine the tightest | 662 // A single rectangle that encompasses all of the selected objects within th
is object. Used to determine the tightest |
669 // possible bounding box for the selection. | 663 // possible bounding box for the selection. |
670 IntRect selectionRect(bool clipToVisibleContent = true) { return selectionRe
ctForRepaint(0, clipToVisibleContent); } | 664 IntRect selectionRect(bool clipToVisibleContent = true) { return selectionRe
ctForRepaint(0, clipToVisibleContent); } |
671 virtual IntRect selectionRectForRepaint(RenderBox* /*repaintContainer*/, boo
l /*clipToVisibleContent*/ = true) { return IntRect(); } | 665 virtual IntRect selectionRectForRepaint(RenderBoxModelObject* /*repaintConta
iner*/, bool /*clipToVisibleContent*/ = true) { return IntRect(); } |
672 | 666 |
673 // Whether or not an object can be part of the leaf elements of the selectio
n. | 667 // Whether or not an object can be part of the leaf elements of the selectio
n. |
674 virtual bool canBeSelectionLeaf() const { return false; } | 668 virtual bool canBeSelectionLeaf() const { return false; } |
675 | 669 |
676 // Whether or not a block has selected children. | 670 // Whether or not a block has selected children. |
677 bool hasSelectedChildren() const { return m_selectionState != SelectionNone;
} | 671 bool hasSelectedChildren() const { return m_selectionState != SelectionNone;
} |
678 | 672 |
679 // Obtains the selection colors that should be used when painting a selectio
n. | 673 // Obtains the selection colors that should be used when painting a selectio
n. |
680 Color selectionBackgroundColor() const; | 674 Color selectionBackgroundColor() const; |
681 Color selectionForegroundColor() const; | 675 Color selectionForegroundColor() const; |
(...skipping 30 matching lines...) Expand all Loading... |
712 // Virtual function helpers for CSS3 Flexible Box Layout | 706 // Virtual function helpers for CSS3 Flexible Box Layout |
713 virtual bool isFlexibleBox() const { return false; } | 707 virtual bool isFlexibleBox() const { return false; } |
714 virtual bool isFlexingChildren() const { return false; } | 708 virtual bool isFlexingChildren() const { return false; } |
715 virtual bool isStretchingChildren() const { return false; } | 709 virtual bool isStretchingChildren() const { return false; } |
716 | 710 |
717 virtual int caretMinOffset() const; | 711 virtual int caretMinOffset() const; |
718 virtual int caretMaxOffset() const; | 712 virtual int caretMaxOffset() const; |
719 virtual unsigned caretMaxRenderedOffset() const; | 713 virtual unsigned caretMaxRenderedOffset() const; |
720 | 714 |
721 virtual int previousOffset(int current) const; | 715 virtual int previousOffset(int current) const; |
| 716 virtual int previousOffsetForBackwardDeletion(int current) const; |
722 virtual int nextOffset(int current) const; | 717 virtual int nextOffset(int current) const; |
723 | 718 |
724 virtual void imageChanged(CachedImage*, const IntRect* = 0); | 719 virtual void imageChanged(CachedImage*, const IntRect* = 0); |
725 virtual void imageChanged(WrappedImagePtr, const IntRect* = 0) { } | 720 virtual void imageChanged(WrappedImagePtr, const IntRect* = 0) { } |
726 virtual bool willRenderImage(CachedImage*); | 721 virtual bool willRenderImage(CachedImage*); |
727 | 722 |
728 virtual void selectionStartEnd(int& spos, int& epos) const; | 723 virtual void selectionStartEnd(int& spos, int& epos) const; |
729 | 724 |
730 RenderObject* paintingRootForChildren(PaintInfo& paintInfo) const | 725 RenderObject* paintingRootForChildren(PaintInfo& paintInfo) const |
731 { | 726 { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
770 void addPDFURLRect(GraphicsContext*, const IntRect&); | 765 void addPDFURLRect(GraphicsContext*, const IntRect&); |
771 | 766 |
772 virtual IntRect viewRect() const; | 767 virtual IntRect viewRect() const; |
773 | 768 |
774 int getVerticalPosition(bool firstLine) const; | 769 int getVerticalPosition(bool firstLine) const; |
775 | 770 |
776 void adjustRectForOutlineAndShadow(IntRect&) const; | 771 void adjustRectForOutlineAndShadow(IntRect&) const; |
777 | 772 |
778 void arenaDelete(RenderArena*, void* objectBase); | 773 void arenaDelete(RenderArena*, void* objectBase); |
779 | 774 |
780 virtual IntRect outlineBoundsForRepaint(RenderBox* /*repaintContainer*/) con
st { return IntRect(); } | 775 virtual IntRect outlineBoundsForRepaint(RenderBoxModelObject* /*repaintConta
iner*/) const { return IntRect(); } |
781 | 776 |
782 class LayoutRepainter { | 777 class LayoutRepainter { |
783 public: | 778 public: |
784 LayoutRepainter(RenderObject& object, bool checkForRepaint, const IntRec
t* oldBounds = 0) | 779 LayoutRepainter(RenderObject& object, bool checkForRepaint, const IntRec
t* oldBounds = 0) |
785 : m_object(object) | 780 : m_object(object) |
786 , m_repaintContainer(0) | 781 , m_repaintContainer(0) |
787 , m_checkForRepaint(checkForRepaint) | 782 , m_checkForRepaint(checkForRepaint) |
788 { | 783 { |
789 if (m_checkForRepaint) { | 784 if (m_checkForRepaint) { |
790 m_repaintContainer = m_object.containerForRepaint(); | 785 m_repaintContainer = m_object.containerForRepaint(); |
791 m_oldBounds = oldBounds ? *oldBounds : m_object.clippedOverflowR
ectForRepaint(m_repaintContainer); | 786 m_oldBounds = oldBounds ? *oldBounds : m_object.clippedOverflowR
ectForRepaint(m_repaintContainer); |
792 m_oldOutlineBox = m_object.outlineBoundsForRepaint(m_repaintCont
ainer); | 787 m_oldOutlineBox = m_object.outlineBoundsForRepaint(m_repaintCont
ainer); |
793 } | 788 } |
794 } | 789 } |
795 | 790 |
796 // Return true if it repainted. | 791 // Return true if it repainted. |
797 bool repaintAfterLayout() | 792 bool repaintAfterLayout() |
798 { | 793 { |
799 return m_checkForRepaint ? m_object.repaintAfterLayoutIfNeeded(m_rep
aintContainer, m_oldBounds, m_oldOutlineBox) : false; | 794 return m_checkForRepaint ? m_object.repaintAfterLayoutIfNeeded(m_rep
aintContainer, m_oldBounds, m_oldOutlineBox) : false; |
800 } | 795 } |
801 | 796 |
802 bool checkForRepaint() const { return m_checkForRepaint; } | 797 bool checkForRepaint() const { return m_checkForRepaint; } |
803 | 798 |
804 private: | 799 private: |
805 RenderObject& m_object; | 800 RenderObject& m_object; |
806 RenderBox* m_repaintContainer; | 801 RenderBoxModelObject* m_repaintContainer; |
807 IntRect m_oldBounds; | 802 IntRect m_oldBounds; |
808 IntRect m_oldOutlineBox; | 803 IntRect m_oldOutlineBox; |
809 bool m_checkForRepaint; | 804 bool m_checkForRepaint; |
810 }; | 805 }; |
811 | 806 |
812 private: | 807 private: |
813 RenderStyle* firstLineStyleSlowCase() const; | 808 RenderStyle* firstLineStyleSlowCase() const; |
814 | 809 |
815 RefPtr<RenderStyle> m_style; | 810 RefPtr<RenderStyle> m_style; |
816 | 811 |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
942 | 937 |
943 inline void RenderObject::markContainingBlocksForLayout(bool scheduleRelayout, R
enderObject* newRoot) | 938 inline void RenderObject::markContainingBlocksForLayout(bool scheduleRelayout, R
enderObject* newRoot) |
944 { | 939 { |
945 ASSERT(!scheduleRelayout || !newRoot); | 940 ASSERT(!scheduleRelayout || !newRoot); |
946 | 941 |
947 RenderObject* o = container(); | 942 RenderObject* o = container(); |
948 RenderObject* last = this; | 943 RenderObject* last = this; |
949 | 944 |
950 while (o) { | 945 while (o) { |
951 if (!last->isText() && (last->style()->position() == FixedPosition || la
st->style()->position() == AbsolutePosition)) { | 946 if (!last->isText() && (last->style()->position() == FixedPosition || la
st->style()->position() == AbsolutePosition)) { |
952 if (last->hasStaticY()) { | 947 if ((last->style()->top().isAuto() && last->style()->bottom().isAuto
()) || last->style()->top().isStatic()) { |
953 RenderObject* parent = last->parent(); | 948 RenderObject* parent = last->parent(); |
954 if (!parent->normalChildNeedsLayout()) { | 949 if (!parent->normalChildNeedsLayout()) { |
955 parent->setChildNeedsLayout(true, false); | 950 parent->setChildNeedsLayout(true, false); |
956 if (parent != newRoot) | 951 if (parent != newRoot) |
957 parent->markContainingBlocksForLayout(scheduleRelayout,
newRoot); | 952 parent->markContainingBlocksForLayout(scheduleRelayout,
newRoot); |
958 } | 953 } |
959 } | 954 } |
960 if (o->m_posChildNeedsLayout) | 955 if (o->m_posChildNeedsLayout) |
961 return; | 956 return; |
962 o->m_posChildNeedsLayout = true; | 957 o->m_posChildNeedsLayout = true; |
(...skipping 19 matching lines...) Expand all Loading... |
982 } | 977 } |
983 | 978 |
984 } // namespace WebCore | 979 } // namespace WebCore |
985 | 980 |
986 #ifndef NDEBUG | 981 #ifndef NDEBUG |
987 // Outside the WebCore namespace for ease of invocation from gdb. | 982 // Outside the WebCore namespace for ease of invocation from gdb. |
988 void showTree(const WebCore::RenderObject*); | 983 void showTree(const WebCore::RenderObject*); |
989 #endif | 984 #endif |
990 | 985 |
991 #endif // RenderObject_h | 986 #endif // RenderObject_h |
OLD | NEW |