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

Side by Side Diff: Source/core/layout/LayerScrollableArea.cpp

Issue 949303002: Fix invalidation during painting of scrollbars (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: NeedsRebaseline Created 5 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/layout/LayerScrollableArea.h ('k') | Source/core/layout/LayoutBox.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
3 * 3 *
4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation.
5 * 5 *
6 * Other contributors: 6 * Other contributors:
7 * Robert O'Callahan <roc+@cs.cmu.edu> 7 * Robert O'Callahan <roc+@cs.cmu.edu>
8 * David Baron <dbaron@fas.harvard.edu> 8 * David Baron <dbaron@fas.harvard.edu>
9 * Christian Biesinger <cbiesinger@web.de> 9 * Christian Biesinger <cbiesinger@web.de>
10 * Randall Jesup <rjesup@wgate.com> 10 * Randall Jesup <rjesup@wgate.com>
(...skipping 695 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 } 706 }
707 if (Scrollbar* verticalScrollbar = this->verticalScrollbar()) { 707 if (Scrollbar* verticalScrollbar = this->verticalScrollbar()) {
708 int clientHeight = box().pixelSnappedClientHeight(); 708 int clientHeight = box().pixelSnappedClientHeight();
709 verticalScrollbar->setProportion(clientHeight, overflowRect().height ()); 709 verticalScrollbar->setProportion(clientHeight, overflowRect().height ());
710 } 710 }
711 } 711 }
712 712
713 bool hasOverflow = hasScrollableHorizontalOverflow() || hasScrollableVertica lOverflow(); 713 bool hasOverflow = hasScrollableHorizontalOverflow() || hasScrollableVertica lOverflow();
714 updateScrollableAreaSet(hasOverflow); 714 updateScrollableAreaSet(hasOverflow);
715 715
716 if (hasOverflow) { 716 DisableCompositingQueryAsserts disabler;
717 DisableCompositingQueryAsserts disabler; 717 positionOverflowControls();
718 positionOverflowControls(IntSize());
719 }
720 } 718 }
721 719
722 bool LayerScrollableArea::hasHorizontalOverflow() const 720 bool LayerScrollableArea::hasHorizontalOverflow() const
723 { 721 {
724 ASSERT(!m_scrollDimensionsDirty); 722 ASSERT(!m_scrollDimensionsDirty);
725 723
726 return pixelSnappedScrollWidth() > box().pixelSnappedClientWidth(); 724 return pixelSnappedScrollWidth() > box().pixelSnappedClientWidth();
727 } 725 }
728 726
729 bool LayerScrollableArea::hasVerticalOverflow() const 727 bool LayerScrollableArea::hasVerticalOverflow() const
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1007 return m_vBar->width(); 1005 return m_vBar->width();
1008 } 1006 }
1009 1007
1010 int LayerScrollableArea::horizontalScrollbarHeight(OverlayScrollbarSizeRelevancy relevancy) const 1008 int LayerScrollableArea::horizontalScrollbarHeight(OverlayScrollbarSizeRelevancy relevancy) const
1011 { 1009 {
1012 if (!m_hBar || (m_hBar->isOverlayScrollbar() && (relevancy == IgnoreOverlayS crollbarSize || !m_hBar->shouldParticipateInHitTesting()))) 1010 if (!m_hBar || (m_hBar->isOverlayScrollbar() && (relevancy == IgnoreOverlayS crollbarSize || !m_hBar->shouldParticipateInHitTesting())))
1013 return 0; 1011 return 0;
1014 return m_hBar->height(); 1012 return m_hBar->height();
1015 } 1013 }
1016 1014
1017 void LayerScrollableArea::positionOverflowControls(const IntSize& offsetFromRoot ) 1015 void LayerScrollableArea::positionOverflowControls()
1018 { 1016 {
1019 if (!hasScrollbar() && !box().canResize()) 1017 if (!hasScrollbar() && !box().canResize())
1020 return; 1018 return;
1021 1019
1022 const IntRect borderBox = box().pixelSnappedBorderBoxRect(); 1020 const IntRect borderBox = box().pixelSnappedBorderBoxRect();
1023 if (Scrollbar* verticalScrollbar = this->verticalScrollbar()) { 1021 if (Scrollbar* verticalScrollbar = this->verticalScrollbar())
1024 IntRect vBarRect = rectForVerticalScrollbar(borderBox); 1022 verticalScrollbar->setFrameRect(rectForVerticalScrollbar(borderBox));
1025 vBarRect.move(offsetFromRoot);
1026 verticalScrollbar->setFrameRect(vBarRect);
1027 }
1028 1023
1029 if (Scrollbar* horizontalScrollbar = this->horizontalScrollbar()) { 1024 if (Scrollbar* horizontalScrollbar = this->horizontalScrollbar())
1030 IntRect hBarRect = rectForHorizontalScrollbar(borderBox); 1025 horizontalScrollbar->setFrameRect(rectForHorizontalScrollbar(borderBox)) ;
1031 hBarRect.move(offsetFromRoot);
1032 horizontalScrollbar->setFrameRect(hBarRect);
1033 }
1034 1026
1035 const IntRect& scrollCorner = scrollCornerRect(); 1027 const IntRect& scrollCorner = scrollCornerRect();
1036 if (m_scrollCorner) 1028 if (m_scrollCorner)
1037 m_scrollCorner->setFrameRect(LayoutRect(scrollCorner)); 1029 m_scrollCorner->setFrameRect(LayoutRect(scrollCorner));
1038 1030
1039 if (m_resizer) 1031 if (m_resizer)
1040 m_resizer->setFrameRect(LayoutRect(resizerCornerRect(borderBox, ResizerF orPointer))); 1032 m_resizer->setFrameRect(LayoutRect(resizerCornerRect(borderBox, ResizerF orPointer)));
1041 1033
1042 // FIXME, this should eventually be removed, once we are certain that compos ited 1034 // FIXME, this should eventually be removed, once we are certain that compos ited
1043 // controls get correctly positioned on a compositor update. For now, conser vatively 1035 // controls get correctly positioned on a compositor update. For now, conser vatively
1044 // leaving this unchanged. 1036 // leaving this unchanged.
1045 if (layer()->hasCompositedLayerMapping()) 1037 if (layer()->hasCompositedLayerMapping())
1046 layer()->compositedLayerMapping()->positionOverflowControlsLayers(offset FromRoot); 1038 layer()->compositedLayerMapping()->positionOverflowControlsLayers();
1047 } 1039 }
1048 1040
1049 void LayerScrollableArea::updateScrollCornerStyle() 1041 void LayerScrollableArea::updateScrollCornerStyle()
1050 { 1042 {
1051 if (!m_scrollCorner && !hasScrollbar()) 1043 if (!m_scrollCorner && !hasScrollbar())
1052 return; 1044 return;
1053 if (!m_scrollCorner && hasOverlayScrollbars()) 1045 if (!m_scrollCorner && hasOverlayScrollbars())
1054 return; 1046 return;
1055 1047
1056 LayoutObject* actualRenderer = rendererForScrollbar(box()); 1048 LayoutObject* actualRenderer = rendererForScrollbar(box());
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 void LayerScrollableArea::setTopmostScrollChild(Layer* scrollChild) 1374 void LayerScrollableArea::setTopmostScrollChild(Layer* scrollChild)
1383 { 1375 {
1384 // We only want to track the topmost scroll child for scrollable areas with 1376 // We only want to track the topmost scroll child for scrollable areas with
1385 // overlay scrollbars. 1377 // overlay scrollbars.
1386 if (!hasOverlayScrollbars()) 1378 if (!hasOverlayScrollbars())
1387 return; 1379 return;
1388 m_nextTopmostScrollChild = scrollChild; 1380 m_nextTopmostScrollChild = scrollChild;
1389 } 1381 }
1390 1382
1391 } // namespace blink 1383 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/layout/LayerScrollableArea.h ('k') | Source/core/layout/LayoutBox.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698