| OLD | NEW |
| 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 18 matching lines...) Expand all Loading... |
| 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/FramelessScrollView.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 WebCore { | 39 namespace blink { |
| 40 class Font; | 40 class Font; |
| 41 class GraphicsContext; | 41 class GraphicsContext; |
| 42 class IntRect; | 42 class IntRect; |
| 43 class PlatformKeyboardEvent; | 43 class PlatformKeyboardEvent; |
| 44 class PlatformMouseEvent; | 44 class PlatformMouseEvent; |
| 45 class PlatformGestureEvent; | 45 class PlatformGestureEvent; |
| 46 class PlatformTouchEvent; | 46 class PlatformTouchEvent; |
| 47 class PlatformWheelEvent; | 47 class PlatformWheelEvent; |
| 48 class PopupMenuClient; | 48 class PopupMenuClient; |
| 49 } | 49 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 72 | 72 |
| 73 PopupItem(const String& label, Type type) | 73 PopupItem(const String& label, Type type) |
| 74 : label(label) | 74 : label(label) |
| 75 , type(type) | 75 , type(type) |
| 76 , yOffset(0) | 76 , yOffset(0) |
| 77 { | 77 { |
| 78 } | 78 } |
| 79 String label; | 79 String label; |
| 80 Type type; | 80 Type type; |
| 81 int yOffset; // y offset of this item, relative to the top of the popup. | 81 int yOffset; // y offset of this item, relative to the top of the popup. |
| 82 WebCore::TextDirection textDirection; | 82 blink::TextDirection textDirection; |
| 83 bool hasTextDirectionOverride; | 83 bool hasTextDirectionOverride; |
| 84 bool enabled; | 84 bool enabled; |
| 85 }; | 85 }; |
| 86 | 86 |
| 87 // This class uses WebCore code to paint and handle events for a drop-down list | 87 // This class uses WebCore code to paint and handle events for a drop-down list |
| 88 // box ("combobox" on Windows). | 88 // box ("combobox" on Windows). |
| 89 class PopupListBox FINAL : public WebCore::FramelessScrollView, public PopupCont
ent { | 89 class PopupListBox FINAL : public blink::FramelessScrollView, public PopupConten
t { |
| 90 public: | 90 public: |
| 91 static PassRefPtr<PopupListBox> create(WebCore::PopupMenuClient* client, boo
l deviceSupportsTouch) | 91 static PassRefPtr<PopupListBox> create(blink::PopupMenuClient* client, bool
deviceSupportsTouch) |
| 92 { | 92 { |
| 93 return adoptRef(new PopupListBox(client, deviceSupportsTouch)); | 93 return adoptRef(new PopupListBox(client, deviceSupportsTouch)); |
| 94 } | 94 } |
| 95 | 95 |
| 96 // FramelessScrollView | 96 // FramelessScrollView |
| 97 virtual void paint(WebCore::GraphicsContext*, const WebCore::IntRect&) OVERR
IDE; | 97 virtual void paint(blink::GraphicsContext*, const blink::IntRect&) OVERRIDE; |
| 98 virtual bool handleMouseDownEvent(const WebCore::PlatformMouseEvent&) OVERRI
DE; | 98 virtual bool handleMouseDownEvent(const blink::PlatformMouseEvent&) OVERRIDE
; |
| 99 virtual bool handleMouseMoveEvent(const WebCore::PlatformMouseEvent&) OVERRI
DE; | 99 virtual bool handleMouseMoveEvent(const blink::PlatformMouseEvent&) OVERRIDE
; |
| 100 virtual bool handleMouseReleaseEvent(const WebCore::PlatformMouseEvent&) OVE
RRIDE; | 100 virtual bool handleMouseReleaseEvent(const blink::PlatformMouseEvent&) OVERR
IDE; |
| 101 virtual bool handleWheelEvent(const WebCore::PlatformWheelEvent&) OVERRIDE; | 101 virtual bool handleWheelEvent(const blink::PlatformWheelEvent&) OVERRIDE; |
| 102 virtual bool handleKeyEvent(const WebCore::PlatformKeyboardEvent&) OVERRIDE; | 102 virtual bool handleKeyEvent(const blink::PlatformKeyboardEvent&) OVERRIDE; |
| 103 virtual bool handleTouchEvent(const WebCore::PlatformTouchEvent&) OVERRIDE; | 103 virtual bool handleTouchEvent(const blink::PlatformTouchEvent&) OVERRIDE; |
| 104 virtual bool handleGestureEvent(const WebCore::PlatformGestureEvent&) OVERRI
DE; | 104 virtual bool handleGestureEvent(const blink::PlatformGestureEvent&) OVERRIDE
; |
| 105 | 105 |
| 106 // ScrollView | 106 // ScrollView |
| 107 virtual WebCore::HostWindow* hostWindow() const OVERRIDE; | 107 virtual blink::HostWindow* hostWindow() const OVERRIDE; |
| 108 virtual bool shouldPlaceVerticalScrollbarOnLeft() const OVERRIDE; | 108 virtual bool shouldPlaceVerticalScrollbarOnLeft() const OVERRIDE; |
| 109 | 109 |
| 110 // PopupListBox methods | 110 // PopupListBox methods |
| 111 | 111 |
| 112 // Closes the popup | 112 // Closes the popup |
| 113 void abandon(); | 113 void abandon(); |
| 114 | 114 |
| 115 // Updates our internal list to match the client. | 115 // Updates our internal list to match the client. |
| 116 void updateFromElement(); | 116 void updateFromElement(); |
| 117 | 117 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 const Vector<PopupItem*>& items() const { return m_items; } | 156 const Vector<PopupItem*>& items() const { return m_items; } |
| 157 | 157 |
| 158 virtual int popupContentHeight() const OVERRIDE; | 158 virtual int popupContentHeight() const OVERRIDE; |
| 159 | 159 |
| 160 static const int defaultMaxHeight; | 160 static const int defaultMaxHeight; |
| 161 | 161 |
| 162 private: | 162 private: |
| 163 friend class PopupContainer; | 163 friend class PopupContainer; |
| 164 friend class RefCounted<PopupListBox>; | 164 friend class RefCounted<PopupListBox>; |
| 165 | 165 |
| 166 PopupListBox(WebCore::PopupMenuClient*, bool deviceSupportsTouch); | 166 PopupListBox(blink::PopupMenuClient*, bool deviceSupportsTouch); |
| 167 | 167 |
| 168 virtual ~PopupListBox() | 168 virtual ~PopupListBox() |
| 169 { | 169 { |
| 170 clear(); | 170 clear(); |
| 171 } | 171 } |
| 172 | 172 |
| 173 // Hides the popup. Other classes should not call this. Use abandon instead. | 173 // Hides the popup. Other classes should not call this. Use abandon instead. |
| 174 void hidePopup(); | 174 void hidePopup(); |
| 175 | 175 |
| 176 // Returns true if the selection can be changed to index. | 176 // Returns true if the selection can be changed to index. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 189 void clearSelection(); | 189 void clearSelection(); |
| 190 | 190 |
| 191 // Scrolls to reveal the given index. | 191 // Scrolls to reveal the given index. |
| 192 void scrollToRevealRow(int index); | 192 void scrollToRevealRow(int index); |
| 193 void scrollToRevealSelection() { scrollToRevealRow(m_selectedIndex); } | 193 void scrollToRevealSelection() { scrollToRevealRow(m_selectedIndex); } |
| 194 | 194 |
| 195 // Invalidates the row at the given index. | 195 // Invalidates the row at the given index. |
| 196 void invalidateRow(int index); | 196 void invalidateRow(int index); |
| 197 | 197 |
| 198 // Get the bounds of a row. | 198 // Get the bounds of a row. |
| 199 WebCore::IntRect getRowBounds(int index); | 199 blink::IntRect getRowBounds(int index); |
| 200 | 200 |
| 201 // Converts a point to an index of the row the point is over | 201 // Converts a point to an index of the row the point is over |
| 202 int pointToRowIndex(const WebCore::IntPoint&); | 202 int pointToRowIndex(const blink::IntPoint&); |
| 203 | 203 |
| 204 // Paint an individual row | 204 // Paint an individual row |
| 205 void paintRow(WebCore::GraphicsContext*, const WebCore::IntRect&, int rowInd
ex); | 205 void paintRow(blink::GraphicsContext*, const blink::IntRect&, int rowIndex); |
| 206 | 206 |
| 207 // Test if the given point is within the bounds of the popup window. | 207 // Test if the given point is within the bounds of the popup window. |
| 208 bool isPointInBounds(const WebCore::IntPoint&); | 208 bool isPointInBounds(const blink::IntPoint&); |
| 209 | 209 |
| 210 // Called when the user presses a text key. Does a prefix-search of the item
s. | 210 // Called when the user presses a text key. Does a prefix-search of the item
s. |
| 211 void typeAheadFind(const WebCore::PlatformKeyboardEvent&); | 211 void typeAheadFind(const blink::PlatformKeyboardEvent&); |
| 212 | 212 |
| 213 // Returns the font to use for the given row | 213 // Returns the font to use for the given row |
| 214 WebCore::Font getRowFont(int index); | 214 blink::Font getRowFont(int index); |
| 215 | 215 |
| 216 // Moves the selection down/up one item, taking care of looping back to the | 216 // Moves the selection down/up one item, taking care of looping back to the |
| 217 // first/last element if m_loopSelectionNavigation is true. | 217 // first/last element if m_loopSelectionNavigation is true. |
| 218 void selectPreviousRow(); | 218 void selectPreviousRow(); |
| 219 void selectNextRow(); | 219 void selectNextRow(); |
| 220 | 220 |
| 221 // If the device is a touch screen we increase the height of menu items | 221 // If the device is a touch screen we increase the height of menu items |
| 222 // to make it easier to unambiguously touch them. | 222 // to make it easier to unambiguously touch them. |
| 223 bool m_deviceSupportsTouch; | 223 bool m_deviceSupportsTouch; |
| 224 | 224 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 245 // Our suggested width, not including scrollbar. | 245 // Our suggested width, not including scrollbar. |
| 246 int m_baseWidth; | 246 int m_baseWidth; |
| 247 | 247 |
| 248 // The maximum height we can be without being off-screen. | 248 // The maximum height we can be without being off-screen. |
| 249 int m_maxHeight; | 249 int m_maxHeight; |
| 250 | 250 |
| 251 // A list of the options contained within the <select> | 251 // A list of the options contained within the <select> |
| 252 Vector<PopupItem*> m_items; | 252 Vector<PopupItem*> m_items; |
| 253 | 253 |
| 254 // The <select> PopupMenuClient that opened us. | 254 // The <select> PopupMenuClient that opened us. |
| 255 WebCore::PopupMenuClient* m_popupClient; | 255 blink::PopupMenuClient* m_popupClient; |
| 256 | 256 |
| 257 // The scrollbar which has mouse capture. Mouse events go straight to this | 257 // The scrollbar which has mouse capture. Mouse events go straight to this |
| 258 // if not null. | 258 // if not null. |
| 259 RefPtr<WebCore::Scrollbar> m_capturingScrollbar; | 259 RefPtr<blink::Scrollbar> m_capturingScrollbar; |
| 260 | 260 |
| 261 // The last scrollbar that the mouse was over. Used for mouseover highlights
. | 261 // The last scrollbar that the mouse was over. Used for mouseover highlights
. |
| 262 RefPtr<WebCore::Scrollbar> m_lastScrollbarUnderMouse; | 262 RefPtr<blink::Scrollbar> m_lastScrollbarUnderMouse; |
| 263 | 263 |
| 264 // The string the user has typed so far into the popup. Used for typeAheadFi
nd. | 264 // The string the user has typed so far into the popup. Used for typeAheadFi
nd. |
| 265 String m_typedString; | 265 String m_typedString; |
| 266 | 266 |
| 267 // The char the user has hit repeatedly. Used for typeAheadFind. | 267 // The char the user has hit repeatedly. Used for typeAheadFind. |
| 268 UChar m_repeatingChar; | 268 UChar m_repeatingChar; |
| 269 | 269 |
| 270 // The last time the user hit a key. Used for typeAheadFind. | 270 // The last time the user hit a key. Used for typeAheadFind. |
| 271 TimeStamp m_lastCharTime; | 271 TimeStamp m_lastCharTime; |
| 272 | 272 |
| 273 // If width exeeds screen width, we have to clip it. | 273 // If width exeeds screen width, we have to clip it. |
| 274 int m_maxWindowWidth; | 274 int m_maxWindowWidth; |
| 275 | 275 |
| 276 // To forward last mouse release event. | 276 // To forward last mouse release event. |
| 277 RefPtrWillBePersistent<WebCore::Element> m_focusedElement; | 277 RefPtrWillBePersistent<blink::Element> m_focusedElement; |
| 278 }; | 278 }; |
| 279 | 279 |
| 280 } // namespace blink | 280 } // namespace blink |
| 281 | 281 |
| 282 #endif | 282 #endif |
| OLD | NEW |