2008-04-16  David Hyatt  <hyatt@apple.com>

        Add support for the ability to draw directly into CSS images using CanvasRenderingContext2D.

        Reviewed by olliej

        Added fast/canvas/canvas-bg.html

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/CSSCanvasValue.cpp: Added.
        (WebCore::CSSCanvasValue::~CSSCanvasValue):
        (WebCore::CSSCanvasValue::cssText):
        (WebCore::CSSCanvasValue::canvasChanged):
        (WebCore::CSSCanvasValue::canvasResized):
        (WebCore::CSSCanvasValue::fixedSize):
        (WebCore::CSSCanvasValue::element):
        (WebCore::CSSCanvasValue::image):
        * css/CSSCanvasValue.h: Added.
        (WebCore::CSSCanvasValue::CSSCanvasValue):
        (WebCore::CSSCanvasValue::isFixedSize):
        (WebCore::CSSCanvasValue::setName):
        * css/CSSGradientValue.cpp:
        * css/CSSGradientValue.h:
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::generatedImage):
        * css/CSSImageGeneratorValue.h:
        (WebCore::CSSImageGeneratorValue::isFixedSize):
        (WebCore::CSSImageGeneratorValue::fixedSize):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseBackgroundImage):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::parseCanvas):
        * css/CSSParser.h:
        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasContext):
        (WebCore::Document::getCSSCanvasElement):
        * dom/Document.h:
        * dom/Document.idl:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::reset):
        * html/HTMLCanvasElement.h:
        (WebCore::HTMLCanvasElement::setSize):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calculateBackgroundSize):
        (WebCore::RenderBox::imageChanged):
        * rendering/RenderBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::imagePtr):
        (WebCore::RenderImage::intrinsicSizeChanged):
        * rendering/RenderImageGeneratedContent.h:
        (WebCore::RenderImageGeneratedContent::imageSize):
        (WebCore::RenderImageGeneratedContent::imagePtr):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::layout):
        (WebCore::RenderListMarker::imageChanged):
        (WebCore::RenderListMarker::calcPrefWidths):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/RenderListMarker.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintBorderImage):
        (WebCore::RenderObject::imageChanged):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::imageChanged):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):
        * rendering/RenderSVGImage.h:
        * rendering/RenderStyle.cpp:
        (WebCore::StyleCachedImage::imageSize):
        (WebCore::StyleGeneratedImage::imageSize):
        * rendering/RenderStyle.h:
        (WebCore::StyleCachedImage::data):
        (WebCore::StyleGeneratedImage::StyleGeneratedImage):
        (WebCore::StyleGeneratedImage::data):
        (WebCore::StyleGeneratedImage::imageHasRelativeWidth):
        (WebCore::StyleGeneratedImage::imageHasRelativeHeight):
        (WebCore::StyleGeneratedImage::usesImageContainerSize):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::imageChanged):
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::imageChanged):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::imageChanged):
        * rendering/RenderTableSection.h:



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31981 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/html/HTMLCanvasElement.h b/WebCore/html/HTMLCanvasElement.h
index 5e1c620..8471b76 100644
--- a/WebCore/html/HTMLCanvasElement.h
+++ b/WebCore/html/HTMLCanvasElement.h
@@ -86,7 +86,16 @@
     virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
 
     IntSize size() const { return m_size; }
-    void setSize(const IntSize& size) { setWidth(size.width()); setHeight(size.height()); }
+    void setSize(const IntSize& size)
+    { 
+        if (size == m_size)
+            return;
+        m_ignoreReset = true; 
+        setWidth(size.width());
+        setHeight(size.height());
+        m_ignoreReset = false;
+        reset();
+    }
 
     void willDraw(const FloatRect&);
 
@@ -125,6 +134,7 @@
     CanvasObserver* m_observer;
 
     bool m_originClean;
+    bool m_ignoreReset;
 
     // m_createdImageBuffer means we tried to malloc the buffer.  We didn't necessarily get it.
     mutable bool m_createdImageBuffer;