C++程序  |  74行  |  2.19 KB

// Copyright (c) 2010 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.

#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USERNAME_VIEW_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_USERNAME_VIEW_H_
#pragma once

#include <string>

#include "views/controls/label.h"
#include "third_party/skia/include/core/SkBitmap.h"

// Forward declaration.
namespace gfx {
  class Rect;
}

namespace chromeos {
// Label with customized paddings and long text fade out.
class UsernameView : public views::Label {
 public:
  virtual ~UsernameView() {}

  // Returns the shaped username view to be used on the login screen. If
  // |user_small_shape| is true, then one pixel margins are used. This is done
  // to match the shape of the scaled frame of the user image. The caller gets
  // the ownership.
  // Empty |username| stands for guest user.
  static UsernameView* CreateShapedUsernameView(const std::wstring& username,
                                                bool use_small_shape);

 protected:
  // Constructs username view for the given |username|. Consider using
  // |CreateShapedUsernameView| to match the login page style.
  // Empty |username| stands for guest user.
  UsernameView(const std::wstring& username, bool use_small_shape);

  // Overriden from views::Label.
  virtual void OnPaint(gfx::Canvas* canvas);

  // True indicates that this UsernameView is used for a user pod not
  // currently selected.
  bool use_small_shape() const { return use_small_shape_; }

 private:
  // Overriden from View.
  virtual gfx::NativeCursor GetCursorForPoint(
      ui::EventType event_type,
      const gfx::Point& p);
  virtual void OnLocaleChanged();

  // Paints username to the bitmap with the bounds given.
  void PaintUsername(const gfx::Rect& bounds);

  // Holds painted username.
  scoped_ptr<SkBitmap> text_image_;

  // Holds margins width (depends on the height).
  int margin_width_;

  // Whether the shape for the smaller view should be used.
  bool use_small_shape_;

  // Whether it is a guest.
  bool is_guest_;

  DISALLOW_COPY_AND_ASSIGN(UsernameView);
};

}  // namespace chromeos

#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_USERNAME_VIEW_H_