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