Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(417)

Side by Side Diff: chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc

Issue 1836453003: Use a scrollable tab strip on tablets at small widths (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Tiny bit of clean up Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/resource_manager_impl.h" 13 #include "ui/android/resources/resource_manager_impl.h"
14 #include "ui/gfx/transform.h"
14 15
15 namespace chrome { 16 namespace chrome {
16 namespace android { 17 namespace android {
17 18
18 TabStripSceneLayer::TabStripSceneLayer(JNIEnv* env, jobject jobj) 19 TabStripSceneLayer::TabStripSceneLayer(JNIEnv* env, jobject jobj)
19 : SceneLayer(env, jobj), 20 : SceneLayer(env, jobj),
20 tab_strip_layer_(cc::SolidColorLayer::Create()), 21 tab_strip_layer_(cc::SolidColorLayer::Create()),
22 scrollable_strip_layer_(cc::Layer::Create()),
21 new_tab_button_(cc::UIResourceLayer::Create()), 23 new_tab_button_(cc::UIResourceLayer::Create()),
24 left_fade_(cc::UIResourceLayer::Create()),
25 right_fade_(cc::UIResourceLayer::Create()),
22 model_selector_button_(cc::UIResourceLayer::Create()), 26 model_selector_button_(cc::UIResourceLayer::Create()),
23 background_tab_brightness_(1.f), 27 background_tab_brightness_(1.f),
24 brightness_(1.f), 28 brightness_(1.f),
25 write_index_(0), 29 write_index_(0),
26 content_tree_(nullptr) { 30 content_tree_(nullptr) {
27 new_tab_button_->SetIsDrawable(true); 31 new_tab_button_->SetIsDrawable(true);
28 model_selector_button_->SetIsDrawable(true); 32 model_selector_button_->SetIsDrawable(true);
33 left_fade_->SetIsDrawable(true);
34 right_fade_->SetIsDrawable(true);
35
36 // When the ScrollingStripStacker is used, the new tab button and tabs scroll,
37 // while the incognito button and left/ride fade stay fixed. Put the new tab
38 // button and tabs in a separate layer placed visually below the others.
39 scrollable_strip_layer_->SetIsDrawable(true);
40 scrollable_strip_layer_->AddChild(new_tab_button_);
41
29 tab_strip_layer_->SetBackgroundColor(SK_ColorBLACK); 42 tab_strip_layer_->SetBackgroundColor(SK_ColorBLACK);
30 tab_strip_layer_->SetIsDrawable(true); 43 tab_strip_layer_->SetIsDrawable(true);
31 tab_strip_layer_->AddChild(new_tab_button_); 44 tab_strip_layer_->AddChild(scrollable_strip_layer_);
45 tab_strip_layer_->AddChild(left_fade_);
46 tab_strip_layer_->AddChild(right_fade_);
32 tab_strip_layer_->AddChild(model_selector_button_); 47 tab_strip_layer_->AddChild(model_selector_button_);
33 layer()->AddChild(tab_strip_layer_); 48 layer()->AddChild(tab_strip_layer_);
34 } 49 }
35 50
36 TabStripSceneLayer::~TabStripSceneLayer() { 51 TabStripSceneLayer::~TabStripSceneLayer() {
37 } 52 }
38 53
39 void TabStripSceneLayer::SetContentTree( 54 void TabStripSceneLayer::SetContentTree(
40 JNIEnv* env, 55 JNIEnv* env,
41 const JavaParamRef<jobject>& jobj, 56 const JavaParamRef<jobject>& jobj,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 jfloat width, 98 jfloat width,
84 jfloat height, 99 jfloat height,
85 jfloat y_offset, 100 jfloat y_offset,
86 jfloat background_tab_brightness, 101 jfloat background_tab_brightness,
87 jfloat brightness, 102 jfloat brightness,
88 jboolean should_readd_background) { 103 jboolean should_readd_background) {
89 background_tab_brightness_ = background_tab_brightness; 104 background_tab_brightness_ = background_tab_brightness;
90 gfx::RectF content(0, y_offset, width, height); 105 gfx::RectF content(0, y_offset, width, height);
91 layer()->SetPosition(gfx::PointF(0, y_offset)); 106 layer()->SetPosition(gfx::PointF(0, y_offset));
92 tab_strip_layer_->SetBounds(gfx::Size(width, height)); 107 tab_strip_layer_->SetBounds(gfx::Size(width, height));
108 scrollable_strip_layer_->SetBounds(gfx::Size(width, height));
93 109
94 if (brightness != brightness_) { 110 if (brightness != brightness_) {
95 brightness_ = brightness; 111 brightness_ = brightness;
96 cc::FilterOperations filters; 112 cc::FilterOperations filters;
97 if (brightness_ < 1.f) 113 if (brightness_ < 1.f)
98 filters.Append(cc::FilterOperation::CreateBrightnessFilter(brightness_)); 114 filters.Append(cc::FilterOperation::CreateBrightnessFilter(brightness_));
99 tab_strip_layer_->SetFilters(filters); 115 tab_strip_layer_->SetFilters(filters);
100 } 116 }
101 117
102 // Content tree should not be affected by tab strip scene layer visibility. 118 // Content tree should not be affected by tab strip scene layer visibility.
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 177
162 model_selector_button_->SetUIResourceId(button_resource->ui_resource->id()); 178 model_selector_button_->SetUIResourceId(button_resource->ui_resource->id());
163 float left_offset = (width - button_resource->size.width()) / 2; 179 float left_offset = (width - button_resource->size.width()) / 2;
164 float top_offset = (height - button_resource->size.height()) / 2; 180 float top_offset = (height - button_resource->size.height()) / 2;
165 model_selector_button_->SetPosition( 181 model_selector_button_->SetPosition(
166 gfx::PointF(x + left_offset, y + top_offset)); 182 gfx::PointF(x + left_offset, y + top_offset));
167 model_selector_button_->SetBounds(button_resource->size); 183 model_selector_button_->SetBounds(button_resource->size);
168 model_selector_button_->SetHideLayerAndSubtree(!visible); 184 model_selector_button_->SetHideLayerAndSubtree(!visible);
169 } 185 }
170 186
187 void TabStripSceneLayer::UpdateTabStripLeftFade(
188 JNIEnv* env,
189 const JavaParamRef<jobject>& jobj,
190 jint resource_id,
191 jfloat opacity,
192 const JavaParamRef<jobject>& jresource_manager) {
193
194 // Hide layer if it's not visible.
195 if (opacity == 0.f) {
196 left_fade_->SetHideLayerAndSubtree(true);
197 return;
198 }
199
200 // Set UI resource.
201 ui::ResourceManager* resource_manager =
202 ui::ResourceManagerImpl::FromJavaObject(jresource_manager);
203 ui::ResourceManager::Resource* fade_resource =
204 resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC,
205 resource_id);
206 left_fade_->SetUIResourceId(fade_resource->ui_resource->id());
207
208 // The same resource is used for both left and right fade, so the
209 // resource must be rotated for the left fade.
210 gfx::Transform fade_transform;
211 fade_transform.RotateAboutYAxis(180.0);
212 left_fade_->SetTransform(fade_transform);
213
214 // Set opacity.
215 left_fade_->SetOpacity(opacity);
216
217 // Set bounds. Use the parent layer height so the 1px fade resource is
218 // stretched vertically.
219 left_fade_->SetBounds(gfx::Size(fade_resource->size.width(),
220 scrollable_strip_layer_->bounds().height()));
221
222 // Set position. The rotation set above requires the layer to be offset
223 // by its width in order to display on the left edge.
224 left_fade_->SetPosition(gfx::PointF(fade_resource->size.width(), 0));
225
226 // Ensure layer is visible.
227 left_fade_->SetHideLayerAndSubtree(false);
228 }
229
230 void TabStripSceneLayer::UpdateTabStripRightFade(
231 JNIEnv* env,
232 const JavaParamRef<jobject>& jobj,
233 jint resource_id,
234 jfloat opacity,
235 const JavaParamRef<jobject>& jresource_manager) {
236
237 // Hide layer if it's not visible.
238 if (opacity == 0.f) {
239 right_fade_->SetHideLayerAndSubtree(true);
240 return;
241 }
242
243 // Set UI resource.
244 ui::ResourceManager* resource_manager =
245 ui::ResourceManagerImpl::FromJavaObject(jresource_manager);
246 ui::ResourceManager::Resource* fade_resource =
247 resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC,
248 resource_id);
249 right_fade_->SetUIResourceId(fade_resource->ui_resource->id());
250
251 // Set opacity.
252 right_fade_->SetOpacity(opacity);
253
254 // Set bounds. Use the parent layer height so the 1px fade resource is
255 // stretched vertically.
256 right_fade_->SetBounds(gfx::Size(
257 fade_resource->size.width(),
258 scrollable_strip_layer_->bounds().height()));
259
260 // Set position. The right fade is positioned at the end of the tab strip.
261 float x =
262 scrollable_strip_layer_->bounds().width() - fade_resource->size.width();
263 right_fade_->SetPosition(gfx::PointF(x, 0));
264
265 // Ensure layer is visible.
266 right_fade_->SetHideLayerAndSubtree(false);
267 }
268
171 void TabStripSceneLayer::PutStripTabLayer( 269 void TabStripSceneLayer::PutStripTabLayer(
172 JNIEnv* env, 270 JNIEnv* env,
173 const JavaParamRef<jobject>& jobj, 271 const JavaParamRef<jobject>& jobj,
174 jint id, 272 jint id,
175 jint close_resource_id, 273 jint close_resource_id,
176 jint handle_resource_id, 274 jint handle_resource_id,
177 jboolean foreground, 275 jboolean foreground,
178 jboolean close_pressed, 276 jboolean close_pressed,
179 jfloat toolbar_width, 277 jfloat toolbar_width,
180 jfloat x, 278 jfloat x,
(...skipping 26 matching lines...) Expand all
207 } 305 }
208 306
209 scoped_refptr<TabHandleLayer> TabStripSceneLayer::GetNextLayer( 307 scoped_refptr<TabHandleLayer> TabStripSceneLayer::GetNextLayer(
210 LayerTitleCache* layer_title_cache) { 308 LayerTitleCache* layer_title_cache) {
211 if (write_index_ < tab_handle_layers_.size()) 309 if (write_index_ < tab_handle_layers_.size())
212 return tab_handle_layers_[write_index_++]; 310 return tab_handle_layers_[write_index_++];
213 311
214 scoped_refptr<TabHandleLayer> layer_tree = 312 scoped_refptr<TabHandleLayer> layer_tree =
215 TabHandleLayer::Create(layer_title_cache); 313 TabHandleLayer::Create(layer_title_cache);
216 tab_handle_layers_.push_back(layer_tree); 314 tab_handle_layers_.push_back(layer_tree);
217 tab_strip_layer_->AddChild(layer_tree->layer()); 315 scrollable_strip_layer_->AddChild(layer_tree->layer());
218 write_index_++; 316 write_index_++;
219 return layer_tree; 317 return layer_tree;
220 } 318 }
221 319
222 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& jobj) { 320 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& jobj) {
223 // This will automatically bind to the Java object and pass ownership there. 321 // This will automatically bind to the Java object and pass ownership there.
224 TabStripSceneLayer* scene_layer = new TabStripSceneLayer(env, jobj); 322 TabStripSceneLayer* scene_layer = new TabStripSceneLayer(env, jobj);
225 return reinterpret_cast<intptr_t>(scene_layer); 323 return reinterpret_cast<intptr_t>(scene_layer);
226 } 324 }
227 325
228 bool RegisterTabStripSceneLayer(JNIEnv* env) { 326 bool RegisterTabStripSceneLayer(JNIEnv* env) {
229 return RegisterNativesImpl(env); 327 return RegisterNativesImpl(env);
230 } 328 }
231 329
232 } // namespace android 330 } // namespace android
233 } // namespace chrome 331 } // namespace chrome
OLDNEW
« no previous file with comments | « chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698