Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2219)

Unified Diff: ash/wm/workspace/frame_maximize_button.h

Issue 10823025: Adding new maximize menu according to spec (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Added snap_types.h Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
+ // 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_; }
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);
// 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.
+ 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);
};

Powered by Google App Engine
This is Rietveld 408576698