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

Unified Diff: ui/views/view.h

Issue 275183002: patch from issue 218843002 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 6 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/cull_set.cc ('k') | ui/views/view.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/view.h
diff --git a/ui/views/view.h b/ui/views/view.h
index 027e212d7c47faa1878806eb40dacc2ed7828515..f26d8f05046b3c5349504b0c861dd24969703e3b 100644
--- a/ui/views/view.h
+++ b/ui/views/view.h
@@ -27,10 +27,12 @@
#include "ui/events/event.h"
#include "ui/events/event_target.h"
#include "ui/events/event_targeter.h"
+#include "ui/gfx/geometry/r_tree.h"
#include "ui/gfx/insets.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/rect.h"
#include "ui/gfx/vector2d.h"
+#include "ui/views/cull_set.h"
#include "ui/views/views_export.h"
#if defined(OS_WIN)
@@ -502,7 +504,7 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
// for View coordinates and language direction as required, allows the View
// to paint itself via the various OnPaint*() event handlers and then paints
// the hierarchy beneath it.
- virtual void Paint(gfx::Canvas* canvas);
+ virtual void Paint(gfx::Canvas* canvas, const CullSet& cull_set);
// The background object is owned by this object and may be NULL.
void set_background(Background* b);
@@ -1076,7 +1078,7 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
// Responsible for calling Paint() on child Views. Override to control the
// order child Views are painted.
- virtual void PaintChildren(gfx::Canvas* canvas);
+ virtual void PaintChildren(gfx::Canvas* canvas, const CullSet& cull_set);
// Override to provide rendering in any part of the View's bounds. Typically
// this is the "contents" of the view. If you override this method you will
@@ -1091,6 +1093,11 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
// Override to paint a border not specified by SetBorder().
virtual void OnPaintBorder(gfx::Canvas* canvas);
+ // Returns true if this View is the root for paint events, and should
+ // therefore maintain a |bounds_tree_| member and use it for paint damage rect
+ // calculations.
+ virtual bool IsPaintRoot();
+
// Accelerated painting ------------------------------------------------------
// Returns the offset from this view to the nearest ancestor with a layer. If
@@ -1251,7 +1258,7 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
// Common Paint() code shared by accelerated and non-accelerated code paths to
// invoke OnPaint() on the View.
- void PaintCommon(gfx::Canvas* canvas);
+ void PaintCommon(gfx::Canvas* canvas, const CullSet& cull_set);
// Tree operations -----------------------------------------------------------
@@ -1320,6 +1327,25 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
// Sets the layer's bounds given in DIP coordinates.
void SetLayerBounds(const gfx::Rect& bounds_in_dip);
+ // Sets the bit indicating that the cached bounds for this object within the
+ // root view bounds tree are no longer valid. If |origin_changed| is true sets
+ // the same bit for all of our children as well.
+ void SetRootBoundsDirty(bool origin_changed);
+
+ // If needed, updates the bounds rectangle in paint root coordinate space
+ // in the supplied RTree. Recurses to children for recomputation as well.
+ void UpdateRootBounds(gfx::RTree* bounds_tree, const gfx::Vector2d& offset);
+
+ // Remove self and all children from the supplied bounds tree. This is used,
+ // for example, when a view gets a layer and therefore becomes paint root. It
+ // needs to remove all references to itself and its children from any previous
+ // paint root that may have been tracking it.
+ void RemoveRootBounds(gfx::RTree* bounds_tree);
+
+ // Traverse up the View hierarchy to the first ancestor that is a paint root
+ // and return a pointer to its |bounds_tree_| or NULL if no tree is found.
+ gfx::RTree* GetBoundsTreeFromPaintRoot();
+
// Transformations -----------------------------------------------------------
// Returns in |transform| the transform to get from coordinates of |ancestor|
@@ -1492,6 +1518,15 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
// List of descendants wanting notification when their visible bounds change.
scoped_ptr<Views> descendants_to_notify_;
+ // True if the bounds on this object have changed since the last time the
+ // paint root view constructed the spatial database.
+ bool root_bounds_dirty_;
+
+ // If this View IsPaintRoot() then this will be a pointer to a spatial data
+ // structure where we will keep the bounding boxes of all our children, for
+ // efficient paint damage rectangle intersection.
+ scoped_ptr<gfx::RTree> bounds_tree_;
+
// Transformations -----------------------------------------------------------
// Clipping parameters. skia transformation matrix does not give us clipping.
« no previous file with comments | « ui/views/cull_set.cc ('k') | ui/views/view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698