Changeset 101758 in webkit
- Timestamp:
- Dec 2, 2011 12:55:48 AM (12 years ago)
- Location:
- trunk/Source/WebKit/chromium
- Files:
-
- 1 added
- 10 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/chromium/ChangeLog
r101709 r101758 1 2011-12-02 Xiyuan Xia <xiyuan@chromium.org> 2 3 [Chromium] Support adding/removing page overlay to WebView 4 https://bugs.webkit.org/show_bug.cgi?id=73235 5 6 Reviewed by James Robinson. 7 8 * WebKit.gyp: 9 * public/WebPageOverlay.h: Added. 10 (WebKit::WebPageOverlay::~WebPageOverlay): 11 * public/WebView.h: 12 * src/PageOverlay.cpp: 13 (WebKit::PageOverlay::create): 14 (WebKit::PageOverlay::PageOverlay): 15 (WebKit::OverlayGraphicsLayerClientImpl::create): 16 (WebKit::OverlayGraphicsLayerClientImpl::paintContents): 17 (WebKit::OverlayGraphicsLayerClientImpl::OverlayGraphicsLayerClientImpl): 18 (WebKit::PageOverlay::update): 19 (WebKit::PageOverlay::paintWebFrame): 20 (WebKit::PageOverlay::invalidateWebFrame): 21 * src/PageOverlay.h: 22 (WebKit::PageOverlay::overlay): 23 (WebKit::PageOverlay::setOverlay): 24 (WebKit::PageOverlay::zOrder): 25 (WebKit::PageOverlay::setZOrder): 26 * src/PageOverlayList.cpp: Added. 27 (WebKit::PageOverlayList::create): 28 (WebKit::PageOverlayList::PageOverlayList): 29 (WebKit::PageOverlayList::~PageOverlayList): 30 (WebKit::PageOverlayList::add): 31 (WebKit::PageOverlayList::remove): 32 (WebKit::PageOverlayList::update): 33 (WebKit::PageOverlayList::paintWebFrame): 34 (WebKit::PageOverlayList::find): 35 * src/PageOverlayList.h: Added. 36 (WebKit::PageOverlayList::empty): 37 * src/WebDevToolsAgentImpl.cpp: 38 (WebKit::WebDevToolsAgentImpl::paintPageOverlay): 39 (WebKit::WebDevToolsAgentImpl::highlight): 40 (WebKit::WebDevToolsAgentImpl::hideHighlight): 41 * src/WebDevToolsAgentImpl.h: 42 * src/WebFrameImpl.cpp: 43 (WebKit::WebFrameImpl::paintWithContext): 44 * src/WebViewImpl.cpp: 45 (WebKit::WebViewImpl::composite): 46 (WebKit::WebViewImpl::addPageOverlay): 47 (WebKit::WebViewImpl::removePageOverlay): 48 (WebKit::WebViewImpl::setIsAcceleratedCompositingActive): 49 (WebKit::WebViewImpl::didRecreateGraphicsContext): 50 * src/WebViewImpl.h: 51 (WebKit::WebViewImpl::pageOverlays): 52 1 53 2011-12-01 Jochen Eisinger <jochen@chromium.org> 2 54 -
trunk/Source/WebKit/chromium/WebKit.gyp
r101576 r101758 261 261 'public/WebNotificationPermissionCallback.h', 262 262 'public/WebOptionElement.h', 263 'public/WebPageOverlay.h', 263 264 'public/WebPageSerializer.h', 264 265 'public/WebPageSerializerClient.h', … … 438 439 'src/PageOverlay.cpp', 439 440 'src/PageOverlay.h', 441 'src/PageOverlayList.cpp', 442 'src/PageOverlayList.h', 440 443 'src/PlatformMessagePortChannel.cpp', 441 444 'src/PlatformMessagePortChannel.h', -
trunk/Source/WebKit/chromium/public/WebPageOverlay.h
r101757 r101758 27 27 */ 28 28 29 #ifndef PageOverlay_h30 #define PageOverlay_h29 #ifndef WebPageOverlay_h 30 #define WebPageOverlay_h 31 31 32 #include <wtf/OwnPtr.h> 33 #include <wtf/PassOwnPtr.h> 34 35 namespace WebCore { 36 class GraphicsContext; 37 class GraphicsLayer; 38 class GraphicsLayerClient; 39 } 32 #include "WebCanvas.h" 33 #include "WebRect.h" 40 34 41 35 namespace WebKit { 42 class WebViewImpl;43 36 44 class PageOverlay {37 class WebPageOverlay { 45 38 public: 46 class PageOverlayClient { 47 public: 48 virtual void paintPageOverlay(WebCore::GraphicsContext&) = 0; 49 }; 39 // Paints page overlay contents. 40 virtual void paintPageOverlay(WebCanvas*) = 0; 50 41 51 static PassOwnPtr<PageOverlay> create(WebViewImpl*, PageOverlayClient*); 52 53 ~PageOverlay() { } 54 55 void setClient(PageOverlayClient* client) { m_client = client; } 56 57 void clear(); 58 void update(); 59 void paintWebFrame(WebCore::GraphicsContext&); 60 61 private: 62 PageOverlay(WebViewImpl*, PageOverlayClient*); 63 void invalidateWebFrame(); 64 65 WebViewImpl* m_viewImpl; 66 PageOverlayClient* m_client; 67 OwnPtr<WebCore::GraphicsLayer> m_layer; 68 OwnPtr<WebCore::GraphicsLayerClient> m_layerClient; 42 protected: 43 virtual ~WebPageOverlay() { } 69 44 }; 70 45 71 46 } // namespace WebKit 72 47 73 #endif // PageOverlay_h48 #endif // WebPageOverlay_h -
trunk/Source/WebKit/chromium/public/WebView.h
r101122 r101758 49 49 class WebGraphicsContext3D; 50 50 class WebNode; 51 class WebPageOverlay; 51 52 class WebPermissionClient; 52 53 class WebSettings; … … 410 411 bool isInitialState) { } 411 412 413 // PageOverlay ---------------------------------------------------------- 414 415 // Adds/removes page overlay to this WebView. These functions change the 416 // graphical appearance of the WebView. WebPageOverlay paints the 417 // contents of the page overlay. It also provides an z-order number for 418 // the page overlay. The z-order number defines the paint order the page 419 // overlays. Page overlays with larger z-order number will be painted after 420 // page overlays with smaller z-order number. That is, they appear above 421 // the page overlays with smaller z-order number. If two page overlays have 422 // the same z-order number, the later added one will be on top. 423 virtual void addPageOverlay(WebPageOverlay*, int /*z-order*/) = 0; 424 virtual void removePageOverlay(WebPageOverlay*) = 0; 412 425 413 426 // Testing functionality for LayoutTestController ----------------------- -
trunk/Source/WebKit/chromium/src/PageOverlay.cpp
r100839 r101758 33 33 #include "GraphicsLayerClient.h" 34 34 #include "Page.h" 35 #include "PlatformContextSkia.h" 35 36 #include "Settings.h" 37 #include "WebPageOverlay.h" 36 38 #include "WebViewClient.h" 37 39 #include "WebViewImpl.h" … … 41 43 namespace WebKit { 42 44 43 PassOwnPtr<PageOverlay> PageOverlay::create(WebViewImpl* viewImpl, PageOverlayClient* client) 45 namespace { 46 47 WebCanvas* ToWebCanvas(GraphicsContext* gc) 44 48 { 45 return adoptPtr(new PageOverlay(viewImpl, client)); 49 #if WEBKIT_USING_SKIA 50 return gc->platformContext()->canvas(); 51 #elif WEBKIT_USING_CG 52 return gc->platformContext(); 53 #endif 46 54 } 47 55 48 PageOverlay::PageOverlay(WebViewImpl* viewImpl, PageOverlayClient* client) 56 } // namespace 57 58 PassOwnPtr<PageOverlay> PageOverlay::create(WebViewImpl* viewImpl, WebPageOverlay* overlay) 59 { 60 return adoptPtr(new PageOverlay(viewImpl, overlay)); 61 } 62 63 PageOverlay::PageOverlay(WebViewImpl* viewImpl, WebPageOverlay* overlay) 49 64 : m_viewImpl(viewImpl) 50 , m_client(client) 65 , m_overlay(overlay) 66 , m_zOrder(0) 51 67 { 52 68 } … … 55 71 class OverlayGraphicsLayerClientImpl : public WebCore::GraphicsLayerClient { 56 72 public: 57 static PassOwnPtr<OverlayGraphicsLayerClientImpl*> create(WebViewImpl* webViewImpl, PageOverlay::PageOverlayClient* pageOverlayClient)73 static PassOwnPtr<OverlayGraphicsLayerClientImpl*> create(WebViewImpl* webViewImpl, WebPageOverlay* overlay) 58 74 { 59 return adoptPtr(new OverlayGraphicsLayerClientImpl(webViewImpl, pageOverlayClient));75 return adoptPtr(new OverlayGraphicsLayerClientImpl(webViewImpl, overlay)); 60 76 } 61 77 … … 66 82 virtual void notifySyncRequired(const GraphicsLayer*) { } 67 83 68 virtual void paintContents(const GraphicsLayer*, GraphicsContext& context, GraphicsLayerPaintingPhase, const IntRect& inClip)84 virtual void paintContents(const GraphicsLayer*, GraphicsContext& gc, GraphicsLayerPaintingPhase, const IntRect& inClip) 69 85 { 70 m_pageOverlayClient->paintPageOverlay(context); 86 gc.save(); 87 m_overlay->paintPageOverlay(ToWebCanvas(&gc)); 88 gc.restore(); 71 89 } 72 90 … … 92 110 93 111 private: 94 explicit OverlayGraphicsLayerClientImpl(WebViewImpl* webViewImpl, PageOverlay::PageOverlayClient* pageOverlayClient)95 : m_ pageOverlayClient(pageOverlayClient)112 OverlayGraphicsLayerClientImpl(WebViewImpl* webViewImpl, WebPageOverlay* overlay) 113 : m_overlay(overlay) 96 114 , m_webViewImpl(webViewImpl) 97 115 { 98 116 } 99 117 100 PageOverlay::PageOverlayClient* m_pageOverlayClient;118 WebPageOverlay* m_overlay; 101 119 WebViewImpl* m_webViewImpl; 102 120 }; … … 122 140 #if USE(ACCELERATED_COMPOSITING) 123 141 if (!m_layer) { 124 m_layerClient = OverlayGraphicsLayerClientImpl::create(m_viewImpl, m_ client);142 m_layerClient = OverlayGraphicsLayerClientImpl::create(m_viewImpl, m_overlay); 125 143 m_layer = GraphicsLayer::create(m_layerClient.get()); 126 144 m_layer->setName("WebViewImpl page overlay content"); 127 145 m_layer->setDrawsContent(true); 128 const WebSize& size = m_viewImpl->size();129 m_layer->setSize(IntSize(size.width, size.height));130 146 } 147 148 FloatSize size(m_viewImpl->size()); 149 if (size != m_layer->size()) { 150 // Triggers re-adding to root layer to ensure that we are on top of 151 // scrollbars. 152 m_layer->removeFromParent(); 153 m_layer->setSize(size); 154 } 155 131 156 m_viewImpl->setOverlayLayer(m_layer.get()); 132 157 m_layer->setNeedsDisplay(); … … 136 161 void PageOverlay::paintWebFrame(GraphicsContext& gc) 137 162 { 138 if (!m_viewImpl->isAcceleratedCompositingActive()) 139 m_client->paintPageOverlay(gc); 163 if (!m_viewImpl->isAcceleratedCompositingActive()) { 164 gc.save(); 165 m_overlay->paintPageOverlay(ToWebCanvas(&gc)); 166 gc.restore(); 167 } 140 168 } 141 169 142 170 void PageOverlay::invalidateWebFrame() 143 171 { 144 // PageOverlayClientdoes the actual painting of the overlay.172 // WebPageOverlay does the actual painting of the overlay. 145 173 // Here we just make sure to invalidate. 146 174 if (!m_viewImpl->isAcceleratedCompositingActive()) { -
trunk/Source/WebKit/chromium/src/PageOverlay.h
r95901 r101758 40 40 41 41 namespace WebKit { 42 class WebPageOverlay; 42 43 class WebViewImpl; 44 struct WebRect; 43 45 44 46 class PageOverlay { 45 47 public: 46 class PageOverlayClient { 47 public: 48 virtual void paintPageOverlay(WebCore::GraphicsContext&) = 0; 49 }; 50 51 static PassOwnPtr<PageOverlay> create(WebViewImpl*, PageOverlayClient*); 48 static PassOwnPtr<PageOverlay> create(WebViewImpl*, WebPageOverlay*); 52 49 53 50 ~PageOverlay() { } 54 51 55 void setClient(PageOverlayClient* client) { m_client = client; } 52 WebPageOverlay* overlay() const { return m_overlay; } 53 void setOverlay(WebPageOverlay* overlay) { m_overlay = overlay; } 54 55 int zOrder() const { return m_zOrder; } 56 void setZOrder(int zOrder) { m_zOrder = zOrder; } 56 57 57 58 void clear(); … … 60 61 61 62 private: 62 PageOverlay(WebViewImpl*, PageOverlayClient*);63 PageOverlay(WebViewImpl*, WebPageOverlay*); 63 64 void invalidateWebFrame(); 64 65 65 66 WebViewImpl* m_viewImpl; 66 PageOverlayClient* m_client;67 WebPageOverlay* m_overlay; 67 68 OwnPtr<WebCore::GraphicsLayer> m_layer; 68 69 OwnPtr<WebCore::GraphicsLayerClient> m_layerClient; 70 int m_zOrder; 69 71 }; 70 72 -
trunk/Source/WebKit/chromium/src/PageOverlayList.h
r101757 r101758 27 27 */ 28 28 29 #ifndef PageOverlay _h30 #define PageOverlay _h29 #ifndef PageOverlayList_h 30 #define PageOverlayList_h 31 31 32 32 #include <wtf/OwnPtr.h> 33 33 #include <wtf/PassOwnPtr.h> 34 #include <wtf/Vector.h> 34 35 35 36 namespace WebCore { 36 37 class GraphicsContext; 37 class GraphicsLayer;38 class GraphicsLayerClient;39 38 } 40 39 41 40 namespace WebKit { 41 class PageOverlay; 42 class WebPageOverlay; 42 43 class WebViewImpl; 43 44 44 class PageOverlay {45 class PageOverlayList { 45 46 public: 46 class PageOverlayClient { 47 public: 48 virtual void paintPageOverlay(WebCore::GraphicsContext&) = 0; 49 }; 47 static PassOwnPtr<PageOverlayList> create(WebViewImpl*); 50 48 51 static PassOwnPtr<PageOverlay> create(WebViewImpl*, PageOverlayClient*);49 ~PageOverlayList(); 52 50 53 ~PageOverlay() {}51 bool empty() const { return !m_pageOverlays.size(); } 54 52 55 void setClient(PageOverlayClient* client) { m_client = client; } 53 // Adds/removes a PageOverlay for given client. 54 // Returns true if a PageOverlay is added/removed. 55 bool add(WebPageOverlay*, int /* zOrder */); 56 bool remove(WebPageOverlay*); 56 57 57 void clear();58 58 void update(); 59 59 void paintWebFrame(WebCore::GraphicsContext&); 60 60 61 61 private: 62 PageOverlay(WebViewImpl*, PageOverlayClient*); 63 void invalidateWebFrame(); 62 typedef Vector<OwnPtr<PageOverlay>, 2> PageOverlays; 63 64 explicit PageOverlayList(WebViewImpl*); 65 66 // Returns the index of the client found. Otherwise, returns WTF::notFound. 67 size_t find(WebPageOverlay*); 64 68 65 69 WebViewImpl* m_viewImpl; 66 PageOverlayClient* m_client; 67 OwnPtr<WebCore::GraphicsLayer> m_layer; 68 OwnPtr<WebCore::GraphicsLayerClient> m_layerClient; 70 PageOverlays m_pageOverlays; 69 71 }; 70 72 71 73 } // namespace WebKit 72 74 73 #endif // PageOverlay _h75 #endif // PageOverlayList_h -
trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.cpp
r101469 r101758 43 43 #include "Page.h" 44 44 #include "PageGroup.h" 45 #include "PageOverlay.h"46 45 #include "PageScriptDebugServer.h" 46 #include "painting/GraphicsContextBuilder.h" 47 47 #include "PlatformString.h" 48 48 #include "ResourceError.h" … … 273 273 } 274 274 275 // PageOverlayClient276 void WebDevToolsAgentImpl::paintPageOverlay( GraphicsContext& gc)275 // WebPageOverlay 276 void WebDevToolsAgentImpl::paintPageOverlay(WebCanvas* canvas) 277 277 { 278 278 InspectorController* ic = inspectorController(); 279 279 if (ic) 280 ic->drawHighlight( gc);280 ic->drawHighlight(GraphicsContextBuilder(canvas).context()); 281 281 } 282 282 283 283 void WebDevToolsAgentImpl::highlight() 284 284 { 285 m_webViewImpl->setPageOverlayClient(this); 285 // Use 99 as a big z-order number so that highlight is above other overlays. 286 m_webViewImpl->addPageOverlay(this, 99); 286 287 } 287 288 288 289 void WebDevToolsAgentImpl::hideHighlight() 289 290 { 290 m_webViewImpl-> setPageOverlayClient(0);291 m_webViewImpl->removePageOverlay(this); 291 292 } 292 293 -
trunk/Source/WebKit/chromium/src/WebDevToolsAgentImpl.h
r101231 r101758 34 34 #include "InspectorClient.h" 35 35 36 #include "PageOverlay.h"37 36 #include "WebDevToolsAgentPrivate.h" 37 #include "WebPageOverlay.h" 38 38 39 39 #include <wtf/Forward.h> … … 63 63 class WebDevToolsAgentImpl : public WebDevToolsAgentPrivate, 64 64 public WebCore::InspectorClient, 65 public PageOverlay::PageOverlayClient{65 public WebPageOverlay { 66 66 public: 67 67 WebDevToolsAgentImpl(WebViewImpl* webViewImpl, WebDevToolsAgentClient* client); … … 98 98 int hostId() { return m_hostId; } 99 99 100 // PageOverlayClient101 virtual void paintPageOverlay(WebC ore::GraphicsContext&);100 // WebPageOverlay 101 virtual void paintPageOverlay(WebCanvas*); 102 102 103 103 private: -
trunk/Source/WebKit/chromium/src/WebFrameImpl.cpp
r101706 r101758 2064 2064 gc.clip(dirtyRect); 2065 2065 frameView()->paint(&gc, dirtyRect); 2066 if (viewImpl()->pageOverlay ())2067 viewImpl()->pageOverlay ()->paintWebFrame(gc);2066 if (viewImpl()->pageOverlays()) 2067 viewImpl()->pageOverlays()->paintWebFrame(gc); 2068 2068 } else 2069 2069 gc.fillRect(dirtyRect, Color::white, ColorSpaceDeviceRGB); -
trunk/Source/WebKit/chromium/src/WebViewImpl.cpp
r101576 r101758 1257 1257 return; 1258 1258 1259 if (m_pageOverlay )1260 m_pageOverlay ->update();1259 if (m_pageOverlays) 1260 m_pageOverlays->update(); 1261 1261 1262 1262 m_layerTreeHost->composite(); … … 2611 2611 } 2612 2612 2613 void WebViewImpl::setPageOverlayClient(PageOverlay::PageOverlayClient* pageOverlayClient) 2614 { 2615 if (pageOverlayClient) { 2616 if (!m_pageOverlay) 2617 m_pageOverlay = PageOverlay::create(this, pageOverlayClient); 2618 else 2619 m_pageOverlay->setClient(pageOverlayClient); 2620 m_pageOverlay->update(); 2613 void WebViewImpl::addPageOverlay(WebPageOverlay* overlay, int zOrder) 2614 { 2615 if (!m_pageOverlays) 2616 m_pageOverlays = PageOverlayList::create(this); 2617 2618 m_pageOverlays->add(overlay, zOrder); 2619 setRootLayerNeedsDisplay(); 2620 } 2621 2622 void WebViewImpl::removePageOverlay(WebPageOverlay* overlay) 2623 { 2624 if (m_pageOverlays && m_pageOverlays->remove(overlay)) { 2621 2625 setRootLayerNeedsDisplay(); 2622 } else { 2623 if (m_pageOverlay) { 2624 m_pageOverlay->clear(); 2625 m_pageOverlay = nullptr; 2626 setRootLayerNeedsDisplay(); 2627 } 2626 2627 if (m_pageOverlays->empty()) 2628 m_pageOverlays = nullptr; 2628 2629 } 2629 2630 } … … 2871 2872 m_isAcceleratedCompositingActive = true; 2872 2873 m_compositorCreationFailed = false; 2873 if (m_pageOverlay )2874 m_pageOverlay ->update();2874 if (m_pageOverlays) 2875 m_pageOverlays->update(); 2875 2876 } else { 2876 2877 m_layerTreeHost.clear(); … … 2953 2954 } 2954 2955 2955 if (m_pageOverlay )2956 m_pageOverlay ->update();2956 if (m_pageOverlays) 2957 m_pageOverlays->update(); 2957 2958 } 2958 2959 -
trunk/Source/WebKit/chromium/src/WebViewImpl.h
r101553 r101758 48 48 #include "IntRect.h" 49 49 #include "NotificationPresenterImpl.h" 50 #include "PageOverlay .h"50 #include "PageOverlayList.h" 51 51 #include "UserMediaClientImpl.h" 52 52 #include "cc/CCLayerTreeHost.h" … … 228 228 unsigned inactiveForegroundColor); 229 229 virtual void performCustomContextMenuAction(unsigned action); 230 virtual void addPageOverlay(WebPageOverlay*, int /* zOrder */); 231 virtual void removePageOverlay(WebPageOverlay*); 230 232 231 233 // CCLayerTreeHostClient … … 243 245 WebDevToolsAgentPrivate* devToolsAgentPrivate() { return m_devToolsAgent.get(); } 244 246 245 PageOverlay* pageOverlay() const { return m_pageOverlay.get(); } 246 void setPageOverlayClient(PageOverlay::PageOverlayClient*); 247 PageOverlayList* pageOverlays() const { return m_pageOverlays.get(); } 247 248 248 249 void setOverlayLayer(WebCore::GraphicsLayer*); … … 580 581 581 582 OwnPtr<WebDevToolsAgentPrivate> m_devToolsAgent; 582 OwnPtr<PageOverlay > m_pageOverlay;583 OwnPtr<PageOverlayList> m_pageOverlays; 583 584 584 585 // Whether the webview is rendering transparently.
Note: See TracChangeset
for help on using the changeset viewer.