diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/rendering/RenderListBox.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/rendering/RenderListBox.h')
-rw-r--r-- | Source/WebCore/rendering/RenderListBox.h | 150 |
1 files changed, 89 insertions, 61 deletions
diff --git a/Source/WebCore/rendering/RenderListBox.h b/Source/WebCore/rendering/RenderListBox.h index ed833e6d8..b1654dfb6 100644 --- a/Source/WebCore/rendering/RenderListBox.h +++ b/Source/WebCore/rendering/RenderListBox.h @@ -1,7 +1,7 @@ /* * This file is part of the select element renderer in WebCore. * - * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved. + * Copyright (C) 2006, 2007, 2009, 2014 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -12,7 +12,7 @@ * 2. 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. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of + * 3. Neither the name of Apple Inc. ("Apple") nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * @@ -28,19 +28,19 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef RenderListBox_h -#define RenderListBox_h +#pragma once #include "RenderBlockFlow.h" #include "ScrollableArea.h" +#include <wtf/Optional.h> namespace WebCore { class HTMLSelectElement; -class RenderListBox final : public RenderBlockFlow, private ScrollableArea { +class RenderListBox final : public RenderBlockFlow, public ScrollableArea { public: - RenderListBox(HTMLSelectElement&, PassRef<RenderStyle>); + RenderListBox(HTMLSelectElement&, RenderStyle&&); virtual ~RenderListBox(); HTMLSelectElement& selectElement() const; @@ -59,84 +59,109 @@ public: int size() const; + bool scroll(ScrollDirection, ScrollGranularity, float multiplier = 1, Element** stopElement = nullptr, RenderBox* startBox = nullptr, const IntPoint& wheelEventAbsolutePoint = IntPoint()) override; + + bool scrolledToTop() const override; + bool scrolledToBottom() const override; + bool scrolledToLeft() const override; + bool scrolledToRight() const override; + private: + void willBeDestroyed() override; + void element() const = delete; - virtual const char* renderName() const override { return "RenderListBox"; } + const char* renderName() const override { return "RenderListBox"; } - virtual bool isListBox() const override { return true; } + bool isListBox() const override { return true; } - virtual void updateFromElement() override; - virtual bool canBeReplacedWithInlineRunIn() const override; - virtual bool hasControlClip() const override { return true; } - virtual void paintObject(PaintInfo&, const LayoutPoint&) override; - virtual LayoutRect controlClipRect(const LayoutPoint&) const override; + void updateFromElement() override; + bool hasControlClip() const override { return true; } + void paintObject(PaintInfo&, const LayoutPoint&) override; + LayoutRect controlClipRect(const LayoutPoint&) const override; - virtual bool isPointInOverflowControl(HitTestResult&, const LayoutPoint& locationInContainer, const LayoutPoint& accumulatedOffset) override; + bool isPointInOverflowControl(HitTestResult&, const LayoutPoint& locationInContainer, const LayoutPoint& accumulatedOffset) override; - virtual bool scroll(ScrollDirection, ScrollGranularity, float multiplier = 1, Element** stopElement = nullptr, RenderBox* startBox = nullptr, const IntPoint& wheelEventAbsolutePoint = IntPoint()) override; - virtual bool logicalScroll(ScrollLogicalDirection, ScrollGranularity, float multiplier = 1, Element** stopElement = 0) override; + bool logicalScroll(ScrollLogicalDirection, ScrollGranularity, float multiplier = 1, Element** stopElement = nullptr) override; - virtual void computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const override; - virtual void computePreferredLogicalWidths() override; - virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const override; - virtual void computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop, LogicalExtentComputedValues&) const override; + void computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const override; + void computePreferredLogicalWidths() override; + int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const override; + LogicalExtentComputedValues computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop) const override; - virtual void layout() override; + void layout() override; - virtual void addFocusRingRects(Vector<IntRect>&, const LayoutPoint& additionalOffset, const RenderLayerModelObject* paintContainer = 0) override; + void addFocusRingRects(Vector<LayoutRect>&, const LayoutPoint& additionalOffset, const RenderLayerModelObject* paintContainer = nullptr) override; - virtual bool canBeProgramaticallyScrolled() const override { return true; } - virtual void autoscroll(const IntPoint&) override; - virtual void stopAutoscroll() override; + bool canBeProgramaticallyScrolled() const override { return true; } + void autoscroll(const IntPoint&) override; + void stopAutoscroll() override; virtual bool shouldPanScroll() const { return true; } - virtual void panScroll(const IntPoint&) override; + void panScroll(const IntPoint&) override; - virtual int verticalScrollbarWidth() const override; - virtual int scrollLeft() const override; - virtual int scrollTop() const override; - virtual int scrollWidth() const override; - virtual int scrollHeight() const override; - virtual void setScrollLeft(int) override; - virtual void setScrollTop(int) override; + int verticalScrollbarWidth() const override; + int scrollLeft() const override; + int scrollTop() const override; + int scrollWidth() const override; + int scrollHeight() const override; + void setScrollLeft(int) override; + void setScrollTop(int) override; - virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) override; + bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) override; // ScrollableArea interface. - virtual int scrollSize(ScrollbarOrientation) const override; - virtual int scrollPosition(Scrollbar*) const override; - virtual void setScrollOffset(const IntPoint&) override; - virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&) override; - virtual bool isActive() const override; - virtual bool isScrollCornerVisible() const override { return false; } // We don't support resize on list boxes yet. If we did these would have to change. - virtual IntRect scrollCornerRect() const override { return IntRect(); } - virtual void invalidateScrollCornerRect(const IntRect&) override { } - virtual IntRect convertFromScrollbarToContainingView(const Scrollbar*, const IntRect&) const override; - virtual IntRect convertFromContainingViewToScrollbar(const Scrollbar*, const IntRect&) const override; - virtual IntPoint convertFromScrollbarToContainingView(const Scrollbar*, const IntPoint&) const override; - virtual IntPoint convertFromContainingViewToScrollbar(const Scrollbar*, const IntPoint&) const override; - virtual Scrollbar* verticalScrollbar() const override { return m_vBar.get(); } - virtual IntSize contentsSize() const override; - virtual IntSize visibleSize() const override { return IntSize(height(), width()); } - virtual IntPoint lastKnownMousePosition() const override; - virtual bool isHandlingWheelEvent() const override; - virtual bool shouldSuspendScrollAnimations() const override; - virtual bool updatesScrollLayerPositionOnMainThread() const override { return true; } - - virtual ScrollableArea* enclosingScrollableArea() const override; - virtual IntRect scrollableAreaBoundingBox() const override; + int scrollSize(ScrollbarOrientation) const override; + int scrollOffset(ScrollbarOrientation) const override; + void setScrollOffset(const ScrollOffset&) override; + ScrollPosition minimumScrollPosition() const override; + ScrollPosition maximumScrollPosition() const override; + void invalidateScrollbarRect(Scrollbar&, const IntRect&) override; + bool isActive() const override; + bool isScrollCornerVisible() const override { return false; } // We don't support resize on list boxes yet. If we did these would have to change. + IntRect scrollCornerRect() const override { return IntRect(); } + void invalidateScrollCornerRect(const IntRect&) override { } + IntRect convertFromScrollbarToContainingView(const Scrollbar&, const IntRect&) const override; + IntRect convertFromContainingViewToScrollbar(const Scrollbar&, const IntRect&) const override; + IntPoint convertFromScrollbarToContainingView(const Scrollbar&, const IntPoint&) const override; + IntPoint convertFromContainingViewToScrollbar(const Scrollbar&, const IntPoint&) const override; + Scrollbar* verticalScrollbar() const override { return m_vBar.get(); } + IntSize contentsSize() const override; + IntSize visibleSize() const override { return IntSize(width(), height()); } + IntPoint lastKnownMousePosition() const override; + bool isHandlingWheelEvent() const override; + bool shouldSuspendScrollAnimations() const override; + bool forceUpdateScrollbarsOnMainThreadForPerformanceTesting() const override; + + ScrollableArea* enclosingScrollableArea() const override; + bool isScrollableOrRubberbandable() override; + bool hasScrollableOrRubberbandableAncestor() override; + IntRect scrollableAreaBoundingBox(bool* = nullptr) const override; + bool usesMockScrollAnimator() const override; + void logMockScrollAnimatorMessage(const String&) const override; // NOTE: This should only be called by the overriden setScrollOffset from ScrollableArea. void scrollTo(int newOffset); + using PaintFunction = std::function<void(PaintInfo&, const LayoutPoint&, int listItemIndex)>; + void paintItem(PaintInfo&, const LayoutPoint&, PaintFunction); + void setHasVerticalScrollbar(bool hasScrollbar); - PassRefPtr<Scrollbar> createScrollbar(); + Ref<Scrollbar> createScrollbar(); void destroyScrollbar(); + int maximumNumberOfItemsThatFitInPaddingBottomArea() const; + + int numberOfVisibleItemsInPaddingTop() const; + int numberOfVisibleItemsInPaddingBottom() const; + + void computeFirstIndexesVisibleInPaddingTopBottomAreas(); + LayoutUnit itemHeight() const; void valueChanged(unsigned listIndex); - int numVisibleItems() const; + + enum class ConsiderPadding { Yes, No }; + int numVisibleItems(ConsiderPadding = ConsiderPadding::No) const; int numItems() const; LayoutUnit listHeight() const; void paintScrollbar(PaintInfo&, const LayoutPoint&); @@ -144,17 +169,20 @@ private: void paintItemBackground(PaintInfo&, const LayoutPoint&, int listIndex); void scrollToRevealSelection(); + bool shouldPlaceBlockDirectionScrollbarOnLeft() const final { return RenderBlockFlow::shouldPlaceBlockDirectionScrollbarOnLeft(); } + bool m_optionsChanged; bool m_scrollToRevealSelectionAfterLayout; bool m_inAutoscroll; int m_optionsWidth; int m_indexOffset; + std::optional<int> m_indexOfFirstVisibleItemInsidePaddingTopArea; + std::optional<int> m_indexOfFirstVisibleItemInsidePaddingBottomArea; + RefPtr<Scrollbar> m_vBar; }; -RENDER_OBJECT_TYPE_CASTS(RenderListBox, isListBox()) - } // namepace WebCore -#endif // RenderListBox_h +SPECIALIZE_TYPE_TRAITS_RENDER_OBJECT(RenderListBox, isListBox()) |