Browse Source

Minor optimizations and syntax changes

tags/v0.9.0
falkTX 12 years ago
parent
commit
d97157b7f1
7 changed files with 174 additions and 93 deletions
  1. +2
    -0
      .gitignore
  2. +24
    -24
      c++/widgets/digitalpeakmeter.cpp
  3. +112
    -32
      c++/widgets/pixmapdial.cpp
  4. +5
    -5
      c++/widgets/pixmapdial.h
  5. +6
    -4
      c++/xycontroller/xycontroller.cpp
  6. +1
    -1
      src/digitalpeakmeter.py
  7. +24
    -27
      src/pixmapdial.py

+ 2
- 0
.gitignore View File

@@ -17,6 +17,7 @@
*.pyc
ui_*.py

*.moc
moc_*.cpp
ui_*.h

@@ -33,6 +34,7 @@ carla-discovery-unix64
c++/carla-backend/doxygen/
c++/carla-includes/vst/
c++/jackmeter/cadence_jackmeter
c++/xycontroller/cadence_xycontroller

c++/*/*-build-*-Debug/
c++/*/*-build-*-Release/


+ 24
- 24
c++/widgets/digitalpeakmeter.cpp View File

@@ -95,21 +95,21 @@ void DigitalPeakMeter::setOrientation(Orientation orientation)

if (m_orientation == HORIZONTAL)
{
m_gradientMeter.setColorAt(0.0, m_colorBase);
m_gradientMeter.setColorAt(0.2, m_colorBase);
m_gradientMeter.setColorAt(0.4, m_colorBase);
m_gradientMeter.setColorAt(0.6, m_colorBase);
m_gradientMeter.setColorAt(0.8, Qt::yellow);
m_gradientMeter.setColorAt(1.0, Qt::red);
m_gradientMeter.setColorAt(0.0f, m_colorBase);
m_gradientMeter.setColorAt(0.2f, m_colorBase);
m_gradientMeter.setColorAt(0.4f, m_colorBase);
m_gradientMeter.setColorAt(0.6f, m_colorBase);
m_gradientMeter.setColorAt(0.8f, Qt::yellow);
m_gradientMeter.setColorAt(1.0f, Qt::red);
}
else if (m_orientation == VERTICAL)
{
m_gradientMeter.setColorAt(0.0, Qt::red);
m_gradientMeter.setColorAt(0.2, Qt::yellow);
m_gradientMeter.setColorAt(0.4, m_colorBase);
m_gradientMeter.setColorAt(0.6, m_colorBase);
m_gradientMeter.setColorAt(0.8, m_colorBase);
m_gradientMeter.setColorAt(1.0, m_colorBase);
m_gradientMeter.setColorAt(0.0f, Qt::red);
m_gradientMeter.setColorAt(0.2f, Qt::yellow);
m_gradientMeter.setColorAt(0.4f, m_colorBase);
m_gradientMeter.setColorAt(0.6f, m_colorBase);
m_gradientMeter.setColorAt(0.8f, m_colorBase);
m_gradientMeter.setColorAt(1.0f, m_colorBase);
}
else
return qCritical("DigitalPeakMeter::setOrientation(%i) - invalid orientation", orientation);
@@ -220,21 +220,21 @@ void DigitalPeakMeter::paintEvent(QPaintEvent*)

// Base
painter.setPen(m_colorBaseT);
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.25f, 2, lsmall * 0.25f, lfull-2);
painter.drawLine(lsmall * 0.50f, 2, lsmall * 0.50f, lfull-2);

// Yellow
painter.setPen(QColor(110, 110, 15, 100));
painter.drawLine(lsmall * 0.70, 2, lsmall * 0.70, lfull-2);
painter.drawLine(lsmall * 0.83, 2, lsmall * 0.83, lfull-2);
painter.drawLine(lsmall * 0.70f, 2, lsmall * 0.70f, lfull-2);
painter.drawLine(lsmall * 0.83f, 2, lsmall * 0.83f, lfull-2);

// Orange
painter.setPen(QColor(180, 110, 15, 100));
painter.drawLine(lsmall * 0.90, 2, lsmall * 0.90, lfull-2);
painter.drawLine(lsmall * 0.90f, 2, lsmall * 0.90f, lfull-2);

// Red
painter.setPen(QColor(110, 15, 15, 100));
painter.drawLine(lsmall * 0.96, 2, lsmall * 0.96, lfull-2);
painter.drawLine(lsmall * 0.96f, 2, lsmall * 0.96f, lfull-2);

}
else if (m_orientation == VERTICAL)
@@ -245,21 +245,21 @@ void DigitalPeakMeter::paintEvent(QPaintEvent*)

// Base
painter.setPen(m_colorBaseT);
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.25f), lfull-2, lsmall - (lsmall * 0.25f));
painter.drawLine(2, lsmall - (lsmall * 0.50f), lfull-2, lsmall - (lsmall * 0.50f));

// Yellow
painter.setPen(QColor(110, 110, 15, 100));
painter.drawLine(2, lsmall - (lsmall * 0.70), lfull-2, lsmall - (lsmall * 0.70));
painter.drawLine(2, lsmall - (lsmall * 0.83), lfull-2, lsmall - (lsmall * 0.83));
painter.drawLine(2, lsmall - (lsmall * 0.70f), lfull-2, lsmall - (lsmall * 0.70f));
painter.drawLine(2, lsmall - (lsmall * 0.83f), lfull-2, lsmall - (lsmall * 0.83f));

// Orange
painter.setPen(QColor(180, 110, 15, 100));
painter.drawLine(2, lsmall - (lsmall * 0.90), lfull-2, lsmall - (lsmall * 0.90));
painter.drawLine(2, lsmall - (lsmall * 0.90f), lfull-2, lsmall - (lsmall * 0.90f));

// Red
painter.setPen(QColor(110, 15, 15, 100));
painter.drawLine(2, lsmall - (lsmall * 0.96), lfull-2, lsmall - (lsmall * 0.96));
painter.drawLine(2, lsmall - (lsmall * 0.96f), lfull-2, lsmall - (lsmall * 0.96f));
}
}



+ 112
- 32
c++/widgets/pixmapdial.cpp View File

@@ -20,8 +20,8 @@
#include <QtCore/QTimer>
#include <QtGui/QPainter>

PixmapDial::PixmapDial(QWidget* parent):
QDial(parent)
PixmapDial::PixmapDial(QWidget* parent)
: QDial(parent)
{
m_pixmap.load(":/bitmaps/dial_01d.png");
m_pixmap_n_str = "01";
@@ -36,7 +36,7 @@ PixmapDial::PixmapDial(QWidget* parent):
m_orientation = VERTICAL;

m_label = "";
m_label_pos = QPointF(0.0, 0.0);
m_label_pos = QPointF(0.0f, 0.0f);
m_label_width = 0;
m_label_height = 0;
m_label_gradient = QLinearGradient(0, 0, 0, 1);
@@ -91,27 +91,23 @@ void PixmapDial::setLabel(QString label)
m_label_width = QFontMetrics(font()).width(label);
m_label_height = QFontMetrics(font()).height();

m_label_pos.setX((p_size/2)-(m_label_width/2));
m_label_pos.setY(p_size+m_label_height);
m_label_pos.setX(float(p_size)/2 - float(m_label_width)/2);
m_label_pos.setY(p_size + m_label_height);

m_label_gradient.setColorAt(0.0, m_color1);
m_label_gradient.setColorAt(0.6, m_color1);
m_label_gradient.setColorAt(1.0, m_color2);
m_label_gradient.setColorAt(0.0f, m_color1);
m_label_gradient.setColorAt(0.6f, m_color1);
m_label_gradient.setColorAt(1.0f, m_color2);

m_label_gradient.setStart(0, p_size/2);
m_label_gradient.setStart(0, float(p_size)/2);
m_label_gradient.setFinalStop(0, p_size+m_label_height+5);

m_label_gradient_rect = QRectF(p_size*1/8, p_size/2, p_size*6/8, p_size+m_label_height+5);
m_label_gradient_rect = QRectF(float(p_size)/8, float(p_size)/2, float(p_size*6)/8, p_size+m_label_height+5);
update();
}

void PixmapDial::setPixmap(int pixmap_id)
void PixmapDial::setPixmap(int pixmapId)
{
if (pixmap_id > 10)
m_pixmap_n_str = QString::number(pixmap_id);
else
m_pixmap_n_str = QString("0%1").arg(pixmap_id);

m_pixmap_n_str.sprintf("%02i", pixmapId);
m_pixmap.load(QString(":/bitmaps/dial_%1%2.png").arg(m_pixmap_n_str).arg(isEnabled() ? "" : "d"));

if (m_pixmap.width() > m_pixmap.height())
@@ -163,7 +159,7 @@ void PixmapDial::enterEvent(QEvent* event)
{
m_hovered = true;
if (m_hover_step == HOVER_MIN)
m_hover_step = HOVER_MIN + 1;
m_hover_step += 1;
QDial::enterEvent(event);
}

@@ -171,7 +167,7 @@ void PixmapDial::leaveEvent(QEvent* event)
{
m_hovered = false;
if (m_hover_step == HOVER_MAX)
m_hover_step = HOVER_MAX - 1;
m_hover_step -= 1;
QDial::leaveEvent(event);
}

@@ -185,12 +181,10 @@ void PixmapDial::paintEvent(QPaintEvent*)
painter.setBrush(m_label_gradient);
painter.drawRect(m_label_gradient_rect);

painter.setPen(isEnabled() ? m_colorT[0] : m_colorT[1]);
painter.setPen(m_colorT[isEnabled() ? 0 : 1]);
painter.drawText(m_label_pos, m_label);
}

QRectF target, source;

if (isEnabled())
{
float current = value()-minimum();
@@ -199,19 +193,19 @@ void PixmapDial::paintEvent(QPaintEvent*)
if (divider == 0.0f)
return;

target = QRectF(0.0, 0.0, p_size, p_size);
float value = current/divider;
QRectF source, target(0.0f, 0.0f, p_size, p_size);

int xpos, ypos, per = int((p_count-1) * value);
int xpos, ypos, per = (p_count-1)*value;

if (m_orientation == HORIZONTAL)
{
xpos = p_size*per;
ypos = 0.0;
ypos = 0.0f;
}
else
{
xpos = 0.0;
xpos = 0.0f;
ypos = p_size*per;
}

@@ -219,12 +213,99 @@ void PixmapDial::paintEvent(QPaintEvent*)
painter.drawPixmap(target, m_pixmap, source);

// Custom knobs (Dry/Wet and Volume)
// TODO

if (m_custom_paint == CUSTOM_PAINT_CARLA_WET || m_custom_paint == CUSTOM_PAINT_CARLA_VOL)
{
// knob color
QColor colorGreen(0x5D, 0xE7, 0x3D, 191 + m_hover_step*7);
QColor colorBlue(0x3E, 0xB8, 0xBE, 191 + m_hover_step*7);

// draw small circle
QRectF ballRect(8.0, 8.0, 15.0, 15.0);
QPainterPath ballPath;
ballPath.addEllipse(ballRect);
//painter.drawRect(ballRect);
float tmpValue = (0.375f + 0.75f*value);
float ballValue = tmpValue - floorf(tmpValue);
QPointF ballPoint(ballPath.pointAtPercent(ballValue));

// draw arc
int startAngle = 216*16;
int spanAngle = -252*16*value;

if (m_custom_paint == CUSTOM_PAINT_CARLA_WET)
{
painter.setBrush(colorBlue);
painter.setPen(QPen(colorBlue, 0));
painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2));

QConicalGradient gradient(15.5, 15.5, -45);
gradient.setColorAt(0.0, colorBlue);
gradient.setColorAt(0.125, colorBlue);
gradient.setColorAt(0.625, colorGreen);
gradient.setColorAt(0.75, colorGreen);
gradient.setColorAt(0.76, colorGreen);
gradient.setColorAt(1.0, colorGreen);
painter.setBrush(gradient);
painter.setPen(QPen(gradient, 3));
}
else
{
painter.setBrush(colorBlue);
painter.setPen(QPen(colorBlue, 0));
painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2));

painter.setBrush(colorBlue);
painter.setPen(QPen(colorBlue, 3));
}

painter.drawArc(4.0, 4.0, 26.0, 26.0, startAngle, spanAngle);
}
// Custom knobs (L and R)
// TODO
else if (m_custom_paint == CUSTOM_PAINT_CARLA_L || m_custom_paint == CUSTOM_PAINT_CARLA_R)
{
// knob color
QColor color(0xAD + m_hover_step*5, 0xD5 + m_hover_step*4, 0x4B + m_hover_step*5);

// draw small circle
QRectF ballRect(7.0, 8.0, 11.0, 12.0);
QPainterPath ballPath;
ballPath.addEllipse(ballRect);
//painter.drawRect(ballRect);
float tmpValue = (0.375f + 0.75f*value);
float ballValue = tmpValue - floorf(tmpValue);
QPointF ballPoint(ballPath.pointAtPercent(ballValue));

painter.setBrush(color);
painter.setPen(QPen(color, 0));
painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.0f, 2.0f));

int startAngle, spanAngle;

// draw arc
if (m_custom_paint == CUSTOM_PAINT_CARLA_L)
{
startAngle = 216*16;
spanAngle = -252.0*16*value;
}
else if (m_custom_paint == CUSTOM_PAINT_CARLA_R)
{
startAngle = 324.0*16;
spanAngle = 252.0*16*(1.0-value);
}
else
return;

painter.setPen(QPen(color, 2));
painter.drawArc(3.5, 4.5, 22.0, 22.0, startAngle, spanAngle);

if (HOVER_MIN < m_hover_step && m_hover_step < HOVER_MAX)
{
m_hover_step += m_hovered ? 1 : -1;
QTimer::singleShot(20, this, SLOT(update()));
}
}

if (HOVER_MIN > m_hover_step && m_hover_step < HOVER_MAX)
if (HOVER_MIN < m_hover_step && m_hover_step < HOVER_MAX)
{
m_hover_step += m_hovered ? 1 : -1;
QTimer::singleShot(20, this, SLOT(update()));
@@ -232,9 +313,8 @@ void PixmapDial::paintEvent(QPaintEvent*)
}
else
{
target = QRectF(0.0, 0.0, p_size, p_size);
source = target;
painter.drawPixmap(target, m_pixmap, source);
QRectF target(0.0, 0.0, p_size, p_size);
painter.drawPixmap(target, m_pixmap, target);
}
}



+ 5
- 5
c++/widgets/pixmapdial.h View File

@@ -39,11 +39,11 @@ public:

PixmapDial(QWidget* parent);

int getSize() const;
int getSize() const;
void setCustomPaint(CustomPaint paint);
void setEnabled(bool enabled);
void setLabel(QString label);
void setPixmap(int pixmap_id);
void setPixmap(int pixmapId);

QSize minimumSizeHint() const;
QSize sizeHint() const;
@@ -64,7 +64,7 @@ private:
Orientation m_orientation;

bool m_hovered;
int m_hover_step;
unsigned short m_hover_step;

QString m_label;
QPointF m_label_pos;
@@ -80,8 +80,8 @@ private:

int p_width, p_height, p_size, p_count;

static const int HOVER_MIN = 0;
static const int HOVER_MAX = 9;
static const unsigned short HOVER_MIN = 0;
static const unsigned short HOVER_MAX = 9;
};

#endif // PIXMAPDIAL_H

+ 6
- 4
c++/xycontroller/xycontroller.cpp View File

@@ -60,11 +60,9 @@ private:
//QMutex mutex;
};

qreal abs_q(const qreal value)
float abs_f(const float value)
{
if (value < 1.0)
return -value;
return value;
return (value < 1.0f) ? -value : value;
}

#if 0
@@ -890,6 +888,10 @@ int main(int argc, char* argv[])
{
MIDI_CC_LIST__init();

#ifdef Q_OS_WIN
QApplication::setGraphicsSystem("raster");
#endif

QApplication app(argc, argv);
app.setApplicationName("XY-Controller");
app.setApplicationVersion(VERSION);


+ 1
- 1
src/digitalpeakmeter.py View File

@@ -54,7 +54,7 @@ class DigitalPeakMeter(QWidget):

if level < 0.0:
level = -level
else if level > 1.0:
elif level > 1.0:
level = 1.0

self.m_channelsData[meter-1] = level


+ 24
- 27
src/pixmapdial.py View File

@@ -17,14 +17,17 @@
# For a full copy of the GNU General Public License see the COPYING file

# Imports (Global)
from math import floor
from PyQt4.QtCore import Qt, QPointF, QRectF, QTimer, QSize, SLOT
from PyQt4.QtGui import QColor, QConicalGradient, QDial, QFontMetrics, QLinearGradient, QPainter, QPainterPath, QPen, QPixmap

# Widget Class
class PixmapDial(QDial):
# enum Orientation
HORIZONTAL = 0
VERTICAL = 1

# enum CustomPaint
CUSTOM_PAINT_NULL = 0
CUSTOM_PAINT_CARLA_WET = 1
CUSTOM_PAINT_CARLA_VOL = 2
@@ -89,25 +92,21 @@ class PixmapDial(QDial):
self.m_label_width = QFontMetrics(self.font()).width(label)
self.m_label_height = QFontMetrics(self.font()).height()

self.m_label_pos.setX((self.p_size / 2) - (self.m_label_width / 2))
self.m_label_pos.setX(float(self.p_size)/2 - float(self.m_label_width)/2)
self.m_label_pos.setY(self.p_size + self.m_label_height)

self.m_label_gradient.setColorAt(0.0, self.m_color1)
self.m_label_gradient.setColorAt(0.6, self.m_color1)
self.m_label_gradient.setColorAt(1.0, self.m_color2)

self.m_label_gradient.setStart(0, self.p_size / 2)
self.m_label_gradient.setStart(0, float(self.p_size)/2)
self.m_label_gradient.setFinalStop(0, self.p_size + self.m_label_height + 5)

self.m_label_gradient_rect = QRectF(self.p_size * 1 / 8, self.p_size / 2, self.p_size * 6 / 8, self.p_size + self.m_label_height + 5)
self.m_label_gradient_rect = QRectF(float(self.p_size)/8, float(self.p_size)/2, float(self.p_size)*6/8, self.p_size+self.m_label_height+5)
self.update()

def setPixmap(self, pixmap_id):
if pixmap_id > 10:
self.m_pixmap_n_str = str(pixmap_id)
else:
self.m_pixmap_n_str = "0%i" % pixmap_id

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

if self.m_pixmap.width() > self.m_pixmap.height():
@@ -135,10 +134,10 @@ class PixmapDial(QDial):
self.p_height = 1

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

self.setMinimumSize(self.p_size, self.p_size + self.m_label_height + 5)
@@ -146,14 +145,14 @@ class PixmapDial(QDial):

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

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

def paintEvent(self, event):
@@ -165,7 +164,7 @@ class PixmapDial(QDial):
painter.setBrush(self.m_label_gradient)
painter.drawRect(self.m_label_gradient_rect)

painter.setPen(self.m_colorT[0] if self.isEnabled() else self.m_colorT[1])
painter.setPen(self.m_colorT[0 if self.isEnabled() else 1])
painter.drawText(self.m_label_pos, self.m_label)

if self.isEnabled():
@@ -175,8 +174,8 @@ class PixmapDial(QDial):
if divider == 0.0:
return

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

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

@@ -196,20 +195,18 @@ class PixmapDial(QDial):
colorGreen = QColor(0x5D, 0xE7, 0x3D, 191 + self.m_hover_step*7)
colorBlue = QColor(0x3E, 0xB8, 0xBE, 191 + self.m_hover_step*7)

#colorGreen = QColor(0x5D + self.m_hover_step*6, 0xE7 + self.m_hover_step*1, 0x3D + self.m_hover_step*5)
#colorBlue = QColor(0x52 + self.m_hover_step*8, 0xEE + self.m_hover_step*1, 0xF8 + self.m_hover_step/2)

# draw small circle
ballPath = QPainterPath()
ballRect = QRectF(8.0, 8.0, 15.0, 15.0)
ballPath = QPainterPath()
ballPath.addEllipse(ballRect)
#painter.drawRect(ballRect)
ballValue = (0.375 + 0.75*value) % 1.0
tmpValue = (0.375 + 0.75*value)
ballValue = tmpValue - floor(tmpValue)
ballPoint = ballPath.pointAtPercent(ballValue)

# draw arc
startAngle = 216*16
spanAngle = -252.0*16*value
spanAngle = -252*16*value

if self.m_custom_paint == self.CUSTOM_PAINT_CARLA_WET:
painter.setBrush(colorBlue)
@@ -242,11 +239,12 @@ class PixmapDial(QDial):
color = QColor(0xAD + self.m_hover_step*5, 0xD5 + self.m_hover_step*4, 0x4B + self.m_hover_step*5)

# draw small circle
ballPath = QPainterPath()
ballRect = QRectF(7.0, 8.0, 11.0, 12.0)
ballPath = QPainterPath()
ballPath.addEllipse(ballRect)
#painter.drawRect(ballRect)
ballValue = (0.375 + 0.75*value) % 1.0
tmpValue = (0.375 + 0.75*value)
ballValue = tmpValue - floor(tmpValue)
ballPoint = ballPath.pointAtPercent(ballValue)

painter.setBrush(color)
@@ -272,8 +270,7 @@ class PixmapDial(QDial):

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

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


Loading…
Cancel
Save