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

Side by Side Diff: third_party/WebKit/Source/core/paint/ScrollableAreaPainter.cpp

Issue 1422493003: Change Widget subclasses to use a CullRect instead of an IntRect for painting. (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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "core/paint/ScrollableAreaPainter.h" 6 #include "core/paint/ScrollableAreaPainter.h"
7 7
8 #include "core/layout/LayoutView.h" 8 #include "core/layout/LayoutView.h"
9 #include "core/page/Page.h" 9 #include "core/page/Page.h"
10 #include "core/paint/LayoutObjectDrawingRecorder.h" 10 #include "core/paint/LayoutObjectDrawingRecorder.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 void ScrollableAreaPainter::paintOverflowControls(GraphicsContext* context, cons t IntPoint& paintOffset, const CullRect& cullRect, bool paintingOverlayControls) 88 void ScrollableAreaPainter::paintOverflowControls(GraphicsContext* context, cons t IntPoint& paintOffset, const CullRect& cullRect, bool paintingOverlayControls)
89 { 89 {
90 // Don't do anything if we have no overflow. 90 // Don't do anything if we have no overflow.
91 if (!scrollableArea().box().hasOverflowClip()) 91 if (!scrollableArea().box().hasOverflowClip())
92 return; 92 return;
93 93
94 IntPoint adjustedPaintOffset = paintOffset; 94 IntPoint adjustedPaintOffset = paintOffset;
95 if (paintingOverlayControls) 95 if (paintingOverlayControls)
96 adjustedPaintOffset = scrollableArea().cachedOverlayScrollbarOffset(); 96 adjustedPaintOffset = scrollableArea().cachedOverlayScrollbarOffset();
97 97
98 IntRect localDamageRect = cullRect.m_rect;
99 localDamageRect.moveBy(-adjustedPaintOffset);
100
101 CullRect adjustedCullRect(cullRect, -adjustedPaintOffset); 98 CullRect adjustedCullRect(cullRect, -adjustedPaintOffset);
102 99
103 // Overlay scrollbars paint in a second pass through the layer tree so that they will paint 100 // Overlay scrollbars paint in a second pass through the layer tree so that they will paint
104 // on top of everything else. If this is the normal painting pass, paintingO verlayControls 101 // on top of everything else. If this is the normal painting pass, paintingO verlayControls
105 // will be false, and we should just tell the root layer that there are over lay scrollbars 102 // will be false, and we should just tell the root layer that there are over lay scrollbars
106 // that need to be painted. That will cause the second pass through the laye r tree to run, 103 // that need to be painted. That will cause the second pass through the laye r tree to run,
107 // and we'll paint the scrollbars then. In the meantime, cache tx and ty so that the 104 // and we'll paint the scrollbars then. In the meantime, cache tx and ty so that the
108 // second pass doesn't need to re-enter the LayoutTree to get it right. 105 // second pass doesn't need to re-enter the LayoutTree to get it right.
109 if (scrollableArea().hasOverlayScrollbars() && !paintingOverlayControls) { 106 if (scrollableArea().hasOverlayScrollbars() && !paintingOverlayControls) {
110 scrollableArea().setCachedOverlayScrollbarOffset(paintOffset); 107 scrollableArea().setCachedOverlayScrollbarOffset(paintOffset);
(...skipping 13 matching lines...) Expand all
124 return; 121 return;
125 } 122 }
126 123
127 // This check is required to avoid painting custom CSS scrollbars twice. 124 // This check is required to avoid painting custom CSS scrollbars twice.
128 if (paintingOverlayControls && !scrollableArea().hasOverlayScrollbars()) 125 if (paintingOverlayControls && !scrollableArea().hasOverlayScrollbars())
129 return; 126 return;
130 127
131 { 128 {
132 if (scrollableArea().horizontalScrollbar() && !scrollableArea().layerFor HorizontalScrollbar()) { 129 if (scrollableArea().horizontalScrollbar() && !scrollableArea().layerFor HorizontalScrollbar()) {
133 TransformRecorder translateRecorder(*context, *scrollableArea().hori zontalScrollbar(), AffineTransform::translation(adjustedPaintOffset.x(), adjuste dPaintOffset.y())); 130 TransformRecorder translateRecorder(*context, *scrollableArea().hori zontalScrollbar(), AffineTransform::translation(adjustedPaintOffset.x(), adjuste dPaintOffset.y()));
134 scrollableArea().horizontalScrollbar()->paint(context, localDamageRe ct); 131 scrollableArea().horizontalScrollbar()->paint(context, adjustedCullR ect);
135 } 132 }
136 if (scrollableArea().verticalScrollbar() && !scrollableArea().layerForVe rticalScrollbar()) { 133 if (scrollableArea().verticalScrollbar() && !scrollableArea().layerForVe rticalScrollbar()) {
137 TransformRecorder translateRecorder(*context, *scrollableArea().vert icalScrollbar(), AffineTransform::translation(adjustedPaintOffset.x(), adjustedP aintOffset.y())); 134 TransformRecorder translateRecorder(*context, *scrollableArea().vert icalScrollbar(), AffineTransform::translation(adjustedPaintOffset.x(), adjustedP aintOffset.y()));
138 scrollableArea().verticalScrollbar()->paint(context, localDamageRect ); 135 scrollableArea().verticalScrollbar()->paint(context, adjustedCullRec t);
139 } 136 }
140 } 137 }
141 138
142 if (scrollableArea().layerForScrollCorner()) 139 if (scrollableArea().layerForScrollCorner())
143 return; 140 return;
144 141
145 // We fill our scroll corner with white if we have a scrollbar that doesn't run all the way up to the 142 // We fill our scroll corner with white if we have a scrollbar that doesn't run all the way up to the
146 // edge of the box. 143 // edge of the box.
147 paintScrollCorner(context, adjustedPaintOffset, cullRect); 144 paintScrollCorner(context, adjustedPaintOffset, cullRect);
148 145
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 LayoutObjectDrawingRecorder recorder(*context, scrollableArea().box(), Displ ayItem::ScrollbarCorner, absRect, paintOffset); 191 LayoutObjectDrawingRecorder recorder(*context, scrollableArea().box(), Displ ayItem::ScrollbarCorner, absRect, paintOffset);
195 context->fillRect(absRect, Color::white); 192 context->fillRect(absRect, Color::white);
196 } 193 }
197 194
198 PaintLayerScrollableArea& ScrollableAreaPainter::scrollableArea() const 195 PaintLayerScrollableArea& ScrollableAreaPainter::scrollableArea() const
199 { 196 {
200 return *m_scrollableArea; 197 return *m_scrollableArea;
201 } 198 }
202 199
203 } // namespace blink 200 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/paint/PartPainter.cpp ('k') | third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698