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