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 |