Changeset 119718 in webkit
- Timestamp:
- Jun 7, 2012 7:00:41 AM (12 years ago)
- Location:
- trunk/Source
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r119714 r119718 1 2012-06-07 Arvid Nilsson <anilsson@rim.com> 2 3 [BlackBerry] Allow WebPageCompositor to blend a transparent web page 4 https://bugs.webkit.org/show_bug.cgi?id=88233 5 6 Reviewed by Rob Buis. 7 8 RIM PR #159998 9 10 Add a parameter to LayerRenderer::compositeBuffer() indicating whether 11 the buffer contents are opaque, and set the GL blend mode accordingly. 12 13 This is not currently testable using BlackBerry testing infrastructure. 14 15 Reviewed internally by Jakob Petsovits. 16 17 * platform/graphics/blackberry/LayerRenderer.cpp: 18 (WebCore::LayerRenderer::compositeBuffer): 19 * platform/graphics/blackberry/LayerRenderer.h: 20 (LayerRenderer): 21 1 22 2012-06-07 Alexei Filippov <alexeif@chromium.org> 2 23 -
trunk/Source/WebCore/platform/graphics/blackberry/LayerRenderer.cpp
r118710 r119718 403 403 static float texcoords[4 * 2] = { 0, 0, 0, 1, 1, 1, 1, 0 }; 404 404 405 void LayerRenderer::compositeBuffer(const TransformationMatrix& transform, const FloatRect& contents, BlackBerry::Platform::Graphics::Buffer* buffer, float opacity)405 void LayerRenderer::compositeBuffer(const TransformationMatrix& transform, const FloatRect& contents, BlackBerry::Platform::Graphics::Buffer* buffer, bool contentsOpaque, float opacity) 406 406 { 407 407 if (!buffer) … … 416 416 return; 417 417 418 if (opacity < 1.0f) { 418 bool blending = !contentsOpaque || opacity < 1.0f; 419 if (blending) { 419 420 glEnable(GL_BLEND); 420 421 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); … … 432 433 } 433 434 434 if ( opacity < 1.0f)435 if (blending) 435 436 glDisable(GL_BLEND); 436 437 } -
trunk/Source/WebCore/platform/graphics/blackberry/LayerRenderer.h
r118710 r119718 107 107 // transform is the model-view-project matrix that goes all the way from contents to normalized device coordinates. 108 108 void compositeLayers(const TransformationMatrix&, LayerCompositingThread* rootLayer); 109 void compositeBuffer(const TransformationMatrix&, const FloatRect& contents, BlackBerry::Platform::Graphics::Buffer*, float opacity);109 void compositeBuffer(const TransformationMatrix&, const FloatRect& contents, BlackBerry::Platform::Graphics::Buffer*, bool contentsOpaque, float opacity); 110 110 void drawCheckerboardPattern(const TransformationMatrix&, const FloatRect& contents); 111 111 -
trunk/Source/WebKit/blackberry/Api/BackingStore.cpp
r119496 r119718 1638 1638 1639 1639 #if USE(ACCELERATED_COMPOSITING) 1640 void BackingStorePrivate::compositeContents(WebCore::LayerRenderer* layerRenderer, const WebCore::TransformationMatrix& transform, const WebCore::FloatRect& contents )1640 void BackingStorePrivate::compositeContents(WebCore::LayerRenderer* layerRenderer, const WebCore::TransformationMatrix& transform, const WebCore::FloatRect& contents, bool contentsOpaque) 1641 1641 { 1642 1642 const Platform::IntRect transformedContentsRect = Platform::IntRect(Platform::IntPoint(0, 0), m_client->transformedContentsSize()); … … 1692 1692 layerRenderer->drawCheckerboardPattern(transform, m_webPage->d->mapFromTransformedFloatRect(Platform::FloatRect(dirtyRect))); 1693 1693 else { 1694 layerRenderer->compositeBuffer(transform, m_webPage->d->mapFromTransformedFloatRect(Platform::FloatRect(wholeRect)), tileBuffer->nativeBuffer(), 1.0f);1694 layerRenderer->compositeBuffer(transform, m_webPage->d->mapFromTransformedFloatRect(Platform::FloatRect(wholeRect)), tileBuffer->nativeBuffer(), contentsOpaque, 1.0f); 1695 1695 1696 1696 // Intersect the rendered region. -
trunk/Source/WebKit/blackberry/Api/BackingStore_p.h
r118696 r119718 203 203 // Preconditions: You have to call prepareFrame and setViewport on the LayerRenderer before 204 204 // calling this. 205 void compositeContents(WebCore::LayerRenderer*, const WebCore::TransformationMatrix&, const WebCore::FloatRect& contents );205 void compositeContents(WebCore::LayerRenderer*, const WebCore::TransformationMatrix&, const WebCore::FloatRect& contents, bool contentsOpaque); 206 206 207 207 void blendCompositingSurface(const Platform::IntRect& dstRect); -
trunk/Source/WebKit/blackberry/Api/WebPage.cpp
r119713 r119718 5732 5732 5733 5733 m_compositor = compositor; 5734 if (m_compositor) 5734 if (m_compositor) { 5735 5735 m_compositor->setPage(this); 5736 5737 m_compositor->setBackgroundColor(m_webSettings->backgroundColor()); 5738 } 5736 5739 5737 5740 // The previous compositor, if any, has now released it's OpenGL resources, 5738 5741 // so we can safely free the owned context, if any. 5739 5742 m_ownedContext.clear(); 5743 } 5744 5745 void WebPagePrivate::setCompositorBackgroundColor(const Color& backgroundColor) 5746 { 5747 if (m_compositor) 5748 m_compositor->setBackgroundColor(backgroundColor); 5740 5749 } 5741 5750 … … 5972 5981 m_compositor = WebPageCompositorPrivate::create(this, 0); 5973 5982 m_compositor->setContext(m_ownedContext.get()); 5983 5984 // The compositor is created in a sync message, so there's no risk of race condition on the 5985 // WebSettings. 5986 m_compositor->setBackgroundColor(m_webSettings->backgroundColor()); 5974 5987 5975 5988 return true; … … 6271 6284 Color backgroundColor(webSettings->backgroundColor()); 6272 6285 m_mainFrame->view()->updateBackgroundRecursively(backgroundColor, backgroundColor.hasAlpha()); 6286 6287 Platform::userInterfaceThreadMessageClient()->dispatchMessage( 6288 createMethodCallMessage(&WebPagePrivate::setCompositorBackgroundColor, this, backgroundColor)); 6273 6289 } 6274 6290 } -
trunk/Source/WebKit/blackberry/Api/WebPageCompositor.cpp
r119185 r119718 130 130 131 131 if (!drawsRootLayer()) 132 m_webPage->m_backingStore->d->compositeContents(m_layerRenderer.get(), transform, contents );132 m_webPage->m_backingStore->d->compositeContents(m_layerRenderer.get(), transform, contents, !m_backgroundColor.hasAlpha()); 133 133 134 134 compositeLayers(transform); … … 193 193 } 194 194 195 void WebPageCompositorPrivate::setBackgroundColor(const Color& color) 196 { 197 m_backgroundColor = color; 198 } 199 195 200 void WebPageCompositorPrivate::releaseLayerResources() 196 201 { -
trunk/Source/WebKit/blackberry/Api/WebPageCompositor_p.h
r119436 r119718 85 85 void setLastCompositingResults(const WebCore::LayerRenderingResults& results) { m_lastCompositingResults = results; } 86 86 87 WebCore::Color backgroundColor() const { return m_backgroundColor; } 88 void setBackgroundColor(const WebCore::Color&); 89 87 90 void releaseLayerResources(); 88 91 … … 112 115 WebCore::IntSize m_contentsSizeForCompositing; 113 116 WebCore::LayerRenderingResults m_lastCompositingResults; 117 WebCore::Color m_backgroundColor; 114 118 bool m_drawsRootLayer; 115 119 }; -
trunk/Source/WebKit/blackberry/Api/WebPage_p.h
r119679 r119718 397 397 WebPageCompositorPrivate* compositor() const { return m_compositor.get(); } 398 398 void setCompositor(PassRefPtr<WebPageCompositorPrivate>, EGLContext compositingContext); 399 void setCompositorBackgroundColor(const WebCore::Color&); 399 400 bool createCompositor(); 400 401 void destroyCompositor(); -
trunk/Source/WebKit/blackberry/ChangeLog
r119713 r119718 1 2012-06-07 Arvid Nilsson <anilsson@rim.com> 2 3 [BlackBerry] Allow WebPageCompositor to blend a transparent web page 4 https://bugs.webkit.org/show_bug.cgi?id=88233 5 6 Reviewed by Rob Buis. 7 8 RIM PR #159998 9 10 Keep track of the web page background color in the compositor so we can 11 determine whether the contents of the root layer are transparent. 12 13 Reviewed internally by Jakob Petsovits. 14 15 * Api/BackingStore.cpp: 16 (BlackBerry::WebKit::BackingStorePrivate::compositeContents): 17 * Api/BackingStore_p.h: 18 (BackingStorePrivate): 19 * Api/WebPage.cpp: 20 (BlackBerry::WebKit::WebPagePrivate::setCompositor): 21 (BlackBerry::WebKit::WebPagePrivate::setCompositorBackgroundColor): 22 (WebKit): 23 (BlackBerry::WebKit::WebPagePrivate::createCompositor): 24 (BlackBerry::WebKit::WebPagePrivate::didChangeSettings): 25 * Api/WebPageCompositor.cpp: 26 (BlackBerry::WebKit::WebPageCompositorPrivate::render): 27 (BlackBerry::WebKit::WebPageCompositorPrivate::setBackgroundColor): 28 (WebKit): 29 * Api/WebPageCompositor_p.h: 30 (BlackBerry::WebKit::WebPageCompositorPrivate::backgroundColor): 31 (WebPageCompositorPrivate): 32 * Api/WebPage_p.h: 33 (WebPagePrivate): 34 1 35 2012-06-07 Jonathan Dong <jonathan.dong@torchmobile.com.cn> 2 36
Note: See TracChangeset
for help on using the changeset viewer.