Chromium Code Reviews| Index: ash/wm/window_maximize.h |
| diff --git a/ash/wm/window_maximize.h b/ash/wm/window_maximize.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..0efa25a9823472d965d0282d90b7b595b1e8d405 |
| --- /dev/null |
| +++ b/ash/wm/window_maximize.h |
| @@ -0,0 +1,123 @@ |
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef ASH_WM_WINDOW_MAXIMIZE_H_ |
|
sky
2012/07/31 16:11:06
File name should match class name. So, this file s
Mr4D (OOO till 08-26)
2012/08/01 20:48:22
Done & renamed.
|
| +#define ASH_WM_WINDOW_MAXIMIZE_H_ |
| + |
| +#include "ash/ash_export.h" |
| +#include "ash/wm/workspace/frame_maximize_button.h" |
| +#include "base/memory/scoped_ptr.h" |
| +#include "ui/aura/event_filter.h" |
| + |
| +namespace base { |
| + class Timer; |
| +} |
| + |
| +namespace views { |
| + class RadialMenu; |
| +} |
| + |
| +namespace ash { |
| + |
| +// A class which shows a helper UI for the maximize button. This menu is either |
| +// - showing a bubble showing three buttons and a help. |
| +// - a helo menu (experimental behind a flag). |
|
sky
2012/07/31 16:11:06
halo?
Mr4D (OOO till 08-26)
2012/08/01 20:48:22
Done.
|
| +// The menu gets created every time after an initial delay. The delay can be |
| +// reset through a function. |
| +// Note: The EventFilter dependency is only part of the radial menu and will |
|
sky
2012/07/31 16:11:06
Why is the EventFilter part of this class? Shouldn
Mr4D (OOO till 08-26)
2012/08/01 20:48:22
No. The radial menu is a "renderer" with a hit tes
|
| +// only be used to track mouse movement when the radial menu is shown. This is |
| +// needed to update the menu in case of a non pressed mouse move. |
| +class ASH_EXPORT MaximizeBubble : public aura::EventFilter { |
| + public: |
| + explicit MaximizeBubble(FrameMaximizeButton* frame_maximize_button, |
| + bool is_maximized); |
|
sky
2012/07/31 16:11:06
indent to match previous line.
Mr4D (OOO till 08-26)
2012/08/01 20:48:22
Done.
|
| + // Called from the outside to destroy the interface to the menu and |
| + // the menu itself will delete itself then. |
| + virtual ~MaximizeBubble(); |
| + |
| + // Update the visible menu to reflect the previewed |snap_type| snapping |
| + // state. |
| + void SetMenuState(FrameMaximizeButton::SnapType snap_type); |
| + |
| + // Return a window handle underneath the snap animation window should |
| + // operate. |
| + aura::Window* GetMenuWindow(); |
| + |
| + // Reset the delay of the menu creation to the beg. |
| + void DelayCreation(); |
| + |
| + // These functions below to the protected section were added for the |
| + // experimental radial menu. |
| + |
| + // Returns true when the radial menu is turned on |
| + bool IsRadialMenu(); |
| + |
| + // Update the menu status and returns true if menu got hit and a |code| |
| + // will be set accordingly. |
| + bool SnapTypeForLocation(const gfx::Point& pt, |
| + FrameMaximizeButton::SnapType& type); |
| + |
| + // EventFilter overrides: |
| + virtual bool PreHandleKeyEvent(aura::Window* target, |
|
sky
2012/07/31 16:11:06
indent to match previous line. If indenting makes
Mr4D (OOO till 08-26)
2012/08/01 20:48:22
Done.
|
| + aura::KeyEvent* event) OVERRIDE; |
| + virtual bool PreHandleMouseEvent(aura::Window* target, |
| + aura::MouseEvent* event) OVERRIDE; |
| + virtual ui::TouchStatus PreHandleTouchEvent(aura::Window* target, |
| + aura::TouchEvent* event) OVERRIDE; |
| + virtual ui::GestureStatus PreHandleGestureEvent(aura::Window* target, |
| + aura::GestureEvent* event) OVERRIDE; |
| + |
| + protected: |
| + FrameMaximizeButton* frame_maximize_button() { |
| + return frame_maximize_button_; |
| + } |
| + |
| + // Called from the menu itself: Hides the bubble and destroys it. |
| + void CloseInternal(); |
| + |
| + // Called when a button was clicked. |
| + void OnButtonClicked(FrameMaximizeButton::SnapType snap_type); |
| + |
| + // Tell the owner that the hover status for a button has changed. |
| + // |snap_type| can be either SNAP_LEFT, SNAP_RIGHT, SNAP_MINIMIZE or |
| + // SNAP_NONE. |
| + void OnButtonHover(FrameMaximizeButton::SnapType snap_type); |
| + |
| + private: |
| + class Bubble; |
| + class BubbleContentsView; |
| + class BubbleContentsButtonRow; |
| + class BubbleMenuButton; |
| + |
| + // The function which creates the bubble once the delay is elapsed. |
| + void DelayedBubbleCreation(); |
| + |
| + // The status of the associated window: Maximized or normal. |
| + bool is_maximized() { return is_maximized_; } |
|
sky
2012/07/31 16:11:06
const
Mr4D (OOO till 08-26)
2012/08/01 20:48:22
Done.
|
| + |
| + // The owning button which is also the anchor for the menu. |
| + FrameMaximizeButton* frame_maximize_button_; |
| + |
| + // The bubble menu. |
| + Bubble* bubble_; |
| + |
| + // The alternative radial menu. |
| + views::RadialMenu* radial_menu_; |
| + |
| + // The snap type which was set by the user's mouse movement (when in |
| + // hover mode and no button was clicked). |
| + FrameMaximizeButton::SnapType current_radial_snap_hover_type_; |
| + |
| + // If true the owning window is maximized. |
| + const bool is_maximized_; |
| + |
| + // The timer for the delayed creation of the menu. |
| + scoped_ptr<base::Timer> timer_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(MaximizeBubble); |
| +}; |
| + |
| +} // namespace ash |
| + |
| +#endif // ASH_WM_WINDOW_MAXIMIZE_H_ |