15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef WebPopupMenuImpl_h 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define WebPopupMenuImpl_h 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/WebContentLayerClient.h" 355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebPoint.h" 365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebSize.h" 37f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPopupMenu.h" 387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "web/PopupContainerClient.h" 39591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/OwnPtr.h" 40591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/RefCounted.h" 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 42c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 43d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class LocalFrame; 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class KeyboardEvent; 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Page; 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class PlatformKeyboardEvent; 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Range; 4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class WebContentLayer; 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class WebGestureEvent; 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class WebKeyboardEvent; 5109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class WebLayerTreeView; 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class WebMouseEvent; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class WebMouseWheelEvent; 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class WebRange; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class WebTouchEvent; 56e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)class Widget; 57e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)struct WebRect; 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass WebPopupMenuImpl : public WebPopupMenu, public PopupContainerClient, public WebContentLayerClient, public RefCounted<WebPopupMenuImpl> { 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_FAST_ALLOCATED; 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // WebWidget functions: 6309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void close() OVERRIDE FINAL; 6409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual WebSize size() OVERRIDE FINAL { return m_size; } 6509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void willStartLiveResize() OVERRIDE FINAL; 6609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void resize(const WebSize&) OVERRIDE FINAL; 6709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void willEndLiveResize() OVERRIDE FINAL; 68c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void beginFrame(const WebBeginFrameArgs&) OVERRIDE FINAL; 6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void layout() OVERRIDE FINAL; 70d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) virtual void paint(WebCanvas*, const WebRect&) OVERRIDE FINAL; 7109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void themeChanged() OVERRIDE FINAL; 7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool handleInputEvent(const WebInputEvent&) OVERRIDE FINAL; 7309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void mouseCaptureLost() OVERRIDE FINAL; 7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void setFocus(bool enable) OVERRIDE FINAL; 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool setComposition( 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const WebString& text, 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const WebVector<WebCompositionUnderline>& underlines, 7809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) int selectionStart, int selectionEnd) OVERRIDE FINAL; 7909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool confirmComposition() OVERRIDE FINAL; 8009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool confirmComposition(ConfirmCompositionBehavior selectionBehavior) OVERRIDE FINAL; 8109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool confirmComposition(const WebString& text) OVERRIDE FINAL; 8209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool compositionRange(size_t* location, size_t* length) OVERRIDE FINAL; 8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool caretOrSelectionRange(size_t* location, size_t* length) OVERRIDE FINAL; 8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void setTextDirection(WebTextDirection) OVERRIDE FINAL; 8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool isAcceleratedCompositingActive() const OVERRIDE FINAL { return false; } 8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool isPopupMenu() const OVERRIDE FINAL { return true; } 8709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void willCloseLayerTreeView() OVERRIDE FINAL; 8809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 8909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // WebContentLayerClient 907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void paintContents(WebCanvas*, const WebRect& clip, bool canPaintLCDTest, WebContentLayerClient::GraphicsContextStatus = GraphicsContextEnabled) OVERRIDE FINAL; 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // WebPopupMenuImpl 937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void initialize(PopupContainer* widget, const WebRect& bounds); 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebWidgetClient* client() { return m_client; } 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void handleMouseMove(const WebMouseEvent&); 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void handleMouseLeave(const WebMouseEvent&); 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void handleMouseDown(const WebMouseEvent&); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void handleMouseUp(const WebMouseEvent&); 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void handleMouseDoubleClick(const WebMouseEvent&); 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void handleMouseWheel(const WebMouseWheelEvent&); 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool handleGestureEvent(const WebGestureEvent&); 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool handleTouchEvent(const WebTouchEvent&); 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool handleKeyEvent(const WebKeyboardEvent&); 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) protected: 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) friend class WebPopupMenu; // For WebPopupMenu::create. 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) friend class WTF::RefCounted<WebPopupMenuImpl>; 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 111c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) explicit WebPopupMenuImpl(WebWidgetClient*); 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ~WebPopupMenuImpl(); 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 114e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // HostWindow methods: 115e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual void invalidateContentsAndRootView(const IntRect&) OVERRIDE FINAL; 116e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual void invalidateContentsForSlowScroll(const IntRect&) OVERRIDE FINAL; 11709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void scheduleAnimation() OVERRIDE FINAL; 118e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual IntRect rootViewToScreen(const IntRect&) const OVERRIDE FINAL; 11909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual WebScreenInfo screenInfo() const OVERRIDE FINAL; 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // PopupContainerClient methods: 1227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void popupClosed(PopupContainer*) OVERRIDE FINAL; 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebWidgetClient* m_client; 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebSize m_size; 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WebLayerTreeView* m_layerTreeView; 12809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) OwnPtr<WebContentLayer> m_rootLayer; 12909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPoint m_lastMousePosition; 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This is a non-owning ref. The popup will notify us via popupClosed() 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // before it is destroyed. 1347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci PopupContainer* m_widget; 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)DEFINE_TYPE_CASTS(WebPopupMenuImpl, WebWidget, widget, widget->isPopupMenu(), widget.isPopupMenu()); 1387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// WebPopupMenuImpl is the only implementation of PopupContainerClient, so 13909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// no need for further checking. 1407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciDEFINE_TYPE_CASTS(WebPopupMenuImpl, PopupContainerClient, client, true, true); 1411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 14251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 145