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

Side by Side Diff: third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.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
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "config.h"
6 #include "core/paint/PaintInvalidationCapableScrollableArea.h"
7
8 #include "core/frame/Settings.h"
9 #include "core/html/HTMLFrameOwnerElement.h"
10 #include "core/layout/LayoutBox.h"
11 #include "core/layout/LayoutScrollbar.h"
12 #include "core/layout/LayoutScrollbarPart.h"
13 #include "core/layout/PaintInvalidationState.h"
14 #include "core/paint/PaintLayer.h"
15
16 namespace blink {
17
18 void PaintInvalidationCapableScrollableArea::willRemoveScrollbar(Scrollbar* scro llbar, ScrollbarOrientation orientation)
19 {
20 if (!scrollbar->isCustomScrollbar()
21 && !(orientation == HorizontalScrollbar ? layerForHorizontalScrollbar() : layerForVerticalScrollbar()))
22 boxForScrollControlPaintInvalidation().invalidateDisplayItemClient(*scro llbar);
23
24 ScrollableArea::willRemoveScrollbar(scrollbar, orientation);
25 }
26
27 // Returns true if the scroll control is invalidated.
28 static bool invalidatePaintOfScrollControlIfNeeded(const IntRect& scrollControlR ect, LayoutRect& previousPaintInvalidationRect, bool needsPaintInvalidation, Lay outBox& box, const PaintInvalidationState& paintInvalidationState, const LayoutB oxModelObject& paintInvalidationContainer)
29 {
30 LayoutRect paintInvalidationRect(scrollControlRect);
31 if (!paintInvalidationRect.isEmpty())
32 PaintLayer::mapRectToPaintInvalidationBacking(&box, &paintInvalidationCo ntainer, paintInvalidationRect, &paintInvalidationState);
33
34 if (paintInvalidationRect != previousPaintInvalidationRect) {
35 box.invalidatePaintUsingContainer(paintInvalidationContainer, previousPa intInvalidationRect, PaintInvalidationScroll);
36 previousPaintInvalidationRect = paintInvalidationRect;
37 needsPaintInvalidation = true;
38 }
39
40 if (needsPaintInvalidation) {
41 box.invalidatePaintUsingContainer(paintInvalidationContainer, paintInval idationRect, PaintInvalidationScroll);
42 return true;
43 }
44
45 return false;
46 }
47
48 static void invalidatePaintOfScrollbarIfNeeded(Scrollbar* scrollbar, GraphicsLay er* scrollbarGraphicsLayer, LayoutRect& previousPaintInvalidationRect, bool need sPaintInvalidation, LayoutBox& box, const PaintInvalidationState& paintInvalidat ionState, const LayoutBoxModelObject& paintInvalidationContainer)
49 {
50 IntRect scrollbarRect = scrollbar && !scrollbarGraphicsLayer ? scrollbar->fr ameRect() : IntRect();
51 if (!invalidatePaintOfScrollControlIfNeeded(scrollbarRect, previousPaintInva lidationRect, needsPaintInvalidation, box, paintInvalidationState, paintInvalida tionContainer))
52 return;
53 if (!scrollbar)
54 return;
55
56 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*scrollbar, PaintInvalidationScroll, &previousPaintInvalidationRect);
57 if (scrollbar->isCustomScrollbar())
58 toLayoutScrollbar(scrollbar)->invalidateDisplayItemClientsOfScrollbarPar ts(paintInvalidationContainer, previousPaintInvalidationRect);
59 }
60
61 void PaintInvalidationCapableScrollableArea::invalidatePaintOfScrollControlsIfNe eded(const PaintInvalidationState& paintInvalidationState, const LayoutBoxModelO bject& paintInvalidationContainer)
62 {
63 LayoutBox& box = boxForScrollControlPaintInvalidation();
64 LayoutRect oldRect = m_horizontalScrollbarPreviousPaintInvalidationRect;
65 invalidatePaintOfScrollbarIfNeeded(horizontalScrollbar(), layerForHorizontal Scrollbar(), m_horizontalScrollbarPreviousPaintInvalidationRect, horizontalScrol lbarNeedsPaintInvalidation(), box, paintInvalidationState, paintInvalidationCont ainer);
66 bool scrollbarGeometryChanged = oldRect != m_horizontalScrollbarPreviousPain tInvalidationRect;
67
68 oldRect = m_verticalScrollbarPreviousPaintInvalidationRect;
69 invalidatePaintOfScrollbarIfNeeded(verticalScrollbar(), layerForVerticalScro llbar(), m_verticalScrollbarPreviousPaintInvalidationRect, verticalScrollbarNeed sPaintInvalidation(), box, paintInvalidationState, paintInvalidationContainer);
70 scrollbarGeometryChanged |= oldRect != m_verticalScrollbarPreviousPaintInval idationRect;
71
72 if (scrollbarGeometryChanged)
73 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(box, Pai ntInvalidationScroll, nullptr);
74
75 if (invalidatePaintOfScrollControlIfNeeded(scrollCornerRect(), m_scrollCorne rPreviousPaintInvalidationRect, scrollCornerNeedsPaintInvalidation(), box, paint InvalidationState, paintInvalidationContainer)) {
76 if (LayoutScrollbarPart* scrollCorner = this->scrollCorner())
77 scrollCorner->invalidateDisplayItemClientsIncludingNonCompositingDes cendants(&paintInvalidationContainer, PaintInvalidationScroll, &m_scrollCornerPr eviousPaintInvalidationRect);
78 if (LayoutScrollbarPart* resizer = this->resizer())
79 resizer->invalidateDisplayItemClientsIncludingNonCompositingDescenda nts(&paintInvalidationContainer, PaintInvalidationScroll, &m_scrollCornerPreviou sPaintInvalidationRect);
80 }
81
82 clearNeedsPaintInvalidationForScrollControls();
83 }
84
85 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698