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

Side by Side Diff: ash/launcher/launcher_button.cc

Issue 11434099: Use the correct launcher assets for shelf alignment. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 years 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 | Annotate | Revision Log
« no previous file with comments | « ash/launcher/launcher_button.h ('k') | ash/launcher/launcher_button_host.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "ash/launcher/launcher_button.h" 5 #include "ash/launcher/launcher_button.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ash/launcher/launcher_button_host.h" 9 #include "ash/launcher/launcher_button_host.h"
10 #include "ash/wm/shelf_layout_manager.h"
10 #include "grit/ash_resources.h" 11 #include "grit/ash_resources.h"
11 #include "skia/ext/image_operations.h" 12 #include "skia/ext/image_operations.h"
12 #include "ui/base/accessibility/accessible_view_state.h" 13 #include "ui/base/accessibility/accessible_view_state.h"
13 #include "ui/base/animation/animation_delegate.h" 14 #include "ui/base/animation/animation_delegate.h"
14 #include "ui/base/animation/throb_animation.h" 15 #include "ui/base/animation/throb_animation.h"
15 #include "ui/base/events/event_constants.h" 16 #include "ui/base/events/event_constants.h"
16 #include "ui/base/resource/resource_bundle.h" 17 #include "ui/base/resource/resource_bundle.h"
17 #include "ui/compositor/layer.h" 18 #include "ui/compositor/layer.h"
18 #include "ui/compositor/scoped_layer_animation_settings.h" 19 #include "ui/compositor/scoped_layer_animation_settings.h"
19 #include "ui/gfx/canvas.h" 20 #include "ui/gfx/canvas.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 } 106 }
106 107
107 bool LauncherButton::IconView::HitTestRect(const gfx::Rect& rect) const { 108 bool LauncherButton::IconView::HitTestRect(const gfx::Rect& rect) const {
108 // Return false so that LauncherButton gets all the mouse events. 109 // Return false so that LauncherButton gets all the mouse events.
109 return false; 110 return false;
110 } 111 }
111 112
112 //////////////////////////////////////////////////////////////////////////////// 113 ////////////////////////////////////////////////////////////////////////////////
113 // LauncherButton 114 // LauncherButton
114 115
115 LauncherButton* LauncherButton::Create(views::ButtonListener* listener, 116 LauncherButton* LauncherButton::Create(
116 LauncherButtonHost* host) { 117 views::ButtonListener* listener,
117 LauncherButton* button = new LauncherButton(listener, host); 118 LauncherButtonHost* host,
119 ShelfLayoutManager* shelf_layout_manager) {
120 LauncherButton* button =
121 new LauncherButton(listener, host, shelf_layout_manager);
118 button->Init(); 122 button->Init();
119 return button; 123 return button;
120 } 124 }
121 125
122 LauncherButton::LauncherButton(views::ButtonListener* listener, 126 LauncherButton::LauncherButton(views::ButtonListener* listener,
123 LauncherButtonHost* host) 127 LauncherButtonHost* host,
128 ShelfLayoutManager* shelf_layout_manager)
124 : CustomButton(listener), 129 : CustomButton(listener),
125 host_(host), 130 host_(host),
126 icon_view_(NULL), 131 icon_view_(NULL),
127 bar_(new BarView), 132 bar_(new BarView),
128 state_(STATE_NORMAL) { 133 state_(STATE_NORMAL),
134 shelf_layout_manager_(shelf_layout_manager) {
129 set_accessibility_focusable(true); 135 set_accessibility_focusable(true);
130 136
131 const gfx::ShadowValue kShadows[] = { 137 const gfx::ShadowValue kShadows[] = {
132 gfx::ShadowValue(gfx::Point(0, 2), 0, SkColorSetARGB(0x1A, 0, 0, 0)), 138 gfx::ShadowValue(gfx::Point(0, 2), 0, SkColorSetARGB(0x1A, 0, 0, 0)),
133 gfx::ShadowValue(gfx::Point(0, 3), 1, SkColorSetARGB(0x1A, 0, 0, 0)), 139 gfx::ShadowValue(gfx::Point(0, 3), 1, SkColorSetARGB(0x1A, 0, 0, 0)),
134 gfx::ShadowValue(gfx::Point(0, 0), 1, SkColorSetARGB(0x54, 0, 0, 0)), 140 gfx::ShadowValue(gfx::Point(0, 0), 1, SkColorSetARGB(0x54, 0, 0, 0)),
135 }; 141 };
136 icon_shadows_.assign(kShadows, kShadows + arraysize(kShadows)); 142 icon_shadows_.assign(kShadows, kShadows + arraysize(kShadows));
137 143
138 AddChildView(bar_); 144 AddChildView(bar_);
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 void LauncherButton::GetAccessibleState(ui::AccessibleViewState* state) { 268 void LauncherButton::GetAccessibleState(ui::AccessibleViewState* state) {
263 state->role = ui::AccessibilityTypes::ROLE_PUSHBUTTON; 269 state->role = ui::AccessibilityTypes::ROLE_PUSHBUTTON;
264 state->name = host_->GetAccessibleName(this); 270 state->name = host_->GetAccessibleName(this);
265 } 271 }
266 272
267 void LauncherButton::Layout() { 273 void LauncherButton::Layout() {
268 const gfx::Rect button_bounds(GetContentsBounds()); 274 const gfx::Rect button_bounds(GetContentsBounds());
269 int x_offset = 0, y_offset = 0; 275 int x_offset = 0, y_offset = 0;
270 gfx::Rect icon_bounds; 276 gfx::Rect icon_bounds;
271 277
272 if (host_->GetShelfAlignment() == SHELF_ALIGNMENT_BOTTOM) { 278 if (shelf_layout_manager_->GetAlignment() == SHELF_ALIGNMENT_BOTTOM) {
273 icon_bounds.SetRect( 279 icon_bounds.SetRect(
274 button_bounds.x(), button_bounds.y() + kIconPad, 280 button_bounds.x(), button_bounds.y() + kIconPad,
275 button_bounds.width(), kIconSize); 281 button_bounds.width(), kIconSize);
276 if (ShouldHop(state_)) 282 if (ShouldHop(state_))
277 y_offset -= kHopSpacing; 283 y_offset -= kHopSpacing;
278 } else { 284 } else {
279 icon_bounds.SetRect( 285 icon_bounds.SetRect(
280 button_bounds.x() + kIconPad, button_bounds.y(), 286 button_bounds.x() + kIconPad, button_bounds.y(),
281 kIconSize, button_bounds.height()); 287 kIconSize, button_bounds.height());
282 if (!ShouldHop(state_)) 288 if (!ShouldHop(state_))
283 x_offset += kHopSpacing; 289 x_offset += kHopSpacing;
284 } 290 }
285 291
286 if (host_->GetShelfAlignment() == SHELF_ALIGNMENT_LEFT) 292 if (shelf_layout_manager_->GetAlignment() == SHELF_ALIGNMENT_LEFT)
287 x_offset = -x_offset; 293 x_offset = -x_offset;
288 icon_bounds.Offset(x_offset, y_offset); 294 icon_bounds.Offset(x_offset, y_offset);
289 icon_view_->SetBoundsRect(icon_bounds); 295 icon_view_->SetBoundsRect(icon_bounds);
290 bar_->SetBoundsRect(GetContentsBounds()); 296 bar_->SetBoundsRect(GetContentsBounds());
291 } 297 }
292 298
293 void LauncherButton::ChildPreferredSizeChanged(views::View* child) { 299 void LauncherButton::ChildPreferredSizeChanged(views::View* child) {
294 Layout(); 300 Layout();
295 } 301 }
296 302
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 icon_view_->SetVerticalAlignment(views::ImageView::LEADING); 346 icon_view_->SetVerticalAlignment(views::ImageView::LEADING);
341 347
342 AddChildView(icon_view_); 348 AddChildView(icon_view_);
343 } 349 }
344 350
345 LauncherButton::IconView* LauncherButton::CreateIconView() { 351 LauncherButton::IconView* LauncherButton::CreateIconView() {
346 return new IconView; 352 return new IconView;
347 } 353 }
348 354
349 bool LauncherButton::IsShelfHorizontal() const { 355 bool LauncherButton::IsShelfHorizontal() const {
350 return host_->GetShelfAlignment() == SHELF_ALIGNMENT_BOTTOM; 356 return shelf_layout_manager_->IsHorizontalAlignment();
351 } 357 }
352 358
353 void LauncherButton::UpdateState() { 359 void LauncherButton::UpdateState() {
354 if (state_ == STATE_NORMAL) { 360 if (state_ == STATE_NORMAL) {
355 bar_->SetVisible(false); 361 bar_->SetVisible(false);
356 } else { 362 } else {
357 int bar_id; 363 int bar_id;
358 if (IsShelfHorizontal()) { 364 if (state_ & STATE_ACTIVE) {
359 if (state_ & STATE_ACTIVE) 365 bar_id = shelf_layout_manager_->SelectValueForShelfAlignment(
360 bar_id = IDR_AURA_LAUNCHER_UNDERLINE_BOTTOM_ACTIVE; 366 IDR_AURA_LAUNCHER_UNDERLINE_BOTTOM_ACTIVE,
361 else if (state_ & (STATE_HOVERED | STATE_FOCUSED | STATE_ATTENTION)) 367 IDR_AURA_LAUNCHER_UNDERLINE_LEFT_ACTIVE,
362 bar_id = IDR_AURA_LAUNCHER_UNDERLINE_BOTTOM_HOVER; 368 IDR_AURA_LAUNCHER_UNDERLINE_RIGHT_ACTIVE);
363 else 369 } else if (state_ & (STATE_HOVERED | STATE_FOCUSED | STATE_ATTENTION)) {
364 bar_id = IDR_AURA_LAUNCHER_UNDERLINE_BOTTOM_RUNNING; 370 bar_id = shelf_layout_manager_->SelectValueForShelfAlignment(
371 IDR_AURA_LAUNCHER_UNDERLINE_BOTTOM_HOVER,
372 IDR_AURA_LAUNCHER_UNDERLINE_LEFT_HOVER,
373 IDR_AURA_LAUNCHER_UNDERLINE_RIGHT_HOVER);
365 } else { 374 } else {
366 if (state_ & STATE_ACTIVE) 375 bar_id = shelf_layout_manager_->SelectValueForShelfAlignment(
367 bar_id = IDR_AURA_LAUNCHER_UNDERLINE_LEFT_ACTIVE; 376 IDR_AURA_LAUNCHER_UNDERLINE_BOTTOM_RUNNING,
368 else if (state_ & (STATE_HOVERED | STATE_FOCUSED | STATE_ATTENTION)) 377 IDR_AURA_LAUNCHER_UNDERLINE_LEFT_RUNNING,
369 bar_id = IDR_AURA_LAUNCHER_UNDERLINE_LEFT_HOVER; 378 IDR_AURA_LAUNCHER_UNDERLINE_RIGHT_RUNNING);
370 else
371 bar_id = IDR_AURA_LAUNCHER_UNDERLINE_LEFT_RUNNING;
372 } 379 }
373
374 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 380 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
375 bar_->SetImage(rb.GetImageNamed(bar_id).ToImageSkia()); 381 bar_->SetImage(rb.GetImageNamed(bar_id).ToImageSkia());
376 bar_->SetVisible(true); 382 bar_->SetVisible(true);
377 } 383 }
384 bool rtl = base::i18n::IsRTL();
385 bar_->SetHorizontalAlignment(
386 shelf_layout_manager_->SelectValueForShelfAlignment(
387 views::ImageView::CENTER,
388 rtl ? views::ImageView::TRAILING : views::ImageView::LEADING,
389 rtl ? views::ImageView::LEADING : views::ImageView::TRAILING));
390 bar_->SetVerticalAlignment(
391 shelf_layout_manager_->SelectValueForShelfAlignment(
392 views::ImageView::TRAILING,
393 views::ImageView::CENTER,
394 views::ImageView::CENTER));
378 395
379 switch (host_->GetShelfAlignment()) { 396 switch (shelf_layout_manager_->GetAlignment()) {
380 case SHELF_ALIGNMENT_BOTTOM: 397 case SHELF_ALIGNMENT_BOTTOM:
381 bar_->SetHorizontalAlignment(views::ImageView::CENTER); 398 bar_->SetHorizontalAlignment(views::ImageView::CENTER);
382 bar_->SetVerticalAlignment(views::ImageView::TRAILING); 399 bar_->SetVerticalAlignment(views::ImageView::TRAILING);
383 break; 400 break;
384 case SHELF_ALIGNMENT_LEFT: 401 case SHELF_ALIGNMENT_LEFT:
385 bar_->SetHorizontalAlignment( 402 bar_->SetHorizontalAlignment(
386 base::i18n::IsRTL() ? views::ImageView::TRAILING : 403 base::i18n::IsRTL() ? views::ImageView::TRAILING :
387 views::ImageView::LEADING); 404 views::ImageView::LEADING);
388 bar_->SetVerticalAlignment(views::ImageView::CENTER); 405 bar_->SetVerticalAlignment(views::ImageView::CENTER);
389 break; 406 break;
390 case SHELF_ALIGNMENT_RIGHT: 407 case SHELF_ALIGNMENT_RIGHT:
391 bar_->SetHorizontalAlignment( 408 bar_->SetHorizontalAlignment(
392 base::i18n::IsRTL() ? views::ImageView::LEADING : 409 base::i18n::IsRTL() ? views::ImageView::LEADING :
393 views::ImageView::TRAILING); 410 views::ImageView::TRAILING);
394 bar_->SetVerticalAlignment(views::ImageView::CENTER); 411 bar_->SetVerticalAlignment(views::ImageView::CENTER);
395 break; 412 break;
396 } 413 }
397 414
415 // Force bar to layout as alignment may have changed but not bounds.
416 bar_->Layout();
398 Layout(); 417 Layout();
418 bar_->SchedulePaint();
399 SchedulePaint(); 419 SchedulePaint();
400 } 420 }
401 421
402 } // namespace internal 422 } // namespace internal
403 } // namespace ash 423 } // namespace ash
OLDNEW
« no previous file with comments | « ash/launcher/launcher_button.h ('k') | ash/launcher/launcher_button_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698