OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.h" | 5 #include "chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.h" |
6 | 6 |
7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
8 #include "cc/resources/scoped_ui_resource.h" | 8 #include "cc/resources/scoped_ui_resource.h" |
9 #include "chrome/browser/android/compositor/layer/tab_handle_layer.h" | 9 #include "chrome/browser/android/compositor/layer/tab_handle_layer.h" |
10 #include "chrome/browser/android/compositor/layer_title_cache.h" | 10 #include "chrome/browser/android/compositor/layer_title_cache.h" |
11 #include "content/public/browser/android/compositor.h" | 11 #include "content/public/browser/android/compositor.h" |
12 #include "jni/TabStripSceneLayer_jni.h" | 12 #include "jni/TabStripSceneLayer_jni.h" |
| 13 #include "ui/android/resources/nine_patch_resource.h" |
13 #include "ui/android/resources/resource_manager_impl.h" | 14 #include "ui/android/resources/resource_manager_impl.h" |
14 #include "ui/gfx/transform.h" | 15 #include "ui/gfx/transform.h" |
15 | 16 |
16 using base::android::JavaParamRef; | 17 using base::android::JavaParamRef; |
17 | 18 |
18 namespace android { | 19 namespace android { |
19 | 20 |
20 TabStripSceneLayer::TabStripSceneLayer(JNIEnv* env, jobject jobj) | 21 TabStripSceneLayer::TabStripSceneLayer(JNIEnv* env, jobject jobj) |
21 : SceneLayer(env, jobj), | 22 : SceneLayer(env, jobj), |
22 tab_strip_layer_(cc::SolidColorLayer::Create()), | 23 tab_strip_layer_(cc::SolidColorLayer::Create()), |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 const JavaParamRef<jobject>& jobj, | 141 const JavaParamRef<jobject>& jobj, |
141 jint resource_id, | 142 jint resource_id, |
142 jfloat x, | 143 jfloat x, |
143 jfloat y, | 144 jfloat y, |
144 jfloat width, | 145 jfloat width, |
145 jfloat height, | 146 jfloat height, |
146 jboolean visible, | 147 jboolean visible, |
147 const JavaParamRef<jobject>& jresource_manager) { | 148 const JavaParamRef<jobject>& jresource_manager) { |
148 ui::ResourceManager* resource_manager = | 149 ui::ResourceManager* resource_manager = |
149 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); | 150 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); |
150 ui::ResourceManager::Resource* button_resource = | 151 ui::Resource* button_resource = resource_manager->GetResource( |
151 resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 152 ui::ANDROID_RESOURCE_TYPE_STATIC, resource_id); |
152 resource_id); | |
153 | 153 |
154 new_tab_button_->SetUIResourceId(button_resource->ui_resource->id()); | 154 new_tab_button_->SetUIResourceId(button_resource->ui_resource()->id()); |
155 float left_offset = (width - button_resource->size.width()) / 2; | 155 float left_offset = (width - button_resource->size().width()) / 2; |
156 float top_offset = (height - button_resource->size.height()) / 2; | 156 float top_offset = (height - button_resource->size().height()) / 2; |
157 new_tab_button_->SetPosition(gfx::PointF(x + left_offset, y + top_offset)); | 157 new_tab_button_->SetPosition(gfx::PointF(x + left_offset, y + top_offset)); |
158 new_tab_button_->SetBounds(button_resource->size); | 158 new_tab_button_->SetBounds(button_resource->size()); |
159 new_tab_button_->SetHideLayerAndSubtree(!visible); | 159 new_tab_button_->SetHideLayerAndSubtree(!visible); |
160 } | 160 } |
161 | 161 |
162 void TabStripSceneLayer::UpdateModelSelectorButton( | 162 void TabStripSceneLayer::UpdateModelSelectorButton( |
163 JNIEnv* env, | 163 JNIEnv* env, |
164 const JavaParamRef<jobject>& jobj, | 164 const JavaParamRef<jobject>& jobj, |
165 jint resource_id, | 165 jint resource_id, |
166 jfloat x, | 166 jfloat x, |
167 jfloat y, | 167 jfloat y, |
168 jfloat width, | 168 jfloat width, |
169 jfloat height, | 169 jfloat height, |
170 jboolean incognito, | 170 jboolean incognito, |
171 jboolean visible, | 171 jboolean visible, |
172 const JavaParamRef<jobject>& jresource_manager) { | 172 const JavaParamRef<jobject>& jresource_manager) { |
173 ui::ResourceManager* resource_manager = | 173 ui::ResourceManager* resource_manager = |
174 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); | 174 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); |
175 ui::ResourceManager::Resource* button_resource = | 175 ui::Resource* button_resource = resource_manager->GetResource( |
176 resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 176 ui::ANDROID_RESOURCE_TYPE_STATIC, resource_id); |
177 resource_id); | |
178 | 177 |
179 model_selector_button_->SetUIResourceId(button_resource->ui_resource->id()); | 178 model_selector_button_->SetUIResourceId(button_resource->ui_resource()->id()); |
180 float left_offset = (width - button_resource->size.width()) / 2; | 179 float left_offset = (width - button_resource->size().width()) / 2; |
181 float top_offset = (height - button_resource->size.height()) / 2; | 180 float top_offset = (height - button_resource->size().height()) / 2; |
182 model_selector_button_->SetPosition( | 181 model_selector_button_->SetPosition( |
183 gfx::PointF(x + left_offset, y + top_offset)); | 182 gfx::PointF(x + left_offset, y + top_offset)); |
184 model_selector_button_->SetBounds(button_resource->size); | 183 model_selector_button_->SetBounds(button_resource->size()); |
185 model_selector_button_->SetHideLayerAndSubtree(!visible); | 184 model_selector_button_->SetHideLayerAndSubtree(!visible); |
186 } | 185 } |
187 | 186 |
188 void TabStripSceneLayer::UpdateTabStripLeftFade( | 187 void TabStripSceneLayer::UpdateTabStripLeftFade( |
189 JNIEnv* env, | 188 JNIEnv* env, |
190 const JavaParamRef<jobject>& jobj, | 189 const JavaParamRef<jobject>& jobj, |
191 jint resource_id, | 190 jint resource_id, |
192 jfloat opacity, | 191 jfloat opacity, |
193 const JavaParamRef<jobject>& jresource_manager) { | 192 const JavaParamRef<jobject>& jresource_manager) { |
194 | 193 |
195 // Hide layer if it's not visible. | 194 // Hide layer if it's not visible. |
196 if (opacity == 0.f) { | 195 if (opacity == 0.f) { |
197 left_fade_->SetHideLayerAndSubtree(true); | 196 left_fade_->SetHideLayerAndSubtree(true); |
198 return; | 197 return; |
199 } | 198 } |
200 | 199 |
201 // Set UI resource. | 200 // Set UI resource. |
202 ui::ResourceManager* resource_manager = | 201 ui::ResourceManager* resource_manager = |
203 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); | 202 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); |
204 ui::ResourceManager::Resource* fade_resource = | 203 ui::Resource* fade_resource = resource_manager->GetResource( |
205 resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 204 ui::ANDROID_RESOURCE_TYPE_STATIC, resource_id); |
206 resource_id); | 205 left_fade_->SetUIResourceId(fade_resource->ui_resource()->id()); |
207 left_fade_->SetUIResourceId(fade_resource->ui_resource->id()); | |
208 | 206 |
209 // The same resource is used for both left and right fade, so the | 207 // The same resource is used for both left and right fade, so the |
210 // resource must be rotated for the left fade. | 208 // resource must be rotated for the left fade. |
211 gfx::Transform fade_transform; | 209 gfx::Transform fade_transform; |
212 fade_transform.RotateAboutYAxis(180.0); | 210 fade_transform.RotateAboutYAxis(180.0); |
213 left_fade_->SetTransform(fade_transform); | 211 left_fade_->SetTransform(fade_transform); |
214 | 212 |
215 // Set opacity. | 213 // Set opacity. |
216 left_fade_->SetOpacity(opacity); | 214 left_fade_->SetOpacity(opacity); |
217 | 215 |
218 // Set bounds. Use the parent layer height so the 1px fade resource is | 216 // Set bounds. Use the parent layer height so the 1px fade resource is |
219 // stretched vertically. | 217 // stretched vertically. |
220 left_fade_->SetBounds(gfx::Size(fade_resource->size.width(), | 218 left_fade_->SetBounds(gfx::Size(fade_resource->size().width(), |
221 scrollable_strip_layer_->bounds().height())); | 219 scrollable_strip_layer_->bounds().height())); |
222 | 220 |
223 // Set position. The rotation set above requires the layer to be offset | 221 // Set position. The rotation set above requires the layer to be offset |
224 // by its width in order to display on the left edge. | 222 // by its width in order to display on the left edge. |
225 left_fade_->SetPosition(gfx::PointF(fade_resource->size.width(), 0)); | 223 left_fade_->SetPosition(gfx::PointF(fade_resource->size().width(), 0)); |
226 | 224 |
227 // Ensure layer is visible. | 225 // Ensure layer is visible. |
228 left_fade_->SetHideLayerAndSubtree(false); | 226 left_fade_->SetHideLayerAndSubtree(false); |
229 } | 227 } |
230 | 228 |
231 void TabStripSceneLayer::UpdateTabStripRightFade( | 229 void TabStripSceneLayer::UpdateTabStripRightFade( |
232 JNIEnv* env, | 230 JNIEnv* env, |
233 const JavaParamRef<jobject>& jobj, | 231 const JavaParamRef<jobject>& jobj, |
234 jint resource_id, | 232 jint resource_id, |
235 jfloat opacity, | 233 jfloat opacity, |
236 const JavaParamRef<jobject>& jresource_manager) { | 234 const JavaParamRef<jobject>& jresource_manager) { |
237 | 235 |
238 // Hide layer if it's not visible. | 236 // Hide layer if it's not visible. |
239 if (opacity == 0.f) { | 237 if (opacity == 0.f) { |
240 right_fade_->SetHideLayerAndSubtree(true); | 238 right_fade_->SetHideLayerAndSubtree(true); |
241 return; | 239 return; |
242 } | 240 } |
243 | 241 |
244 // Set UI resource. | 242 // Set UI resource. |
245 ui::ResourceManager* resource_manager = | 243 ui::ResourceManager* resource_manager = |
246 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); | 244 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); |
247 ui::ResourceManager::Resource* fade_resource = | 245 ui::Resource* fade_resource = resource_manager->GetResource( |
248 resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 246 ui::ANDROID_RESOURCE_TYPE_STATIC, resource_id); |
249 resource_id); | 247 right_fade_->SetUIResourceId(fade_resource->ui_resource()->id()); |
250 right_fade_->SetUIResourceId(fade_resource->ui_resource->id()); | |
251 | 248 |
252 // Set opacity. | 249 // Set opacity. |
253 right_fade_->SetOpacity(opacity); | 250 right_fade_->SetOpacity(opacity); |
254 | 251 |
255 // Set bounds. Use the parent layer height so the 1px fade resource is | 252 // Set bounds. Use the parent layer height so the 1px fade resource is |
256 // stretched vertically. | 253 // stretched vertically. |
257 right_fade_->SetBounds(gfx::Size( | 254 right_fade_->SetBounds(gfx::Size(fade_resource->size().width(), |
258 fade_resource->size.width(), | 255 scrollable_strip_layer_->bounds().height())); |
259 scrollable_strip_layer_->bounds().height())); | |
260 | 256 |
261 // Set position. The right fade is positioned at the end of the tab strip. | 257 // Set position. The right fade is positioned at the end of the tab strip. |
262 float x = | 258 float x = |
263 scrollable_strip_layer_->bounds().width() - fade_resource->size.width(); | 259 scrollable_strip_layer_->bounds().width() - fade_resource->size().width(); |
264 right_fade_->SetPosition(gfx::PointF(x, 0)); | 260 right_fade_->SetPosition(gfx::PointF(x, 0)); |
265 | 261 |
266 // Ensure layer is visible. | 262 // Ensure layer is visible. |
267 right_fade_->SetHideLayerAndSubtree(false); | 263 right_fade_->SetHideLayerAndSubtree(false); |
268 } | 264 } |
269 | 265 |
270 void TabStripSceneLayer::PutStripTabLayer( | 266 void TabStripSceneLayer::PutStripTabLayer( |
271 JNIEnv* env, | 267 JNIEnv* env, |
272 const JavaParamRef<jobject>& jobj, | 268 const JavaParamRef<jobject>& jobj, |
273 jint id, | 269 jint id, |
(...skipping 11 matching lines...) Expand all Loading... |
285 jboolean is_loading, | 281 jboolean is_loading, |
286 jfloat spinner_rotation, | 282 jfloat spinner_rotation, |
287 jfloat border_opacity, | 283 jfloat border_opacity, |
288 const JavaParamRef<jobject>& jlayer_title_cache, | 284 const JavaParamRef<jobject>& jlayer_title_cache, |
289 const JavaParamRef<jobject>& jresource_manager) { | 285 const JavaParamRef<jobject>& jresource_manager) { |
290 LayerTitleCache* layer_title_cache = | 286 LayerTitleCache* layer_title_cache = |
291 LayerTitleCache::FromJavaObject(jlayer_title_cache); | 287 LayerTitleCache::FromJavaObject(jlayer_title_cache); |
292 ui::ResourceManager* resource_manager = | 288 ui::ResourceManager* resource_manager = |
293 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); | 289 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); |
294 scoped_refptr<TabHandleLayer> layer = GetNextLayer(layer_title_cache); | 290 scoped_refptr<TabHandleLayer> layer = GetNextLayer(layer_title_cache); |
295 ui::ResourceManager::Resource* tab_handle_resource = | 291 ui::NinePatchResource* tab_handle_resource = |
296 resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 292 ui::NinePatchResource::From(resource_manager->GetResource( |
297 handle_resource_id); | 293 ui::ANDROID_RESOURCE_TYPE_STATIC, handle_resource_id)); |
298 ui::ResourceManager::Resource* close_button_resource = | 294 ui::Resource* close_button_resource = resource_manager->GetResource( |
299 resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 295 ui::ANDROID_RESOURCE_TYPE_STATIC, close_resource_id); |
300 close_resource_id); | |
301 layer->SetProperties(id, close_button_resource, tab_handle_resource, | 296 layer->SetProperties(id, close_button_resource, tab_handle_resource, |
302 foreground, close_pressed, toolbar_width, x, y, width, | 297 foreground, close_pressed, toolbar_width, x, y, width, |
303 height, content_offset_x, close_button_alpha, is_loading, | 298 height, content_offset_x, close_button_alpha, is_loading, |
304 spinner_rotation, background_tab_brightness_, | 299 spinner_rotation, background_tab_brightness_, |
305 border_opacity); | 300 border_opacity); |
306 } | 301 } |
307 | 302 |
308 scoped_refptr<TabHandleLayer> TabStripSceneLayer::GetNextLayer( | 303 scoped_refptr<TabHandleLayer> TabStripSceneLayer::GetNextLayer( |
309 LayerTitleCache* layer_title_cache) { | 304 LayerTitleCache* layer_title_cache) { |
310 if (write_index_ < tab_handle_layers_.size()) | 305 if (write_index_ < tab_handle_layers_.size()) |
(...skipping 23 matching lines...) Expand all Loading... |
334 // This will automatically bind to the Java object and pass ownership there. | 329 // This will automatically bind to the Java object and pass ownership there. |
335 TabStripSceneLayer* scene_layer = new TabStripSceneLayer(env, jobj); | 330 TabStripSceneLayer* scene_layer = new TabStripSceneLayer(env, jobj); |
336 return reinterpret_cast<intptr_t>(scene_layer); | 331 return reinterpret_cast<intptr_t>(scene_layer); |
337 } | 332 } |
338 | 333 |
339 bool RegisterTabStripSceneLayer(JNIEnv* env) { | 334 bool RegisterTabStripSceneLayer(JNIEnv* env) { |
340 return RegisterNativesImpl(env); | 335 return RegisterNativesImpl(env); |
341 } | 336 } |
342 | 337 |
343 } // namespace android | 338 } // namespace android |
OLD | NEW |