Move RenderObject::shouldRespectImageOrientation to RenderElement.
authorzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Sep 2016 21:57:33 +0000 (21:57 +0000)
committerzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Sep 2016 21:57:33 +0000 (21:57 +0000)
https://bugs.webkit.org/show_bug.cgi?id=162028

Reviewed by Antti Koivisto.

Tighten the type for imageSizeForRenderer/canRender so that RenderObject::shouldRespectImageOrientation could
be moved to RenderElement.

No change in functionality.

* loader/cache/CachedImage.cpp:
(WebCore::CachedImage::imageSizeForRenderer):
* loader/cache/CachedImage.h:
* rendering/RenderElement.cpp:
(WebCore::RenderElement::shouldRespectImageOrientation):
* rendering/RenderElement.h:
* rendering/RenderObject.cpp:
(WebCore::RenderObject::shouldRespectImageOrientation): Deleted.
* rendering/RenderObject.h:
* rendering/style/StyleCachedImage.cpp:
(WebCore::StyleCachedImage::canRender):
* rendering/style/StyleCachedImage.h:
* rendering/style/StyleImage.h:
(WebCore::StyleImage::canRender):

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

Source/WebCore/ChangeLog
Source/WebCore/loader/cache/CachedImage.cpp
Source/WebCore/loader/cache/CachedImage.h
Source/WebCore/platform/DragImage.cpp
Source/WebCore/rendering/RenderElement.cpp
Source/WebCore/rendering/RenderElement.h
Source/WebCore/rendering/RenderObject.cpp
Source/WebCore/rendering/RenderObject.h
Source/WebCore/rendering/style/StyleCachedImage.cpp
Source/WebCore/rendering/style/StyleCachedImage.h
Source/WebCore/rendering/style/StyleImage.h

index 6157f5b..c0f99c3 100644 (file)
@@ -1,3 +1,30 @@
+2016-09-15  Zalan Bujtas  <zalan@apple.com>
+
+        Move RenderObject::shouldRespectImageOrientation to RenderElement.
+        https://bugs.webkit.org/show_bug.cgi?id=162028
+
+        Reviewed by Antti Koivisto.
+
+        Tighten the type for imageSizeForRenderer/canRender so that RenderObject::shouldRespectImageOrientation could
+        be moved to RenderElement.
+
+        No change in functionality.
+
+        * loader/cache/CachedImage.cpp:
+        (WebCore::CachedImage::imageSizeForRenderer):
+        * loader/cache/CachedImage.h:
+        * rendering/RenderElement.cpp:
+        (WebCore::RenderElement::shouldRespectImageOrientation):
+        * rendering/RenderElement.h:
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::shouldRespectImageOrientation): Deleted.
+        * rendering/RenderObject.h:
+        * rendering/style/StyleCachedImage.cpp:
+        (WebCore::StyleCachedImage::canRender):
+        * rendering/style/StyleCachedImage.h:
+        * rendering/style/StyleImage.h:
+        (WebCore::StyleImage::canRender):
+
 2016-09-15  Anders Carlsson  <andersca@apple.com>
 
         Fix build.
index 8f5725c..1914392 100644 (file)
@@ -277,7 +277,7 @@ bool CachedImage::imageHasRelativeHeight() const
     return false;
 }
 
-LayoutSize CachedImage::imageSizeForRenderer(const RenderObject* renderer, float multiplier, SizeType sizeType)
+LayoutSize CachedImage::imageSizeForRenderer(const RenderElement* renderer, float multiplier, SizeType sizeType)
 {
     if (!m_image)
         return LayoutSize();
index a0db94d..12f0694 100644 (file)
@@ -64,7 +64,7 @@ public:
     std::pair<Image*, float> brokenImage(float deviceScaleFactor) const; // Returns an image and the image's resolution scale factor.
     bool willPaintBrokenImage() const; 
 
-    bool canRender(const RenderObject* renderer, float multiplier) { return !errorOccurred() && !imageSizeForRenderer(renderer, multiplier).isEmpty(); }
+    bool canRender(const RenderElement* renderer, float multiplier) { return !errorOccurred() && !imageSizeForRenderer(renderer, multiplier).isEmpty(); }
 
     void setContainerSizeForRenderer(const CachedImageClient*, const LayoutSize&, float);
     bool usesImageContainerSize() const;
@@ -79,7 +79,7 @@ public:
         IntrinsicSize
     };
     // This method takes a zoom multiplier that can be used to increase the natural size of the image by the zoom.
-    LayoutSize imageSizeForRenderer(const RenderObject*, float multiplier, SizeType = UsedSize); // returns the size of the complete image.
+    LayoutSize imageSizeForRenderer(const RenderElement*, float multiplier, SizeType = UsedSize); // returns the size of the complete image.
     void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio);
 
     bool isManuallyCached() const { return m_isManuallyCached; }
index 5290deb..d121d23 100644 (file)
@@ -31,6 +31,7 @@
 #include "FrameView.h"
 #include "ImageBuffer.h"
 #include "Range.h"
+#include "RenderElement.h"
 #include "RenderObject.h"
 #include "RenderView.h"
 
@@ -97,11 +98,12 @@ static DragImageRef createDragImageFromSnapshot(std::unique_ptr<ImageBuffer> sna
 #if ENABLE(CSS_IMAGE_ORIENTATION)
     if (node) {
         RenderObject* renderer = node->renderer();
-        if (!renderer)
+        if (!renderer || !is<RenderElement>(renderer))
             return nullptr;
 
-        orientation.setRespectImageOrientation(renderer->shouldRespectImageOrientation());
-        orientation.setImageOrientationEnum(renderer->style().imageOrientation());
+        auto& renderElement = downcast<RenderElement>(*renderer);
+        orientation.setRespectImageOrientation(renderElement.shouldRespectImageOrientation());
+        orientation.setImageOrientationEnum(renderElement.style().imageOrientation());
     }
 #else
     UNUSED_PARAM(node);
index 8250186..815690c 100644 (file)
@@ -37,6 +37,7 @@
 #include "HTMLAnchorElement.h"
 #include "HTMLBodyElement.h"
 #include "HTMLHtmlElement.h"
+#include "HTMLImageElement.h"
 #include "HTMLNames.h"
 #include "Logging.h"
 #include "Page.h"
@@ -2191,6 +2192,18 @@ bool RenderElement::checkForRepaintDuringLayout() const
     return !document().view()->needsFullRepaint() && everHadLayout() && !hasSelfPaintingLayer();
 }
 
+RespectImageOrientationEnum RenderElement::shouldRespectImageOrientation() const
+{
+#if USE(CG) || USE(CAIRO)
+    // This can only be enabled for ports which honor the orientation flag in their drawing code.
+    if (document().isImageDocument())
+        return RespectImageOrientation;
+#endif
+    // Respect the image's orientation if it's being used as a full-page image or it's
+    // an <img> and the setting to respect it everywhere is set.
+    return (frame().settings().shouldRespectImageOrientation() && is<HTMLImageElement>(element())) ? RespectImageOrientation : DoNotRespectImageOrientation;
+}
+
 #if ENABLE(IOS_TEXT_AUTOSIZING)
 static RenderObject::BlockContentHeightType includeNonFixedHeight(const RenderObject& renderer)
 {
index 0c875d7..b7782bb 100644 (file)
@@ -227,6 +227,8 @@ public:
     RenderBlock* containingBlockForFixedPosition() const;
     RenderBlock* containingBlockForAbsolutePosition() const;
 
+    RespectImageOrientationEnum shouldRespectImageOrientation() const;
+
 protected:
     enum BaseTypeFlag {
         RenderLayerModelObjectFlag  = 1 << 0,
index ba1d5ee..c0bbb5f 100644 (file)
@@ -1345,18 +1345,6 @@ bool RenderObject::isRooted() const
     return isDescendantOf(&view());
 }
 
-RespectImageOrientationEnum RenderObject::shouldRespectImageOrientation() const
-{
-#if USE(CG) || USE(CAIRO)
-    // This can only be enabled for ports which honor the orientation flag in their drawing code.
-    if (document().isImageDocument())
-        return RespectImageOrientation;
-#endif
-    // Respect the image's orientation if it's being used as a full-page image or it's
-    // an <img> and the setting to respect it everywhere is set.
-    return (frame().settings().shouldRespectImageOrientation() && is<HTMLImageElement>(node())) ? RespectImageOrientation : DoNotRespectImageOrientation;
-}
-
 static inline RenderElement* containerForElement(const RenderObject& renderer, const RenderLayerModelObject* repaintContainer, bool* repaintContainerSkipped)
 {
     // This method is extremely similar to containingBlock(), but with a few notable
index 055972b..bfdc90f 100644 (file)
@@ -793,8 +793,6 @@ public:
         return outlineBoundsForRepaint(nullptr);
     }
 
-    RespectImageOrientationEnum shouldRespectImageOrientation() const;
-
 protected:
     //////////////////////////////////////////
     // Helper functions. Dangerous to use!
index b181460..3d8249d 100644 (file)
@@ -101,7 +101,7 @@ PassRefPtr<CSSValue> StyleCachedImage::cssValue() const
     return const_cast<CSSValue*>(m_cssValue.ptr());
 }
 
-bool StyleCachedImage::canRender(const RenderObject* renderer, float multiplier) const
+bool StyleCachedImage::canRender(const RenderElement* renderer, float multiplier) const
 {
     if (!m_cachedImage)
         return false;
index e3361db..d69e84f 100644 (file)
@@ -48,7 +48,7 @@ public:
 
     PassRefPtr<CSSValue> cssValue() const override;
     
-    bool canRender(const RenderObject*, float multiplier) const override;
+    bool canRender(const RenderElement*, float multiplier) const override;
     bool isPending() const override;
     void load(CachedResourceLoader&, const ResourceLoaderOptions&) override;
     bool isLoaded() const override;
index 3454297..e6d3a07 100644 (file)
@@ -51,7 +51,7 @@ public:
 
     virtual PassRefPtr<CSSValue> cssValue() const = 0;
 
-    virtual bool canRender(const RenderObject*, float /*multiplier*/) const { return true; }
+    virtual bool canRender(const RenderElement*, float /*multiplier*/) const { return true; }
     virtual bool isPending() const = 0;
     virtual void load(CachedResourceLoader&, const ResourceLoaderOptions&) = 0;
     virtual bool isLoaded() const { return true; }