OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "services/ui/ws/threaded_image_cursors.h" | 5 #include "services/ui/ws/threaded_image_cursors.h" |
6 #include "base/bind.h" | 6 #include "base/bind.h" |
7 #include "base/single_thread_task_runner.h" | 7 #include "base/single_thread_task_runner.h" |
8 #include "base/threading/thread_task_runner_handle.h" | 8 #include "base/threading/thread_task_runner_handle.h" |
| 9 #include "ui/ozone/public/cursor_factory_ozone.h" |
9 #include "ui/platform_window/platform_window.h" | 10 #include "ui/platform_window/platform_window.h" |
10 | 11 |
11 namespace ui { | 12 namespace ui { |
12 namespace ws { | 13 namespace ws { |
13 namespace { | 14 namespace { |
14 | 15 |
| 16 void TakeOwnershipOnResourceThread( |
| 17 base::WeakPtr<ui::ImageCursorsHolder> image_cursors_holder_weak_ptr, |
| 18 std::unique_ptr<ui::ImageCursors> image_cursors) { |
| 19 if (image_cursors_holder_weak_ptr) |
| 20 image_cursors_holder_weak_ptr->SetImageCursors(std::move(image_cursors)); |
| 21 } |
| 22 |
15 // Executed on |resource_task_runner_|. | 23 // Executed on |resource_task_runner_|. |
16 void SetDisplayOnResourceThread( | 24 void SetDisplayOnResourceThread( |
17 base::WeakPtr<ui::ImageCursors> image_cursors_weak_ptr, | 25 base::WeakPtr<ui::ImageCursorsHolder> image_cursors_holder_weak_ptr, |
18 const display::Display& display, | 26 const display::Display& display, |
19 float scale_factor) { | 27 float scale_factor) { |
20 if (image_cursors_weak_ptr) | 28 if (image_cursors_holder_weak_ptr) { |
21 image_cursors_weak_ptr->SetDisplay(display, scale_factor); | 29 image_cursors_holder_weak_ptr->GetImageCursors()->SetDisplay(display, |
| 30 scale_factor); |
| 31 } |
22 } | 32 } |
23 | 33 |
24 void SetCursorSizeOnResourceThread( | 34 void SetCursorSizeOnResourceThread( |
25 base::WeakPtr<ui::ImageCursors> image_cursors_weak_ptr, | 35 base::WeakPtr<ui::ImageCursorsHolder> image_cursors_holder_weak_ptr, |
26 CursorSize cursor_size) { | 36 CursorSize cursor_size) { |
27 if (image_cursors_weak_ptr) | 37 if (image_cursors_holder_weak_ptr) { |
28 image_cursors_weak_ptr->SetCursorSize(cursor_size); | 38 image_cursors_holder_weak_ptr->GetImageCursors()->SetCursorSize( |
| 39 cursor_size); |
| 40 } |
29 } | 41 } |
30 | 42 |
31 // Executed on |resource_task_runner_|. Sets cursor type on | 43 // Executed on |resource_task_runner_|. Sets cursor type on |
32 // |image_cursors_weak_ptr|, and then schedules a task on |ws_task_runner| to | 44 // |image_cursors_weak_ptr|, and then schedules a task on |ws_task_runner| to |
33 // set the corresponding PlatformCursor on the provided |platform_window|. | 45 // set the corresponding PlatformCursor on the provided |platform_window|. |
34 // |platform_window| pointer needs to be valid while | 46 // |platform_window| pointer needs to be valid while |
35 // |threaded_image_cursors_weak_ptr| is not invalidated. | 47 // |threaded_image_cursors_weak_ptr| is not invalidated. |
36 void SetCursorOnResourceThread( | 48 void SetCursorOnResourceThread( |
37 base::WeakPtr<ui::ImageCursors> image_cursors_weak_ptr, | 49 base::WeakPtr<ui::ImageCursorsHolder> image_cursors_holder_weak_ptr, |
38 ui::CursorType cursor_type, | 50 ui::CursorType cursor_type, |
39 ui::PlatformWindow* platform_window, | 51 ui::PlatformWindow* platform_window, |
40 scoped_refptr<base::SingleThreadTaskRunner> ws_task_runner, | 52 scoped_refptr<base::SingleThreadTaskRunner> ws_task_runner, |
41 base::WeakPtr<ThreadedImageCursors> threaded_image_cursors_weak_ptr) { | 53 base::WeakPtr<ThreadedImageCursors> threaded_image_cursors_weak_ptr) { |
42 if (image_cursors_weak_ptr) { | 54 if (image_cursors_holder_weak_ptr) { |
43 ui::Cursor native_cursor(cursor_type); | 55 ui::Cursor native_cursor(cursor_type); |
44 image_cursors_weak_ptr->SetPlatformCursor(&native_cursor); | 56 image_cursors_holder_weak_ptr->GetImageCursors()->SetPlatformCursor( |
| 57 &native_cursor); |
45 ws_task_runner->PostTask( | 58 ws_task_runner->PostTask( |
46 FROM_HERE, base::Bind(&ThreadedImageCursors::SetCursorOnPlatformWindow, | 59 FROM_HERE, base::Bind(&ThreadedImageCursors::SetCursorOnPlatformWindow, |
47 threaded_image_cursors_weak_ptr, | 60 threaded_image_cursors_weak_ptr, |
48 native_cursor.platform(), platform_window)); | 61 native_cursor.platform(), platform_window)); |
49 } | 62 } |
50 } | 63 } |
51 | 64 |
52 } // namespace | 65 } // namespace |
53 | 66 |
54 ThreadedImageCursors::ThreadedImageCursors( | 67 ThreadedImageCursors::ThreadedImageCursors( |
55 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_runner, | 68 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_runner, |
56 base::WeakPtr<ui::ImageCursors> image_cursors_weak_ptr) | 69 base::WeakPtr<ui::ImageCursorsHolder> image_cursors_holder_weak_ptr) |
57 : resource_task_runner_(resource_task_runner), | 70 : resource_task_runner_(resource_task_runner), |
58 image_cursors_weak_ptr_(image_cursors_weak_ptr), | 71 image_cursors_holder_weak_ptr_(image_cursors_holder_weak_ptr), |
59 weak_ptr_factory_(this) { | 72 weak_ptr_factory_(this) { |
60 DCHECK(resource_task_runner_); | 73 DCHECK(resource_task_runner_); |
61 ws_task_runner_ = base::ThreadTaskRunnerHandle::Get(); | 74 ws_task_runner_ = base::ThreadTaskRunnerHandle::Get(); |
| 75 std::unique_ptr<ui::ImageCursors> image_cursors = |
| 76 base::MakeUnique<ui::ImageCursors>(); |
| 77 image_cursors->Initialize(); |
| 78 resource_task_runner_->PostTask( |
| 79 FROM_HERE, |
| 80 base::Bind(&TakeOwnershipOnResourceThread, image_cursors_holder_weak_ptr_, |
| 81 base::Passed(std::move(image_cursors)))); |
62 } | 82 } |
63 | 83 |
64 ThreadedImageCursors::~ThreadedImageCursors() {} | 84 ThreadedImageCursors::~ThreadedImageCursors() {} |
65 | 85 |
66 void ThreadedImageCursors::SetDisplay(const display::Display& display, | 86 void ThreadedImageCursors::SetDisplay(const display::Display& display, |
67 float scale_factor) { | 87 float scale_factor) { |
68 resource_task_runner_->PostTask( | 88 resource_task_runner_->PostTask( |
69 FROM_HERE, base::Bind(&SetDisplayOnResourceThread, | 89 FROM_HERE, |
70 image_cursors_weak_ptr_, display, scale_factor)); | 90 base::Bind(&SetDisplayOnResourceThread, image_cursors_holder_weak_ptr_, |
| 91 display, scale_factor)); |
71 } | 92 } |
72 | 93 |
73 void ThreadedImageCursors::SetCursorSize(CursorSize cursor_size) { | 94 void ThreadedImageCursors::SetCursorSize(CursorSize cursor_size) { |
74 resource_task_runner_->PostTask( | 95 resource_task_runner_->PostTask( |
75 FROM_HERE, base::Bind(&SetCursorSizeOnResourceThread, | 96 FROM_HERE, base::Bind(&SetCursorSizeOnResourceThread, |
76 image_cursors_weak_ptr_, cursor_size)); | 97 image_cursors_holder_weak_ptr_, cursor_size)); |
77 } | 98 } |
78 | 99 |
79 void ThreadedImageCursors::SetCursor(ui::CursorType cursor_type, | 100 void ThreadedImageCursors::SetCursor(ui::CursorType cursor_type, |
80 ui::PlatformWindow* platform_window) { | 101 ui::PlatformWindow* platform_window) { |
81 resource_task_runner_->PostTask( | 102 resource_task_runner_->PostTask( |
82 FROM_HERE, base::Bind(&SetCursorOnResourceThread, image_cursors_weak_ptr_, | 103 FROM_HERE, |
83 cursor_type, platform_window, ws_task_runner_, | 104 base::Bind(&SetCursorOnResourceThread, image_cursors_holder_weak_ptr_, |
84 weak_ptr_factory_.GetWeakPtr())); | 105 cursor_type, platform_window, ws_task_runner_, |
| 106 weak_ptr_factory_.GetWeakPtr())); |
85 } | 107 } |
86 | 108 |
87 void ThreadedImageCursors::SetCursorOnPlatformWindow( | 109 void ThreadedImageCursors::SetCursorOnPlatformWindow( |
88 ui::PlatformCursor platform_cursor, | 110 ui::PlatformCursor platform_cursor, |
89 ui::PlatformWindow* platform_window) { | 111 ui::PlatformWindow* platform_window) { |
90 platform_window->SetCursor(platform_cursor); | 112 platform_window->SetCursor(platform_cursor); |
91 } | 113 } |
92 | 114 |
93 } // namespace ws | 115 } // namespace ws |
94 } // namespace ui | 116 } // namespace ui |
OLD | NEW |