1*d57664e9SAndroid Build Coastguard Worker /* 2*d57664e9SAndroid Build Coastguard Worker * Copyright (C) 2020 The Android Open Source Project 3*d57664e9SAndroid Build Coastguard Worker * 4*d57664e9SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*d57664e9SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*d57664e9SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*d57664e9SAndroid Build Coastguard Worker * 8*d57664e9SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*d57664e9SAndroid Build Coastguard Worker * 10*d57664e9SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*d57664e9SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*d57664e9SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*d57664e9SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*d57664e9SAndroid Build Coastguard Worker * limitations under the License. 15*d57664e9SAndroid Build Coastguard Worker */ 16*d57664e9SAndroid Build Coastguard Worker 17*d57664e9SAndroid Build Coastguard Worker #ifndef _UI_MOUSE_CURSOR_CONTROLLER_H 18*d57664e9SAndroid Build Coastguard Worker #define _UI_MOUSE_CURSOR_CONTROLLER_H 19*d57664e9SAndroid Build Coastguard Worker 20*d57664e9SAndroid Build Coastguard Worker #include <gui/DisplayEventReceiver.h> 21*d57664e9SAndroid Build Coastguard Worker #include <input/DisplayViewport.h> 22*d57664e9SAndroid Build Coastguard Worker #include <input/Input.h> 23*d57664e9SAndroid Build Coastguard Worker 24*d57664e9SAndroid Build Coastguard Worker #include <functional> 25*d57664e9SAndroid Build Coastguard Worker #include <map> 26*d57664e9SAndroid Build Coastguard Worker #include <memory> 27*d57664e9SAndroid Build Coastguard Worker #include <vector> 28*d57664e9SAndroid Build Coastguard Worker 29*d57664e9SAndroid Build Coastguard Worker #include "PointerControllerContext.h" 30*d57664e9SAndroid Build Coastguard Worker #include "SpriteController.h" 31*d57664e9SAndroid Build Coastguard Worker 32*d57664e9SAndroid Build Coastguard Worker namespace android { 33*d57664e9SAndroid Build Coastguard Worker 34*d57664e9SAndroid Build Coastguard Worker /* 35*d57664e9SAndroid Build Coastguard Worker * Helper class for PointerController that specifically handles 36*d57664e9SAndroid Build Coastguard Worker * mouse cursor resources and actions. 37*d57664e9SAndroid Build Coastguard Worker */ 38*d57664e9SAndroid Build Coastguard Worker class MouseCursorController { 39*d57664e9SAndroid Build Coastguard Worker public: 40*d57664e9SAndroid Build Coastguard Worker MouseCursorController(PointerControllerContext& context); 41*d57664e9SAndroid Build Coastguard Worker ~MouseCursorController(); 42*d57664e9SAndroid Build Coastguard Worker 43*d57664e9SAndroid Build Coastguard Worker // Move the pointer and return unconsumed delta 44*d57664e9SAndroid Build Coastguard Worker vec2 move(vec2 delta); 45*d57664e9SAndroid Build Coastguard Worker void setPosition(vec2 position); 46*d57664e9SAndroid Build Coastguard Worker vec2 getPosition() const; 47*d57664e9SAndroid Build Coastguard Worker ui::LogicalDisplayId getDisplayId() const; 48*d57664e9SAndroid Build Coastguard Worker void fade(PointerControllerInterface::Transition transition); 49*d57664e9SAndroid Build Coastguard Worker void unfade(PointerControllerInterface::Transition transition); 50*d57664e9SAndroid Build Coastguard Worker void setDisplayViewport(const DisplayViewport& viewport, bool getAdditionalMouseResources); 51*d57664e9SAndroid Build Coastguard Worker void setStylusHoverMode(bool stylusHoverMode); 52*d57664e9SAndroid Build Coastguard Worker 53*d57664e9SAndroid Build Coastguard Worker // Set/Unset flag to hide the mouse cursor on the mirrored display 54*d57664e9SAndroid Build Coastguard Worker void setSkipScreenshot(bool skip); 55*d57664e9SAndroid Build Coastguard Worker 56*d57664e9SAndroid Build Coastguard Worker void updatePointerIcon(PointerIconStyle iconId); 57*d57664e9SAndroid Build Coastguard Worker void setCustomPointerIcon(const SpriteIcon& icon); 58*d57664e9SAndroid Build Coastguard Worker void reloadPointerResources(bool getAdditionalMouseResources); 59*d57664e9SAndroid Build Coastguard Worker 60*d57664e9SAndroid Build Coastguard Worker void getAdditionalMouseResources(); 61*d57664e9SAndroid Build Coastguard Worker bool isViewportValid(); 62*d57664e9SAndroid Build Coastguard Worker 63*d57664e9SAndroid Build Coastguard Worker bool doAnimations(nsecs_t timestamp); 64*d57664e9SAndroid Build Coastguard Worker 65*d57664e9SAndroid Build Coastguard Worker bool resourcesLoaded(); 66*d57664e9SAndroid Build Coastguard Worker 67*d57664e9SAndroid Build Coastguard Worker std::string dump() const; 68*d57664e9SAndroid Build Coastguard Worker 69*d57664e9SAndroid Build Coastguard Worker private: 70*d57664e9SAndroid Build Coastguard Worker mutable std::mutex mLock; 71*d57664e9SAndroid Build Coastguard Worker 72*d57664e9SAndroid Build Coastguard Worker PointerResources mResources; 73*d57664e9SAndroid Build Coastguard Worker 74*d57664e9SAndroid Build Coastguard Worker PointerControllerContext& mContext; 75*d57664e9SAndroid Build Coastguard Worker 76*d57664e9SAndroid Build Coastguard Worker struct Locked { 77*d57664e9SAndroid Build Coastguard Worker DisplayViewport viewport; 78*d57664e9SAndroid Build Coastguard Worker bool stylusHoverMode; 79*d57664e9SAndroid Build Coastguard Worker 80*d57664e9SAndroid Build Coastguard Worker size_t animationFrameIndex; 81*d57664e9SAndroid Build Coastguard Worker nsecs_t lastFrameUpdatedTime; 82*d57664e9SAndroid Build Coastguard Worker 83*d57664e9SAndroid Build Coastguard Worker int32_t pointerFadeDirection; 84*d57664e9SAndroid Build Coastguard Worker vec2 pointerPosition; 85*d57664e9SAndroid Build Coastguard Worker float pointerAlpha; 86*d57664e9SAndroid Build Coastguard Worker sp<Sprite> pointerSprite; 87*d57664e9SAndroid Build Coastguard Worker SpriteIcon pointerIcon; 88*d57664e9SAndroid Build Coastguard Worker bool updatePointerIcon; 89*d57664e9SAndroid Build Coastguard Worker 90*d57664e9SAndroid Build Coastguard Worker bool resourcesLoaded; 91*d57664e9SAndroid Build Coastguard Worker 92*d57664e9SAndroid Build Coastguard Worker std::map<PointerIconStyle, SpriteIcon> additionalMouseResources; 93*d57664e9SAndroid Build Coastguard Worker std::map<PointerIconStyle, PointerAnimation> animationResources; 94*d57664e9SAndroid Build Coastguard Worker 95*d57664e9SAndroid Build Coastguard Worker PointerIconStyle requestedPointerType; 96*d57664e9SAndroid Build Coastguard Worker PointerIconStyle resolvedPointerType; 97*d57664e9SAndroid Build Coastguard Worker 98*d57664e9SAndroid Build Coastguard Worker bool skipScreenshot{false}; 99*d57664e9SAndroid Build Coastguard Worker bool animating{false}; 100*d57664e9SAndroid Build Coastguard Worker 101*d57664e9SAndroid Build Coastguard Worker } mLocked GUARDED_BY(mLock); 102*d57664e9SAndroid Build Coastguard Worker 103*d57664e9SAndroid Build Coastguard Worker void setPositionLocked(vec2 position); 104*d57664e9SAndroid Build Coastguard Worker 105*d57664e9SAndroid Build Coastguard Worker void updatePointerLocked(); 106*d57664e9SAndroid Build Coastguard Worker 107*d57664e9SAndroid Build Coastguard Worker void loadResourcesLocked(bool getAdditionalMouseResources); 108*d57664e9SAndroid Build Coastguard Worker 109*d57664e9SAndroid Build Coastguard Worker bool doBitmapAnimationLocked(nsecs_t timestamp); 110*d57664e9SAndroid Build Coastguard Worker bool doFadingAnimationLocked(nsecs_t timestamp); 111*d57664e9SAndroid Build Coastguard Worker 112*d57664e9SAndroid Build Coastguard Worker void startAnimationLocked(); 113*d57664e9SAndroid Build Coastguard Worker FloatRect getBoundsLocked(); 114*d57664e9SAndroid Build Coastguard Worker }; 115*d57664e9SAndroid Build Coastguard Worker 116*d57664e9SAndroid Build Coastguard Worker } // namespace android 117*d57664e9SAndroid Build Coastguard Worker 118*d57664e9SAndroid Build Coastguard Worker #endif // _UI_MOUSE_CURSOR_CONTROLLER_H 119