Browse Source

Force-fix window position offset of Carla-embed mouse events

tags/v1.9.9
falkTX FilipeCSnuk 6 years ago
parent
commit
056ce15d1a
1 changed files with 55 additions and 23 deletions
  1. +55
    -23
      source/native-plugins/resources/carla-plugin

+ 55
- 23
source/native-plugins/resources/carla-plugin View File

@@ -405,48 +405,79 @@ class CarlaMiniW(ExternalUI, HostWindow):
# ------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------
# Embed Widget # Embed Widget


if LINUX and config_UseQt5:
if config_UseQt5 and LINUX:
from PyQt5.QtGui import QMouseEvent from PyQt5.QtGui import QMouseEvent


class QEmbedWidget(QWidget): class QEmbedWidget(QWidget):
def __init__(self):
def __init__(self, winId):
QWidget.__init__(self) QWidget.__init__(self)
self.setAttribute(Qt.WA_LayoutUsesWidgetRect) self.setAttribute(Qt.WA_LayoutUsesWidgetRect)

self.fPos = (0, 0)
self.move(0, 0) self.move(0, 0)


self.fPos = (0, 0)
self.fWinId = 0 self.fWinId = 0


def eventFilter(self, obj, ev):
if isinstance(ev, QMouseEvent):
pos = gCarla.utils.x11_get_window_pos(self.fWinId)
if self.fPos != pos:
self.fPos = pos
self.move(pos[0], pos[1])
gCarla.utils.x11_move_window(self.fWinId, 0, 0)
return False
def getWidget(self):
return self


def finalSetup(self, gui, winId): def finalSetup(self, gui, winId):
self.fWinId = int(self.winId()) self.fWinId = int(self.winId())
gui.ui.centralwidget.installEventFilter(self)
gui.ui.menubar.installEventFilter(self) gui.ui.menubar.installEventFilter(self)
gCarla.utils.x11_reparent_window(self.fWinId, winId) gCarla.utils.x11_reparent_window(self.fWinId, winId)
self.show() self.show()


elif LINUX and not config_UseQt5:
def fixPosition(self):
pos = gCarla.utils.x11_get_window_pos(self.fWinId)
if self.fPos == pos:
return
self.fPos = pos
self.move(pos[0], pos[1])
gCarla.utils.x11_move_window(self.fWinId, 0, 0)

def eventFilter(self, obj, ev):
if isinstance(ev, QMouseEvent):
self.fixPosition()
return False

def enterEvent(self, ev):
self.fixPosition()
QWidget.enterEvent(self, ev)

elif config_UseQt5 and not LINUX:
from PyQt5.QtGui import QWindow

class QEmbedWidget(object):
def __init__(self, winId):
self.fWindow = QWindow.fromWinId(winId)
self.fWidget = QWidget.createWindowContainer(self.fWindow)
self.fWidget.setAttribute(Qt.WA_LayoutUsesWidgetRect)

# TODO: show/hide/close events

def getWidget(self):
return self.fWidget

def finalSetup(self, gui, winId):
self.fWidget.show()

elif not config_UseQt5 and LINUX:
from PyQt4.QtGui import QX11EmbedWidget from PyQt4.QtGui import QX11EmbedWidget


class QEmbedWidget(QX11EmbedWidget): class QEmbedWidget(QX11EmbedWidget):
def __init__(self):
def __init__(self, winId):
QX11EmbedWidget.__init__(self) QX11EmbedWidget.__init__(self)


def getWidget(self):
return self

def finalSetup(self, gui, winId): def finalSetup(self, gui, winId):
self.embedInto(winId) self.embedInto(winId)
self.show() self.show()


else: else:
class QEmbedWidget(object): class QEmbedWidget(object):
def __init__(self, winId, width, height):
def __init__(self, winId):
print("Cannot use embed UI with this configuration") print("Cannot use embed UI with this configuration")
raise Exception raise Exception


@@ -455,18 +486,19 @@ else:


class CarlaEmbedW(QEmbedWidget): class CarlaEmbedW(QEmbedWidget):
def __init__(self, host, winId): def __init__(self, host, winId):
QEmbedWidget.__init__(self)
self.setFixedSize(740, 512)
QEmbedWidget.__init__(self, winId)


self.host = host self.host = host
self.fWinId = winId self.fWinId = winId
self.fWidget = self.getWidget()
self.fWidget.setFixedSize(740, 512)


self.fLayout = QVBoxLayout(self)
self.fLayout = QVBoxLayout(self.fWidget)
self.fLayout.setContentsMargins(0, 0, 0, 0) self.fLayout.setContentsMargins(0, 0, 0, 0)
self.fLayout.setSpacing(0) self.fLayout.setSpacing(0)
self.setLayout(self.fLayout)
self.fWidget.setLayout(self.fLayout)


self.gui = CarlaMiniW(host, self)
self.gui = CarlaMiniW(host, self.fWidget)
self.gui.hide() self.gui.hide()


self.gui.ui.act_file_quit.setEnabled(False) self.gui.ui.act_file_quit.setEnabled(False)
@@ -493,7 +525,7 @@ class CarlaEmbedW(QEmbedWidget):
self.addWidget(self.gui.centralWidget()) self.addWidget(self.gui.centralWidget())
self.finalSetup(self.gui, winId) self.finalSetup(self.gui, winId)


self.gui.send(["ready", int(self.winId())])
self.gui.send(["ready", int(self.fWidget.winId())])


def addShortcutActions(self, actions): def addShortcutActions(self, actions):
for action in actions: for action in actions:
@@ -501,11 +533,11 @@ class CarlaEmbedW(QEmbedWidget):
self.fShortcutActions.append(action) self.fShortcutActions.append(action)


def addWidget(self, widget): def addWidget(self, widget):
widget.setParent(self)
widget.setParent(self.fWidget)
self.fLayout.addWidget(widget) self.fLayout.addWidget(widget)


def addLine(self): def addLine(self):
line = QFrame(self)
line = QFrame(self.fWidget)
line.setFrameShadow(QFrame.Sunken) line.setFrameShadow(QFrame.Sunken)
line.setFrameShape(QFrame.HLine) line.setFrameShape(QFrame.HLine)
line.setLineWidth(0) line.setLineWidth(0)


Loading…
Cancel
Save