OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/exo/pointer.h" | 5 #include "components/exo/pointer.h" |
6 | 6 |
7 #include "ash/public/cpp/shell_window_ids.h" | 7 #include "ash/public/cpp/shell_window_ids.h" |
8 #include "cc/output/copy_output_request.h" | 8 #include "cc/output/copy_output_request.h" |
9 #include "cc/output/copy_output_result.h" | 9 #include "cc/output/copy_output_result.h" |
10 #include "components/exo/pointer_delegate.h" | 10 #include "components/exo/pointer_delegate.h" |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 // Update hotspot. | 112 // Update hotspot. |
113 if (hotspot != hotspot_) { | 113 if (hotspot != hotspot_) { |
114 hotspot_ = hotspot; | 114 hotspot_ = hotspot; |
115 cursor_changed = true; | 115 cursor_changed = true; |
116 } | 116 } |
117 | 117 |
118 // Early out if cursor did not change. | 118 // Early out if cursor did not change. |
119 if (!cursor_changed) | 119 if (!cursor_changed) |
120 return; | 120 return; |
121 | 121 |
122 // If |surface_| is set then ascynchrounsly capture a snapshot of cursor, | 122 // If |surface_| is set then asynchronously capture a snapshot of cursor, |
123 // otherwise cancel pending capture and immediately set the cursor to "none". | 123 // otherwise cancel pending capture and immediately set the cursor to "none". |
124 if (surface_) { | 124 if (surface_) { |
125 CaptureCursor(); | 125 CaptureCursor(); |
126 } else { | 126 } else { |
127 cursor_capture_weak_ptr_factory_.InvalidateWeakPtrs(); | 127 cursor_capture_weak_ptr_factory_.InvalidateWeakPtrs(); |
128 cursor_ = ui::kCursorNone; | 128 cursor_ = ui::kCursorNone; |
129 UpdateCursor(); | 129 UpdateCursor(); |
130 } | 130 } |
131 } | 131 } |
132 | 132 |
(...skipping 26 matching lines...) Expand all Loading... |
159 delegate_->OnPointerEnter(target, event->location_f(), | 159 delegate_->OnPointerEnter(target, event->location_f(), |
160 event->button_flags()); | 160 event->button_flags()); |
161 location_ = event->location_f(); | 161 location_ = event->location_f(); |
162 focus_ = target; | 162 focus_ = target; |
163 focus_->AddSurfaceObserver(this); | 163 focus_->AddSurfaceObserver(this); |
164 focus_->RegisterCursorProvider(this); | 164 focus_->RegisterCursorProvider(this); |
165 } | 165 } |
166 delegate_->OnPointerFrame(); | 166 delegate_->OnPointerFrame(); |
167 } | 167 } |
168 | 168 |
169 if (focus_ && event->IsMouseEvent() && event->type() != ui::ET_MOUSE_EXITED) { | 169 if (!focus_) |
| 170 return; |
| 171 |
| 172 if (event->IsMouseEvent() && event->type() != ui::ET_MOUSE_EXITED) { |
170 // Generate motion event if location changed. We need to check location | 173 // Generate motion event if location changed. We need to check location |
171 // here as mouse movement can generate both "moved" and "entered" events | 174 // here as mouse movement can generate both "moved" and "entered" events |
172 // but OnPointerMotion should only be called if location changed since | 175 // but OnPointerMotion should only be called if location changed since |
173 // OnPointerEnter was called. | 176 // OnPointerEnter was called. |
174 if (!SameLocation(event, location_)) { | 177 if (!SameLocation(event, location_)) { |
175 location_ = event->location_f(); | 178 location_ = event->location_f(); |
176 delegate_->OnPointerMotion(event->time_stamp(), location_); | 179 delegate_->OnPointerMotion(event->time_stamp(), location_); |
177 delegate_->OnPointerFrame(); | 180 delegate_->OnPointerFrame(); |
178 } | 181 } |
179 } | 182 } |
180 | 183 |
181 switch (event->type()) { | 184 switch (event->type()) { |
182 case ui::ET_MOUSE_PRESSED: | 185 case ui::ET_MOUSE_PRESSED: |
183 case ui::ET_MOUSE_RELEASED: | 186 case ui::ET_MOUSE_RELEASED: { |
184 if (focus_) { | 187 delegate_->OnPointerButton(event->time_stamp(), |
185 delegate_->OnPointerButton(event->time_stamp(), | 188 event->changed_button_flags(), |
186 event->changed_button_flags(), | 189 event->type() == ui::ET_MOUSE_PRESSED); |
187 event->type() == ui::ET_MOUSE_PRESSED); | 190 delegate_->OnPointerFrame(); |
188 delegate_->OnPointerFrame(); | |
189 } | |
190 break; | 191 break; |
191 case ui::ET_SCROLL: | 192 } |
192 if (focus_) { | 193 case ui::ET_SCROLL: { |
193 ui::ScrollEvent* scroll_event = static_cast<ui::ScrollEvent*>(event); | 194 ui::ScrollEvent* scroll_event = static_cast<ui::ScrollEvent*>(event); |
194 delegate_->OnPointerScroll( | 195 delegate_->OnPointerScroll( |
195 event->time_stamp(), | 196 event->time_stamp(), |
196 gfx::Vector2dF(scroll_event->x_offset(), scroll_event->y_offset()), | 197 gfx::Vector2dF(scroll_event->x_offset(), scroll_event->y_offset()), |
197 false); | 198 false); |
198 delegate_->OnPointerFrame(); | 199 delegate_->OnPointerFrame(); |
199 } | |
200 break; | 200 break; |
201 case ui::ET_MOUSEWHEEL: | 201 } |
202 if (focus_) { | 202 case ui::ET_MOUSEWHEEL: { |
203 delegate_->OnPointerScroll( | 203 delegate_->OnPointerScroll( |
204 event->time_stamp(), | 204 event->time_stamp(), |
205 static_cast<ui::MouseWheelEvent*>(event)->offset(), true); | 205 static_cast<ui::MouseWheelEvent*>(event)->offset(), true); |
206 delegate_->OnPointerFrame(); | 206 delegate_->OnPointerFrame(); |
207 } | |
208 break; | 207 break; |
209 case ui::ET_SCROLL_FLING_START: | 208 } |
210 if (focus_) { | 209 case ui::ET_SCROLL_FLING_START: { |
211 delegate_->OnPointerScrollStop(event->time_stamp()); | 210 delegate_->OnPointerScrollStop(event->time_stamp()); |
212 delegate_->OnPointerFrame(); | 211 delegate_->OnPointerFrame(); |
213 } | |
214 break; | 212 break; |
215 case ui::ET_SCROLL_FLING_CANCEL: | 213 } |
216 if (focus_) { | 214 case ui::ET_SCROLL_FLING_CANCEL: { |
217 delegate_->OnPointerScrollCancel(event->time_stamp()); | 215 delegate_->OnPointerScrollCancel(event->time_stamp()); |
218 delegate_->OnPointerFrame(); | 216 delegate_->OnPointerFrame(); |
219 } | |
220 break; | 217 break; |
| 218 } |
221 case ui::ET_MOUSE_MOVED: | 219 case ui::ET_MOUSE_MOVED: |
222 case ui::ET_MOUSE_DRAGGED: | 220 case ui::ET_MOUSE_DRAGGED: |
223 case ui::ET_MOUSE_ENTERED: | 221 case ui::ET_MOUSE_ENTERED: |
224 case ui::ET_MOUSE_EXITED: | 222 case ui::ET_MOUSE_EXITED: |
225 case ui::ET_MOUSE_CAPTURE_CHANGED: | 223 case ui::ET_MOUSE_CAPTURE_CHANGED: |
226 break; | 224 break; |
227 default: | 225 default: |
228 NOTREACHED(); | 226 NOTREACHED(); |
229 break; | 227 break; |
230 } | 228 } |
231 | 229 |
232 if (focus_) | 230 UpdateCursorScale(); |
233 UpdateCursorScale(); | |
234 } | 231 } |
235 | 232 |
236 void Pointer::OnScrollEvent(ui::ScrollEvent* event) { | 233 void Pointer::OnScrollEvent(ui::ScrollEvent* event) { |
237 OnMouseEvent(event); | 234 OnMouseEvent(event); |
238 } | 235 } |
239 | 236 |
| 237 //////////////////////////////////////////////////////////////////////////////// |
| 238 // WMHelper::CursorObserver overrides: |
| 239 |
240 void Pointer::OnCursorSetChanged(ui::CursorSetType cursor_set) { | 240 void Pointer::OnCursorSetChanged(ui::CursorSetType cursor_set) { |
241 if (focus_) | 241 if (focus_) |
242 UpdateCursorScale(); | 242 UpdateCursorScale(); |
243 } | 243 } |
244 | 244 |
245 //////////////////////////////////////////////////////////////////////////////// | 245 //////////////////////////////////////////////////////////////////////////////// |
246 // SurfaceDelegate overrides: | 246 // SurfaceDelegate overrides: |
247 | 247 |
248 void Pointer::OnSurfaceCommit() { | 248 void Pointer::OnSurfaceCommit() { |
249 surface_->CheckIfSurfaceHierarchyNeedsCommitToNewSurfaces(); | 249 surface_->CheckIfSurfaceHierarchyNeedsCommitToNewSurfaces(); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 | 314 |
315 if (scale != cursor_scale_) { | 315 if (scale != cursor_scale_) { |
316 cursor_scale_ = scale; | 316 cursor_scale_ = scale; |
317 if (surface_) | 317 if (surface_) |
318 CaptureCursor(); | 318 CaptureCursor(); |
319 } | 319 } |
320 } | 320 } |
321 | 321 |
322 void Pointer::CaptureCursor() { | 322 void Pointer::CaptureCursor() { |
323 DCHECK(surface_); | 323 DCHECK(surface_); |
| 324 DCHECK(focus_); |
324 | 325 |
325 // Set UI scale before submitting capture request. | 326 // Set UI scale before submitting capture request. |
326 surface_->window()->layer()->SetTransform( | 327 surface_->window()->layer()->SetTransform( |
327 gfx::GetScaleTransform(gfx::Point(), cursor_scale_)); | 328 gfx::GetScaleTransform(gfx::Point(), cursor_scale_)); |
328 | 329 |
329 float primary_device_scale_factor = | 330 float primary_device_scale_factor = |
330 display::Screen::GetScreen()->GetPrimaryDisplay().device_scale_factor(); | 331 display::Screen::GetScreen()->GetPrimaryDisplay().device_scale_factor(); |
331 | 332 |
332 std::unique_ptr<cc::CopyOutputRequest> request = | 333 std::unique_ptr<cc::CopyOutputRequest> request = |
333 cc::CopyOutputRequest::CreateBitmapRequest( | 334 cc::CopyOutputRequest::CreateBitmapRequest( |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 void Pointer::UpdateCursor() { | 378 void Pointer::UpdateCursor() { |
378 DCHECK(focus_); | 379 DCHECK(focus_); |
379 | 380 |
380 aura::client::CursorClient* cursor_client = | 381 aura::client::CursorClient* cursor_client = |
381 aura::client::GetCursorClient(focus_->window()->GetRootWindow()); | 382 aura::client::GetCursorClient(focus_->window()->GetRootWindow()); |
382 if (cursor_client) | 383 if (cursor_client) |
383 cursor_client->SetCursor(cursor_); | 384 cursor_client->SetCursor(cursor_); |
384 } | 385 } |
385 | 386 |
386 } // namespace exo | 387 } // namespace exo |
OLD | NEW |