blob: 8c080d778f474eef7ab073c803bfeefdb3bf98e6 [file] [log] [blame]
Dianne Hackborn54a181b2010-06-30 18:35:14 -07001/*
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#define LOG_TAG "Surface"
Dianne Hackborn54a181b2010-06-30 18:35:14 -070018
Mathias Agopiane68b4f72017-02-08 18:48:32 -080019#include <android/native_window.h>
20#include <system/window.h>
Dianne Hackborn289b9b62010-07-09 11:44:11 -070021
22void ANativeWindow_acquire(ANativeWindow* window) {
23 window->incStrong((void*)ANativeWindow_acquire);
24}
25
26void ANativeWindow_release(ANativeWindow* window) {
27 window->decStrong((void*)ANativeWindow_acquire);
28}
Dianne Hackborn54a181b2010-06-30 18:35:14 -070029
30static int32_t getWindowProp(ANativeWindow* window, int what) {
31 int value;
32 int res = window->query(window, what, &value);
33 return res < 0 ? res : value;
34}
35
36int32_t ANativeWindow_getWidth(ANativeWindow* window) {
37 return getWindowProp(window, NATIVE_WINDOW_WIDTH);
38}
39
40int32_t ANativeWindow_getHeight(ANativeWindow* window) {
41 return getWindowProp(window, NATIVE_WINDOW_HEIGHT);
42}
43
44int32_t ANativeWindow_getFormat(ANativeWindow* window) {
45 return getWindowProp(window, NATIVE_WINDOW_FORMAT);
46}
Dianne Hackborn8ae5a8e2010-07-01 18:44:46 -070047
48int32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, int32_t width,
Mathias Agopian3026a1c2010-10-24 18:35:26 -070049 int32_t height, int32_t format) {
Michael I. Gold0e5ed702012-04-09 19:51:55 -070050 int32_t err = native_window_set_buffers_format(window, format);
Mathias Agopian09d7ed72011-07-13 15:24:42 -070051 if (!err) {
Michael I. Gold0e5ed702012-04-09 19:51:55 -070052 err = native_window_set_buffers_user_dimensions(window, width, height);
53 if (!err) {
54 int mode = NATIVE_WINDOW_SCALING_MODE_FREEZE;
55 if (width && height) {
56 mode = NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW;
57 }
58 err = native_window_set_scaling_mode(window, mode);
59 }
Mathias Agopian09d7ed72011-07-13 15:24:42 -070060 }
61 return err;
Dianne Hackborn8ae5a8e2010-07-01 18:44:46 -070062}
Dianne Hackborn289b9b62010-07-09 11:44:11 -070063
64int32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffer,
65 ARect* inOutDirtyBounds) {
Mathias Agopian949be322011-07-13 17:39:11 -070066 return window->perform(window, NATIVE_WINDOW_LOCK, outBuffer, inOutDirtyBounds);
Dianne Hackborn289b9b62010-07-09 11:44:11 -070067}
68
69int32_t ANativeWindow_unlockAndPost(ANativeWindow* window) {
Mathias Agopian949be322011-07-13 17:39:11 -070070 return window->perform(window, NATIVE_WINDOW_UNLOCK_AND_POST);
Dianne Hackborn289b9b62010-07-09 11:44:11 -070071}