Index: Source/web/PopupListBox.h |
diff --git a/Source/web/PopupListBox.h b/Source/web/PopupListBox.h |
deleted file mode 100644 |
index 1187d06ed0d618e6dd5a9b418ca7acb7504429fb..0000000000000000000000000000000000000000 |
--- a/Source/web/PopupListBox.h |
+++ /dev/null |
@@ -1,325 +0,0 @@ |
-/* |
- * Copyright (c) 2011, Google Inc. All rights reserved. |
- * |
- * Redistribution and use in source and binary forms, with or without |
- * modification, are permitted provided that the following conditions are |
- * met: |
- * |
- * * Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * * Redistributions in binary form must reproduce the above |
- * copyright notice, this list of conditions and the following disclaimer |
- * in the documentation and/or other materials provided with the |
- * distribution. |
- * * Neither the name of Google Inc. nor the names of its |
- * contributors may be used to endorse or promote products derived from |
- * this software without specific prior written permission. |
- * |
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- */ |
- |
-#ifndef PopupListBox_h |
-#define PopupListBox_h |
- |
-#include "core/dom/Element.h" |
-#include "platform/Widget.h" |
-#include "platform/scroll/ScrollTypes.h" |
-#include "platform/scroll/ScrollableArea.h" |
-#include "platform/text/TextDirection.h" |
-#include "wtf/text/WTFString.h" |
- |
-namespace blink { |
- |
-class Font; |
-class GraphicsContext; |
-class IntRect; |
-class PlatformKeyboardEvent; |
-class PlatformMouseEvent; |
-class PlatformGestureEvent; |
-class PlatformTouchEvent; |
-class PlatformWheelEvent; |
-class PopupContainer; |
-class PopupMenuClient; |
-typedef unsigned long long TimeStamp; |
- |
-class PopupContent { |
-public: |
- virtual void layout() = 0; |
- virtual void setMaxHeight(int) = 0; |
- virtual void setMaxWidthAndLayout(int) = 0; |
- virtual int popupContentHeight() const = 0; |
- virtual ~PopupContent() { }; |
-}; |
- |
-// A container for the data for each menu item (e.g. represented by <option> |
-// or <optgroup> in a <select> widget) and is used by PopupListBox. |
-struct PopupItem { |
- enum Type { |
- TypeOption, |
- TypeGroup, |
- TypeSeparator |
- }; |
- |
- PopupItem(const String& label, Type type) |
- : label(label) |
- , type(type) |
- , yOffset(0) |
- { |
- } |
- String label; |
- Type type; |
- int yOffset; // y offset of this item, relative to the top of the popup. |
- TextDirection textDirection; |
- bool hasTextDirectionOverride; |
- bool enabled; |
- bool displayNone; |
-}; |
- |
-// This class manages the scrollable content inside a <select> popup. |
-class PopupListBox final : public Widget, public ScrollableArea, public PopupContent { |
-public: |
- static PassRefPtrWillBeRawPtr<PopupListBox> create(PopupMenuClient* client, bool deviceSupportsTouch, PopupContainer* container) |
- { |
- return adoptRefWillBeNoop(new PopupListBox(client, deviceSupportsTouch, container)); |
- } |
- |
- // Widget |
- virtual void invalidateRect(const IntRect&) override; |
- virtual void paint(GraphicsContext*, const IntRect&) override; |
- virtual HostWindow* hostWindow() const override; |
- virtual void setFrameRect(const IntRect&) override; |
- virtual IntPoint convertChildToSelf(const Widget* child, const IntPoint&) const override; |
- virtual IntPoint convertSelfToChild(const Widget* child, const IntPoint&) const override; |
- |
- // ScrollableArea |
- virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&) override; |
- virtual bool isActive() const override; |
- virtual bool scrollbarsCanBeActive() const override; |
- virtual IntRect scrollableAreaBoundingBox() const override; |
- virtual bool shouldPlaceVerticalScrollbarOnLeft() const override; |
- virtual int scrollSize(ScrollbarOrientation) const override; |
- virtual void setScrollOffset(const IntPoint&) override; |
- virtual bool isScrollCornerVisible() const override { return false; } |
- virtual bool userInputScrollable(ScrollbarOrientation orientation) const override { return orientation == VerticalScrollbar; } |
- virtual Scrollbar* verticalScrollbar() const override { return m_verticalScrollbar.get(); } |
- virtual IntRect visibleContentRect(IncludeScrollbarsInRect = ExcludeScrollbars) const override; |
- virtual IntSize contentsSize() const override { return m_contentsSize; } |
- virtual IntPoint scrollPosition() const override { return visibleContentRect().location(); } |
- virtual IntPoint maximumScrollPosition() const override; // The maximum position we can be scrolled to. |
- virtual IntPoint minimumScrollPosition() const override; // The minimum position we can be scrolled to. |
- virtual IntRect scrollCornerRect() const override { return IntRect(); } |
- |
- // PopupListBox methods |
- |
- bool handleMouseDownEvent(const PlatformMouseEvent&); |
- bool handleMouseMoveEvent(const PlatformMouseEvent&); |
- bool handleMouseReleaseEvent(const PlatformMouseEvent&); |
- bool handleWheelEvent(const PlatformWheelEvent&); |
- bool handleKeyEvent(const PlatformKeyboardEvent&); |
- bool handleTouchEvent(const PlatformTouchEvent&); |
- bool handleGestureEvent(const PlatformGestureEvent&); |
- |
- // Closes the popup |
- void abandon(); |
- |
- // Updates our internal list to match the client. |
- void updateFromElement(); |
- |
- // Frees any allocated resources used in a particular popup session. |
- void clear(); |
- |
- // Sets the index of the option that is displayed in the <select> widget in the page |
- void setOriginalIndex(int); |
- |
- // Gets the index of the item that the user is currently moused over or has |
- // selected with the keyboard. This is not the same as the original index, |
- // since the user has not yet accepted this input. |
- int selectedIndex() const { return m_selectedIndex; } |
- |
- // Moves selection down/up the given number of items, scrolling if necessary. |
- // Positive is down. The resulting index will be clamped to the range |
- // [0, numItems), and non-option items will be skipped. |
- void adjustSelectedIndex(int delta); |
- |
- // Returns the number of items in the list. |
- int numItems() const { return static_cast<int>(m_items.size()); } |
- |
- void setBaseWidth(int width) { m_baseWidth = std::min(m_maxWindowWidth, width); } |
- |
- // Computes the size of widget and children. |
- virtual void layout() override; |
- |
- // Returns whether the popup wants to process events for the passed key. |
- bool isInterestedInEventForKey(int keyCode); |
- |
- // Gets the height of a row. |
- int getRowHeight(int index) const; |
- |
- int getRowBaseWidth(int index); |
- |
- virtual void setMaxHeight(int maxHeight) override { m_maxHeight = maxHeight; } |
- |
- void setMaxWidth(int maxWidth) { m_maxWindowWidth = maxWidth; } |
- |
- virtual void setMaxWidthAndLayout(int) override; |
- |
- void disconnectClient() { m_popupClient = 0; } |
- |
- const Vector<PopupItem*>& items() const { return m_items; } |
- |
- virtual int popupContentHeight() const override; |
- |
- static const int defaultMaxHeight; |
- |
- void trace(Visitor*) override; |
- |
-protected: |
- virtual void invalidateScrollCornerRect(const IntRect&) override { } |
- |
-private: |
- friend class PopupContainer; |
- friend class RefCounted<PopupListBox>; |
- |
- PopupListBox(PopupMenuClient*, bool deviceSupportsTouch, PopupContainer*); |
- virtual ~PopupListBox(); |
- |
- // Hides the popup. Other classes should not call this. Use abandon instead. |
- void hidePopup(); |
- |
- // Returns true if the selection can be changed to index. |
- // Disabled items, or labels cannot be selected. |
- bool isSelectableItem(int index); |
- |
- // Select an index in the list, scrolling if necessary. |
- void selectIndex(int index); |
- |
- // Accepts the selected index as the value to be displayed in the <select> |
- // widget on the web page, and closes the popup. Returns true if index is |
- // accepted. |
- bool acceptIndex(int index); |
- |
- // Clears the selection (so no row appears selected). |
- void clearSelection(); |
- |
- // Scrolls to reveal the given index. |
- void scrollToRevealRow(int index); |
- void scrollToRevealSelection() { scrollToRevealRow(m_selectedIndex); } |
- |
- // Invalidates the row at the given index. |
- void invalidateRow(int index); |
- |
- // Get the bounds of a row. |
- IntRect getRowBounds(int index); |
- |
- // Converts a point to an index of the row the point is over |
- int pointToRowIndex(const IntPoint&); |
- |
- // Paint an individual row |
- void paintRow(GraphicsContext*, const IntRect&, int rowIndex); |
- |
- // Test if the given point is within the bounds of the popup window. |
- bool isPointInBounds(const IntPoint&); |
- |
- // Called when the user presses a text key. Does a prefix-search of the items. |
- void typeAheadFind(const PlatformKeyboardEvent&); |
- |
- // Returns the font to use for the given row |
- Font getRowFont(int index) const; |
- |
- // Moves the selection down/up one item, taking care of looping back to the |
- // first/last element if m_loopSelectionNavigation is true. |
- void selectPreviousRow(); |
- void selectNextRow(); |
- |
- int scrollX() const { return scrollPosition().x(); } |
- int scrollY() const { return scrollPosition().y(); } |
- void updateScrollbars(IntPoint desiredOffset); |
- void setHasVerticalScrollbar(bool); |
- Scrollbar* scrollbarAtWindowPoint(const IntPoint& windowPoint); |
- IntRect contentsToWindow(const IntRect&) const; |
- void setContentsSize(const IntSize&); |
- void adjustScrollbarExistence(); |
- void updateScrollbarGeometry(); |
- IntRect windowClipRect() const; |
- |
- // If the device is a touch screen we increase the height of menu items |
- // to make it easier to unambiguously touch them. |
- bool m_deviceSupportsTouch; |
- |
- // This is the index of the item marked as "selected" - i.e. displayed in |
- // the widget on the page. |
- int m_originalIndex; |
- |
- // This is the index of the item that the user is hovered over or has |
- // selected using the keyboard in the list. They have not confirmed this |
- // selection by clicking or pressing enter yet however. |
- int m_selectedIndex; |
- |
- // If >= 0, this is the index we should accept if the popup is "abandoned". |
- // This is used for keyboard navigation, where we want the |
- // selection to change immediately, and is only used if the settings |
- // acceptOnAbandon field is true. |
- int m_acceptedIndexOnAbandon; |
- |
- // This is the number of rows visible in the popup. The maximum number |
- // visible at a time is defined as being kMaxVisibleRows. For a scrolled |
- // popup, this can be thought of as the page size in data units. |
- int m_visibleRows; |
- |
- // Our suggested width, not including scrollbar. |
- int m_baseWidth; |
- |
- // The maximum height we can be without being off-screen. |
- int m_maxHeight; |
- |
- // A list of the options contained within the <select> |
- Vector<PopupItem*> m_items; |
- |
- // The <select> PopupMenuClient that opened us. |
- PopupMenuClient* m_popupClient; |
- |
- // The scrollbar which has mouse capture. Mouse events go straight to this |
- // if not null. |
- RefPtrWillBeMember<Scrollbar> m_capturingScrollbar; |
- |
- // The last scrollbar that the mouse was over. Used for mouseover highlights. |
- RefPtrWillBeMember<Scrollbar> m_lastScrollbarUnderMouse; |
- |
- // The string the user has typed so far into the popup. Used for typeAheadFind. |
- String m_typedString; |
- |
- // The char the user has hit repeatedly. Used for typeAheadFind. |
- UChar m_repeatingChar; |
- |
- // The last time the user hit a key. Used for typeAheadFind. |
- TimeStamp m_lastCharTime; |
- |
- // If width exeeds screen width, we have to clip it. |
- int m_maxWindowWidth; |
- |
- // To forward last mouse release event. |
- RefPtrWillBeMember<Element> m_focusedElement; |
- |
- // Oilpan: the container owns/wraps this listbox. A (strong) |
- // Member can be used for the back reference without extending the |
- // container's lifetime; the two objects live equally long. |
- RawPtrWillBeMember<PopupContainer> m_container; |
- |
- RefPtrWillBeMember<Scrollbar> m_verticalScrollbar; |
- IntSize m_contentsSize; |
- IntPoint m_scrollOffset; |
-}; |
- |
-} // namespace blink |
- |
-#endif |