1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef _ANDROID_VIEW_POINTER_ICON_H
18 #define _ANDROID_VIEW_POINTER_ICON_H
19 
20 #include "jni.h"
21 
22 #include <utils/Errors.h>
23 #include <SkBitmap.h>
24 
25 namespace android {
26 
27 /* Pointer icon styles.
28  * Must match the definition in android.view.PointerIcon.
29  */
30 enum {
31     POINTER_ICON_STYLE_CUSTOM = -1,
32     POINTER_ICON_STYLE_NULL = 0,
33     POINTER_ICON_STYLE_ARROW = 1000,
34     POINTER_ICON_STYLE_SPOT_HOVER = 2000,
35     POINTER_ICON_STYLE_SPOT_TOUCH = 2001,
36     POINTER_ICON_STYLE_SPOT_ANCHOR = 2002,
37 };
38 
39 /*
40  * Describes a pointer icon.
41  */
42 struct PointerIcon {
PointerIconPointerIcon43     inline PointerIcon() {
44         reset();
45     }
46 
47     int32_t style;
48     SkBitmap bitmap;
49     float hotSpotX;
50     float hotSpotY;
51 
isNullIconPointerIcon52     inline bool isNullIcon() {
53         return style == POINTER_ICON_STYLE_NULL;
54     }
55 
resetPointerIcon56     inline void reset() {
57         style = POINTER_ICON_STYLE_NULL;
58         bitmap.reset();
59         hotSpotX = 0;
60         hotSpotY = 0;
61     }
62 };
63 
64 /* Gets a system pointer icon with the specified style. */
65 extern jobject android_view_PointerIcon_getSystemIcon(JNIEnv* env,
66         jobject contextObj, int32_t style);
67 
68 /* Loads the bitmap associated with a pointer icon.
69  * If pointerIconObj is NULL, returns OK and a pointer icon with POINTER_ICON_STYLE_NULL. */
70 extern status_t android_view_PointerIcon_load(JNIEnv* env,
71         jobject pointerIconObj, jobject contextObj, PointerIcon* outPointerIcon);
72 
73 /* Loads the bitmap associated with a pointer icon by style.
74  * If pointerIconObj is NULL, returns OK and a pointer icon with POINTER_ICON_STYLE_NULL. */
75 extern status_t android_view_PointerIcon_loadSystemIcon(JNIEnv* env,
76         jobject contextObj, int32_t style, PointerIcon* outPointerIcon);
77 
78 } // namespace android
79 
80 #endif // _ANDROID_OS_POINTER_ICON_H
81