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

Side by Side Diff: Source/platform/scroll/ScrollableArea.h

Issue 418483004: Fix scrollbar damage accumulation issue (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: NeedsRebaseline Created 6 years, 5 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008, 2011 Apple Inc. All Rights Reserved. 2 * Copyright (C) 2008, 2011 Apple Inc. All Rights Reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 197
198 virtual bool userInputScrollable(ScrollbarOrientation) const = 0; 198 virtual bool userInputScrollable(ScrollbarOrientation) const = 0;
199 virtual bool shouldPlaceVerticalScrollbarOnLeft() const = 0; 199 virtual bool shouldPlaceVerticalScrollbarOnLeft() const = 0;
200 200
201 // Convenience functions 201 // Convenience functions
202 int scrollPosition(ScrollbarOrientation orientation) { return orientation == HorizontalScrollbar ? scrollPosition().x() : scrollPosition().y(); } 202 int scrollPosition(ScrollbarOrientation orientation) { return orientation == HorizontalScrollbar ? scrollPosition().x() : scrollPosition().y(); }
203 int minimumScrollPosition(ScrollbarOrientation orientation) { return orienta tion == HorizontalScrollbar ? minimumScrollPosition().x() : minimumScrollPositio n().y(); } 203 int minimumScrollPosition(ScrollbarOrientation orientation) { return orienta tion == HorizontalScrollbar ? minimumScrollPosition().x() : minimumScrollPositio n().y(); }
204 int maximumScrollPosition(ScrollbarOrientation orientation) { return orienta tion == HorizontalScrollbar ? maximumScrollPosition().x() : maximumScrollPositio n().y(); } 204 int maximumScrollPosition(ScrollbarOrientation orientation) { return orienta tion == HorizontalScrollbar ? maximumScrollPosition().x() : maximumScrollPositio n().y(); }
205 int clampScrollPosition(ScrollbarOrientation orientation, int pos) { return std::max(std::min(pos, maximumScrollPosition(orientation)), minimumScrollPositi on(orientation)); } 205 int clampScrollPosition(ScrollbarOrientation orientation, int pos) { return std::max(std::min(pos, maximumScrollPosition(orientation)), minimumScrollPositi on(orientation)); }
206 206
207 bool hasVerticalBarDamage() const { return m_hasVerticalBarDamage; } 207 bool hasVerticalBarDamage() const { return !m_verticalBarDamage.isEmpty(); }
208 bool hasHorizontalBarDamage() const { return m_hasHorizontalBarDamage; } 208 bool hasHorizontalBarDamage() const { return !m_horizontalBarDamage.isEmpty( ); }
209 const IntRect& verticalBarDamage() const { return m_verticalBarDamage; }
210 const IntRect& horizontalBarDamage() const { return m_horizontalBarDamage; }
209 211
210 const IntRect& verticalBarDamage() const 212 void addScrollbarDamage(Scrollbar* scrollbar, const IntRect& rect)
211 { 213 {
212 ASSERT(m_hasVerticalBarDamage); 214 if (scrollbar == horizontalScrollbar())
213 return m_verticalBarDamage; 215 m_horizontalBarDamage.unite(rect);
214 } 216 else
215 217 m_verticalBarDamage.unite(rect);
216 const IntRect& horizontalBarDamage() const
217 {
218 ASSERT(m_hasHorizontalBarDamage);
219 return m_horizontalBarDamage;
220 } 218 }
221 219
222 void resetScrollbarDamage() 220 void resetScrollbarDamage()
223 { 221 {
224 m_hasVerticalBarDamage = false; 222 m_verticalBarDamage = IntRect();
225 m_hasHorizontalBarDamage = false; 223 m_horizontalBarDamage = IntRect();
226 } 224 }
225
227 virtual GraphicsLayer* layerForContainer() const; 226 virtual GraphicsLayer* layerForContainer() const;
228 virtual GraphicsLayer* layerForScrolling() const { return 0; } 227 virtual GraphicsLayer* layerForScrolling() const { return 0; }
229 virtual GraphicsLayer* layerForHorizontalScrollbar() const { return 0; } 228 virtual GraphicsLayer* layerForHorizontalScrollbar() const { return 0; }
230 virtual GraphicsLayer* layerForVerticalScrollbar() const { return 0; } 229 virtual GraphicsLayer* layerForVerticalScrollbar() const { return 0; }
231 virtual GraphicsLayer* layerForScrollCorner() const { return 0; } 230 virtual GraphicsLayer* layerForScrollCorner() const { return 0; }
232 bool hasLayerForHorizontalScrollbar() const; 231 bool hasLayerForHorizontalScrollbar() const;
233 bool hasLayerForVerticalScrollbar() const; 232 bool hasLayerForVerticalScrollbar() const;
234 bool hasLayerForScrollCorner() const; 233 bool hasLayerForScrollCorner() const;
235 234
236 void cancelProgrammaticScrollAnimation(); 235 void cancelProgrammaticScrollAnimation();
237 236
238 protected: 237 protected:
239 ScrollableArea(); 238 ScrollableArea();
240 virtual ~ScrollableArea(); 239 virtual ~ScrollableArea();
241 240
242 void setScrollOrigin(const IntPoint&); 241 void setScrollOrigin(const IntPoint&);
243 void resetScrollOriginChanged() { m_scrollOriginChanged = false; } 242 void resetScrollOriginChanged() { m_scrollOriginChanged = false; }
244 243
245 virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&) = 0; 244 virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&) = 0;
246 virtual void invalidateScrollCornerRect(const IntRect&) = 0; 245 virtual void invalidateScrollCornerRect(const IntRect&) = 0;
247 246
248 // For repaint after layout, stores the damage to be repainted for the
249 // scrollbars.
250 unsigned m_hasHorizontalBarDamage : 1;
251 unsigned m_hasVerticalBarDamage : 1;
252 IntRect m_horizontalBarDamage;
253 IntRect m_verticalBarDamage;
254
255 private: 247 private:
256 void scrollPositionChanged(const IntPoint&); 248 void scrollPositionChanged(const IntPoint&);
257 249
258 // NOTE: Only called from the ScrollAnimator. 250 // NOTE: Only called from the ScrollAnimator.
259 friend class ScrollAnimator; 251 friend class ScrollAnimator;
260 void setScrollOffsetFromAnimation(const IntPoint&); 252 void setScrollOffsetFromAnimation(const IntPoint&);
261 253
262 // This function should be overriden by subclasses to perform the actual 254 // This function should be overriden by subclasses to perform the actual
263 // scroll of the content. 255 // scroll of the content.
264 virtual void setScrollOffset(const IntPoint&) = 0; 256 virtual void setScrollOffset(const IntPoint&) = 0;
265 257
266 virtual int lineStep(ScrollbarOrientation) const; 258 virtual int lineStep(ScrollbarOrientation) const;
267 virtual int pageStep(ScrollbarOrientation) const; 259 virtual int pageStep(ScrollbarOrientation) const;
268 virtual int documentStep(ScrollbarOrientation) const; 260 virtual int documentStep(ScrollbarOrientation) const;
269 virtual float pixelStep(ScrollbarOrientation) const; 261 virtual float pixelStep(ScrollbarOrientation) const;
270 262
263 // Stores the paint invalidations for the scrollbars during layout.
264 IntRect m_horizontalBarDamage;
265 IntRect m_verticalBarDamage;
266
271 struct ScrollableAreaAnimators { 267 struct ScrollableAreaAnimators {
272 OwnPtr<ScrollAnimator> scrollAnimator; 268 OwnPtr<ScrollAnimator> scrollAnimator;
273 OwnPtr<ProgrammaticScrollAnimator> programmaticScrollAnimator; 269 OwnPtr<ProgrammaticScrollAnimator> programmaticScrollAnimator;
274 }; 270 };
275 271
276 mutable OwnPtr<ScrollableAreaAnimators> m_animators; 272 mutable OwnPtr<ScrollableAreaAnimators> m_animators;
277 unsigned m_constrainsScrollingToContentEdge : 1; 273 unsigned m_constrainsScrollingToContentEdge : 1;
278 274
279 unsigned m_inLiveResize : 1; 275 unsigned m_inLiveResize : 1;
280 276
(...skipping 14 matching lines...) Expand all
295 // vertical-lr / ltr NO NO 291 // vertical-lr / ltr NO NO
296 // vertical-lr / rtl NO YES 292 // vertical-lr / rtl NO YES
297 // vertical-rl / ltr YES NO 293 // vertical-rl / ltr YES NO
298 // vertical-rl / rtl YES YES 294 // vertical-rl / rtl YES YES
299 IntPoint m_scrollOrigin; 295 IntPoint m_scrollOrigin;
300 }; 296 };
301 297
302 } // namespace blink 298 } // namespace blink
303 299
304 #endif // ScrollableArea_h 300 #endif // ScrollableArea_h
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderLayerScrollableArea.cpp ('k') | Source/platform/scroll/ScrollableArea.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698