OLD | NEW |
| 1 |
1 /* | 2 /* |
2 * Copyright (c) 2011, Google Inc. All rights reserved. | 3 * Copyright (c) 2011, Google Inc. All rights reserved. |
3 * | 4 * |
4 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
6 * met: | 7 * met: |
7 * | 8 * |
8 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 11 * * Redistributions in binary form must reproduce the above |
(...skipping 19 matching lines...) Expand all Loading... |
30 | 31 |
31 #ifndef PopupContainer_h | 32 #ifndef PopupContainer_h |
32 #define PopupContainer_h | 33 #define PopupContainer_h |
33 | 34 |
34 #include "platform/PopupMenuStyle.h" | 35 #include "platform/PopupMenuStyle.h" |
35 #include "platform/geometry/FloatQuad.h" | 36 #include "platform/geometry/FloatQuad.h" |
36 #include "platform/scroll/FramelessScrollView.h" | 37 #include "platform/scroll/FramelessScrollView.h" |
37 #include "web/PopupListBox.h" | 38 #include "web/PopupListBox.h" |
38 | 39 |
39 namespace blink { | 40 namespace blink { |
| 41 |
40 class ChromeClient; | 42 class ChromeClient; |
41 class FrameView; | 43 class FrameView; |
42 class PopupMenuClient; | 44 class PopupMenuClient; |
43 } | |
44 | |
45 namespace blink { | |
46 | |
47 struct WebPopupMenuInfo; | 45 struct WebPopupMenuInfo; |
48 | 46 |
49 class PopupContainer FINAL : public blink::FramelessScrollView { | 47 class PopupContainer FINAL : public FramelessScrollView { |
50 public: | 48 public: |
51 static PassRefPtr<PopupContainer> create(blink::PopupMenuClient*, bool devic
eSupportsTouch); | 49 static PassRefPtr<PopupContainer> create(PopupMenuClient*, bool deviceSuppor
tsTouch); |
52 | 50 |
53 // Whether a key event should be sent to this popup. | 51 // Whether a key event should be sent to this popup. |
54 bool isInterestedInEventForKey(int keyCode); | 52 bool isInterestedInEventForKey(int keyCode); |
55 | 53 |
56 // FramelessScrollView | 54 // FramelessScrollView |
57 virtual void paint(blink::GraphicsContext*, const blink::IntRect&) OVERRIDE; | 55 virtual void paint(GraphicsContext*, const IntRect&) OVERRIDE; |
58 virtual void hide() OVERRIDE; | 56 virtual void hide() OVERRIDE; |
59 virtual bool handleMouseDownEvent(const blink::PlatformMouseEvent&) OVERRIDE
; | 57 virtual bool handleMouseDownEvent(const PlatformMouseEvent&) OVERRIDE; |
60 virtual bool handleMouseMoveEvent(const blink::PlatformMouseEvent&) OVERRIDE
; | 58 virtual bool handleMouseMoveEvent(const PlatformMouseEvent&) OVERRIDE; |
61 virtual bool handleMouseReleaseEvent(const blink::PlatformMouseEvent&) OVERR
IDE; | 59 virtual bool handleMouseReleaseEvent(const PlatformMouseEvent&) OVERRIDE; |
62 virtual bool handleWheelEvent(const blink::PlatformWheelEvent&) OVERRIDE; | 60 virtual bool handleWheelEvent(const PlatformWheelEvent&) OVERRIDE; |
63 virtual bool handleKeyEvent(const blink::PlatformKeyboardEvent&) OVERRIDE; | 61 virtual bool handleKeyEvent(const PlatformKeyboardEvent&) OVERRIDE; |
64 virtual bool handleTouchEvent(const blink::PlatformTouchEvent&) OVERRIDE; | 62 virtual bool handleTouchEvent(const PlatformTouchEvent&) OVERRIDE; |
65 virtual bool handleGestureEvent(const blink::PlatformGestureEvent&) OVERRIDE
; | 63 virtual bool handleGestureEvent(const PlatformGestureEvent&) OVERRIDE; |
66 | 64 |
67 // PopupContainer methods | 65 // PopupContainer methods |
68 | 66 |
69 // Show the popup | 67 // Show the popup |
70 void showPopup(blink::FrameView*); | 68 void showPopup(FrameView*); |
71 | 69 |
72 // Show the popup in the specified rect for the specified frame. | 70 // Show the popup in the specified rect for the specified frame. |
73 // Note: this code was somehow arbitrarily factored-out of the Popup class | 71 // Note: this code was somehow arbitrarily factored-out of the Popup class |
74 // so WebViewImpl can create a PopupContainer. This method is used for | 72 // so WebViewImpl can create a PopupContainer. This method is used for |
75 // displaying auto complete popup menus on Mac Chromium, and for all | 73 // displaying auto complete popup menus on Mac Chromium, and for all |
76 // popups on other platforms. | 74 // popups on other platforms. |
77 void showInRect(const blink::FloatQuad& controlPosition, const blink::IntSiz
e& controlSize, blink::FrameView*, int index); | 75 void showInRect(const FloatQuad& controlPosition, const IntSize& controlSize
, FrameView*, int index); |
78 | 76 |
79 // Hides the popup. | 77 // Hides the popup. |
80 void hidePopup(); | 78 void hidePopup(); |
81 | 79 |
82 // The popup was hidden. | 80 // The popup was hidden. |
83 void notifyPopupHidden(); | 81 void notifyPopupHidden(); |
84 | 82 |
85 PopupListBox* listBox() const { return m_listBox.get(); } | 83 PopupListBox* listBox() const { return m_listBox.get(); } |
86 | 84 |
87 bool isRTL() const; | 85 bool isRTL() const; |
88 | 86 |
89 // Gets the index of the item that the user is currently moused-over or | 87 // Gets the index of the item that the user is currently moused-over or |
90 // has selected with the keyboard up/down arrows. | 88 // has selected with the keyboard up/down arrows. |
91 int selectedIndex() const; | 89 int selectedIndex() const; |
92 | 90 |
93 // Refresh the popup values from the PopupMenuClient. | 91 // Refresh the popup values from the PopupMenuClient. |
94 blink::IntRect refresh(const blink::IntRect& targetControlRect); | 92 IntRect refresh(const IntRect& targetControlRect); |
95 | 93 |
96 // The menu per-item data. | 94 // The menu per-item data. |
97 const Vector<PopupItem*>& popupData() const; | 95 const Vector<PopupItem*>& popupData() const; |
98 | 96 |
99 // The height of a row in the menu. | 97 // The height of a row in the menu. |
100 int menuItemHeight() const; | 98 int menuItemHeight() const; |
101 | 99 |
102 // The size of the font being used. | 100 // The size of the font being used. |
103 int menuItemFontSize() const; | 101 int menuItemFontSize() const; |
104 | 102 |
105 // The style of the menu being used. | 103 // The style of the menu being used. |
106 blink::PopupMenuStyle menuStyle() const; | 104 PopupMenuStyle menuStyle() const; |
107 | 105 |
108 // While hovering popup menu window, we want to show tool tip message. | 106 // While hovering popup menu window, we want to show tool tip message. |
109 String getSelectedItemToolTip(); | 107 String getSelectedItemToolTip(); |
110 | 108 |
111 // This is public for testing. | 109 // This is public for testing. |
112 static blink::IntRect layoutAndCalculateWidgetRectInternal(blink::IntRect wi
dgetRectInScreen, int targetControlHeight, const blink::FloatRect& windowRect, c
onst blink::FloatRect& screen, bool isRTL, const int rtlOffset, const int vertic
alOffset, const blink::IntSize& transformOffset, PopupContent*, bool& needToResi
zeView); | 110 static IntRect layoutAndCalculateWidgetRectInternal(IntRect widgetRectInScre
en, int targetControlHeight, const FloatRect& windowRect, const FloatRect& scree
n, bool isRTL, const int rtlOffset, const int verticalOffset, const IntSize& tra
nsformOffset, PopupContent*, bool& needToResizeView); |
113 | 111 |
114 private: | 112 private: |
115 friend class WTF::RefCounted<PopupContainer>; | 113 friend class WTF::RefCounted<PopupContainer>; |
116 | 114 |
117 PopupContainer(blink::PopupMenuClient*, bool deviceSupportsTouch); | 115 PopupContainer(PopupMenuClient*, bool deviceSupportsTouch); |
118 virtual ~PopupContainer(); | 116 virtual ~PopupContainer(); |
119 | 117 |
120 // Paint the border. | 118 // Paint the border. |
121 void paintBorder(blink::GraphicsContext*, const blink::IntRect&); | 119 void paintBorder(GraphicsContext*, const IntRect&); |
122 | 120 |
123 // Layout and calculate popup widget size and location and returns it as Int
Rect. | 121 // Layout and calculate popup widget size and location and returns it as Int
Rect. |
124 blink::IntRect layoutAndCalculateWidgetRect(int targetControlHeight, const b
link::IntSize& transformOffset, const blink::IntPoint& popupInitialCoordinate); | 122 IntRect layoutAndCalculateWidgetRect(int targetControlHeight, const IntSize&
transformOffset, const IntPoint& popupInitialCoordinate); |
125 | 123 |
126 void fitToListBox(); | 124 void fitToListBox(); |
127 | 125 |
128 void popupOpened(const blink::IntRect& bounds); | 126 void popupOpened(const IntRect& bounds); |
129 void getPopupMenuInfo(WebPopupMenuInfo*); | 127 void getPopupMenuInfo(WebPopupMenuInfo*); |
130 | 128 |
131 // Returns the ChromeClient of the page this popup is associated with. | 129 // Returns the ChromeClient of the page this popup is associated with. |
132 blink::ChromeClient& chromeClient(); | 130 ChromeClient& chromeClient(); |
133 | 131 |
134 RefPtr<PopupListBox> m_listBox; | 132 RefPtr<PopupListBox> m_listBox; |
135 RefPtr<blink::FrameView> m_frameView; | 133 RefPtr<FrameView> m_frameView; |
136 | 134 |
137 // m_controlPosition contains the transformed position of the | 135 // m_controlPosition contains the transformed position of the |
138 // <select>/<input> associated with this popup. m_controlSize is the size | 136 // <select>/<input> associated with this popup. m_controlSize is the size |
139 // of the <select>/<input> without transform. | 137 // of the <select>/<input> without transform. |
140 // The popup menu will be positioned as follows: | 138 // The popup menu will be positioned as follows: |
141 // LTR : If the popup is positioned down it will align with the bottom left | 139 // LTR : If the popup is positioned down it will align with the bottom left |
142 // of m_controlPosition (p4) | 140 // of m_controlPosition (p4) |
143 // If the popup is positioned up it will align with the top left of | 141 // If the popup is positioned up it will align with the top left of |
144 // m_controlPosition (p1) | 142 // m_controlPosition (p1) |
145 // RTL : If the popup is positioned down it will align with the bottom right | 143 // RTL : If the popup is positioned down it will align with the bottom right |
146 // of m_controlPosition (p3) | 144 // of m_controlPosition (p3) |
147 // If the popup is positioned up it will align with the top right of | 145 // If the popup is positioned up it will align with the top right of |
148 // m_controlPosition (p2) | 146 // m_controlPosition (p2) |
149 blink::FloatQuad m_controlPosition; | 147 FloatQuad m_controlPosition; |
150 blink::IntSize m_controlSize; | 148 IntSize m_controlSize; |
151 | 149 |
152 // Whether the popup is currently open. | 150 // Whether the popup is currently open. |
153 bool m_popupOpen; | 151 bool m_popupOpen; |
154 }; | 152 }; |
155 | 153 |
156 } // namespace blink | 154 } // namespace blink |
157 | 155 |
158 #endif | 156 #endif |
OLD | NEW |