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 UI_MESSAGE_CENTER_VIEWS_DESKTOP_POPUP_ALIGNMENT_DELEGATE_H_
6#define UI_MESSAGE_CENTER_VIEWS_DESKTOP_POPUP_ALIGNMENT_DELEGATE_H_
7
8#include "base/macros.h"
9#include "ui/gfx/display_observer.h"
10#include "ui/gfx/geometry/rect.h"
11#include "ui/message_center/views/popup_alignment_delegate.h"
12
13namespace gfx {
14class Screen;
15}
16
17namespace message_center {
18namespace test {
19class MessagePopupCollectionTest;
20}
21
22// The PopupAlignmentDelegate for non-ash Windows/Linux desktop.
23class MESSAGE_CENTER_EXPORT DesktopPopupAlignmentDelegate
24    : public PopupAlignmentDelegate,
25      public gfx::DisplayObserver {
26 public:
27  DesktopPopupAlignmentDelegate();
28  virtual ~DesktopPopupAlignmentDelegate();
29
30  void StartObserving(gfx::Screen* screen);
31
32  // Overridden from PopupAlignmentDelegate:
33  virtual int GetToastOriginX(const gfx::Rect& toast_bounds) const OVERRIDE;
34  virtual int GetBaseLine() const OVERRIDE;
35  virtual int GetWorkAreaBottom() const OVERRIDE;
36  virtual bool IsTopDown() const OVERRIDE;
37  virtual bool IsFromLeft() const OVERRIDE;
38  virtual void RecomputeAlignment(const gfx::Display& display) OVERRIDE;
39
40 private:
41  friend class test::MessagePopupCollectionTest;
42
43  enum PopupAlignment {
44    POPUP_ALIGNMENT_TOP = 1 << 0,
45    POPUP_ALIGNMENT_LEFT = 1 << 1,
46    POPUP_ALIGNMENT_BOTTOM = 1 << 2,
47    POPUP_ALIGNMENT_RIGHT = 1 << 3,
48  };
49
50  // Overridden from gfx::DisplayObserver:
51  virtual void OnDisplayAdded(const gfx::Display& new_display) OVERRIDE;
52  virtual void OnDisplayRemoved(const gfx::Display& old_display) OVERRIDE;
53  virtual void OnDisplayMetricsChanged(const gfx::Display& display,
54                                       uint32_t metrics) OVERRIDE;
55
56  int32_t alignment_;
57  int64_t display_id_;
58  gfx::Screen* screen_;
59  gfx::Rect work_area_;
60
61  DISALLOW_COPY_AND_ASSIGN(DesktopPopupAlignmentDelegate);
62};
63
64}  // namespace message_center
65
66#endif  // UI_MESSAGE_CENTER_VIEWS_DESKTOP_POPUP_ALIGNMENT_DELEGATE_H_
67