// 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 touch_points_surface_map_; // Map of a touched surface to the count of touch pointers on that surface. base::flat_map surface_touch_count_map_; }; } // namespace exo #endif // COMPONENTS_EXO_TOUCH_H_