1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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_
|