Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Side by Side Diff: Source/web/PopupListBox.h

Issue 562513004: Remove FramelessScrollView. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix Windows build. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/web/PopupContainerClient.h ('k') | Source/web/PopupListBox.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2011, Google Inc. All rights reserved. 2 * Copyright (c) 2011, Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 14 matching lines...) Expand all
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #ifndef PopupListBox_h 31 #ifndef PopupListBox_h
32 #define PopupListBox_h 32 #define PopupListBox_h
33 33
34 #include "core/dom/Element.h" 34 #include "core/dom/Element.h"
35 #include "platform/scroll/FramelessScrollView.h" 35 #include "platform/scroll/ScrollView.h"
36 #include "platform/text/TextDirection.h" 36 #include "platform/text/TextDirection.h"
37 #include "wtf/text/WTFString.h" 37 #include "wtf/text/WTFString.h"
38 38
39 namespace blink { 39 namespace blink {
40 40
41 class Font; 41 class Font;
42 class GraphicsContext; 42 class GraphicsContext;
43 class IntRect; 43 class IntRect;
44 class PlatformKeyboardEvent; 44 class PlatformKeyboardEvent;
45 class PlatformMouseEvent; 45 class PlatformMouseEvent;
46 class PlatformGestureEvent; 46 class PlatformGestureEvent;
47 class PlatformTouchEvent; 47 class PlatformTouchEvent;
48 class PlatformWheelEvent; 48 class PlatformWheelEvent;
49 class PopupContainer;
49 class PopupMenuClient; 50 class PopupMenuClient;
50 typedef unsigned long long TimeStamp; 51 typedef unsigned long long TimeStamp;
51 52
52 class PopupContent { 53 class PopupContent {
53 public: 54 public:
54 virtual void layout() = 0; 55 virtual void layout() = 0;
55 virtual void setMaxHeight(int) = 0; 56 virtual void setMaxHeight(int) = 0;
56 virtual void setMaxWidthAndLayout(int) = 0; 57 virtual void setMaxWidthAndLayout(int) = 0;
57 virtual int popupContentHeight() const = 0; 58 virtual int popupContentHeight() const = 0;
58 virtual ~PopupContent() { }; 59 virtual ~PopupContent() { };
(...skipping 16 matching lines...) Expand all
75 } 76 }
76 String label; 77 String label;
77 Type type; 78 Type type;
78 int yOffset; // y offset of this item, relative to the top of the popup. 79 int yOffset; // y offset of this item, relative to the top of the popup.
79 TextDirection textDirection; 80 TextDirection textDirection;
80 bool hasTextDirectionOverride; 81 bool hasTextDirectionOverride;
81 bool enabled; 82 bool enabled;
82 bool displayNone; 83 bool displayNone;
83 }; 84 };
84 85
85 // This class uses WebCore code to paint and handle events for a drop-down list 86 // This class manages the scrollable content inside a <select> popup.
86 // box ("combobox" on Windows). 87 class PopupListBox FINAL : public ScrollView, public PopupContent {
87 class PopupListBox FINAL : public FramelessScrollView, public PopupContent {
88 public: 88 public:
89 static PassRefPtr<PopupListBox> create(PopupMenuClient* client, bool deviceS upportsTouch) 89 static PassRefPtr<PopupListBox> create(PopupMenuClient* client, bool deviceS upportsTouch, PopupContainer* container)
90 { 90 {
91 return adoptRef(new PopupListBox(client, deviceSupportsTouch)); 91 return adoptRef(new PopupListBox(client, deviceSupportsTouch, container) );
92 } 92 }
93 93
94 // FramelessScrollView 94 // Widget
95 virtual void paint(GraphicsContext*, const IntRect&) OVERRIDE; 95 virtual void invalidateRect(const IntRect&) OVERRIDE;
96 virtual bool handleMouseDownEvent(const PlatformMouseEvent&) OVERRIDE; 96
97 virtual bool handleMouseMoveEvent(const PlatformMouseEvent&) OVERRIDE; 97 // ScrollableArea
98 virtual bool handleMouseReleaseEvent(const PlatformMouseEvent&) OVERRIDE; 98 virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&) OVERRIDE;
99 virtual bool handleWheelEvent(const PlatformWheelEvent&) OVERRIDE; 99 virtual bool isActive() const OVERRIDE;
100 virtual bool handleKeyEvent(const PlatformKeyboardEvent&) OVERRIDE; 100 virtual bool scrollbarsCanBeActive() const OVERRIDE;
101 virtual bool handleTouchEvent(const PlatformTouchEvent&) OVERRIDE; 101 virtual IntRect scrollableAreaBoundingBox() const OVERRIDE;
102 virtual bool handleGestureEvent(const PlatformGestureEvent&) OVERRIDE;
103 102
104 // ScrollView 103 // ScrollView
104 virtual void paint(GraphicsContext*, const IntRect&) OVERRIDE;
105 virtual HostWindow* hostWindow() const OVERRIDE; 105 virtual HostWindow* hostWindow() const OVERRIDE;
106 virtual bool shouldPlaceVerticalScrollbarOnLeft() const OVERRIDE; 106 virtual bool shouldPlaceVerticalScrollbarOnLeft() const OVERRIDE;
107 virtual IntRect windowClipRect(IncludeScrollbarsInRect = ExcludeScrollbars) const OVERRIDE;
107 108
108 // PopupListBox methods 109 // PopupListBox methods
109 110
111 virtual bool handleMouseDownEvent(const PlatformMouseEvent&);
112 virtual bool handleMouseMoveEvent(const PlatformMouseEvent&);
113 virtual bool handleMouseReleaseEvent(const PlatformMouseEvent&);
114 virtual bool handleWheelEvent(const PlatformWheelEvent&);
115 virtual bool handleKeyEvent(const PlatformKeyboardEvent&);
116 virtual bool handleTouchEvent(const PlatformTouchEvent&);
117 virtual bool handleGestureEvent(const PlatformGestureEvent&);
118
110 // Closes the popup 119 // Closes the popup
111 void abandon(); 120 void abandon();
112 121
113 // Updates our internal list to match the client. 122 // Updates our internal list to match the client.
114 void updateFromElement(); 123 void updateFromElement();
115 124
116 // Frees any allocated resources used in a particular popup session. 125 // Frees any allocated resources used in a particular popup session.
117 void clear(); 126 void clear();
118 127
119 // Sets the index of the option that is displayed in the <select> widget in the page 128 // Sets the index of the option that is displayed in the <select> widget in the page
(...skipping 14 matching lines...) Expand all
134 143
135 void setBaseWidth(int width) { m_baseWidth = std::min(m_maxWindowWidth, widt h); } 144 void setBaseWidth(int width) { m_baseWidth = std::min(m_maxWindowWidth, widt h); }
136 145
137 // Computes the size of widget and children. 146 // Computes the size of widget and children.
138 virtual void layout() OVERRIDE; 147 virtual void layout() OVERRIDE;
139 148
140 // Returns whether the popup wants to process events for the passed key. 149 // Returns whether the popup wants to process events for the passed key.
141 bool isInterestedInEventForKey(int keyCode); 150 bool isInterestedInEventForKey(int keyCode);
142 151
143 // Gets the height of a row. 152 // Gets the height of a row.
144 int getRowHeight(int index); 153 int getRowHeight(int index) const;
145 154
146 int getRowBaseWidth(int index); 155 int getRowBaseWidth(int index);
147 156
148 virtual void setMaxHeight(int maxHeight) OVERRIDE { m_maxHeight = maxHeight; } 157 virtual void setMaxHeight(int maxHeight) OVERRIDE { m_maxHeight = maxHeight; }
149 158
150 void setMaxWidth(int maxWidth) { m_maxWindowWidth = maxWidth; } 159 void setMaxWidth(int maxWidth) { m_maxWindowWidth = maxWidth; }
151 160
152 virtual void setMaxWidthAndLayout(int) OVERRIDE; 161 virtual void setMaxWidthAndLayout(int) OVERRIDE;
153 162
154 void disconnectClient() { m_popupClient = 0; } 163 void disconnectClient() { m_popupClient = 0; }
155 164
156 const Vector<PopupItem*>& items() const { return m_items; } 165 const Vector<PopupItem*>& items() const { return m_items; }
157 166
158 virtual int popupContentHeight() const OVERRIDE; 167 virtual int popupContentHeight() const OVERRIDE;
159 168
160 static const int defaultMaxHeight; 169 static const int defaultMaxHeight;
161 170
171 protected:
172 // ScrollView
173 virtual void paintContents(GraphicsContext*, const IntRect&) OVERRIDE { }
174 virtual void scrollbarExistenceDidChange() OVERRIDE { }
175
162 private: 176 private:
163 friend class PopupContainer; 177 friend class PopupContainer;
164 friend class RefCounted<PopupListBox>; 178 friend class RefCounted<PopupListBox>;
165 179
166 PopupListBox(PopupMenuClient*, bool deviceSupportsTouch); 180 PopupListBox(PopupMenuClient*, bool deviceSupportsTouch, PopupContainer*);
167 181 virtual ~PopupListBox();
168 virtual ~PopupListBox()
169 {
170 clear();
171 }
172 182
173 // Hides the popup. Other classes should not call this. Use abandon instead. 183 // Hides the popup. Other classes should not call this. Use abandon instead.
174 void hidePopup(); 184 void hidePopup();
175 185
176 // Returns true if the selection can be changed to index. 186 // Returns true if the selection can be changed to index.
177 // Disabled items, or labels cannot be selected. 187 // Disabled items, or labels cannot be selected.
178 bool isSelectableItem(int index); 188 bool isSelectableItem(int index);
179 189
180 // Select an index in the list, scrolling if necessary. 190 // Select an index in the list, scrolling if necessary.
181 void selectIndex(int index); 191 void selectIndex(int index);
(...skipping 22 matching lines...) Expand all
204 // Paint an individual row 214 // Paint an individual row
205 void paintRow(GraphicsContext*, const IntRect&, int rowIndex); 215 void paintRow(GraphicsContext*, const IntRect&, int rowIndex);
206 216
207 // Test if the given point is within the bounds of the popup window. 217 // Test if the given point is within the bounds of the popup window.
208 bool isPointInBounds(const IntPoint&); 218 bool isPointInBounds(const IntPoint&);
209 219
210 // Called when the user presses a text key. Does a prefix-search of the item s. 220 // Called when the user presses a text key. Does a prefix-search of the item s.
211 void typeAheadFind(const PlatformKeyboardEvent&); 221 void typeAheadFind(const PlatformKeyboardEvent&);
212 222
213 // Returns the font to use for the given row 223 // Returns the font to use for the given row
214 Font getRowFont(int index); 224 Font getRowFont(int index) const;
215 225
216 // Moves the selection down/up one item, taking care of looping back to the 226 // Moves the selection down/up one item, taking care of looping back to the
217 // first/last element if m_loopSelectionNavigation is true. 227 // first/last element if m_loopSelectionNavigation is true.
218 void selectPreviousRow(); 228 void selectPreviousRow();
219 void selectNextRow(); 229 void selectNextRow();
220 230
221 // If the device is a touch screen we increase the height of menu items 231 // If the device is a touch screen we increase the height of menu items
222 // to make it easier to unambiguously touch them. 232 // to make it easier to unambiguously touch them.
223 bool m_deviceSupportsTouch; 233 bool m_deviceSupportsTouch;
224 234
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 UChar m_repeatingChar; 278 UChar m_repeatingChar;
269 279
270 // The last time the user hit a key. Used for typeAheadFind. 280 // The last time the user hit a key. Used for typeAheadFind.
271 TimeStamp m_lastCharTime; 281 TimeStamp m_lastCharTime;
272 282
273 // If width exeeds screen width, we have to clip it. 283 // If width exeeds screen width, we have to clip it.
274 int m_maxWindowWidth; 284 int m_maxWindowWidth;
275 285
276 // To forward last mouse release event. 286 // To forward last mouse release event.
277 RefPtrWillBePersistent<Element> m_focusedElement; 287 RefPtrWillBePersistent<Element> m_focusedElement;
288
289 PopupContainer* m_container;
278 }; 290 };
279 291
280 } // namespace blink 292 } // namespace blink
281 293
282 #endif 294 #endif
OLDNEW
« no previous file with comments | « Source/web/PopupContainerClient.h ('k') | Source/web/PopupListBox.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698