1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/* 2643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Google Inc. All rights reserved. 3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without 5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are 6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met: 7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions of source code must retain the above copyright 9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer. 10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions in binary form must reproduce the above 11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer 12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the 13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution. 14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Neither the name of Google Inc. nor the names of its 15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from 16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission. 17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */ 30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef WebPopupMenuImpl_h 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#define WebPopupMenuImpl_h 33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "FramelessScrollViewClient.h" 356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "WebPoint.h" 366c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "WebPopupMenu.h" 376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "WebSize.h" 38643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <wtf/RefCounted.h> 39643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 40643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebCore { 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass Frame; 42643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass FramelessScrollView; 43643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass KeyboardEvent; 44643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass Page; 45643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass PlatformKeyboardEvent; 46643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass Range; 47643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass Widget; 48643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 49643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 50643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit { 51643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebKeyboardEvent; 52643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebMouseEvent; 53643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebMouseWheelEvent; 54643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstruct WebRect; 55643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 56643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebPopupMenuImpl : public WebPopupMenu, 57643ca7872b450ea4efacab6188849e5aac2ba161Steve Block public WebCore::FramelessScrollViewClient, 58643ca7872b450ea4efacab6188849e5aac2ba161Steve Block public RefCounted<WebPopupMenuImpl> { 59ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WTF_MAKE_FAST_ALLOCATED; 60643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockpublic: 61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // WebWidget 62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void close(); 63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WebSize size() { return m_size; } 64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void resize(const WebSize&); 65ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch virtual void animate(); 66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void layout(); 67643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void paint(WebCanvas* canvas, const WebRect& rect); 6868513a70bcd92384395513322f1b801e7bf9c729Steve Block virtual void themeChanged(); 6968513a70bcd92384395513322f1b801e7bf9c729Steve Block virtual void composite(bool finish); 70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool handleInputEvent(const WebInputEvent&); 71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void mouseCaptureLost(); 72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setFocus(bool enable); 7306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen virtual bool setComposition( 7406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen const WebString& text, 7506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen const WebVector<WebCompositionUnderline>& underlines, 7606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int selectionStart, int selectionEnd); 7706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen virtual bool confirmComposition(); 78cad810f21b803229eb11403f9209855525a25d57Steve Block virtual bool confirmComposition(const WebString& text); 7906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen virtual WebTextInputType textInputType(); 8006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen virtual WebRect caretOrSelectionBounds(); 812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual bool selectionRange(WebPoint& start, WebPoint& end) const { return false; } 82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setTextDirection(WebTextDirection direction); 8321939df44de1705786c545cd1bf519d47250322dBen Murdoch virtual bool isAcceleratedCompositingActive() const { return false; } 84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 85643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // WebPopupMenuImpl 86643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void Init(WebCore::FramelessScrollView* widget, 87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block const WebRect& bounds); 88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebWidgetClient* client() { return m_client; } 90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void MouseMove(const WebMouseEvent&); 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void MouseLeave(const WebMouseEvent&); 93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void MouseDown(const WebMouseEvent&); 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void MouseUp(const WebMouseEvent&); 95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void MouseDoubleClick(const WebMouseEvent&); 96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void MouseWheel(const WebMouseWheelEvent&); 97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bool KeyEvent(const WebKeyboardEvent&); 98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block protected: 100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block friend class WebPopupMenu; // For WebPopupMenu::create 101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block friend class WTF::RefCounted<WebPopupMenuImpl>; 102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 103643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebPopupMenuImpl(WebWidgetClient* client); 104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ~WebPopupMenuImpl(); 105643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // WebCore::HostWindow methods: 107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void invalidateContents(const WebCore::IntRect&, bool); 108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void invalidateWindow(const WebCore::IntRect&, bool); 109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void invalidateContentsAndWindow(const WebCore::IntRect&, bool); 110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void invalidateContentsForSlowScroll(const WebCore::IntRect&, bool); 111ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch virtual void scheduleAnimation(); 112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void scroll( 113643ca7872b450ea4efacab6188849e5aac2ba161Steve Block const WebCore::IntSize& scrollDelta, const WebCore::IntRect& scrollRect, 114643ca7872b450ea4efacab6188849e5aac2ba161Steve Block const WebCore::IntRect& clipRect); 115643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&) const; 116643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&) const; 117643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual PlatformPageClient platformPageClient() const { return 0; } 118643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void scrollRectIntoView(const WebCore::IntRect&, const WebCore::ScrollView*) const; 119643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void scrollbarsModeDidChange() const; 120967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch virtual void setCursor(const WebCore::Cursor&); 121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // WebCore::FramelessScrollViewClient methods: 123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void popupClosed(WebCore::FramelessScrollView*); 124643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 125643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebWidgetClient* m_client; 126643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebSize m_size; 127643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 128643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebPoint m_lastMousePosition; 129643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 130643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // This is a non-owning ref. The popup will notify us via popupClosed() 131643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // before it is destroyed. 132643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebCore::FramelessScrollView* m_widget; 133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}; 134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 135643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit 136643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 137643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 138