• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
13 namespace gfx {
14 class Screen;
15 }
16 
17 namespace message_center {
18 namespace test {
19 class MessagePopupCollectionTest;
20 }
21 
22 // The PopupAlignmentDelegate for non-ash Windows/Linux desktop.
23 class 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