2007-07-13 Mitz Pettel <mitz@webkit.org>
authorbdash <bdash@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 13 Jul 2007 12:00:23 +0000 (12:00 +0000)
committerbdash <bdash@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 13 Jul 2007 12:00:23 +0000 (12:00 +0000)
        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=13873
          Incomplete repaint of replaced element's box shadow

        Tests: fast/repaint/box-shadow-h.html
               fast/repaint/box-shadow-v.html

        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout): Added a call to adjustOverflowForBoxShadow().
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout): Ditto.
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::layout): Ditto.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced): Initialize m_hasOverflow.
        (WebCore::RenderReplaced::~RenderReplaced): Added. Removes this object from the
        overflow rect map if it has overflow.
        (WebCore::RenderReplaced::shouldPaint): Account for overflow.
        (WebCore::RenderReplaced::adjustOverflowForBoxShadow): Added. Creates or
        removes an entry for this object in the global overflow rect map.
        (WebCore::RenderReplaced::overflowHeight): Added.
        (WebCore::RenderReplaced::overflowWidth): Added.
        (WebCore::RenderReplaced::overflowLeft): Added.
        (WebCore::RenderReplaced::overflowTop): Added.
        (WebCore::RenderReplaced::overflowRect): Added.
        * rendering/RenderReplaced.h:

2007-07-13  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - updated tests and results for http://bugs.webkit.org/show_bug.cgi?id=13873
          Incomplete repaint of replaced element's box shadow

        * fast/repaint/box-shadow-h-expected.checksum:
        * fast/repaint/box-shadow-h-expected.png:
        * fast/repaint/box-shadow-h-expected.txt:
        * fast/repaint/box-shadow-h.html:
        * fast/repaint/box-shadow-v-expected.checksum:
        * fast/repaint/box-shadow-v-expected.png:
        * fast/repaint/box-shadow-v-expected.txt:
        * fast/repaint/box-shadow-v.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@24256 268f45cc-cd09-0410-ab3c-d52691b4dbfc

15 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/repaint/box-shadow-h-expected.checksum
LayoutTests/fast/repaint/box-shadow-h-expected.png
LayoutTests/fast/repaint/box-shadow-h-expected.txt
LayoutTests/fast/repaint/box-shadow-h.html
LayoutTests/fast/repaint/box-shadow-v-expected.checksum
LayoutTests/fast/repaint/box-shadow-v-expected.png
LayoutTests/fast/repaint/box-shadow-v-expected.txt
LayoutTests/fast/repaint/box-shadow-v.html
WebCore/ChangeLog
WebCore/rendering/RenderHTMLCanvas.cpp
WebCore/rendering/RenderImage.cpp
WebCore/rendering/RenderPartObject.cpp
WebCore/rendering/RenderReplaced.cpp
WebCore/rendering/RenderReplaced.h

index 9467c0b..3203ec3 100644 (file)
@@ -2,6 +2,22 @@
 
         Reviewed by Dave Hyatt.
 
+        - updated tests and results for http://bugs.webkit.org/show_bug.cgi?id=13873
+          Incomplete repaint of replaced element's box shadow
+
+        * fast/repaint/box-shadow-h-expected.checksum:
+        * fast/repaint/box-shadow-h-expected.png:
+        * fast/repaint/box-shadow-h-expected.txt:
+        * fast/repaint/box-shadow-h.html:
+        * fast/repaint/box-shadow-v-expected.checksum:
+        * fast/repaint/box-shadow-v-expected.png:
+        * fast/repaint/box-shadow-v-expected.txt:
+        * fast/repaint/box-shadow-v.html:
+
+2007-07-13  Mitz Pettel  <mitz@webkit.org>
+
+        Reviewed by Dave Hyatt.
+
         - test and updated results for http://bugs.webkit.org/show_bug.cgi?id=14395
           When a <p> is inside <li> two <BR>s are rendered
 
index c3b469e..b6879a7 100644 (file)
@@ -1 +1 @@
-31e320f6d8a40f1e95f9b4f56a4205da
\ No newline at end of file
+ed29b201652e6703d6dfdb29fac2c587
\ No newline at end of file
index 3687ea0..bc16d83 100644 (file)
Binary files a/LayoutTests/fast/repaint/box-shadow-h-expected.png and b/LayoutTests/fast/repaint/box-shadow-h-expected.png differ
index b372515..3b0884e 100644 (file)
@@ -1,12 +1,15 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
-layer at (0,0) size 800x440
+layer at (0,0) size 800x514
   RenderBlock {HTML} at (0,0) size 800x8
     RenderBody {BODY} at (8,8) size 784x0
-      RenderBlock (floating) {DIV} at (0,0) size 121x432
+      RenderBlock (floating) {DIV} at (0,0) size 121x506
         RenderBlock {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
         RenderTable {TABLE} at (10,290) size 40x40 [bgcolor=#FFFF77]
-        RenderBlock {P} at (0,346) size 121x18
+        RenderBlock (anonymous) at (0,340) size 121x64
+          RenderHTMLCanvas {CANVAS} at (10,10) size 40x40 [bgcolor=#FFFF77]
+          RenderText {#text} at (0,0) size 0x0
+        RenderBlock {P} at (0,420) size 121x18
           RenderText {#text} at (0,0) size 46x18
             text run at (0,0) width 46: "Lorem "
           RenderInline {SPAN} at (0,0) size 38x18
@@ -14,16 +17,19 @@ layer at (0,0) size 800x440
               text run at (46,0) width 38: "ipsum"
           RenderText {#text} at (84,0) size 37x18
             text run at (84,0) width 37: " dolor"
-        RenderBlock {P} at (0,380) size 121x36
+        RenderBlock {P} at (0,454) size 121x36
           RenderText {#text} at (0,0) size 84x18
             text run at (0,0) width 84: "Lorem ipsum"
           RenderBR {BR} at (84,0) size 0x18
           RenderText {#text} at (0,18) size 85x18
             text run at (0,18) width 85: "dolor sit amet"
-      RenderBlock (floating) {DIV} at (131,0) size 121x380
+      RenderBlock (floating) {DIV} at (131,0) size 121x454
         RenderBlock {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
         RenderTable {TABLE} at (10,290) size 40x40 [bgcolor=#FFFF77]
-        RenderBlock {P} at (0,346) size 121x18
+        RenderBlock (anonymous) at (0,340) size 121x64
+          RenderHTMLCanvas {CANVAS} at (10,10) size 40x40 [bgcolor=#FFFF77]
+          RenderText {#text} at (0,0) size 0x0
+        RenderBlock {P} at (0,420) size 121x18
           RenderText {#text} at (0,0) size 46x18
             text run at (0,0) width 46: "Lorem "
           RenderInline {SPAN} at (0,0) size 38x18
@@ -31,10 +37,13 @@ layer at (0,0) size 800x440
               text run at (46,0) width 38: "ipsum"
           RenderText {#text} at (84,0) size 37x18
             text run at (84,0) width 37: " dolor"
-      RenderBlock (floating) {DIV} at (262,0) size 121x380
+      RenderBlock (floating) {DIV} at (262,0) size 121x454
         RenderBlock {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
         RenderTable {TABLE} at (10,290) size 40x40 [bgcolor=#FFFF77]
-        RenderBlock {P} at (0,346) size 121x18
+        RenderBlock (anonymous) at (0,340) size 121x64
+          RenderHTMLCanvas {CANVAS} at (10,10) size 40x40 [bgcolor=#FFFF77]
+          RenderText {#text} at (0,0) size 0x0
+        RenderBlock {P} at (0,420) size 121x18
           RenderText {#text} at (0,0) size 46x18
             text run at (0,0) width 46: "Lorem "
           RenderInline {SPAN} at (0,0) size 38x18
@@ -42,10 +51,13 @@ layer at (0,0) size 800x440
               text run at (46,0) width 38: "ipsum"
           RenderText {#text} at (84,0) size 37x18
             text run at (84,0) width 37: " dolor"
-      RenderBlock (floating) {DIV} at (393,0) size 121x380
+      RenderBlock (floating) {DIV} at (393,0) size 121x454
         RenderBlock {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
         RenderTable {TABLE} at (10,290) size 40x40 [bgcolor=#FFFF77]
-        RenderBlock {P} at (0,346) size 121x18
+        RenderBlock (anonymous) at (0,340) size 121x64
+          RenderHTMLCanvas {CANVAS} at (10,10) size 40x40 [bgcolor=#FFFF77]
+          RenderText {#text} at (0,0) size 0x0
+        RenderBlock {P} at (0,420) size 121x18
           RenderText {#text} at (0,0) size 46x18
             text run at (0,0) width 46: "Lorem "
           RenderInline {SPAN} at (0,0) size 38x18
@@ -53,10 +65,13 @@ layer at (0,0) size 800x440
               text run at (46,0) width 38: "ipsum"
           RenderText {#text} at (84,0) size 37x18
             text run at (84,0) width 37: " dolor"
-      RenderBlock (floating) {DIV} at (524,0) size 121x380
+      RenderBlock (floating) {DIV} at (524,0) size 121x454
         RenderBlock {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
         RenderTable {TABLE} at (10,290) size 40x40 [bgcolor=#FFFF77]
-        RenderBlock {P} at (0,346) size 121x18
+        RenderBlock (anonymous) at (0,340) size 121x64
+          RenderHTMLCanvas {CANVAS} at (10,10) size 40x40 [bgcolor=#FFFF77]
+          RenderText {#text} at (0,0) size 0x0
+        RenderBlock {P} at (0,420) size 121x18
           RenderText {#text} at (0,0) size 46x18
             text run at (0,0) width 46: "Lorem "
           RenderInline {SPAN} at (0,0) size 38x18
index 2b30407..2d4c9ae 100644 (file)
@@ -36,6 +36,8 @@
     
         <table class="square shadowTL"></table>
 
+        <canvas class="square shadowTL"></canvas>
+
         <p>
             Lorem <span class="shadowTL">ipsum</span> dolor
         </p>
@@ -63,6 +65,8 @@
     
         <table class="square shadowBL"></table>
 
+        <canvas class="square shadowBL"></canvas>
+
         <p>
             Lorem <span class="shadowBL">ipsum</span> dolor
         </p>
@@ -85,6 +89,8 @@
     
         <table class="square shadowBR"></table>
 
+        <canvas class="square shadowBR"></canvas>
+
         <p>
             Lorem <span class="shadowBR">ipsum</span> dolor
         </p>
     
         <table class="square shadowTR"></table>
 
+        <canvas class="square shadowTR"></canvas>
+
         <p>
             Lorem <span class="shadowTR">ipsum</span> dolor
         </p>
     
         <table class="square shadowB"></table>
 
+        <canvas class="square shadowB"></canvas>
+
         <p>
             Lorem <span class="shadowB">ipsum</span> dolor
         </p>
index 3d58913..00baff3 100644 (file)
@@ -1 +1 @@
-d839f16869876fbbf805b4c983189fd9
\ No newline at end of file
+7a07921bb6b072317145c93724b0c99f
\ No newline at end of file
index 9329495..257afd0 100644 (file)
Binary files a/LayoutTests/fast/repaint/box-shadow-v-expected.png and b/LayoutTests/fast/repaint/box-shadow-v-expected.png differ
index b372515..3b0884e 100644 (file)
@@ -1,12 +1,15 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
-layer at (0,0) size 800x440
+layer at (0,0) size 800x514
   RenderBlock {HTML} at (0,0) size 800x8
     RenderBody {BODY} at (8,8) size 784x0
-      RenderBlock (floating) {DIV} at (0,0) size 121x432
+      RenderBlock (floating) {DIV} at (0,0) size 121x506
         RenderBlock {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
         RenderTable {TABLE} at (10,290) size 40x40 [bgcolor=#FFFF77]
-        RenderBlock {P} at (0,346) size 121x18
+        RenderBlock (anonymous) at (0,340) size 121x64
+          RenderHTMLCanvas {CANVAS} at (10,10) size 40x40 [bgcolor=#FFFF77]
+          RenderText {#text} at (0,0) size 0x0
+        RenderBlock {P} at (0,420) size 121x18
           RenderText {#text} at (0,0) size 46x18
             text run at (0,0) width 46: "Lorem "
           RenderInline {SPAN} at (0,0) size 38x18
@@ -14,16 +17,19 @@ layer at (0,0) size 800x440
               text run at (46,0) width 38: "ipsum"
           RenderText {#text} at (84,0) size 37x18
             text run at (84,0) width 37: " dolor"
-        RenderBlock {P} at (0,380) size 121x36
+        RenderBlock {P} at (0,454) size 121x36
           RenderText {#text} at (0,0) size 84x18
             text run at (0,0) width 84: "Lorem ipsum"
           RenderBR {BR} at (84,0) size 0x18
           RenderText {#text} at (0,18) size 85x18
             text run at (0,18) width 85: "dolor sit amet"
-      RenderBlock (floating) {DIV} at (131,0) size 121x380
+      RenderBlock (floating) {DIV} at (131,0) size 121x454
         RenderBlock {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
         RenderTable {TABLE} at (10,290) size 40x40 [bgcolor=#FFFF77]
-        RenderBlock {P} at (0,346) size 121x18
+        RenderBlock (anonymous) at (0,340) size 121x64
+          RenderHTMLCanvas {CANVAS} at (10,10) size 40x40 [bgcolor=#FFFF77]
+          RenderText {#text} at (0,0) size 0x0
+        RenderBlock {P} at (0,420) size 121x18
           RenderText {#text} at (0,0) size 46x18
             text run at (0,0) width 46: "Lorem "
           RenderInline {SPAN} at (0,0) size 38x18
@@ -31,10 +37,13 @@ layer at (0,0) size 800x440
               text run at (46,0) width 38: "ipsum"
           RenderText {#text} at (84,0) size 37x18
             text run at (84,0) width 37: " dolor"
-      RenderBlock (floating) {DIV} at (262,0) size 121x380
+      RenderBlock (floating) {DIV} at (262,0) size 121x454
         RenderBlock {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
         RenderTable {TABLE} at (10,290) size 40x40 [bgcolor=#FFFF77]
-        RenderBlock {P} at (0,346) size 121x18
+        RenderBlock (anonymous) at (0,340) size 121x64
+          RenderHTMLCanvas {CANVAS} at (10,10) size 40x40 [bgcolor=#FFFF77]
+          RenderText {#text} at (0,0) size 0x0
+        RenderBlock {P} at (0,420) size 121x18
           RenderText {#text} at (0,0) size 46x18
             text run at (0,0) width 46: "Lorem "
           RenderInline {SPAN} at (0,0) size 38x18
@@ -42,10 +51,13 @@ layer at (0,0) size 800x440
               text run at (46,0) width 38: "ipsum"
           RenderText {#text} at (84,0) size 37x18
             text run at (84,0) width 37: " dolor"
-      RenderBlock (floating) {DIV} at (393,0) size 121x380
+      RenderBlock (floating) {DIV} at (393,0) size 121x454
         RenderBlock {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
         RenderTable {TABLE} at (10,290) size 40x40 [bgcolor=#FFFF77]
-        RenderBlock {P} at (0,346) size 121x18
+        RenderBlock (anonymous) at (0,340) size 121x64
+          RenderHTMLCanvas {CANVAS} at (10,10) size 40x40 [bgcolor=#FFFF77]
+          RenderText {#text} at (0,0) size 0x0
+        RenderBlock {P} at (0,420) size 121x18
           RenderText {#text} at (0,0) size 46x18
             text run at (0,0) width 46: "Lorem "
           RenderInline {SPAN} at (0,0) size 38x18
@@ -53,10 +65,13 @@ layer at (0,0) size 800x440
               text run at (46,0) width 38: "ipsum"
           RenderText {#text} at (84,0) size 37x18
             text run at (84,0) width 37: " dolor"
-      RenderBlock (floating) {DIV} at (524,0) size 121x380
+      RenderBlock (floating) {DIV} at (524,0) size 121x454
         RenderBlock {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
         RenderTable {TABLE} at (10,290) size 40x40 [bgcolor=#FFFF77]
-        RenderBlock {P} at (0,346) size 121x18
+        RenderBlock (anonymous) at (0,340) size 121x64
+          RenderHTMLCanvas {CANVAS} at (10,10) size 40x40 [bgcolor=#FFFF77]
+          RenderText {#text} at (0,0) size 0x0
+        RenderBlock {P} at (0,420) size 121x18
           RenderText {#text} at (0,0) size 46x18
             text run at (0,0) width 46: "Lorem "
           RenderInline {SPAN} at (0,0) size 38x18
index d38e5c8..16899d8 100644 (file)
@@ -34,6 +34,8 @@
     
         <table class="square shadowTL"></table>
 
+        <canvas class="square shadowTL"></canvas>
+
         <p>
             Lorem <span class="shadowTL">ipsum</span> dolor
         </p>
@@ -61,6 +63,8 @@
     
         <table class="square shadowBL"></table>
 
+        <canvas class="square shadowBL"></canvas>
+
         <p>
             Lorem <span class="shadowBL">ipsum</span> dolor
         </p>
@@ -83,6 +87,8 @@
     
         <table class="square shadowBR"></table>
 
+        <canvas class="square shadowBR"></canvas>
+
         <p>
             Lorem <span class="shadowBR">ipsum</span> dolor
         </p>
     
         <table class="square shadowTR"></table>
 
+        <canvas class="square shadowTR"></canvas>
+
         <p>
             Lorem <span class="shadowTR">ipsum</span> dolor
         </p>
     
         <table class="square shadowB"></table>
 
+        <canvas class="square shadowB"></canvas>
+
         <p>
             Lorem <span class="shadowB">ipsum</span> dolor
         </p>
index af9f8bb..1cc5cc0 100644 (file)
@@ -2,6 +2,36 @@
 
         Reviewed by Dave Hyatt.
 
+        - fix http://bugs.webkit.org/show_bug.cgi?id=13873
+          Incomplete repaint of replaced element's box shadow
+
+        Tests: fast/repaint/box-shadow-h.html
+               fast/repaint/box-shadow-v.html
+
+        * rendering/RenderHTMLCanvas.cpp:
+        (WebCore::RenderHTMLCanvas::layout): Added a call to adjustOverflowForBoxShadow().
+        * rendering/RenderImage.cpp:
+        (WebCore::RenderImage::layout): Ditto.
+        * rendering/RenderPartObject.cpp:
+        (WebCore::RenderPartObject::layout): Ditto.
+        * rendering/RenderReplaced.cpp:
+        (WebCore::RenderReplaced::RenderReplaced): Initialize m_hasOverflow.
+        (WebCore::RenderReplaced::~RenderReplaced): Added. Removes this object from the
+        overflow rect map if it has overflow.
+        (WebCore::RenderReplaced::shouldPaint): Account for overflow.
+        (WebCore::RenderReplaced::adjustOverflowForBoxShadow): Added. Creates or
+        removes an entry for this object in the global overflow rect map.
+        (WebCore::RenderReplaced::overflowHeight): Added.
+        (WebCore::RenderReplaced::overflowWidth): Added.
+        (WebCore::RenderReplaced::overflowLeft): Added.
+        (WebCore::RenderReplaced::overflowTop): Added.
+        (WebCore::RenderReplaced::overflowRect): Added.
+        * rendering/RenderReplaced.h:
+
+2007-07-13  Mitz Pettel  <mitz@webkit.org>
+
+        Reviewed by Dave Hyatt.
+
         - fix http://bugs.webkit.org/show_bug.cgi?id=14395
           When a <p> is inside <li> two <BR>s are rendered
 
index fbe46cc..ef4eb7b 100644 (file)
@@ -88,6 +88,7 @@ void RenderHTMLCanvas::layout()
     }
     calcWidth();
     calcHeight();
+    adjustOverflowForBoxShadow();
     if (checkForRepaint)
         repaintAfterLayoutIfNeeded(oldBounds, oldOutlineBox);
 
index 8f34ea9..8dcf8b1 100644 (file)
@@ -307,6 +307,7 @@ void RenderImage::layout()
 
     calcWidth();
     calcHeight();
+    adjustOverflowForBoxShadow();
 
     if (checkForRepaint)
         repaintAfterLayoutIfNeeded(oldBounds, oldOutlineBox);
index 88ac6d0..b5c0770 100644 (file)
@@ -249,6 +249,7 @@ void RenderPartObject::layout()
 
     calcWidth();
     calcHeight();
+    adjustOverflowForBoxShadow();
 
     RenderPart::layout();
 
index 64e2ed9..4228edb 100644 (file)
@@ -30,10 +30,14 @@ using namespace std;
 
 namespace WebCore {
 
+typedef WTF::HashMap<const RenderReplaced*, IntRect> OverflowRectMap;
+static OverflowRectMap* gOverflowRectMap = 0;
+
 RenderReplaced::RenderReplaced(Node* node)
     : RenderBox(node)
     , m_intrinsicSize(300, 150)
     , m_selectionState(SelectionNone)
+    , m_hasOverflow(false)
 {
     setReplaced(true);
 }
@@ -42,10 +46,17 @@ RenderReplaced::RenderReplaced(Node* node, const IntSize& intrinsicSize)
     : RenderBox(node)
     , m_intrinsicSize(intrinsicSize)
     , m_selectionState(SelectionNone)
+    , m_hasOverflow(false)
 {
     setReplaced(true);
 }
 
+RenderReplaced::~RenderReplaced()
+{
+    if (m_hasOverflow)
+        gOverflowRectMap->remove(this);
+}
+
 bool RenderReplaced::shouldPaint(PaintInfo& paintInfo, int& tx, int& ty)
 {
     if (paintInfo.phase != PaintPhaseForeground && paintInfo.phase != PaintPhaseOutline && paintInfo.phase != PaintPhaseSelfOutline 
@@ -63,8 +74,8 @@ bool RenderReplaced::shouldPaint(PaintInfo& paintInfo, int& tx, int& ty)
     int currentTY = ty + m_y;
 
     // Early exit if the element touches the edges.
-    int top = currentTY;
-    int bottom = currentTY + m_height;
+    int top = currentTY + overflowTop();
+    int bottom = currentTY + overflowHeight();
     if (isSelected() && m_inlineBoxWrapper) {
         int selTop = ty + m_inlineBoxWrapper->root()->selectionTop();
         int selBottom = ty + selTop + m_inlineBoxWrapper->root()->selectionHeight();
@@ -73,7 +84,7 @@ bool RenderReplaced::shouldPaint(PaintInfo& paintInfo, int& tx, int& ty)
     }
     
     int os = 2 * maximalOutlineSize(paintInfo.phase);
-    if (currentTX >= paintInfo.rect.right() + os || currentTX + m_width <= paintInfo.rect.x() - os)
+    if (currentTX + overflowLeft() >= paintInfo.rect.right() + os || currentTX + overflowWidth() <= paintInfo.rect.x() - os)
         return false;
     if (top >= paintInfo.rect.bottom() + os || bottom <= paintInfo.rect.y() - os)
         return false;
@@ -225,4 +236,70 @@ void RenderReplaced::setIntrinsicSize(const IntSize& size)
     m_intrinsicSize = size;
 }
 
+void RenderReplaced::adjustOverflowForBoxShadow()
+{
+    if (ShadowData* boxShadow = style()->boxShadow()) {
+        if (!gOverflowRectMap)
+            gOverflowRectMap = new OverflowRectMap();
+
+        IntRect shadow = borderBox();
+        shadow.move(boxShadow->x, boxShadow->y);
+        shadow.inflate(boxShadow->blur);
+        shadow.unite(borderBox());
+
+        gOverflowRectMap->set(this, shadow);
+        m_hasOverflow = true;
+        return;
+    }
+
+    if (m_hasOverflow) {
+        gOverflowRectMap->remove(this);
+        m_hasOverflow = false;
+    }
+}
+
+int RenderReplaced::overflowHeight(bool includeInterior) const
+{
+    if (m_hasOverflow) {
+        IntRect *r = &gOverflowRectMap->find(this)->second;
+        return r->height() + r->y();
+    }
+
+    return height();
+}
+
+int RenderReplaced::overflowWidth(bool includeInterior) const
+{
+    if (m_hasOverflow) {
+        IntRect *r = &gOverflowRectMap->find(this)->second;
+        return r->width() + r->x();
+    }
+
+    return width();
+}
+
+int RenderReplaced::overflowLeft(bool includeInterior) const
+{
+    if (m_hasOverflow)
+        return gOverflowRectMap->get(this).x();
+
+    return 0;
+}
+
+int RenderReplaced::overflowTop(bool includeInterior) const
+{
+    if (m_hasOverflow)
+        return gOverflowRectMap->get(this).y();
+
+    return 0;
+}
+
+IntRect RenderReplaced::overflowRect(bool includeInterior) const
+{
+    if (m_hasOverflow)
+        return gOverflowRectMap->find(this)->second;
+
+    return borderBox();
+}
+
 }
index bd77122..56beb95 100644 (file)
@@ -30,6 +30,7 @@ class RenderReplaced : public RenderBox {
 public:
     RenderReplaced(Node*);
     RenderReplaced(Node*, const IntSize& intrinsicSize);
+    virtual ~RenderReplaced();
 
     virtual const char* renderName() const { return "RenderReplaced"; }
 
@@ -42,6 +43,12 @@ public:
 
     virtual IntSize intrinsicSize() const;
 
+    virtual int overflowHeight(bool includeInterior = true) const;
+    virtual int overflowWidth(bool includeInterior = true) const;
+    virtual int overflowLeft(bool includeInterior = true) const;
+    virtual int overflowTop(bool includeInterior = true) const;
+    virtual IntRect overflowRect(bool includeInterior = true) const;
+
     virtual int caretMinOffset() const;
     virtual int caretMaxOffset() const;
     virtual unsigned caretMaxRenderedOffset() const;
@@ -58,11 +65,13 @@ protected:
     void setIntrinsicSize(const IntSize&);
 
     bool shouldPaint(PaintInfo&, int& tx, int& ty);
+    void adjustOverflowForBoxShadow();
 
 private:
     IntSize m_intrinsicSize;
     
     unsigned m_selectionState : 3; // SelectionState
+    bool m_hasOverflow : 1;
 };
 
 }