OLD | NEW |
1 /* | 1 /* |
2 Copyright (C) 1997 Martin Jones (mjones@kde.org) | 2 Copyright (C) 1997 Martin Jones (mjones@kde.org) |
3 (C) 1998 Waldo Bastian (bastian@kde.org) | 3 (C) 1998 Waldo Bastian (bastian@kde.org) |
4 (C) 1998, 1999 Torben Weis (weis@kde.org) | 4 (C) 1998, 1999 Torben Weis (weis@kde.org) |
5 (C) 1999 Lars Knoll (knoll@kde.org) | 5 (C) 1999 Lars Knoll (knoll@kde.org) |
6 (C) 1999 Antti Koivisto (koivisto@kde.org) | 6 (C) 1999 Antti Koivisto (koivisto@kde.org) |
7 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. | 7 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. |
8 | 8 |
9 This library is free software; you can redistribute it and/or | 9 This library is free software; you can redistribute it and/or |
10 modify it under the terms of the GNU Library General Public | 10 modify it under the terms of the GNU Library General Public |
(...skipping 13 matching lines...) Expand all Loading... |
24 | 24 |
25 #ifndef FrameView_h | 25 #ifndef FrameView_h |
26 #define FrameView_h | 26 #define FrameView_h |
27 | 27 |
28 #include "core/CoreExport.h" | 28 #include "core/CoreExport.h" |
29 #include "core/dom/DocumentLifecycle.h" | 29 #include "core/dom/DocumentLifecycle.h" |
30 #include "core/frame/FrameViewAutoSizeInfo.h" | 30 #include "core/frame/FrameViewAutoSizeInfo.h" |
31 #include "core/frame/LayoutSubtreeRootList.h" | 31 #include "core/frame/LayoutSubtreeRootList.h" |
32 #include "core/frame/RootFrameViewport.h" | 32 #include "core/frame/RootFrameViewport.h" |
33 #include "core/layout/LayoutAnalyzer.h" | 33 #include "core/layout/LayoutAnalyzer.h" |
34 #include "core/paint/PaintInvalidationCapableScrollableArea.h" | |
35 #include "core/paint/PaintPhase.h" | 34 #include "core/paint/PaintPhase.h" |
36 #include "platform/RuntimeEnabledFeatures.h" | 35 #include "platform/RuntimeEnabledFeatures.h" |
37 #include "platform/Widget.h" | 36 #include "platform/Widget.h" |
38 #include "platform/geometry/IntRect.h" | 37 #include "platform/geometry/IntRect.h" |
39 #include "platform/geometry/LayoutRect.h" | 38 #include "platform/geometry/LayoutRect.h" |
40 #include "platform/graphics/Color.h" | 39 #include "platform/graphics/Color.h" |
41 #include "platform/graphics/paint/TransformPaintPropertyNode.h" | 40 #include "platform/graphics/paint/TransformPaintPropertyNode.h" |
42 #include "platform/scroll/ScrollTypes.h" | 41 #include "platform/scroll/ScrollTypes.h" |
| 42 #include "platform/scroll/ScrollableArea.h" |
43 #include "platform/scroll/Scrollbar.h" | 43 #include "platform/scroll/Scrollbar.h" |
44 #include "public/platform/WebDisplayMode.h" | 44 #include "public/platform/WebDisplayMode.h" |
45 #include "public/platform/WebRect.h" | 45 #include "public/platform/WebRect.h" |
46 #include "wtf/Allocator.h" | 46 #include "wtf/Allocator.h" |
47 #include "wtf/Forward.h" | 47 #include "wtf/Forward.h" |
48 #include "wtf/HashSet.h" | 48 #include "wtf/HashSet.h" |
49 #include "wtf/ListHashSet.h" | 49 #include "wtf/ListHashSet.h" |
50 #include "wtf/OwnPtr.h" | 50 #include "wtf/OwnPtr.h" |
51 #include "wtf/TemporaryChange.h" | 51 #include "wtf/TemporaryChange.h" |
52 #include "wtf/text/WTFString.h" | 52 #include "wtf/text/WTFString.h" |
(...skipping 19 matching lines...) Expand all Loading... |
72 class LayoutView; | 72 class LayoutView; |
73 class PaintInvalidationState; | 73 class PaintInvalidationState; |
74 class Page; | 74 class Page; |
75 class ScrollingCoordinator; | 75 class ScrollingCoordinator; |
76 class TracedValue; | 76 class TracedValue; |
77 struct AnnotatedRegionValue; | 77 struct AnnotatedRegionValue; |
78 struct CompositedSelection; | 78 struct CompositedSelection; |
79 | 79 |
80 typedef unsigned long long DOMTimeStamp; | 80 typedef unsigned long long DOMTimeStamp; |
81 | 81 |
82 class CORE_EXPORT FrameView final : public Widget, public PaintInvalidationCapab
leScrollableArea { | 82 class CORE_EXPORT FrameView final : public Widget, public ScrollableArea { |
83 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(FrameView); | 83 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(FrameView); |
84 | 84 |
85 friend class PaintControllerPaintTestBase; | 85 friend class PaintControllerPaintTestBase; |
86 friend class Internals; | 86 friend class Internals; |
87 friend class LayoutPart; // for invalidateTreeIfNeeded | 87 friend class LayoutPart; // for invalidateTreeIfNeeded |
88 | 88 |
89 public: | 89 public: |
90 static PassRefPtrWillBeRawPtr<FrameView> create(LocalFrame*); | 90 static PassRefPtrWillBeRawPtr<FrameView> create(LocalFrame*); |
91 static PassRefPtrWillBeRawPtr<FrameView> create(LocalFrame*, const IntSize&
initialSize); | 91 static PassRefPtrWillBeRawPtr<FrameView> create(LocalFrame*, const IntSize&
initialSize); |
92 | 92 |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 | 332 |
333 // Sets the tickmarks for the FrameView, overriding the default behavior | 333 // Sets the tickmarks for the FrameView, overriding the default behavior |
334 // which is to display the tickmarks corresponding to find results. | 334 // which is to display the tickmarks corresponding to find results. |
335 // If |m_tickmarks| is empty, the default behavior is restored. | 335 // If |m_tickmarks| is empty, the default behavior is restored. |
336 void setTickmarks(const Vector<IntRect>& tickmarks) | 336 void setTickmarks(const Vector<IntRect>& tickmarks) |
337 { | 337 { |
338 m_tickmarks = tickmarks; | 338 m_tickmarks = tickmarks; |
339 invalidatePaintForTickmarks(); | 339 invalidatePaintForTickmarks(); |
340 } | 340 } |
341 | 341 |
342 void invalidatePaintForTickmarks(); | 342 void invalidatePaintForTickmarks() const; |
343 | 343 |
344 // Since the compositor can resize the viewport due to top controls and | 344 // Since the compositor can resize the viewport due to top controls and |
345 // commit scroll offsets before a WebView::resize occurs, we need to adjust | 345 // commit scroll offsets before a WebView::resize occurs, we need to adjust |
346 // our scroll extents to prevent clamping the scroll offsets. | 346 // our scroll extents to prevent clamping the scroll offsets. |
347 void setTopControlsViewportAdjustment(float); | 347 void setTopControlsViewportAdjustment(float); |
348 IntSize topControlsSize() const { return IntSize(0, roundf(m_topControlsView
portAdjustment)); } | 348 IntSize topControlsSize() const { return IntSize(0, roundf(m_topControlsView
portAdjustment)); } |
349 | 349 |
350 IntPoint maximumScrollPosition() const override; | 350 IntPoint maximumScrollPosition() const override; |
351 | 351 |
352 // ScrollableArea interface | 352 // ScrollableArea interface |
353 void scrollControlWasSetNeedsPaintInvalidation() override { } | 353 void invalidateScrollbarRect(Scrollbar*, const IntRect&) override; |
354 void getTickmarks(Vector<IntRect>&) const override; | 354 void getTickmarks(Vector<IntRect>&) const override; |
355 void scrollTo(const DoublePoint&); | 355 void scrollTo(const DoublePoint&); |
356 IntRect scrollableAreaBoundingBox() const override; | 356 IntRect scrollableAreaBoundingBox() const override; |
357 bool scrollAnimatorEnabled() const override; | 357 bool scrollAnimatorEnabled() const override; |
358 bool usesCompositedScrolling() const override; | 358 bool usesCompositedScrolling() const override; |
359 GraphicsLayer* layerForScrolling() const override; | 359 GraphicsLayer* layerForScrolling() const override; |
360 GraphicsLayer* layerForHorizontalScrollbar() const override; | 360 GraphicsLayer* layerForHorizontalScrollbar() const override; |
361 GraphicsLayer* layerForVerticalScrollbar() const override; | 361 GraphicsLayer* layerForVerticalScrollbar() const override; |
362 GraphicsLayer* layerForScrollCorner() const override; | 362 GraphicsLayer* layerForScrollCorner() const override; |
363 int scrollSize(ScrollbarOrientation) const override; | 363 int scrollSize(ScrollbarOrientation) const override; |
(...skipping 19 matching lines...) Expand all Loading... |
383 // Functions for child manipulation and inspection. | 383 // Functions for child manipulation and inspection. |
384 void setParent(Widget*) override; | 384 void setParent(Widget*) override; |
385 void removeChild(Widget*); | 385 void removeChild(Widget*); |
386 void addChild(PassRefPtrWillBeRawPtr<Widget>); | 386 void addChild(PassRefPtrWillBeRawPtr<Widget>); |
387 const ChildrenWidgetSet* children() const { return &m_children; } | 387 const ChildrenWidgetSet* children() const { return &m_children; } |
388 | 388 |
389 // If the scroll view does not use a native widget, then it will have cross-
platform Scrollbars. These functions | 389 // If the scroll view does not use a native widget, then it will have cross-
platform Scrollbars. These functions |
390 // can be used to obtain those scrollbars. | 390 // can be used to obtain those scrollbars. |
391 Scrollbar* horizontalScrollbar() const override { return m_horizontalScrollb
ar.get(); } | 391 Scrollbar* horizontalScrollbar() const override { return m_horizontalScrollb
ar.get(); } |
392 Scrollbar* verticalScrollbar() const override { return m_verticalScrollbar.g
et(); } | 392 Scrollbar* verticalScrollbar() const override { return m_verticalScrollbar.g
et(); } |
393 LayoutScrollbarPart* scrollCorner() const override { return m_scrollCorner;
} | 393 LayoutScrollbarPart* scrollCorner() const { return m_scrollCorner; } |
394 | 394 |
395 void positionScrollbarLayers(); | 395 void positionScrollbarLayers(); |
396 | 396 |
397 // Functions for setting and retrieving the scrolling mode in each axis (hor
izontal/vertical). The mode has values of | 397 // Functions for setting and retrieving the scrolling mode in each axis (hor
izontal/vertical). The mode has values of |
398 // AlwaysOff, AlwaysOn, and Auto. AlwaysOff means never show a scrollbar, Al
waysOn means always show a scrollbar. | 398 // AlwaysOff, AlwaysOn, and Auto. AlwaysOff means never show a scrollbar, Al
waysOn means always show a scrollbar. |
399 // Auto means show a scrollbar only when one is needed. | 399 // Auto means show a scrollbar only when one is needed. |
400 // Note that for platforms with native widgets, these modes are considered a
dvisory. In other words the underlying native | 400 // Note that for platforms with native widgets, these modes are considered a
dvisory. In other words the underlying native |
401 // widget may choose not to honor the requested modes. | 401 // widget may choose not to honor the requested modes. |
402 void setScrollbarModes(ScrollbarMode horizontalMode, ScrollbarMode verticalM
ode, bool horizontalLock = false, bool verticalLock = false); | 402 void setScrollbarModes(ScrollbarMode horizontalMode, ScrollbarMode verticalM
ode, bool horizontalLock = false, bool verticalLock = false); |
403 void setHorizontalScrollbarMode(ScrollbarMode mode, bool lock = false) { set
ScrollbarModes(mode, verticalScrollbarMode(), lock, verticalScrollbarLock()); } | 403 void setHorizontalScrollbarMode(ScrollbarMode mode, bool lock = false) { set
ScrollbarModes(mode, verticalScrollbarMode(), lock, verticalScrollbarLock()); } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 IntSize scrollOffset() const { return toIntSize(visibleContentRect().locatio
n()); } // Gets the scrolled position as an IntSize. Convenient for adding to ot
her sizes. | 436 IntSize scrollOffset() const { return toIntSize(visibleContentRect().locatio
n()); } // Gets the scrolled position as an IntSize. Convenient for adding to ot
her sizes. |
437 DoubleSize scrollOffsetDouble() const { return DoubleSize(m_scrollPosition.x
(), m_scrollPosition.y()); } | 437 DoubleSize scrollOffsetDouble() const { return DoubleSize(m_scrollPosition.x
(), m_scrollPosition.y()); } |
438 DoubleSize pendingScrollDelta() const { return m_pendingScrollDelta; } | 438 DoubleSize pendingScrollDelta() const { return m_pendingScrollDelta; } |
439 IntPoint minimumScrollPosition() const override; // The minimum position we
can be scrolled to. | 439 IntPoint minimumScrollPosition() const override; // The minimum position we
can be scrolled to. |
440 int scrollX() const { return scrollPosition().x(); } | 440 int scrollX() const { return scrollPosition().x(); } |
441 int scrollY() const { return scrollPosition().y(); } | 441 int scrollY() const { return scrollPosition().y(); } |
442 | 442 |
443 // Scroll the actual contents of the view (either blitting or invalidating a
s needed). | 443 // Scroll the actual contents of the view (either blitting or invalidating a
s needed). |
444 void scrollContents(const IntSize& scrollDelta); | 444 void scrollContents(const IntSize& scrollDelta); |
445 | 445 |
446 // This gives us a means of blocking updating our scrollbars until the first
layout has occurred. | 446 // This gives us a means of blocking painting on our scrollbars until the fi
rst layout has occurred. |
447 void setScrollbarsSuppressed(bool suppressed) { m_scrollbarsSuppressed = sup
pressed; } | 447 void setScrollbarsSuppressed(bool suppressed, bool repaintOnUnsuppress = fal
se); |
448 bool scrollbarsSuppressed() const { return m_scrollbarsSuppressed; } | 448 bool scrollbarsSuppressed() const { return m_scrollbarsSuppressed; } |
449 | 449 |
450 // Methods for converting between this frame and other coordinate spaces. | 450 // Methods for converting between this frame and other coordinate spaces. |
451 // For definitions and an explanation of the varous spaces, please see: | 451 // For definitions and an explanation of the varous spaces, please see: |
452 // http://www.chromium.org/developers/design-documents/blink-coordinate-spac
es | 452 // http://www.chromium.org/developers/design-documents/blink-coordinate-spac
es |
453 IntPoint rootFrameToContents(const IntPoint&) const; | 453 IntPoint rootFrameToContents(const IntPoint&) const; |
454 FloatPoint rootFrameToContents(const FloatPoint&) const; | 454 FloatPoint rootFrameToContents(const FloatPoint&) const; |
455 IntRect rootFrameToContents(const IntRect&) const; | 455 IntRect rootFrameToContents(const IntRect&) const; |
456 IntPoint contentsToRootFrame(const IntPoint&) const; | 456 IntPoint contentsToRootFrame(const IntPoint&) const; |
457 IntRect contentsToRootFrame(const IntRect&) const; | 457 IntRect contentsToRootFrame(const IntRect&) const; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 // Scroll the content via the compositor. | 582 // Scroll the content via the compositor. |
583 bool scrollContentsFastPath(const IntSize& scrollDelta); | 583 bool scrollContentsFastPath(const IntSize& scrollDelta); |
584 | 584 |
585 // Scroll the content by invalidating everything. | 585 // Scroll the content by invalidating everything. |
586 void scrollContentsSlowPath(const IntRect& updateRect); | 586 void scrollContentsSlowPath(const IntRect& updateRect); |
587 | 587 |
588 // These functions are used to create/destroy scrollbars. | 588 // These functions are used to create/destroy scrollbars. |
589 void setHasHorizontalScrollbar(bool); | 589 void setHasHorizontalScrollbar(bool); |
590 void setHasVerticalScrollbar(bool); | 590 void setHasVerticalScrollbar(bool); |
591 | 591 |
| 592 void invalidateScrollCornerRect(const IntRect&) override; |
592 ScrollBehavior scrollBehaviorStyle() const override; | 593 ScrollBehavior scrollBehaviorStyle() const override; |
593 | 594 |
594 void scrollContentsIfNeeded(); | 595 void scrollContentsIfNeeded(); |
595 | 596 |
596 void setScrollOrigin(const IntPoint&, bool updatePositionAtAll, bool updateP
ositionSynchronously); | 597 void setScrollOrigin(const IntPoint&, bool updatePositionAtAll, bool updateP
ositionSynchronously); |
597 | 598 |
598 enum ComputeScrollbarExistenceOption { | 599 enum ComputeScrollbarExistenceOption { |
599 FirstPass, | 600 FirstPass, |
600 Incremental | 601 Incremental |
601 }; | 602 }; |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
736 void collectFrameTimingRequests(GraphicsLayerFrameTimingRequests&); | 737 void collectFrameTimingRequests(GraphicsLayerFrameTimingRequests&); |
737 void collectFrameTimingRequestsRecursive(GraphicsLayerFrameTimingRequests&); | 738 void collectFrameTimingRequestsRecursive(GraphicsLayerFrameTimingRequests&); |
738 | 739 |
739 template <typename Function> void forAllNonThrottledFrameViews(Function); | 740 template <typename Function> void forAllNonThrottledFrameViews(Function); |
740 | 741 |
741 void setNeedsUpdateViewportIntersection(); | 742 void setNeedsUpdateViewportIntersection(); |
742 void updateViewportIntersectionsForSubtree(); | 743 void updateViewportIntersectionsForSubtree(); |
743 void updateViewportIntersectionIfNeeded(); | 744 void updateViewportIntersectionIfNeeded(); |
744 void notifyIntersectionObservers(); | 745 void notifyIntersectionObservers(); |
745 | 746 |
746 // PaintInvalidationCapableScrollableArea | |
747 LayoutBox& boxForScrollControlPaintInvalidation() const override; | |
748 LayoutScrollbarPart* resizer() const override { return nullptr; } | |
749 | |
750 LayoutSize m_size; | 747 LayoutSize m_size; |
751 | 748 |
752 typedef HashSet<RefPtr<LayoutEmbeddedObject>> EmbeddedObjectSet; | 749 typedef HashSet<RefPtr<LayoutEmbeddedObject>> EmbeddedObjectSet; |
753 EmbeddedObjectSet m_partUpdateSet; | 750 EmbeddedObjectSet m_partUpdateSet; |
754 | 751 |
755 // FIXME: These are just "children" of the FrameView and should be RefPtrWil
lBeMember<Widget> instead. | 752 // FIXME: These are just "children" of the FrameView and should be RefPtrWil
lBeMember<Widget> instead. |
756 HashSet<RefPtr<LayoutPart>> m_parts; | 753 HashSet<RefPtr<LayoutPart>> m_parts; |
757 | 754 |
758 // The RefPtr cycle between LocalFrame and FrameView is broken | 755 // The RefPtr cycle between LocalFrame and FrameView is broken |
759 // when a LocalFrame is detached by LocalFrame::detach(). | 756 // when a LocalFrame is detached by LocalFrame::detach(). |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
907 static const unsigned visualPixelThreshold = 32 * 32; | 904 static const unsigned visualPixelThreshold = 32 * 32; |
908 if (m_visuallyNonEmptyPixelCount > visualPixelThreshold) | 905 if (m_visuallyNonEmptyPixelCount > visualPixelThreshold) |
909 setIsVisuallyNonEmpty(); | 906 setIsVisuallyNonEmpty(); |
910 } | 907 } |
911 | 908 |
912 DEFINE_TYPE_CASTS(FrameView, Widget, widget, widget->isFrameView(), widget.isFra
meView()); | 909 DEFINE_TYPE_CASTS(FrameView, Widget, widget, widget->isFrameView(), widget.isFra
meView()); |
913 | 910 |
914 } // namespace blink | 911 } // namespace blink |
915 | 912 |
916 #endif // FrameView_h | 913 #endif // FrameView_h |
OLD | NEW |