blob: e69f101e03e6424f8f5025b66349f0dd2ba75bb2 [file] [log] [blame]
/* Copyright (C) 2006-2016 The Android Open Source Project
**
** This software is licensed under the terms of the GNU General Public
** License version 2, as published by the Free Software Foundation, and
** may be copied, distributed, and modified under those terms.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
*/
#pragma once
#include "android/skin/rect.h"
#include "android/skin/keyboard.h"
#include "android/skin/keycode-buffer.h"
#include <stdbool.h>
ANDROID_BEGIN_HEADER
typedef struct SkinUI SkinUI;
// Avoid including headers if possible.
struct SkinFile;
struct SkinKeyset;
struct SkinLayout;
struct SkinTrackBallParameters;
struct SkinWindowFuncs;
// Function pointer used to toggle network emulation on/off.
// Returns the state of the network after the toggle, i.e. 'true' to
// indicate that it is enabled, 'false' otherwise.
typedef bool (*SkinUINetworkToggleFunc)(void);
// Function pointer used to indicate that the framebuffer display in the
// UI was lost and needs to be fully regenerated.
typedef void (*SkinUIInvalidateFrameBuffer)(void);
// A structure used to point to constant callbacks.
typedef struct SkinUIFuncs {
const struct SkinWindowFuncs* window_funcs;
const struct SkinTrackBallParameters* trackball_params;
SkinKeyEventFunc keyboard_event;
SkinKeyCodeFlushFunc keyboard_flush;
SkinUINetworkToggleFunc network_toggle;
SkinUIInvalidateFrameBuffer framebuffer_invalidate;
} SkinUIFuncs;
// A structure used to group initialization settings for a new SkinUI.
// |window_name| is a unique name for the window. Should typically be
// <port>:<name> where <port> is a console port number (e.g. 5554) and
// <name> is the AVD's name.
// |window_x| and |window_y| are the the initial UI window coordinates.
// |window_scale| is the window scaling factor. Use 1.0 for unscaled display.
// |enable_touch| is true iff touch emulation is needed.
// |enable_dpad| is true iff DPad emulation is needed.
// |enable_keyboard| is true iff a hardware keyboard must be emulated.
// |enable_trackball| is true iff a trackball must be emulated.
// |keyboard_charmap| is the name of the keyboard charmap, if any. If NULL,
// or empty, the default value will be used.
// |keyboard_raw_keys| is true to start in raw key input mode. Default is
// to start in Unicode mode. It's possible to toggle between modes at runtime
// by using Ctrl-K.
typedef struct SkinUIParams {
char window_name[256];
int window_x;
int window_y;
bool enable_touch;
bool enable_dpad;
bool enable_keyboard;
bool enable_trackball;
bool enable_scale;
const char* keyboard_charmap;
} SkinUIParams;
// Create a new user-interface SkinUI object
// |layout_file| is the original layout file for the corresponding skin.
// |initial_orientation| is the initial screen orientation, for example,
// "portrait" or "landscape".
// |keyboard| is the corresponding keyboard object, if any.
// |ui_funcs| points to a set of methods for interacting with the rest of the
// system.
// |ui_params| are initialization parameters. See SkinUIParams documentation.
//
// Note that |layout_file| and |keyboard| are still owned by the caller and
// must be freed by it. Of course, they must not be detroyed before the SkinUI
// object.
//
// |keyboard| will be ignored if |ui_params.enable_keyboard| is false. If
// it is NULL.
SkinUI* skin_ui_create(struct SkinFile* layout_file,
const char* initial_orientation,
const SkinUIFuncs* ui_funcs,
const SkinUIParams* params,
bool use_emugl_subwindow);
void skin_ui_set_onion(SkinUI* ui,
struct SkinImage* onion,
SkinRotation onion_rotation,
int onion_alpha);
void skin_ui_free(SkinUI* ui);
// Reset the name of the emulator window. This corresponds to the value
// of the |window_name| firled of SkinUIParams.
void skin_ui_set_name(SkinUI* ui, const char* name);
void skin_ui_set_lcd_brightness(SkinUI* ui, int lcd_brightness);
void skin_ui_set_scale(SkinUI* ui, double scale);
void skin_ui_update_display(SkinUI* ui, int x, int y, int w, int h);
void skin_ui_update_gpu_frame(SkinUI* ui, int w, int h, const void* pixels);
// Return the current SkinLayout used by the user interface.
struct SkinLayout* skin_ui_get_current_layout(const SkinUI* ui);
struct SkinLayout* skin_ui_get_next_layout(const SkinUI* ui);
struct SkinLayout* skin_ui_get_prev_layout(const SkinUI* ui);
// Process all pending user input events. Returns true if the program needs
// to exit/quit, false otherwise.
bool skin_ui_process_events(SkinUI* ui);
void skin_ui_reset_title(SkinUI* ui);
// Return true if a trackball exists and the mouse is
// currently emulating it
bool skin_ui_is_trackball_active(SkinUI* ui);
// Switches to the next skin layout.
void skin_ui_select_next_layout();
ANDROID_END_HEADER