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

Side by Side Diff: ui/views/view.h

Issue 1053143002: Make View::Paint use ui::PaintRecorder to access PaintContext's canvas (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: paintrecorder: . Created 5 years, 8 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #ifndef UI_VIEWS_VIEW_H_ 5 #ifndef UI_VIEWS_VIEW_H_
6 #define UI_VIEWS_VIEW_H_ 6 #define UI_VIEWS_VIEW_H_
7 7
8 #include <algorithm> 8 #include <algorithm>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 class Insets; 44 class Insets;
45 class Path; 45 class Path;
46 class Transform; 46 class Transform;
47 } 47 }
48 48
49 namespace ui { 49 namespace ui {
50 struct AXViewState; 50 struct AXViewState;
51 class Compositor; 51 class Compositor;
52 class Layer; 52 class Layer;
53 class NativeTheme; 53 class NativeTheme;
54 class PaintContext;
54 class TextInputClient; 55 class TextInputClient;
55 class Texture; 56 class Texture;
56 class ThemeProvider; 57 class ThemeProvider;
57 } 58 }
58 59
59 namespace views { 60 namespace views {
60 61
61 class Background; 62 class Background;
62 class Border; 63 class Border;
63 class ContextMenuController; 64 class ContextMenuController;
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 485
485 // Mark all or part of the View's bounds as dirty (needing repaint). 486 // Mark all or part of the View's bounds as dirty (needing repaint).
486 // |r| is in the View's coordinates. 487 // |r| is in the View's coordinates.
487 // Rectangle |r| should be in the view's coordinate system. The 488 // Rectangle |r| should be in the view's coordinate system. The
488 // transformations are applied to it to convert it into the parent coordinate 489 // transformations are applied to it to convert it into the parent coordinate
489 // system before propagating SchedulePaint up the view hierarchy. 490 // system before propagating SchedulePaint up the view hierarchy.
490 // TODO(beng): Make protected. 491 // TODO(beng): Make protected.
491 virtual void SchedulePaint(); 492 virtual void SchedulePaint();
492 virtual void SchedulePaintInRect(const gfx::Rect& r); 493 virtual void SchedulePaintInRect(const gfx::Rect& r);
493 494
494 class PaintContext {
495 public:
496 explicit PaintContext(gfx::Canvas* canvas)
497 : PaintContext(canvas, gfx::Rect()) {}
498 PaintContext(gfx::Canvas* canvas, const gfx::Rect& invalidation)
499 : canvas_(canvas), invalidation_(invalidation) {
500 #if DCHECK_IS_ON()
501 root_visited_ = nullptr;
502 #endif
503 }
504
505 // TODO(danakj): Remove this once everything is painting to display lists.
506 gfx::Canvas* canvas() const { return canvas_; }
507
508 bool CanCheckInvalidated() const { return !invalidation_.IsEmpty(); }
509
510 // When true, the |bounds| touches an invalidated area, so should be
511 // re-painted. When false, re-painting can be skipped. Bounds should be in
512 // the local space with offsets up to the painting root in the PaintContext.
513 bool IsRectInvalidated(const gfx::Rect& bounds) const {
514 DCHECK(CanCheckInvalidated());
515 return invalidation_.Intersects(bounds + offset_);
516 }
517
518 PaintContext CloneWithPaintOffset(const gfx::Vector2d& offset) const {
519 return PaintContext(*this, offset);
520 }
521
522 PaintContext CloneWithoutInvalidation() const {
523 return PaintContext(canvas_, gfx::Rect());
524 }
525
526 #if DCHECK_IS_ON()
527 void Visited(void* visited) const {
528 if (!root_visited_)
529 root_visited_ = visited;
530 }
531 void* RootVisited() const { return root_visited_; }
532 const gfx::Vector2d& PaintOffset() const { return offset_; }
533 #endif
534
535 private:
536 PaintContext(const PaintContext& other, const gfx::Vector2d& offset)
537 : canvas_(other.canvas_),
538 invalidation_(other.invalidation_),
539 offset_(other.offset_ + offset) {
540 #if DCHECK_IS_ON()
541 root_visited_ = other.root_visited_;
542 #endif
543 }
544
545 gfx::Canvas* canvas_;
546 // Invalidation in the space of the paint root (ie the space of the layer
547 // backing the paint taking place).
548 gfx::Rect invalidation_;
549 // Offset from the PaintContext to the space of the paint root and the
550 // |invalidation_|.
551 gfx::Vector2d offset_;
552
553 #if DCHECK_IS_ON()
554 // Used to verify that the |invalidation_| is only used to compare against
555 // rects in the same space.
556 mutable void* root_visited_;
557 #endif
558 };
559
560 // Called by the framework to paint a View. Performs translation and clipping 495 // Called by the framework to paint a View. Performs translation and clipping
561 // for View coordinates and language direction as required, allows the View 496 // for View coordinates and language direction as required, allows the View
562 // to paint itself via the various OnPaint*() event handlers and then paints 497 // to paint itself via the various OnPaint*() event handlers and then paints
563 // the hierarchy beneath it. 498 // the hierarchy beneath it.
564 void Paint(const PaintContext& parent_context); 499 void Paint(const ui::PaintContext& parent_context);
565 500
566 // The background object is owned by this object and may be NULL. 501 // The background object is owned by this object and may be NULL.
567 void set_background(Background* b); 502 void set_background(Background* b);
568 const Background* background() const { return background_.get(); } 503 const Background* background() const { return background_.get(); }
569 Background* background() { return background_.get(); } 504 Background* background() { return background_.get(); }
570 505
571 // The border object is owned by this object and may be NULL. 506 // The border object is owned by this object and may be NULL.
572 virtual void SetBorder(scoped_ptr<Border> b); 507 virtual void SetBorder(scoped_ptr<Border> b);
573 const Border* border() const { return border_.get(); } 508 const Border* border() const { return border_.get(); }
574 Border* border() { return border_.get(); } 509 Border* border() { return border_.get(); }
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after
1130 // ViewHierarchyChanged() is called when the parent NativeView of the widget 1065 // ViewHierarchyChanged() is called when the parent NativeView of the widget
1131 // that the view is attached to is changed as a result of changing the view 1066 // that the view is attached to is changed as a result of changing the view
1132 // hierarchy. Overriding this method is useful for tracking which 1067 // hierarchy. Overriding this method is useful for tracking which
1133 // FocusManager manages this view. 1068 // FocusManager manages this view.
1134 virtual void NativeViewHierarchyChanged(); 1069 virtual void NativeViewHierarchyChanged();
1135 1070
1136 // Painting ------------------------------------------------------------------ 1071 // Painting ------------------------------------------------------------------
1137 1072
1138 // Responsible for calling Paint() on child Views. Override to control the 1073 // Responsible for calling Paint() on child Views. Override to control the
1139 // order child Views are painted. 1074 // order child Views are painted.
1140 virtual void PaintChildren(const PaintContext& context); 1075 virtual void PaintChildren(const ui::PaintContext& context);
1141 1076
1142 // Override to provide rendering in any part of the View's bounds. Typically 1077 // Override to provide rendering in any part of the View's bounds. Typically
1143 // this is the "contents" of the view. If you override this method you will 1078 // this is the "contents" of the view. If you override this method you will
1144 // have to call the subsequent OnPaint*() methods manually. 1079 // have to call the subsequent OnPaint*() methods manually.
1145 virtual void OnPaint(gfx::Canvas* canvas); 1080 virtual void OnPaint(gfx::Canvas* canvas);
1146 1081
1147 // Override to paint a background before any content is drawn. Typically this 1082 // Override to paint a background before any content is drawn. Typically this
1148 // is done if you are satisfied with a default OnPaint handler but wish to 1083 // is done if you are satisfied with a default OnPaint handler but wish to
1149 // supply a different background. 1084 // supply a different background.
1150 virtual void OnPaintBackground(gfx::Canvas* canvas); 1085 virtual void OnPaintBackground(gfx::Canvas* canvas);
(...skipping 18 matching lines...) Expand all
1169 // recurses through all children. This is used when adding a layer to an 1104 // recurses through all children. This is used when adding a layer to an
1170 // existing view to make sure all descendants that have layers are parented to 1105 // existing view to make sure all descendants that have layers are parented to
1171 // the right layer. 1106 // the right layer.
1172 void MoveLayerToParent(ui::Layer* parent_layer, const gfx::Point& point); 1107 void MoveLayerToParent(ui::Layer* parent_layer, const gfx::Point& point);
1173 1108
1174 // Called to update the bounds of any child layers within this View's 1109 // Called to update the bounds of any child layers within this View's
1175 // hierarchy when something happens to the hierarchy. 1110 // hierarchy when something happens to the hierarchy.
1176 void UpdateChildLayerBounds(const gfx::Vector2d& offset); 1111 void UpdateChildLayerBounds(const gfx::Vector2d& offset);
1177 1112
1178 // Overridden from ui::LayerDelegate: 1113 // Overridden from ui::LayerDelegate:
1179 void OnPaintLayer(gfx::Canvas* canvas) override; 1114 void OnPaintLayer(const ui::PaintContext& context) override;
1180 void OnDelegatedFrameDamage(const gfx::Rect& damage_rect_in_dip) override; 1115 void OnDelegatedFrameDamage(const gfx::Rect& damage_rect_in_dip) override;
1181 void OnDeviceScaleFactorChanged(float device_scale_factor) override; 1116 void OnDeviceScaleFactorChanged(float device_scale_factor) override;
1182 base::Closure PrepareForLayerBoundsChange() override; 1117 base::Closure PrepareForLayerBoundsChange() override;
1183 1118
1184 // Finds the layer that this view paints to (it may belong to an ancestor 1119 // Finds the layer that this view paints to (it may belong to an ancestor
1185 // view), then reorders the immediate children of that layer to match the 1120 // view), then reorders the immediate children of that layer to match the
1186 // order of the view tree. 1121 // order of the view tree.
1187 virtual void ReorderLayers(); 1122 virtual void ReorderLayers();
1188 1123
1189 // This reorders the immediate children of |*parent_layer| to match the 1124 // This reorders the immediate children of |*parent_layer| to match the
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
1629 // Belongs to this view, but it's reference-counted on some platforms 1564 // Belongs to this view, but it's reference-counted on some platforms
1630 // so we can't use a scoped_ptr. It's dereferenced in the destructor. 1565 // so we can't use a scoped_ptr. It's dereferenced in the destructor.
1631 NativeViewAccessibility* native_view_accessibility_; 1566 NativeViewAccessibility* native_view_accessibility_;
1632 1567
1633 DISALLOW_COPY_AND_ASSIGN(View); 1568 DISALLOW_COPY_AND_ASSIGN(View);
1634 }; 1569 };
1635 1570
1636 } // namespace views 1571 } // namespace views
1637 1572
1638 #endif // UI_VIEWS_VIEW_H_ 1573 #endif // UI_VIEWS_VIEW_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698