AndroidPlatform, stub; for #119

This commit is contained in:
Vadim Lopatin 2016-04-20 14:43:36 +03:00
parent 67bc536912
commit aed940b2f4
2 changed files with 149 additions and 2 deletions

View File

@ -135,4 +135,12 @@ Global
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.UnittestX11|Any CPU.ActiveCfg = UnittestX11|x64
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.UnittestX11|Any CPU.Build.0 = UnittestX11|x64
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
Policies = $0
$0.TextStylePolicy = $1
$1.FileWidth = 120
$1.inheritsSet = VisualStudio
$1.inheritsScope = text/plain
$1.scope = text/plain
EndGlobalSection
EndGlobal

View File

@ -20,6 +20,7 @@ import core.stdc.string : memset;
import dlangui.core.logger;
import dlangui.widgets.styles;
import dlangui.graphics.drawbuf;
//import dlangui.widgets.widget;
import dlangui.platforms.common.platform;
@ -31,6 +32,140 @@ import android.native_window : ANativeWindow_setBuffersGeometry;
import android.sensor, android.log, android.android_native_app_glue;
/**
* Window abstraction layer. Widgets can be shown only inside window.
*
*/
class AndroidWindow : Window {
// Abstract methods : override in platform implementatino
/// show window
override void show() {
// TODO
}
protected dstring _caption;
/// returns window caption
override @property dstring windowCaption() {
return _caption;
}
/// sets window caption
override @property void windowCaption(dstring caption) {
_caption = caption;
}
/// sets window icon
override @property void windowIcon(DrawBufRef icon) {
// not supported
}
/// request window redraw
override void invalidate() {
}
/// close window
override void close() {
}
protected AndroidPlatform _platform;
this(AndroidPlatform platform) {
super();
_platform = platform;
}
~this() {
}
/// after drawing, call to schedule redraw if animation is active
override void scheduleAnimation() {
// override if necessary
// TODO
}
}
/**
* Platform abstraction layer.
*
* Represents application.
*
*
*
*/
class AndroidPlatform : Platform {
protected AndroidWindow[] _windows;
protected AndroidWindow _activeWindow;
protected android_app* _appstate;
this(android_app* state) {
_appstate = state;
}
/**
* create window
* Args:
* windowCaption = window caption text
* parent = parent Window, or null if no parent
* flags = WindowFlag bit set, combination of Resizable, Modal, Fullscreen
* width = window width
* height = window height
*
* Window w/o Resizable nor Fullscreen will be created with size based on measurement of its content widget
*/
override Window createWindow(dstring windowCaption, Window parent, uint flags = WindowFlag.Resizable, uint width = 0, uint height = 0) {
AndroidWindow w = new AndroidWindow(this);
_windows ~= w;
_activeWindow = w;
return w;
}
/**
* close window
*
* Closes window earlier created with createWindow()
*/
override void closeWindow(Window w) {
import std.algorithm : remove;
for (int i = 0; i < _windows.length; i++) {
if (_windows[i] is w) {
_windows = _windows.remove(i);
break;
}
}
_activeWindow = (_windows.length > 0 ? _windows[$ - 1] : null);
}
/**
* Starts application message loop.
*
* When returned from this method, application is shutting down.
*/
override int enterMessageLoop() {
// TODO:
return 0;
}
protected dstring _clipboardText;
/// retrieves text from clipboard (when mouseBuffer == true, use mouse selection clipboard - under linux)
override dstring getClipboardText(bool mouseBuffer = false) {
return _clipboardText;
}
/// sets text to clipboard (when mouseBuffer == true, use mouse selection clipboard - under linux)
override void setClipboardText(dstring text, bool mouseBuffer = false) {
_clipboardText = text;
}
/// calls request layout for all windows
override void requestLayout() {
}
/// handle theme change: e.g. reload some themed resources
override void onThemeChanged() {
// override and call dispatchThemeChange for all windows
}
}
/**
* Our saved state data.
*/
@ -228,6 +363,9 @@ extern(C) void engine_handle_cmd(android_app* app, int cmd) {
}
void main(){}
__gshared AndroidPlatform _platform;
/**
* This is the main entry point of a native application that is using
* android_native_app_glue. It runs in its own thread, with its own
@ -244,8 +382,6 @@ extern (C) void android_main(android_app* state) {
Log.e("******************************************************************");
Log.e("No font files found!!!");
Log.e("Currently, only hardcoded font paths implemented.");
Log.e("Probably you can modify sdlapp.d to add some fonts for your system.");
Log.e("TODO: use fontconfig");
Log.e("******************************************************************");
assert(false);
}
@ -253,6 +389,9 @@ extern (C) void android_main(android_app* state) {
currentTheme = createDefaultTheme();
_platform = new AndroidPlatform(state);
Platform.setInstance(_platform);
engine engine;