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