Signed-off-by: falkTX <falktx@falktx.com>tags/v2.1-rc1
@@ -128,7 +128,7 @@ typedef struct _CarlaCachedPluginInfo { | |||||
} CarlaCachedPluginInfo; | } CarlaCachedPluginInfo; | ||||
/* ------------------------------------------------------------------------------------------------------------ | |||||
/* -------------------------------------------------------------------------------------------------------------------- | |||||
* get stuff */ | * get stuff */ | ||||
/*! | /*! | ||||
@@ -164,7 +164,7 @@ CARLA_EXPORT uint carla_get_cached_plugin_count(PluginType ptype, const char* pl | |||||
*/ | */ | ||||
CARLA_EXPORT const CarlaCachedPluginInfo* carla_get_cached_plugin_info(PluginType ptype, uint index); | CARLA_EXPORT const CarlaCachedPluginInfo* carla_get_cached_plugin_info(PluginType ptype, uint index); | ||||
/* ------------------------------------------------------------------------------------------------------------ | |||||
/* -------------------------------------------------------------------------------------------------------------------- | |||||
* set stuff */ | * set stuff */ | ||||
/*! | /*! | ||||
@@ -182,7 +182,7 @@ CARLA_EXPORT void carla_fputs(bool err, const char* string); | |||||
*/ | */ | ||||
CARLA_EXPORT void carla_set_process_name(const char* name); | CARLA_EXPORT void carla_set_process_name(const char* name); | ||||
/* ------------------------------------------------------------------------------------------------------------ | |||||
/* -------------------------------------------------------------------------------------------------------------------- | |||||
* pipes */ | * pipes */ | ||||
/*! | /*! | ||||
@@ -241,7 +241,7 @@ CARLA_EXPORT bool carla_pipe_client_flush_and_unlock(CarlaPipeClientHandle handl | |||||
CARLA_EXPORT void carla_pipe_client_destroy(CarlaPipeClientHandle handle); | CARLA_EXPORT void carla_pipe_client_destroy(CarlaPipeClientHandle handle); | ||||
#ifndef CARLA_HOST_H_INCLUDED | #ifndef CARLA_HOST_H_INCLUDED | ||||
/* ------------------------------------------------------------------------------------------------------------ | |||||
/* -------------------------------------------------------------------------------------------------------------------- | |||||
* info about current library */ | * info about current library */ | ||||
/*! | /*! | ||||
@@ -255,12 +255,18 @@ CARLA_EXPORT const char* carla_get_library_filename(); | |||||
CARLA_EXPORT const char* carla_get_library_folder(); | CARLA_EXPORT const char* carla_get_library_folder(); | ||||
#endif | #endif | ||||
// ------------------------------------------------------------------------------------------------------------------- | |||||
// TESTING | |||||
/* -------------------------------------------------------------------------------------------------------------------- | |||||
* window control */ | |||||
CARLA_EXPORT int carla_cocoa_get_window(void* nsViewPtr); | CARLA_EXPORT int carla_cocoa_get_window(void* nsViewPtr); | ||||
// ------------------------------------------------------------------------------------------------------------------- | |||||
CARLA_EXPORT void carla_x11_reparent_window(uintptr_t winId1, uintptr_t winId2); | |||||
CARLA_EXPORT void carla_x11_move_window(uintptr_t winId, int x, int y); | |||||
CARLA_EXPORT int* carla_x11_get_window_pos(uintptr_t winId); | |||||
/* ----------------------------------------------------------------------------------------------------------------- */ | |||||
/** @} */ | /** @} */ | ||||
@@ -1,6 +1,6 @@ | |||||
/* | /* | ||||
* Carla Plugin Host | * Carla Plugin Host | ||||
* Copyright (C) 2011-2018 Filipe Coelho <falktx@falktx.com> | |||||
* Copyright (C) 2011-2019 Filipe Coelho <falktx@falktx.com> | |||||
* | * | ||||
* This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
* modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
@@ -23,6 +23,10 @@ | |||||
# import <Cocoa/Cocoa.h> | # import <Cocoa/Cocoa.h> | ||||
#endif | #endif | ||||
#ifdef HAVE_X11 | |||||
# include <X11/Xlib.h> | |||||
#endif | |||||
namespace CB = CarlaBackend; | namespace CB = CarlaBackend; | ||||
// ------------------------------------------------------------------------------------------------------------------- | // ------------------------------------------------------------------------------------------------------------------- | ||||
@@ -39,4 +43,72 @@ int carla_cocoa_get_window(void* nsViewPtr) | |||||
#endif | #endif | ||||
} | } | ||||
void carla_x11_reparent_window(uintptr_t winId1, uintptr_t winId2) | |||||
{ | |||||
CARLA_SAFE_ASSERT_RETURN(winId1 != 0,); | |||||
CARLA_SAFE_ASSERT_RETURN(winId2 != 0,); | |||||
#ifdef HAVE_X11 | |||||
if (::Display* const disp = XOpenDisplay(nullptr)) | |||||
{ | |||||
XReparentWindow(disp, winId1, winId2, 0, 0); | |||||
XMapWindow(disp, winId1); | |||||
XCloseDisplay(disp); | |||||
} | |||||
#endif | |||||
} | |||||
void carla_x11_move_window(uintptr_t winId, int x, int y) | |||||
{ | |||||
CARLA_SAFE_ASSERT_RETURN(winId != 0,); | |||||
#ifdef HAVE_X11 | |||||
if (::Display* const disp = XOpenDisplay(nullptr)) | |||||
{ | |||||
XMoveWindow(disp, winId, x, y); | |||||
XCloseDisplay(disp); | |||||
} | |||||
#else | |||||
// unused | |||||
return; (void)x; (void)y; | |||||
#endif | |||||
} | |||||
int* carla_x11_get_window_pos(uintptr_t winId) | |||||
{ | |||||
static int pos[4]; | |||||
if (winId == 0) | |||||
{ | |||||
pos[0] = 0; | |||||
pos[1] = 0; | |||||
pos[2] = 0; | |||||
pos[3] = 0; | |||||
} | |||||
#ifdef HAVE_X11 | |||||
else if (::Display* const disp = XOpenDisplay(nullptr)) | |||||
{ | |||||
int x, y; | |||||
Window child; | |||||
XWindowAttributes xwa; | |||||
XTranslateCoordinates(disp, winId, XRootWindow(disp, 0), 0, 0, &x, &y, &child); | |||||
XGetWindowAttributes(disp, winId, &xwa); | |||||
XCloseDisplay(disp); | |||||
pos[0] = x - xwa.x; | |||||
pos[1] = y - xwa.y; | |||||
pos[2] = xwa.x; | |||||
pos[3] = xwa.y; | |||||
} | |||||
#endif | |||||
else | |||||
{ | |||||
pos[0] = 0; | |||||
pos[1] = 0; | |||||
pos[2] = 0; | |||||
pos[3] = 0; | |||||
} | |||||
return pos; | |||||
} | |||||
// ------------------------------------------------------------------------------------------------------------------- | // ------------------------------------------------------------------------------------------------------------------- |
@@ -235,6 +235,15 @@ class CarlaUtils(object): | |||||
self.lib.carla_cocoa_get_window.argtypes = [c_uintptr] | self.lib.carla_cocoa_get_window.argtypes = [c_uintptr] | ||||
self.lib.carla_cocoa_get_window.restype = c_int | self.lib.carla_cocoa_get_window.restype = c_int | ||||
self.lib.carla_x11_reparent_window.argtypes = [c_uintptr, c_uintptr] | |||||
self.lib.carla_x11_reparent_window.restype = None | |||||
self.lib.carla_x11_move_window.argtypes = [c_uintptr, c_int, c_int] | |||||
self.lib.carla_x11_move_window.restype = None | |||||
self.lib.carla_x11_get_window_pos.argtypes = [c_uintptr] | |||||
self.lib.carla_x11_get_window_pos.restype = POINTER(c_int) | |||||
# use _putenv on windows | # use _putenv on windows | ||||
if not WINDOWS: | if not WINDOWS: | ||||
self.msvcrt = None | self.msvcrt = None | ||||
@@ -348,4 +357,14 @@ class CarlaUtils(object): | |||||
def cocoa_get_window(self, winId): | def cocoa_get_window(self, winId): | ||||
return self.lib.carla_cocoa_get_window(winId) | return self.lib.carla_cocoa_get_window(winId) | ||||
def x11_reparent_window(self, winId1, winId2): | |||||
self.lib.carla_x11_reparent_window(winId1, winId2) | |||||
def x11_move_window(self, winId, x, y): | |||||
self.lib.carla_x11_move_window(winId, x, y) | |||||
def x11_get_window_pos(self, winId): | |||||
data = self.lib.carla_x11_get_window_pos(winId) | |||||
return tuple(int(data[i]) for i in range(4)) | |||||
# ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ |