• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 //
5 // This file contains helper functions used by Chromium OS login.
6 
7 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_HELPER_H_
8 #define CHROME_BROWSER_CHROMEOS_LOGIN_HELPER_H_
9 #pragma once
10 
11 #include "base/string16.h"
12 #include "third_party/skia/include/core/SkColor.h"
13 #include "views/controls/button/native_button.h"
14 #include "views/view.h"
15 #include "views/widget/widget_gtk.h"
16 
17 class GURL;
18 
19 namespace gfx {
20 class Rect;
21 class Size;
22 }  // namespace gfx
23 
24 namespace views {
25 class Label;
26 class MenuButton;
27 class Painter;
28 class SmoothedThrobber;
29 class Textfield;
30 class Throbber;
31 class Widget;
32 }  // namespace views
33 
34 namespace chromeos {
35 
36 class NetworkLibrary;
37 
38 // View that provides interface for start/stop throbber above the view.
39 class ThrobberHostView : public views::View {
40  public:
41   ThrobberHostView();
42   virtual ~ThrobberHostView();
43 
44   // Creates throbber above the view in the right side with the default
45   // margin. Also places throbber in the middle of the vertical host size.
46   // Override |CalculateThrobberBounds| method to change the throbber placing.
47   virtual void StartThrobber();
48 
49   // Stops the throbber.
50   virtual void StopThrobber();
51 
52  protected:
53   // Calculates the bounds of the throbber relatively to the host view.
54   // Default position is vertically centered right side of the host view.
55   virtual gfx::Rect CalculateThrobberBounds(views::Throbber* throbber);
56 
set_host_view(views::View * host_view)57   void set_host_view(views::View* host_view) {
58     host_view_ = host_view;
59   }
60 
61  private:
62   // View to show the throbber above (default is |this|).
63   views::View* host_view_;
64 
65   // Popup that contains the throbber.
66   views::Widget* throbber_widget_;
67 
68   DISALLOW_COPY_AND_ASSIGN(ThrobberHostView);
69 };
70 
71 // Creates default smoothed throbber for time consuming operations on login.
72 views::SmoothedThrobber* CreateDefaultSmoothedThrobber();
73 
74 // Creates default throbber.
75 views::Throbber* CreateDefaultThrobber();
76 
77 // Creates painter for login background.
78 views::Painter* CreateBackgroundPainter();
79 
80 // Returns bounds of the screen to use for login wizard.
81 // The rect is centered within the default monitor and sized accordingly if
82 // |size| is not empty. Otherwise the whole monitor is occupied.
83 gfx::Rect CalculateScreenBounds(const gfx::Size& size);
84 
85 // Corrects font size for Label control.
86 void CorrectLabelFontSize(views::Label* label);
87 
88 // Corrects font size for MenuButton control.
89 void CorrectMenuButtonFontSize(views::MenuButton* button);
90 
91 // Corrects font size for NativeButton control.
92 void CorrectNativeButtonFontSize(views::NativeButton* button);
93 
94 // Corrects font size for Textfield control.
95 void CorrectTextfieldFontSize(views::Textfield* textfield);
96 
97 // Sets font and corrects font size for Textfield control.
98 void SetAndCorrectTextfieldFont(views::Textfield* textfield,
99                                 const gfx::Font& font);
100 
101 // Returns URL used for account recovery.
102 GURL GetAccountRecoveryHelpUrl();
103 
104 // Returns name of the currently connected network.
105 // If there are no connected networks, returns name of the network
106 // that is in the "connecting" state. Otherwise empty string is returned.
107 // If there are multiple connected networks, network priority:
108 // Ethernet > WiFi > Cellular. Same for connecting network.
109 string16 GetCurrentNetworkName(NetworkLibrary* network_library);
110 
111 // Define the constants in |login| namespace to avoid potential
112 // conflict with other chromeos components.
113 namespace login {
114 
115 // Command tag for buttons on the lock screen.
116 enum Command {
117   SIGN_OUT,
118 };
119 
120 // Gap between edge and image view, and image view and controls.
121 const int kBorderSize = 10;
122 
123 // The size of user image.
124 const int kUserImageSize = 256;
125 
126 // Background color of the login controls.
127 const SkColor kBackgroundColor = SK_ColorWHITE;
128 
129 // Text color on the login controls.
130 const SkColor kTextColor = SK_ColorWHITE;
131 
132 // Default link color on login/OOBE controls.
133 const SkColor kLinkColor = 0xFF0066CC;
134 
135 // Right margin for placing throbber above the view.
136 const int kThrobberRightMargin = 10;
137 
138 // Default size of the OOBE screen. Includes 10px shadow from each side.
139 // See rounded_rect_painter.cc for border definitions.
140 const int kWizardScreenWidth = 800;
141 const int kWizardScreenHeight = 450;
142 
143 const int kScreenCornerRadius = 10;
144 const int kUserCornerRadius = 6;
145 
146 // Username label height in different states.
147 const int kSelectedLabelHeight = 25;
148 const int kUnselectedLabelHeight = 20;
149 
150 // Minimal width for the button.
151 const int kButtonMinWidth = 90;
152 
153 class WideButton : public views::NativeButton {
154  public:
WideButton(views::ButtonListener * listener,const std::wstring & text)155   WideButton(views::ButtonListener* listener, const std::wstring& text)
156       : NativeButton(listener, text) {
157     CorrectNativeButtonFontSize(this);
158   }
159 
~WideButton()160   ~WideButton() {}
161 
162  private:
163   virtual gfx::Size GetPreferredSize();
164 
165   DISALLOW_COPY_AND_ASSIGN(WideButton);
166 };
167 
168 }  // namespace login
169 
170 // Font size correction in pixels for login/oobe controls.
171 #if defined(CROS_FONTS_USING_BCI)
172 const int kFontSizeCorrectionDelta = 1;
173 const int kNetworkSelectionLabelFontDelta = 1;
174 const int kSelectedUsernameFontDelta = 1;
175 const int kUnselectedUsernameFontDelta = 1;
176 const int kWelcomeTitleFontDelta = 8;
177 const int kLoginTitleFontDelta = 3;
178 #else
179 const int kFontSizeCorrectionDelta = 2;
180 const int kNetworkSelectionLabelFontDelta = 1;
181 const int kSelectedUsernameFontDelta = 1;
182 const int kUnselectedUsernameFontDelta = 2;
183 const int kWelcomeTitleFontDelta = 9;
184 const int kLoginTitleFontDelta = 4;
185 #endif
186 
187 // New pod sizes.
188 const int kNewUserPodFullWidth = 372;
189 const int kNewUserPodFullHeight = 372;
190 const int kNewUserPodSmallWidth = 360;
191 const int kNewUserPodSmallHeight = 322;
192 
193 }  // namespace chromeos
194 
195 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_HELPER_H_
196