Home | History | Annotate | Download | only in wm
      1 // Copyright (c) 2012 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 ASH_WM_PARTIAL_SCREENSHOT_VIEW_H_
      6 #define ASH_WM_PARTIAL_SCREENSHOT_VIEW_H_
      7 
      8 #include <vector>
      9 
     10 #include "ash/ash_export.h"
     11 #include "base/compiler_specific.h"
     12 #include "base/gtest_prod_util.h"
     13 #include "ui/gfx/point.h"
     14 #include "ui/views/widget/widget_delegate.h"
     15 
     16 namespace ash {
     17 class ScreenshotDelegate;
     18 
     19 // The view of taking partial screenshot, i.e.: drawing region
     20 // rectangles during drag, and changing the mouse cursor to indicate
     21 // the current mode.
     22 class ASH_EXPORT PartialScreenshotView : public views::WidgetDelegateView {
     23  public:
     24   // Starts the UI for taking partial screenshot; dragging to select a region.
     25   // PartialScreenshotViews manage their own lifetime so caller must not delete
     26   // the returned PartialScreenshotViews.
     27   static std::vector<PartialScreenshotView*>
     28       StartPartialScreenshot(ScreenshotDelegate* screenshot_delegate);
     29 
     30  private:
     31   FRIEND_TEST_ALL_PREFIXES(PartialScreenshotViewTest, BasicMouse);
     32   FRIEND_TEST_ALL_PREFIXES(PartialScreenshotViewTest, BasicTouch);
     33 
     34   class OverlayDelegate;
     35 
     36   PartialScreenshotView(OverlayDelegate* overlay_delegate,
     37                         ScreenshotDelegate* screenshot_delegate);
     38   virtual ~PartialScreenshotView();
     39 
     40   // Initializes partial screenshot UI widget for |root_window|.
     41   void Init(aura::Window* root_window);
     42 
     43   // Returns the currently selected region.
     44   gfx::Rect GetScreenshotRect() const;
     45 
     46   void OnSelectionStarted(const gfx::Point& position);
     47   void OnSelectionChanged(const gfx::Point& position);
     48   void OnSelectionFinished();
     49 
     50   // Overridden from views::View:
     51   virtual gfx::NativeCursor GetCursor(const ui::MouseEvent& event) OVERRIDE;
     52   virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
     53   virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
     54   virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE;
     55   virtual bool OnMouseWheel(const ui::MouseWheelEvent& event) OVERRIDE;
     56   virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE;
     57   virtual void OnMouseCaptureLost() OVERRIDE;
     58   virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
     59 
     60   bool is_dragging_;
     61   gfx::Point start_position_;
     62   gfx::Point current_position_;
     63 
     64   // The delegate to receive Cancel. No ownership.
     65   OverlayDelegate* overlay_delegate_;
     66 
     67   // ScreenshotDelegate to take the actual screenshot. No ownership.
     68   ScreenshotDelegate* screenshot_delegate_;
     69 
     70   DISALLOW_COPY_AND_ASSIGN(PartialScreenshotView);
     71 };
     72 
     73 }  // namespace ash
     74 
     75 #endif  // #ifndef ASH_WM_PARTIAL_SCREENSHOT_VIEW_H_
     76