blob: 290b701b30bb739a9045e85ad3d2bb558bfb3303 [file] [log] [blame]
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +00001// 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_ASH_NATIVE_CURSOR_MANAGER_H_
6#define ASH_WM_ASH_NATIVE_CURSOR_MANAGER_H_
7
8#include "ash/ash_export.h"
9#include "base/basictypes.h"
10#include "base/compiler_specific.h"
11#include "base/memory/scoped_ptr.h"
Torne (Richard Coles)868fa2f2013-06-11 10:57:03 +010012#include "base/strings/string16.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000013#include "ui/gfx/native_widget_types.h"
14#include "ui/gfx/point.h"
Torne (Richard Coles)a1401312014-03-18 10:20:56 +000015#include "ui/wm/core/native_cursor_manager.h"
16#include "ui/wm/core/native_cursor_manager_delegate.h"
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000017
Bo Liu5c02ac12014-05-01 10:37:37 -070018namespace ui {
19class ImageCursors;
20}
21
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000022namespace ash {
23
24namespace test {
25class CursorManagerTestApi;
26}
27
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000028// This does the ash-specific setting of cursor details like cursor
29// visibility. It communicates back with the CursorManager through the
30// NativeCursorManagerDelegate interface, which receives messages about what
31// changes were acted on.
32class ASH_EXPORT AshNativeCursorManager
Torne (Richard Coles)a1401312014-03-18 10:20:56 +000033 : public ::wm::NativeCursorManager {
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000034 public:
35 AshNativeCursorManager();
36 virtual ~AshNativeCursorManager();
37
Torne (Richard Coles)5d1f7b12014-02-21 12:16:55 +000038 // Toggle native cursor enabled/disabled.
39 // The native cursor is enabled by default. When disabled, we hide the native
40 // cursor regardless of visibility state, and let CursorWindowManager draw
41 // the cursor.
42 void SetNativeCursorEnabled(bool enabled);
43
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000044 private:
45 friend class test::CursorManagerTestApi;
46
Torne (Richard Coles)a1401312014-03-18 10:20:56 +000047 // Overridden from ::wm::NativeCursorManager:
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000048 virtual void SetDisplay(
49 const gfx::Display& display,
Torne (Richard Coles)a1401312014-03-18 10:20:56 +000050 ::wm::NativeCursorManagerDelegate* delegate) OVERRIDE;
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000051 virtual void SetCursor(
52 gfx::NativeCursor cursor,
Torne (Richard Coles)a1401312014-03-18 10:20:56 +000053 ::wm::NativeCursorManagerDelegate* delegate) OVERRIDE;
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000054 virtual void SetVisibility(
55 bool visible,
Torne (Richard Coles)a1401312014-03-18 10:20:56 +000056 ::wm::NativeCursorManagerDelegate* delegate) OVERRIDE;
Torne (Richard Coles)424c4d72013-08-30 15:14:49 +010057 virtual void SetCursorSet(
58 ui::CursorSetType cursor_set,
Torne (Richard Coles)a1401312014-03-18 10:20:56 +000059 ::wm::NativeCursorManagerDelegate* delegate) OVERRIDE;
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000060 virtual void SetMouseEventsEnabled(
61 bool enabled,
Torne (Richard Coles)a1401312014-03-18 10:20:56 +000062 ::wm::NativeCursorManagerDelegate* delegate) OVERRIDE;
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000063
64 // The cursor location where the cursor was disabled.
65 gfx::Point disabled_cursor_location_;
66
Torne (Richard Coles)5d1f7b12014-02-21 12:16:55 +000067 bool native_cursor_enabled_;
68
Bo Liu5c02ac12014-05-01 10:37:37 -070069 scoped_ptr<ui::ImageCursors> image_cursors_;
Torne (Richard Coles)2a99a7e2013-03-28 15:31:22 +000070
71 DISALLOW_COPY_AND_ASSIGN(AshNativeCursorManager);
72};
73
74} // namespace ash
75
76#endif // ASH_WM_ASH_NATIVE_CURSOR_MANAGER_H_