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.cpp

Issue 1456953003: Revert of Calculate paint invalidation rect for scrollbars (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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) 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 44
45 #include "platform/TraceEvent.h" 45 #include "platform/TraceEvent.h"
46 46
47 static const int kPixelsPerLineStep = 40; 47 static const int kPixelsPerLineStep = 40;
48 static const float kMinFractionToStepWhenPaging = 0.875f; 48 static const float kMinFractionToStepWhenPaging = 0.875f;
49 49
50 namespace blink { 50 namespace blink {
51 51
52 struct SameSizeAsScrollableArea { 52 struct SameSizeAsScrollableArea {
53 virtual ~SameSizeAsScrollableArea(); 53 virtual ~SameSizeAsScrollableArea();
54 IntRect scrollbarDamage[2];
54 #if ENABLE(ASSERT) && ENABLE(OILPAN) 55 #if ENABLE(ASSERT) && ENABLE(OILPAN)
55 VerifyEagerFinalization verifyEager; 56 VerifyEagerFinalization verifyEager;
56 #endif 57 #endif
57 void* pointer; 58 void* pointer;
58 unsigned bitfields : 16; 59 unsigned bitfields : 16;
59 IntPoint origin; 60 IntPoint origin;
60 }; 61 };
61 62
62 static_assert(sizeof(ScrollableArea) == sizeof(SameSizeAsScrollableArea), "Scrol lableArea should stay small"); 63 static_assert(sizeof(ScrollableArea) == sizeof(SameSizeAsScrollableArea), "Scrol lableArea should stay small");
63 64
(...skipping 10 matching lines...) Expand all
74 int ScrollableArea::maxOverlapBetweenPages() 75 int ScrollableArea::maxOverlapBetweenPages()
75 { 76 {
76 static int maxOverlapBetweenPages = ScrollbarTheme::theme()->maxOverlapBetwe enPages(); 77 static int maxOverlapBetweenPages = ScrollbarTheme::theme()->maxOverlapBetwe enPages();
77 return maxOverlapBetweenPages; 78 return maxOverlapBetweenPages;
78 } 79 }
79 80
80 ScrollableArea::ScrollableArea() 81 ScrollableArea::ScrollableArea()
81 : m_inLiveResize(false) 82 : m_inLiveResize(false)
82 , m_scrollbarOverlayStyle(ScrollbarOverlayStyleDefault) 83 , m_scrollbarOverlayStyle(ScrollbarOverlayStyleDefault)
83 , m_scrollOriginChanged(false) 84 , m_scrollOriginChanged(false)
84 , m_horizontalScrollbarNeedsPaintInvalidation(false)
85 , m_verticalScrollbarNeedsPaintInvalidation(false)
86 , m_scrollCornerNeedsPaintInvalidation(false)
87 { 85 {
88 } 86 }
89 87
90 ScrollableArea::~ScrollableArea() 88 ScrollableArea::~ScrollableArea()
91 { 89 {
92 } 90 }
93 91
94 void ScrollableArea::clearScrollAnimators() 92 void ScrollableArea::clearScrollAnimators()
95 { 93 {
96 m_animators.clear(); 94 m_animators.clear();
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 DoublePoint truncatedPosition = shouldUseIntegerScrollOffset() ? flooredIntP oint(position) : position; 239 DoublePoint truncatedPosition = shouldUseIntegerScrollOffset() ? flooredIntP oint(position) : position;
242 240
243 // Tell the derived class to scroll its contents. 241 // Tell the derived class to scroll its contents.
244 setScrollOffset(truncatedPosition, scrollType); 242 setScrollOffset(truncatedPosition, scrollType);
245 243
246 Scrollbar* verticalScrollbar = this->verticalScrollbar(); 244 Scrollbar* verticalScrollbar = this->verticalScrollbar();
247 245
248 // Tell the scrollbars to update their thumb postions. 246 // Tell the scrollbars to update their thumb postions.
249 if (Scrollbar* horizontalScrollbar = this->horizontalScrollbar()) { 247 if (Scrollbar* horizontalScrollbar = this->horizontalScrollbar()) {
250 horizontalScrollbar->offsetDidChange(); 248 horizontalScrollbar->offsetDidChange();
251 if (horizontalScrollbar->isOverlayScrollbar() && !hasLayerForHorizontalS crollbar()) 249 if (horizontalScrollbar->isOverlayScrollbar() && !hasLayerForHorizontalS crollbar()) {
252 setScrollbarNeedsPaintInvalidation(horizontalScrollbar); 250 if (!verticalScrollbar)
251 horizontalScrollbar->invalidate();
252 else {
253 // If there is both a horizontalScrollbar and a verticalScrollba r,
254 // then we must also invalidate the corner between them.
255 IntRect boundsAndCorner = horizontalScrollbar->boundsRect();
256 boundsAndCorner.setWidth(boundsAndCorner.width() + verticalScrol lbar->width());
257 horizontalScrollbar->invalidateRect(boundsAndCorner);
258 }
259 }
253 } 260 }
254 if (verticalScrollbar) { 261 if (verticalScrollbar) {
255 verticalScrollbar->offsetDidChange(); 262 verticalScrollbar->offsetDidChange();
256 if (verticalScrollbar->isOverlayScrollbar() && !hasLayerForVerticalScrol lbar()) 263 if (verticalScrollbar->isOverlayScrollbar() && !hasLayerForVerticalScrol lbar())
257 setScrollbarNeedsPaintInvalidation(verticalScrollbar); 264 verticalScrollbar->invalidate();
258 } 265 }
259 266
260 if (scrollPositionDouble() != oldPosition) { 267 if (scrollPositionDouble() != oldPosition) {
261 // FIXME: Pass in DoubleSize. crbug.com/414283. 268 // FIXME: Pass in DoubleSize. crbug.com/414283.
262 scrollAnimator()->notifyContentAreaScrolled(toFloatSize(scrollPositionDo uble() - oldPosition)); 269 scrollAnimator()->notifyContentAreaScrolled(toFloatSize(scrollPositionDo uble() - oldPosition));
263 } 270 }
264 271
265 scrollAnimator()->setCurrentPosition(toFloatPoint(position)); 272 scrollAnimator()->setCurrentPosition(toFloatPoint(position));
266 } 273 }
267 274
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 Scrollbar* hScrollbar = horizontalScrollbar(); 395 Scrollbar* hScrollbar = horizontalScrollbar();
389 return hScrollbar && hScrollbar->isOverlayScrollbar(); 396 return hScrollbar && hScrollbar->isOverlayScrollbar();
390 } 397 }
391 398
392 void ScrollableArea::setScrollbarOverlayStyle(ScrollbarOverlayStyle overlayStyle ) 399 void ScrollableArea::setScrollbarOverlayStyle(ScrollbarOverlayStyle overlayStyle )
393 { 400 {
394 m_scrollbarOverlayStyle = overlayStyle; 401 m_scrollbarOverlayStyle = overlayStyle;
395 402
396 if (Scrollbar* scrollbar = horizontalScrollbar()) { 403 if (Scrollbar* scrollbar = horizontalScrollbar()) {
397 ScrollbarTheme::theme()->updateScrollbarOverlayStyle(scrollbar); 404 ScrollbarTheme::theme()->updateScrollbarOverlayStyle(scrollbar);
398 setScrollbarNeedsPaintInvalidation(scrollbar); 405 scrollbar->invalidate();
399 } 406 }
400 407
401 if (Scrollbar* scrollbar = verticalScrollbar()) { 408 if (Scrollbar* scrollbar = verticalScrollbar()) {
402 ScrollbarTheme::theme()->updateScrollbarOverlayStyle(scrollbar); 409 ScrollbarTheme::theme()->updateScrollbarOverlayStyle(scrollbar);
403 setScrollbarNeedsPaintInvalidation(scrollbar); 410 scrollbar->invalidate();
404 } 411 }
405 } 412 }
406 413
407 void ScrollableArea::setScrollbarNeedsPaintInvalidation(Scrollbar* scrollbar) 414 void ScrollableArea::invalidateScrollbar(Scrollbar* scrollbar, const IntRect& re ct)
408 { 415 {
409 if (scrollbar == horizontalScrollbar()) { 416 if (scrollbar == horizontalScrollbar()) {
410 if (GraphicsLayer* graphicsLayer = layerForHorizontalScrollbar()) { 417 if (GraphicsLayer* graphicsLayer = layerForHorizontalScrollbar()) {
411 graphicsLayer->setNeedsDisplay(); 418 graphicsLayer->setNeedsDisplay();
412 graphicsLayer->setContentsNeedsDisplay(); 419 graphicsLayer->setContentsNeedsDisplay();
413 return; 420 return;
414 } 421 }
415 m_horizontalScrollbarNeedsPaintInvalidation = true; 422 invalidateScrollbarRect(scrollbar, rect);
416 scrollControlWasSetNeedsPaintInvalidation();
417 return; 423 return;
418 } 424 }
419 if (scrollbar == verticalScrollbar()) { 425 if (scrollbar == verticalScrollbar()) {
420 if (GraphicsLayer* graphicsLayer = layerForVerticalScrollbar()) { 426 if (GraphicsLayer* graphicsLayer = layerForVerticalScrollbar()) {
421 graphicsLayer->setNeedsDisplay(); 427 graphicsLayer->setNeedsDisplay();
422 graphicsLayer->setContentsNeedsDisplay(); 428 graphicsLayer->setContentsNeedsDisplay();
423 return; 429 return;
424 } 430 }
425 m_verticalScrollbarNeedsPaintInvalidation = true; 431 invalidateScrollbarRect(scrollbar, rect);
426 scrollControlWasSetNeedsPaintInvalidation();
427 return; 432 return;
428 } 433 }
429 // Otherwise the scrollbar is just created and has not been set as either 434 // Otherwise the scrollbar is just created and has not been set as either
430 // horizontalScrollbar() or verticalScrollbar(). 435 // horizontalScrollbar() or verticalScrollbar().
431 } 436 }
432 437
433 void ScrollableArea::setScrollCornerNeedsPaintInvalidation() 438 void ScrollableArea::invalidateScrollCorner(const IntRect& rect)
434 { 439 {
435 if (GraphicsLayer* graphicsLayer = layerForScrollCorner()) { 440 if (GraphicsLayer* graphicsLayer = layerForScrollCorner()) {
436 graphicsLayer->setNeedsDisplay(); 441 graphicsLayer->setNeedsDisplay();
437 return; 442 return;
438 } 443 }
439 m_scrollCornerNeedsPaintInvalidation = true; 444 invalidateScrollCornerRect(rect);
440 scrollControlWasSetNeedsPaintInvalidation();
441 } 445 }
442 446
443 bool ScrollableArea::hasLayerForHorizontalScrollbar() const 447 bool ScrollableArea::hasLayerForHorizontalScrollbar() const
444 { 448 {
445 return layerForHorizontalScrollbar(); 449 return layerForHorizontalScrollbar();
446 } 450 }
447 451
448 bool ScrollableArea::hasLayerForVerticalScrollbar() const 452 bool ScrollableArea::hasLayerForVerticalScrollbar() const
449 { 453 {
450 return layerForVerticalScrollbar(); 454 return layerForVerticalScrollbar();
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 verticalScrollbarWidth = !verticalBar->isOverlayScrollbar() ? verticalBa r->width() : 0; 582 verticalScrollbarWidth = !verticalBar->isOverlayScrollbar() ? verticalBa r->width() : 0;
579 if (Scrollbar* horizontalBar = horizontalScrollbar()) 583 if (Scrollbar* horizontalBar = horizontalScrollbar())
580 horizontalScrollbarHeight = !horizontalBar->isOverlayScrollbar() ? horiz ontalBar->height() : 0; 584 horizontalScrollbarHeight = !horizontalBar->isOverlayScrollbar() ? horiz ontalBar->height() : 0;
581 585
582 return IntSize(std::max(0, size.width() - verticalScrollbarWidth), 586 return IntSize(std::max(0, size.width() - verticalScrollbarWidth),
583 std::max(0, size.height() - horizontalScrollbarHeight)); 587 std::max(0, size.height() - horizontalScrollbarHeight));
584 588
585 } 589 }
586 590
587 } // namespace blink 591 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698