Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "apps/ui/views/app_window_frame_view.h" | 5 #include "apps/ui/views/app_window_frame_view.h" |
| 6 | 6 |
| 7 #include "apps/ui/native_app_window.h" | 7 #include "apps/ui/native_app_window.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "extensions/common/draggable_region.h" | 9 #include "extensions/common/draggable_region.h" |
| 10 #include "grit/theme_resources.h" | 10 #include "grit/theme_resources.h" |
| 11 #include "grit/ui_strings.h" // Accessibility names | 11 #include "grit/ui_strings.h" // Accessibility names |
| 12 #include "third_party/skia/include/core/SkPaint.h" | 12 #include "third_party/skia/include/core/SkPaint.h" |
| 13 #include "third_party/skia/include/core/SkRegion.h" | 13 #include "third_party/skia/include/core/SkRegion.h" |
| 14 #include "ui/base/hit_test.h" | 14 #include "ui/base/hit_test.h" |
| 15 #include "ui/base/l10n/l10n_util.h" | 15 #include "ui/base/l10n/l10n_util.h" |
| 16 #include "ui/base/resource/resource_bundle.h" | 16 #include "ui/base/resource/resource_bundle.h" |
| 17 #include "ui/gfx/canvas.h" | 17 #include "ui/gfx/canvas.h" |
| 18 #include "ui/gfx/color_utils.h" | |
| 18 #include "ui/gfx/image/image.h" | 19 #include "ui/gfx/image/image.h" |
| 19 #include "ui/gfx/path.h" | 20 #include "ui/gfx/path.h" |
| 20 #include "ui/views/controls/button/image_button.h" | 21 #include "ui/views/controls/button/image_button.h" |
| 21 #include "ui/views/layout/grid_layout.h" | 22 #include "ui/views/layout/grid_layout.h" |
| 22 #include "ui/views/views_delegate.h" | 23 #include "ui/views/views_delegate.h" |
| 23 #include "ui/views/widget/widget.h" | 24 #include "ui/views/widget/widget.h" |
| 24 #include "ui/views/widget/widget_delegate.h" | 25 #include "ui/views/widget/widget_delegate.h" |
| 25 | 26 |
| 26 namespace { | 27 namespace { |
| 27 | 28 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 65 views::CustomButton::STATE_NORMAL, | 66 views::CustomButton::STATE_NORMAL, |
| 66 rb.GetNativeImageNamed(IDR_APP_WINDOW_CLOSE).ToImageSkia()); | 67 rb.GetNativeImageNamed(IDR_APP_WINDOW_CLOSE).ToImageSkia()); |
| 67 close_button_->SetImage( | 68 close_button_->SetImage( |
| 68 views::CustomButton::STATE_HOVERED, | 69 views::CustomButton::STATE_HOVERED, |
| 69 rb.GetNativeImageNamed(IDR_APP_WINDOW_CLOSE_H).ToImageSkia()); | 70 rb.GetNativeImageNamed(IDR_APP_WINDOW_CLOSE_H).ToImageSkia()); |
| 70 close_button_->SetImage( | 71 close_button_->SetImage( |
| 71 views::CustomButton::STATE_PRESSED, | 72 views::CustomButton::STATE_PRESSED, |
| 72 rb.GetNativeImageNamed(IDR_APP_WINDOW_CLOSE_P).ToImageSkia()); | 73 rb.GetNativeImageNamed(IDR_APP_WINDOW_CLOSE_P).ToImageSkia()); |
| 73 close_button_->SetAccessibleName( | 74 close_button_->SetAccessibleName( |
| 74 l10n_util::GetStringUTF16(IDS_APP_ACCNAME_CLOSE)); | 75 l10n_util::GetStringUTF16(IDS_APP_ACCNAME_CLOSE)); |
| 75 AddChildView(close_button_); | 76 AddChildView(close_button_); |
|
Matt Giuca
2014/05/09 08:33:11
// STATE_NORMAL images are set in SetButtonImagesF
benwells
2014/05/09 09:06:05
Done.
| |
| 76 maximize_button_ = new views::ImageButton(this); | 77 maximize_button_ = new views::ImageButton(this); |
| 77 maximize_button_->SetImage( | 78 maximize_button_->SetImage( |
| 78 views::CustomButton::STATE_NORMAL, | |
| 79 rb.GetNativeImageNamed(IDR_APP_WINDOW_MAXIMIZE).ToImageSkia()); | |
| 80 maximize_button_->SetImage( | |
| 81 views::CustomButton::STATE_HOVERED, | 79 views::CustomButton::STATE_HOVERED, |
| 82 rb.GetNativeImageNamed(IDR_APP_WINDOW_MAXIMIZE_H).ToImageSkia()); | 80 rb.GetNativeImageNamed(IDR_APP_WINDOW_MAXIMIZE_H).ToImageSkia()); |
| 83 maximize_button_->SetImage( | 81 maximize_button_->SetImage( |
| 84 views::CustomButton::STATE_PRESSED, | 82 views::CustomButton::STATE_PRESSED, |
| 85 rb.GetNativeImageNamed(IDR_APP_WINDOW_MAXIMIZE_P).ToImageSkia()); | 83 rb.GetNativeImageNamed(IDR_APP_WINDOW_MAXIMIZE_P).ToImageSkia()); |
| 86 maximize_button_->SetImage( | 84 maximize_button_->SetImage( |
| 87 views::CustomButton::STATE_DISABLED, | 85 views::CustomButton::STATE_DISABLED, |
| 88 rb.GetNativeImageNamed(IDR_APP_WINDOW_MAXIMIZE_D).ToImageSkia()); | 86 rb.GetNativeImageNamed(IDR_APP_WINDOW_MAXIMIZE_D).ToImageSkia()); |
| 89 maximize_button_->SetAccessibleName( | 87 maximize_button_->SetAccessibleName( |
| 90 l10n_util::GetStringUTF16(IDS_APP_ACCNAME_MAXIMIZE)); | 88 l10n_util::GetStringUTF16(IDS_APP_ACCNAME_MAXIMIZE)); |
| 91 AddChildView(maximize_button_); | 89 AddChildView(maximize_button_); |
| 92 restore_button_ = new views::ImageButton(this); | 90 restore_button_ = new views::ImageButton(this); |
| 93 restore_button_->SetImage( | 91 restore_button_->SetImage( |
| 94 views::CustomButton::STATE_NORMAL, | |
| 95 rb.GetNativeImageNamed(IDR_APP_WINDOW_RESTORE).ToImageSkia()); | |
| 96 restore_button_->SetImage( | |
| 97 views::CustomButton::STATE_HOVERED, | 92 views::CustomButton::STATE_HOVERED, |
| 98 rb.GetNativeImageNamed(IDR_APP_WINDOW_RESTORE_H).ToImageSkia()); | 93 rb.GetNativeImageNamed(IDR_APP_WINDOW_RESTORE_H).ToImageSkia()); |
| 99 restore_button_->SetImage( | 94 restore_button_->SetImage( |
| 100 views::CustomButton::STATE_PRESSED, | 95 views::CustomButton::STATE_PRESSED, |
| 101 rb.GetNativeImageNamed(IDR_APP_WINDOW_RESTORE_P).ToImageSkia()); | 96 rb.GetNativeImageNamed(IDR_APP_WINDOW_RESTORE_P).ToImageSkia()); |
| 102 restore_button_->SetAccessibleName( | 97 restore_button_->SetAccessibleName( |
| 103 l10n_util::GetStringUTF16(IDS_APP_ACCNAME_RESTORE)); | 98 l10n_util::GetStringUTF16(IDS_APP_ACCNAME_RESTORE)); |
| 104 AddChildView(restore_button_); | 99 AddChildView(restore_button_); |
| 105 minimize_button_ = new views::ImageButton(this); | 100 minimize_button_ = new views::ImageButton(this); |
| 106 minimize_button_->SetImage( | 101 minimize_button_->SetImage( |
| 107 views::CustomButton::STATE_NORMAL, | |
| 108 rb.GetNativeImageNamed(IDR_APP_WINDOW_MINIMIZE).ToImageSkia()); | |
| 109 minimize_button_->SetImage( | |
| 110 views::CustomButton::STATE_HOVERED, | 102 views::CustomButton::STATE_HOVERED, |
| 111 rb.GetNativeImageNamed(IDR_APP_WINDOW_MINIMIZE_H).ToImageSkia()); | 103 rb.GetNativeImageNamed(IDR_APP_WINDOW_MINIMIZE_H).ToImageSkia()); |
| 112 minimize_button_->SetImage( | 104 minimize_button_->SetImage( |
| 113 views::CustomButton::STATE_PRESSED, | 105 views::CustomButton::STATE_PRESSED, |
| 114 rb.GetNativeImageNamed(IDR_APP_WINDOW_MINIMIZE_P).ToImageSkia()); | 106 rb.GetNativeImageNamed(IDR_APP_WINDOW_MINIMIZE_P).ToImageSkia()); |
| 115 minimize_button_->SetAccessibleName( | 107 minimize_button_->SetAccessibleName( |
| 116 l10n_util::GetStringUTF16(IDS_APP_ACCNAME_MINIMIZE)); | 108 l10n_util::GetStringUTF16(IDS_APP_ACCNAME_MINIMIZE)); |
| 117 AddChildView(minimize_button_); | 109 AddChildView(minimize_button_); |
| 110 | |
| 111 SetButtonImagesForFrame(); | |
| 118 } | 112 } |
| 119 } | 113 } |
| 120 | 114 |
| 121 void AppWindowFrameView::SetResizeSizes(int resize_inside_bounds_size, | 115 void AppWindowFrameView::SetResizeSizes(int resize_inside_bounds_size, |
| 122 int resize_outside_bounds_size, | 116 int resize_outside_bounds_size, |
| 123 int resize_area_corner_size) { | 117 int resize_area_corner_size) { |
| 124 resize_inside_bounds_size_ = resize_inside_bounds_size; | 118 resize_inside_bounds_size_ = resize_inside_bounds_size; |
| 125 resize_outside_bounds_size_ = resize_outside_bounds_size; | 119 resize_outside_bounds_size_ = resize_outside_bounds_size; |
| 126 resize_area_corner_size_ = resize_area_corner_size; | 120 resize_area_corner_size_ = resize_area_corner_size; |
| 127 } | 121 } |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 297 if (ShouldPaintAsActive()) { | 291 if (ShouldPaintAsActive()) { |
| 298 close_button_->SetImage( | 292 close_button_->SetImage( |
| 299 views::CustomButton::STATE_NORMAL, | 293 views::CustomButton::STATE_NORMAL, |
| 300 rb.GetNativeImageNamed(IDR_APP_WINDOW_CLOSE).ToImageSkia()); | 294 rb.GetNativeImageNamed(IDR_APP_WINDOW_CLOSE).ToImageSkia()); |
| 301 } else { | 295 } else { |
| 302 close_button_->SetImage( | 296 close_button_->SetImage( |
| 303 views::CustomButton::STATE_NORMAL, | 297 views::CustomButton::STATE_NORMAL, |
| 304 rb.GetNativeImageNamed(IDR_APP_WINDOW_CLOSE_U).ToImageSkia()); | 298 rb.GetNativeImageNamed(IDR_APP_WINDOW_CLOSE_U).ToImageSkia()); |
| 305 } | 299 } |
| 306 | 300 |
| 307 // TODO(jeremya): different look for inactive? | 301 SetButtonImagesForFrame(); |
| 302 // TODO(benwells): different look for inactive by default. | |
| 308 SkPaint paint; | 303 SkPaint paint; |
| 309 paint.setAntiAlias(false); | 304 paint.setAntiAlias(false); |
| 310 paint.setStyle(SkPaint::kFill_Style); | 305 paint.setStyle(SkPaint::kFill_Style); |
| 311 if (widget_->IsActive()) | 306 if (widget_->IsActive()) |
| 312 paint.setColor(active_frame_color_); | 307 paint.setColor(active_frame_color_); |
| 313 else | 308 else |
| 314 paint.setColor(inactive_frame_color_); | 309 paint.setColor(inactive_frame_color_); |
| 315 gfx::Path path; | 310 gfx::Path path; |
| 316 path.moveTo(0, 0); | 311 path.moveTo(0, 0); |
| 317 path.lineTo(width(), 0); | 312 path.lineTo(width(), 0); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 359 if (sender == close_button_) | 354 if (sender == close_button_) |
| 360 widget_->Close(); | 355 widget_->Close(); |
| 361 else if (sender == maximize_button_) | 356 else if (sender == maximize_button_) |
| 362 widget_->Maximize(); | 357 widget_->Maximize(); |
| 363 else if (sender == restore_button_) | 358 else if (sender == restore_button_) |
| 364 widget_->Restore(); | 359 widget_->Restore(); |
| 365 else if (sender == minimize_button_) | 360 else if (sender == minimize_button_) |
| 366 widget_->Minimize(); | 361 widget_->Minimize(); |
| 367 } | 362 } |
| 368 | 363 |
| 364 void AppWindowFrameView::SetButtonImagesForFrame() { | |
| 365 DCHECK(draw_frame_); | |
| 366 | |
| 367 unsigned char frame_luma = | |
| 368 widget_->IsActive() | |
| 369 ? color_utils::GetLuminanceForColor(active_frame_color_) | |
|
Matt Giuca
2014/05/09 08:33:11
Optional: Can I suggest a small refactor: add a me
benwells
2014/05/09 09:06:05
Done.
| |
| 370 : color_utils::GetLuminanceForColor(inactive_frame_color_); | |
| 371 | |
| 372 // If the frame is dark, we should use the light images so they have | |
| 373 // some contrast. | |
| 374 const unsigned char kLuminanceThreshold = 100; | |
| 375 bool use_light = frame_luma < kLuminanceThreshold; | |
| 376 | |
| 377 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | |
|
Matt Giuca
2014/05/09 08:33:11
const
(I looked up GetSharedInstance and I'm shoc
benwells
2014/05/09 09:06:05
Yeah resource bundle isn't very consty. Needs to b
| |
| 378 if (use_light) { | |
| 379 maximize_button_->SetImage( | |
| 380 views::CustomButton::STATE_NORMAL, | |
| 381 rb.GetNativeImageNamed(IDR_APP_WINDOW_MAXIMIZE_L).ToImageSkia()); | |
| 382 restore_button_->SetImage( | |
| 383 views::CustomButton::STATE_NORMAL, | |
| 384 rb.GetNativeImageNamed(IDR_APP_WINDOW_RESTORE_L).ToImageSkia()); | |
| 385 minimize_button_->SetImage( | |
| 386 views::CustomButton::STATE_NORMAL, | |
| 387 rb.GetNativeImageNamed(IDR_APP_WINDOW_MINIMIZE_L).ToImageSkia()); | |
| 388 } else { | |
| 389 maximize_button_->SetImage( | |
| 390 views::CustomButton::STATE_NORMAL, | |
| 391 rb.GetNativeImageNamed(IDR_APP_WINDOW_MAXIMIZE).ToImageSkia()); | |
| 392 restore_button_->SetImage( | |
| 393 views::CustomButton::STATE_NORMAL, | |
| 394 rb.GetNativeImageNamed(IDR_APP_WINDOW_RESTORE).ToImageSkia()); | |
| 395 minimize_button_->SetImage( | |
| 396 views::CustomButton::STATE_NORMAL, | |
| 397 rb.GetNativeImageNamed(IDR_APP_WINDOW_MINIMIZE).ToImageSkia()); | |
| 398 } | |
| 399 } | |
| 400 | |
| 369 } // namespace apps | 401 } // namespace apps |
| OLD | NEW |