diff options
-rw-r--r-- | apps/ui/views/app_window_frame_view.cc | 59 | ||||
-rw-r--r-- | apps/ui/views/app_window_frame_view.h | 7 |
2 files changed, 52 insertions, 14 deletions
diff --git a/apps/ui/views/app_window_frame_view.cc b/apps/ui/views/app_window_frame_view.cc index db4d52b..44ed714 100644 --- a/apps/ui/views/app_window_frame_view.cc +++ b/apps/ui/views/app_window_frame_view.cc @@ -15,6 +15,7 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" #include "ui/gfx/canvas.h" +#include "ui/gfx/color_utils.h" #include "ui/gfx/image/image.h" #include "ui/gfx/path.h" #include "ui/views/controls/button/image_button.h" @@ -73,11 +74,9 @@ void AppWindowFrameView::Init() { close_button_->SetAccessibleName( l10n_util::GetStringUTF16(IDS_APP_ACCNAME_CLOSE)); AddChildView(close_button_); + // STATE_NORMAL images are set in SetButtonImagesForFrame, not here. maximize_button_ = new views::ImageButton(this); maximize_button_->SetImage( - views::CustomButton::STATE_NORMAL, - rb.GetNativeImageNamed(IDR_APP_WINDOW_MAXIMIZE).ToImageSkia()); - maximize_button_->SetImage( views::CustomButton::STATE_HOVERED, rb.GetNativeImageNamed(IDR_APP_WINDOW_MAXIMIZE_H).ToImageSkia()); maximize_button_->SetImage( @@ -91,9 +90,6 @@ void AppWindowFrameView::Init() { AddChildView(maximize_button_); restore_button_ = new views::ImageButton(this); restore_button_->SetImage( - views::CustomButton::STATE_NORMAL, - rb.GetNativeImageNamed(IDR_APP_WINDOW_RESTORE).ToImageSkia()); - restore_button_->SetImage( views::CustomButton::STATE_HOVERED, rb.GetNativeImageNamed(IDR_APP_WINDOW_RESTORE_H).ToImageSkia()); restore_button_->SetImage( @@ -104,9 +100,6 @@ void AppWindowFrameView::Init() { AddChildView(restore_button_); minimize_button_ = new views::ImageButton(this); minimize_button_->SetImage( - views::CustomButton::STATE_NORMAL, - rb.GetNativeImageNamed(IDR_APP_WINDOW_MINIMIZE).ToImageSkia()); - minimize_button_->SetImage( views::CustomButton::STATE_HOVERED, rb.GetNativeImageNamed(IDR_APP_WINDOW_MINIMIZE_H).ToImageSkia()); minimize_button_->SetImage( @@ -115,6 +108,8 @@ void AppWindowFrameView::Init() { minimize_button_->SetAccessibleName( l10n_util::GetStringUTF16(IDS_APP_ACCNAME_MINIMIZE)); AddChildView(minimize_button_); + + SetButtonImagesForFrame(); } } @@ -304,14 +299,12 @@ void AppWindowFrameView::OnPaint(gfx::Canvas* canvas) { rb.GetNativeImageNamed(IDR_APP_WINDOW_CLOSE_U).ToImageSkia()); } - // TODO(jeremya): different look for inactive? + SetButtonImagesForFrame(); + // TODO(benwells): different look for inactive by default. SkPaint paint; paint.setAntiAlias(false); paint.setStyle(SkPaint::kFill_Style); - if (widget_->IsActive()) - paint.setColor(active_frame_color_); - else - paint.setColor(inactive_frame_color_); + paint.setColor(CurrentFrameColor()); gfx::Path path; path.moveTo(0, 0); path.lineTo(width(), 0); @@ -366,4 +359,42 @@ void AppWindowFrameView::ButtonPressed(views::Button* sender, widget_->Minimize(); } +SkColor AppWindowFrameView::CurrentFrameColor() { + return widget_->IsActive() ? active_frame_color_ : inactive_frame_color_; +} + +void AppWindowFrameView::SetButtonImagesForFrame() { + DCHECK(draw_frame_); + + // If the frame is dark, we should use the light images so they have + // some contrast. + unsigned char frame_luma = + color_utils::GetLuminanceForColor(CurrentFrameColor()); + const unsigned char kLuminanceThreshold = 100; + bool use_light = frame_luma < kLuminanceThreshold; + + ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); + if (use_light) { + maximize_button_->SetImage( + views::CustomButton::STATE_NORMAL, + rb.GetNativeImageNamed(IDR_APP_WINDOW_MAXIMIZE_L).ToImageSkia()); + restore_button_->SetImage( + views::CustomButton::STATE_NORMAL, + rb.GetNativeImageNamed(IDR_APP_WINDOW_RESTORE_L).ToImageSkia()); + minimize_button_->SetImage( + views::CustomButton::STATE_NORMAL, + rb.GetNativeImageNamed(IDR_APP_WINDOW_MINIMIZE_L).ToImageSkia()); + } else { + maximize_button_->SetImage( + views::CustomButton::STATE_NORMAL, + rb.GetNativeImageNamed(IDR_APP_WINDOW_MAXIMIZE).ToImageSkia()); + restore_button_->SetImage( + views::CustomButton::STATE_NORMAL, + rb.GetNativeImageNamed(IDR_APP_WINDOW_RESTORE).ToImageSkia()); + minimize_button_->SetImage( + views::CustomButton::STATE_NORMAL, + rb.GetNativeImageNamed(IDR_APP_WINDOW_MINIMIZE).ToImageSkia()); + } +} + } // namespace apps diff --git a/apps/ui/views/app_window_frame_view.h b/apps/ui/views/app_window_frame_view.h index a0fa71d..f29046f 100644 --- a/apps/ui/views/app_window_frame_view.h +++ b/apps/ui/views/app_window_frame_view.h @@ -88,6 +88,13 @@ class AppWindowFrameView : public views::NonClientFrameView, virtual void ButtonPressed(views::Button* sender, const ui::Event& event) OVERRIDE; + // Some button images we use depend on the color of the frame. This + // will set these images based on the color of the frame. + void SetButtonImagesForFrame(); + + // Return the current frame color based on the active state of the window. + SkColor CurrentFrameColor(); + views::Widget* widget_; NativeAppWindow* window_; bool draw_frame_; |