Chromium Code Reviews| Index: ash/wm/maximize_bubble_controller.h |
| diff --git a/ash/wm/maximize_bubble_controller.h b/ash/wm/maximize_bubble_controller.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..c779ad3181dff8d81c898cbdc88c1ee4355b7ebd |
| --- /dev/null |
| +++ b/ash/wm/maximize_bubble_controller.h |
| @@ -0,0 +1,88 @@ |
| +// 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_MAXIMIZE_BUBBLE_CONTROLLER_H_ |
| +#define ASH_WM_MAXIMIZE_BUBBLE_CONTROLLER_H_ |
| + |
| +#include "ash/ash_export.h" |
| +#include "ash/wm/workspace/snap_types.h" |
| +#include "base/memory/scoped_ptr.h" |
| + |
| +namespace base { |
| + class Timer; |
|
sky
2012/08/03 19:42:00
don't indent for namespaces like this (same commen
Mr4D (OOO till 08-26)
2012/08/03 20:39:28
Done.
|
| +} |
| + |
| +namespace aura { |
| + class Window; |
| +} |
| + |
| +namespace ash { |
| + |
| +class FrameMaximizeButton; |
| + |
| +// A class which shows a helper UI for the maximize button after a delay. |
| +class ASH_EXPORT MaximizeBubbleController { |
| + public: |
| + class Bubble; |
| + |
| + MaximizeBubbleController(FrameMaximizeButton* frame_maximize_button, |
| + bool is_maximized); |
| + // Called from the outside to destroy the interface to the UI visuals. |
| + // The visuals will then delete when possible (maybe asynchronously). |
| + virtual ~MaximizeBubbleController(); |
| + |
| + // Update the UI visuals to reflect the previewed |snap_type| snapping state. |
| + void SetSnapType(workspace::SnapType snap_type); |
| + |
| + // To achieve proper Z-sorting with the snap animation, this window will be |
| + // presented above the phantom window. |
| + aura::Window* GetBubbleWindow(); |
| + |
| + // Reset the delay of the menu creation (if it was not created yet). |
| + void DelayCreation(); |
| + |
| + // Called to tell the owning FrameMaximizeButton that a button was clicked. |
| + void OnButtonClicked(workspace::SnapType snap_type); |
| + |
| + // Called to tell the the owning FrameMaximizeButton 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(workspace::SnapType snap_type); |
| + |
| + // Get the owning FrameMaximizeButton. |
| + FrameMaximizeButton* frame_maximize_button() { |
| + return frame_maximize_button_; |
| + } |
| + |
| + // The status of the associated window: Maximized or normal. |
| + bool is_maximized() const { return is_maximized_; } |
| + |
| + protected: |
| + // Called from the the Bubble class to destroy itself: It tells the owning |
| + // object that it will destroy itself asynchronously. The owner will then |
| + // destroy |this|. |
| + void RequestDestructionThroughOwner(); |
| + |
| + private: |
| + // The function which creates the bubble once the delay is elapsed. |
| + void CreateBubble(); |
| + |
| + // The owning button which is also the anchor for the menu. |
| + FrameMaximizeButton* frame_maximize_button_; |
| + |
| + // The bubble menu. |
| + Bubble* bubble_; |
| + |
| + // 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(MaximizeBubbleController); |
| +}; |
| + |
| +} // namespace ash |
| + |
| +#endif // ASH_WM_MAXIMIZE_BUBBLE_CONTROLLER_H_ |