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