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 9467c0b603971c48d309812f6666c0d6e7244384..3203ec3677d3db1f8f3e7b096f7b50ac48796a3b 100644 (file)
@@ -1,3 +1,19 @@
+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:
+
 2007-07-13  Mitz Pettel  <mitz@webkit.org>
 
         Reviewed by Dave Hyatt.
index c3b469e49923e0b7902313295a92921e2bcb161d..b6879a79051a8db8244d51a0dc26c7fae9da4ef0 100644 (file)
@@ -1 +1 @@
-31e320f6d8a40f1e95f9b4f56a4205da
\ No newline at end of file
+ed29b201652e6703d6dfdb29fac2c587
\ No newline at end of file
index 3687ea0a863852f2f0337e03ab358bc1517109fd..bc16d83a2d9afdbc61860525498c2cea7e98d12f 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 b3725156317f06cd4ff0a705083dfc98ca43474c..3b0884e12eff7cdeb080a7b87622ed36a0aaa734 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 2b304071502681f27eb5e3005b8baf202895a014..2d4c9aea898187235ed39a5e85afe9a321915291 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 3d58913f8889bfd4cadb38e15579c4597270d182..00baff35253e005e10cb7a9ee92f7ce2e1a3df78 100644 (file)
@@ -1 +1 @@
-d839f16869876fbbf805b4c983189fd9
\ No newline at end of file
+7a07921bb6b072317145c93724b0c99f
\ No newline at end of file
index 9329495fa9d458a73030caf8228194ddbef58713..257afd0a3ba2719200a993950d063bce574ed35a 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 b3725156317f06cd4ff0a705083dfc98ca43474c..3b0884e12eff7cdeb080a7b87622ed36a0aaa734 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 d38e5c8af93583feeac676b485ad3a85a28b9d5b..16899d804e46ca02fc504569cac0c15a6a086a79 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 af9f8bbe59be7af7eb05faab724ebc1dbee72905..1cc5cc0339706a231769a143b7bb352edc892b0b 100644 (file)
@@ -1,3 +1,33 @@
+2007-07-13  Mitz Pettel  <mitz@webkit.org>
+
+        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.
index fbe46ccd4888f24c16e7929615f9644f5f648c11..ef4eb7ba2296a0fad6991ed8766c8f280e964830 100644 (file)
@@ -88,6 +88,7 @@ void RenderHTMLCanvas::layout()
     }
     calcWidth();
     calcHeight();
+    adjustOverflowForBoxShadow();
     if (checkForRepaint)
         repaintAfterLayoutIfNeeded(oldBounds, oldOutlineBox);
 
index 8f34ea9cdeb54d9c488ef38bc46cfe034e0f006c..8dcf8b1ee3b39db1b3e0102c4d115fb226aeb765 100644 (file)
@@ -307,6 +307,7 @@ void RenderImage::layout()
 
     calcWidth();
     calcHeight();
+    adjustOverflowForBoxShadow();
 
     if (checkForRepaint)
         repaintAfterLayoutIfNeeded(oldBounds, oldOutlineBox);
index 88ac6d007a952c7850d8135a5e44f955d43f4ff7..b5c07703fc65ff09af302fb70aa4fb9f813d2885 100644 (file)
@@ -249,6 +249,7 @@ void RenderPartObject::layout()
 
     calcWidth();
     calcHeight();
+    adjustOverflowForBoxShadow();
 
     RenderPart::layout();
 
index 64e2ed98f8f5aec99d525097f92728daea9fc051..4228edbebe2684f0f2edf570cc9a20f6015d84ad 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 bd77122a2ac286c464321c2714826d236c2bceb9..56beb9522868719c0cecaf1537ab80933003edbe 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;
 };
 
 }