Title: [102043] trunk/Source
Revision
102043
Author
[email protected]
Date
2011-12-05 13:55:56 -0800 (Mon, 05 Dec 2011)

Log Message

[chromium] Set opaque flag for ImageLayerChromium
https://bugs.webkit.org/show_bug.cgi?id=72964

Patch by Dana Jansens <[email protected]> on 2011-12-05
Reviewed by James Robinson.

Source/WebCore:

New unit test in tests/ImageLayerChromiumTest.cpp.

* platform/graphics/chromium/GraphicsLayerChromium.cpp:
(WebCore::GraphicsLayerChromium::setContentsToImage):
* platform/graphics/chromium/GraphicsLayerChromium.h:
(WebCore::GraphicsLayerChromium::contentsLayer):
* platform/graphics/chromium/ImageLayerChromium.cpp:
(WebCore::ImageLayerChromium::setContents):

Source/WebKit/chromium:

* WebKit.gypi:
* tests/ImageLayerChromiumTest.cpp: Added.
(WebCore::MockGraphicsLayerClient::notifyAnimationStarted):
(WebCore::MockGraphicsLayerClient::notifySyncRequired):
(WebCore::MockGraphicsLayerClient::paintContents):
(WebCore::MockGraphicsLayerClient::showDebugBorders):
(WebCore::MockGraphicsLayerClient::showRepaintCounter):
(WebCore::TestImage::create):
(WebCore::TestImage::TestImage):
(WebCore::TestImage::~TestImage):
(WebCore::TestImage::isBitmapImage):
(WebCore::TestImage::currentFrameHasAlpha):
(WebCore::TestImage::size):
(WebCore::TestImage::nativeImageForCurrentFrame):
(WebCore::TestImage::destroyDecodedData):
(WebCore::TestImage::decodedSize):
(WebCore::TestImage::draw):
(WebCore::TEST):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (102042 => 102043)


--- trunk/Source/WebCore/ChangeLog	2011-12-05 21:45:30 UTC (rev 102042)
+++ trunk/Source/WebCore/ChangeLog	2011-12-05 21:55:56 UTC (rev 102043)
@@ -1,3 +1,19 @@
+2011-12-05  Dana Jansens  <[email protected]>
+
+        [chromium] Set opaque flag for ImageLayerChromium
+        https://bugs.webkit.org/show_bug.cgi?id=72964
+
+        Reviewed by James Robinson.
+
+        New unit test in tests/ImageLayerChromiumTest.cpp.
+
+        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
+        (WebCore::GraphicsLayerChromium::setContentsToImage):
+        * platform/graphics/chromium/GraphicsLayerChromium.h:
+        (WebCore::GraphicsLayerChromium::contentsLayer):
+        * platform/graphics/chromium/ImageLayerChromium.cpp:
+        (WebCore::ImageLayerChromium::setContents):
+
 2011-12-05  Julien Chaffraix  <[email protected]>
 
         TD width in precentage doesn't work.

Modified: trunk/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp (102042 => 102043)


--- trunk/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp	2011-12-05 21:45:30 UTC (rev 102042)
+++ trunk/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp	2011-12-05 21:55:56 UTC (rev 102043)
@@ -350,6 +350,7 @@
         }
         ImageLayerChromium* imageLayer = static_cast<ImageLayerChromium*>(m_contentsLayer.get());
         imageLayer->setContents(image);
+        imageLayer->setOpaque(image->isBitmapImage() && !image->currentFrameHasAlpha());
         updateContentsRect();
     } else {
         if (m_contentsLayer) {

Modified: trunk/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h (102042 => 102043)


--- trunk/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h	2011-12-05 21:45:30 UTC (rev 102042)
+++ trunk/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h	2011-12-05 21:55:56 UTC (rev 102043)
@@ -101,6 +101,9 @@
     virtual void paintContents(GraphicsContext&, const IntRect& clip);
     virtual void notifySyncRequired();
 
+    // Exposed for tests.
+    LayerChromium* contentsLayer() const { return m_contentsLayer.get(); }
+
 private:
     void updateOpacityOnLayer();
 
@@ -128,7 +131,6 @@
     void updateContentsScale();
 
     void setupContentsLayer(LayerChromium*);
-    LayerChromium* contentsLayer() const { return m_contentsLayer.get(); }
     float contentsScale() const;
 
     String m_nameBase;

Modified: trunk/Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp (102042 => 102043)


--- trunk/Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp	2011-12-05 21:45:30 UTC (rev 102042)
+++ trunk/Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp	2011-12-05 21:55:56 UTC (rev 102043)
@@ -164,7 +164,6 @@
     m_contents = contents;
     m_imageForCurrentFrame = m_contents->nativeImageForCurrentFrame();
     setNeedsDisplay();
-    setOpaque(!m_contents->currentFrameHasAlpha());
 }
 
 void ImageLayerChromium::paintContentsIfDirty()

Modified: trunk/Source/WebKit/chromium/ChangeLog (102042 => 102043)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-12-05 21:45:30 UTC (rev 102042)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-12-05 21:55:56 UTC (rev 102043)
@@ -1,3 +1,29 @@
+2011-12-05  Dana Jansens  <[email protected]>
+
+        [chromium] Set opaque flag for ImageLayerChromium
+        https://bugs.webkit.org/show_bug.cgi?id=72964
+
+        Reviewed by James Robinson.
+
+        * WebKit.gypi:
+        * tests/ImageLayerChromiumTest.cpp: Added.
+        (WebCore::MockGraphicsLayerClient::notifyAnimationStarted):
+        (WebCore::MockGraphicsLayerClient::notifySyncRequired):
+        (WebCore::MockGraphicsLayerClient::paintContents):
+        (WebCore::MockGraphicsLayerClient::showDebugBorders):
+        (WebCore::MockGraphicsLayerClient::showRepaintCounter):
+        (WebCore::TestImage::create):
+        (WebCore::TestImage::TestImage):
+        (WebCore::TestImage::~TestImage):
+        (WebCore::TestImage::isBitmapImage):
+        (WebCore::TestImage::currentFrameHasAlpha):
+        (WebCore::TestImage::size):
+        (WebCore::TestImage::nativeImageForCurrentFrame):
+        (WebCore::TestImage::destroyDecodedData):
+        (WebCore::TestImage::decodedSize):
+        (WebCore::TestImage::draw):
+        (WebCore::TEST):
+
 2011-12-02  James Robinson  <[email protected]>
 
         [chromium] Remove forwarding headers for WebLayer APIs

Modified: trunk/Source/WebKit/chromium/WebKit.gypi (102042 => 102043)


--- trunk/Source/WebKit/chromium/WebKit.gypi	2011-12-05 21:45:30 UTC (rev 102042)
+++ trunk/Source/WebKit/chromium/WebKit.gypi	2011-12-05 21:55:56 UTC (rev 102043)
@@ -75,6 +75,7 @@
             'tests/IDBBindingUtilitiesTest.cpp',
             'tests/IDBKeyPathTest.cpp',
             'tests/IDBLevelDBCodingTest.cpp',
+            'tests/ImageLayerChromiumTest.cpp',
             'tests/InnerGestureRecognizerTest.cpp',
             'tests/KeyboardTest.cpp',
             'tests/KURLTest.cpp',

Added: trunk/Source/WebKit/chromium/tests/ImageLayerChromiumTest.cpp (0 => 102043)


--- trunk/Source/WebKit/chromium/tests/ImageLayerChromiumTest.cpp	                        (rev 0)
+++ trunk/Source/WebKit/chromium/tests/ImageLayerChromiumTest.cpp	2011-12-05 21:55:56 UTC (rev 102043)
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include "ImageLayerChromium.h"
+
+#include "GraphicsLayer.h"
+#include "GraphicsLayerChromium.h"
+#include "NativeImageSkia.h"
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
+using namespace WebCore;
+
+namespace {
+
+class MockGraphicsLayerClient : public GraphicsLayerClient {
+  public:
+    virtual void notifyAnimationStarted(const GraphicsLayer*, double time) { }
+    virtual void notifySyncRequired(const GraphicsLayer*) { }
+    virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const IntRect& inClip) { }
+    virtual bool showDebugBorders() const { return false; }
+    virtual bool showRepaintCounter() const { return false; }
+};
+
+class TestImage : public Image {
+public:
+
+    static PassRefPtr<TestImage> create(const IntSize& size, bool opaque)
+    {
+        return adoptRef(new TestImage(size, opaque));
+    }
+
+    explicit TestImage(const IntSize& size, bool opaque)
+        : Image(0)
+        , m_size(size)
+    {
+        m_nativeImage = new NativeImageSkia();
+        m_nativeImage->bitmap().setConfig(SkBitmap::kARGB_8888_Config,
+                                          size.width(), size.height(), 0);
+        m_nativeImage->bitmap().allocPixels();
+        m_nativeImage->bitmap().setIsOpaque(opaque);
+    }
+
+    virtual ~TestImage()
+    {
+        delete m_nativeImage;
+    }
+
+    virtual bool isBitmapImage() const
+    {
+        return true;
+    }
+
+    virtual bool currentFrameHasAlpha()
+    {
+        return !m_nativeImage->bitmap().isOpaque();
+    }
+
+    virtual IntSize size() const
+    {
+        return m_size;
+    }
+
+    virtual NativeImagePtr nativeImageForCurrentFrame()
+    {
+        if (m_size.isZero())
+            return 0;
+
+        return m_nativeImage;
+    }
+
+    // Stub implementations of pure virtual Image functions.
+    virtual void destroyDecodedData(bool)
+    {
+    }
+
+    virtual unsigned int decodedSize() const
+    {
+        return 0u;
+    }
+
+    virtual void draw(WebCore::GraphicsContext*, const WebCore::FloatRect&,
+                      const WebCore::FloatRect&, WebCore::ColorSpace,
+                      WebCore::CompositeOperator)
+    {
+    }
+
+private:
+
+    IntSize m_size;
+    NativeImagePtr m_nativeImage;
+};
+
+TEST(ImageLayerChromiumTest, opaqueImages)
+{
+    MockGraphicsLayerClient client;
+    OwnPtr<GraphicsLayerChromium> graphicsLayer = static_pointer_cast<GraphicsLayerChromium>(GraphicsLayer::create(&client));
+    ASSERT_TRUE(graphicsLayer.get());
+
+    RefPtr<Image> opaqueImage = TestImage::create(IntSize(100, 100), true);
+    ASSERT_TRUE(opaqueImage.get());
+    RefPtr<Image> nonOpaqueImage = TestImage::create(IntSize(100, 100), false);
+    ASSERT_TRUE(nonOpaqueImage.get());
+
+    ASSERT_FALSE(graphicsLayer->contentsLayer());
+
+    graphicsLayer->setContentsToImage(opaqueImage.get());
+    ASSERT_TRUE(graphicsLayer->contentsLayer()->opaque());
+
+    graphicsLayer->setContentsToImage(nonOpaqueImage.get());
+    ASSERT_FALSE(graphicsLayer->contentsLayer()->opaque());
+}
+
+} // namespace
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to