Covellite++  Version: 2.3.0 Revision: 2580 Platform: x64 Build: 15:23 16.10.2020
Кроссплатформенный фреймворк для разработки приложений на С++
android_native_app_glue.h
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * лицензировано по лицензии Apache License, версия 2.0 ( "Лицензия");
5  *этот файл можно использовать только в соответствии с лицензией.
6  *Копию лицензии можно получить на веб-сайте
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *Если только не требуется в соответствии с применимым законодательством или согласовано в письменном виде, программное обеспечение
11  * распространяется в рамках лицензии на УСЛОВИЯХ "КАК ЕСТЬ",
12  * БЕЗ ГАРАНТИЙ И УСЛОВИЙ ЛЮБОГО РОДА, явно выраженных и подразумеваемых.
13  * См. лицензию для получения информации об определенных разрешениях по использованию языка и
14  * ограничениях в рамках лицензии.
15  *
16  */
17 
18 #ifndef _ANDROID_NATIVE_APP_GLUE_H
19 #define _ANDROID_NATIVE_APP_GLUE_H
20 
21 #include <poll.h>
22 #include <pthread.h>
23 #include <sched.h>
24 
25 #include <android/configuration.h>
26 #include <android/looper.h>
27 #include <android/native_activity.h>
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
84 struct android_app;
85 
91  // Идентификатор данного источника. Может быть LOOPER_ID_MAIN или
92  // LOOPER_ID_INPUT.
93  int32_t id;
94 
95  // android_app, с которым связан данный идентификатор.
96  struct android_app* app;
97 
98  // Функция, вызываемая для стандартной обработки данных из
99  // этого источника.
100  void (*process)(struct android_app* app, struct android_poll_source* source);
101 };
102 
111 struct android_app {
112  // Приложение может поместить указатель на свой собственный объект состояния
113  // здесь, если хочет.
114  void* userData;
115 
116  // Введите здесь код функции для обработки основных команд приложения (APP_CMD_*)
117  void (*onAppCmd)(struct android_app* app, int32_t cmd);
118 
119  // Введите здесь код функции для обработки входных событий. В этот момент
120  // событие уже было предварительно отправлено и будет завершено при
121  // возврате. Верните 1, если событие обработано, 0 — для любой диспетчеризации
122  // по умолчанию.
123  int32_t (*onInputEvent)(struct android_app* app, AInputEvent* event);
124 
125  // Экземпляр объекта ANativeActivity, в котором выполняется это приложение.
126  ANativeActivity* activity;
127 
128  // Текущая конфигурация, в которой выполняется это приложение.
129  AConfiguration* config;
130 
131  // Это последнее сохраненное состояние экземпляра, предоставленное во время создания.
132  // Значение равно NULL, если состояния не было. Можно использовать это по мере необходимости;
133  // память останется доступной до вызова android_app_exec_cmd() для
134  // APP_CMD_RESUME, после чего она будет освобождена, а savedState получит значение NULL.
135  // Эти переменные необходимо изменять только при обработке APP_CMD_SAVE_STATE,
136  // когда их значения будут инициализироваться в NULL и можно будет выполнить malloc для
137  // состояния и поместить здесь информацию. В этом случае память будет
138  // освобождена позднее.
139  void* savedState;
140  size_t savedStateSize;
141 
142  // ALooper, связанный с потоком приложения.
143  ALooper* looper;
144 
145  // Если значение не равно NULL, то это входная очередь, из которой приложение будет
146  // получать входные события пользователя.
147  AInputQueue* inputQueue;
148 
149  // Если значение не равно NULL, то это поверхность окна, в котором приложение может рисовать.
150  ANativeWindow* window;
151 
152  // Текущий прямоугольник содержимого окна. Это область, в которой
153  // должно помещаться содержимое окна, чтобы его видел пользователь.
154  ARect contentRect;
155 
156  // Текущее состояние действия приложения. Может быть APP_CMD_START,
157  // APP_CMD_RESUME, APP_CMD_PAUSE или APP_CMD_STOP; см. ниже.
158  int activityState;
159 
160  // Значение не равно нулю, когда NativeActivity приложения
161  // разрушается и ожидает завершения потока приложения.
162  int destroyRequested;
163 
164  // -------------------------------------------------
165  // Ниже показан "частная" реализация кода прилипания.
166 
167  pthread_mutex_t mutex;
168  pthread_cond_t cond;
169 
170  int msgread;
171  int msgwrite;
172 
173  pthread_t thread;
174 
175  struct android_poll_source cmdPollSource;
176  struct android_poll_source inputPollSource;
177 
178  int running;
179  int stateSaved;
180  int destroyed;
181  int redrawNeeded;
182  AInputQueue* pendingInputQueue;
183  ANativeWindow* pendingWindow;
184  ARect pendingContentRect;
185 };
186 
187 enum {
195  LOOPER_ID_MAIN = 1,
196 
204  LOOPER_ID_INPUT = 2,
205 
209  LOOPER_ID_USER = 3,
210 };
211 
218 enum {
224  APP_CMD_INPUT_CHANGED,
225 
230  APP_CMD_INIT_WINDOW,
231 
238  APP_CMD_TERM_WINDOW,
239 
244  APP_CMD_WINDOW_RESIZED,
245 
251  APP_CMD_WINDOW_REDRAW_NEEDED,
252 
258  APP_CMD_CONTENT_RECT_CHANGED,
259 
264  APP_CMD_GAINED_FOCUS,
265 
270  APP_CMD_LOST_FOCUS,
271 
275  APP_CMD_CONFIG_CHANGED,
276 
281  APP_CMD_LOW_MEMORY,
282 
286  APP_CMD_START,
287 
291  APP_CMD_RESUME,
292 
300  APP_CMD_SAVE_STATE,
301 
305  APP_CMD_PAUSE,
306 
310  APP_CMD_STOP,
311 
316  APP_CMD_DESTROY,
317 };
318 
323 int8_t android_app_read_cmd(struct android_app* android_app);
324 
330 void android_app_pre_exec_cmd(struct android_app* android_app, int8_t cmd);
331 
337 void android_app_post_exec_cmd(struct android_app* android_app, int8_t cmd);
338 
343 extern void android_main(struct android_app* app);
344 
345 void ANativeActivity_onCreate(ANativeActivity *, void *, size_t);
346 
347 #ifdef __cplusplus
348 }
349 #endif
350 
351 #endif /* _ANDROID_NATIVE_APP_GLUE_H */
android_poll_source
Definition: android_native_app_glue.h:90
android_app
Definition: android_native_app_glue.h:111