// 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 #include "base/macros.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 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: explicit Touch(TouchDelegate* delegate); ~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; // The delegate instance that all events are dispatched to. TouchDelegate* const delegate_; // The delegate instance that all stylus related events are dispatched to. TouchStylusDelegate* stylus_delegate_ = nullptr; // The current focus surface for the touch device. Surface* focus_ = nullptr; // Vector of touch points in focus surface. std::vector touch_points_; DISALLOW_COPY_AND_ASSIGN(Touch); }; } // namespace exo #endif // COMPONENTS_EXO_TOUCH_H_