Home | History | Annotate | Download | only in views
      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