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

Side by Side Diff: chrome/browser/android/compositor/layer/overlay_panel_layer.cc

Issue 2746483003: ui/android: Fix Resource meta-data sharing with ResourceManager. (Closed)
Patch Set: jni Created 3 years, 9 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
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/layer/overlay_panel_layer.h" 5 #include "chrome/browser/android/compositor/layer/overlay_panel_layer.h"
6 6
7 #include "cc/layers/layer.h" 7 #include "cc/layers/layer.h"
8 #include "cc/layers/nine_patch_layer.h" 8 #include "cc/layers/nine_patch_layer.h"
9 #include "cc/layers/solid_color_layer.h" 9 #include "cc/layers/solid_color_layer.h"
10 #include "cc/layers/ui_resource_layer.h" 10 #include "cc/layers/ui_resource_layer.h"
11 #include "cc/resources/scoped_ui_resource.h" 11 #include "cc/resources/scoped_ui_resource.h"
12 #include "content/public/browser/android/compositor.h" 12 #include "content/public/browser/android/compositor.h"
13 #include "third_party/skia/include/core/SkColor.h" 13 #include "third_party/skia/include/core/SkColor.h"
14 #include "ui/android/resources/crushed_sprite_resource.h" 14 #include "ui/android/resources/crushed_sprite_resource.h"
15 #include "ui/android/resources/nine_patch_resource.h"
15 #include "ui/android/resources/resource_manager.h" 16 #include "ui/android/resources/resource_manager.h"
16 #include "ui/base/l10n/l10n_util_android.h" 17 #include "ui/base/l10n/l10n_util_android.h"
17 #include "ui/gfx/color_utils.h" 18 #include "ui/gfx/color_utils.h"
18 19
19 namespace { 20 namespace {
20 21
21 const SkColor kBarBackgroundColor = SkColorSetRGB(0xff, 0xff, 0xff); 22 const SkColor kBarBackgroundColor = SkColorSetRGB(0xff, 0xff, 0xff);
22 const SkColor kBarBorderColor = SkColorSetRGB(0xf1, 0xf1, 0xf1); 23 const SkColor kBarBorderColor = SkColorSetRGB(0xf1, 0xf1, 0xf1);
23 24
24 // This is the default width for any icon displayed on an OverlayPanel. 25 // This is the default width for any icon displayed on an OverlayPanel.
25 const float kDefaultIconWidthDp = 36.0f; 26 const float kDefaultIconWidthDp = 36.0f;
26 27
27 } // namespace 28 } // namespace
28 29
29 namespace android { 30 namespace android {
30 31
31 scoped_refptr<cc::Layer> OverlayPanelLayer::GetIconLayer() { 32 scoped_refptr<cc::Layer> OverlayPanelLayer::GetIconLayer() {
32 ui::ResourceManager::Resource* panel_icon_resource = 33 ui::Resource* panel_icon_resource = resource_manager_->GetResource(
33 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, 34 ui::ANDROID_RESOURCE_TYPE_STATIC, panel_icon_resource_id_);
34 panel_icon_resource_id_);
35 DCHECK(panel_icon_resource); 35 DCHECK(panel_icon_resource);
36 36
37 if (panel_icon_->parent() != layer_) { 37 if (panel_icon_->parent() != layer_) {
38 layer_->AddChild(panel_icon_); 38 layer_->AddChild(panel_icon_);
39 } 39 }
40 40
41 panel_icon_->SetUIResourceId( 41 panel_icon_->SetUIResourceId(panel_icon_resource->ui_resource()->id());
42 panel_icon_resource->ui_resource->id()); 42 panel_icon_->SetBounds(panel_icon_resource->size());
43 panel_icon_->SetBounds(panel_icon_resource->size);
44 43
45 return panel_icon_; 44 return panel_icon_;
46 } 45 }
47 46
48 void OverlayPanelLayer::AddBarTextLayer(scoped_refptr<cc::Layer> text_layer) { 47 void OverlayPanelLayer::AddBarTextLayer(scoped_refptr<cc::Layer> text_layer) {
49 text_container_->AddChild(text_layer); 48 text_container_->AddChild(text_layer);
50 } 49 }
51 50
52 void OverlayPanelLayer::SetResourceIds( 51 void OverlayPanelLayer::SetResourceIds(
53 int bar_text_resource_id, 52 int bar_text_resource_id,
(...skipping 20 matching lines...) Expand all
74 float bar_height, 73 float bar_height,
75 float bar_offset_y, 74 float bar_offset_y,
76 float bar_text_opacity, 75 float bar_text_opacity,
77 bool bar_border_visible, 76 bool bar_border_visible,
78 float bar_border_height, 77 float bar_border_height,
79 bool bar_shadow_visible, 78 bool bar_shadow_visible,
80 float bar_shadow_opacity, 79 float bar_shadow_opacity,
81 float close_icon_opacity) { 80 float close_icon_opacity) {
82 81
83 // Grabs required static resources. 82 // Grabs required static resources.
84 ui::ResourceManager::Resource* panel_shadow_resource = 83 ui::NinePatchResource* panel_shadow_resource =
85 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, 84 ui::NinePatchResource::From(resource_manager_->GetResource(
86 panel_shadow_resource_id_); 85 ui::ANDROID_RESOURCE_TYPE_STATIC, panel_shadow_resource_id_));
87 86
88 DCHECK(panel_shadow_resource); 87 DCHECK(panel_shadow_resource);
89 88
90 // Round values to avoid pixel gap between layers. 89 // Round values to avoid pixel gap between layers.
91 bar_height = floor(bar_height); 90 bar_height = floor(bar_height);
92 91
93 float bar_top = bar_offset_y; 92 float bar_top = bar_offset_y;
94 float bar_bottom = bar_top + bar_height; 93 float bar_bottom = bar_top + bar_height;
95 94
96 bool is_rtl = l10n_util::IsLayoutRtl(); 95 bool is_rtl = l10n_util::IsLayoutRtl();
97 96
98 // --------------------------------------------------------------------------- 97 // ---------------------------------------------------------------------------
99 // Panel Shadow 98 // Panel Shadow
100 // --------------------------------------------------------------------------- 99 // ---------------------------------------------------------------------------
101 gfx::Size shadow_res_size = panel_shadow_resource->size; 100 gfx::Size shadow_res_size = panel_shadow_resource->size();
102 gfx::Rect shadow_res_padding = panel_shadow_resource->padding; 101 gfx::Rect shadow_res_padding = panel_shadow_resource->padding();
103 gfx::Size shadow_bounds( 102 gfx::Size shadow_bounds(
104 panel_width + shadow_res_size.width() 103 panel_width + shadow_res_size.width()
105 - shadow_res_padding.size().width(), 104 - shadow_res_padding.size().width(),
106 panel_height + shadow_res_size.height() 105 panel_height + shadow_res_size.height()
107 - shadow_res_padding.size().height()); 106 - shadow_res_padding.size().height());
108 panel_shadow_->SetUIResourceId(panel_shadow_resource->ui_resource->id()); 107 panel_shadow_->SetUIResourceId(panel_shadow_resource->ui_resource()->id());
109 panel_shadow_->SetBorder(panel_shadow_resource->Border(shadow_bounds)); 108 panel_shadow_->SetBorder(panel_shadow_resource->Border(shadow_bounds));
110 panel_shadow_->SetAperture(panel_shadow_resource->aperture); 109 panel_shadow_->SetAperture(panel_shadow_resource->aperture());
111 panel_shadow_->SetBounds(shadow_bounds); 110 panel_shadow_->SetBounds(shadow_bounds);
112 gfx::PointF shadow_position(-shadow_res_padding.origin().x(), 111 gfx::PointF shadow_position(-shadow_res_padding.origin().x(),
113 -shadow_res_padding.origin().y()); 112 -shadow_res_padding.origin().y());
114 panel_shadow_->SetPosition(shadow_position); 113 panel_shadow_->SetPosition(shadow_position);
115 114
116 // --------------------------------------------------------------------------- 115 // ---------------------------------------------------------------------------
117 // Bar Background 116 // Bar Background
118 // --------------------------------------------------------------------------- 117 // ---------------------------------------------------------------------------
119 gfx::Size background_size(panel_width, bar_height); 118 gfx::Size background_size(panel_width, bar_height);
120 bar_background_->SetBounds(background_size); 119 bar_background_->SetBounds(background_size);
121 bar_background_->SetPosition(gfx::PointF(0.f, bar_top)); 120 bar_background_->SetPosition(gfx::PointF(0.f, bar_top));
122 121
123 // --------------------------------------------------------------------------- 122 // ---------------------------------------------------------------------------
124 // Bar Text 123 // Bar Text
125 // --------------------------------------------------------------------------- 124 // ---------------------------------------------------------------------------
126 ui::ResourceManager::Resource* bar_text_resource = 125 ui::Resource* bar_text_resource = resource_manager_->GetResource(
127 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_DYNAMIC, 126 ui::ANDROID_RESOURCE_TYPE_DYNAMIC, bar_text_resource_id_);
128 bar_text_resource_id_);
129 127
130 if (bar_text_resource) { 128 if (bar_text_resource) {
131 // Centers the text vertically in the Search Bar. 129 // Centers the text vertically in the Search Bar.
132 float bar_padding_top = 130 float bar_padding_top =
133 bar_top + 131 bar_top + bar_height / 2 - bar_text_resource->size().height() / 2;
134 bar_height / 2 - 132 bar_text_->SetUIResourceId(bar_text_resource->ui_resource()->id());
135 bar_text_resource->size.height() / 2; 133 bar_text_->SetBounds(bar_text_resource->size());
136 bar_text_->SetUIResourceId(bar_text_resource->ui_resource->id());
137 bar_text_->SetBounds(bar_text_resource->size);
138 bar_text_->SetPosition(gfx::PointF(0.f, bar_padding_top)); 134 bar_text_->SetPosition(gfx::PointF(0.f, bar_padding_top));
139 bar_text_->SetOpacity(bar_text_opacity); 135 bar_text_->SetOpacity(bar_text_opacity);
140 } 136 }
141 137
142 // --------------------------------------------------------------------------- 138 // ---------------------------------------------------------------------------
143 // Panel Icon 139 // Panel Icon
144 // --------------------------------------------------------------------------- 140 // ---------------------------------------------------------------------------
145 scoped_refptr<cc::Layer> icon_layer = GetIconLayer(); 141 scoped_refptr<cc::Layer> icon_layer = GetIconLayer();
146 if (icon_layer) { 142 if (icon_layer) {
147 // If the icon is not the default width, add or remove padding so it appears 143 // If the icon is not the default width, add or remove padding so it appears
(...skipping 14 matching lines...) Expand all
162 float icon_y = bar_top + bar_height / 2 - 158 float icon_y = bar_top + bar_height / 2 -
163 icon_layer->bounds().height() / 2; 159 icon_layer->bounds().height() / 2;
164 160
165 icon_layer->SetPosition(gfx::PointF(icon_x, icon_y)); 161 icon_layer->SetPosition(gfx::PointF(icon_x, icon_y));
166 } 162 }
167 163
168 // --------------------------------------------------------------------------- 164 // ---------------------------------------------------------------------------
169 // Close Icon 165 // Close Icon
170 // --------------------------------------------------------------------------- 166 // ---------------------------------------------------------------------------
171 // Grab the Close Icon resource. 167 // Grab the Close Icon resource.
172 ui::ResourceManager::Resource* close_icon_resource = 168 ui::Resource* close_icon_resource = resource_manager_->GetResource(
173 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, 169 ui::ANDROID_RESOURCE_TYPE_STATIC, close_icon_resource_id_);
174 close_icon_resource_id_);
175 170
176 // Positions the icon at the end of the bar. 171 // Positions the icon at the end of the bar.
177 float close_icon_left; 172 float close_icon_left;
178 if (is_rtl) { 173 if (is_rtl) {
179 close_icon_left = bar_margin_side; 174 close_icon_left = bar_margin_side;
180 } else { 175 } else {
181 close_icon_left = panel_width - 176 close_icon_left =
182 close_icon_resource->size.width() - bar_margin_side; 177 panel_width - close_icon_resource->size().width() - bar_margin_side;
183 } 178 }
184 179
185 // Centers the Close Icon vertically in the bar. 180 // Centers the Close Icon vertically in the bar.
186 float close_icon_top = 181 float close_icon_top =
187 bar_top + 182 bar_top + bar_height / 2 - close_icon_resource->size().height() / 2;
188 bar_height / 2 -
189 close_icon_resource->size.height() / 2;
190 183
191 close_icon_->SetUIResourceId(close_icon_resource->ui_resource->id()); 184 close_icon_->SetUIResourceId(close_icon_resource->ui_resource()->id());
192 close_icon_->SetBounds(close_icon_resource->size); 185 close_icon_->SetBounds(close_icon_resource->size());
193 close_icon_->SetPosition( 186 close_icon_->SetPosition(
194 gfx::PointF(close_icon_left, close_icon_top)); 187 gfx::PointF(close_icon_left, close_icon_top));
195 close_icon_->SetOpacity(close_icon_opacity); 188 close_icon_->SetOpacity(close_icon_opacity);
196 189
197 // --------------------------------------------------------------------------- 190 // ---------------------------------------------------------------------------
198 // Content 191 // Content
199 // --------------------------------------------------------------------------- 192 // ---------------------------------------------------------------------------
200 content_container_->SetPosition( 193 content_container_->SetPosition(
201 gfx::PointF(0.f, content_offset_y)); 194 gfx::PointF(0.f, content_offset_y));
202 content_container_->SetBounds(gfx::Size(panel_width, panel_height)); 195 content_container_->SetBounds(gfx::Size(panel_width, panel_height));
203 if (content_layer) { 196 if (content_layer) {
204 if (content_layer->parent() != content_container_) 197 if (content_layer->parent() != content_container_)
205 content_container_->AddChild(content_layer); 198 content_container_->AddChild(content_layer);
206 } else { 199 } else {
207 content_container_->RemoveAllChildren(); 200 content_container_->RemoveAllChildren();
208 } 201 }
209 202
210 // --------------------------------------------------------------------------- 203 // ---------------------------------------------------------------------------
211 // Bar Shadow 204 // Bar Shadow
212 // --------------------------------------------------------------------------- 205 // ---------------------------------------------------------------------------
213 if (bar_shadow_visible) { 206 if (bar_shadow_visible) {
214 ui::ResourceManager::Resource* bar_shadow_resource = 207 ui::Resource* bar_shadow_resource = resource_manager_->GetResource(
215 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, 208 ui::ANDROID_RESOURCE_TYPE_STATIC, bar_shadow_resource_id_);
216 bar_shadow_resource_id_);
217 209
218 if (bar_shadow_resource) { 210 if (bar_shadow_resource) {
219 if (bar_shadow_->parent() != layer_) 211 if (bar_shadow_->parent() != layer_)
220 layer_->AddChild(bar_shadow_); 212 layer_->AddChild(bar_shadow_);
221 213
222 int shadow_height = bar_shadow_resource->size.height(); 214 int shadow_height = bar_shadow_resource->size().height();
223 gfx::Size shadow_size(panel_width, shadow_height); 215 gfx::Size shadow_size(panel_width, shadow_height);
224 216
225 bar_shadow_->SetUIResourceId( 217 bar_shadow_->SetUIResourceId(bar_shadow_resource->ui_resource()->id());
226 bar_shadow_resource->ui_resource->id());
227 bar_shadow_->SetBounds(shadow_size); 218 bar_shadow_->SetBounds(shadow_size);
228 bar_shadow_->SetPosition(gfx::PointF(0.f, bar_bottom)); 219 bar_shadow_->SetPosition(gfx::PointF(0.f, bar_bottom));
229 bar_shadow_->SetOpacity(bar_shadow_opacity); 220 bar_shadow_->SetOpacity(bar_shadow_opacity);
230 } 221 }
231 } else { 222 } else {
232 if (bar_shadow_.get() && bar_shadow_->parent()) 223 if (bar_shadow_.get() && bar_shadow_->parent())
233 bar_shadow_->RemoveFromParent(); 224 bar_shadow_->RemoveFromParent();
234 } 225 }
235 226
236 // --------------------------------------------------------------------------- 227 // ---------------------------------------------------------------------------
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 } 299 }
309 300
310 OverlayPanelLayer::~OverlayPanelLayer() { 301 OverlayPanelLayer::~OverlayPanelLayer() {
311 } 302 }
312 303
313 scoped_refptr<cc::Layer> OverlayPanelLayer::layer() { 304 scoped_refptr<cc::Layer> OverlayPanelLayer::layer() {
314 return layer_; 305 return layer_;
315 } 306 }
316 307
317 } // namespace android 308 } // namespace android
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698