overview_toolbar.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1// Copyright 2014 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#ifndef ATHENA_WM_OVERVIEW_TOOLBAR_H_
6#define ATHENA_WM_OVERVIEW_TOOLBAR_H_
7
8#include "base/macros.h"
9#include "base/memory/scoped_ptr.h"
10#include "ui/gfx/geometry/rect.h"
11
12namespace aura {
13class Window;
14}
15
16namespace gfx {
17class Transform;
18}
19
20namespace ui {
21class GestureEvent;
22}
23
24namespace athena {
25
26class ActionButton;
27
28// Responsible for showing action-buttons at the right edge of the screen during
29// overview mode.
30class OverviewToolbar {
31 public:
32  enum ActionType {
33    ACTION_TYPE_NONE,
34    ACTION_TYPE_CLOSE,
35    ACTION_TYPE_SPLIT,
36  };
37
38  explicit OverviewToolbar(aura::Window* container);
39  virtual ~OverviewToolbar();
40
41  ActionType current_action() const { return current_action_; }
42
43  // Returns the action the gesture-event is targeting.
44  ActionType GetHighlightAction(const ui::GestureEvent& event) const;
45
46  void SetHighlightAction(ActionType action);
47  void ShowActionButtons();
48  void HideActionButtons();
49
50  void DisableAction(ActionType action);
51
52 private:
53  void ToggleActionButtonsVisibility();
54  bool IsActionEnabled(ActionType action) const;
55  bool IsEventOverButton(ActionButton* button,
56                         const ui::GestureEvent& event) const;
57  gfx::Transform ComputeTransformFor(ActionButton* button) const;
58  void TransformButton(ActionButton* button);
59
60  bool shown_;
61  uint64_t disabled_action_bitfields_;
62  scoped_ptr<ActionButton> close_;
63  scoped_ptr<ActionButton> split_;
64  ActionType current_action_;
65  const gfx::Rect container_bounds_;
66
67  DISALLOW_COPY_AND_ASSIGN(OverviewToolbar);
68};
69
70}  // namespace athena
71
72#endif  // ATHENA_WM_OVERVIEW_TOOLBAR_H_
73