1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
// Copyright (c) 2012 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 ASH_LAUNCHER_LAUNCHER_BUTTON_H_
#define ASH_LAUNCHER_LAUNCHER_BUTTON_H_
#pragma once
#include "ui/views/controls/button/custom_button.h"
#include "ui/views/controls/image_view.h"
namespace ash {
namespace internal {
class LauncherButtonHost;
// Button used for items on the launcher, except for the AppList.
class LauncherButton : public views::CustomButton {
public:
// Used to indicate the current state of the button.
enum State {
STATE_NORMAL = 0,
STATE_HOVERED = 1 << 0,
STATE_RUNNING = 1 << 1,
STATE_ACTIVE = 1 << 2
};
virtual ~LauncherButton();
// Called to create an instance of a LauncherButton.
static LauncherButton* Create(views::ButtonListener* listener,
LauncherButtonHost* host);
// Sets the image to display for this entry.
void SetImage(const SkBitmap& image);
// |state| is or'd into the current state.
void AddState(State state);
void ClearState(State state);
int state() const { return state_; }
// Returns the bounds of the icon.
gfx::Rect GetIconBounds() const;
protected:
LauncherButton(views::ButtonListener* listener, LauncherButtonHost* host);
// Class that draws the icon part of a button, so it can be animated
// independently of the rest. This can be subclassed to provide a custom
// implementation, by overriding CreateIconView().
class IconView : public views::ImageView {
public:
IconView();
virtual ~IconView();
virtual bool HitTest(const gfx::Point& l) const OVERRIDE;
void set_icon_size(int icon_size) { icon_size_ = icon_size; }
int icon_size() const { return icon_size_; }
private:
// Set to non-zero to force icons to be resized to fit within a square,
// while maintaining original proportions.
int icon_size_;
DISALLOW_COPY_AND_ASSIGN(IconView);
};
// View overrides:
virtual bool OnMousePressed(const views::MouseEvent& event) OVERRIDE;
virtual void OnMouseReleased(const views::MouseEvent& event) OVERRIDE;
virtual void OnMouseCaptureLost() OVERRIDE;
virtual bool OnMouseDragged(const views::MouseEvent& event) OVERRIDE;
virtual void OnMouseEntered(const views::MouseEvent& event) OVERRIDE;
virtual void OnMouseExited(const views::MouseEvent& event) OVERRIDE;
virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
virtual void Layout() OVERRIDE;
virtual bool GetTooltipText(const gfx::Point& p,
string16* tooltip) const OVERRIDE;
// Override for custom initialization.
virtual void Init();
// Override to subclass IconView.
virtual IconView* CreateIconView();
IconView* icon_view() const { return icon_view_; }
LauncherButtonHost* host() const { return host_; }
private:
// Updates the parts of the button to reflect the current state_. This may
// add or remove views, layout and paint.
void UpdateState();
LauncherButtonHost* host_;
IconView* icon_view_;
// Draws a bar underneath the image to represent the state of the application.
views::View* bar_;
// The current state of the application, multiple values of AppState are or'd
// together.
int state_;
DISALLOW_COPY_AND_ASSIGN(LauncherButton);
};
} // namespace internal
} // namespace ash
#endif // ASH_LAUNCHER_APP_LAUNCHER_BUTTON_H_
|