summaryrefslogtreecommitdiff
path: root/Source/WebKit/blackberry/Api/WebOverlay.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2012-09-18 15:53:33 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2012-09-18 15:53:33 +0200
commit6bbb7fbbac94d0f511a7bd0cbd50854ab643bfb2 (patch)
treed9c68d1cca0b3e352f1e438561f3e504e641a08f /Source/WebKit/blackberry/Api/WebOverlay.cpp
parentd0424a769059c84ae20beb3c217812792ea6726b (diff)
downloadqtwebkit-6bbb7fbbac94d0f511a7bd0cbd50854ab643bfb2.tar.gz
Imported WebKit commit c7503cef7ecb236730d1309676ab9fc723fd061d (http://svn.webkit.org/repository/webkit/trunk@128886)
New snapshot with various build fixes
Diffstat (limited to 'Source/WebKit/blackberry/Api/WebOverlay.cpp')
-rw-r--r--Source/WebKit/blackberry/Api/WebOverlay.cpp39
1 files changed, 32 insertions, 7 deletions
diff --git a/Source/WebKit/blackberry/Api/WebOverlay.cpp b/Source/WebKit/blackberry/Api/WebOverlay.cpp
index e01694cef..792a473b0 100644
--- a/Source/WebKit/blackberry/Api/WebOverlay.cpp
+++ b/Source/WebKit/blackberry/Api/WebOverlay.cpp
@@ -163,9 +163,9 @@ void WebOverlay::removeFromParent()
d->parent = 0;
}
-void WebOverlay::setContentsToImage(const unsigned char* data, const Platform::IntSize& imageSize)
+void WebOverlay::setContentsToImage(const unsigned char* data, const Platform::IntSize& imageSize, ImageDataAdoptionType adoptionType)
{
- d->setContentsToImage(data, imageSize);
+ d->setContentsToImage(data, imageSize, adoptionType);
}
void WebOverlay::setContentsToColor(int r, int g, int b, int a)
@@ -329,7 +329,7 @@ void WebOverlayPrivateWebKitThread::removeFromParent()
m_layer->removeFromParent();
}
-void WebOverlayPrivateWebKitThread::setContentsToImage(const unsigned char* data, const WebCore::IntSize& imageSize)
+void WebOverlayPrivateWebKitThread::setContentsToImage(const unsigned char* data, const WebCore::IntSize& imageSize, WebOverlay::ImageDataAdoptionType adoptionType)
{
notImplemented();
}
@@ -390,6 +390,7 @@ void WebOverlayLayerCompositingThreadClient::setDrawsContent(bool drawsContent)
void WebOverlayLayerCompositingThreadClient::invalidate()
{
m_texture.clear();
+ clearUploadedContents();
}
void WebOverlayLayerCompositingThreadClient::setContents(const SkBitmap& contents)
@@ -397,6 +398,12 @@ void WebOverlayLayerCompositingThreadClient::setContents(const SkBitmap& content
m_contents = contents;
m_color = Color();
m_texture.clear();
+ clearUploadedContents();
+}
+
+void WebOverlayLayerCompositingThreadClient::clearUploadedContents()
+{
+ m_uploadedContents = SkBitmap();
}
void WebOverlayLayerCompositingThreadClient::setContentsToColor(const Color& color)
@@ -404,6 +411,7 @@ void WebOverlayLayerCompositingThreadClient::setContentsToColor(const Color& col
m_contents = SkBitmap();
m_color = color;
m_texture.clear();
+ clearUploadedContents();
}
void WebOverlayLayerCompositingThreadClient::layerCompositingThreadDestroyed(WebCore::LayerCompositingThread*)
@@ -446,7 +454,8 @@ void WebOverlayLayerCompositingThreadClient::uploadTexturesIfNeeded(LayerComposi
m_texture = Texture::create();
m_texture->protect(IntSize(m_contents.width(), m_contents.height()));
IntRect bitmapRect(0, 0, m_contents.width(), m_contents.height());
- m_texture->updateContents(m_contents, bitmapRect, bitmapRect, false);
+ m_uploadedContents = m_contents;
+ m_texture->updateContents(m_uploadedContents, bitmapRect, bitmapRect, false);
}
void WebOverlayLayerCompositingThreadClient::drawTextures(LayerCompositingThread* layer, double /*scale*/, int positionLocation, int texCoordLocation)
@@ -464,6 +473,7 @@ void WebOverlayLayerCompositingThreadClient::drawTextures(LayerCompositingThread
void WebOverlayLayerCompositingThreadClient::deleteTextures(LayerCompositingThread*)
{
m_texture.clear();
+ clearUploadedContents();
}
WebOverlayPrivateCompositingThread::WebOverlayPrivateCompositingThread(PassRefPtr<LayerCompositingThread> layerCompositingThread)
@@ -594,7 +604,7 @@ void WebOverlayPrivateCompositingThread::removeFromParent()
scheduleCompositingRun();
}
-void WebOverlayPrivateCompositingThread::setContentsToImage(const unsigned char* data, const IntSize& imageSize)
+void WebOverlayPrivateCompositingThread::setContentsToImage(const unsigned char* data, const IntSize& imageSize, WebOverlay::ImageDataAdoptionType adoptionType)
{
if (!m_layerCompositingThreadClient)
return;
@@ -608,7 +618,22 @@ void WebOverlayPrivateCompositingThread::setContentsToImage(const unsigned char*
SkBitmap contents;
contents.setConfig(SkBitmap::kARGB_8888_Config, imageSize.width(), imageSize.height());
- contents.setPixels(const_cast<unsigned char*>(data));
+
+ switch (adoptionType) {
+ case WebOverlay::ReferenceImageData:
+ contents.setPixels(const_cast<unsigned char*>(data));
+ break;
+ case WebOverlay::CopyImageData:
+ if (contents.allocPixels()) {
+ contents.lockPixels();
+ size_t bytes = SkBitmap::ComputeSize(SkBitmap::kARGB_8888_Config, imageSize.width(), imageSize.height());
+ memcpy(contents.getPixels(), data, bytes);
+ contents.unlockPixels();
+ }
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ }
m_layerCompositingThreadClient->setContents(contents);
m_layerCompositingThread->setNeedsTexture(true);
@@ -733,7 +758,7 @@ void WebOverlay::removeAnimation(const WebString&)
{
}
-void WebOverlay::setContentsToImage(const unsigned char*, const Platform::IntSize&)
+void WebOverlay::setContentsToImage(const unsigned char*, const Platform::IntSize&, ImageDataAdoptionType)
{
}