Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(356)

Side by Side Diff: chrome/browser/ui/views/exclusive_access_bubble_views.cc

Issue 1421813005: Fullscreen bubble: Draw a white box around "ESC" in "Press ESC to exit". (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@border-roundedrect
Patch Set: Respond to comments. Also early-return. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/ui/exclusive_access/exclusive_access_bubble.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/exclusive_access/exclusive_access_bubble.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698