| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ash/display/secondary_display_view.h" |
| |
| #include "grit/ash_resources.h" |
| #include "grit/ash_strings.h" |
| #include "third_party/skia/include/core/SkColor.h" |
| #include "ui/aura/window.h" |
| #include "ui/base/l10n/l10n_util.h" |
| #include "ui/base/resource/resource_bundle.h" |
| #include "ui/views/background.h" |
| #include "ui/views/controls/image_view.h" |
| #include "ui/views/controls/label.h" |
| #include "ui/views/view.h" |
| #include "ui/views/widget/widget.h" |
| #include "ui/views/widget/widget_delegate.h" |
| |
| namespace ash { |
| namespace { |
| |
| // Colors for the background, the message text and the shortcut text. |
| const SkColor kBackgroundColor = SkColorSetRGB(0x33, 0x33, 0x33); |
| const SkColor kTextColor = SkColorSetRGB(127, 127, 127); |
| |
| // A view to be displayed on secondary display. |
| class SecondaryDisplayView : public views::WidgetDelegateView { |
| public: |
| SecondaryDisplayView() { |
| Init(); |
| } |
| virtual ~SecondaryDisplayView() { |
| } |
| |
| void Init() { |
| ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
| |
| set_background(views::Background::CreateSolidBackground(kBackgroundColor)); |
| message_ = new views::Label( |
| l10n_util::GetStringUTF16(IDS_ASH_SECONDARY_MONITOR)); |
| message_->SetAutoColorReadabilityEnabled(false); |
| message_->SetFont(rb.GetFont(ui::ResourceBundle::LargeFont)); |
| message_->SetHorizontalAlignment(views::Label::ALIGN_CENTER); |
| message_->SetEnabledColor(kTextColor); |
| AddChildView(message_); |
| |
| shortcut_text_ = new views::Label( |
| l10n_util::GetStringUTF16(IDS_ASH_SECONDARY_MONITOR_SHORTCUT)); |
| shortcut_text_->SetAutoColorReadabilityEnabled(false); |
| shortcut_text_->SetFont(rb.GetFont(ui::ResourceBundle::MediumFont)); |
| shortcut_text_->SetHorizontalAlignment(views::Label::ALIGN_CENTER); |
| shortcut_text_->SetEnabledColor(kTextColor); |
| AddChildView(shortcut_text_); |
| |
| shortcut_image_ = new views::ImageView(); |
| shortcut_image_->SetImage(rb.GetImageSkiaNamed(IDR_AURA_SWITCH_MONITOR)); |
| AddChildView(shortcut_image_); |
| } |
| |
| virtual void Layout() { |
| const int kMessagePositionTopMargin = 40; |
| const int kShortcutPositionBottomMargin = 40; |
| const int kShortcutMargin = 4; // margin between text and image. |
| gfx::Rect b = bounds(); |
| |
| int msg_height = message_->GetHeightForWidth(b.width()); |
| message_->SetBounds( |
| 0, kMessagePositionTopMargin, bounds().width(), msg_height); |
| |
| // TODO(oshima): Figure out what to do for RTL. |
| // Align the shortcut text & image to the center. |
| gfx::Size text_size = shortcut_text_->GetPreferredSize(); |
| gfx::Size image_size = shortcut_image_->GetPreferredSize(); |
| int height = std::max(text_size.height(), image_size.height()); |
| int y = b.height() - kShortcutPositionBottomMargin - height; |
| int x = (b.width() - |
| (text_size.width() + kShortcutMargin + image_size.width())) / 2; |
| shortcut_text_->SetBounds(x, y + (height - text_size.height()) / 2, |
| text_size.width(), text_size.height()); |
| shortcut_image_->SetBounds( |
| x + text_size.width() + kShortcutMargin, |
| y + (height - image_size.height()) / 2, |
| image_size.width(), image_size.height()); |
| } |
| |
| private: |
| views::Label* message_; |
| views::Label* shortcut_text_; |
| views::ImageView* shortcut_image_; |
| |
| DISALLOW_COPY_AND_ASSIGN(SecondaryDisplayView); |
| }; |
| |
| } // namespace |
| |
| views::Widget* CreateSecondaryDisplayWidget(aura::Window* parent) { |
| views::Widget* desktop_widget = new views::Widget; |
| views::Widget::InitParams params( |
| views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); |
| SecondaryDisplayView* view = new SecondaryDisplayView(); |
| params.delegate = view; |
| params.parent = parent; |
| desktop_widget->Init(params); |
| desktop_widget->SetContentsView(view); |
| desktop_widget->Show(); |
| desktop_widget->GetNativeView()->SetName("SecondaryDisplay"); |
| return desktop_widget; |
| } |
| |
| } // namespace ash |