| 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 | 
|---|