Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "ui/message_center/message_view.h" | 5 #include "ui/message_center/message_view.h" |
| 6 | 6 |
| 7 #include "grit/ui_resources.h" | 7 #include "grit/ui_resources.h" |
| 8 #include "grit/ui_strings.h" | 8 #include "grit/ui_strings.h" |
| 9 #include "ui/base/l10n/l10n_util.h" | 9 #include "ui/base/l10n/l10n_util.h" |
| 10 #include "ui/base/models/simple_menu_model.h" | 10 #include "ui/base/models/simple_menu_model.h" |
| 11 #include "ui/base/resource/resource_bundle.h" | 11 #include "ui/base/resource/resource_bundle.h" |
| 12 #include "ui/compositor/scoped_layer_animation_settings.h" | 12 #include "ui/compositor/scoped_layer_animation_settings.h" |
| 13 #include "ui/gfx/canvas.h" | 13 #include "ui/gfx/canvas.h" |
| 14 #include "ui/views/controls/button/image_button.h" | 14 #include "ui/views/controls/button/image_button.h" |
| 15 #include "ui/views/controls/menu/menu_model_adapter.h" | 15 #include "ui/views/controls/menu/menu_model_adapter.h" |
| 16 #include "ui/views/controls/menu/menu_runner.h" | 16 #include "ui/views/controls/menu/menu_runner.h" |
| 17 #include "ui/views/controls/scroll_view.h" | 17 #include "ui/views/controls/scroll_view.h" |
| 18 #include "ui/views/widget/widget.h" | 18 #include "ui/views/widget/widget.h" |
| 19 | 19 |
| 20 namespace { | 20 namespace { |
| 21 | 21 |
| 22 const int kCloseButtonSize = 29; | 22 const int kControlButtonSize = 29; |
| 23 const int kCloseIconTopPadding = 5; | 23 const int kCloseIconTopPadding = 5; |
| 24 const int kCloseIconRightPadding = 5; | 24 const int kCloseIconRightPadding = 5; |
| 25 const int kExpandIconBottomPadding = 8; | |
| 26 const int kExpandIconRightPadding = 11; | |
| 25 | 27 |
| 26 // ControlButtons are ImageButtons whose image can be padded within the button. | 28 // ControlButtons are ImageButtons whose image can be padded within the button. |
| 27 // This allows the creation of buttons like the notification close and expand | 29 // This allows the creation of buttons like the notification close and expand |
| 28 // buttons whose clickable areas extends beyond their image areas | 30 // buttons whose clickable areas extends beyond their image areas |
| 29 // (<http://crbug.com/168822>) without the need to create and maintain | 31 // (<http://crbug.com/168822>) without the need to create and maintain |
| 30 // corresponding resource images with alpha padding. In the future, this class | 32 // corresponding resource images with alpha padding. In the future, this class |
| 31 // will also allow for buttons whose touch areas extend beyond their clickable | 33 // will also allow for buttons whose touch areas extend beyond their clickable |
| 32 // area (<http://crbug.com/168856>). | 34 // area (<http://crbug.com/168856>). |
| 33 class ControlButton : public views::ImageButton { | 35 class ControlButton : public views::ImageButton { |
| 34 public: | 36 public: |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 84 resource_id)); | 86 resource_id)); |
| 85 } | 87 } |
| 86 | 88 |
| 87 void ControlButton::SetPressedImage(int resource_id) { | 89 void ControlButton::SetPressedImage(int resource_id) { |
| 88 SetImage(views::CustomButton::STATE_PRESSED, | 90 SetImage(views::CustomButton::STATE_PRESSED, |
| 89 ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | 91 ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
| 90 resource_id)); | 92 resource_id)); |
| 91 } | 93 } |
| 92 | 94 |
| 93 gfx::Size ControlButton::GetPreferredSize() { | 95 gfx::Size ControlButton::GetPreferredSize() { |
| 94 return gfx::Size(kCloseButtonSize, kCloseButtonSize); | 96 return gfx::Size(kControlButtonSize, kControlButtonSize); |
| 95 } | 97 } |
| 96 | 98 |
| 97 void ControlButton::OnPaint(gfx::Canvas* canvas) { | 99 void ControlButton::OnPaint(gfx::Canvas* canvas) { |
| 98 // This is the same implementation as ImageButton::OnPaint except | 100 // This is the same implementation as ImageButton::OnPaint except |
| 99 // that it calls ComputePaddedImagePaintPosition() instead of | 101 // that it calls ComputePaddedImagePaintPosition() instead of |
| 100 // ComputeImagePaintPosition(), in effect overriding that private method. | 102 // ComputeImagePaintPosition(), in effect overriding that private method. |
| 101 View::OnPaint(canvas); | 103 View::OnPaint(canvas); |
| 102 gfx::ImageSkia image = GetImageToPaint(); | 104 gfx::ImageSkia image = GetImageToPaint(); |
| 103 if (!image.isNull()) { | 105 if (!image.isNull()) { |
| 104 gfx::Point position = ComputePaddedImagePaintPosition(image); | 106 gfx::Point position = ComputePaddedImagePaintPosition(image); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 218 Notification notification_; | 220 Notification notification_; |
| 219 | 221 |
| 220 DISALLOW_COPY_AND_ASSIGN(WebNotificationMenuModel); | 222 DISALLOW_COPY_AND_ASSIGN(WebNotificationMenuModel); |
| 221 }; | 223 }; |
| 222 | 224 |
| 223 MessageView::MessageView( | 225 MessageView::MessageView( |
| 224 NotificationList::Delegate* list_delegate, | 226 NotificationList::Delegate* list_delegate, |
| 225 const Notification& notification) | 227 const Notification& notification) |
| 226 : list_delegate_(list_delegate), | 228 : list_delegate_(list_delegate), |
| 227 notification_(notification), | 229 notification_(notification), |
| 228 scroller_(NULL) { | 230 scroller_(NULL), |
| 231 expanded_(false) { | |
| 229 ControlButton *close = new ControlButton(this); | 232 ControlButton *close = new ControlButton(this); |
| 230 close->SetPadding(-kCloseIconRightPadding, kCloseIconTopPadding); | 233 close->SetPadding(-kCloseIconRightPadding, kCloseIconTopPadding); |
| 231 close->SetNormalImage(IDR_NOTIFICATION_CLOSE); | 234 close->SetNormalImage(IDR_NOTIFICATION_CLOSE); |
| 232 close->SetHoveredImage(IDR_NOTIFICATION_CLOSE_HOVER); | 235 close->SetHoveredImage(IDR_NOTIFICATION_CLOSE_HOVER); |
| 233 close->SetPressedImage(IDR_NOTIFICATION_CLOSE_PRESSED); | 236 close->SetPressedImage(IDR_NOTIFICATION_CLOSE_PRESSED); |
| 237 close->set_owned_by_client(); | |
|
dharcourt
2013/02/23 04:32:00
This isn't strictly needed because close_button_ w
| |
| 234 close_button_.reset(close); | 238 close_button_.reset(close); |
| 239 | |
| 240 ControlButton *expand = new ControlButton(this); | |
| 241 expand->SetPadding(-kExpandIconRightPadding, -kExpandIconBottomPadding); | |
| 242 expand->SetNormalImage(IDR_NOTIFICATIONS_EXPAND); | |
| 243 expand->SetHoveredImage(IDR_NOTIFICATIONS_EXPAND_HOVER); | |
| 244 expand->SetPressedImage(IDR_NOTIFICATIONS_EXPAND_PRESSED); | |
| 245 expand->set_owned_by_client(); | |
| 246 expand_button_.reset(expand); | |
| 235 } | 247 } |
| 236 | 248 |
| 237 MessageView::MessageView() { | 249 MessageView::MessageView() { |
| 238 } | 250 } |
| 239 | 251 |
| 240 MessageView::~MessageView() { | 252 MessageView::~MessageView() { |
| 241 } | 253 } |
| 242 | 254 |
| 243 bool MessageView::OnMousePressed(const ui::MouseEvent& event) { | 255 bool MessageView::OnMousePressed(const ui::MouseEvent& event) { |
| 244 if (event.flags() & ui::EF_RIGHT_MOUSE_BUTTON) { | 256 if (event.flags() & ui::EF_RIGHT_MOUSE_BUTTON) { |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 272 | 284 |
| 273 if (scroller_) | 285 if (scroller_) |
| 274 scroller_->OnGestureEvent(event); | 286 scroller_->OnGestureEvent(event); |
| 275 event->SetHandled(); | 287 event->SetHandled(); |
| 276 } | 288 } |
| 277 | 289 |
| 278 void MessageView::ButtonPressed(views::Button* sender, | 290 void MessageView::ButtonPressed(views::Button* sender, |
| 279 const ui::Event& event) { | 291 const ui::Event& event) { |
| 280 if (sender == close_button()) | 292 if (sender == close_button()) |
| 281 list_delegate_->SendRemoveNotification(notification_.id); | 293 list_delegate_->SendRemoveNotification(notification_.id); |
| 294 else if (sender == expand_button()) | |
| 295 SetExpanded(!expanded_); | |
| 296 } | |
| 297 | |
| 298 bool MessageView::IsExpanded() { | |
| 299 return expanded_; | |
| 300 } | |
| 301 | |
| 302 void MessageView::SetExpanded(bool expanded) { | |
| 303 expanded_ = expanded; | |
| 282 } | 304 } |
| 283 | 305 |
| 284 void MessageView::ShowMenu(gfx::Point screen_location) { | 306 void MessageView::ShowMenu(gfx::Point screen_location) { |
| 285 WebNotificationMenuModel menu_model(list_delegate_, notification_); | 307 WebNotificationMenuModel menu_model(list_delegate_, notification_); |
| 286 if (menu_model.GetItemCount() == 0) | 308 if (menu_model.GetItemCount() == 0) |
| 287 return; | 309 return; |
| 288 | 310 |
| 289 views::MenuModelAdapter menu_model_adapter(&menu_model); | 311 views::MenuModelAdapter menu_model_adapter(&menu_model); |
| 290 views::MenuRunner menu_runner(menu_model_adapter.CreateMenu()); | 312 views::MenuRunner menu_runner(menu_model_adapter.CreateMenu()); |
| 291 | 313 |
| 292 views::View::ConvertPointToScreen(this, &screen_location); | 314 views::View::ConvertPointToScreen(this, &screen_location); |
| 293 ignore_result(menu_runner.RunMenuAt( | 315 ignore_result(menu_runner.RunMenuAt( |
| 294 GetWidget()->GetTopLevelWidget(), | 316 GetWidget()->GetTopLevelWidget(), |
| 295 NULL, | 317 NULL, |
| 296 gfx::Rect(screen_location, gfx::Size()), | 318 gfx::Rect(screen_location, gfx::Size()), |
| 297 views::MenuItemView::TOPRIGHT, | 319 views::MenuItemView::TOPRIGHT, |
| 298 views::MenuRunner::HAS_MNEMONICS)); | 320 views::MenuRunner::HAS_MNEMONICS)); |
| 299 } | 321 } |
| 300 | 322 |
| 301 void MessageView::OnSlideOut() { | 323 void MessageView::OnSlideOut() { |
| 302 list_delegate_->SendRemoveNotification(notification_.id); | 324 list_delegate_->SendRemoveNotification(notification_.id); |
| 303 } | 325 } |
| 304 | 326 |
| 305 } // namespace message_center | 327 } // namespace message_center |
| OLD | NEW |