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)) | |||||
| # ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ | ||||