diff options
Diffstat (limited to 'webkit/glue/webpopupmenu_impl.h')
-rw-r--r-- | webkit/glue/webpopupmenu_impl.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/webkit/glue/webpopupmenu_impl.h b/webkit/glue/webpopupmenu_impl.h new file mode 100644 index 0000000..b6ef6ed --- /dev/null +++ b/webkit/glue/webpopupmenu_impl.h @@ -0,0 +1,111 @@ +// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef WEBKIT_GLUE_WEBPOPUPMENU_IMPL_H_ +#define WEBKIT_GLUE_WEBPOPUPMENU_IMPL_H_ + +#include "base/basictypes.h" +#include "base/ref_counted.h" +#include "webkit/api/public/WebPoint.h" +#include "webkit/api/public/WebPopupMenu.h" +#include "webkit/api/public/WebSize.h" + +#include "FramelessScrollViewClient.h" + +namespace WebCore { +class Frame; +class FramelessScrollView; +class KeyboardEvent; +class Page; +class PlatformKeyboardEvent; +class Range; +class Widget; +} + +namespace WebKit { +class WebKeyboardEvent; +class WebMouseEvent; +class WebMouseWheelEvent; +struct WebRect; +} + +struct MenuItem; + +class WebPopupMenuImpl : public WebKit::WebPopupMenu, + public WebCore::FramelessScrollViewClient, + public base::RefCounted<WebPopupMenuImpl> { + public: + // WebWidget + virtual void close(); + virtual WebKit::WebSize size() { return size_; } + virtual void resize(const WebKit::WebSize& new_size); + virtual void layout(); + virtual void paint(WebKit::WebCanvas* canvas, + const WebKit::WebRect& rect); + virtual bool handleInputEvent(const WebKit::WebInputEvent& input_event); + virtual void mouseCaptureLost(); + virtual void setFocus(bool enable); + virtual bool handleCompositionEvent(WebKit::WebCompositionCommand command, + int cursor_position, + int target_start, + int target_end, + const WebKit::WebString& text); + virtual bool queryCompositionStatus(bool* enabled, + WebKit::WebRect* caret_rect); + virtual void setTextDirection(WebKit::WebTextDirection direction); + + // WebPopupMenuImpl + void Init(WebCore::FramelessScrollView* widget, + const WebKit::WebRect& bounds); + + WebKit::WebWidgetClient* client() { + return client_; + } + + void MouseMove(const WebKit::WebMouseEvent& mouse_event); + void MouseLeave(const WebKit::WebMouseEvent& mouse_event); + void MouseDown(const WebKit::WebMouseEvent& mouse_event); + void MouseUp(const WebKit::WebMouseEvent& mouse_event); + void MouseDoubleClick(const WebKit::WebMouseEvent& mouse_event); + void MouseWheel(const WebKit::WebMouseWheelEvent& wheel_event); + bool KeyEvent(const WebKit::WebKeyboardEvent& key_event); + + protected: + friend class WebKit::WebPopupMenu; // For WebPopupMenu::create + friend class base::RefCounted<WebPopupMenuImpl>; + + WebPopupMenuImpl(WebKit::WebWidgetClient* client); + ~WebPopupMenuImpl(); + + // WebCore::HostWindow methods: + virtual void repaint(const WebCore::IntRect&, + bool content_changed, + bool immediate = false, + bool repaint_content_only = false); + virtual void scroll(const WebCore::IntSize& scroll_delta, + const WebCore::IntRect& scroll_rect, + const WebCore::IntRect& clip_rect); + virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&) const; + virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&) const; + virtual PlatformWidget platformWindow() const; + virtual void scrollRectIntoView(const WebCore::IntRect&, + const WebCore::ScrollView*) const; + + // WebCore::FramelessScrollViewClient methods: + virtual void popupClosed(WebCore::FramelessScrollView* popup_view); + + WebKit::WebWidgetClient* client_; + WebKit::WebSize size_; + + WebKit::WebPoint last_mouse_position_; + + // This is a non-owning ref. The popup will notify us via popupClosed() + // before it is destroyed. + WebCore::FramelessScrollView* widget_; + + private: + DISALLOW_COPY_AND_ASSIGN(WebPopupMenuImpl); +}; + +#endif // WEBKIT_GLUE_WEBPOPUPMENU_IMPL_H_ |