Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(195)

Side by Side Diff: third_party/WebKit/Source/platform/scroll/ScrollableArea.h

Issue 2467693002: Implement overlay scrollbar fade out for non-composited scrollers. (Closed)
Patch Set: sigh....git cl format Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008, 2011 Apple Inc. All Rights Reserved. 2 * Copyright (C) 2008, 2011 Apple 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 // Returns a rect, in the space of the area's backing graphics layer, that 102 // Returns a rect, in the space of the area's backing graphics layer, that
103 // contains the visual region of all scrollbar parts. 103 // contains the visual region of all scrollbar parts.
104 virtual LayoutRect visualRectForScrollbarParts() const = 0; 104 virtual LayoutRect visualRectForScrollbarParts() const = 0;
105 105
106 static bool scrollBehaviorFromString(const String&, ScrollBehavior&); 106 static bool scrollBehaviorFromString(const String&, ScrollBehavior&);
107 107
108 void contentAreaWillPaint() const; 108 void contentAreaWillPaint() const;
109 void mouseEnteredContentArea() const; 109 void mouseEnteredContentArea() const;
110 void mouseExitedContentArea() const; 110 void mouseExitedContentArea() const;
111 void mouseMovedInContentArea() const; 111 void mouseMovedInContentArea() const;
112 void mouseEnteredScrollbar(Scrollbar&) const; 112 void mouseEnteredScrollbar(Scrollbar&);
113 void mouseExitedScrollbar(Scrollbar&) const; 113 void mouseExitedScrollbar(Scrollbar&);
114 void mouseCapturedScrollbar();
115 void mouseReleasedScrollbar();
114 void contentAreaDidShow() const; 116 void contentAreaDidShow() const;
115 void contentAreaDidHide() const; 117 void contentAreaDidHide() const;
116 118
117 void finishCurrentScrollAnimations() const; 119 void finishCurrentScrollAnimations() const;
118 120
119 virtual void didAddScrollbar(Scrollbar&, ScrollbarOrientation); 121 virtual void didAddScrollbar(Scrollbar&, ScrollbarOrientation);
120 virtual void willRemoveScrollbar(Scrollbar&, ScrollbarOrientation); 122 virtual void willRemoveScrollbar(Scrollbar&, ScrollbarOrientation);
121 123
122 virtual void contentsResized(); 124 virtual void contentsResized();
123 125
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 224
223 virtual IntRect visibleContentRect( 225 virtual IntRect visibleContentRect(
224 IncludeScrollbarsInRect = ExcludeScrollbars) const; 226 IncludeScrollbarsInRect = ExcludeScrollbars) const;
225 virtual int visibleHeight() const { return visibleContentRect().height(); } 227 virtual int visibleHeight() const { return visibleContentRect().height(); }
226 virtual int visibleWidth() const { return visibleContentRect().width(); } 228 virtual int visibleWidth() const { return visibleContentRect().width(); }
227 virtual IntSize contentsSize() const = 0; 229 virtual IntSize contentsSize() const = 0;
228 virtual IntPoint lastKnownMousePosition() const { return IntPoint(); } 230 virtual IntPoint lastKnownMousePosition() const { return IntPoint(); }
229 231
230 virtual bool shouldSuspendScrollAnimations() const { return true; } 232 virtual bool shouldSuspendScrollAnimations() const { return true; }
231 virtual void scrollbarStyleChanged() {} 233 virtual void scrollbarStyleChanged() {}
232 virtual void scrollbarVisibilityChanged() {}
233 virtual bool scrollbarsCanBeActive() const = 0; 234 virtual bool scrollbarsCanBeActive() const = 0;
234 235
235 // Returns the bounding box of this scrollable area, in the coordinate system 236 // Returns the bounding box of this scrollable area, in the coordinate system
236 // of the enclosing scroll view. 237 // of the enclosing scroll view.
237 virtual IntRect scrollableAreaBoundingBox() const = 0; 238 virtual IntRect scrollableAreaBoundingBox() const = 0;
238 239
239 virtual bool scrollAnimatorEnabled() const { return false; } 240 virtual bool scrollAnimatorEnabled() const { return false; }
240 241
241 // NOTE: Only called from Internals for testing. 242 // NOTE: Only called from Internals for testing.
242 void updateScrollOffsetFromInternals(const IntSize&); 243 void updateScrollOffsetFromInternals(const IntSize&);
243 244
244 IntSize clampScrollOffset(const IntSize&) const; 245 IntSize clampScrollOffset(const IntSize&) const;
245 ScrollOffset clampScrollOffset(const ScrollOffset&) const; 246 ScrollOffset clampScrollOffset(const ScrollOffset&) const;
246 247
247 // Let subclasses provide a way of asking for and servicing scroll 248 // Let subclasses provide a way of asking for and servicing scroll
248 // animations. 249 // animations.
249 virtual bool scheduleAnimation(); 250 virtual bool scheduleAnimation();
250 virtual void serviceScrollAnimations(double monotonicTime); 251 virtual void serviceScrollAnimations(double monotonicTime);
251 virtual void updateCompositorScrollAnimations(); 252 virtual void updateCompositorScrollAnimations();
252 virtual void registerForAnimation() {} 253 virtual void registerForAnimation() {}
253 virtual void deregisterForAnimation() {} 254 virtual void deregisterForAnimation() {}
254 255
255 virtual bool usesCompositedScrolling() const { return false; } 256 virtual bool usesCompositedScrolling() const { return false; }
256 virtual bool shouldScrollOnMainThread() const; 257 virtual bool shouldScrollOnMainThread() const;
257 258
258 // Overlay scrollbars can "fade-out" when inactive. 259 // Overlay scrollbars can "fade-out" when inactive.
259 virtual bool scrollbarsHidden() const; 260 virtual bool scrollbarsHidden() const;
260 virtual void setScrollbarsHidden(bool); 261 virtual void setScrollbarsHidden(bool);
261 virtual void didChangeScrollbarsHidden(){};
262 262
263 // Returns true if the GraphicsLayer tree needs to be rebuilt. 263 // Returns true if the GraphicsLayer tree needs to be rebuilt.
264 virtual bool updateAfterCompositingChange() { return false; } 264 virtual bool updateAfterCompositingChange() { return false; }
265 265
266 virtual bool userInputScrollable(ScrollbarOrientation) const = 0; 266 virtual bool userInputScrollable(ScrollbarOrientation) const = 0;
267 virtual bool shouldPlaceVerticalScrollbarOnLeft() const = 0; 267 virtual bool shouldPlaceVerticalScrollbarOnLeft() const = 0;
268 268
269 // Convenience functions 269 // Convenience functions
270 float scrollOffset(ScrollbarOrientation orientation) { 270 float scrollOffset(ScrollbarOrientation orientation) {
271 return orientation == HorizontalScrollbar ? scrollOffsetInt().width() 271 return orientation == HorizontalScrollbar ? scrollOffsetInt().width()
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 virtual bool isRootFrameViewport() const { return false; } 351 virtual bool isRootFrameViewport() const { return false; }
352 352
353 // Returns true if the scroller adjusts the scroll offset to compensate 353 // Returns true if the scroller adjusts the scroll offset to compensate
354 // for layout movements (bit.ly/scroll-anchoring). 354 // for layout movements (bit.ly/scroll-anchoring).
355 virtual bool shouldPerformScrollAnchoring() const { return false; } 355 virtual bool shouldPerformScrollAnchoring() const { return false; }
356 356
357 // Need to promptly let go of owned animator objects. 357 // Need to promptly let go of owned animator objects.
358 EAGERLY_FINALIZE(); 358 EAGERLY_FINALIZE();
359 DECLARE_VIRTUAL_TRACE(); 359 DECLARE_VIRTUAL_TRACE();
360 360
361 virtual void clearScrollAnimators(); 361 virtual void clearScrollableArea();
362 362
363 virtual ScrollAnchor* scrollAnchor() { return nullptr; } 363 virtual ScrollAnchor* scrollAnchor() { return nullptr; }
364 364
365 protected: 365 protected:
366 ScrollableArea(); 366 ScrollableArea();
367 367
368 ScrollbarOrientation scrollbarOrientationFromDirection( 368 ScrollbarOrientation scrollbarOrientationFromDirection(
369 ScrollDirectionPhysical) const; 369 ScrollDirectionPhysical) const;
370 float scrollStep(ScrollGranularity, ScrollbarOrientation) const; 370 float scrollStep(ScrollGranularity, ScrollbarOrientation) const;
371 371
(...skipping 11 matching lines...) Expand all
383 return m_verticalScrollbarNeedsPaintInvalidation; 383 return m_verticalScrollbarNeedsPaintInvalidation;
384 } 384 }
385 bool scrollCornerNeedsPaintInvalidation() const { 385 bool scrollCornerNeedsPaintInvalidation() const {
386 return m_scrollCornerNeedsPaintInvalidation; 386 return m_scrollCornerNeedsPaintInvalidation;
387 } 387 }
388 void clearNeedsPaintInvalidationForScrollControls() { 388 void clearNeedsPaintInvalidationForScrollControls() {
389 m_horizontalScrollbarNeedsPaintInvalidation = false; 389 m_horizontalScrollbarNeedsPaintInvalidation = false;
390 m_verticalScrollbarNeedsPaintInvalidation = false; 390 m_verticalScrollbarNeedsPaintInvalidation = false;
391 m_scrollCornerNeedsPaintInvalidation = false; 391 m_scrollCornerNeedsPaintInvalidation = false;
392 } 392 }
393 void showOverlayScrollbars();
394
395 // Called when scrollbar hides/shows for overlay scrollbars. This callback
396 // shouldn't do any significant work as it can be called unexpectadly often
397 // on Mac. This happens because painting code has to set alpha to 1, paint,
398 // then reset to alpha, causing spurrious "visibilityChanged" calls.
399 virtual void scrollbarVisibilityChanged() {}
393 400
394 private: 401 private:
395 void programmaticScrollHelper(const ScrollOffset&, ScrollBehavior); 402 void programmaticScrollHelper(const ScrollOffset&, ScrollBehavior);
396 void userScrollHelper(const ScrollOffset&, ScrollBehavior); 403 void userScrollHelper(const ScrollOffset&, ScrollBehavior);
397 404
405 void fadeOverlayScrollbarsTimerFired(TimerBase*);
406
398 // This function should be overriden by subclasses to perform the actual 407 // This function should be overriden by subclasses to perform the actual
399 // scroll of the content. 408 // scroll of the content.
400 virtual void updateScrollOffset(const ScrollOffset&, ScrollType) = 0; 409 virtual void updateScrollOffset(const ScrollOffset&, ScrollType) = 0;
401 410
402 virtual int lineStep(ScrollbarOrientation) const; 411 virtual int lineStep(ScrollbarOrientation) const;
403 virtual int pageStep(ScrollbarOrientation) const; 412 virtual int pageStep(ScrollbarOrientation) const;
404 virtual int documentStep(ScrollbarOrientation) const; 413 virtual int documentStep(ScrollbarOrientation) const;
405 virtual float pixelStep(ScrollbarOrientation) const; 414 virtual float pixelStep(ScrollbarOrientation) const;
406 415
407 mutable Member<ScrollAnimatorBase> m_scrollAnimator; 416 mutable Member<ScrollAnimatorBase> m_scrollAnimator;
408 mutable Member<ProgrammaticScrollAnimator> m_programmaticScrollAnimator; 417 mutable Member<ProgrammaticScrollAnimator> m_programmaticScrollAnimator;
409 418
419 std::unique_ptr<Timer<ScrollableArea>> m_fadeOverlayScrollbarsTimer;
420
410 unsigned m_scrollbarOverlayColorTheme : 2; 421 unsigned m_scrollbarOverlayColorTheme : 2;
411 422
412 unsigned m_scrollOriginChanged : 1; 423 unsigned m_scrollOriginChanged : 1;
413 424
414 unsigned m_horizontalScrollbarNeedsPaintInvalidation : 1; 425 unsigned m_horizontalScrollbarNeedsPaintInvalidation : 1;
415 unsigned m_verticalScrollbarNeedsPaintInvalidation : 1; 426 unsigned m_verticalScrollbarNeedsPaintInvalidation : 1;
416 unsigned m_scrollCornerNeedsPaintInvalidation : 1; 427 unsigned m_scrollCornerNeedsPaintInvalidation : 1;
417 unsigned m_scrollbarsHidden : 1; 428 unsigned m_scrollbarsHidden : 1;
429 unsigned m_scrollbarCaptured : 1;
418 430
419 // There are 6 possible combinations of writing mode and direction. Scroll 431 // There are 6 possible combinations of writing mode and direction. Scroll
420 // origin will be non-zero in the x or y axis if there is any reversed 432 // origin will be non-zero in the x or y axis if there is any reversed
421 // direction or writing-mode. The combinations are: 433 // direction or writing-mode. The combinations are:
422 // writing-mode / direction scrollOrigin.x() set scrollOrigin.y() set 434 // writing-mode / direction scrollOrigin.x() set scrollOrigin.y() set
423 // horizontal-tb / ltr NO NO 435 // horizontal-tb / ltr NO NO
424 // horizontal-tb / rtl YES NO 436 // horizontal-tb / rtl YES NO
425 // vertical-lr / ltr NO NO 437 // vertical-lr / ltr NO NO
426 // vertical-lr / rtl NO YES 438 // vertical-lr / rtl NO YES
427 // vertical-rl / ltr YES NO 439 // vertical-rl / ltr YES NO
428 // vertical-rl / rtl YES YES 440 // vertical-rl / rtl YES YES
429 IntPoint m_scrollOrigin; 441 IntPoint m_scrollOrigin;
430 }; 442 };
431 443
432 } // namespace blink 444 } // namespace blink
433 445
434 #endif // ScrollableArea_h 446 #endif // ScrollableArea_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698