16ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
26ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Copyright (C) 2010 The Android Open Source Project
36ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *
46ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Licensed under the Apache License, Version 2.0 (the "License");
56ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * you may not use this file except in compliance with the License.
66ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * You may obtain a copy of the License at
76ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *
86ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *      http://www.apache.org/licenses/LICENSE-2.0
96ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *
106ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Unless required by applicable law or agreed to in writing, software
116ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * distributed under the License is distributed on an "AS IS" BASIS,
126ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * See the License for the specific language governing permissions and
146ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * limitations under the License.
156ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
166ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
176ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#ifndef ANDROID_NATIVE_WINDOW_H
186ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#define ANDROID_NATIVE_WINDOW_H
196ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
206ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#include <android/rect.h>
216ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
226ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#ifdef __cplusplus
236ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehextern "C" {
246ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#endif
256ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
266ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
276ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Pixel formats that a window can use.
286ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
296ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehenum {
306ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    WINDOW_FORMAT_RGBA_8888          = 1,
316ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    WINDOW_FORMAT_RGBX_8888          = 2,
326ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    WINDOW_FORMAT_RGB_565            = 4,
336ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh};
346ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
356ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehstruct ANativeWindow;
366ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehtypedef struct ANativeWindow ANativeWindow;
376ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
386ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehtypedef struct ANativeWindow_Buffer {
396ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    // The number of pixels that are show horizontally.
406ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    int32_t width;
416ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
426ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    // The number of pixels that are shown vertically.
436ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    int32_t height;
446ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
456ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    // The number of *pixels* that a line in the buffer takes in
466ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    // memory.  This may be >= width.
476ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    int32_t stride;
486ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
496ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    // The format of the buffer.  One of WINDOW_FORMAT_*
506ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    int32_t format;
516ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
526ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    // The actual bits.
536ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    void* bits;
546ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
556ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    // Do not touch.
566ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh    uint32_t reserved[6];
576ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh} ANativeWindow_Buffer;
586ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
596ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/**
606ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Acquire a reference on the given ANativeWindow object.  This prevents the object
616ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * from being deleted until the reference is removed.
626ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
636ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehvoid ANativeWindow_acquire(ANativeWindow* window);
646ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
656ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/**
666ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Remove a reference that was previously acquired with ANativeWindow_acquire().
676ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
686ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehvoid ANativeWindow_release(ANativeWindow* window);
696ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
706ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
716ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Return the current width in pixels of the window surface.  Returns a
726ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * negative value on error.
736ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
746ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehint32_t ANativeWindow_getWidth(ANativeWindow* window);
756ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
766ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
776ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Return the current height in pixels of the window surface.  Returns a
786ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * negative value on error.
796ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
806ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehint32_t ANativeWindow_getHeight(ANativeWindow* window);
816ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
826ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
836ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Return the current pixel format of the window surface.  Returns a
846ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * negative value on error.
856ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
866ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehint32_t ANativeWindow_getFormat(ANativeWindow* window);
876ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
886ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/*
896ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Change the format and size of the window buffers.
906ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *
916ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * The width and height control the number of pixels in the buffers, not the
926ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * dimensions of the window on screen.  If these are different than the
936ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * window's physical size, then it buffer will be scaled to match that size
946ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * when compositing it to the screen.
956ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh *
966ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * For all of these parameters, if 0 is supplied then the window's base
976ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * value will come back in force.
986ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
996ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehint32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, int32_t width, int32_t height, int32_t format);
1006ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1016ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/**
1026ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Lock the window's next drawing surface for writing.
1036ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
1046ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehint32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffer,
1056ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh        ARect* inOutDirtyBounds);
1066ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1076ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh/**
1086ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * Unlock the window's drawing surface after previously locking it,
1096ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh * posting the new buffer to the display.
1106ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh */
1116ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsiehint32_t ANativeWindow_unlockAndPost(ANativeWindow* window);
1126ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1136ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#ifdef __cplusplus
1146ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh};
1156ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#endif
1166ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh
1176ecc1bfab1621eaf5a17f82020a26468c537cdeaAndrew Hsieh#endif // ANDROID_NATIVE_WINDOW_H
118