| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_EXO_TOUCH_H_ |
| #define COMPONENTS_EXO_TOUCH_H_ |
| |
| #include "base/containers/flat_map.h" |
| #include "components/exo/surface_observer.h" |
| #include "ui/events/event_handler.h" |
| #include "ui/gfx/geometry/point_f.h" |
| |
| namespace ui { |
| class LocatedEvent; |
| class TouchEvent; |
| } |
| |
| namespace exo { |
| class Seat; |
| class TouchDelegate; |
| class TouchStylusDelegate; |
| |
| // This class implements a client touch device that represents one or more |
| // touch devices. |
| class Touch : public ui::EventHandler, public SurfaceObserver { |
| public: |
| Touch(TouchDelegate* delegate, Seat* seat); |
| |
| Touch(const Touch&) = delete; |
| Touch& operator=(const Touch&) = delete; |
| |
| ~Touch() override; |
| |
| TouchDelegate* delegate() const { return delegate_; } |
| |
| // Set delegate for stylus events. |
| void SetStylusDelegate(TouchStylusDelegate* delegate); |
| bool HasStylusDelegate() const; |
| |
| // Overridden from ui::EventHandler: |
| void OnTouchEvent(ui::TouchEvent* event) override; |
| |
| // Overridden from SurfaceObserver: |
| void OnSurfaceDestroying(Surface* surface) override; |
| |
| private: |
| // Returns the effective target for |event|. |
| Surface* GetEffectiveTargetForEvent(ui::LocatedEvent* event) const; |
| |
| // Cancels touches on all the surfaces. |
| void CancelAllTouches(); |
| |
| // The delegate instance that all events are dispatched to. |
| TouchDelegate* const delegate_; |
| |
| Seat* const seat_; |
| |
| // The delegate instance that all stylus related events are dispatched to. |
| TouchStylusDelegate* stylus_delegate_ = nullptr; |
| |
| // Map of touch points to its focus surface. |
| base::flat_map<int, Surface*> touch_points_surface_map_; |
| |
| // Map of a touched surface to the count of touch pointers on that surface. |
| base::flat_map<Surface*, int> surface_touch_count_map_; |
| }; |
| |
| } // namespace exo |
| |
| #endif // COMPONENTS_EXO_TOUCH_H_ |