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 "chrome/browser/ui/views/exclusive_access_bubble_views.h" | 5 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h" |
6 | 6 |
| 7 #include "base/i18n/case_conversion.h" |
7 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/strings/string_split.h" |
8 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
9 #include "chrome/app/chrome_command_ids.h" | 11 #include "chrome/app/chrome_command_ids.h" |
10 #include "chrome/browser/chrome_notification_types.h" | 12 #include "chrome/browser/chrome_notification_types.h" |
11 #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" | 13 #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" |
12 #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h" | 14 #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h" |
13 #include "chrome/browser/ui/views/exclusive_access_bubble_views_context.h" | 15 #include "chrome/browser/ui/views/exclusive_access_bubble_views_context.h" |
14 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" | 16 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" |
15 #include "chrome/browser/ui/views/frame/top_container_view.h" | 17 #include "chrome/browser/ui/views/frame/top_container_view.h" |
16 #include "chrome/grit/generated_resources.h" | 18 #include "chrome/grit/generated_resources.h" |
17 #include "content/public/browser/notification_service.h" | 19 #include "content/public/browser/notification_service.h" |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 deny_button_->SetFocusable(false); | 76 deny_button_->SetFocusable(false); |
75 AddChildView(deny_button_); | 77 AddChildView(deny_button_); |
76 | 78 |
77 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, | 79 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, |
78 between_button_spacing)); | 80 between_button_spacing)); |
79 } | 81 } |
80 | 82 |
81 ButtonView::~ButtonView() { | 83 ButtonView::~ButtonView() { |
82 } | 84 } |
83 | 85 |
| 86 // Class containing the exit instruction text. Contains fancy styling on the |
| 87 // keyboard key (not just a simple label). |
| 88 class InstructionView : public views::View { |
| 89 public: |
| 90 // Creates an InstructionView with specific text. |text| may contain a single |
| 91 // segment delimited by a pair of pipes ('|'); this segment will be displayed |
| 92 // as a keyboard key. e.g., "Press |Esc| to exit" will have "Esc" rendered as |
| 93 // a key. |
| 94 InstructionView(const base::string16& text, |
| 95 const gfx::FontList& font_list, |
| 96 SkColor foreground_color, |
| 97 SkColor background_color); |
| 98 |
| 99 private: |
| 100 DISALLOW_COPY_AND_ASSIGN(InstructionView); |
| 101 }; |
| 102 |
| 103 InstructionView::InstructionView(const base::string16& text, |
| 104 const gfx::FontList& font_list, |
| 105 SkColor foreground_color, |
| 106 SkColor background_color) { |
| 107 // Parse |text|, looking for pipe-delimited segment. |
| 108 std::vector<base::string16> segments = |
| 109 base::SplitString(text, base::ASCIIToUTF16("|"), base::TRIM_WHITESPACE, |
| 110 base::SPLIT_WANT_ALL); |
| 111 // Expect 1 or 3 pieces (either no pipe-delimited segments, or one). |
| 112 DCHECK(segments.size() == 1 || segments.size() == 3); |
| 113 |
| 114 // Spacing around the escape key name. |
| 115 const int kKeyNameMarginHorizPx = 7; |
| 116 const int kKeyNameBorderPx = 2; |
| 117 const int kKeyNameCornerRadius = 2; |
| 118 const int kKeyNamePaddingPx = 7; |
| 119 |
| 120 // The |between_child_spacing| is the horizontal margin of the key name. |
| 121 views::BoxLayout* layout = new views::BoxLayout(views::BoxLayout::kHorizontal, |
| 122 0, 0, kKeyNameMarginHorizPx); |
| 123 SetLayoutManager(layout); |
| 124 |
| 125 views::Label* before_key = new views::Label(segments[0], font_list); |
| 126 before_key->SetEnabledColor(foreground_color); |
| 127 before_key->SetBackgroundColor(background_color); |
| 128 AddChildView(before_key); |
| 129 |
| 130 if (segments.size() < 3) |
| 131 return; |
| 132 |
| 133 base::string16 key = base::i18n::ToUpper(segments[1]); |
| 134 views::Label* key_name_label = new views::Label(key, font_list); |
| 135 key_name_label->SetEnabledColor(foreground_color); |
| 136 key_name_label->SetBackgroundColor(background_color); |
| 137 |
| 138 views::View* key_name = new views::View; |
| 139 views::BoxLayout* key_name_layout = new views::BoxLayout( |
| 140 views::BoxLayout::kHorizontal, kKeyNamePaddingPx, kKeyNamePaddingPx, 0); |
| 141 key_name->SetLayoutManager(key_name_layout); |
| 142 key_name->AddChildView(key_name_label); |
| 143 // The key name has a border around it. |
| 144 scoped_ptr<views::Border> border(views::Border::CreateRoundedRectBorder( |
| 145 kKeyNameBorderPx, kKeyNameCornerRadius, foreground_color)); |
| 146 key_name->SetBorder(border.Pass()); |
| 147 AddChildView(key_name); |
| 148 |
| 149 views::Label* after_key = new views::Label(segments[2], font_list); |
| 150 after_key->SetEnabledColor(foreground_color); |
| 151 after_key->SetBackgroundColor(background_color); |
| 152 AddChildView(after_key); |
| 153 } |
| 154 |
84 } // namespace | 155 } // namespace |
85 | 156 |
86 class ExclusiveAccessBubbleViews::ExclusiveAccessView | 157 class ExclusiveAccessBubbleViews::ExclusiveAccessView |
87 : public views::View, | 158 : public views::View, |
88 public views::ButtonListener, | 159 public views::ButtonListener, |
89 public views::LinkListener { | 160 public views::LinkListener { |
90 public: | 161 public: |
91 ExclusiveAccessView(ExclusiveAccessBubbleViews* bubble, | 162 ExclusiveAccessView(ExclusiveAccessBubbleViews* bubble, |
92 const base::string16& accelerator, | 163 const base::string16& accelerator, |
93 const GURL& url, | 164 const GURL& url, |
(...skipping 14 matching lines...) Expand all Loading... |
108 // Clickable hint text for exiting fullscreen mode. (Non-simplified mode | 179 // Clickable hint text for exiting fullscreen mode. (Non-simplified mode |
109 // only.) | 180 // only.) |
110 views::Link* link_; | 181 views::Link* link_; |
111 // Informational label: 'www.foo.com has gone fullscreen'. (Non-simplified | 182 // Informational label: 'www.foo.com has gone fullscreen'. (Non-simplified |
112 // mode only.) | 183 // mode only.) |
113 views::Label* message_label_; | 184 views::Label* message_label_; |
114 // Clickable buttons to exit fullscreen. (Non-simplified mode only.) | 185 // Clickable buttons to exit fullscreen. (Non-simplified mode only.) |
115 ButtonView* button_view_; | 186 ButtonView* button_view_; |
116 // Instruction for exiting fullscreen / mouse lock. Only present if there is | 187 // Instruction for exiting fullscreen / mouse lock. Only present if there is |
117 // no link or button (always present in simplified mode). | 188 // no link or button (always present in simplified mode). |
118 views::Label* exit_instruction_; | 189 InstructionView* exit_instruction_; |
119 const base::string16 browser_fullscreen_exit_accelerator_; | 190 const base::string16 browser_fullscreen_exit_accelerator_; |
120 | 191 |
121 DISALLOW_COPY_AND_ASSIGN(ExclusiveAccessView); | 192 DISALLOW_COPY_AND_ASSIGN(ExclusiveAccessView); |
122 }; | 193 }; |
123 | 194 |
124 ExclusiveAccessBubbleViews::ExclusiveAccessView::ExclusiveAccessView( | 195 ExclusiveAccessBubbleViews::ExclusiveAccessView::ExclusiveAccessView( |
125 ExclusiveAccessBubbleViews* bubble, | 196 ExclusiveAccessBubbleViews* bubble, |
126 const base::string16& accelerator, | 197 const base::string16& accelerator, |
127 const GURL& url, | 198 const GURL& url, |
128 ExclusiveAccessBubbleType bubble_type) | 199 ExclusiveAccessBubbleType bubble_type) |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 const gfx::FontList& medium_font_list = | 233 const gfx::FontList& medium_font_list = |
163 rb.GetFontList(ui::ResourceBundle::MediumFont); | 234 rb.GetFontList(ui::ResourceBundle::MediumFont); |
164 | 235 |
165 if (!ExclusiveAccessManager::IsSimplifiedFullscreenUIEnabled()) { | 236 if (!ExclusiveAccessManager::IsSimplifiedFullscreenUIEnabled()) { |
166 message_label_ = new views::Label(base::string16(), medium_font_list); | 237 message_label_ = new views::Label(base::string16(), medium_font_list); |
167 message_label_->SetEnabledColor(foreground_color); | 238 message_label_->SetEnabledColor(foreground_color); |
168 message_label_->SetBackgroundColor(background_color); | 239 message_label_->SetBackgroundColor(background_color); |
169 } | 240 } |
170 | 241 |
171 exit_instruction_ = | 242 exit_instruction_ = |
172 new views::Label(bubble_->GetInstructionText(), medium_font_list); | 243 new InstructionView(bubble_->GetInstructionText(), medium_font_list, |
173 exit_instruction_->SetEnabledColor(foreground_color); | 244 foreground_color, background_color); |
174 exit_instruction_->SetBackgroundColor(background_color); | |
175 | 245 |
176 link_ = new views::Link(); | 246 link_ = new views::Link(); |
177 link_->SetFocusable(false); | 247 link_->SetFocusable(false); |
178 #if defined(OS_CHROMEOS) | 248 #if defined(OS_CHROMEOS) |
179 // On CrOS, the link text doesn't change, since it doesn't show the shortcut. | 249 // On CrOS, the link text doesn't change, since it doesn't show the shortcut. |
180 link_->SetText(l10n_util::GetStringUTF16(IDS_EXIT_FULLSCREEN_MODE)); | 250 link_->SetText(l10n_util::GetStringUTF16(IDS_EXIT_FULLSCREEN_MODE)); |
181 #endif | 251 #endif |
182 link_->set_listener(this); | 252 link_->set_listener(this); |
183 link_->SetFontList(medium_font_list); | 253 link_->SetFontList(medium_font_list); |
184 link_->SetPressedColor(foreground_color); | 254 link_->SetPressedColor(foreground_color); |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 const content::NotificationDetails& details) { | 616 const content::NotificationDetails& details) { |
547 DCHECK_EQ(chrome::NOTIFICATION_FULLSCREEN_CHANGED, type); | 617 DCHECK_EQ(chrome::NOTIFICATION_FULLSCREEN_CHANGED, type); |
548 UpdateForImmersiveState(); | 618 UpdateForImmersiveState(); |
549 } | 619 } |
550 | 620 |
551 void ExclusiveAccessBubbleViews::OnWidgetVisibilityChanged( | 621 void ExclusiveAccessBubbleViews::OnWidgetVisibilityChanged( |
552 views::Widget* widget, | 622 views::Widget* widget, |
553 bool visible) { | 623 bool visible) { |
554 UpdateMouseWatcher(); | 624 UpdateMouseWatcher(); |
555 } | 625 } |
OLD | NEW |