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/common/display/display_info.h" | 7 #include "ash/common/display/display_info.h" |
8 #include "ash/common/shell_window_ids.h" | 8 #include "ash/common/shell_window_ids.h" |
9 #include "ash/display/display_manager.h" | 9 #include "ash/display/display_manager.h" |
10 #include "components/exo/pointer_delegate.h" | 10 #include "components/exo/pointer_delegate.h" |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
96 // Update hotspot and show cursor surface if not already visible. | 96 // Update hotspot and show cursor surface if not already visible. |
97 hotspot_ = hotspot; | 97 hotspot_ = hotspot; |
98 if (surface_) { | 98 if (surface_) { |
99 surface_->window()->SetBounds( | 99 surface_->window()->SetBounds( |
100 gfx::Rect(gfx::Point() - hotspot_.OffsetFromOrigin(), | 100 gfx::Rect(gfx::Point() - hotspot_.OffsetFromOrigin(), |
101 surface_->window()->layer()->size())); | 101 surface_->window()->layer()->size())); |
102 if (!surface_->window()->IsVisible()) | 102 if (!surface_->window()->IsVisible()) |
103 surface_->window()->Show(); | 103 surface_->window()->Show(); |
104 | 104 |
105 // Show widget now that cursor has been defined. | 105 // Show widget now that cursor has been defined. |
106 if (!widget_->IsVisible()) | 106 if (!widget_->IsVisible() && !is_direct_input_) |
107 widget_->Show(); | 107 widget_->Show(); |
108 } | 108 } |
109 | 109 |
110 // Register pointer as cursor provider now that the cursor for |focus_| has | 110 // Register pointer as cursor provider now that the cursor for |focus_| has |
111 // been defined. | 111 // been defined. |
112 focus_->RegisterCursorProvider(this); | 112 focus_->RegisterCursorProvider(this); |
113 | 113 |
114 // Update cursor in case the registration of pointer as cursor provider | 114 // Update cursor in case the registration of pointer as cursor provider |
115 // caused the cursor to change. | 115 // caused the cursor to change. |
116 aura::client::CursorClient* cursor_client = | 116 aura::client::CursorClient* cursor_client = |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
244 break; | 244 break; |
245 case ui::ET_MOUSE_ENTERED: | 245 case ui::ET_MOUSE_ENTERED: |
246 case ui::ET_MOUSE_EXITED: | 246 case ui::ET_MOUSE_EXITED: |
247 case ui::ET_MOUSE_CAPTURE_CHANGED: | 247 case ui::ET_MOUSE_CAPTURE_CHANGED: |
248 break; | 248 break; |
249 default: | 249 default: |
250 NOTREACHED(); | 250 NOTREACHED(); |
251 break; | 251 break; |
252 } | 252 } |
253 | 253 |
254 if (focus_ && (event->flags() & ui::EF_IS_SYNTHESIZED) == 0) | |
255 is_direct_input_ = (event->flags() & ui::EF_DIRECT_INPUT) != 0; | |
reveman
2016/08/30 00:40:49
should we really take "focus_" into account here?
denniskempin
2016/08/30 00:47:25
I removed the check for focus_, but we do need th
reveman
2016/08/30 00:49:43
Got it. Makes sense.
| |
256 | |
254 // Update cursor widget to reflect current focus and pointer location. | 257 // Update cursor widget to reflect current focus and pointer location. |
255 if (focus_) { | 258 if (focus_ && !is_direct_input_) { |
256 if (!widget_) | 259 if (!widget_) |
257 CreatePointerWidget(); | 260 CreatePointerWidget(); |
258 | 261 |
259 // Update cursor location if mouse event caused it to change. | 262 // Update cursor location if mouse event caused it to change. |
260 gfx::Point mouse_location = aura::Env::GetInstance()->last_mouse_location(); | 263 gfx::Point mouse_location = aura::Env::GetInstance()->last_mouse_location(); |
261 gfx::Rect bounds = widget_->GetWindowBoundsInScreen(); | 264 gfx::Rect bounds = widget_->GetWindowBoundsInScreen(); |
262 if (mouse_location != bounds.origin()) { | 265 if (mouse_location != bounds.origin()) { |
263 bounds.set_origin(mouse_location); | 266 bounds.set_origin(mouse_location); |
264 widget_->SetBounds(bounds); | 267 widget_->SetBounds(bounds); |
265 } | 268 } |
269 if (!widget_->IsVisible()) | |
270 widget_->Show(); | |
reveman
2016/08/30 00:40:49
nit: move below UpdateCursorScale() as better to s
denniskempin
2016/08/30 00:47:25
Done.
| |
266 | 271 |
267 UpdateCursorScale(); | 272 UpdateCursorScale(); |
268 } else { | 273 } else { |
269 if (widget_ && widget_->IsVisible()) | 274 if (widget_ && widget_->IsVisible()) |
270 widget_->Hide(); | 275 widget_->Hide(); |
271 } | 276 } |
272 } | 277 } |
273 | 278 |
274 void Pointer::OnScrollEvent(ui::ScrollEvent* event) { | 279 void Pointer::OnScrollEvent(ui::ScrollEvent* event) { |
275 OnMouseEvent(event); | 280 OnMouseEvent(event); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
352 | 357 |
353 if (ui_scale != cursor_scale_) { | 358 if (ui_scale != cursor_scale_) { |
354 gfx::Transform transform; | 359 gfx::Transform transform; |
355 transform.Scale(ui_scale, ui_scale); | 360 transform.Scale(ui_scale, ui_scale); |
356 widget_->GetNativeWindow()->SetTransform(transform); | 361 widget_->GetNativeWindow()->SetTransform(transform); |
357 cursor_scale_ = ui_scale; | 362 cursor_scale_ = ui_scale; |
358 } | 363 } |
359 } | 364 } |
360 | 365 |
361 } // namespace exo | 366 } // namespace exo |
OLD | NEW |