OLD | NEW |
| (Empty) |
1 // Copyright 2010 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 | |
6 #ifndef CC_LAYERS_RENDER_SURFACE_H_ | |
7 #define CC_LAYERS_RENDER_SURFACE_H_ | |
8 | |
9 #include <vector> | |
10 | |
11 #include "base/basictypes.h" | |
12 #include "base/memory/ref_counted.h" | |
13 #include "cc/base/cc_export.h" | |
14 #include "cc/layers/layer_lists.h" | |
15 #include "ui/gfx/geometry/rect.h" | |
16 #include "ui/gfx/geometry/rect_f.h" | |
17 #include "ui/gfx/transform.h" | |
18 | |
19 namespace cc { | |
20 | |
21 class Layer; | |
22 template <typename LayerType> | |
23 class LayerIterator; | |
24 | |
25 class CC_EXPORT RenderSurface { | |
26 public: | |
27 explicit RenderSurface(Layer* owning_layer); | |
28 ~RenderSurface(); | |
29 | |
30 // Returns the rect that encloses the RenderSurfaceImpl including any | |
31 // reflection. | |
32 gfx::RectF DrawableContentRect() const; | |
33 | |
34 void SetContentRect(const gfx::Rect& content_rect) { | |
35 content_rect_ = content_rect; | |
36 } | |
37 gfx::Rect content_rect() const { return content_rect_; } | |
38 | |
39 void SetDrawOpacity(float opacity) { draw_opacity_ = opacity; } | |
40 float draw_opacity() const { return draw_opacity_; } | |
41 | |
42 void SetDrawOpacityIsAnimating(bool draw_opacity_is_animating) { | |
43 draw_opacity_is_animating_ = draw_opacity_is_animating; | |
44 } | |
45 bool draw_opacity_is_animating() const { return draw_opacity_is_animating_; } | |
46 | |
47 void SetDrawTransform(const gfx::Transform& draw_transform) { | |
48 draw_transform_ = draw_transform; | |
49 } | |
50 const gfx::Transform& draw_transform() const { return draw_transform_; } | |
51 | |
52 void SetScreenSpaceTransform(const gfx::Transform& screen_space_transform) { | |
53 screen_space_transform_ = screen_space_transform; | |
54 } | |
55 const gfx::Transform& screen_space_transform() const { | |
56 return screen_space_transform_; | |
57 } | |
58 | |
59 void SetReplicaDrawTransform(const gfx::Transform& replica_draw_transform) { | |
60 replica_draw_transform_ = replica_draw_transform; | |
61 } | |
62 const gfx::Transform& replica_draw_transform() const { | |
63 return replica_draw_transform_; | |
64 } | |
65 | |
66 void SetReplicaScreenSpaceTransform( | |
67 const gfx::Transform& replica_screen_space_transform) { | |
68 replica_screen_space_transform_ = replica_screen_space_transform; | |
69 } | |
70 const gfx::Transform& replica_screen_space_transform() const { | |
71 return replica_screen_space_transform_; | |
72 } | |
73 | |
74 void SetTargetSurfaceTransformsAreAnimating(bool animating) { | |
75 target_surface_transforms_are_animating_ = animating; | |
76 } | |
77 bool target_surface_transforms_are_animating() const { | |
78 return target_surface_transforms_are_animating_; | |
79 } | |
80 void SetScreenSpaceTransformsAreAnimating(bool animating) { | |
81 screen_space_transforms_are_animating_ = animating; | |
82 } | |
83 bool screen_space_transforms_are_animating() const { | |
84 return screen_space_transforms_are_animating_; | |
85 } | |
86 | |
87 bool is_clipped() const { return is_clipped_; } | |
88 void SetIsClipped(bool is_clipped) { is_clipped_ = is_clipped; } | |
89 | |
90 gfx::Rect clip_rect() const { return clip_rect_; } | |
91 void SetClipRect(const gfx::Rect& clip_rect) { clip_rect_ = clip_rect; } | |
92 | |
93 // When false, the RenderSurface does not contribute to another target | |
94 // RenderSurface that is being drawn for the current frame. It could still be | |
95 // drawn to as a target, but its output will not be a part of any other | |
96 // surface. | |
97 bool contributes_to_drawn_surface() const { | |
98 return contributes_to_drawn_surface_; | |
99 } | |
100 void set_contributes_to_drawn_surface(bool contributes_to_drawn_surface) { | |
101 contributes_to_drawn_surface_ = contributes_to_drawn_surface; | |
102 } | |
103 | |
104 LayerList& layer_list() { return layer_list_; } | |
105 // A no-op since DelegatedRendererLayers on the main thread don't have any | |
106 // RenderPasses so they can't contribute to a surface. | |
107 void AddContributingDelegatedRenderPassLayer(Layer* layer) {} | |
108 | |
109 void SetNearestOcclusionImmuneAncestor(RenderSurface* surface) { | |
110 nearest_occlusion_immune_ancestor_ = surface; | |
111 } | |
112 const RenderSurface* nearest_occlusion_immune_ancestor() const { | |
113 return nearest_occlusion_immune_ancestor_; | |
114 } | |
115 | |
116 void ClearLayerLists(); | |
117 | |
118 private: | |
119 friend class LayerIterator<Layer>; | |
120 | |
121 Layer* owning_layer_; | |
122 | |
123 // Uses this surface's space. | |
124 gfx::Rect content_rect_; | |
125 | |
126 float draw_opacity_; | |
127 bool draw_opacity_is_animating_; | |
128 gfx::Transform draw_transform_; | |
129 gfx::Transform screen_space_transform_; | |
130 gfx::Transform replica_draw_transform_; | |
131 gfx::Transform replica_screen_space_transform_; | |
132 bool target_surface_transforms_are_animating_; | |
133 bool screen_space_transforms_are_animating_; | |
134 | |
135 bool is_clipped_; | |
136 bool contributes_to_drawn_surface_; | |
137 | |
138 // Uses the space of the surface's target surface. | |
139 gfx::Rect clip_rect_; | |
140 | |
141 LayerList layer_list_; | |
142 | |
143 // The nearest ancestor target surface that will contain the contents of this | |
144 // surface, and that ignores outside occlusion. This can point to itself. | |
145 RenderSurface* nearest_occlusion_immune_ancestor_; | |
146 | |
147 // For LayerIteratorActions | |
148 int target_render_surface_layer_index_history_; | |
149 int current_layer_index_history_; | |
150 | |
151 DISALLOW_COPY_AND_ASSIGN(RenderSurface); | |
152 }; | |
153 | |
154 } // namespace cc | |
155 #endif // CC_LAYERS_RENDER_SURFACE_H_ | |
OLD | NEW |