Browse Source

Rework makefiles, incomplete

tags/1.9.4
falkTX 11 years ago
parent
commit
c712e587ca
12 changed files with 378 additions and 296 deletions
  1. +0
    -1
      resources/ui/carla.ui
  2. +1
    -1
      source/carla.py
  3. +1
    -2
      source/carla_shared.py
  4. +0
    -2
      source/discovery/Makefile
  5. +19
    -16
      source/libs/Makefile
  6. +82
    -9
      source/libs/distrho/dgl/Makefile
  7. +30
    -27
      source/libs/lilv/Makefile
  8. +35
    -29
      source/libs/rtmempool/Makefile
  9. +6
    -3
      source/widgets/canvaspreviewframe.py
  10. +80
    -80
      source/widgets/digitalpeakmeter.py
  11. +16
    -17
      source/widgets/pixmapdial.py
  12. +108
    -109
      source/widgets/pixmapkeyboard.py

+ 0
- 1
resources/ui/carla.ui View File

@@ -318,7 +318,6 @@
<addaction name="menu_Settings"/> <addaction name="menu_Settings"/>
<addaction name="menu_Help"/> <addaction name="menu_Help"/>
</widget> </widget>
<widget class="QStatusBar" name="statusbar"/>
<widget class="QToolBar" name="toolBar"> <widget class="QToolBar" name="toolBar">
<property name="windowTitle"> <property name="windowTitle">
<string>toolBar</string> <string>toolBar</string>


+ 1
- 1
source/carla.py View File

@@ -598,7 +598,7 @@ class CarlaMainW(QMainWindow):
# Set-up Canvas Preview # Set-up Canvas Preview


self.ui.miniCanvasPreview.setRealParent(self) self.ui.miniCanvasPreview.setRealParent(self)
self.ui.miniCanvasPreview.setViewTheme(patchcanvas.canvas.theme.rubberband_brush, patchcanvas.canvas.theme.rubberband_pen.color())
self.ui.miniCanvasPreview.setViewTheme(patchcanvas.canvas.theme.canvas_bg, patchcanvas.canvas.theme.rubberband_brush, patchcanvas.canvas.theme.rubberband_pen.color())
self.ui.miniCanvasPreview.init(self.scene, DEFAULT_CANVAS_WIDTH, DEFAULT_CANVAS_HEIGHT) self.ui.miniCanvasPreview.init(self.scene, DEFAULT_CANVAS_WIDTH, DEFAULT_CANVAS_HEIGHT)
QTimer.singleShot(100, self, SLOT("slot_miniCanvasInit()")) QTimer.singleShot(100, self, SLOT("slot_miniCanvasInit()"))




+ 1
- 2
source/carla_shared.py View File

@@ -25,12 +25,11 @@ import platform
import sys import sys
from codecs import open as codecopen from codecs import open as codecopen
from copy import deepcopy from copy import deepcopy
#from decimal import Decimal
from subprocess import Popen, PIPE from subprocess import Popen, PIPE
from PyQt4.QtCore import pyqtSlot, qWarning, Qt, QByteArray, QSettings, QThread, QTimer, SIGNAL, SLOT from PyQt4.QtCore import pyqtSlot, qWarning, Qt, QByteArray, QSettings, QThread, QTimer, SIGNAL, SLOT
from PyQt4.QtGui import QColor, QCursor, QDialog, QIcon, QFileDialog, QFontMetrics, QFrame, QMenu from PyQt4.QtGui import QColor, QCursor, QDialog, QIcon, QFileDialog, QFontMetrics, QFrame, QMenu
from PyQt4.QtGui import QMessageBox, QPainter, QPainterPath, QTableWidgetItem, QVBoxLayout, QWidget from PyQt4.QtGui import QMessageBox, QPainter, QPainterPath, QTableWidgetItem, QVBoxLayout, QWidget
#from PyQt4.QtGui import QGraphicsScene, QInputDialog, QLinearGradient,
#from PyQt4.QtGui import QInputDialog, QLinearGradient,
#from PyQt4.QtXml import QDomDocument #from PyQt4.QtXml import QDomDocument


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


+ 0
- 2
source/discovery/Makefile View File

@@ -78,7 +78,5 @@ carla-discovery-win64.exe: $(OBJS) ../libs/lilv_win64.a
clean: clean:
rm -f carla-discovery-* rm -f carla-discovery-*


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

debug: debug:
$(MAKE) DEBUG=true $(MAKE) DEBUG=true

+ 19
- 16
source/libs/Makefile View File

@@ -11,26 +11,15 @@ all:
dgl.a: dgl.a:
$(MAKE) -C distrho/dgl $(MAKE) -C distrho/dgl


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

jackbridge-win32.dll:
$(MAKE) -C jackbridge win32

jackbridge-win64.dll:
$(MAKE) -C jackbridge win64

jackbridge-win32.dll.so:
$(MAKE) -C jackbridge wine32

jackbridge-win64.dll.so:
$(MAKE) -C jackbridge wine64
dgl.%.a:
$(MAKE) -C distrho/dgl $*


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


lilv.a: lilv.a:
$(MAKE) -C lilv $(MAKE) -C lilv


lilv_%.a:
lilv.%.a:
$(MAKE) -C lilv $* $(MAKE) -C lilv $*


# -------------------------------------------------------------- # --------------------------------------------------------------
@@ -38,13 +27,27 @@ lilv_%.a:
rtmempool.a: rtmempool.a:
$(MAKE) -C rtmempool $(MAKE) -C rtmempool


rtmempool_%.a:
rtmempool.%.a:
$(MAKE) -C rtmempool $* $(MAKE) -C rtmempool $*


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


jackbridge-win32.dll:
$(MAKE) -C jackbridge win32

jackbridge-win64.dll:
$(MAKE) -C jackbridge win64

jackbridge-win32.dll.so:
$(MAKE) -C jackbridge wine32

jackbridge-win64.dll.so:
$(MAKE) -C jackbridge wine64

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

clean: clean:
rm -f *.a *.def *.dll *.so
rm -f *~ *.a *.def *.dll *.dylib *.so
$(MAKE) clean -C distrho/dgl $(MAKE) clean -C distrho/dgl
$(MAKE) clean -C lilv $(MAKE) clean -C lilv
$(MAKE) clean -C rtmempool $(MAKE) clean -C rtmempool

+ 82
- 9
source/libs/distrho/dgl/Makefile View File

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


BUILD_CXX_FLAGS += -fvisibility=hidden -fPIC -I. BUILD_CXX_FLAGS += -fvisibility=hidden -fPIC -I.


OBJS = \
OBJS = \
src/App.cpp.o \ src/App.cpp.o \
src/Image.cpp.o \ src/Image.cpp.o \
src/ImageAboutWindow.cpp.o \ src/ImageAboutWindow.cpp.o \
@@ -21,23 +21,76 @@ OBJS = \
src/Widget.cpp.o \ src/Widget.cpp.o \
src/Window.cpp.o src/Window.cpp.o


OBJS_posix32 = \
src/App.cpp.posix32.o \
src/Image.cpp.posix32.o \
src/ImageAboutWindow.cpp.posix32.o \
src/ImageButton.cpp.posix32.o \
src/ImageKnob.cpp.posix32.o \
src/ImageSlider.cpp.posix32.o \
src/Geometry.cpp.posix32.o \
src/Widget.cpp.posix32.o \
src/Window.cpp.posix32.o

OBJS_posix64 = \
src/App.cpp.posix64.o \
src/Image.cpp.posix64.o \
src/ImageAboutWindow.cpp.posix64.o \
src/ImageButton.cpp.posix64.o \
src/ImageKnob.cpp.posix64.o \
src/ImageSlider.cpp.posix64.o \
src/Geometry.cpp.posix64.o \
src/Widget.cpp.posix64.o \
src/Window.cpp.posix64.o

OBJS_win32 = \
src/App.cpp.win32.o \
src/Image.cpp.win32.o \
src/ImageAboutWindow.cpp.win32.o \
src/ImageButton.cpp.win32.o \
src/ImageKnob.cpp.win32.o \
src/ImageSlider.cpp.win32.o \
src/Geometry.cpp.win32.o \
src/Widget.cpp.win32.o \
src/Window.cpp.win32.o

OBJS_win64 = \
src/App.cpp.win64.o \
src/Image.cpp.win64.o \
src/ImageAboutWindow.cpp.win64.o \
src/ImageButton.cpp.win64.o \
src/ImageKnob.cpp.win64.o \
src/ImageSlider.cpp.win64.o \
src/Geometry.cpp.win64.o \
src/Widget.cpp.win64.o \
src/Window.cpp.win64.o

OBJSM = src/pugl/pugl_osx.m.o OBJSM = src/pugl/pugl_osx.m.o


STATIC = ../../dgl.a
# --------------------------------------------------------------

all: ../../dgl.a

posix32: ../../dgl.posix32.a
posix64: ../../dgl.posix64.a
win32: ../../dgl.win32.a
win64: ../../dgl.win64.a


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


all: $(STATIC)
../../dgl.a: $(OBJS)
$(AR) rs $@ $^


clean:
rm -f $(OBJS) $(OBJSM) $(SHARED) $(STATIC)
../../dgl.posix32.a: $(OBJS_posix32)
$(AR) rs $@ $^


debug:
$(MAKE) DEBUG=true
../../dgl.posix64.a: $(OBJS_posix64)
$(AR) rs $@ $^


# --------------------------------------------------------------
../../dgl.win32.a: $(OBJS_win32)
$(AR) rs $@ $^


$(STATIC): $(OBJS)
../../dgl.win64.a: $(OBJS_win64)
$(AR) rs $@ $^ $(AR) rs $@ $^


../../dgl.dll: $(OBJS) ../../dgl.dll: $(OBJS)
@@ -54,5 +107,25 @@ $(STATIC): $(OBJS)
%.cpp.o: %.cpp %.cpp.o: %.cpp
$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ $(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@


%.cpp.posix32.o: %.cpp
$(CXX) $< $(BUILD_CXX_FLAGS) $(32BIT_FLAGS) -c -o $@

%.cpp.posix64.o: %.cpp
$(CXX) $< $(BUILD_CXX_FLAGS) $(64BIT_FLAGS) -c -o $@

%.cpp.win32.o: %.cpp
$(CXX) $< $(BUILD_CXX_FLAGS) $(32BIT_FLAGS) -c -o $@

%.cpp.win64.o: %.cpp
$(CXX) $< $(BUILD_CXX_FLAGS) $(64BIT_FLAGS) -c -o $@

%.m.o: %.m %.m.o: %.m
$(CC) $< $(BUILD_C_FLAGS) -objc -c -o $@ $(CC) $< $(BUILD_C_FLAGS) -objc -c -o $@

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

clean:
rm -f *.o src/*.o src/pugl/*.o ../../dgl.*

debug:
$(MAKE) DEBUG=true

+ 30
- 27
source/libs/lilv/Makefile View File

@@ -1,6 +1,6 @@
#!/usr/bin/make -f #!/usr/bin/make -f
# Makefile for lilv # # Makefile for lilv #
# ----------------------- #
# ----------------- #
# Created by falkTX # Created by falkTX
# #


@@ -16,81 +16,84 @@ LILV_VERSION = 0.14.4
BUILD_C_FLAGS += -fvisibility=hidden -fPIC -w BUILD_C_FLAGS += -fvisibility=hidden -fPIC -w
BUILD_C_FLAGS += -Iconfig -I../../includes BUILD_C_FLAGS += -Iconfig -I../../includes


OBJS = serd.o sord.o sratom.o lilv.o
OBJS_posix32 = serd_posix32.o sord_posix32.o sratom_posix32.o lilv_posix32.o
OBJS_posix64 = serd_posix64.o sord_posix64.o sratom_posix64.o lilv_posix64.o
OBJS_win32 = serd_win32.o sord_win32.o sratom_win32.o lilv_win32.o
OBJS_win64 = serd_win64.o sord_win64.o sratom_win64.o lilv_win64.o
OBJS = serd.c.o sord.c.o sratom.c.o lilv.c.o
OBJS_posix32 = serd.c.posix32.o sord.c.posix32.o sratom.c.posix32.o lilv.c.posix32.o
OBJS_posix64 = serd.c.posix64.o sord.c.posix64.o sratom.c.posix64.o lilv.c.posix64.o
OBJS_win32 = serd.c.win32.o sord.c.win32.o sratom.c.win32.o lilv.c.win32.o
OBJS_win64 = serd.c.win64.o sord.c.win64.o sratom.c.win64.o lilv.c.win64.o


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


all: ../lilv.a all: ../lilv.a


posix32: ../lilv_posix32.a
posix64: ../lilv_posix64.a
win32: ../lilv_win32.a
win64: ../lilv_win64.a
posix32: ../lilv.posix32.a
posix64: ../lilv.posix64.a
win32: ../lilv.win32.a
win64: ../lilv.win64.a


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


../lilv.a: $(OBJS) ../lilv.a: $(OBJS)
$(AR) rs $@ $^ $(AR) rs $@ $^


../lilv_posix32.a: $(OBJS_posix32)
../lilv.posix32.a: $(OBJS_posix32)
$(AR) rs $@ $^ $(AR) rs $@ $^


../lilv_posix64.a: $(OBJS_posix64)
../lilv.posix64.a: $(OBJS_posix64)
$(AR) rs $@ $^ $(AR) rs $@ $^


../lilv_win32.a: $(OBJS_win32)
../lilv.win32.a: $(OBJS_win32)
$(AR) rs $@ $^ $(AR) rs $@ $^


../lilv_win64.a: $(OBJS_win64)
../lilv.win64.a: $(OBJS_win64)
$(AR) rs $@ $^ $(AR) rs $@ $^


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


serd.o: serd.c
serd.c.o: serd.c
$(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) -c -o $@ $(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) -c -o $@


sord.o: sord.c
sord.c.o: sord.c
$(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src -c -o $@ $(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src -c -o $@


sratom.o: sratom.c
sratom.c.o: sratom.c
$(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) -c -o $@ $(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) -c -o $@


lilv.o: lilv.c
lilv.c.o: lilv.c
$(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src -c -o $@ $(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src -c -o $@


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


serd_%32.o: serd.c
serd.c.%32.o: serd.c
$(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) $(32BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) $(32BIT_FLAGS) -c -o $@


sord_%32.o: sord.c
sord.c.%32.o: sord.c
$(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src $(32BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src $(32BIT_FLAGS) -c -o $@


sratom_%32.o: sratom.c
sratom.c.%32.o: sratom.c
$(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) $(32BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) $(32BIT_FLAGS) -c -o $@


lilv_%32.o: lilv.c
lilv.c.%32.o: lilv.c
$(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src $(32BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src $(32BIT_FLAGS) -c -o $@


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


serd_%64.o: serd.c
serd.c.%64.o: serd.c
$(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) $(64BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) $(64BIT_FLAGS) -c -o $@


sord_%64.o: sord.c
sord.c.%64.o: sord.c
$(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src $(64BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src $(64BIT_FLAGS) -c -o $@


sratom_%64.o: sratom.c
sratom.c.%64.o: sratom.c
$(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) $(64BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) $(64BIT_FLAGS) -c -o $@


lilv_%64.o: lilv.c
lilv.c.%64.o: lilv.c
$(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src $(64BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src $(64BIT_FLAGS) -c -o $@


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


clean: clean:
rm -f *.o
rm -f *.o ../lilv.*

debug:
$(MAKE) DEBUG=true

+ 35
- 29
source/libs/rtmempool/Makefile View File

@@ -1,6 +1,6 @@
#!/usr/bin/make -f #!/usr/bin/make -f
# Makefile for rtmempool # # Makefile for rtmempool #
# ----------------------------------- #
# ---------------------- #
# Created by falkTX # Created by falkTX
# #


@@ -8,71 +8,77 @@ include ../../Makefile.mk


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


BUILD_C_FLAGS += -fvisibility=hidden -fPIC
BUILD_C_FLAGS += -fvisibility=hidden -fPIC -pthread
BUILD_C_FLAGS += -I. -I../../includes BUILD_C_FLAGS += -I. -I../../includes


ifeq ($(CARLA_PLUGIN_SUPPORT),true) ifeq ($(CARLA_PLUGIN_SUPPORT),true)
BUILD_C_FLAGS += -DWANT_LV2 BUILD_C_FLAGS += -DWANT_LV2
endif endif


OBJS = rtmempool.o
OBJS_posix32 = rtmempool_posix32.o
OBJS_posix64 = rtmempool_posix64.o
OBJS_win32 = rtmempool_win32.o
OBJS_win64 = rtmempool_win64.o
LINK_FLAGS += -lpthread

OBJS = rtmempool.c.o
OBJS_posix32 = rtmempool.c.posix32.o
OBJS_posix64 = rtmempool.c.posix64.o
OBJS_win32 = rtmempool.c.win32.o
OBJS_win64 = rtmempool.c.win64.o


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


all: ../rtmempool.a all: ../rtmempool.a


posix32: ../rtmempool_posix32.a
posix64: ../rtmempool_posix64.a
win32: ../rtmempool_win32.a
win64: ../rtmempool_win64.a
posix32: ../rtmempool.posix32.a
posix64: ../rtmempool.posix64.a
win32: ../rtmempool.win32.a
win64: ../rtmempool.win64.a


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


../rtmempool.a: $(OBJS) ../rtmempool.a: $(OBJS)
$(AR) rs $@ $^ $(AR) rs $@ $^


../rtmempool_posix32.a: $(OBJS_posix32)
../rtmempool.posix32.a: $(OBJS_posix32)
$(AR) rs $@ $^ $(AR) rs $@ $^


../rtmempool_posix64.a: $(OBJS_posix64)
../rtmempool.posix64.a: $(OBJS_posix64)
$(AR) rs $@ $^ $(AR) rs $@ $^


../rtmempool_win32.a: $(OBJS_win32)
../rtmempool.win32.a: $(OBJS_win32)
$(AR) rs $@ $^ $(AR) rs $@ $^


../rtmempool_win64.a: $(OBJS_win64)
../rtmempool.win64.a: $(OBJS_win64)
$(AR) rs $@ $^ $(AR) rs $@ $^


# --------------------------------------------------------------
../rtmempool.dll: $(OBJS)
$(CXX) $^ -shared $(LINK_FLAGS) -o $@


rtmempool.o: rtmempool.c
$(CC) $< $(BUILD_C_FLAGS) -c -o $@
../rtmempool.dylib: $(OBJS)
$(CXX) $^ -shared $(LINK_FLAGS) -o $@

../rtmempool.so: $(OBJS)
$(CXX) $^ -shared $(LINK_FLAGS) -o $@


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


rtmempool_posix32.o: rtmempool.c
$(CC) $< $(BUILD_C_FLAGS) $(32BIT_FLAGS) -c -o $@
rtmempool.c.o: rtmempool.c
$(CC) $< $(BUILD_C_FLAGS) -c -o $@


# --------------------------------------------------------------
rtmempool.c.posix32.o: rtmempool.c
$(CC) $< $(BUILD_C_FLAGS) $(32BIT_FLAGS) -c -o $@


rtmempool_posix64.o: rtmempool.c
rtmempool.c.posix64.o: rtmempool.c
$(CC) $< $(BUILD_C_FLAGS) $(64BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_C_FLAGS) $(64BIT_FLAGS) -c -o $@


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

rtmempool_win32.o: rtmempool.c
rtmempool.c.win32.o: rtmempool.c
$(CC) $< $(BUILD_C_FLAGS) -DPTW32_STATIC_LIB $(32BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_C_FLAGS) -DPTW32_STATIC_LIB $(32BIT_FLAGS) -c -o $@


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

rtmempool_win64.o: rtmempool.c
rtmempool.c.win64.o: rtmempool.c
$(CC) $< $(BUILD_C_FLAGS) -DPTW32_STATIC_LIB $(64BIT_FLAGS) -c -o $@ $(CC) $< $(BUILD_C_FLAGS) -DPTW32_STATIC_LIB $(64BIT_FLAGS) -c -o $@


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


clean: clean:
rm -f *.o
rm -f *.o ../rtmempool.*

debug:
$(MAKE) DEBUG=true

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

@@ -39,6 +39,7 @@ class CanvasPreviewFrame(QFrame):


self.fMouseDown = False self.fMouseDown = False


self.fViewBg = QColor(0, 0, 0)
self.fViewBrush = QBrush(QColor(75, 75, 255, 30)) self.fViewBrush = QBrush(QColor(75, 75, 255, 30))
self.fViewPen = QPen(Qt.blue, 1) self.fViewPen = QPen(Qt.blue, 1)


@@ -97,9 +98,10 @@ class CanvasPreviewFrame(QFrame):
self.fViewRect[iHeight] = height * self.fFakeHeight self.fViewRect[iHeight] = height * self.fFakeHeight
self.update() self.update()


def setViewTheme(self, brushColor, penColor):
def setViewTheme(self, bgColor, brushColor, penColor):
brushColor.setAlpha(40) brushColor.setAlpha(40)
penColor.setAlpha(100) penColor.setAlpha(100)
self.fViewBg = bgColor
self.fViewBrush = QBrush(brushColor) self.fViewBrush = QBrush(brushColor)
self.fViewPen = QPen(penColor, 1) self.fViewPen = QPen(penColor, 1)


@@ -152,8 +154,9 @@ class CanvasPreviewFrame(QFrame):
def paintEvent(self, event): def paintEvent(self, event):
painter = QPainter(self) painter = QPainter(self)


painter.setBrush(QBrush(Qt.darkBlue, Qt.DiagCrossPattern))
painter.drawRect(0, 0, self.width(), self.height())
painter.setBrush(self.fViewBg)
painter.setPen(self.fViewBg)
painter.drawRoundRect(2, 2, self.width()-6, self.height()-6, 3, 3)


self.fScene.render(painter, self.fRenderSource, self.fRenderTarget, Qt.KeepAspectRatio) self.fScene.render(painter, self.fRenderSource, self.fRenderTarget, Qt.KeepAspectRatio)




+ 80
- 80
source/widgets/digitalpeakmeter.py View File

@@ -37,23 +37,23 @@ class DigitalPeakMeter(QWidget):
def __init__(self, parent): def __init__(self, parent):
QWidget.__init__(self, parent) QWidget.__init__(self, parent)


self.m_channels = 0
self.m_orientation = self.VERTICAL
self.m_smoothMultiplier = 1
self.fChannels = 0
self.fOrientation = self.VERTICAL
self.fSmoothMultiplier = 1


self.m_colorBackground = QColor("#111111")
self.m_gradientMeter = QLinearGradient(0, 0, 1, 1)
self.fColorBackground = QColor("#111111")
self.fGradientMeter = QLinearGradient(0, 0, 1, 1)


self.setChannels(0) self.setChannels(0)
self.setColor(self.GREEN) self.setColor(self.GREEN)


self.m_paintTimer = QTimer(self)
self.m_paintTimer.setInterval(60)
self.m_paintTimer.timeout.connect(self.update)
self.m_paintTimer.start()
self.fPaintTimer = QTimer(self)
self.fPaintTimer.setInterval(60)
self.fPaintTimer.timeout.connect(self.update)
self.fPaintTimer.start()


def displayMeter(self, meter, level): def displayMeter(self, meter, level):
if meter <= 0 or meter > self.m_channels:
if meter <= 0 or meter > self.fChannels:
return qCritical("DigitalPeakMeter::displayMeter(%i, %f) - invalid meter number" % (meter, level)) return qCritical("DigitalPeakMeter::displayMeter(%i, %f) - invalid meter number" % (meter, level))


if level < 0.0: if level < 0.0:
@@ -61,50 +61,50 @@ class DigitalPeakMeter(QWidget):
elif level > 1.0: elif level > 1.0:
level = 1.0 level = 1.0


self.m_channelsData[meter-1] = level
self.fChannelsData[meter-1] = level


def setChannels(self, channels): def setChannels(self, channels):
if channels < 0: if channels < 0:
return qCritical("DigitalPeakMeter::setChannels(%i) - 'channels' must be a positive integer" % channels) return qCritical("DigitalPeakMeter::setChannels(%i) - 'channels' must be a positive integer" % channels)


self.m_channels = channels
self.m_channelsData = []
self.m_lastValueData = []
self.fChannels = channels
self.fChannelsData = []
self.fLastValueData = []


for x in range(channels): for x in range(channels):
self.m_channelsData.append(0.0)
self.m_lastValueData.append(0.0)
self.fChannelsData.append(0.0)
self.fLastValueData.append(0.0)


def setColor(self, color): def setColor(self, color):
if color == self.GREEN: if color == self.GREEN:
self.m_colorBase = QColor(93, 231, 61)
self.m_colorBaseT = QColor(15, 110, 15, 100)
self.fColorBase = QColor(93, 231, 61)
self.fColorBaseT = QColor(15, 110, 15, 100)
elif color == self.BLUE: elif color == self.BLUE:
self.m_colorBase = QColor(82, 238, 248)
self.m_colorBaseT = QColor(15, 15, 110, 100)
self.fColorBase = QColor(82, 238, 248)
self.fColorBaseT = QColor(15, 15, 110, 100)
else: else:
return qCritical("DigitalPeakMeter::setColor(%i) - invalid color" % color) return qCritical("DigitalPeakMeter::setColor(%i) - invalid color" % color)


self.setOrientation(self.m_orientation)
self.setOrientation(self.fOrientation)


def setOrientation(self, orientation): def setOrientation(self, orientation):
self.m_orientation = orientation
if self.m_orientation == self.HORIZONTAL:
self.m_gradientMeter.setColorAt(0.0, self.m_colorBase)
self.m_gradientMeter.setColorAt(0.2, self.m_colorBase)
self.m_gradientMeter.setColorAt(0.4, self.m_colorBase)
self.m_gradientMeter.setColorAt(0.6, self.m_colorBase)
self.m_gradientMeter.setColorAt(0.8, Qt.yellow)
self.m_gradientMeter.setColorAt(1.0, Qt.red)
elif self.m_orientation == self.VERTICAL:
self.m_gradientMeter.setColorAt(0.0, Qt.red)
self.m_gradientMeter.setColorAt(0.2, Qt.yellow)
self.m_gradientMeter.setColorAt(0.4, self.m_colorBase)
self.m_gradientMeter.setColorAt(0.6, self.m_colorBase)
self.m_gradientMeter.setColorAt(0.8, self.m_colorBase)
self.m_gradientMeter.setColorAt(1.0, self.m_colorBase)
self.fOrientation = orientation
if self.fOrientation == self.HORIZONTAL:
self.fGradientMeter.setColorAt(0.0, self.fColorBase)
self.fGradientMeter.setColorAt(0.2, self.fColorBase)
self.fGradientMeter.setColorAt(0.4, self.fColorBase)
self.fGradientMeter.setColorAt(0.6, self.fColorBase)
self.fGradientMeter.setColorAt(0.8, Qt.yellow)
self.fGradientMeter.setColorAt(1.0, Qt.red)
elif self.fOrientation == self.VERTICAL:
self.fGradientMeter.setColorAt(0.0, Qt.red)
self.fGradientMeter.setColorAt(0.2, Qt.yellow)
self.fGradientMeter.setColorAt(0.4, self.fColorBase)
self.fGradientMeter.setColorAt(0.6, self.fColorBase)
self.fGradientMeter.setColorAt(0.8, self.fColorBase)
self.fGradientMeter.setColorAt(1.0, self.fColorBase)


else: else:
return qCritical("DigitalPeakMeter::setOrientation(%i) - invalid orientation" % orientation) return qCritical("DigitalPeakMeter::setOrientation(%i) - invalid orientation" % orientation)
@@ -112,9 +112,9 @@ class DigitalPeakMeter(QWidget):
self.updateSizes() self.updateSizes()


def setRefreshRate(self, rate): def setRefreshRate(self, rate):
self.m_paintTimer.stop()
self.m_paintTimer.setInterval(rate)
self.m_paintTimer.start()
self.fPaintTimer.stop()
self.fPaintTimer.setInterval(rate)
self.fPaintTimer.start()


def setSmoothRelease(self, value): def setSmoothRelease(self, value):
if value < 0: if value < 0:
@@ -122,77 +122,77 @@ class DigitalPeakMeter(QWidget):
elif value > 5: elif value > 5:
value = 5 value = 5


self.m_smoothMultiplier = value
self.fSmoothMultiplier = value


def minimumSizeHint(self): def minimumSizeHint(self):
return QSize(10, 10) return QSize(10, 10)


def sizeHint(self): def sizeHint(self):
return QSize(self.m_width, self.m_height)
return QSize(self.fWidth, self.fHeight)


def updateSizes(self): def updateSizes(self):
self.m_width = self.width()
self.m_height = self.height()
self.m_sizeMeter = 0
self.fWidth = self.width()
self.fHeight = self.height()
self.fSizeMeter = 0


if self.m_orientation == self.HORIZONTAL:
self.m_gradientMeter.setFinalStop(self.m_width, 0)
if self.fOrientation == self.HORIZONTAL:
self.fGradientMeter.setFinalStop(self.fWidth, 0)


if self.m_channels > 0:
self.m_sizeMeter = self.m_height / self.m_channels
if self.fChannels > 0:
self.fSizeMeter = self.fHeight / self.fChannels


elif self.m_orientation == self.VERTICAL:
self.m_gradientMeter.setFinalStop(0, self.m_height)
elif self.fOrientation == self.VERTICAL:
self.fGradientMeter.setFinalStop(0, self.fHeight)


if self.m_channels > 0:
self.m_sizeMeter = self.m_width / self.m_channels
if self.fChannels > 0:
self.fSizeMeter = self.fWidth / self.fChannels


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


painter.setPen(Qt.black) painter.setPen(Qt.black)
painter.setBrush(Qt.black) painter.setBrush(Qt.black)
painter.drawRect(0, 0, self.m_width, self.m_height)
painter.drawRect(0, 0, self.fWidth, self.fHeight)


meterX = 0 meterX = 0
painter.setPen(self.m_colorBackground)
painter.setBrush(self.m_gradientMeter)
painter.setPen(self.fColorBackground)
painter.setBrush(self.fGradientMeter)


for i in range(self.m_channels):
level = self.m_channelsData[i]
for i in range(self.fChannels):
level = self.fChannelsData[i]


if level == self.m_lastValueData[i]:
if level == self.fLastValueData[i]:
continue continue


if self.m_orientation == self.HORIZONTAL:
value = level * self.m_width
elif self.m_orientation == self.VERTICAL:
value = float(self.m_height) - (level * self.m_height)
if self.fOrientation == self.HORIZONTAL:
value = level * self.fWidth
elif self.fOrientation == self.VERTICAL:
value = float(self.fHeight) - (level * self.fHeight)
else: else:
value = 0.0 value = 0.0


if value < 0.0: if value < 0.0:
value = 0.0 value = 0.0
elif self.m_smoothMultiplier > 0:
value = (self.m_lastValueData[i] * self.m_smoothMultiplier + value) / (self.m_smoothMultiplier + 1)
elif self.fSmoothMultiplier > 0:
value = (self.fLastValueData[i] * self.fSmoothMultiplier + value) / (self.fSmoothMultiplier + 1)


if self.m_orientation == self.HORIZONTAL:
painter.drawRect(0, meterX, value, self.m_sizeMeter)
elif self.m_orientation == self.VERTICAL:
painter.drawRect(meterX, value, self.m_sizeMeter, self.m_height)
if self.fOrientation == self.HORIZONTAL:
painter.drawRect(0, meterX, value, self.fSizeMeter)
elif self.fOrientation == self.VERTICAL:
painter.drawRect(meterX, value, self.fSizeMeter, self.fHeight)


meterX += self.m_sizeMeter
self.m_lastValueData[i] = value
meterX += self.fSizeMeter
self.fLastValueData[i] = value


painter.setBrush(QColor(0, 0, 0, 0)) painter.setBrush(QColor(0, 0, 0, 0))


if self.m_orientation == self.HORIZONTAL:
if self.fOrientation == self.HORIZONTAL:
# Variables # Variables
lsmall = self.m_width
lfull = self.m_height - 1
lsmall = self.fWidth
lfull = self.fHeight - 1


# Base # Base
painter.setPen(self.m_colorBaseT)
painter.setPen(self.fColorBaseT)
painter.drawLine(lsmall * 0.25, 2, lsmall * 0.25, lfull-2) painter.drawLine(lsmall * 0.25, 2, lsmall * 0.25, lfull-2)
painter.drawLine(lsmall * 0.50, 2, lsmall * 0.50, lfull-2) painter.drawLine(lsmall * 0.50, 2, lsmall * 0.50, lfull-2)


@@ -209,13 +209,13 @@ class DigitalPeakMeter(QWidget):
painter.setPen(QColor(110, 15, 15, 100)) painter.setPen(QColor(110, 15, 15, 100))
painter.drawLine(lsmall * 0.96, 2, lsmall * 0.96, lfull-2) painter.drawLine(lsmall * 0.96, 2, lsmall * 0.96, lfull-2)


elif self.m_orientation == self.VERTICAL:
elif self.fOrientation == self.VERTICAL:
# Variables # Variables
lsmall = self.m_height
lfull = self.m_width - 1
lsmall = self.fHeight
lfull = self.fWidth - 1


# Base # Base
painter.setPen(self.m_colorBaseT)
painter.setPen(self.fColorBaseT)
painter.drawLine(2, lsmall - (lsmall * 0.25), lfull-2, lsmall - (lsmall * 0.25)) painter.drawLine(2, lsmall - (lsmall * 0.25), lfull-2, lsmall - (lsmall * 0.25))
painter.drawLine(2, lsmall - (lsmall * 0.50), lfull-2, lsmall - (lsmall * 0.50)) painter.drawLine(2, lsmall - (lsmall * 0.50), lfull-2, lsmall - (lsmall * 0.50))




+ 16
- 17
source/widgets/pixmapdial.py View File

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


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


@@ -57,8 +57,8 @@ class PixmapDial(QDial):
else: else:
self.fOrientation = self.VERTICAL self.fOrientation = self.VERTICAL


self.fLabel = ""
self.fLabelPos = QPointF(0.0, 0.0)
self.fLabel = ""
self.fLabelPos = QPointF(0.0, 0.0)
self.fLabelFont = QFont() self.fLabelFont = QFont()
self.fLabelFont.setPointSize(6) self.fLabelFont.setPointSize(6)
self.fLabelWidth = 0 self.fLabelWidth = 0
@@ -132,21 +132,21 @@ class PixmapDial(QDial):
return QSize(self.fSize, self.fSize) return QSize(self.fSize, self.fSize)


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


if self.p_width < 1:
self.p_width = 1
if self.fWidth < 1:
self.fWidth = 1


if self.p_height < 1:
self.p_height = 1
if self.fHeight < 1:
self.fHeight = 1


if self.fOrientation == self.HORIZONTAL: if self.fOrientation == self.HORIZONTAL:
self.fSize = self.p_height
self.p_count = self.p_width / self.p_height
self.fSize = self.fHeight
self.fCount = self.fWidth / self.fHeight
else: else:
self.fSize = self.p_width
self.p_count = self.p_height / self.p_width
self.fSize = self.fWidth
self.fCount = self.fHeight / self.fWidth


self.setMinimumSize(self.fSize, self.fSize + self.fLabelHeight + 5) self.setMinimumSize(self.fSize, self.fSize + self.fLabelHeight + 5)
self.setMaximumSize(self.fSize, self.fSize + self.fLabelHeight + 5) self.setMaximumSize(self.fSize, self.fSize + self.fLabelHeight + 5)
@@ -166,6 +166,7 @@ class PixmapDial(QDial):
def paintEvent(self, event): def paintEvent(self, event):
painter = QPainter(self) painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing, True) painter.setRenderHint(QPainter.Antialiasing, True)
event.accept()


if self.fLabel: if self.fLabel:
if self.fCustomPaint == self.CUSTOM_PAINT_NULL: if self.fCustomPaint == self.CUSTOM_PAINT_NULL:
@@ -187,7 +188,7 @@ class PixmapDial(QDial):
value = current / divider value = current / divider
target = QRectF(0.0, 0.0, self.fSize, self.fSize) target = QRectF(0.0, 0.0, self.fSize, self.fSize)


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


if self.fOrientation == self.HORIZONTAL: if self.fOrientation == self.HORIZONTAL:
xpos = self.fSize * per xpos = self.fSize * per
@@ -278,12 +279,10 @@ class PixmapDial(QDial):
self.fHoverStep += 1 if self.fHovered else -1 self.fHoverStep += 1 if self.fHovered else -1
QTimer.singleShot(20, self, SLOT("update()")) QTimer.singleShot(20, self, SLOT("update()"))


else:
else: # isEnabled()
target = QRectF(0.0, 0.0, self.fSize, self.fSize) target = QRectF(0.0, 0.0, self.fSize, self.fSize)
painter.drawPixmap(target, self.fPixmap, target) painter.drawPixmap(target, self.fPixmap, target)


event.accept()

def resizeEvent(self, event): def resizeEvent(self, event):
self.updateSizes() self.updateSizes()
QDial.resizeEvent(self, event) QDial.resizeEvent(self, event)

+ 108
- 109
source/widgets/pixmapkeyboard.py View File

@@ -98,147 +98,147 @@ class PixmapKeyboard(QWidget):
def __init__(self, parent): def __init__(self, parent):
QWidget.__init__(self, parent) QWidget.__init__(self, parent)


self.m_octaves = 6
self.m_lastMouseNote = -1
self.fOctaves = 6
self.fLastMouseNote = -1


self.m_needsUpdate = False
self.m_enabledKeys = []
self.fNeedsUpdate = False
self.fEnabledKeys = []


self.m_font = QFont("Monospace", 8, QFont.Normal)
self.m_pixmap = QPixmap("")
self.fFont = QFont("Monospace", 8, QFont.Normal)
self.fPixmap = QPixmap("")


self.setCursor(Qt.PointingHandCursor) self.setCursor(Qt.PointingHandCursor)
self.setMode(self.HORIZONTAL) self.setMode(self.HORIZONTAL)


def allNotesOff(self): def allNotesOff(self):
self.m_enabledKeys = []
self.fEnabledKeys = []


self.m_needsUpdate = True
self.fNeedsUpdate = True
QTimer.singleShot(0, self, SLOT("slot_updateOnce()")) QTimer.singleShot(0, self, SLOT("slot_updateOnce()"))


self.emit(SIGNAL("notesOff()")) self.emit(SIGNAL("notesOff()"))


def sendNoteOn(self, note, sendSignal=True): def sendNoteOn(self, note, sendSignal=True):
if 0 <= note <= 127 and note not in self.m_enabledKeys:
self.m_enabledKeys.append(note)
if 0 <= note <= 127 and note not in self.fEnabledKeys:
self.fEnabledKeys.append(note)
if sendSignal: if sendSignal:
self.emit(SIGNAL("noteOn(int)"), note) self.emit(SIGNAL("noteOn(int)"), note)


self.m_needsUpdate = True
self.fNeedsUpdate = True
QTimer.singleShot(0, self, SLOT("slot_updateOnce()")) QTimer.singleShot(0, self, SLOT("slot_updateOnce()"))


if len(self.m_enabledKeys) == 1:
if len(self.fEnabledKeys) == 1:
self.emit(SIGNAL("notesOn()")) self.emit(SIGNAL("notesOn()"))


def sendNoteOff(self, note, sendSignal=True): def sendNoteOff(self, note, sendSignal=True):
if 0 <= note <= 127 and note in self.m_enabledKeys:
self.m_enabledKeys.remove(note)
if 0 <= note <= 127 and note in self.fEnabledKeys:
self.fEnabledKeys.remove(note)
if sendSignal: if sendSignal:
self.emit(SIGNAL("noteOff(int)"), note) self.emit(SIGNAL("noteOff(int)"), note)


self.m_needsUpdate = True
self.fNeedsUpdate = True
QTimer.singleShot(0, self, SLOT("slot_updateOnce()")) QTimer.singleShot(0, self, SLOT("slot_updateOnce()"))


if len(self.m_enabledKeys) == 0:
if len(self.fEnabledKeys) == 0:
self.emit(SIGNAL("notesOff()")) self.emit(SIGNAL("notesOff()"))


def setMode(self, mode, color=COLOR_ORANGE): def setMode(self, mode, color=COLOR_ORANGE):
if color == self.COLOR_CLASSIC: if color == self.COLOR_CLASSIC:
self.m_colorStr = "classic"
self.fColorStr = "classic"
elif color == self.COLOR_ORANGE: elif color == self.COLOR_ORANGE:
self.m_colorStr = "orange"
self.fColorStr = "orange"
else: else:
qCritical("PixmapKeyboard::setMode(%i, %i) - invalid color" % (mode, color)) qCritical("PixmapKeyboard::setMode(%i, %i) - invalid color" % (mode, color))
return self.setMode(mode) return self.setMode(mode)


if mode == self.HORIZONTAL: if mode == self.HORIZONTAL:
self.m_midiMap = midi_key2rect_map_horizontal
self.m_pixmap.load(":/bitmaps/kbd_h_%s.png" % self.m_colorStr)
self.m_pixmapMode = self.HORIZONTAL
self.p_width = self.m_pixmap.width()
self.p_height = self.m_pixmap.height() / 2
self.fMidiMap = midi_key2rect_map_horizontal
self.fPixmap.load(":/bitmaps/kbd_h_%s.png" % self.fColorStr)
self.fPixmapMode = self.HORIZONTAL
self.fWidth = self.fPixmap.width()
self.fHeight = self.fPixmap.height() / 2
elif mode == self.VERTICAL: elif mode == self.VERTICAL:
self.m_midiMap = midi_key2rect_map_vertical
self.m_pixmap.load(":/bitmaps/kbd_v_%s.png" % self.m_colorStr)
self.m_pixmapMode = self.VERTICAL
self.p_width = self.m_pixmap.width() / 2
self.p_height = self.m_pixmap.height()
self.fMidiMap = midi_key2rect_map_vertical
self.fPixmap.load(":/bitmaps/kbd_v_%s.png" % self.fColorStr)
self.fPixmapMode = self.VERTICAL
self.fWidth = self.fPixmap.width() / 2
self.fHeight = self.fPixmap.height()
else: else:
qCritical("PixmapKeyboard::setMode(%i, %i) - invalid mode" % (mode, color)) qCritical("PixmapKeyboard::setMode(%i, %i) - invalid mode" % (mode, color))
return self.setMode(self.HORIZONTAL) return self.setMode(self.HORIZONTAL)


self.setOctaves(self.m_octaves)
self.setOctaves(self.fOctaves)


def setOctaves(self, octaves): def setOctaves(self, octaves):
if octaves < 1: if octaves < 1:
octaves = 1 octaves = 1
elif octaves > 8: elif octaves > 8:
octaves = 8 octaves = 8
self.m_octaves = octaves
self.fOctaves = octaves


if self.m_pixmapMode == self.HORIZONTAL:
self.setMinimumSize(self.p_width * self.m_octaves, self.p_height)
self.setMaximumSize(self.p_width * self.m_octaves, self.p_height)
elif self.m_pixmapMode == self.VERTICAL:
self.setMinimumSize(self.p_width, self.p_height * self.m_octaves)
self.setMaximumSize(self.p_width, self.p_height * self.m_octaves)
if self.fPixmapMode == self.HORIZONTAL:
self.setMinimumSize(self.fWidth * self.fOctaves, self.fHeight)
self.setMaximumSize(self.fWidth * self.fOctaves, self.fHeight)
elif self.fPixmapMode == self.VERTICAL:
self.setMinimumSize(self.fWidth, self.fHeight * self.fOctaves)
self.setMaximumSize(self.fWidth, self.fHeight * self.fOctaves)


self.update() self.update()


def handleMousePos(self, pos): def handleMousePos(self, pos):
if self.m_pixmapMode == self.HORIZONTAL:
if pos.x() < 0 or pos.x() > self.m_octaves * 144:
if self.fPixmapMode == self.HORIZONTAL:
if pos.x() < 0 or pos.x() > self.fOctaves * 144:
return return
posX = pos.x() - 1 posX = pos.x() - 1
octave = int(posX / self.p_width)
n_pos = QPointF(posX % self.p_width, pos.y())
elif self.m_pixmapMode == self.VERTICAL:
if pos.y() < 0 or pos.y() > self.m_octaves * 144:
octave = int(posX / self.fWidth)
n_pos = QPointF(posX % self.fWidth, pos.y())
elif self.fPixmapMode == self.VERTICAL:
if pos.y() < 0 or pos.y() > self.fOctaves * 144:
return return
posY = pos.y() - 1 posY = pos.y() - 1
octave = int(self.m_octaves - posY / self.p_height)
n_pos = QPointF(pos.x(), posY % self.p_height)
octave = int(self.fOctaves - posY / self.fHeight)
n_pos = QPointF(pos.x(), posY % self.fHeight)
else: else:
return return


octave += 3 octave += 3


if self.m_midiMap['1'].contains(n_pos): # C#
if self.fMidiMap['1'].contains(n_pos): # C#
note = 1 note = 1
elif self.m_midiMap['3'].contains(n_pos): # D#
elif self.fMidiMap['3'].contains(n_pos): # D#
note = 3 note = 3
elif self.m_midiMap['6'].contains(n_pos): # F#
elif self.fMidiMap['6'].contains(n_pos): # F#
note = 6 note = 6
elif self.m_midiMap['8'].contains(n_pos): # G#
elif self.fMidiMap['8'].contains(n_pos): # G#
note = 8 note = 8
elif self.m_midiMap['10'].contains(n_pos):# A#
elif self.fMidiMap['10'].contains(n_pos):# A#
note = 10 note = 10
elif self.m_midiMap['0'].contains(n_pos): # C
elif self.fMidiMap['0'].contains(n_pos): # C
note = 0 note = 0
elif self.m_midiMap['2'].contains(n_pos): # D
elif self.fMidiMap['2'].contains(n_pos): # D
note = 2 note = 2
elif self.m_midiMap['4'].contains(n_pos): # E
elif self.fMidiMap['4'].contains(n_pos): # E
note = 4 note = 4
elif self.m_midiMap['5'].contains(n_pos): # F
elif self.fMidiMap['5'].contains(n_pos): # F
note = 5 note = 5
elif self.m_midiMap['7'].contains(n_pos): # G
elif self.fMidiMap['7'].contains(n_pos): # G
note = 7 note = 7
elif self.m_midiMap['9'].contains(n_pos): # A
elif self.fMidiMap['9'].contains(n_pos): # A
note = 9 note = 9
elif self.m_midiMap['11'].contains(n_pos):# B
elif self.fMidiMap['11'].contains(n_pos):# B
note = 11 note = 11
else: else:
note = -1 note = -1


if note != -1: if note != -1:
note += octave * 12 note += octave * 12
if self.m_lastMouseNote != note:
self.sendNoteOff(self.m_lastMouseNote)
if self.fLastMouseNote != note:
self.sendNoteOff(self.fLastMouseNote)
self.sendNoteOn(note) self.sendNoteOn(note)
else: else:
self.sendNoteOff(self.m_lastMouseNote)
self.sendNoteOff(self.fLastMouseNote)


self.m_lastMouseNote = note
self.fLastMouseNote = note


def keyPressEvent(self, event): def keyPressEvent(self, event):
if not event.isAutoRepeat(): if not event.isAutoRepeat():
@@ -255,7 +255,7 @@ class PixmapKeyboard(QWidget):
QWidget.keyReleaseEvent(self, event) QWidget.keyReleaseEvent(self, event)


def mousePressEvent(self, event): def mousePressEvent(self, event):
self.m_lastMouseNote = -1
self.fLastMouseNote = -1
self.handleMousePos(event.pos()) self.handleMousePos(event.pos())
self.setFocus() self.setFocus()
QWidget.mousePressEvent(self, event) QWidget.mousePressEvent(self, event)
@@ -265,35 +265,36 @@ class PixmapKeyboard(QWidget):
QWidget.mousePressEvent(self, event) QWidget.mousePressEvent(self, event)


def mouseReleaseEvent(self, event): def mouseReleaseEvent(self, event):
if self.m_lastMouseNote != -1:
self.sendNoteOff(self.m_lastMouseNote)
self.m_lastMouseNote = -1
if self.fLastMouseNote != -1:
self.sendNoteOff(self.fLastMouseNote)
self.fLastMouseNote = -1
QWidget.mouseReleaseEvent(self, event) QWidget.mouseReleaseEvent(self, event)


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


# ------------------------------------------------------------- # -------------------------------------------------------------
# Paint clean keys (as background) # Paint clean keys (as background)


for octave in range(self.m_octaves):
if self.m_pixmapMode == self.HORIZONTAL:
target = QRectF(self.p_width * octave, 0, self.p_width, self.p_height)
elif self.m_pixmapMode == self.VERTICAL:
target = QRectF(0, self.p_height * octave, self.p_width, self.p_height)
for octave in range(self.fOctaves):
if self.fPixmapMode == self.HORIZONTAL:
target = QRectF(self.fWidth * octave, 0, self.fWidth, self.fHeight)
elif self.fPixmapMode == self.VERTICAL:
target = QRectF(0, self.fHeight * octave, self.fWidth, self.fHeight)
else: else:
return return


source = QRectF(0, 0, self.p_width, self.p_height)
painter.drawPixmap(target, self.m_pixmap, source)
source = QRectF(0, 0, self.fWidth, self.fHeight)
painter.drawPixmap(target, self.fPixmap, source)


# ------------------------------------------------------------- # -------------------------------------------------------------
# Paint (white) pressed keys # Paint (white) pressed keys


paintedWhite = False paintedWhite = False


for i in range(len(self.m_enabledKeys)):
note = self.m_enabledKeys[i]
for i in range(len(self.fEnabledKeys)):
note = self.fEnabledKeys[i]
pos = self._getRectFromMidiNote(note) pos = self._getRectFromMidiNote(note)


if self._isNoteBlack(note): if self._isNoteBlack(note):
@@ -322,44 +323,44 @@ class PixmapKeyboard(QWidget):
# cannot paint this note either # cannot paint this note either
continue continue


if self.m_pixmapMode == self.VERTICAL:
octave = self.m_octaves - octave - 1
if self.fPixmapMode == self.VERTICAL:
octave = self.fOctaves - octave - 1


if self.m_pixmapMode == self.HORIZONTAL:
target = QRectF(pos.x() + (self.p_width * octave), 0, pos.width(), pos.height())
source = QRectF(pos.x(), self.p_height, pos.width(), pos.height())
elif self.m_pixmapMode == self.VERTICAL:
target = QRectF(pos.x(), pos.y() + (self.p_height * octave), pos.width(), pos.height())
source = QRectF(self.p_width, pos.y(), pos.width(), pos.height())
if self.fPixmapMode == self.HORIZONTAL:
target = QRectF(pos.x() + (self.fWidth * octave), 0, pos.width(), pos.height())
source = QRectF(pos.x(), self.fHeight, pos.width(), pos.height())
elif self.fPixmapMode == self.VERTICAL:
target = QRectF(pos.x(), pos.y() + (self.fHeight * octave), pos.width(), pos.height())
source = QRectF(self.fWidth, pos.y(), pos.width(), pos.height())
else: else:
return return


paintedWhite = True paintedWhite = True
painter.drawPixmap(target, self.m_pixmap, source)
painter.drawPixmap(target, self.fPixmap, source)


# ------------------------------------------------------------- # -------------------------------------------------------------
# Clear white keys border # Clear white keys border


if paintedWhite: if paintedWhite:
for octave in range(self.m_octaves):
for octave in range(self.fOctaves):
for note in (1, 3, 6, 8, 10): for note in (1, 3, 6, 8, 10):
pos = self._getRectFromMidiNote(note) pos = self._getRectFromMidiNote(note)
if self.m_pixmapMode == self.HORIZONTAL:
target = QRectF(pos.x() + (self.p_width * octave), 0, pos.width(), pos.height())
if self.fPixmapMode == self.HORIZONTAL:
target = QRectF(pos.x() + (self.fWidth * octave), 0, pos.width(), pos.height())
source = QRectF(pos.x(), 0, pos.width(), pos.height()) source = QRectF(pos.x(), 0, pos.width(), pos.height())
elif self.m_pixmapMode == self.VERTICAL:
target = QRectF(pos.x(), pos.y() + (self.p_height * octave), pos.width(), pos.height())
elif self.fPixmapMode == self.VERTICAL:
target = QRectF(pos.x(), pos.y() + (self.fHeight * octave), pos.width(), pos.height())
source = QRectF(0, pos.y(), pos.width(), pos.height()) source = QRectF(0, pos.y(), pos.width(), pos.height())
else: else:
return return


painter.drawPixmap(target, self.m_pixmap, source)
painter.drawPixmap(target, self.fPixmap, source)


# ------------------------------------------------------------- # -------------------------------------------------------------
# Paint (black) pressed keys # Paint (black) pressed keys


for i in range(len(self.m_enabledKeys)):
note = self.m_enabledKeys[i]
for i in range(len(self.fEnabledKeys)):
note = self.fEnabledKeys[i]
pos = self._getRectFromMidiNote(note) pos = self._getRectFromMidiNote(note)


if not self._isNoteBlack(note): if not self._isNoteBlack(note):
@@ -388,41 +389,39 @@ class PixmapKeyboard(QWidget):
# cannot paint this note either # cannot paint this note either
continue continue


if self.m_pixmapMode == self.VERTICAL:
octave = self.m_octaves - octave - 1
if self.fPixmapMode == self.VERTICAL:
octave = self.fOctaves - octave - 1


if self.m_pixmapMode == self.HORIZONTAL:
target = QRectF(pos.x() + (self.p_width * octave), 0, pos.width(), pos.height())
source = QRectF(pos.x(), self.p_height, pos.width(), pos.height())
elif self.m_pixmapMode == self.VERTICAL:
target = QRectF(pos.x(), pos.y() + (self.p_height * octave), pos.width(), pos.height())
source = QRectF(self.p_width, pos.y(), pos.width(), pos.height())
if self.fPixmapMode == self.HORIZONTAL:
target = QRectF(pos.x() + (self.fWidth * octave), 0, pos.width(), pos.height())
source = QRectF(pos.x(), self.fHeight, pos.width(), pos.height())
elif self.fPixmapMode == self.VERTICAL:
target = QRectF(pos.x(), pos.y() + (self.fHeight * octave), pos.width(), pos.height())
source = QRectF(self.fWidth, pos.y(), pos.width(), pos.height())
else: else:
return return


painter.drawPixmap(target, self.m_pixmap, source)
painter.drawPixmap(target, self.fPixmap, source)


# Paint C-number note info # Paint C-number note info
painter.setFont(self.m_font)
painter.setFont(self.fFont)
painter.setPen(Qt.black) painter.setPen(Qt.black)


for i in range(self.m_octaves):
if self.m_pixmapMode == self.HORIZONTAL:
for i in range(self.fOctaves):
if self.fPixmapMode == self.HORIZONTAL:
painter.drawText(i * 144, 48, 18, 18, Qt.AlignCenter, "C%i" % int(i + 2)) painter.drawText(i * 144, 48, 18, 18, Qt.AlignCenter, "C%i" % int(i + 2))
elif self.m_pixmapMode == self.VERTICAL:
painter.drawText(45, (self.m_octaves * 144) - (i * 144) - 16, 18, 18, Qt.AlignCenter, "C%i" % int(i + 2))

event.accept()
elif self.fPixmapMode == self.VERTICAL:
painter.drawText(45, (self.fOctaves * 144) - (i * 144) - 16, 18, 18, Qt.AlignCenter, "C%i" % int(i + 2))


@pyqtSlot() @pyqtSlot()
def slot_updateOnce(self): def slot_updateOnce(self):
if self.m_needsUpdate:
if self.fNeedsUpdate:
self.update() self.update()
self.m_needsUpdate = False
self.fNeedsUpdate = False


def _isNoteBlack(self, note): def _isNoteBlack(self, note):
baseNote = note % 12 baseNote = note % 12
return bool(baseNote in (1, 3, 6, 8, 10)) return bool(baseNote in (1, 3, 6, 8, 10))


def _getRectFromMidiNote(self, note): def _getRectFromMidiNote(self, note):
return self.m_midiMap.get(str(note % 12))
return self.fMidiMap.get(str(note % 12))

Loading…
Cancel
Save