native extension for macos

master
Alexey Gulev 2017-05-04 00:49:33 +03:00
parent 0b149558ea
commit a0e31fe412
6 changed files with 170 additions and 11 deletions

11
defos/ext.manifest Normal file
View File

@ -0,0 +1,11 @@
name: "defos"
platforms:
x86_64-osx:
context:
frameworks: ["AppKit"]
x86-osx:
context:
frameworks: ["AppKit"]

87
defos/src/defos.cpp Normal file
View File

@ -0,0 +1,87 @@
#define EXTENSION_NAME defos
#define LIB_NAME "defos"
#define MODULE_NAME "defos"
// Defold SDK
#define DLIB_LOG_DOMAIN LIB_NAME
#include <dmsdk/sdk.h>
#if defined(DM_PLATFORM_OSX)
#include "defos_private.h"
static int disable_maximize_button(lua_State* L) {
defos_disable_maximize_button();
return 0;
}
static int disable_minimize_button(lua_State* L) {
defos_disable_minimize_button();
return 0;
}
static int disable_window_resize(lua_State* L) {
defos_disable_window_resize();
return 0;
}
static int disable_mouse_cursor(lua_State* L) {
defos_disable_mouse_cursor();
return 0;
}
static int enable_mouse_cursor(lua_State* L) {
defos_enable_mouse_cursor();
return 0;
}
static int set_window_size(lua_State* L) {
defos_set_window_size(L);
return 0;
}
static const luaL_reg Module_methods[] =
{
{"disable_maximize_button", disable_maximize_button},
{"disable_minimize_button", disable_minimize_button},
{"disable_window_resize", disable_window_resize},
{"disable_mouse_cursor", disable_mouse_cursor},
{"enable_mouse_cursor", enable_mouse_cursor},
{"set_window_size", set_window_size},
{0, 0}
};
static void LuaInit(lua_State* L)
{
int top = lua_gettop(L);
luaL_register(L, MODULE_NAME, Module_methods);
lua_pop(L, 1);
assert(top == lua_gettop(L));
}
dmExtension::Result AppInitializeDefos(dmExtension::AppParams* params)
{
return dmExtension::RESULT_OK;
}
dmExtension::Result InitializeDefos(dmExtension::Params* params)
{
LuaInit(params->m_L);
return dmExtension::RESULT_OK;
}
dmExtension::Result AppFinalizeDefos(dmExtension::AppParams* params)
{
return dmExtension::RESULT_OK;
}
dmExtension::Result FinalizeDefos(dmExtension::Params* params)
{
return dmExtension::RESULT_OK;
}
DM_DECLARE_EXTENSION(EXTENSION_NAME, LIB_NAME, AppInitializeDefos, AppFinalizeDefos, InitializeDefos, 0, 0, FinalizeDefos)
#endif

49
defos/src/defos.mm Normal file
View File

@ -0,0 +1,49 @@
#include <dmsdk/sdk.h>
#include "defos_private.h"
#if defined(DM_PLATFORM_OSX)
#include <AppKit/AppKit.h>
#include <CoreGraphics/CoreGraphics.h>
NSWindow* window;
void init_window(){
if (window == NULL) {
window = dmGraphics::GetNativeOSXNSWindow();
}
}
void defos_disable_maximize_button() {
init_window();
[[window standardWindowButton:NSWindowZoomButton] setHidden:YES];
}
void defos_disable_minimize_button() {
init_window();
[[window standardWindowButton:NSWindowMiniaturizeButton] setHidden:YES];
}
void defos_disable_window_resize() {
init_window();
[window setStyleMask:[window styleMask] & ~NSResizableWindowMask];
}
void defos_disable_mouse_cursor() {
[NSCursor hide];
}
void defos_enable_mouse_cursor() {
[NSCursor unhide];
}
void defos_set_window_size(lua_State* L) {
init_window();
int x = luaL_checkint(L, 1);
int y = luaL_checkint(L, 2);
int w = luaL_checkint(L, 3);
int h = luaL_checkint(L, 4);
[window setFrame:NSMakeRect(x, y, w , h) display:YES];
}
#endif

12
defos/src/defos_private.h Normal file
View File

@ -0,0 +1,12 @@
#pragma once
#include <dmsdk/sdk.h>
extern void defos_disable_maximize_button();
extern void defos_disable_minimize_button();
extern void defos_disable_window_resize();
extern void defos_disable_mouse_cursor();
extern void defos_enable_mouse_cursor();
extern void defos_set_window_size(lua_State* L);
void init_window();

View File

@ -1,15 +1,15 @@
local defos = require("defos.defos")
--local defos = require("defos.defos") --windows only
function init(self)
defos.disable_maximize_button()
defos.disable_minimize_button()
defos.disable_window_resize()
defos.disable_mouse_cursor()
defos.enable_mouse_cursor()
defos.set_window_size(-1,-1,800,600)
msg.post(".", "acquire_input_focus")
self.cursor_state = true
defos.disable_maximize_button()
defos.disable_minimize_button()
defos.disable_window_resize()
defos.disable_mouse_cursor()
defos.enable_mouse_cursor()
defos.set_window_size(-1,-1,800,600)
--
-- msg.post(".", "acquire_input_focus")
-- self.cursor_state = true
end
local function toggle_mouse_cursor(self)

View File

@ -1,7 +1,7 @@
[project]
title = DefOS
version = 1.0
dependencies = https://github.com/subsoap/defos/archive/master.zip
dependencies =
[bootstrap]
main_collection = /example/example.collectionc