2010-08-27 Patrick Gansterer <paroga@paroga.com>
Reviewed by Nikolas Zimmermann.
RenderImage::imageChanged invalidates wrong area
https://bugs.webkit.org/show_bug.cgi?id=43779
At the moment RenderSVGImage inherits from RenderImage, which makes non-SVG compatible
assumptions about repainting, and thus has to be fixed to inherit from RenderSVGModelObject.
This patch moves the CachedImage from RenderImage into a separate class.
The new class contains the common behavior of RenderImage and RenderSVGImage.
An additional patch will remove the inheritance of RenderImage at RenderSVGImage.
* Android.mk:
* CMakeLists.txt:
* GNUmakefile.am:
* WebCore.gypi:
* WebCore.pro:
* WebCore.vcproj/WebCore.vcproj:
* WebCore.xcodeproj/project.pbxproj:
* html/HTMLEmbedElement.cpp:
(WebCore::HTMLEmbedElement::createRenderer):
(WebCore::HTMLEmbedElement::attach):
* html/HTMLImageElement.cpp:
(WebCore::HTMLImageElement::createRenderer):
(WebCore::HTMLImageElement::attach):
* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::createRenderer):
(WebCore::HTMLInputElement::attach):
* html/HTMLObjectElement.cpp:
(WebCore::HTMLObjectElement::createRenderer):
* html/HTMLVideoElement.cpp:
(WebCore::HTMLVideoElement::attach):
(WebCore::HTMLVideoElement::parseMappedAttribute):
* loader/ImageLoader.cpp:
(WebCore::ImageLoader::setImage):
(WebCore::ImageLoader::updateFromElement):
(WebCore::ImageLoader::renderImageResource):
(WebCore::ImageLoader::updateRenderer):
* loader/ImageLoader.h:
* rendering/RenderImage.cpp:
(WebCore::RenderImage::RenderImage):
(WebCore::RenderImage::~RenderImage):
(WebCore::RenderImage::setImageResource):
(WebCore::RenderImage::imageChanged):
(WebCore::RenderImage::notifyFinished):
(WebCore::RenderImage::paintReplaced):
(WebCore::RenderImage::paintIntoRect):
(WebCore::RenderImage::minimumReplacedHeight):
(WebCore::RenderImage::calcReplacedWidth):
(WebCore::RenderImage::calcReplacedHeight):
(WebCore::RenderImage::calcAspectRatioWidth):
(WebCore::RenderImage::calcAspectRatioHeight):
* rendering/RenderImage.h:
(WebCore::RenderImage::imageResource):
(WebCore::RenderImage::cachedImage):
(WebCore::RenderImage::intrinsicSizeChanged):
(WebCore::toRenderImage):
* rendering/RenderImageGeneratedContent.cpp: Removed.
* rendering/RenderImageGeneratedContent.h: Removed.
* rendering/RenderImageResource.cpp: Added.
(WebCore::RenderImageResource::RenderImageResource):
(WebCore::RenderImageResource::~RenderImageResource):
(WebCore::RenderImageResource::initialize):
(WebCore::RenderImageResource::shutdown):
(WebCore::RenderImageResource::setCachedImage):
(WebCore::RenderImageResource::resetAnimation):
(WebCore::RenderImageResource::setImageContainerSize):
(WebCore::RenderImageResource::nullImage):
* rendering/RenderImageResource.h: Added.
(WebCore::RenderImageResource::create):
(WebCore::RenderImageResource::cachedImage):
(WebCore::RenderImageResource::hasImage):
(WebCore::RenderImageResource::image):
(WebCore::RenderImageResource::errorOccurred):
(WebCore::RenderImageResource::usesImageContainerSize):
(WebCore::RenderImageResource::imageHasRelativeWidth):
(WebCore::RenderImageResource::imageHasRelativeHeight):
(WebCore::RenderImageResource::imageSize):
(WebCore::RenderImageResource::imagePtr):
* rendering/RenderImageResourceStyleImage.cpp: Added.
(WebCore::RenderImageResourceStyleImage::RenderImageResourceStyleImage):
(WebCore::RenderImageResourceStyleImage::~RenderImageResourceStyleImage):
(WebCore::RenderImageResourceStyleImage::initialize):
(WebCore::RenderImageResourceStyleImage::shutdown):
* rendering/RenderImageResourceStyleImage.h: Added.
(WebCore::RenderImageResourceStyleImage::create):
(WebCore::RenderImageResourceStyleImage::image):
(WebCore::RenderImageResourceStyleImage::errorOccurred):
(WebCore::RenderImageResourceStyleImage::setImageContainerSize):
(WebCore::RenderImageResourceStyleImage::usesImageContainerSize):
(WebCore::RenderImageResourceStyleImage::imageHasRelativeWidth):
(WebCore::RenderImageResourceStyleImage::imageHasRelativeHeight):
(WebCore::RenderImageResourceStyleImage::imageSize):
(WebCore::RenderImageResourceStyleImage::imagePtr):
* rendering/RenderMedia.cpp:
(WebCore::RenderMedia::RenderMedia):
* rendering/RenderObject.cpp:
(WebCore::RenderObject::createObject):
* rendering/RenderObjectChildList.cpp:
(WebCore::RenderObjectChildList::updateBeforeAfterContent):
* rendering/RenderSVGImage.cpp:
(WebCore::RenderSVGImage::RenderSVGImage):
(WebCore::RenderSVGImage::layout):
(WebCore::RenderSVGImage::paint):
* rendering/RenderVideo.cpp:
(WebCore::RenderVideo::calculateIntrinsicSize):
* svg/SVGImageElement.cpp:
(WebCore::SVGImageElement::attach):
* wml/WMLImageElement.cpp:
(WebCore::WMLImageElement::createRenderer):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@66223 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/rendering/RenderImageResourceStyleImage.cpp b/WebCore/rendering/RenderImageResourceStyleImage.cpp
new file mode 100644
index 0000000..7f41984
--- /dev/null
+++ b/WebCore/rendering/RenderImageResourceStyleImage.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 1999 Lars Knoll <knoll@kde.org>
+ * Copyright (C) 1999 Antti Koivisto <koivisto@kde.org>
+ * Copyright (C) 2000 Dirk Mueller <mueller@kde.org>
+ * Copyright (C) 2006 Allan Sandfeld Jensen <kde@carewolf.com>
+ * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
+ * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "RenderImageResourceStyleImage.h"
+
+#include "RenderObject.h"
+#include "StyleCachedImage.h"
+
+namespace WebCore {
+
+RenderImageResourceStyleImage::RenderImageResourceStyleImage(StyleImage* styleImage)
+ : m_styleImage(styleImage)
+{
+ ASSERT(m_styleImage);
+}
+
+RenderImageResourceStyleImage::~RenderImageResourceStyleImage()
+{
+}
+
+void RenderImageResourceStyleImage::initialize(RenderObject* renderer)
+{
+ RenderImageResource::initialize(renderer);
+
+ if (m_styleImage->isCachedImage())
+ m_cachedImage = static_cast<StyleCachedImage*>(m_styleImage.get())->cachedImage();
+
+ m_styleImage->addClient(m_renderer);
+}
+
+void RenderImageResourceStyleImage::shutdown()
+{
+ ASSERT(m_renderer);
+ m_styleImage->removeClient(m_renderer);
+ m_cachedImage = 0;
+}
+
+} // namespace WebCore