// Copyright (c) 2011 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.
//
// This file contains helper functions used by Chromium OS login.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_HELPER_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_HELPER_H_
#pragma once
#include "base/string16.h"
#include "third_party/skia/include/core/SkColor.h"
#include "views/controls/button/native_button.h"
#include "views/view.h"
#include "views/widget/widget_gtk.h"
class GURL;
namespace gfx {
class Rect;
class Size;
} // namespace gfx
namespace views {
class Label;
class MenuButton;
class Painter;
class SmoothedThrobber;
class Textfield;
class Throbber;
class Widget;
} // namespace views
namespace chromeos {
class NetworkLibrary;
// View that provides interface for start/stop throbber above the view.
class ThrobberHostView : public views::View {
public:
ThrobberHostView();
virtual ~ThrobberHostView();
// Creates throbber above the view in the right side with the default
// margin. Also places throbber in the middle of the vertical host size.
// Override |CalculateThrobberBounds| method to change the throbber placing.
virtual void StartThrobber();
// Stops the throbber.
virtual void StopThrobber();
protected:
// Calculates the bounds of the throbber relatively to the host view.
// Default position is vertically centered right side of the host view.
virtual gfx::Rect CalculateThrobberBounds(views::Throbber* throbber);
void set_host_view(views::View* host_view) {
host_view_ = host_view;
}
private:
// View to show the throbber above (default is |this|).
views::View* host_view_;
// Popup that contains the throbber.
views::Widget* throbber_widget_;
DISALLOW_COPY_AND_ASSIGN(ThrobberHostView);
};
// Creates default smoothed throbber for time consuming operations on login.
views::SmoothedThrobber* CreateDefaultSmoothedThrobber();
// Creates default throbber.
views::Throbber* CreateDefaultThrobber();
// Creates painter for login background.
views::Painter* CreateBackgroundPainter();
// Returns bounds of the screen to use for login wizard.
// The rect is centered within the default monitor and sized accordingly if
// |size| is not empty. Otherwise the whole monitor is occupied.
gfx::Rect CalculateScreenBounds(const gfx::Size& size);
// Corrects font size for Label control.
void CorrectLabelFontSize(views::Label* label);
// Corrects font size for MenuButton control.
void CorrectMenuButtonFontSize(views::MenuButton* button);
// Corrects font size for NativeButton control.
void CorrectNativeButtonFontSize(views::NativeButton* button);
// Corrects font size for Textfield control.
void CorrectTextfieldFontSize(views::Textfield* textfield);
// Sets font and corrects font size for Textfield control.
void SetAndCorrectTextfieldFont(views::Textfield* textfield,
const gfx::Font& font);
// Returns URL used for account recovery.
GURL GetAccountRecoveryHelpUrl();
// Returns name of the currently connected network.
// If there are no connected networks, returns name of the network
// that is in the "connecting" state. Otherwise empty string is returned.
// If there are multiple connected networks, network priority:
// Ethernet > WiFi > Cellular. Same for connecting network.
string16 GetCurrentNetworkName(NetworkLibrary* network_library);
// Define the constants in |login| namespace to avoid potential
// conflict with other chromeos components.
namespace login {
// Command tag for buttons on the lock screen.
enum Command {
SIGN_OUT,
};
// Gap between edge and image view, and image view and controls.
const int kBorderSize = 10;
// The size of user image.
const int kUserImageSize = 256;
// Background color of the login controls.
const SkColor kBackgroundColor = SK_ColorWHITE;
// Text color on the login controls.
const SkColor kTextColor = SK_ColorWHITE;
// Default link color on login/OOBE controls.
const SkColor kLinkColor = 0xFF0066CC;
// Right margin for placing throbber above the view.
const int kThrobberRightMargin = 10;
// Default size of the OOBE screen. Includes 10px shadow from each side.
// See rounded_rect_painter.cc for border definitions.
const int kWizardScreenWidth = 800;
const int kWizardScreenHeight = 450;
const int kScreenCornerRadius = 10;
const int kUserCornerRadius = 6;
// Username label height in different states.
const int kSelectedLabelHeight = 25;
const int kUnselectedLabelHeight = 20;
// Minimal width for the button.
const int kButtonMinWidth = 90;
class WideButton : public views::NativeButton {
public:
WideButton(views::ButtonListener* listener, const std::wstring& text)
: NativeButton(listener, text) {
CorrectNativeButtonFontSize(this);
}
~WideButton() {}
private:
virtual gfx::Size GetPreferredSize();
DISALLOW_COPY_AND_ASSIGN(WideButton);
};
} // namespace login
// Font size correction in pixels for login/oobe controls.
#if defined(CROS_FONTS_USING_BCI)
const int kFontSizeCorrectionDelta = 1;
const int kNetworkSelectionLabelFontDelta = 1;
const int kSelectedUsernameFontDelta = 1;
const int kUnselectedUsernameFontDelta = 1;
const int kWelcomeTitleFontDelta = 8;
const int kLoginTitleFontDelta = 3;
#else
const int kFontSizeCorrectionDelta = 2;
const int kNetworkSelectionLabelFontDelta = 1;
const int kSelectedUsernameFontDelta = 1;
const int kUnselectedUsernameFontDelta = 2;
const int kWelcomeTitleFontDelta = 9;
const int kLoginTitleFontDelta = 4;
#endif
// New pod sizes.
const int kNewUserPodFullWidth = 372;
const int kNewUserPodFullHeight = 372;
const int kNewUserPodSmallWidth = 360;
const int kNewUserPodSmallHeight = 322;
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_HELPER_H_