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