Chromium Code Reviews| Index: ash/wm/workspace/frame_maximize_button.h |
| diff --git a/ash/wm/workspace/frame_maximize_button.h b/ash/wm/workspace/frame_maximize_button.h |
| index 0124c2f4159d92d5c4799c1e4a4688c292e3a654..d704e6f2b73f6fa6889c07db3e60bfb373ae256c 100644 |
| --- a/ash/wm/workspace/frame_maximize_button.h |
| +++ b/ash/wm/workspace/frame_maximize_button.h |
| @@ -6,8 +6,10 @@ |
| #define ASH_WM_WORKSPACE_FRAME_MAXIMIZE_BUTTON_H_ |
| #include "ash/ash_export.h" |
| +#include "ash/wm/workspace/snap_types.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/timer.h" |
| +#include "ui/aura/window_observer.h" |
| #include "ui/views/controls/button/image_button.h" |
| namespace views { |
| @@ -21,13 +23,22 @@ class PhantomWindowController; |
| class SnapSizer; |
| } |
| +class MaximizeBubbleController; |
| + |
| // Button used for the maximize control on the frame. Handles snapping logic. |
| -class ASH_EXPORT FrameMaximizeButton : public views::ImageButton { |
| +class ASH_EXPORT FrameMaximizeButton : public views::ImageButton, |
| + public aura::WindowObserver { |
| public: |
| FrameMaximizeButton(views::ButtonListener* listener, |
| views::NonClientFrameView* frame); |
| virtual ~FrameMaximizeButton(); |
| + // WindowObserver overrides: |
| + virtual void OnWindowBoundsChanged(aura::Window* window, |
| + const gfx::Rect& old_bounds, |
| + const gfx::Rect& new_bounds) OVERRIDE; |
| + virtual void OnWindowDestroying(aura::Window* window) OVERRIDE; |
| + |
| // ImageButton overrides: |
| virtual bool OnMousePressed(const views::MouseEvent& event) OVERRIDE; |
| virtual void OnMouseEntered(const views::MouseEvent& event) OVERRIDE; |
| @@ -38,23 +49,23 @@ class ASH_EXPORT FrameMaximizeButton : public views::ImageButton { |
| virtual ui::GestureStatus OnGestureEvent( |
| const views::GestureEvent& event) OVERRIDE; |
| - protected: |
| - // ImageButton overrides: |
| - virtual gfx::ImageSkia GetImageToPaint() OVERRIDE; |
| + // Updates |snap_type_| based on a a given snap type. This is used by |
|
sky
2012/08/03 19:42:00
move all non-virtual method to above overrides.
Mr4D (OOO till 08-26)
2012/08/03 20:39:28
Done.
|
| + // external hover events from the button menu. |
| + void SnapButtonHovered(workspace::SnapType type); |
| + |
| + // The user clicked the |type| button and the action needs to be performed, |
| + // which will at the same time close the window. |
| + void ExecuteSnapAndCloseMenu(workspace::SnapType type); |
| + |
| + // Remove the maximize menu from the screen (and destroy it). |
| + void DestroyMaximizeMenu(); |
| + |
| + // Returns true when the user clicks and drags the button. |
| + bool is_snap_enabled() { return is_snap_enabled_; } |
|
sky
2012/08/03 19:42:00
const
Mr4D (OOO till 08-26)
2012/08/03 20:39:28
Done.
|
| private: |
| class EscapeEventFilter; |
| - // Where to snap to. |
| - enum SnapType { |
| - SNAP_LEFT, |
| - SNAP_RIGHT, |
| - SNAP_MAXIMIZE, |
| - SNAP_MINIMIZE, |
| - SNAP_RESTORE, |
| - SNAP_NONE |
| - }; |
| - |
| // Initializes the snap-gesture based on the event. This should only be called |
| // when the event is confirmed to have started a snap gesture. |
| void ProcessStartEvent(const views::LocatedEvent& event); |
| @@ -67,7 +78,7 @@ class ASH_EXPORT FrameMaximizeButton : public views::ImageButton { |
| bool ProcessEndEvent(const views::LocatedEvent& event); |
| // Cancels snap behavior. |
| - void Cancel(); |
| + void Cancel(bool keep_menu_open); |
|
sky
2012/08/03 19:42:00
Document |keep_menu_open|
Mr4D (OOO till 08-26)
2012/08/03 20:39:28
Done.
|
| // Installs/uninstalls an EventFilter to track when escape is pressed. |
| void InstallEventFilter(); |
| @@ -81,10 +92,10 @@ class ASH_EXPORT FrameMaximizeButton : public views::ImageButton { |
| void UpdateSnap(const gfx::Point& location); |
| // Returns the type of snap based on the specified location. |
| - SnapType SnapTypeForLocation(const gfx::Point& location) const; |
| + workspace::SnapType SnapTypeForLocation(const gfx::Point& location) const; |
| // Returns the bounds of the resulting window for the specified type. |
| - gfx::Rect ScreenBoundsForType(SnapType type) const; |
| + gfx::Rect ScreenBoundsForType(workspace::SnapType type) const; |
| // Converts location to screen coordinates and returns it. These are the |
| // coordinates used by the SnapSizer. |
| @@ -106,11 +117,14 @@ class ASH_EXPORT FrameMaximizeButton : public views::ImageButton { |
| // Did the user drag far enough to trigger snapping? |
| bool exceeded_drag_threshold_; |
| + // This is the window_ we are contained in. |
|
sky
2012/08/03 19:42:00
window_ -> Window
Mr4D (OOO till 08-26)
2012/08/03 20:39:28
Done.
|
| + aura::Window* window_; |
| + |
| // Location of the press. |
| gfx::Point press_location_; |
| // Current snap type. |
| - SnapType snap_type_; |
| + workspace::SnapType snap_type_; |
| scoped_ptr<internal::SnapSizer> snap_sizer_; |
| @@ -118,6 +132,8 @@ class ASH_EXPORT FrameMaximizeButton : public views::ImageButton { |
| base::OneShotTimer<FrameMaximizeButton> update_timer_; |
| + scoped_ptr<MaximizeBubbleController> maximizer_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(FrameMaximizeButton); |
| }; |