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

Side by Side Diff: Source/core/platform/ScrollableArea.cpp

Issue 16982005: Allow objects without scrollbars to be scrollable (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix broken Mac build Created 7 years, 6 months 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) 2010, Google Inc. All rights reserved. 2 * Copyright (c) 2010, Google Inc. All rights reserved.
3 * Copyright (C) 2008, 2011 Apple Inc. All Rights Reserved. 3 * Copyright (C) 2008, 2011 Apple Inc. All Rights Reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 45
46 struct SameSizeAsScrollableArea { 46 struct SameSizeAsScrollableArea {
47 virtual ~SameSizeAsScrollableArea(); 47 virtual ~SameSizeAsScrollableArea();
48 void* pointer; 48 void* pointer;
49 unsigned bitfields : 16; 49 unsigned bitfields : 16;
50 IntPoint origin; 50 IntPoint origin;
51 }; 51 };
52 52
53 COMPILE_ASSERT(sizeof(ScrollableArea) == sizeof(SameSizeAsScrollableArea), Scrol lableArea_should_stay_small); 53 COMPILE_ASSERT(sizeof(ScrollableArea) == sizeof(SameSizeAsScrollableArea), Scrol lableArea_should_stay_small);
54 54
55 int ScrollableArea::pixelsPerLineStep()
56 {
57 return 40;
58 }
59
60 float ScrollableArea::minFractionToStepWhenPaging()
61 {
62 return 0.875f;
tdanderson 2013/07/15 23:17:44 I don't think the style guide explicitly mentions
bokan 2013/07/22 15:08:47 Done.
63 }
64
65 int ScrollableArea::maxOverlapBetweenPages()
66 {
67 static int maxOverlapBetweenPages = ScrollbarTheme::theme()->maxOverlapBetwe enPages();
68 return maxOverlapBetweenPages;
69 }
70
55 ScrollableArea::ScrollableArea() 71 ScrollableArea::ScrollableArea()
56 : m_constrainsScrollingToContentEdge(true) 72 : m_constrainsScrollingToContentEdge(true)
57 , m_inLiveResize(false) 73 , m_inLiveResize(false)
58 , m_verticalScrollElasticity(ScrollElasticityNone) 74 , m_verticalScrollElasticity(ScrollElasticityNone)
59 , m_horizontalScrollElasticity(ScrollElasticityNone) 75 , m_horizontalScrollElasticity(ScrollElasticityNone)
60 , m_scrollbarOverlayStyle(ScrollbarOverlayStyleDefault) 76 , m_scrollbarOverlayStyle(ScrollbarOverlayStyleDefault)
61 , m_scrollOriginChanged(false) 77 , m_scrollOriginChanged(false)
62 { 78 {
63 } 79 }
64 80
(...skipping 13 matching lines...) Expand all
78 { 94 {
79 if (m_scrollOrigin != origin) { 95 if (m_scrollOrigin != origin) {
80 m_scrollOrigin = origin; 96 m_scrollOrigin = origin;
81 m_scrollOriginChanged = true; 97 m_scrollOriginChanged = true;
82 } 98 }
83 } 99 }
84 100
85 bool ScrollableArea::scroll(ScrollDirection direction, ScrollGranularity granula rity, float multiplier) 101 bool ScrollableArea::scroll(ScrollDirection direction, ScrollGranularity granula rity, float multiplier)
86 { 102 {
87 ScrollbarOrientation orientation; 103 ScrollbarOrientation orientation;
88 Scrollbar* scrollbar; 104
89 if (direction == ScrollUp || direction == ScrollDown) { 105 if (direction == ScrollUp || direction == ScrollDown)
90 orientation = VerticalScrollbar; 106 orientation = VerticalScrollbar;
91 scrollbar = verticalScrollbar(); 107 else
92 } else {
93 orientation = HorizontalScrollbar; 108 orientation = HorizontalScrollbar;
94 scrollbar = horizontalScrollbar();
95 }
96 109
97 if (!scrollbar) 110 if (!userInputScrollable(orientation))
98 return false; 111 return false;
99 112
100 float step = 0; 113 float step = 0;
101 switch (granularity) { 114 switch (granularity) {
102 case ScrollByLine: 115 case ScrollByLine:
103 step = scrollbar->lineStep(); 116 step = lineStep(orientation);
104 break; 117 break;
105 case ScrollByPage: 118 case ScrollByPage:
106 step = scrollbar->pageStep(); 119 step = pageStep(orientation);
107 break; 120 break;
108 case ScrollByDocument: 121 case ScrollByDocument:
109 step = scrollbar->totalSize(); 122 step = documentStep(orientation);
110 break; 123 break;
111 case ScrollByPixel: 124 case ScrollByPixel:
112 case ScrollByPrecisePixel: 125 case ScrollByPrecisePixel:
113 step = scrollbar->pixelStep(); 126 step = pixelStep(orientation);
114 break; 127 break;
115 } 128 }
116 129
117 if (direction == ScrollUp || direction == ScrollLeft) 130 if (direction == ScrollUp || direction == ScrollLeft)
118 multiplier = -multiplier; 131 multiplier = -multiplier;
119 132
120 return scrollAnimator()->scroll(orientation, granularity, step, multiplier); 133 return scrollAnimator()->scroll(orientation, granularity, step, multiplier);
121 } 134 }
122 135
123 void ScrollableArea::scrollToOffsetWithoutAnimation(const FloatPoint& offset) 136 void ScrollableArea::scrollToOffsetWithoutAnimation(const FloatPoint& offset)
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 { 370 {
358 return layerForScrollCorner(); 371 return layerForScrollCorner();
359 } 372 }
360 373
361 void ScrollableArea::serviceScrollAnimations() 374 void ScrollableArea::serviceScrollAnimations()
362 { 375 {
363 if (ScrollAnimator* scrollAnimator = existingScrollAnimator()) 376 if (ScrollAnimator* scrollAnimator = existingScrollAnimator())
364 scrollAnimator->serviceScrollAnimations(); 377 scrollAnimator->serviceScrollAnimations();
365 } 378 }
366 379
367 IntPoint ScrollableArea::scrollPosition() const
368 {
369 int x = horizontalScrollbar() ? horizontalScrollbar()->value() : 0;
370 int y = verticalScrollbar() ? verticalScrollbar()->value() : 0;
371 return IntPoint(x, y);
372 }
373
374 IntPoint ScrollableArea::minimumScrollPosition() const
375 {
376 return IntPoint();
377 }
378
379 IntPoint ScrollableArea::maximumScrollPosition() const
380 {
381 return IntPoint(contentsSize().width() - visibleWidth(), contentsSize().heig ht() - visibleHeight());
382 }
383
384 IntRect ScrollableArea::visibleContentRect(VisibleContentRectIncludesScrollbars scrollbarInclusion) const 380 IntRect ScrollableArea::visibleContentRect(VisibleContentRectIncludesScrollbars scrollbarInclusion) const
385 { 381 {
386 int verticalScrollbarWidth = 0; 382 int verticalScrollbarWidth = 0;
387 int horizontalScrollbarHeight = 0; 383 int horizontalScrollbarHeight = 0;
388 384
389 if (scrollbarInclusion == IncludeScrollbars) { 385 if (scrollbarInclusion == IncludeScrollbars) {
390 if (Scrollbar* verticalBar = verticalScrollbar()) 386 if (Scrollbar* verticalBar = verticalScrollbar())
391 verticalScrollbarWidth = !verticalBar->isOverlayScrollbar() ? vertic alBar->width() : 0; 387 verticalScrollbarWidth = !verticalBar->isOverlayScrollbar() ? vertic alBar->width() : 0;
392 if (Scrollbar* horizontalBar = horizontalScrollbar()) 388 if (Scrollbar* horizontalBar = horizontalScrollbar())
393 horizontalScrollbarHeight = !horizontalBar->isOverlayScrollbar() ? h orizontalBar->height() : 0; 389 horizontalScrollbarHeight = !horizontalBar->isOverlayScrollbar() ? h orizontalBar->height() : 0;
394 } 390 }
395 391
396 return IntRect(scrollPosition().x(), 392 return IntRect(scrollPosition().x(),
397 scrollPosition().y(), 393 scrollPosition().y(),
398 std::max(0, visibleWidth() + verticalScrollbarWidth), 394 std::max(0, visibleWidth() + verticalScrollbarWidth),
399 std::max(0, visibleHeight() + horizontalScrollbarHeight)); 395 std::max(0, visibleHeight() + horizontalScrollbarHeight));
400 } 396 }
401 397
402 IntPoint ScrollableArea::clampScrollPosition(const IntPoint& scrollPosition) con st 398 IntPoint ScrollableArea::clampScrollPosition(const IntPoint& scrollPosition) con st
403 { 399 {
404 return scrollPosition.shrunkTo(maximumScrollPosition()).expandedTo(minimumSc rollPosition()); 400 return scrollPosition.shrunkTo(maximumScrollPosition()).expandedTo(minimumSc rollPosition());
405 } 401 }
406 402
407 void ScrollableArea::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const 403 void ScrollableArea::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
408 { 404 {
409 MemoryClassInfo info(memoryObjectInfo, this); 405 MemoryClassInfo info(memoryObjectInfo, this);
410 info.addMember(m_scrollAnimator, "scrollAnimator"); 406 info.addMember(m_scrollAnimator, "scrollAnimator");
411 } 407 }
412 408
409 int ScrollableArea::lineStep(ScrollbarOrientation) const
410 {
411 return pixelsPerLineStep();
412 }
413
414 int ScrollableArea::documentStep(ScrollbarOrientation orientation) const
415 {
416 return scrollSize(orientation);
417 }
418
419 float ScrollableArea::pixelStep(ScrollbarOrientation) const
420 {
421 return 1.0f;
tdanderson 2013/07/15 23:17:44 The style guide says to omit the .0f since you're
bokan 2013/07/22 15:08:47 Done.
422 }
423
413 } // namespace WebCore 424 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698