1d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright/*
2d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * Copyright (C) 2014 The Android Open Source Project
3d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright *
4d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * Licensed under the Apache License, Version 2.0 (the "License");
5d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * you may not use this file except in compliance with the License.
6d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * You may obtain a copy of the License at
7d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright *
8d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright *      http://www.apache.org/licenses/LICENSE-2.0
9d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright *
10d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * Unless required by applicable law or agreed to in writing, software
11d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * distributed under the License is distributed on an "AS IS" BASIS,
12d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * See the License for the specific language governing permissions and
14d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * limitations under the License.
15d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright */
16d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
17d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#ifndef _INPUTFLINGER_POINTER_CONTROLLER_INTERFACE_H
18d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#define _INPUTFLINGER_POINTER_CONTROLLER_INTERFACE_H
19d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
20d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#include <input/Input.h>
21d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#include <utils/BitSet.h>
22d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#include <utils/RefBase.h>
23d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
24d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightnamespace android {
25d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
26d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright/**
27d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * Interface for tracking a mouse / touch pad pointer and touch pad spots.
28d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright *
29d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * The spots are sprites on screen that visually represent the positions of
30d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * fingers
31d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright *
32d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * The pointer controller is responsible for providing synchronization and for tracking
33d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright * display orientation changes if needed.
34d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright */
35d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightclass PointerControllerInterface : public virtual RefBase {
36d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightprotected:
37d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    PointerControllerInterface() { }
38d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    virtual ~PointerControllerInterface() { }
39d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
40d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightpublic:
41d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    /* Gets the bounds of the region that the pointer can traverse.
42d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright     * Returns true if the bounds are available. */
43d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    virtual bool getBounds(float* outMinX, float* outMinY,
44d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright            float* outMaxX, float* outMaxY) const = 0;
45d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
46d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    /* Move the pointer. */
47d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    virtual void move(float deltaX, float deltaY) = 0;
48d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
49d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    /* Sets a mask that indicates which buttons are pressed. */
50d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    virtual void setButtonState(int32_t buttonState) = 0;
51d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
52d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    /* Gets a mask that indicates which buttons are pressed. */
53d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    virtual int32_t getButtonState() const = 0;
54d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
55d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    /* Sets the absolute location of the pointer. */
56d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    virtual void setPosition(float x, float y) = 0;
57d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
58d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    /* Gets the absolute location of the pointer. */
59d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    virtual void getPosition(float* outX, float* outY) const = 0;
60d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
61d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    enum Transition {
62d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright        // Fade/unfade immediately.
63d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright        TRANSITION_IMMEDIATE,
64d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright        // Fade/unfade gradually.
65d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright        TRANSITION_GRADUAL,
66d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    };
67d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
68d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    /* Fades the pointer out now. */
69d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    virtual void fade(Transition transition) = 0;
70d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
71d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    /* Makes the pointer visible if it has faded out.
72d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright     * The pointer never unfades itself automatically.  This method must be called
73d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright     * by the client whenever the pointer is moved or a button is pressed and it
74d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright     * wants to ensure that the pointer becomes visible again. */
75d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    virtual void unfade(Transition transition) = 0;
76d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
77d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    enum Presentation {
78d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright        // Show the mouse pointer.
79d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright        PRESENTATION_POINTER,
80d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright        // Show spots and a spot anchor in place of the mouse pointer.
81d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright        PRESENTATION_SPOT,
82d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    };
83d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
84d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    /* Sets the mode of the pointer controller. */
85d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    virtual void setPresentation(Presentation presentation) = 0;
86d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
87d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    /* Sets the spots for the current gesture.
88d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright     * The spots are not subject to the inactivity timeout like the pointer
89d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright     * itself it since they are expected to remain visible for so long as
90d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright     * the fingers are on the touch pad.
91d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright     *
92d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright     * The values of the AMOTION_EVENT_AXIS_PRESSURE axis is significant.
93d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright     * For spotCoords, pressure != 0 indicates that the spot's location is being
94d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright     * pressed (not hovering).
95d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright     */
96d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    virtual void setSpots(const PointerCoords* spotCoords, const uint32_t* spotIdToIndex,
97d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright            BitSet32 spotIdBits) = 0;
98d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
99d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    /* Removes all spots. */
100d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright    virtual void clearSpots() = 0;
101d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright};
102d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
103d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright} // namespace android
104d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright
105d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#endif // _INPUTFLINGER_POINTER_CONTROLLER_INTERFACE_H
106