Browse Source

Add back X11 tricks for libcarla_utils

Signed-off-by: falkTX <falktx@falktx.com>
tags/v2.1-rc1
falkTX 4 years ago
parent
commit
aab5c471e0
3 changed files with 105 additions and 8 deletions
  1. +13
    -7
      source/backend/CarlaUtils.h
  2. +73
    -1
      source/backend/utils/Windows.cpp
  3. +19
    -0
      source/frontend/carla_utils.py

+ 13
- 7
source/backend/CarlaUtils.h View File

@@ -128,7 +128,7 @@ typedef struct _CarlaCachedPluginInfo {

} CarlaCachedPluginInfo;

/* ------------------------------------------------------------------------------------------------------------
/* --------------------------------------------------------------------------------------------------------------------
* 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);

/* ------------------------------------------------------------------------------------------------------------
/* --------------------------------------------------------------------------------------------------------------------
* 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);

/* ------------------------------------------------------------------------------------------------------------
/* --------------------------------------------------------------------------------------------------------------------
* 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);

#ifndef CARLA_HOST_H_INCLUDED
/* ------------------------------------------------------------------------------------------------------------
/* --------------------------------------------------------------------------------------------------------------------
* info about current library */

/*!
@@ -255,12 +255,18 @@ CARLA_EXPORT const char* carla_get_library_filename();
CARLA_EXPORT const char* carla_get_library_folder();
#endif

// -------------------------------------------------------------------------------------------------------------------
// TESTING
/* --------------------------------------------------------------------------------------------------------------------
* window control */

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

/* ----------------------------------------------------------------------------------------------------------------- */

/** @} */



+ 73
- 1
source/backend/utils/Windows.cpp View File

@@ -1,6 +1,6 @@
/*
* 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
* modify it under the terms of the GNU General Public License as
@@ -23,6 +23,10 @@
# import <Cocoa/Cocoa.h>
#endif

#ifdef HAVE_X11
# include <X11/Xlib.h>
#endif

namespace CB = CarlaBackend;

// -------------------------------------------------------------------------------------------------------------------
@@ -39,4 +43,72 @@ int carla_cocoa_get_window(void* nsViewPtr)
#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;
}

// -------------------------------------------------------------------------------------------------------------------

+ 19
- 0
source/frontend/carla_utils.py View File

@@ -235,6 +235,15 @@ class CarlaUtils(object):
self.lib.carla_cocoa_get_window.argtypes = [c_uintptr]
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
if not WINDOWS:
self.msvcrt = None
@@ -348,4 +357,14 @@ class CarlaUtils(object):
def cocoa_get_window(self, 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))

# ------------------------------------------------------------------------------------------------------------

Loading…
Cancel
Save