Chromium Code Reviews| 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 19 matching lines...) Expand all Loading... | |
| 37 #include "ui/base/l10n/l10n_util_win.h" | 39 #include "ui/base/l10n/l10n_util_win.h" |
| 38 #endif | 40 #endif |
| 39 | 41 |
| 40 // ExclusiveAccessView --------------------------------------------------------- | 42 // ExclusiveAccessView --------------------------------------------------------- |
| 41 | 43 |
| 42 namespace { | 44 namespace { |
| 43 | 45 |
| 44 // Space between the site info label and the buttons / link. | 46 // Space between the site info label and the buttons / link. |
| 45 const int kMiddlePaddingPx = 30; | 47 const int kMiddlePaddingPx = 30; |
| 46 | 48 |
| 49 // Spacing around the escape key name. | |
| 50 const int kKeyNameMarginHorizPx = 7; | |
| 51 const int kKeyNameMarginVertPx = 0; | |
| 52 const int kKeyNamePaddingPx = 7; | |
| 53 | |
| 47 // Opacity of the background (out of 255). Only used with | 54 // Opacity of the background (out of 255). Only used with |
| 48 // IsSimplifiedFullscreenUIEnabled. | 55 // IsSimplifiedFullscreenUIEnabled. |
| 49 const unsigned char kBackgroundOpacity = 180; | 56 const unsigned char kBackgroundOpacity = 180; |
| 50 | 57 |
| 51 class ButtonView : public views::View { | 58 class ButtonView : public views::View { |
| 52 public: | 59 public: |
| 53 ButtonView(views::ButtonListener* listener, int between_button_spacing); | 60 ButtonView(views::ButtonListener* listener, int between_button_spacing); |
| 54 ~ButtonView() override; | 61 ~ButtonView() override; |
| 55 | 62 |
| 56 // Returns an empty size when the view is not visible. | 63 // Returns an empty size when the view is not visible. |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 78 deny_button_->SetFocusable(false); | 85 deny_button_->SetFocusable(false); |
| 79 AddChildView(deny_button_); | 86 AddChildView(deny_button_); |
| 80 | 87 |
| 81 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, | 88 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, |
| 82 between_button_spacing)); | 89 between_button_spacing)); |
| 83 } | 90 } |
| 84 | 91 |
| 85 ButtonView::~ButtonView() { | 92 ButtonView::~ButtonView() { |
| 86 } | 93 } |
| 87 | 94 |
| 95 // Class containing the exit instruction text. Contains fancy styling on the | |
| 96 // keyboard key (not just a simple label). | |
| 97 class InstructionView : public views::View { | |
| 98 public: | |
| 99 // Creates an InstructionView with specific text. |text| may contain a single | |
| 100 // segment delimited by a pair of pipes ('|'); this segment will be displayed | |
| 101 // as a keyboard key. e.g., "Press |Esc| to exit" will have "Esc" rendered as | |
| 102 // a key. | |
| 103 InstructionView(const base::string16& text, | |
| 104 const gfx::FontList& font_list, | |
| 105 SkColor foreground_color, | |
| 106 SkColor background_color); | |
|
Evan Stade
2015/10/29 00:49:53
I don't think you need to pass background_color, j
Matt Giuca
2015/11/09 06:35:12
Not sure what the problem is here or what that cha
| |
| 107 | |
| 108 private: | |
| 109 views::Label* before_key_; | |
|
Evan Stade
2015/10/29 00:49:53
are these members necessary? you only use them in
Matt Giuca
2015/11/09 06:35:12
Done.
| |
| 110 views::View* key_name_; | |
| 111 views::Label* after_key_; | |
|
Evan Stade
2015/10/29 00:49:53
DISALLOW_COPY_AND_ASSIGN
Matt Giuca
2015/11/09 06:35:12
Done.
| |
| 112 }; | |
| 113 | |
| 114 InstructionView::InstructionView(const base::string16& text, | |
| 115 const gfx::FontList& font_list, | |
| 116 SkColor foreground_color, | |
| 117 SkColor background_color) | |
| 118 : before_key_(nullptr), key_name_(nullptr), after_key_(nullptr) { | |
| 119 // Parse |text|, looking for pipe-delimited segment. | |
| 120 std::vector<base::string16> segments = | |
|
Evan Stade
2015/11/04 00:37:20
technically the style guide says not to call virtu
Matt Giuca
2015/11/09 06:35:12
Which virtual method am I calling? I can't find an
Evan Stade
2015/11/09 18:51:24
ah, very true, I guess I was thinking AddChildView
Matt Giuca
2015/11/12 01:03:46
Acknowledged.
| |
| 121 base::SplitString(text, base::ASCIIToUTF16("|"), base::TRIM_WHITESPACE, | |
| 122 base::SPLIT_WANT_ALL); | |
| 123 // Expect 1 or 3 pieces (either no pipe-delimited segments, or one). | |
| 124 DCHECK(segments.size() == 1 || segments.size() == 3); | |
| 125 | |
| 126 bool has_key = segments.size() == 3; | |
| 127 int margin_vert = has_key ? kKeyNameMarginVertPx : 0; | |
|
msw
2015/10/29 17:50:02
kKeyNameMarginVertPx is also zero, perhaps |margin
Matt Giuca
2015/11/09 06:35:12
I think it makes sense to keep this (otherwise it
msw
2015/11/09 18:28:47
The 'configurable horizontal margin' you mention i
Matt Giuca
2015/11/12 01:03:46
The naming is correct, from thinking about it as C
| |
| 128 views::BoxLayout* layout = new views::BoxLayout( | |
| 129 views::BoxLayout::kHorizontal, 0, margin_vert, kKeyNameMarginHorizPx); | |
| 130 SetLayoutManager(layout); | |
| 131 layout->set_collapse_when_hidden(true); | |
| 132 | |
| 133 before_key_ = new views::Label(segments[0], font_list); | |
| 134 before_key_->SetEnabledColor(foreground_color); | |
| 135 before_key_->SetBackgroundColor(background_color); | |
| 136 AddChildView(before_key_); | |
| 137 | |
| 138 if (has_key) { | |
| 139 base::string16 key = base::i18n::ToUpper(segments[1]); | |
|
Evan Stade
2015/10/29 00:49:53
why is this ToUpper instead of making the source s
Evan Stade
2015/10/29 00:58:36
Talked to Sebastien, he says to use "Esc" (he does
Matt Giuca
2015/10/29 22:04:24
Separation of presentation from content (as you wo
| |
| 140 views::Label* key_name_label = new views::Label(key, font_list); | |
| 141 key_name_label->SetEnabledColor(foreground_color); | |
| 142 key_name_label->SetBackgroundColor(background_color); | |
| 143 | |
| 144 key_name_ = new views::View; | |
| 145 views::BoxLayout* key_name_layout = new views::BoxLayout( | |
| 146 views::BoxLayout::kHorizontal, kKeyNamePaddingPx, kKeyNamePaddingPx, 0); | |
| 147 key_name_->SetLayoutManager(key_name_layout); | |
|
msw
2015/10/29 17:50:02
Why do you need a separate layout manager for the
Matt Giuca
2015/11/09 06:35:12
Essentially what I want (in HTML/CSS terms) is for
msw
2015/11/09 18:28:47
Views have insets, which amount to padding, but th
Matt Giuca
2015/11/12 01:03:45
Acknowledged.
| |
| 148 key_name_->AddChildView(key_name_label); | |
| 149 // The key name has a border around it. | |
| 150 scoped_ptr<views::Border> border( | |
| 151 views::Border::CreateRoundedRectBorder(2, 2, foreground_color)); | |
|
Evan Stade
2015/10/29 00:49:53
Interesting how different this is to a very simila
Matt Giuca
2015/10/29 06:41:01
Do you think you could use CreateRoundedRectBorder
Evan Stade
2015/10/29 18:36:41
I think I could use it, but it doesn't buy much (C
Evan Stade
2015/10/29 21:11:30
Actually I take it back, I couldn't use this borde
Evan Stade
2015/11/04 00:37:20
are you sure this thickness matches the spec? I th
Matt Giuca
2015/11/09 06:35:12
Maybe... I tried with 1px and 2px and 1px just loo
Evan Stade
2015/11/09 18:51:25
see my comment in the other CL (which imo should b
Matt Giuca
2015/11/12 01:03:46
OK I've fixed the underlying issue in the other CL
Evan Stade
2015/11/12 01:27:37
I don't think it does match the mocks visually. Th
| |
| 152 key_name_->SetBorder(border.Pass()); | |
| 153 AddChildView(key_name_); | |
| 154 | |
| 155 after_key_ = new views::Label(segments[2], font_list); | |
| 156 after_key_->SetEnabledColor(foreground_color); | |
| 157 after_key_->SetBackgroundColor(background_color); | |
| 158 AddChildView(after_key_); | |
| 159 } | |
| 160 } | |
| 161 | |
| 88 gfx::Size ButtonView::GetPreferredSize() const { | 162 gfx::Size ButtonView::GetPreferredSize() const { |
| 89 return visible() ? views::View::GetPreferredSize() : gfx::Size(); | 163 return visible() ? views::View::GetPreferredSize() : gfx::Size(); |
| 90 } | 164 } |
| 91 | 165 |
| 92 } // namespace | 166 } // namespace |
| 93 | 167 |
| 94 class ExclusiveAccessBubbleViews::ExclusiveAccessView | 168 class ExclusiveAccessBubbleViews::ExclusiveAccessView |
| 95 : public views::View, | 169 : public views::View, |
| 96 public views::ButtonListener, | 170 public views::ButtonListener, |
| 97 public views::LinkListener { | 171 public views::LinkListener { |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 116 // Clickable hint text for exiting fullscreen mode. (Non-simplified mode | 190 // Clickable hint text for exiting fullscreen mode. (Non-simplified mode |
| 117 // only.) | 191 // only.) |
| 118 views::Link* link_; | 192 views::Link* link_; |
| 119 // Informational label: 'www.foo.com has gone fullscreen'. (Non-simplified | 193 // Informational label: 'www.foo.com has gone fullscreen'. (Non-simplified |
| 120 // mode only.) | 194 // mode only.) |
| 121 views::Label* message_label_; | 195 views::Label* message_label_; |
| 122 // Clickable buttons to exit fullscreen. (Non-simplified mode only.) | 196 // Clickable buttons to exit fullscreen. (Non-simplified mode only.) |
| 123 ButtonView* button_view_; | 197 ButtonView* button_view_; |
| 124 // Instruction for exiting fullscreen / mouse lock. Only present if there is | 198 // Instruction for exiting fullscreen / mouse lock. Only present if there is |
| 125 // no link or button (always present in simplified mode). | 199 // no link or button (always present in simplified mode). |
| 126 views::Label* exit_instruction_; | 200 InstructionView* exit_instruction_; |
| 127 const base::string16 browser_fullscreen_exit_accelerator_; | 201 const base::string16 browser_fullscreen_exit_accelerator_; |
| 128 | 202 |
| 129 DISALLOW_COPY_AND_ASSIGN(ExclusiveAccessView); | 203 DISALLOW_COPY_AND_ASSIGN(ExclusiveAccessView); |
| 130 }; | 204 }; |
| 131 | 205 |
| 132 ExclusiveAccessBubbleViews::ExclusiveAccessView::ExclusiveAccessView( | 206 ExclusiveAccessBubbleViews::ExclusiveAccessView::ExclusiveAccessView( |
| 133 ExclusiveAccessBubbleViews* bubble, | 207 ExclusiveAccessBubbleViews* bubble, |
| 134 const base::string16& accelerator, | 208 const base::string16& accelerator, |
| 135 const GURL& url, | 209 const GURL& url, |
| 136 ExclusiveAccessBubbleType bubble_type) | 210 ExclusiveAccessBubbleType bubble_type) |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 170 const gfx::FontList& medium_font_list = | 244 const gfx::FontList& medium_font_list = |
| 171 rb.GetFontList(ui::ResourceBundle::MediumFont); | 245 rb.GetFontList(ui::ResourceBundle::MediumFont); |
| 172 | 246 |
| 173 if (!ExclusiveAccessManager::IsSimplifiedFullscreenUIEnabled()) { | 247 if (!ExclusiveAccessManager::IsSimplifiedFullscreenUIEnabled()) { |
| 174 message_label_ = new views::Label(base::string16(), medium_font_list); | 248 message_label_ = new views::Label(base::string16(), medium_font_list); |
| 175 message_label_->SetEnabledColor(foreground_color); | 249 message_label_->SetEnabledColor(foreground_color); |
| 176 message_label_->SetBackgroundColor(background_color); | 250 message_label_->SetBackgroundColor(background_color); |
| 177 } | 251 } |
| 178 | 252 |
| 179 exit_instruction_ = | 253 exit_instruction_ = |
| 180 new views::Label(bubble_->GetInstructionText(), medium_font_list); | 254 new InstructionView(bubble_->GetInstructionText(), medium_font_list, |
| 181 exit_instruction_->set_collapse_when_hidden(true); | 255 foreground_color, background_color); |
| 182 | |
| 183 exit_instruction_->SetEnabledColor(foreground_color); | |
| 184 exit_instruction_->SetBackgroundColor(background_color); | |
| 185 | 256 |
| 186 link_ = new views::Link(); | 257 link_ = new views::Link(); |
| 187 link_->set_collapse_when_hidden(true); | 258 link_->set_collapse_when_hidden(true); |
| 188 link_->SetFocusable(false); | 259 link_->SetFocusable(false); |
| 189 #if defined(OS_CHROMEOS) | 260 #if defined(OS_CHROMEOS) |
| 190 // On CrOS, the link text doesn't change, since it doesn't show the shortcut. | 261 // On CrOS, the link text doesn't change, since it doesn't show the shortcut. |
| 191 link_->SetText(l10n_util::GetStringUTF16(IDS_EXIT_FULLSCREEN_MODE)); | 262 link_->SetText(l10n_util::GetStringUTF16(IDS_EXIT_FULLSCREEN_MODE)); |
| 192 #endif | 263 #endif |
| 193 link_->set_listener(this); | 264 link_->set_listener(this); |
| 194 link_->SetFontList(medium_font_list); | 265 link_->SetFontList(medium_font_list); |
| (...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 575 const content::NotificationDetails& details) { | 646 const content::NotificationDetails& details) { |
| 576 DCHECK_EQ(chrome::NOTIFICATION_FULLSCREEN_CHANGED, type); | 647 DCHECK_EQ(chrome::NOTIFICATION_FULLSCREEN_CHANGED, type); |
| 577 UpdateForImmersiveState(); | 648 UpdateForImmersiveState(); |
| 578 } | 649 } |
| 579 | 650 |
| 580 void ExclusiveAccessBubbleViews::OnWidgetVisibilityChanged( | 651 void ExclusiveAccessBubbleViews::OnWidgetVisibilityChanged( |
| 581 views::Widget* widget, | 652 views::Widget* widget, |
| 582 bool visible) { | 653 bool visible) { |
| 583 UpdateMouseWatcher(); | 654 UpdateMouseWatcher(); |
| 584 } | 655 } |
| OLD | NEW |