OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 #include "cc/layers/scrollbar_layer_impl.h" | 5 #include "cc/layers/scrollbar_layer_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "cc/animation/scrollbar_animation_controller.h" | 9 #include "cc/animation/scrollbar_animation_controller.h" |
10 #include "cc/layers/layer.h" | 10 #include "cc/layers/layer.h" |
(...skipping 13 matching lines...) Expand all Loading... |
24 return make_scoped_ptr(new ScrollbarLayerImpl(tree_impl, | 24 return make_scoped_ptr(new ScrollbarLayerImpl(tree_impl, |
25 id, | 25 id, |
26 orientation)); | 26 orientation)); |
27 } | 27 } |
28 | 28 |
29 ScrollbarLayerImpl::ScrollbarLayerImpl( | 29 ScrollbarLayerImpl::ScrollbarLayerImpl( |
30 LayerTreeImpl* tree_impl, | 30 LayerTreeImpl* tree_impl, |
31 int id, | 31 int id, |
32 ScrollbarOrientation orientation) | 32 ScrollbarOrientation orientation) |
33 : LayerImpl(tree_impl, id), | 33 : LayerImpl(tree_impl, id), |
34 track_ui_resource_id_(0), | 34 track_resource_id_(0), |
35 thumb_ui_resource_id_(0), | 35 thumb_resource_id_(0), |
36 current_pos_(0.f), | 36 current_pos_(0.f), |
37 maximum_(0), | 37 maximum_(0), |
38 thumb_thickness_(0), | 38 thumb_thickness_(0), |
39 thumb_length_(0), | 39 thumb_length_(0), |
40 track_start_(0), | 40 track_start_(0), |
41 track_length_(0), | 41 track_length_(0), |
42 orientation_(orientation), | 42 orientation_(orientation), |
43 vertical_adjust_(0.f), | 43 vertical_adjust_(0.f), |
44 visible_to_total_length_ratio_(1.f), | 44 visible_to_total_length_ratio_(1.f), |
45 scroll_layer_id_(Layer::INVALID_ID), | 45 scroll_layer_id_(Layer::INVALID_ID), |
(...skipping 16 matching lines...) Expand all Loading... |
62 LayerImpl::PushPropertiesTo(layer); | 62 LayerImpl::PushPropertiesTo(layer); |
63 | 63 |
64 ScrollbarLayerImpl* scrollbar_layer = static_cast<ScrollbarLayerImpl*>(layer); | 64 ScrollbarLayerImpl* scrollbar_layer = static_cast<ScrollbarLayerImpl*>(layer); |
65 | 65 |
66 scrollbar_layer->set_thumb_thickness(thumb_thickness_); | 66 scrollbar_layer->set_thumb_thickness(thumb_thickness_); |
67 scrollbar_layer->set_thumb_length(thumb_length_); | 67 scrollbar_layer->set_thumb_length(thumb_length_); |
68 scrollbar_layer->set_track_start(track_start_); | 68 scrollbar_layer->set_track_start(track_start_); |
69 scrollbar_layer->set_track_length(track_length_); | 69 scrollbar_layer->set_track_length(track_length_); |
70 scrollbar_layer->set_is_overlay_scrollbar(is_overlay_scrollbar_); | 70 scrollbar_layer->set_is_overlay_scrollbar(is_overlay_scrollbar_); |
71 | 71 |
72 scrollbar_layer->set_track_ui_resource_id(track_ui_resource_id_); | 72 scrollbar_layer->set_track_resource_id(track_resource_id_); |
73 scrollbar_layer->set_thumb_ui_resource_id(thumb_ui_resource_id_); | 73 scrollbar_layer->set_thumb_resource_id(thumb_resource_id_); |
74 } | 74 } |
75 | 75 |
76 bool ScrollbarLayerImpl::WillDraw(DrawMode draw_mode, | 76 bool ScrollbarLayerImpl::WillDraw(DrawMode draw_mode, |
77 ResourceProvider* resource_provider) { | 77 ResourceProvider* resource_provider) { |
78 if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE && | 78 if (draw_mode == DRAW_MODE_RESOURCELESS_SOFTWARE && |
79 !layer_tree_impl()->settings().solid_color_scrollbars) | 79 !layer_tree_impl()->settings().solid_color_scrollbars) |
80 return false; | 80 return false; |
81 return LayerImpl::WillDraw(draw_mode, resource_provider); | 81 return LayerImpl::WillDraw(draw_mode, resource_provider); |
82 } | 82 } |
83 | 83 |
(...skipping 15 matching lines...) Expand all Loading... |
99 if (layer_tree_impl()->settings().solid_color_scrollbars) { | 99 if (layer_tree_impl()->settings().solid_color_scrollbars) { |
100 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); | 100 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); |
101 quad->SetNew(shared_quad_state, | 101 quad->SetNew(shared_quad_state, |
102 thumb_quad_rect, | 102 thumb_quad_rect, |
103 layer_tree_impl()->settings().solid_color_scrollbar_color, | 103 layer_tree_impl()->settings().solid_color_scrollbar_color, |
104 false); | 104 false); |
105 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data); | 105 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data); |
106 return; | 106 return; |
107 } | 107 } |
108 | 108 |
109 ResourceProvider::ResourceId thumb_resource_id = | 109 if (thumb_resource_id_ && !thumb_quad_rect.IsEmpty()) { |
110 layer_tree_impl()->ResourceIdForUIResource(thumb_ui_resource_id_); | |
111 ResourceProvider::ResourceId track_resource_id = | |
112 layer_tree_impl()->ResourceIdForUIResource(track_ui_resource_id_); | |
113 | |
114 if (thumb_resource_id && !thumb_quad_rect.IsEmpty()) { | |
115 gfx::Rect opaque_rect; | 110 gfx::Rect opaque_rect; |
116 const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; | 111 const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; |
117 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create(); | 112 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create(); |
118 quad->SetNew(shared_quad_state, | 113 quad->SetNew(shared_quad_state, |
119 thumb_quad_rect, | 114 thumb_quad_rect, |
120 opaque_rect, | 115 opaque_rect, |
121 thumb_resource_id, | 116 thumb_resource_id_, |
122 premultipled_alpha, | 117 premultipled_alpha, |
123 uv_top_left, | 118 uv_top_left, |
124 uv_bottom_right, | 119 uv_bottom_right, |
125 SK_ColorTRANSPARENT, | 120 SK_ColorTRANSPARENT, |
126 opacity, | 121 opacity, |
127 flipped); | 122 flipped); |
128 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data); | 123 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data); |
129 } | 124 } |
130 | 125 |
131 gfx::Rect track_quad_rect = content_bounds_rect; | 126 if (!track_resource_id_) |
132 if (track_resource_id && !track_quad_rect.IsEmpty()) { | 127 return; |
133 gfx::Rect opaque_rect(contents_opaque() ? track_quad_rect : gfx::Rect()); | 128 |
| 129 // Order matters here: since the back track texture is being drawn to the |
| 130 // entire contents rect, we must append it after the thumb and fore track |
| 131 // quads. The back track texture contains (and displays) the buttons. |
| 132 if (!content_bounds_rect.IsEmpty()) { |
| 133 gfx::Rect quad_rect(content_bounds_rect); |
| 134 gfx::Rect opaque_rect(contents_opaque() ? quad_rect : gfx::Rect()); |
134 const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; | 135 const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; |
135 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create(); | 136 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create(); |
136 quad->SetNew(shared_quad_state, | 137 quad->SetNew(shared_quad_state, |
137 track_quad_rect, | 138 quad_rect, |
138 opaque_rect, | 139 opaque_rect, |
139 track_resource_id, | 140 track_resource_id_, |
140 premultipled_alpha, | 141 premultipled_alpha, |
141 uv_top_left, | 142 uv_top_left, |
142 uv_bottom_right, | 143 uv_bottom_right, |
143 SK_ColorTRANSPARENT, | 144 SK_ColorTRANSPARENT, |
144 opacity, | 145 opacity, |
145 flipped); | 146 flipped); |
146 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data); | 147 quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data); |
147 } | 148 } |
148 } | 149 } |
149 | 150 |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 thumb_rect = gfx::RectF(thumb_offset, vertical_adjust_, | 254 thumb_rect = gfx::RectF(thumb_offset, vertical_adjust_, |
254 thumb_length, thumb_thickness_); | 255 thumb_length, thumb_thickness_); |
255 } else { | 256 } else { |
256 thumb_rect = gfx::RectF(0.f, thumb_offset, | 257 thumb_rect = gfx::RectF(0.f, thumb_offset, |
257 thumb_thickness_, thumb_length); | 258 thumb_thickness_, thumb_length); |
258 } | 259 } |
259 | 260 |
260 return ScrollbarLayerRectToContentRect(thumb_rect); | 261 return ScrollbarLayerRectToContentRect(thumb_rect); |
261 } | 262 } |
262 | 263 |
| 264 void ScrollbarLayerImpl::DidLoseOutputSurface() { |
| 265 track_resource_id_ = 0; |
| 266 thumb_resource_id_ = 0; |
| 267 } |
| 268 |
263 const char* ScrollbarLayerImpl::LayerTypeAsString() const { | 269 const char* ScrollbarLayerImpl::LayerTypeAsString() const { |
264 return "cc::ScrollbarLayerImpl"; | 270 return "cc::ScrollbarLayerImpl"; |
265 } | 271 } |
266 | 272 |
267 } // namespace cc | 273 } // namespace cc |
OLD | NEW |