12352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown/* 22352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * Copyright (C) 2011 The Android Open Source Project 32352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * 42352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 52352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * you may not use this file except in compliance with the License. 62352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * You may obtain a copy of the License at 72352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * 82352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 92352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * 102352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * Unless required by applicable law or agreed to in writing, software 112352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 122352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * See the License for the specific language governing permissions and 142352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * limitations under the License. 152352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown */ 162352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 172352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown#ifndef _ANDROID_VIEW_POINTER_ICON_H 182352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown#define _ANDROID_VIEW_POINTER_ICON_H 192352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 202352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown#include "jni.h" 212352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 22808196f139e93395f1f331f6c7e92ddd66c05979Jun Mukai#include <vector> 23808196f139e93395f1f331f6c7e92ddd66c05979Jun Mukai 242352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown#include <utils/Errors.h> 252352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown#include <SkBitmap.h> 262352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 272352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brownnamespace android { 282352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 292352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown/* Pointer icon styles. 302352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * Must match the definition in android.view.PointerIcon. 312352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown */ 322352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brownenum { 332352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown POINTER_ICON_STYLE_CUSTOM = -1, 342352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown POINTER_ICON_STYLE_NULL = 0, 352352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown POINTER_ICON_STYLE_ARROW = 1000, 361db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_CONTEXT_MENU = 1001, 371db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_HAND = 1002, 381db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_HELP = 1003, 391db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_WAIT = 1004, 401db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_CELL = 1006, 411db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_CROSSHAIR = 1007, 421db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_TEXT = 1008, 431db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_VERTICAL_TEXT = 1009, 441db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_ALIAS = 1010, 451db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_COPY = 1011, 461db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_NO_DROP = 1012, 471db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_ALL_SCROLL = 1013, 481db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_HORIZONTAL_DOUBLE_ARROW = 1014, 491db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_VERTICAL_DOUBLE_ARROW = 1015, 501db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_TOP_RIGHT_DOUBLE_ARROW = 1016, 511db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_TOP_LEFT_DOUBLE_ARROW = 1017, 521db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_ZOOM_IN = 1018, 531db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_ZOOM_OUT = 1019, 541db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_GRAB = 1020, 551db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai POINTER_ICON_STYLE_GRABBING = 1021, 561db5397d88e722b1ab82ccb2b429ceec1179ccd8Jun Mukai 572352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown POINTER_ICON_STYLE_SPOT_HOVER = 2000, 582352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown POINTER_ICON_STYLE_SPOT_TOUCH = 2001, 592352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown POINTER_ICON_STYLE_SPOT_ANCHOR = 2002, 602352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown}; 612352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 622352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown/* 632352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * Describes a pointer icon. 642352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown */ 652352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brownstruct PointerIcon { 662352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown inline PointerIcon() { 672352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown reset(); 682352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown } 692352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 702352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown int32_t style; 712352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown SkBitmap bitmap; 722352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown float hotSpotX; 732352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown float hotSpotY; 74808196f139e93395f1f331f6c7e92ddd66c05979Jun Mukai std::vector<SkBitmap> bitmapFrames; 75808196f139e93395f1f331f6c7e92ddd66c05979Jun Mukai int32_t durationPerFrame; 762352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 772352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown inline bool isNullIcon() { 782352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown return style == POINTER_ICON_STYLE_NULL; 792352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown } 802352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 812352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown inline void reset() { 822352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown style = POINTER_ICON_STYLE_NULL; 832352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown bitmap.reset(); 842352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown hotSpotX = 0; 852352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown hotSpotY = 0; 86808196f139e93395f1f331f6c7e92ddd66c05979Jun Mukai bitmapFrames.clear(); 87808196f139e93395f1f331f6c7e92ddd66c05979Jun Mukai durationPerFrame = 0; 882352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown } 892352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown}; 902352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 912352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown/* Gets a system pointer icon with the specified style. */ 922352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brownextern jobject android_view_PointerIcon_getSystemIcon(JNIEnv* env, 932352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown jobject contextObj, int32_t style); 942352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 952352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown/* Loads the bitmap associated with a pointer icon. 962352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * If pointerIconObj is NULL, returns OK and a pointer icon with POINTER_ICON_STYLE_NULL. */ 972352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brownextern status_t android_view_PointerIcon_load(JNIEnv* env, 982352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown jobject pointerIconObj, jobject contextObj, PointerIcon* outPointerIcon); 992352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 100d4eaef7f4c5a5d281de4fff272cd33e892e26264Jun Mukai/* Obtain the data of pointerIconObj and put to outPointerIcon. */ 101d4eaef7f4c5a5d281de4fff272cd33e892e26264Jun Mukaiextern status_t android_view_PointerIcon_getLoadedIcon(JNIEnv* env, jobject pointerIconObj, 102d4eaef7f4c5a5d281de4fff272cd33e892e26264Jun Mukai PointerIcon* outPointerIcon); 103d4eaef7f4c5a5d281de4fff272cd33e892e26264Jun Mukai 104d4eaef7f4c5a5d281de4fff272cd33e892e26264Jun Mukai 1052352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown/* Loads the bitmap associated with a pointer icon by style. 1062352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * If pointerIconObj is NULL, returns OK and a pointer icon with POINTER_ICON_STYLE_NULL. */ 1072352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brownextern status_t android_view_PointerIcon_loadSystemIcon(JNIEnv* env, 1082352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown jobject contextObj, int32_t style, PointerIcon* outPointerIcon); 1092352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 1102352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown} // namespace android 1112352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 1122352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown#endif // _ANDROID_OS_POINTER_ICON_H 113