| OLD | NEW |
| (Empty) |
| 1 // Copyright 2011 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 #ifndef CC_LAYERS_RENDER_SURFACE_IMPL_H_ | |
| 6 #define CC_LAYERS_RENDER_SURFACE_IMPL_H_ | |
| 7 | |
| 8 #include <string> | |
| 9 #include <vector> | |
| 10 | |
| 11 #include "base/basictypes.h" | |
| 12 #include "base/memory/scoped_ptr.h" | |
| 13 #include "cc/base/cc_export.h" | |
| 14 #include "cc/layers/layer_lists.h" | |
| 15 #include "cc/quads/render_pass.h" | |
| 16 #include "cc/quads/shared_quad_state.h" | |
| 17 #include "cc/trees/occlusion.h" | |
| 18 #include "ui/gfx/geometry/rect.h" | |
| 19 #include "ui/gfx/geometry/rect_f.h" | |
| 20 #include "ui/gfx/transform.h" | |
| 21 | |
| 22 namespace cc { | |
| 23 | |
| 24 class DamageTracker; | |
| 25 class DelegatedRendererLayerImpl; | |
| 26 class Occlusion; | |
| 27 class RenderPassId; | |
| 28 class RenderPassSink; | |
| 29 class LayerImpl; | |
| 30 template <typename LayerType> | |
| 31 class LayerIterator; | |
| 32 | |
| 33 struct AppendQuadsData; | |
| 34 | |
| 35 class CC_EXPORT RenderSurfaceImpl { | |
| 36 public: | |
| 37 explicit RenderSurfaceImpl(LayerImpl* owning_layer); | |
| 38 virtual ~RenderSurfaceImpl(); | |
| 39 | |
| 40 gfx::PointF ContentRectCenter() const { | |
| 41 return gfx::RectF(content_rect_).CenterPoint(); | |
| 42 } | |
| 43 | |
| 44 // Returns the rect that encloses the RenderSurfaceImpl including any | |
| 45 // reflection. | |
| 46 gfx::RectF DrawableContentRect() const; | |
| 47 | |
| 48 void SetDrawOpacity(float opacity) { draw_opacity_ = opacity; } | |
| 49 float draw_opacity() const { return draw_opacity_; } | |
| 50 | |
| 51 void SetNearestOcclusionImmuneAncestor(RenderSurfaceImpl* surface) { | |
| 52 nearest_occlusion_immune_ancestor_ = surface; | |
| 53 } | |
| 54 const RenderSurfaceImpl* nearest_occlusion_immune_ancestor() const { | |
| 55 return nearest_occlusion_immune_ancestor_; | |
| 56 } | |
| 57 | |
| 58 void SetDrawOpacityIsAnimating(bool draw_opacity_is_animating) { | |
| 59 draw_opacity_is_animating_ = draw_opacity_is_animating; | |
| 60 } | |
| 61 bool draw_opacity_is_animating() const { return draw_opacity_is_animating_; } | |
| 62 | |
| 63 SkColor GetDebugBorderColor() const; | |
| 64 SkColor GetReplicaDebugBorderColor() const; | |
| 65 | |
| 66 float GetDebugBorderWidth() const; | |
| 67 float GetReplicaDebugBorderWidth() const; | |
| 68 | |
| 69 void SetDrawTransform(const gfx::Transform& draw_transform) { | |
| 70 draw_transform_ = draw_transform; | |
| 71 } | |
| 72 const gfx::Transform& draw_transform() const { return draw_transform_; } | |
| 73 | |
| 74 void SetScreenSpaceTransform(const gfx::Transform& screen_space_transform) { | |
| 75 screen_space_transform_ = screen_space_transform; | |
| 76 } | |
| 77 const gfx::Transform& screen_space_transform() const { | |
| 78 return screen_space_transform_; | |
| 79 } | |
| 80 | |
| 81 void SetReplicaDrawTransform(const gfx::Transform& replica_draw_transform) { | |
| 82 replica_draw_transform_ = replica_draw_transform; | |
| 83 } | |
| 84 const gfx::Transform& replica_draw_transform() const { | |
| 85 return replica_draw_transform_; | |
| 86 } | |
| 87 | |
| 88 void SetReplicaScreenSpaceTransform( | |
| 89 const gfx::Transform& replica_screen_space_transform) { | |
| 90 replica_screen_space_transform_ = replica_screen_space_transform; | |
| 91 } | |
| 92 const gfx::Transform& replica_screen_space_transform() const { | |
| 93 return replica_screen_space_transform_; | |
| 94 } | |
| 95 | |
| 96 void SetTargetSurfaceTransformsAreAnimating(bool animating) { | |
| 97 target_surface_transforms_are_animating_ = animating; | |
| 98 } | |
| 99 bool target_surface_transforms_are_animating() const { | |
| 100 return target_surface_transforms_are_animating_; | |
| 101 } | |
| 102 void SetScreenSpaceTransformsAreAnimating(bool animating) { | |
| 103 screen_space_transforms_are_animating_ = animating; | |
| 104 } | |
| 105 bool screen_space_transforms_are_animating() const { | |
| 106 return screen_space_transforms_are_animating_; | |
| 107 } | |
| 108 | |
| 109 void SetIsClipped(bool is_clipped) { is_clipped_ = is_clipped; } | |
| 110 bool is_clipped() const { return is_clipped_; } | |
| 111 | |
| 112 void SetClipRect(const gfx::Rect& clip_rect); | |
| 113 gfx::Rect clip_rect() const { return clip_rect_; } | |
| 114 | |
| 115 // When false, the RenderSurface does not contribute to another target | |
| 116 // RenderSurface that is being drawn for the current frame. It could still be | |
| 117 // drawn to as a target, but its output will not be a part of any other | |
| 118 // surface. | |
| 119 bool contributes_to_drawn_surface() const { | |
| 120 return contributes_to_drawn_surface_; | |
| 121 } | |
| 122 void set_contributes_to_drawn_surface(bool contributes_to_drawn_surface) { | |
| 123 contributes_to_drawn_surface_ = contributes_to_drawn_surface; | |
| 124 } | |
| 125 | |
| 126 void SetContentRect(const gfx::Rect& content_rect); | |
| 127 gfx::Rect content_rect() const { return content_rect_; } | |
| 128 | |
| 129 const Occlusion& occlusion_in_content_space() const { | |
| 130 return occlusion_in_content_space_; | |
| 131 } | |
| 132 void set_occlusion_in_content_space(const Occlusion& occlusion) { | |
| 133 occlusion_in_content_space_ = occlusion; | |
| 134 } | |
| 135 | |
| 136 LayerImplList& layer_list() { return layer_list_; } | |
| 137 void AddContributingDelegatedRenderPassLayer(LayerImpl* layer); | |
| 138 void ClearLayerLists(); | |
| 139 | |
| 140 int OwningLayerId() const; | |
| 141 | |
| 142 void ResetPropertyChangedFlag() { surface_property_changed_ = false; } | |
| 143 bool SurfacePropertyChanged() const; | |
| 144 bool SurfacePropertyChangedOnlyFromDescendant() const; | |
| 145 | |
| 146 DamageTracker* damage_tracker() const { return damage_tracker_.get(); } | |
| 147 | |
| 148 RenderPassId GetRenderPassId(); | |
| 149 | |
| 150 void AppendRenderPasses(RenderPassSink* pass_sink); | |
| 151 void AppendQuads(RenderPass* render_pass, | |
| 152 const gfx::Transform& draw_transform, | |
| 153 const Occlusion& occlusion_in_content_space, | |
| 154 SkColor debug_border_color, | |
| 155 float debug_border_width, | |
| 156 LayerImpl* mask_layer, | |
| 157 AppendQuadsData* append_quads_data, | |
| 158 RenderPassId render_pass_id); | |
| 159 | |
| 160 private: | |
| 161 LayerImpl* owning_layer_; | |
| 162 | |
| 163 // Uses this surface's space. | |
| 164 gfx::Rect content_rect_; | |
| 165 bool surface_property_changed_ : 1; | |
| 166 bool draw_opacity_is_animating_ : 1; | |
| 167 bool target_surface_transforms_are_animating_ : 1; | |
| 168 bool screen_space_transforms_are_animating_ : 1; | |
| 169 | |
| 170 bool is_clipped_ : 1; | |
| 171 bool contributes_to_drawn_surface_ : 1; | |
| 172 | |
| 173 float draw_opacity_; | |
| 174 gfx::Transform draw_transform_; | |
| 175 gfx::Transform screen_space_transform_; | |
| 176 gfx::Transform replica_draw_transform_; | |
| 177 gfx::Transform replica_screen_space_transform_; | |
| 178 | |
| 179 // Uses the space of the surface's target surface. | |
| 180 gfx::Rect clip_rect_; | |
| 181 | |
| 182 LayerImplList layer_list_; | |
| 183 std::vector<DelegatedRendererLayerImpl*> | |
| 184 contributing_delegated_render_pass_layer_list_; | |
| 185 Occlusion occlusion_in_content_space_; | |
| 186 | |
| 187 // The nearest ancestor target surface that will contain the contents of this | |
| 188 // surface, and that ignores outside occlusion. This can point to itself. | |
| 189 RenderSurfaceImpl* nearest_occlusion_immune_ancestor_; | |
| 190 | |
| 191 scoped_ptr<DamageTracker> damage_tracker_; | |
| 192 | |
| 193 // For LayerIteratorActions | |
| 194 int target_render_surface_layer_index_history_; | |
| 195 int current_layer_index_history_; | |
| 196 | |
| 197 friend class LayerIterator<LayerImpl>; | |
| 198 | |
| 199 DISALLOW_COPY_AND_ASSIGN(RenderSurfaceImpl); | |
| 200 }; | |
| 201 | |
| 202 } // namespace cc | |
| 203 #endif // CC_LAYERS_RENDER_SURFACE_IMPL_H_ | |
| OLD | NEW |