1951a39d68df598db08dfced8b4707755864a0492Ying Wang/*
2951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright (C) 2010 The Android Open Source Project
3951a39d68df598db08dfced8b4707755864a0492Ying Wang *
4951a39d68df598db08dfced8b4707755864a0492Ying Wang * Licensed under the Apache License, Version 2.0 (the "License");
5951a39d68df598db08dfced8b4707755864a0492Ying Wang * you may not use this file except in compliance with the License.
6951a39d68df598db08dfced8b4707755864a0492Ying Wang * You may obtain a copy of the License at
7951a39d68df598db08dfced8b4707755864a0492Ying Wang *
8951a39d68df598db08dfced8b4707755864a0492Ying Wang *      http://www.apache.org/licenses/LICENSE-2.0
9951a39d68df598db08dfced8b4707755864a0492Ying Wang *
10951a39d68df598db08dfced8b4707755864a0492Ying Wang * Unless required by applicable law or agreed to in writing, software
11951a39d68df598db08dfced8b4707755864a0492Ying Wang * distributed under the License is distributed on an "AS IS" BASIS,
12951a39d68df598db08dfced8b4707755864a0492Ying Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13951a39d68df598db08dfced8b4707755864a0492Ying Wang * See the License for the specific language governing permissions and
14951a39d68df598db08dfced8b4707755864a0492Ying Wang * limitations under the License.
15951a39d68df598db08dfced8b4707755864a0492Ying Wang */
16951a39d68df598db08dfced8b4707755864a0492Ying Wang
17951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef ANDROID_NATIVE_WINDOW_H
18951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ANDROID_NATIVE_WINDOW_H
19951a39d68df598db08dfced8b4707755864a0492Ying Wang
20951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <android/rect.h>
21951a39d68df598db08dfced8b4707755864a0492Ying Wang
22951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef __cplusplus
23951a39d68df598db08dfced8b4707755864a0492Ying Wangextern "C" {
24951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
25951a39d68df598db08dfced8b4707755864a0492Ying Wang
26951a39d68df598db08dfced8b4707755864a0492Ying Wang/*
27951a39d68df598db08dfced8b4707755864a0492Ying Wang * Pixel formats that a window can use.
28951a39d68df598db08dfced8b4707755864a0492Ying Wang */
29951a39d68df598db08dfced8b4707755864a0492Ying Wangenum {
30951a39d68df598db08dfced8b4707755864a0492Ying Wang    WINDOW_FORMAT_RGBA_8888          = 1,
31951a39d68df598db08dfced8b4707755864a0492Ying Wang    WINDOW_FORMAT_RGBX_8888          = 2,
32951a39d68df598db08dfced8b4707755864a0492Ying Wang    WINDOW_FORMAT_RGB_565            = 4,
33951a39d68df598db08dfced8b4707755864a0492Ying Wang};
34951a39d68df598db08dfced8b4707755864a0492Ying Wang
35951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct ANativeWindow;
36951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct ANativeWindow ANativeWindow;
37951a39d68df598db08dfced8b4707755864a0492Ying Wang
38951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct ANativeWindow_Buffer {
39951a39d68df598db08dfced8b4707755864a0492Ying Wang    // The number of pixels that are show horizontally.
40951a39d68df598db08dfced8b4707755864a0492Ying Wang    int32_t width;
41951a39d68df598db08dfced8b4707755864a0492Ying Wang
42951a39d68df598db08dfced8b4707755864a0492Ying Wang    // The number of pixels that are shown vertically.
43951a39d68df598db08dfced8b4707755864a0492Ying Wang    int32_t height;
44951a39d68df598db08dfced8b4707755864a0492Ying Wang
45951a39d68df598db08dfced8b4707755864a0492Ying Wang    // The number of *pixels* that a line in the buffer takes in
46951a39d68df598db08dfced8b4707755864a0492Ying Wang    // memory.  This may be >= width.
47951a39d68df598db08dfced8b4707755864a0492Ying Wang    int32_t stride;
48951a39d68df598db08dfced8b4707755864a0492Ying Wang
49951a39d68df598db08dfced8b4707755864a0492Ying Wang    // The format of the buffer.  One of WINDOW_FORMAT_*
50951a39d68df598db08dfced8b4707755864a0492Ying Wang    int32_t format;
51951a39d68df598db08dfced8b4707755864a0492Ying Wang
52951a39d68df598db08dfced8b4707755864a0492Ying Wang    // The actual bits.
53951a39d68df598db08dfced8b4707755864a0492Ying Wang    void* bits;
54951a39d68df598db08dfced8b4707755864a0492Ying Wang
55951a39d68df598db08dfced8b4707755864a0492Ying Wang    // Do not touch.
56951a39d68df598db08dfced8b4707755864a0492Ying Wang    uint32_t reserved[6];
57951a39d68df598db08dfced8b4707755864a0492Ying Wang} ANativeWindow_Buffer;
58951a39d68df598db08dfced8b4707755864a0492Ying Wang
59951a39d68df598db08dfced8b4707755864a0492Ying Wang/**
60951a39d68df598db08dfced8b4707755864a0492Ying Wang * Acquire a reference on the given ANativeWindow object.  This prevents the object
61951a39d68df598db08dfced8b4707755864a0492Ying Wang * from being deleted until the reference is removed.
62951a39d68df598db08dfced8b4707755864a0492Ying Wang */
63951a39d68df598db08dfced8b4707755864a0492Ying Wangvoid ANativeWindow_acquire(ANativeWindow* window);
64951a39d68df598db08dfced8b4707755864a0492Ying Wang
65951a39d68df598db08dfced8b4707755864a0492Ying Wang/**
66951a39d68df598db08dfced8b4707755864a0492Ying Wang * Remove a reference that was previously acquired with ANativeWindow_acquire().
67951a39d68df598db08dfced8b4707755864a0492Ying Wang */
68951a39d68df598db08dfced8b4707755864a0492Ying Wangvoid ANativeWindow_release(ANativeWindow* window);
69951a39d68df598db08dfced8b4707755864a0492Ying Wang
70951a39d68df598db08dfced8b4707755864a0492Ying Wang/*
71951a39d68df598db08dfced8b4707755864a0492Ying Wang * Return the current width in pixels of the window surface.  Returns a
72951a39d68df598db08dfced8b4707755864a0492Ying Wang * negative value on error.
73951a39d68df598db08dfced8b4707755864a0492Ying Wang */
74951a39d68df598db08dfced8b4707755864a0492Ying Wangint32_t ANativeWindow_getWidth(ANativeWindow* window);
75951a39d68df598db08dfced8b4707755864a0492Ying Wang
76951a39d68df598db08dfced8b4707755864a0492Ying Wang/*
77951a39d68df598db08dfced8b4707755864a0492Ying Wang * Return the current height in pixels of the window surface.  Returns a
78951a39d68df598db08dfced8b4707755864a0492Ying Wang * negative value on error.
79951a39d68df598db08dfced8b4707755864a0492Ying Wang */
80951a39d68df598db08dfced8b4707755864a0492Ying Wangint32_t ANativeWindow_getHeight(ANativeWindow* window);
81951a39d68df598db08dfced8b4707755864a0492Ying Wang
82951a39d68df598db08dfced8b4707755864a0492Ying Wang/*
83951a39d68df598db08dfced8b4707755864a0492Ying Wang * Return the current pixel format of the window surface.  Returns a
84951a39d68df598db08dfced8b4707755864a0492Ying Wang * negative value on error.
85951a39d68df598db08dfced8b4707755864a0492Ying Wang */
86951a39d68df598db08dfced8b4707755864a0492Ying Wangint32_t ANativeWindow_getFormat(ANativeWindow* window);
87951a39d68df598db08dfced8b4707755864a0492Ying Wang
88951a39d68df598db08dfced8b4707755864a0492Ying Wang/*
89951a39d68df598db08dfced8b4707755864a0492Ying Wang * Change the format and size of the window buffers.
90951a39d68df598db08dfced8b4707755864a0492Ying Wang *
91951a39d68df598db08dfced8b4707755864a0492Ying Wang * The width and height control the number of pixels in the buffers, not the
92951a39d68df598db08dfced8b4707755864a0492Ying Wang * dimensions of the window on screen.  If these are different than the
93951a39d68df598db08dfced8b4707755864a0492Ying Wang * window's physical size, then it buffer will be scaled to match that size
94951a39d68df598db08dfced8b4707755864a0492Ying Wang * when compositing it to the screen.
95951a39d68df598db08dfced8b4707755864a0492Ying Wang *
96951a39d68df598db08dfced8b4707755864a0492Ying Wang * For all of these parameters, if 0 is supplied then the window's base
97951a39d68df598db08dfced8b4707755864a0492Ying Wang * value will come back in force.
98951a39d68df598db08dfced8b4707755864a0492Ying Wang */
99951a39d68df598db08dfced8b4707755864a0492Ying Wangint32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, int32_t width, int32_t height, int32_t format);
100951a39d68df598db08dfced8b4707755864a0492Ying Wang
101951a39d68df598db08dfced8b4707755864a0492Ying Wang/**
102951a39d68df598db08dfced8b4707755864a0492Ying Wang * Lock the window's next drawing surface for writing.
103951a39d68df598db08dfced8b4707755864a0492Ying Wang */
104951a39d68df598db08dfced8b4707755864a0492Ying Wangint32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffer,
105951a39d68df598db08dfced8b4707755864a0492Ying Wang        ARect* inOutDirtyBounds);
106951a39d68df598db08dfced8b4707755864a0492Ying Wang
107951a39d68df598db08dfced8b4707755864a0492Ying Wang/**
108951a39d68df598db08dfced8b4707755864a0492Ying Wang * Unlock the window's drawing surface after previously locking it,
109951a39d68df598db08dfced8b4707755864a0492Ying Wang * posting the new buffer to the display.
110951a39d68df598db08dfced8b4707755864a0492Ying Wang */
111951a39d68df598db08dfced8b4707755864a0492Ying Wangint32_t ANativeWindow_unlockAndPost(ANativeWindow* window);
112951a39d68df598db08dfced8b4707755864a0492Ying Wang
113951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef __cplusplus
114951a39d68df598db08dfced8b4707755864a0492Ying Wang};
115951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
116951a39d68df598db08dfced8b4707755864a0492Ying Wang
117951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif // ANDROID_NATIVE_WINDOW_H
118