| 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/shell_window_ids.h" | 7 #include "ash/common/shell_window_ids.h" |
| 8 #include "ash/display/display_manager.h" | 8 #include "ash/display/display_manager.h" |
| 9 #include "components/exo/pointer_delegate.h" | 9 #include "components/exo/pointer_delegate.h" |
| 10 #include "components/exo/pointer_stylus_delegate.h" | 10 #include "components/exo/pointer_stylus_delegate.h" |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 void Pointer::SetStylusDelegate(PointerStylusDelegate* delegate) { | 123 void Pointer::SetStylusDelegate(PointerStylusDelegate* delegate) { |
| 124 stylus_delegate_ = delegate; | 124 stylus_delegate_ = delegate; |
| 125 } | 125 } |
| 126 | 126 |
| 127 //////////////////////////////////////////////////////////////////////////////// | 127 //////////////////////////////////////////////////////////////////////////////// |
| 128 // ui::EventHandler overrides: | 128 // ui::EventHandler overrides: |
| 129 | 129 |
| 130 void Pointer::OnMouseEvent(ui::MouseEvent* event) { | 130 void Pointer::OnMouseEvent(ui::MouseEvent* event) { |
| 131 Surface* target = GetEffectiveTargetForEvent(event); | 131 Surface* target = GetEffectiveTargetForEvent(event); |
| 132 | 132 |
| 133 auto new_pointer_type = pointer_type_; |
| 134 if ((event->flags() & ui::EF_IS_SYNTHESIZED) == 0) { |
| 135 new_pointer_type = event->pointer_details().pointer_type; |
| 136 if (new_pointer_type == ui::EventPointerType::POINTER_TYPE_UNKNOWN) |
| 137 new_pointer_type = ui::EventPointerType::POINTER_TYPE_MOUSE; |
| 138 } |
| 139 |
| 133 // If target is different than the current pointer focus then we need to | 140 // If target is different than the current pointer focus then we need to |
| 134 // generate enter and leave events. | 141 // generate enter and leave events. |
| 135 if (target != focus_) { | 142 if (target != focus_) { |
| 136 // First generate a leave event if we currently have a target in focus. | 143 // First generate a leave event if we currently have a target in focus. |
| 137 if (focus_) { | 144 if (focus_) { |
| 138 delegate_->OnPointerLeave(focus_); | 145 delegate_->OnPointerLeave(focus_); |
| 139 focus_->RemoveSurfaceObserver(this); | 146 focus_->RemoveSurfaceObserver(this); |
| 140 // Require SetCursor() to be called and cursor to be re-defined in | 147 // Require SetCursor() to be called and cursor to be re-defined in |
| 141 // response to each OnPointerEnter() call. | 148 // response to each OnPointerEnter() call. |
| 142 focus_->UnregisterCursorProvider(this); | 149 focus_->UnregisterCursorProvider(this); |
| 143 focus_ = nullptr; | 150 focus_ = nullptr; |
| 144 } | 151 } |
| 145 // Second generate an enter event if focus moved to a new target. | 152 // Second generate an enter event if focus moved to a new target. |
| 146 if (target) { | 153 if (target) { |
| 147 delegate_->OnPointerEnter(target, event->location_f(), | 154 delegate_->OnPointerEnter(target, event->location_f(), |
| 148 event->button_flags()); | 155 event->button_flags()); |
| 149 location_ = event->location_f(); | 156 location_ = event->location_f(); |
| 150 // Defaulting pointer_type to POINTER_TYPE_MOUSE prevents the tool change | 157 if (stylus_delegate_) { |
| 151 // event from being fired when using a mouse. | 158 stylus_delegate_->OnPointerToolChange(new_pointer_type); |
| 152 pointer_type_ = ui::EventPointerType::POINTER_TYPE_MOUSE; | 159 pointer_type_ = new_pointer_type; |
| 160 } |
| 153 | 161 |
| 154 focus_ = target; | 162 focus_ = target; |
| 155 focus_->AddSurfaceObserver(this); | 163 focus_->AddSurfaceObserver(this); |
| 156 } | 164 } |
| 157 delegate_->OnPointerFrame(); | 165 delegate_->OnPointerFrame(); |
| 158 } | 166 } |
| 159 | 167 |
| 160 // Report changes in pointer type. We treat unknown devices as a mouse. | 168 // Report changes in pointer type. |
| 161 auto new_pointer_type = event->pointer_details().pointer_type; | |
| 162 if (new_pointer_type == ui::EventPointerType::POINTER_TYPE_UNKNOWN) | |
| 163 new_pointer_type = ui::EventPointerType::POINTER_TYPE_MOUSE; | |
| 164 if (focus_ && stylus_delegate_ && new_pointer_type != pointer_type_) { | 169 if (focus_ && stylus_delegate_ && new_pointer_type != pointer_type_) { |
| 165 stylus_delegate_->OnPointerToolChange(new_pointer_type); | 170 stylus_delegate_->OnPointerToolChange(new_pointer_type); |
| 166 pointer_type_ = new_pointer_type; | 171 pointer_type_ = new_pointer_type; |
| 167 } | 172 } |
| 168 | 173 |
| 169 switch (event->type()) { | 174 switch (event->type()) { |
| 170 case ui::ET_MOUSE_PRESSED: | 175 case ui::ET_MOUSE_PRESSED: |
| 171 case ui::ET_MOUSE_RELEASED: | 176 case ui::ET_MOUSE_RELEASED: |
| 172 if (focus_) { | 177 if (focus_) { |
| 173 delegate_->OnPointerButton(event->time_stamp(), | 178 delegate_->OnPointerButton(event->time_stamp(), |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 | 362 |
| 358 if (ui_scale != cursor_scale_) { | 363 if (ui_scale != cursor_scale_) { |
| 359 gfx::Transform transform; | 364 gfx::Transform transform; |
| 360 transform.Scale(ui_scale, ui_scale); | 365 transform.Scale(ui_scale, ui_scale); |
| 361 widget_->GetNativeWindow()->SetTransform(transform); | 366 widget_->GetNativeWindow()->SetTransform(transform); |
| 362 cursor_scale_ = ui_scale; | 367 cursor_scale_ = ui_scale; |
| 363 } | 368 } |
| 364 } | 369 } |
| 365 | 370 |
| 366 } // namespace exo | 371 } // namespace exo |
| OLD | NEW |