Browse Source

Cleanup; Test for NOT using Qt for UIs

tags/1.9.4
falkTX 11 years ago
parent
commit
ad942fb32c
12 changed files with 232 additions and 204 deletions
  1. +41
    -19
      Makefile
  2. +0
    -5
      source/Makefile.mk
  3. +30
    -25
      source/backend/plugin/CarlaPlugin.cpp
  4. +20
    -16
      source/backend/plugin/CarlaPluginInternal.hpp
  5. +4
    -2
      source/backend/plugin/Makefile
  6. +8
    -3
      source/backend/plugin/VstPlugin.cpp
  7. +3
    -2
      source/bridges/Makefile
  8. +3
    -3
      source/utils/CarlaStateUtils.hpp
  9. +16
    -16
      source/widgets/canvaspreviewframe.py
  10. +22
    -25
      source/widgets/ledbutton.py
  11. +3
    -6
      source/widgets/pixmapbutton.py
  12. +82
    -82
      source/widgets/pixmapdial.py

+ 41
- 19
Makefile View File

@@ -9,13 +9,28 @@ DESTDIR =


SED_PREFIX = $(shell echo $(PREFIX) | sed "s/\//\\\\\\\\\//g") SED_PREFIX = $(shell echo $(PREFIX) | sed "s/\//\\\\\\\\\//g")


LINK = ln -sf
PYUIC = pyuic4
PYRCC = pyrcc4 -py3
LINK = ln -sf
PYUIC ?= pyuic4
PYRCC ?= pyrcc4 -py3


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


HAVE_OPENGL = $(shell pkg-config --exists gl && echo true)
HAVE_QTCORE = $(shell pkg-config --exists QtCore && echo true)

ifneq ($(HAVE_OPENGL),true)
all:
@echo Error: Missing OpenGL or pkg-config, cannot build
@exit 1
else
ifneq ($(HAVE_QTCORE),true)
all:
@echo Error: Missing QtCore, cannot build
@exit 1
else
all: CPP RES UI WIDGETS all: CPP RES UI WIDGETS
endif
endif


# ----------------------------------------------------------------------------------------------------------------------------------------- # -----------------------------------------------------------------------------------------------------------------------------------------
# C++ code # C++ code
@@ -62,15 +77,22 @@ RES = source/resources_rc.py


RES: $(RES) RES: $(RES)


source/resources_rc.py: resources/resources.qrc
source/%_rc.py: resources/%.qrc
$(PYRCC) $< -o $@ $(PYRCC) $< -o $@


# ----------------------------------------------------------------------------------------------------------------------------------------- # -----------------------------------------------------------------------------------------------------------------------------------------
# UI code # UI code


UIs = source/ui_carla.py source/ui_carla_control.py \
source/ui_carla_about.py source/ui_carla_database.py source/ui_carla_edit.py source/ui_carla_parameter.py source/ui_carla_plugin.py \
source/ui_carla_refresh.py source/ui_carla_settings.py \
UIs = \
source/ui_carla.py \
source/ui_carla_control.py \
source/ui_carla_about.py \
source/ui_carla_database.py \
source/ui_carla_edit.py \
source/ui_carla_parameter.py \
source/ui_carla_plugin.py \
source/ui_carla_refresh.py \
source/ui_carla_settings.py \
source/ui_inputdialog_value.py source/ui_inputdialog_value.py


UI: $(UIs) UI: $(UIs)
@@ -105,7 +127,7 @@ clean:
rm -f $(RES) rm -f $(RES)
rm -f $(UIs) rm -f $(UIs)
rm -f $(WIDGETS) rm -f $(WIDGETS)
rm -f *~ source/*~ source/*.pyc source/ui_*.py source/resources_rc.py
rm -f *~ source/*~ source/*.pyc source/*_rc.py source/ui_*.py


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


@@ -126,7 +148,7 @@ install:
install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/ install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/
install -d $(DESTDIR)$(PREFIX)/share/carla/ install -d $(DESTDIR)$(PREFIX)/share/carla/


# Install script files and binaries
# Install script files
install -m 755 \ install -m 755 \
data/carla \ data/carla \
data/carla-control \ data/carla-control \
@@ -137,24 +159,24 @@ install:
install -m 644 data/*.desktop $(DESTDIR)$(PREFIX)/share/applications/ install -m 644 data/*.desktop $(DESTDIR)$(PREFIX)/share/applications/


# Install icons, 16x16 # Install icons, 16x16
install -m 644 resources/16x16/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/
install -m 644 resources/16x16/carla-control.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/
install -m 644 resources/16x16/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/
install -m 644 resources/16x16/carla-control.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/


# Install icons, 48x48 # Install icons, 48x48
install -m 644 resources/48x48/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/
install -m 644 resources/48x48/carla-control.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/
install -m 644 resources/48x48/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/
install -m 644 resources/48x48/carla-control.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/


# Install icons, 128x128 # Install icons, 128x128
install -m 644 resources/128x128/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/
install -m 644 resources/128x128/carla-control.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/
install -m 644 resources/128x128/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/
install -m 644 resources/128x128/carla-control.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/


# Install icons, 256x256 # Install icons, 256x256
install -m 644 resources/256x256/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/
install -m 644 resources/256x256/carla-control.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/
install -m 644 resources/256x256/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/
install -m 644 resources/256x256/carla-control.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/


# Install icons, scalable # Install icons, scalable
install -m 644 resources/scalable/carla.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/
install -m 644 resources/scalable/carla-control.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/
install -m 644 resources/scalable/carla.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/
install -m 644 resources/scalable/carla-control.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/


# Install binary data # Install binary data
install -m 755 \ install -m 755 \


+ 0
- 5
source/Makefile.mk View File

@@ -53,7 +53,6 @@ BUILD_CXX_FLAGS += -DVESTIGE_HEADER
# -------------------------------------------------------------- # --------------------------------------------------------------


HAVE_JACK = $(shell pkg-config --exists jack && echo true) HAVE_JACK = $(shell pkg-config --exists jack && echo true)
HAVE_OPENGL = $(shell pkg-config --exists gl && echo true)


HAVE_AF_DEPS = $(shell pkg-config --exists libavcodec libavformat sndfile && echo true) HAVE_AF_DEPS = $(shell pkg-config --exists libavcodec libavformat sndfile && echo true)
HAVE_ZYN_DEPS = $(shell pkg-config --exists fftw3 mxml && echo true) HAVE_ZYN_DEPS = $(shell pkg-config --exists fftw3 mxml && echo true)
@@ -63,10 +62,6 @@ HAVE_JACK_LATENCY = $(shell pkg-config --atleast-version=0.121.0 jack && echo tr
HAVE_JACK2 = $(shell pkg-config --atleast-version=1.9.0 jack && echo true) HAVE_JACK2 = $(shell pkg-config --atleast-version=1.9.0 jack && echo true)
endif endif


ifeq ($(CARLA_PLUGIN_SUPPORT),true)
HAVE_SUIL = $(shell pkg-config --exists suil-0 && echo true)
endif

ifeq ($(CARLA_SAMPLERS_SUPPORT),true) ifeq ($(CARLA_SAMPLERS_SUPPORT),true)
HAVE_FLUIDSYNTH = $(shell pkg-config --exists fluidsynth && echo true) HAVE_FLUIDSYNTH = $(shell pkg-config --exists fluidsynth && echo true)
HAVE_LINUXSAMPLER = $(shell pkg-config --exists linuxsampler && echo true) HAVE_LINUXSAMPLER = $(shell pkg-config --exists linuxsampler && echo true)


+ 30
- 25
source/backend/plugin/CarlaPlugin.cpp View File

@@ -1971,18 +1971,21 @@ CarlaPlugin::ScopedProcessLocker::~ScopedProcessLocker()
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// CarlaPluginGUI // CarlaPluginGUI


CarlaPluginGUI::CarlaPluginGUI(QWidget* const parent, Callback* const callback)
: QMainWindow(parent),
kCallback(callback),
fContainer(this)
{
carla_debug("CarlaPluginGUI::CarlaPluginGUI(%p, %p)", parent, callback);
CarlaPluginGUI::CarlaPluginGUI(DGL::App* const app, Callback* const callback)
//CarlaPluginGUI::CarlaPluginGUI(QWidget* const parent, Callback* const callback)
: DGL::Window(app),
kCallback(callback)/*,
fContainer(this)*/
{
carla_debug("CarlaPluginGUI::CarlaPluginGUI(%p, %p)", app, callback);
CARLA_ASSERT(app != nullptr);
CARLA_ASSERT(callback != nullptr); CARLA_ASSERT(callback != nullptr);


setCentralWidget(&fContainer);
adjustSize();
//setCentralWidget(&fContainer);
//adjustSize();


QMainWindow::setVisible(false);
//QMainWindow::setVisible(false);
hide();
} }


CarlaPluginGUI::~CarlaPluginGUI() CarlaPluginGUI::~CarlaPluginGUI()
@@ -1990,28 +1993,30 @@ CarlaPluginGUI::~CarlaPluginGUI()
carla_debug("CarlaPluginGUI::~CarlaPluginGUI()"); carla_debug("CarlaPluginGUI::~CarlaPluginGUI()");
} }


#if 0
WId CarlaPluginGUI::getWinId() const WId CarlaPluginGUI::getWinId() const
{ {
carla_debug("CarlaPluginGUI::getWinId()"); carla_debug("CarlaPluginGUI::getWinId()");
return fContainer.winId(); return fContainer.winId();
} }
#endif


void CarlaPluginGUI::closeEvent(QCloseEvent* const event)
{
carla_debug("CarlaPluginGUI::closeEvent(%p)", event);
CARLA_ASSERT(event != nullptr);
if (! event->spontaneous())
{
event->ignore();
return;
}
if (kCallback != nullptr)
kCallback->guiClosedCallback();
QMainWindow::closeEvent(event);
}
// void CarlaPluginGUI::closeEvent(QCloseEvent* const event)
// {
// carla_debug("CarlaPluginGUI::closeEvent(%p)", event);
// CARLA_ASSERT(event != nullptr);
//
// if (! event->spontaneous())
// {
// event->ignore();
// return;
// }
//
// if (kCallback != nullptr)
// kCallback->guiClosedCallback();
//
// QMainWindow::closeEvent(event);
// }


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




+ 20
- 16
source/backend/plugin/CarlaPluginInternal.hpp View File

@@ -28,16 +28,18 @@
#include "CarlaMIDI.h" #include "CarlaMIDI.h"


#include "RtList.hpp" #include "RtList.hpp"
#include "dgl/App.hpp"
#include "dgl/Window.hpp"


#include <QtGui/QMainWindow>
//#include <QtGui/QMainWindow>


#ifdef Q_WS_X11
# include <QtGui/QX11EmbedContainer>
typedef QX11EmbedContainer GuiContainer;
#else
# include <QtGui/QWidget>
typedef QWidget GuiContainer;
#endif
//#ifdef Q_WS_X11
//# include <QtGui/QX11EmbedContainer>
//typedef QX11EmbedContainer GuiContainer;
//#else
//# include <QtGui/QWidget>
//typedef QWidget GuiContainer;
//#endif


#define CARLA_DECLARE_NON_COPY_STRUCT(structName) \ #define CARLA_DECLARE_NON_COPY_STRUCT(structName) \
structName(structName&) = delete; \ structName(structName&) = delete; \
@@ -395,7 +397,7 @@ struct ExternalMidiNote {


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


class CarlaPluginGUI : public QMainWindow
class CarlaPluginGUI : public DGL::Window//QMainWindow
{ {
public: public:
class Callback class Callback
@@ -405,17 +407,18 @@ public:
virtual void guiClosedCallback() = 0; virtual void guiClosedCallback() = 0;
}; };


CarlaPluginGUI(QWidget* const parent, Callback* const callback);
CarlaPluginGUI(DGL::App* const app, Callback* const callback);
//CarlaPluginGUI(QWidget* const parent, Callback* const callback);
~CarlaPluginGUI(); ~CarlaPluginGUI();


WId getWinId() const;
//WId getWinId() const;


protected:
void closeEvent(QCloseEvent* const event);
//protected:
//void closeEvent(QCloseEvent* const event);


private: private:
Callback* const kCallback; Callback* const kCallback;
GuiContainer fContainer;
//GuiContainer fContainer;


CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginGUI) CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginGUI)
}; };
@@ -426,6 +429,7 @@ struct CarlaPluginProtectedData {
CarlaEngine* const engine; CarlaEngine* const engine;
CarlaEngineClient* client; CarlaEngineClient* client;
CarlaPluginGUI* gui; CarlaPluginGUI* gui;
DGL::App app;


bool active; bool active;
bool activeBefore; bool activeBefore;
@@ -578,7 +582,7 @@ struct CarlaPluginProtectedData {
if (gui != nullptr) if (gui != nullptr)
return; return;


gui = new CarlaPluginGUI(nullptr, callback);
gui = new CarlaPluginGUI(&app, callback);
} }


void destroyUiIfNeeded() void destroyUiIfNeeded()
@@ -586,7 +590,7 @@ struct CarlaPluginProtectedData {
if (gui == nullptr) if (gui == nullptr)
return; return;


gui->close();
gui->hide();
delete gui; delete gui;
gui = nullptr; gui = nullptr;
} }


+ 4
- 2
source/backend/plugin/Makefile View File

@@ -8,8 +8,10 @@ include ../Makefile.mk


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


BUILD_CXX_FLAGS += $(shell pkg-config --cflags liblo QtCore QtGui)
LINK_FLAGS += $(shell pkg-config --libs liblo QtCore QtGui)
BUILD_CXX_FLAGS += -I../../libs/distrho

BUILD_CXX_FLAGS += $(shell pkg-config --cflags liblo QtCore gl)
LINK_FLAGS += $(shell pkg-config --libs liblo QtCore gl)


ifeq ($(HAVE_SUIL),true) ifeq ($(HAVE_SUIL),true)
BUILD_CXX_FLAGS += $(shell pkg-config --cflags suil-0) BUILD_CXX_FLAGS += $(shell pkg-config --cflags suil-0)


+ 8
- 3
source/backend/plugin/VstPlugin.cpp View File

@@ -361,7 +361,7 @@ public:
#ifdef Q_WS_X11 #ifdef Q_WS_X11
//value = (intptr_t)QX11Info::display(); //value = (intptr_t)QX11Info::display();
#endif #endif
void* const ptr = (void*)kData->gui->getWinId();
void* const ptr = (void*)kData->gui->getWindowId();


if (dispatcher(effEditOpen, 0, value, ptr, 0.0f) != 0) if (dispatcher(effEditOpen, 0, value, ptr, 0.0f) != 0)
{ {
@@ -376,11 +376,11 @@ public:


if (width > 0 && height > 0) if (width > 0 && height > 0)
{ {
kData->gui->setFixedSize(width, height);
kData->gui->setSize(width, height);
} }
} }


kData->gui->setWindowTitle(QString("%1 (GUI)").arg((const char*)fName));
kData->gui->setWindowTitle(QString("%1 (GUI)").arg((const char*)fName).toUtf8().constData());
kData->gui->show(); kData->gui->show();
} }
else else
@@ -403,6 +403,8 @@ public:


void idleGui() void idleGui()
{ {
kData->app.idle();

#ifdef VESTIGE_HEADER #ifdef VESTIGE_HEADER
if (fEffect != nullptr /*&& effect->ptr1*/) if (fEffect != nullptr /*&& effect->ptr1*/)
#else #else
@@ -413,7 +415,10 @@ public:
dispatcher(effIdle, 0, 0, nullptr, 0.0f); dispatcher(effIdle, 0, 0, nullptr, 0.0f);


if (! fGui.isOsc && fGui.isVisible) if (! fGui.isOsc && fGui.isVisible)
{
dispatcher(effEditIdle, 0, 0, nullptr, 0.0f); dispatcher(effEditIdle, 0, 0, nullptr, 0.0f);
kData->gui->idle();
}
} }


CarlaPlugin::idleGui(); CarlaPlugin::idleGui();


+ 3
- 2
source/bridges/Makefile View File

@@ -34,11 +34,11 @@ endif
# Plugin bridges # Plugin bridges


BUILD_PLUGIN_FLAGS = $(BUILD_CXX_FLAGS) -DBUILD_BRIDGE_PLUGIN -DBRIDGE_PLUGIN BUILD_PLUGIN_FLAGS = $(BUILD_CXX_FLAGS) -DBUILD_BRIDGE_PLUGIN -DBRIDGE_PLUGIN
BUILD_PLUGIN_FLAGS += -DWANT_JACK -I../backend/engine -I../backend/plugin -I../libs
BUILD_PLUGIN_FLAGS += -DWANT_JACK -I../backend/engine -I../backend/plugin -I../libs -I../libs/distrho
BUILD_PLUGIN_FLAGS += $(shell pkg-config --cflags jack) $(QT_UI_FLAGS) BUILD_PLUGIN_FLAGS += $(shell pkg-config --cflags jack) $(QT_UI_FLAGS)


LINK_PLUGIN_FLAGS = $(LINK_FLAGS) LINK_PLUGIN_FLAGS = $(LINK_FLAGS)
LINK_PLUGIN_FLAGS += $(QT_UI_LIBS)
LINK_PLUGIN_FLAGS += $(QT_UI_LIBS) -lopengl32 -lgdi32


NATIVE_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS) NATIVE_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS)
NATIVE_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) $(shell pkg-config --libs jack) -ldl NATIVE_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) $(shell pkg-config --libs jack) -ldl
@@ -393,6 +393,7 @@ OBJS_WIN32 += \


# libs # libs
OBJS_WIN32 += \ OBJS_WIN32 += \
../libs/dgl.a \
../libs/lilv_win32.a \ ../libs/lilv_win32.a \
../libs/rtmempool_win32.a ../libs/rtmempool_win32.a




+ 3
- 3
source/utils/CarlaStateUtils.hpp View File

@@ -21,7 +21,7 @@
#include "CarlaBackendUtils.hpp" #include "CarlaBackendUtils.hpp"


#include <QtXml/QDomNode> #include <QtXml/QDomNode>
#include <vector>
#include <QtCore/QVector>


CARLA_BACKEND_START_NAMESPACE CARLA_BACKEND_START_NAMESPACE


@@ -73,8 +73,8 @@ struct StateCustomData {
} }
}; };


typedef std::vector<StateParameter*> StateParameterVector;
typedef std::vector<StateCustomData*> StateCustomDataVector;
typedef QVector<StateParameter*> StateParameterVector;
typedef QVector<StateCustomData*> StateCustomDataVector;


struct SaveState { struct SaveState {
const char* type; const char* type;


+ 16
- 16
source/widgets/canvaspreviewframe.py View File

@@ -1,20 +1,20 @@
#!/usr/bin/env python
#!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-


# Custom Mini Canvas Preview, a custom Qt4 widget # Custom Mini Canvas Preview, a custom Qt4 widget
# Copyright (C) 2011-2013 Filipe Coelho <falktx@falktx.com> # Copyright (C) 2011-2013 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 published by
# the Free Software Foundation; either version 2 of the License, or
# any later version.
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# For a full copy of the GNU General Public License see the COPYING file
# For a full copy of the GNU General Public License see the GPL.txt file


# ------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------
# Imports (Global) # Imports (Global)
@@ -45,8 +45,8 @@ class CanvasPreviewFrame(QFrame):
self.fScale = 1.0 self.fScale = 1.0
self.fScene = None self.fScene = None
self.fRealParent = None self.fRealParent = None
self.fFakeWidth = 0
self.fFakeHeight = 0
self.fFakeWidth = 0.0
self.fFakeHeight = 0.0


self.fRenderSource = self.getRenderSource() self.fRenderSource = self.getRenderSource()
self.fRenderTarget = QRectF(0, 0, 0, 0) self.fRenderTarget = QRectF(0, 0, 0, 0)
@@ -72,18 +72,18 @@ class CanvasPreviewFrame(QFrame):
self.fRealParent = parent self.fRealParent = parent


def getRenderSource(self): def getRenderSource(self):
xPadding = (self.width() - self.fFakeWidth) / 2
yPadding = (self.height() - self.fFakeHeight) / 2
xPadding = (float(self.width()) - self.fFakeWidth) / 2.0
yPadding = (float(self.height()) - self.fFakeHeight) / 2.0
return QRectF(xPadding, yPadding, self.fFakeWidth, self.fFakeHeight) return QRectF(xPadding, yPadding, self.fFakeWidth, self.fFakeHeight)


def setViewPosX(self, xp): def setViewPosX(self, xp):
x = xp * self.fFakeWidth
x = self.fFakeWidth*xp
xRatio = (x / self.fFakeWidth) * self.fViewRect[iWidth] / self.fScale xRatio = (x / self.fFakeWidth) * self.fViewRect[iWidth] / self.fScale
self.fViewRect[iX] = x - xRatio + self.fRenderSource.x() self.fViewRect[iX] = x - xRatio + self.fRenderSource.x()
self.update() self.update()


def setViewPosY(self, yp): def setViewPosY(self, yp):
y = yp * self.fFakeHeight
y = self.fFakeHeight*yp
yRatio = (y / self.fFakeHeight) * self.fViewRect[iHeight] / self.fScale yRatio = (y / self.fFakeHeight) * self.fViewRect[iHeight] / self.fScale
self.fViewRect[iY] = y - yRatio + self.fRenderSource.y() self.fViewRect[iY] = y - yRatio + self.fRenderSource.y()
self.update() self.update()
@@ -103,9 +103,9 @@ class CanvasPreviewFrame(QFrame):
self.fViewBrush = QBrush(brushColor) self.fViewBrush = QBrush(brushColor)
self.fViewPen = QPen(penColor, 1) self.fViewPen = QPen(penColor, 1)


def handleMouseEvent(self, event_x, event_y):
x = float(event_x) - self.fRenderSource.x() - (self.fViewRect[iWidth] / self.fScale / 2)
y = float(event_y) - self.fRenderSource.y() - (self.fViewRect[iHeight] / self.fScale / 2)
def handleMouseEvent(self, eventX, eventY):
x = float(eventX) - self.fRenderSource.x() - (self.fViewRect[iWidth] / self.fScale / 2)
y = float(eventY) - self.fRenderSource.y() - (self.fViewRect[iHeight] / self.fScale / 2)


maxWidth = self.fViewRect[iWidth] / self.fScale maxWidth = self.fViewRect[iWidth] / self.fScale
maxHeight = self.fViewRect[iHeight] / self.fScale maxHeight = self.fViewRect[iHeight] / self.fScale


+ 22
- 25
source/widgets/ledbutton.py View File

@@ -35,8 +35,8 @@ class LEDButton(QPushButton):
def __init__(self, parent): def __init__(self, parent):
QPushButton.__init__(self, parent) QPushButton.__init__(self, parent)


self.m_pixmap = QPixmap()
self.m_pixmapRect = QRectF(0, 0, 0, 0)
self.fPixmap = QPixmap()
self.fPixmapRect = QRectF(0, 0, 0, 0)


self.setCheckable(True) self.setCheckable(True)
self.setText("") self.setText("")
@@ -44,7 +44,7 @@ class LEDButton(QPushButton):
self.setColor(self.BLUE) self.setColor(self.BLUE)


def setColor(self, color): def setColor(self, color):
self.m_color = color
self.fColor = color


if color in (self.BLUE, self.GREEN, self.RED, self.YELLOW): if color in (self.BLUE, self.GREEN, self.RED, self.YELLOW):
size = 14 size = 14
@@ -56,37 +56,34 @@ class LEDButton(QPushButton):
self.setPixmapSize(size) self.setPixmapSize(size)


def setPixmapSize(self, size): def setPixmapSize(self, size):
self.m_pixmapRect = QRectF(0, 0, size, size)
self.fPixmapRect = QRectF(0, 0, size, size)


self.setMinimumWidth(size)
self.setMaximumWidth(size)
self.setMinimumHeight(size)
self.setMaximumHeight(size)
self.setMinimumSize(size, size)
self.setMaximumSize(size, size)


def paintEvent(self, event): def paintEvent(self, event):
painter = QPainter(self) painter = QPainter(self)
event.accept()


if self.isChecked(): if self.isChecked():
if self.m_color == self.BLUE:
self.m_pixmap.load(":/bitmaps/led_blue.png")
elif self.m_color == self.GREEN:
self.m_pixmap.load(":/bitmaps/led_green.png")
elif self.m_color == self.RED:
self.m_pixmap.load(":/bitmaps/led_red.png")
elif self.m_color == self.YELLOW:
self.m_pixmap.load(":/bitmaps/led_yellow.png")
elif self.m_color == self.BIG_RED:
self.m_pixmap.load(":/bitmaps/led-big_on.png")
if self.fColor == self.BLUE:
self.fPixmap.load(":/bitmaps/led_blue.png")
elif self.fColor == self.GREEN:
self.fPixmap.load(":/bitmaps/led_green.png")
elif self.fColor == self.RED:
self.fPixmap.load(":/bitmaps/led_red.png")
elif self.fColor == self.YELLOW:
self.fPixmap.load(":/bitmaps/led_yellow.png")
elif self.fColor == self.BIG_RED:
self.fPixmap.load(":/bitmaps/led-big_on.png")
else: else:
return return
else: else:
if self.m_color in (self.BLUE, self.GREEN, self.RED, self.YELLOW):
self.m_pixmap.load(":/bitmaps/led_off.png")
elif self.m_color == self.BIG_RED:
self.m_pixmap.load(":/bitmaps/led-big_off.png")
if self.fColor in (self.BLUE, self.GREEN, self.RED, self.YELLOW):
self.fPixmap.load(":/bitmaps/led_off.png")
elif self.fColor == self.BIG_RED:
self.fPixmap.load(":/bitmaps/led-big_off.png")
else: else:
return return


painter.drawPixmap(self.m_pixmapRect, self.m_pixmap, self.m_pixmapRect)

event.accept()
painter.drawPixmap(self.fPixmapRect, self.fPixmap, self.fPixmapRect)

+ 3
- 6
source/widgets/pixmapbutton.py View File

@@ -53,10 +53,8 @@ class PixmapButton(QPushButton):
def setPixmapSize(self, size): def setPixmapSize(self, size):
self.fPixmapRect = QRectF(0, 0, size, size) self.fPixmapRect = QRectF(0, 0, size, size)


self.setMinimumWidth(size)
self.setMaximumWidth(size)
self.setMinimumHeight(size)
self.setMaximumHeight(size)
self.setMinimumSize(size, size)
self.setMaximumSize(size, size)


def enterEvent(self, event): def enterEvent(self, event):
self.fIsHovered = True self.fIsHovered = True
@@ -68,6 +66,7 @@ class PixmapButton(QPushButton):


def paintEvent(self, event): def paintEvent(self, event):
painter = QPainter(self) painter = QPainter(self)
event.accept()


if not self.isEnabled(): if not self.isEnabled():
painter.setOpacity(0.2) painter.setOpacity(0.2)
@@ -78,5 +77,3 @@ class PixmapButton(QPushButton):
painter.drawPixmap(self.fPixmapRect, self.fPixmapHover, self.fPixmapRect) painter.drawPixmap(self.fPixmapRect, self.fPixmapHover, self.fPixmapRect)
else: else:
painter.drawPixmap(self.fPixmapRect, self.fPixmapNormal, self.fPixmapRect) painter.drawPixmap(self.fPixmapRect, self.fPixmapNormal, self.fPixmapRect)

event.accept()

+ 82
- 82
source/widgets/pixmapdial.py View File

@@ -45,95 +45,95 @@ class PixmapDial(QDial):
def __init__(self, parent): def __init__(self, parent):
QDial.__init__(self, parent) QDial.__init__(self, parent)


self.m_pixmap = QPixmap(":/bitmaps/dial_01d.png")
self.m_pixmapNum = "01"
self.m_customPaint = self.CUSTOM_PAINT_NULL
self.fPixmap = QPixmap(":/bitmaps/dial_01d.png")
self.fPixmapNum = "01"
self.fCustomPaint = self.CUSTOM_PAINT_NULL


self.m_hovered = False
self.m_hoverStep = self.HOVER_MIN
self.fHovered = False
self.fHoverStep = self.HOVER_MIN


if self.m_pixmap.width() > self.m_pixmap.height():
self.m_orientation = self.HORIZONTAL
if self.fPixmap.width() > self.fPixmap.height():
self.fOrientation = self.HORIZONTAL
else: else:
self.m_orientation = self.VERTICAL
self.fOrientation = self.VERTICAL


self.m_label = ""
self.m_labelPos = QPointF(0.0, 0.0)
self.m_labelFont = QFont()
self.m_labelFont.setPointSize(6)
self.m_labelWidth = 0
self.m_labelHeight = 0
self.m_labelGradient = QLinearGradient(0, 0, 0, 1)
self.fLabel = ""
self.fLabelPos = QPointF(0.0, 0.0)
self.fLabelFont = QFont()
self.fLabelFont.setPointSize(6)
self.fLabelWidth = 0
self.fLabelHeight = 0
self.fLabelGradient = QLinearGradient(0, 0, 0, 1)


if self.palette().window().color().lightness() > 100: if self.palette().window().color().lightness() > 100:
# Light background # Light background
c = self.palette().dark().color() c = self.palette().dark().color()
self.m_color1 = c
self.m_color2 = QColor(c.red(), c.green(), c.blue(), 0)
self.m_colorT = [self.palette().buttonText().color(), self.palette().mid().color()]
self.fColor1 = c
self.fColor2 = QColor(c.red(), c.green(), c.blue(), 0)
self.fColorT = [self.palette().buttonText().color(), self.palette().mid().color()]
else: else:
# Dark background # Dark background
self.m_color1 = QColor(0, 0, 0, 255)
self.m_color2 = QColor(0, 0, 0, 0)
self.m_colorT = [Qt.white, Qt.darkGray]
self.fColor1 = QColor(0, 0, 0, 255)
self.fColor2 = QColor(0, 0, 0, 0)
self.fColorT = [Qt.white, Qt.darkGray]


self.updateSizes() self.updateSizes()


def getSize(self): def getSize(self):
return self.p_size
return self.fSize


def setCustomPaint(self, paint): def setCustomPaint(self, paint):
self.m_customPaint = paint
self.m_labelPos.setY(self.p_size + self.m_labelHeight/2)
self.fCustomPaint = paint
self.fLabelPos.setY(self.fSize + self.fLabelHeight/2)
self.update() self.update()


def setEnabled(self, enabled): def setEnabled(self, enabled):
if self.isEnabled() != enabled: if self.isEnabled() != enabled:
self.m_pixmap.load(":/bitmaps/dial_%s%s.png" % (self.m_pixmapNum, "" if enabled else "d"))
self.fPixmap.load(":/bitmaps/dial_%s%s.png" % (self.fPixmapNum, "" if enabled else "d"))
self.updateSizes() self.updateSizes()
self.update() self.update()
QDial.setEnabled(self, enabled) QDial.setEnabled(self, enabled)


def setLabel(self, label): def setLabel(self, label):
self.m_label = label
self.fLabel = label


self.m_labelWidth = QFontMetrics(self.m_labelFont).width(label)
self.m_labelHeight = QFontMetrics(self.m_labelFont).height()
self.fLabelWidth = QFontMetrics(self.fLabelFont).width(label)
self.fLabelHeight = QFontMetrics(self.fLabelFont).height()


self.m_labelPos.setX(float(self.p_size)/2 - float(self.m_labelWidth)/2)
self.m_labelPos.setY(self.p_size + self.m_labelHeight)
self.fLabelPos.setX(float(self.fSize)/2 - float(self.fLabelWidth)/2)
self.fLabelPos.setY(self.fSize + self.fLabelHeight)


self.m_labelGradient.setColorAt(0.0, self.m_color1)
self.m_labelGradient.setColorAt(0.6, self.m_color1)
self.m_labelGradient.setColorAt(1.0, self.m_color2)
self.fLabelGradient.setColorAt(0.0, self.fColor1)
self.fLabelGradient.setColorAt(0.6, self.fColor1)
self.fLabelGradient.setColorAt(1.0, self.fColor2)


self.m_labelGradient.setStart(0, float(self.p_size)/2)
self.m_labelGradient.setFinalStop(0, self.p_size + self.m_labelHeight + 5)
self.fLabelGradient.setStart(0, float(self.fSize)/2)
self.fLabelGradient.setFinalStop(0, self.fSize + self.fLabelHeight + 5)


self.m_labelGradient_rect = QRectF(float(self.p_size)/8, float(self.p_size)/2, float(self.p_size)*6/8, self.p_size+self.m_labelHeight+5)
self.fLabelGradientRect = QRectF(float(self.fSize)/8, float(self.fSize)/2, float(self.fSize)*6/8, self.fSize+self.fLabelHeight+5)
self.update() self.update()


def setPixmap(self, pixmapId): def setPixmap(self, pixmapId):
self.m_pixmapNum = "%02i" % pixmapId
self.m_pixmap.load(":/bitmaps/dial_%s%s.png" % (self.m_pixmapNum, "" if self.isEnabled() else "d"))
self.fPixmapNum = "%02i" % pixmapId
self.fPixmap.load(":/bitmaps/dial_%s%s.png" % (self.fPixmapNum, "" if self.isEnabled() else "d"))


if self.m_pixmap.width() > self.m_pixmap.height():
self.m_orientation = self.HORIZONTAL
if self.fPixmap.width() > self.fPixmap.height():
self.fOrientation = self.HORIZONTAL
else: else:
self.m_orientation = self.VERTICAL
self.fOrientation = self.VERTICAL


self.updateSizes() self.updateSizes()
self.update() self.update()


def minimumSizeHint(self): def minimumSizeHint(self):
return QSize(self.p_size, self.p_size)
return QSize(self.fSize, self.fSize)


def sizeHint(self): def sizeHint(self):
return QSize(self.p_size, self.p_size)
return QSize(self.fSize, self.fSize)


def updateSizes(self): def updateSizes(self):
self.p_width = self.m_pixmap.width()
self.p_height = self.m_pixmap.height()
self.p_width = self.fPixmap.width()
self.p_height = self.fPixmap.height()


if self.p_width < 1: if self.p_width < 1:
self.p_width = 1 self.p_width = 1
@@ -141,41 +141,41 @@ class PixmapDial(QDial):
if self.p_height < 1: if self.p_height < 1:
self.p_height = 1 self.p_height = 1


if self.m_orientation == self.HORIZONTAL:
self.p_size = self.p_height
if self.fOrientation == self.HORIZONTAL:
self.fSize = self.p_height
self.p_count = self.p_width / self.p_height self.p_count = self.p_width / self.p_height
else: else:
self.p_size = self.p_width
self.fSize = self.p_width
self.p_count = self.p_height / self.p_width self.p_count = self.p_height / self.p_width


self.setMinimumSize(self.p_size, self.p_size + self.m_labelHeight + 5)
self.setMaximumSize(self.p_size, self.p_size + self.m_labelHeight + 5)
self.setMinimumSize(self.fSize, self.fSize + self.fLabelHeight + 5)
self.setMaximumSize(self.fSize, self.fSize + self.fLabelHeight + 5)


def enterEvent(self, event): def enterEvent(self, event):
self.m_hovered = True
if self.m_hoverStep == self.HOVER_MIN:
self.m_hoverStep += 1
self.fHovered = True
if self.fHoverStep == self.HOVER_MIN:
self.fHoverStep += 1
QDial.enterEvent(self, event) QDial.enterEvent(self, event)


def leaveEvent(self, event): def leaveEvent(self, event):
self.m_hovered = False
if self.m_hoverStep == self.HOVER_MAX:
self.m_hoverStep -= 1
self.fHovered = False
if self.fHoverStep == self.HOVER_MAX:
self.fHoverStep -= 1
QDial.leaveEvent(self, event) QDial.leaveEvent(self, event)


def paintEvent(self, event): def paintEvent(self, event):
painter = QPainter(self) painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing, True) painter.setRenderHint(QPainter.Antialiasing, True)


if self.m_label:
if self.m_customPaint == self.CUSTOM_PAINT_NULL:
painter.setPen(self.m_color2)
painter.setBrush(self.m_labelGradient)
painter.drawRect(self.m_labelGradient_rect)
if self.fLabel:
if self.fCustomPaint == self.CUSTOM_PAINT_NULL:
painter.setPen(self.fColor2)
painter.setBrush(self.fLabelGradient)
painter.drawRect(self.fLabelGradientRect)


painter.setFont(self.m_labelFont)
painter.setPen(self.m_colorT[0 if self.isEnabled() else 1])
painter.drawText(self.m_labelPos, self.m_label)
painter.setFont(self.fLabelFont)
painter.setPen(self.fColorT[0 if self.isEnabled() else 1])
painter.drawText(self.fLabelPos, self.fLabel)


if self.isEnabled(): if self.isEnabled():
current = float(self.value() - self.minimum()) current = float(self.value() - self.minimum())
@@ -185,25 +185,25 @@ class PixmapDial(QDial):
return return


value = current / divider value = current / divider
target = QRectF(0.0, 0.0, self.p_size, self.p_size)
target = QRectF(0.0, 0.0, self.fSize, self.fSize)


per = int((self.p_count - 1) * value) per = int((self.p_count - 1) * value)


if self.m_orientation == self.HORIZONTAL:
xpos = self.p_size * per
if self.fOrientation == self.HORIZONTAL:
xpos = self.fSize * per
ypos = 0.0 ypos = 0.0
else: else:
xpos = 0.0 xpos = 0.0
ypos = self.p_size * per
ypos = self.fSize * per


source = QRectF(xpos, ypos, self.p_size, self.p_size)
painter.drawPixmap(target, self.m_pixmap, source)
source = QRectF(xpos, ypos, self.fSize, self.fSize)
painter.drawPixmap(target, self.fPixmap, source)


# Custom knobs (Dry/Wet and Volume) # Custom knobs (Dry/Wet and Volume)
if self.m_customPaint in (self.CUSTOM_PAINT_CARLA_WET, self.CUSTOM_PAINT_CARLA_VOL):
if self.fCustomPaint in (self.CUSTOM_PAINT_CARLA_WET, self.CUSTOM_PAINT_CARLA_VOL):
# knob color # knob color
colorGreen = QColor(0x5D, 0xE7, 0x3D, 191 + self.m_hoverStep*7)
colorBlue = QColor(0x3E, 0xB8, 0xBE, 191 + self.m_hoverStep*7)
colorGreen = QColor(0x5D, 0xE7, 0x3D, 191 + self.fHoverStep*7)
colorBlue = QColor(0x3E, 0xB8, 0xBE, 191 + self.fHoverStep*7)


# draw small circle # draw small circle
ballRect = QRectF(8.0, 8.0, 15.0, 15.0) ballRect = QRectF(8.0, 8.0, 15.0, 15.0)
@@ -218,7 +218,7 @@ class PixmapDial(QDial):
startAngle = 216*16 startAngle = 216*16
spanAngle = -252*16*value spanAngle = -252*16*value


if self.m_customPaint == self.CUSTOM_PAINT_CARLA_WET:
if self.fCustomPaint == self.CUSTOM_PAINT_CARLA_WET:
painter.setBrush(colorBlue) painter.setBrush(colorBlue)
painter.setPen(QPen(colorBlue, 0)) painter.setPen(QPen(colorBlue, 0))
painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2)) painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2))
@@ -244,9 +244,9 @@ class PixmapDial(QDial):
painter.drawArc(4.0, 4.0, 26.0, 26.0, startAngle, spanAngle) painter.drawArc(4.0, 4.0, 26.0, 26.0, startAngle, spanAngle)


# Custom knobs (L and R) # Custom knobs (L and R)
elif self.m_customPaint in (self.CUSTOM_PAINT_CARLA_L, self.CUSTOM_PAINT_CARLA_R):
elif self.fCustomPaint in (self.CUSTOM_PAINT_CARLA_L, self.CUSTOM_PAINT_CARLA_R):
# knob color # knob color
color = QColor(0xAD + self.m_hoverStep*5, 0xD5 + self.m_hoverStep*4, 0x4B + self.m_hoverStep*5)
color = QColor(0xAD + self.fHoverStep*5, 0xD5 + self.fHoverStep*4, 0x4B + self.fHoverStep*5)


# draw small circle # draw small circle
ballRect = QRectF(7.0, 8.0, 11.0, 12.0) ballRect = QRectF(7.0, 8.0, 11.0, 12.0)
@@ -262,10 +262,10 @@ class PixmapDial(QDial):
painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.0, 2.0)) painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.0, 2.0))


# draw arc # draw arc
if self.m_customPaint == self.CUSTOM_PAINT_CARLA_L:
if self.fCustomPaint == self.CUSTOM_PAINT_CARLA_L:
startAngle = 216*16 startAngle = 216*16
spanAngle = -252.0*16*value spanAngle = -252.0*16*value
elif self.m_customPaint == self.CUSTOM_PAINT_CARLA_R:
elif self.fCustomPaint == self.CUSTOM_PAINT_CARLA_R:
startAngle = 324.0*16 startAngle = 324.0*16
spanAngle = 252.0*16*(1.0-value) spanAngle = 252.0*16*(1.0-value)
else: else:
@@ -274,13 +274,13 @@ class PixmapDial(QDial):
painter.setPen(QPen(color, 2)) painter.setPen(QPen(color, 2))
painter.drawArc(3.5, 4.5, 22.0, 22.0, startAngle, spanAngle) painter.drawArc(3.5, 4.5, 22.0, 22.0, startAngle, spanAngle)


if self.HOVER_MIN < self.m_hoverStep < self.HOVER_MAX:
self.m_hoverStep += 1 if self.m_hovered else -1
if self.HOVER_MIN < self.fHoverStep < self.HOVER_MAX:
self.fHoverStep += 1 if self.fHovered else -1
QTimer.singleShot(20, self, SLOT("update()")) QTimer.singleShot(20, self, SLOT("update()"))


else: else:
target = QRectF(0.0, 0.0, self.p_size, self.p_size)
painter.drawPixmap(target, self.m_pixmap, target)
target = QRectF(0.0, 0.0, self.fSize, self.fSize)
painter.drawPixmap(target, self.fPixmap, target)


event.accept() event.accept()




Loading…
Cancel
Save