OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / frameworks / base / native / include / android / native_window.h
1 /*
2  * Copyright (C) 2010 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_NATIVE_WINDOW_H
18 #define ANDROID_NATIVE_WINDOW_H
19
20 #include <android/rect.h>
21
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25
26 /*
27  * Pixel formats that a window can use.
28  */
29 enum {
30     WINDOW_FORMAT_RGBA_8888          = 1,
31     WINDOW_FORMAT_RGBX_8888          = 2,
32     WINDOW_FORMAT_RGB_565            = 4,
33 };
34
35 struct ANativeWindow;
36 typedef struct ANativeWindow ANativeWindow;
37
38 typedef struct ANativeWindow_Buffer {
39     // The number of pixels that are show horizontally.
40     int32_t width;
41
42     // The number of pixels that are shown vertically.
43     int32_t height;
44
45     // The number of *pixels* that a line in the buffer takes in
46     // memory.  This may be >= width.
47     int32_t stride;
48
49     // The format of the buffer.  One of WINDOW_FORMAT_*
50     int32_t format;
51
52     // The actual bits.
53     void* bits;
54     
55     // Do not touch.
56     uint32_t reserved[6];
57 } ANativeWindow_Buffer;
58
59 /**
60  * Acquire a reference on the given ANativeWindow object.  This prevents the object
61  * from being deleted until the reference is removed.
62  */
63 void ANativeWindow_acquire(ANativeWindow* window);
64
65 /**
66  * Remove a reference that was previously acquired with ANativeWindow_acquire().
67  */
68 void ANativeWindow_release(ANativeWindow* window);
69
70 /*
71  * Return the current width in pixels of the window surface.  Returns a
72  * negative value on error.
73  */
74 int32_t ANativeWindow_getWidth(ANativeWindow* window);
75
76 /*
77  * Return the current height in pixels of the window surface.  Returns a
78  * negative value on error.
79  */
80 int32_t ANativeWindow_getHeight(ANativeWindow* window);
81
82 /*
83  * Return the current pixel format of the window surface.  Returns a
84  * negative value on error.
85  */
86 int32_t ANativeWindow_getFormat(ANativeWindow* window);
87
88 /*
89  * Change the format and size of the window buffers.
90  *
91  * The width and height control the number of pixels in the buffers, not the
92  * dimensions of the window on screen.  If these are different than the
93  * window's physical size, then it buffer will be scaled to match that size
94  * when compositing it to the screen.
95  *
96  * For all of these parameters, if 0 is supplied then the window's base
97  * value will come back in force.
98  */
99 int32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, int32_t width, int32_t height, int32_t format);
100
101 /**
102  * Lock the window's next drawing surface for writing.
103  */
104 int32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffer,
105         ARect* inOutDirtyBounds);
106
107 /**
108  * Unlock the window's drawing surface after previously locking it,
109  * posting the new buffer to the display.
110  */
111 int32_t ANativeWindow_unlockAndPost(ANativeWindow* window);
112
113 #ifdef __cplusplus
114 };
115 #endif
116
117 #endif // ANDROID_NATIVE_WINDOW_H