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;