• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  * width and height must be either both zero or both non-zero.
100  *
101  */
102 int32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window,
103         int32_t width, int32_t height, int32_t format);
104 
105 /**
106  * Lock the window's next drawing surface for writing.
107  * inOutDirtyBounds is used as an in/out parameter, upon entering the
108  * function, it contains the dirty region, that is, the region the caller
109  * intends to redraw. When the function returns, inOutDirtyBounds is updated
110  * with the actual area the caller needs to redraw -- this region is often
111  * extended by ANativeWindow_lock.
112  */
113 int32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffer,
114         ARect* inOutDirtyBounds);
115 
116 /**
117  * Unlock the window's drawing surface after previously locking it,
118  * posting the new buffer to the display.
119  */
120 int32_t ANativeWindow_unlockAndPost(ANativeWindow* window);
121 
122 #ifdef __cplusplus
123 };
124 #endif
125 
126 #endif // ANDROID_NATIVE_WINDOW_H
127