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// FIXME: Add this to FramelessScrollViewClient.h 35643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebCore { class FramelessScrollView; } 36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "FramelessScrollViewClient.h" 38643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// FIXME: remove the relative paths once glue/ consumers are removed. 39643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "../public/WebPoint.h" 40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "../public/WebPopupMenu.h" 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "../public/WebSize.h" 42643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <wtf/RefCounted.h> 43643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 44643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebCore { 45643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass Frame; 46643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass FramelessScrollView; 47643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass KeyboardEvent; 48643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass Page; 49643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass PlatformKeyboardEvent; 50643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass Range; 51643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass Widget; 52643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 53643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 54643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit { 55643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebKeyboardEvent; 56643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebMouseEvent; 57643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebMouseWheelEvent; 58643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstruct WebRect; 59643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 60643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebPopupMenuImpl : public WebPopupMenu, 61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block public WebCore::FramelessScrollViewClient, 62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block public RefCounted<WebPopupMenuImpl> { 63643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockpublic: 64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // WebWidget 65643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void close(); 66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WebSize size() { return m_size; } 67643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void resize(const WebSize&); 68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void layout(); 69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void paint(WebCanvas* canvas, const WebRect& rect); 70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool handleInputEvent(const WebInputEvent&); 71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void mouseCaptureLost(); 72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setFocus(bool enable); 73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool handleCompositionEvent( 74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebCompositionCommand command, int cursorPosition, 75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block int targetStart, int targetEnd, const WebString& text); 76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool queryCompositionStatus(bool* enabled, WebRect* caretRect); 77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setTextDirection(WebTextDirection direction); 78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // WebPopupMenuImpl 80643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void Init(WebCore::FramelessScrollView* widget, 81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block const WebRect& bounds); 82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 83643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebWidgetClient* client() { return m_client; } 84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 85643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void MouseMove(const WebMouseEvent&); 86643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void MouseLeave(const WebMouseEvent&); 87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void MouseDown(const WebMouseEvent&); 88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void MouseUp(const WebMouseEvent&); 89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void MouseDoubleClick(const WebMouseEvent&); 90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void MouseWheel(const WebMouseWheelEvent&); 91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bool KeyEvent(const WebKeyboardEvent&); 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block protected: 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block friend class WebPopupMenu; // For WebPopupMenu::create 95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block friend class WTF::RefCounted<WebPopupMenuImpl>; 96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebPopupMenuImpl(WebWidgetClient* client); 98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ~WebPopupMenuImpl(); 99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // WebCore::HostWindow methods: 101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void repaint( 102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block const WebCore::IntRect&, bool contentChanged, bool immediate = false, 103643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bool repaintContentOnly = false); 104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void scroll( 105643ca7872b450ea4efacab6188849e5aac2ba161Steve Block const WebCore::IntSize& scrollDelta, const WebCore::IntRect& scrollRect, 106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block const WebCore::IntRect& clipRect); 107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&) const; 108643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&) const; 109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual PlatformPageClient platformPageClient() const { return 0; } 110643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void scrollRectIntoView(const WebCore::IntRect&, const WebCore::ScrollView*) const; 111643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void scrollbarsModeDidChange() const; 112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 113643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // WebCore::FramelessScrollViewClient methods: 114643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void popupClosed(WebCore::FramelessScrollView*); 115643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 116643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebWidgetClient* m_client; 117643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebSize m_size; 118643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 119643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebPoint m_lastMousePosition; 120643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // This is a non-owning ref. The popup will notify us via popupClosed() 122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // before it is destroyed. 123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebCore::FramelessScrollView* m_widget; 124643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}; 125643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 126643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit 127643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 128643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 129