@@ -141,6 +141,9 @@ | |||||
</widget> | </widget> | ||||
<widget class="QWidget" name="layoutWidget"> | <widget class="QWidget" name="layoutWidget"> | ||||
<layout class="QVBoxLayout" name="verticalLayout_4"> | <layout class="QVBoxLayout" name="verticalLayout_4"> | ||||
<property name="spacing"> | |||||
<number>1</number> | |||||
</property> | |||||
<item> | <item> | ||||
<widget class="QTabWidget" name="tabUtils"> | <widget class="QTabWidget" name="tabUtils"> | ||||
<property name="sizePolicy"> | <property name="sizePolicy"> | ||||
@@ -38,14 +38,8 @@ static std::vector<RtAudio::Api> gRtAudioApis; | |||||
static void initRtApis() | static void initRtApis() | ||||
{ | { | ||||
static bool initiated = false; | |||||
if (! initiated) | |||||
{ | |||||
initiated = true; | |||||
if (gRtAudioApis.size() == 0) | |||||
RtAudio::getCompiledApi(gRtAudioApis); | RtAudio::getCompiledApi(gRtAudioApis); | ||||
} | |||||
} | } | ||||
RtMidi::Api getMatchedAudioMidiAPi(const RtAudio::Api rtApi) | RtMidi::Api getMatchedAudioMidiAPi(const RtAudio::Api rtApi) | ||||
@@ -791,7 +785,7 @@ protected: | |||||
CARLA_ASSERT(nframes == fBufferSize); | CARLA_ASSERT(nframes == fBufferSize); | ||||
CARLA_ASSERT(outsPtr != nullptr); | CARLA_ASSERT(outsPtr != nullptr); | ||||
if (kData->curPluginCount == 0 || ! (fAudioIsReady && fConnectAudioLock.tryLock())) | |||||
if (kData->curPluginCount == 0 || ! fAudioIsReady) | |||||
{ | { | ||||
carla_zeroFloat(outsPtr, nframes*fAudioCountOut); | carla_zeroFloat(outsPtr, nframes*fAudioCountOut); | ||||
return proccessPendingEvents(); | return proccessPendingEvents(); | ||||
@@ -842,7 +836,9 @@ protected: | |||||
engineEvent.channel = midiChannel; | engineEvent.channel = midiChannel; | ||||
if (midiEvent.time < fTimeInfo.frame) | if (midiEvent.time < fTimeInfo.frame) | ||||
{ | |||||
engineEvent.time = 0; | engineEvent.time = 0; | ||||
} | |||||
else if (midiEvent.time >= fTimeInfo.frame + nframes) | else if (midiEvent.time >= fTimeInfo.frame + nframes) | ||||
{ | { | ||||
engineEvent.time = fTimeInfo.frame + nframes-1; | engineEvent.time = fTimeInfo.frame + nframes-1; | ||||
@@ -851,8 +847,6 @@ protected: | |||||
else | else | ||||
engineEvent.time = midiEvent.time - fTimeInfo.frame; | engineEvent.time = midiEvent.time - fTimeInfo.frame; | ||||
carla_stdout("Got midi, time %f vs %i", midiEvent.time, engineEvent.time); | |||||
if (MIDI_IS_STATUS_CONTROL_CHANGE(midiStatus)) | if (MIDI_IS_STATUS_CONTROL_CHANGE(midiStatus)) | ||||
{ | { | ||||
const uint8_t midiControl = midiEvent.data[1]; | const uint8_t midiControl = midiEvent.data[1]; | ||||
@@ -914,6 +908,8 @@ protected: | |||||
fMidiInEvents.mutex.unlock(); | fMidiInEvents.mutex.unlock(); | ||||
} | } | ||||
fConnectAudioLock.lock(); | |||||
// connect input buffers | // connect input buffers | ||||
if (fConnectedAudioIns[0].count() == 0) | if (fConnectedAudioIns[0].count() == 0) | ||||
{ | { | ||||
@@ -982,6 +978,17 @@ protected: | |||||
} | } | ||||
} | } | ||||
if (fConnectedAudioOuts[1].count() != 0) | |||||
{ | |||||
for (auto it = fConnectedAudioOuts[1].begin(); it.valid(); it.next()) | |||||
{ | |||||
const uint& port(*it); | |||||
CARLA_ASSERT(port < fAudioCountOut); | |||||
carla_addFloat(fAudioBufOut[port], fAudioBufRackOut[1], nframes); | |||||
} | |||||
} | |||||
fConnectAudioLock.unlock(); | fConnectAudioLock.unlock(); | ||||
// output audio | // output audio | ||||
@@ -1008,7 +1015,6 @@ protected: | |||||
} | } | ||||
proccessPendingEvents(); | proccessPendingEvents(); | ||||
return; | return; | ||||
// unused | // unused | ||||
@@ -752,7 +752,7 @@ class CarlaMainW(QMainWindow): | |||||
self.ui.miniCanvasPreview.setRealParent(self) | self.ui.miniCanvasPreview.setRealParent(self) | ||||
self.ui.miniCanvasPreview.setViewTheme(patchcanvas.canvas.theme.canvas_bg, 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, self.fSavedSettings["UseCustomMiniCanvasPaint"]) | |||||
QTimer.singleShot(100, self, SLOT("slot_miniCanvasInit()")) | QTimer.singleShot(100, self, SLOT("slot_miniCanvasInit()")) | ||||
# ------------------------------------------------------------- | # ------------------------------------------------------------- | ||||
@@ -1953,6 +1953,9 @@ class CarlaMainW(QMainWindow): | |||||
} | } | ||||
""" % (col1, col2)) | """ % (col1, col2)) | ||||
useCustomMiniCanvasPaint = bool(settings.value("Main/UseProTheme", True, type=bool) and | |||||
settings.value("Main/ProThemeColor", "Black", type=str) == "Black") | |||||
self.fSavedSettings = { | self.fSavedSettings = { | ||||
"Main/DefaultProjectFolder": settings.value("Main/DefaultProjectFolder", HOME, type=str), | "Main/DefaultProjectFolder": settings.value("Main/DefaultProjectFolder", HOME, type=str), | ||||
"Main/RefreshInterval": settings.value("Main/RefreshInterval", 50, type=int), | "Main/RefreshInterval": settings.value("Main/RefreshInterval", 50, type=int), | ||||
@@ -1962,7 +1965,8 @@ class CarlaMainW(QMainWindow): | |||||
"Canvas/EyeCandy": settings.value("Canvas/EyeCandy", patchcanvas.EYECANDY_SMALL, type=int), | "Canvas/EyeCandy": settings.value("Canvas/EyeCandy", patchcanvas.EYECANDY_SMALL, type=int), | ||||
"Canvas/UseOpenGL": settings.value("Canvas/UseOpenGL", False, type=bool), | "Canvas/UseOpenGL": settings.value("Canvas/UseOpenGL", False, type=bool), | ||||
"Canvas/Antialiasing": settings.value("Canvas/Antialiasing", patchcanvas.ANTIALIASING_SMALL, type=int), | "Canvas/Antialiasing": settings.value("Canvas/Antialiasing", patchcanvas.ANTIALIASING_SMALL, type=int), | ||||
"Canvas/HighQualityAntialiasing": settings.value("Canvas/HighQualityAntialiasing", False, type=bool) | |||||
"Canvas/HighQualityAntialiasing": settings.value("Canvas/HighQualityAntialiasing", False, type=bool), | |||||
"UseCustomMiniCanvasPaint": useCustomMiniCanvasPaint | |||||
} | } | ||||
# --------------------------------------------- | # --------------------------------------------- | ||||
@@ -448,7 +448,7 @@ static inline | |||||
PluginType getPluginTypeFromString(const char* const stype) | PluginType getPluginTypeFromString(const char* const stype) | ||||
{ | { | ||||
CARLA_ASSERT(stype != nullptr); | CARLA_ASSERT(stype != nullptr); | ||||
carla_debug("CarlaBackend::getPluginTypeFromString(%s)", stype); | |||||
carla_debug("CarlaBackend::getPluginTypeFromString(\"%s\")", stype); | |||||
if (stype == nullptr) | if (stype == nullptr) | ||||
{ | { | ||||
@@ -477,7 +477,7 @@ PluginType getPluginTypeFromString(const char* const stype) | |||||
if (std::strcmp(stype, "SFZ") == 0) | if (std::strcmp(stype, "SFZ") == 0) | ||||
return PLUGIN_SFZ; | return PLUGIN_SFZ; | ||||
carla_stderr("CarlaBackend::getPluginTypeFromString(%s) - invalid string type", stype); | |||||
carla_stderr("CarlaBackend::getPluginTypeFromString(\"%s\") - invalid string type", stype); | |||||
return PLUGIN_NONE; | return PLUGIN_NONE; | ||||
} | } | ||||
@@ -37,6 +37,8 @@ class CanvasPreviewFrame(QFrame): | |||||
def __init__(self, parent): | def __init__(self, parent): | ||||
QFrame.__init__(self, parent) | QFrame.__init__(self, parent) | ||||
self.fUseCustomPaint = False | |||||
self.fMouseDown = False | self.fMouseDown = False | ||||
self.fViewBg = QColor(0, 0, 0) | self.fViewBg = QColor(0, 0, 0) | ||||
@@ -56,7 +58,7 @@ class CanvasPreviewFrame(QFrame): | |||||
self.fViewPadY = 0.0 | self.fViewPadY = 0.0 | ||||
self.fViewRect = [0.0, 0.0, 10.0, 10.0] | self.fViewRect = [0.0, 0.0, 10.0, 10.0] | ||||
def init(self, scene, realWidth, realHeight): | |||||
def init(self, scene, realWidth, realHeight, useCustomPaint): | |||||
padding = 6 | padding = 6 | ||||
self.fScene = scene | self.fScene = scene | ||||
@@ -69,6 +71,10 @@ class CanvasPreviewFrame(QFrame): | |||||
self.fRenderTarget.setWidth(realWidth) | self.fRenderTarget.setWidth(realWidth) | ||||
self.fRenderTarget.setHeight(realHeight) | self.fRenderTarget.setHeight(realHeight) | ||||
if self.fUseCustomPaint != useCustomPaint: | |||||
self.fUseCustomPaint = useCustomPaint | |||||
self.repaint() | |||||
def setRealParent(self, parent): | def setRealParent(self, parent): | ||||
self.fRealParent = parent | self.fRealParent = parent | ||||
@@ -154,9 +160,23 @@ class CanvasPreviewFrame(QFrame): | |||||
def paintEvent(self, event): | def paintEvent(self, event): | ||||
painter = QPainter(self) | painter = QPainter(self) | ||||
painter.setBrush(self.fViewBg) | |||||
painter.setPen(self.fViewBg) | |||||
painter.drawRoundRect(2, 2, self.width()-6, self.height()-6, 3, 3) | |||||
if self.fUseCustomPaint: | |||||
painter.setBrush(self.fViewBg) | |||||
painter.setPen(QColor(12, 12, 12)) | |||||
painter.drawRect(0, 0, self.width(), self.height()-2) | |||||
painter.setBrush(QColor(36, 36, 36)) | |||||
painter.setPen(QColor(62, 62, 62)) | |||||
painter.drawRect(1, 1, self.width()-2, self.height()-4) | |||||
painter.setBrush(self.fViewBg) | |||||
painter.setPen(self.fViewBg) | |||||
painter.drawRect(2, 3, self.width()-5, self.height()-7) | |||||
else: | |||||
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) | ||||
@@ -172,7 +192,10 @@ class CanvasPreviewFrame(QFrame): | |||||
painter.setPen(self.fViewPen) | painter.setPen(self.fViewPen) | ||||
painter.drawRect(self.fViewRect[iX], self.fViewRect[iY], maxWidth, maxHeight) | painter.drawRect(self.fViewRect[iX], self.fViewRect[iY], maxWidth, maxHeight) | ||||
QFrame.paintEvent(self, event) | |||||
if self.fUseCustomPaint: | |||||
event.accept() | |||||
else: | |||||
QFrame.paintEvent(self, event) | |||||
def resizeEvent(self, event): | def resizeEvent(self, event): | ||||
self.fRenderSource = self.getRenderSource() | self.fRenderSource = self.getRenderSource() | ||||