summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel Schürmann <daschuer@mixxx.org>2014-02-18 00:39:49 +0100
committerDaniel Schürmann <daschuer@mixxx.org>2014-02-18 00:39:49 +0100
commit968f04f620480a912dac47ea8ed672ab4e3a948b (patch)
treea6168f18380014b90d6c20dab65960764439fd49 /src
parent02675dc2e3f674342d2fdb49ff89e4352c6046ae (diff)
parent88732c00f46088990d793e0da295459764ef9fce (diff)
Merge remote-tracking branch 'upstream/master' into wpushbutton_default
Conflicts: src/widget/knobeventhandler.h src/widget/wslidercomposed.cpp
Diffstat (limited to 'src')
-rw-r--r--src/engine/engineaux.cpp8
-rw-r--r--src/mixxx.cpp8
-rw-r--r--src/skin/skincontext.cpp10
-rw-r--r--src/skin/skincontext.h3
-rw-r--r--src/soundmanagerutil.cpp16
-rw-r--r--src/soundmanagerutil.h2
-rw-r--r--src/vamp/vampanalyser.cpp2
-rw-r--r--src/widget/knobeventhandler.h4
-rw-r--r--src/widget/wbasewidget.cpp24
-rw-r--r--src/widget/wbasewidget.h2
-rw-r--r--src/widget/wdisplay.cpp14
-rw-r--r--src/widget/wdisplay.h2
-rw-r--r--src/widget/wknobcomposed.cpp12
-rw-r--r--src/widget/wknobcomposed.h2
-rw-r--r--src/widget/wpixmapstore.cpp49
-rw-r--r--src/widget/wpixmapstore.h16
-rw-r--r--src/widget/wpushbutton.cpp13
-rw-r--r--src/widget/wpushbutton.h2
-rw-r--r--src/widget/wslidercomposed.cpp8
-rw-r--r--src/widget/wslidercomposed.h1
-rw-r--r--src/widget/wstatuslight.cpp45
-rw-r--r--src/widget/wstatuslight.h8
-rw-r--r--src/widget/wvumeter.cpp6
-rw-r--r--src/widget/wwidgetgroup.cpp9
-rw-r--r--src/widget/wwidgetgroup.h2
25 files changed, 205 insertions, 63 deletions
diff --git a/src/engine/engineaux.cpp b/src/engine/engineaux.cpp
index 59b296bbc0..5da2b93993 100644
--- a/src/engine/engineaux.cpp
+++ b/src/engine/engineaux.cpp
@@ -48,7 +48,7 @@ bool EngineAux::isActive() {
}
void EngineAux::onInputConfigured(AudioInput input) {
- if (input.getType() != AudioPath::AUXILLIARY) {
+ if (input.getType() != AudioPath::AUXILIARY) {
// This is an error!
qDebug() << "WARNING: EngineAux connected to AudioInput for a non-passthrough type!";
return;
@@ -58,7 +58,7 @@ void EngineAux::onInputConfigured(AudioInput input) {
}
void EngineAux::onInputUnconfigured(AudioInput input) {
- if (input.getType() != AudioPath::AUXILLIARY) {
+ if (input.getType() != AudioPath::AUXILIARY) {
// This is an error!
qDebug() << "WARNING: EngineAux connected to AudioInput for a non-passthrough type!";
return;
@@ -73,9 +73,9 @@ void EngineAux::receiveBuffer(AudioInput input, const CSAMPLE* pBuffer,
return;
}
- if (input.getType() != AudioPath::AUXILLIARY) {
+ if (input.getType() != AudioPath::AUXILIARY) {
// This is an error!
- qDebug() << "WARNING: EngineAux received an AudioInput for a non-auxilliary type!";
+ qDebug() << "WARNING: EngineAux received an AudioInput for a non-auxiliary type!";
return;
}
diff --git a/src/mixxx.cpp b/src/mixxx.cpp
index 5cf407b975..8a7e5f9a92 100644
--- a/src/mixxx.cpp
+++ b/src/mixxx.cpp
@@ -142,15 +142,15 @@ MixxxMainWindow::MixxxMainWindow(QApplication* pApp, const CmdlineArgs& args)
m_pEngine->addChannel(pMicrophone);
m_pSoundManager->registerInput(micInput, pMicrophone);
- EngineAux* pAux1 = new EngineAux("[Auxilliary1]");
+ EngineAux* pAux1 = new EngineAux("[Auxiliary1]");
// What should channelbase be?
- AudioInput auxInput1 = AudioInput(AudioPath::AUXILLIARY, 0, 0, 0);
+ AudioInput auxInput1 = AudioInput(AudioPath::AUXILIARY, 0, 0, 0);
m_pEngine->addChannel(pAux1);
m_pSoundManager->registerInput(auxInput1, pAux1);
- EngineAux* pAux2 = new EngineAux("[Auxilliary2]");
+ EngineAux* pAux2 = new EngineAux("[Auxiliary2]");
// What should channelbase be?
- AudioInput auxInput2 = AudioInput(AudioPath::AUXILLIARY, 0, 0, 1);
+ AudioInput auxInput2 = AudioInput(AudioPath::AUXILIARY, 0, 0, 1);
m_pEngine->addChannel(pAux2);
m_pSoundManager->registerInput(auxInput2, pAux2);
diff --git a/src/skin/skincontext.cpp b/src/skin/skincontext.cpp
index bc6b66dd03..8abd0c507e 100644
--- a/src/skin/skincontext.cpp
+++ b/src/skin/skincontext.cpp
@@ -141,6 +141,16 @@ bool SkinContext::selectAttributeBool(const QDomElement& element,
return defaultValue;
}
+QString SkinContext::selectAttributeString(const QDomElement& element,
+ const QString& attributeName,
+ QString defaultValue) const {
+ if (element.hasAttribute(attributeName)) {
+ QString stringValue = element.attribute(attributeName);
+ return stringValue == "" ? defaultValue :stringValue;
+ }
+ return defaultValue;
+}
+
QString SkinContext::variableNodeToText(const QDomElement& variableNode) const {
if (variableNode.hasAttribute("expression")) {
QScriptValue result = m_scriptEngine.evaluate(
diff --git a/src/skin/skincontext.h b/src/skin/skincontext.h
index fb4d42e622..72b68a3b4b 100644
--- a/src/skin/skincontext.h
+++ b/src/skin/skincontext.h
@@ -55,6 +55,9 @@ class SkinContext {
bool selectAttributeBool(const QDomElement& element,
const QString& attributeName,
bool defaultValue) const;
+ QString selectAttributeString(const QDomElement& element,
+ const QString& attributeName,
+ QString defaultValue) const;
QString nodeToString(const QDomNode& node) const;
private:
diff --git a/src/soundmanagerutil.cpp b/src/soundmanagerutil.cpp
index 3c2d64f95b..183fc0c350 100644
--- a/src/soundmanagerutil.cpp
+++ b/src/soundmanagerutil.cpp
@@ -162,8 +162,8 @@ QString AudioPath::getStringFromType(AudioPathType type) {
return QString::fromAscii("Vinyl Control");
case MICROPHONE:
return QString::fromAscii("Microphone");
- case AUXILLIARY:
- return QString::fromAscii("Auxilliary");
+ case AUXILIARY:
+ return QString::fromAscii("Auxiliary");
}
return QString::fromAscii("Unknown path type %1").arg(type);
}
@@ -201,8 +201,8 @@ QString AudioPath::getTrStringFromType(AudioPathType type, unsigned char index)
QString::number(index + 1));
case MICROPHONE:
return QObject::tr("Microphone");
- case AUXILLIARY:
- return QString("%1 %2").arg(QObject::tr("Auxilliary"),
+ case AUXILIARY:
+ return QString("%1 %2").arg(QObject::tr("Auxiliary"),
QString::number(index + 1));
}
return QObject::tr("Unknown path type %1").arg(type);
@@ -226,8 +226,8 @@ AudioPathType AudioPath::getTypeFromString(QString string) {
return AudioPath::VINYLCONTROL;
} else if (string == AudioPath::getStringFromType(AudioPath::MICROPHONE).toLower()) {
return AudioPath::MICROPHONE;
- } else if (string == AudioPath::getStringFromType(AudioPath::AUXILLIARY).toLower()) {
- return AudioPath::AUXILLIARY;
+ } else if (string == AudioPath::getStringFromType(AudioPath::AUXILIARY).toLower()) {
+ return AudioPath::AUXILIARY;
} else {
return AudioPath::INVALID;
}
@@ -242,7 +242,7 @@ bool AudioPath::isIndexed(AudioPathType type) {
case BUS:
case DECK:
case VINYLCONTROL:
- case AUXILLIARY:
+ case AUXILIARY:
return true;
case MICROPHONE:
default:
@@ -421,7 +421,7 @@ QList<AudioPathType> AudioInput::getSupportedTypes() {
// (prefs, etc), minimal ifdefs :) -- bkgood
types.append(VINYLCONTROL);
#endif
- types.append(AUXILLIARY);
+ types.append(AUXILIARY);
types.append(MICROPHONE);
return types;
}
diff --git a/src/soundmanagerutil.h b/src/soundmanagerutil.h
index faa95c4e60..47dc396e09 100644
--- a/src/soundmanagerutil.h
+++ b/src/soundmanagerutil.h
@@ -60,7 +60,7 @@ public:
DECK,
VINYLCONTROL,
MICROPHONE,
- AUXILLIARY,
+ AUXILIARY,
INVALID, // if this isn't last bad things will happen -bkgood
};
AudioPath(unsigned char channelBase, unsigned char channels);
diff --git a/src/vamp/vampanalyser.cpp b/src/vamp/vampanalyser.cpp
index cb019f3f78..ce8580718c 100644
--- a/src/vamp/vampanalyser.cpp
+++ b/src/vamp/vampanalyser.cpp
@@ -93,7 +93,7 @@ void VampAnalyser::initializePluginPaths() {
pathElements << developer32Root.absolutePath();
}
QDir developer64Root(applicationPath);
- if (developer64Root.cd("lin32_build") && developer64Root.cd("vamp-plugins")) {
+ if (developer64Root.cd("lin64_build") && developer64Root.cd("vamp-plugins")) {
pathElements << developer64Root.absolutePath();
}
#endif
diff --git a/src/widget/knobeventhandler.h b/src/widget/knobeventhandler.h
index 99a9140426..d457af5442 100644
--- a/src/widget/knobeventhandler.h
+++ b/src/widget/knobeventhandler.h
@@ -42,7 +42,7 @@ class KnobEventHandler {
if (!m_bRightButtonPressed) {
QCursor::setPos(m_startPos);
double value = valueFromMouseEvent(pWidget, e);
- pWidget->setControlParameter(value);
+ pWidget->setControlParameterDown(value);
pWidget->update();
}
}
@@ -71,7 +71,7 @@ class KnobEventHandler {
QCursor::setPos(m_startPos);
QApplication::restoreOverrideCursor();
value = valueFromMouseEvent(pWidget, e);
- pWidget->setControlParameter(value);
+ pWidget->setControlParameterUp(value);
pWidget->update();
break;
case Qt::RightButton:
diff --git a/src/widget/wbasewidget.cpp b/src/widget/wbasewidget.cpp
index c2efac0b2e..081863f47d 100644
--- a/src/widget/wbasewidget.cpp
+++ b/src/widget/wbasewidget.cpp
@@ -97,6 +97,30 @@ void WBaseWidget::setControlParameter(double v) {
}
}
+void WBaseWidget::setControlParameterUp(double v) {
+ foreach (ControlParameterWidgetConnection* pControlConnection, m_leftConnections) {
+ pControlConnection->setControlParameterUp(v);
+ }
+ foreach (ControlParameterWidgetConnection* pControlConnection, m_rightConnections) {
+ pControlConnection->setControlParameterUp(v);
+ }
+ foreach (ControlParameterWidgetConnection* pControlConnection, m_connections) {
+ pControlConnection->setControlParameterUp(v);
+ }
+}
+
+void WBaseWidget::setControlParameterDown(double v) {
+ foreach (ControlParameterWidgetConnection* pControlConnection, m_leftConnections) {
+ pControlConnection->setControlParameterDown(v);
+ }
+ foreach (ControlParameterWidgetConnection* pControlConnection, m_rightConnections) {
+ pControlConnection->setControlParameterDown(v);
+ }
+ foreach (ControlParameterWidgetConnection* pControlConnection, m_connections) {
+ pControlConnection->setControlParameterDown(v);
+ }
+}
+
void WBaseWidget::setControlParameterLeftDown(double v) {
if (!m_leftConnections.isEmpty()) {
foreach (ControlParameterWidgetConnection* pControlConnection, m_leftConnections) {
diff --git a/src/widget/wbasewidget.h b/src/widget/wbasewidget.h
index 051b23a88a..18951178c7 100644
--- a/src/widget/wbasewidget.h
+++ b/src/widget/wbasewidget.h
@@ -51,6 +51,8 @@ class WBaseWidget {
void resetControlParameter();
void setControlParameter(double v);
+ void setControlParameterDown(double v);
+ void setControlParameterUp(double v);
void setControlParameterLeftDown(double v);
void setControlParameterLeftUp(double v);
void setControlParameterRightDown(double v);
diff --git a/src/widget/wdisplay.cpp b/src/widget/wdisplay.cpp
index 40089dbd31..81177b3d62 100644
--- a/src/widget/wdisplay.cpp
+++ b/src/widget/wdisplay.cpp
@@ -39,8 +39,10 @@ WDisplay::~WDisplay() {
void WDisplay::setup(QDomNode node, const SkinContext& context) {
// Set background pixmap if available
if (context.hasNode(node, "BackPath")) {
- setPixmapBackground(context.getSkinPath(
- context.selectString(node, "BackPath")));
+ QString mode_str = context.selectAttributeString(
+ context.selectElement(node, "BackPath"), "scalemode", "TILE");
+ setPixmapBackground(context.getSkinPath(context.selectString(node, "BackPath")),
+ Paintable::DrawModeFromString(mode_str));
}
// Number of states
@@ -83,8 +85,9 @@ void WDisplay::resetPositions() {
m_disabledPixmaps.resize(0);
}
-void WDisplay::setPixmapBackground(const QString& filename) {
- m_pPixmapBack = WPixmapStore::getPaintable(filename);
+void WDisplay::setPixmapBackground(const QString& filename,
+ Paintable::DrawMode mode) {
+ m_pPixmapBack = WPixmapStore::getPaintable(filename, mode);
if (m_pPixmapBack.isNull() || m_pPixmapBack->isNull()) {
qDebug() << metaObject()->className()
<< "Error loading background pixmap:" << filename;
@@ -97,7 +100,8 @@ void WDisplay::setPixmap(QVector<PaintablePointer>* pPixmaps, int iPos,
return;
}
- PaintablePointer pPixmap = WPixmapStore::getPaintable(filename);
+ PaintablePointer pPixmap = WPixmapStore::getPaintable(filename,
+ Paintable::TILE);
if (pPixmap.isNull() || pPixmap->isNull()) {
qDebug() << metaObject()->className()
diff --git a/src/widget/wdisplay.h b/src/widget/wdisplay.h
index 9b70f1273a..5e27f53fa3 100644
--- a/src/widget/wdisplay.h
+++ b/src/widget/wdisplay.h
@@ -46,7 +46,7 @@ class WDisplay : public WWidget {
void setPixmap(QVector<PaintablePointer>* pPixmaps, int iPos,
const QString& filename);
- void setPixmapBackground(const QString& filename);
+ void setPixmapBackground(const QString& filename, Paintable::DrawMode mode);
void setPositions(int iNoPos);
diff --git a/src/widget/wknobcomposed.cpp b/src/widget/wknobcomposed.cpp
index 7f07093ca4..6a449dd46b 100644
--- a/src/widget/wknobcomposed.cpp
+++ b/src/widget/wknobcomposed.cpp
@@ -17,7 +17,10 @@ void WKnobComposed::setup(QDomNode node, const SkinContext& context) {
// Set background pixmap if available
if (context.hasNode(node, "BackPath")) {
- setPixmapBackground(context.getSkinPath(context.selectString(node, "BackPath")));
+ QString mode_str = context.selectAttributeString(
+ context.selectElement(node, "BackPath"), "scalemode", "TILE");
+ setPixmapBackground(context.getSkinPath(context.selectString(node, "BackPath")),
+ Paintable::DrawModeFromString(mode_str));
}
// Set background pixmap if available
@@ -39,8 +42,9 @@ void WKnobComposed::clear() {
m_pKnob.clear();
}
-void WKnobComposed::setPixmapBackground(const QString& filename) {
- m_pPixmapBack = WPixmapStore::getPaintable(filename);
+void WKnobComposed::setPixmapBackground(const QString& filename,
+ Paintable::DrawMode mode) {
+ m_pPixmapBack = WPixmapStore::getPaintable(filename, mode);
if (m_pPixmapBack.isNull() || m_pPixmapBack->isNull()) {
qDebug() << metaObject()->className()
<< "Error loading background pixmap:" << filename;
@@ -48,7 +52,7 @@ void WKnobComposed::setPixmapBackground(const QString& filename) {
}
void WKnobComposed::setPixmapKnob(const QString& filename) {
- m_pKnob = WPixmapStore::getPaintable(filename);
+ m_pKnob = WPixmapStore::getPaintable(filename, Paintable::STRETCH);
if (m_pKnob.isNull() || m_pKnob->isNull()) {
qDebug() << metaObject()->className()
<< "Error loading knob pixmap:" << filename;
diff --git a/src/widget/wknobcomposed.h b/src/widget/wknobcomposed.h
index 280957d19d..e941ad150a 100644
--- a/src/widget/wknobcomposed.h
+++ b/src/widget/wknobcomposed.h
@@ -29,7 +29,7 @@ class WKnobComposed : public WWidget {
private:
void clear();
- void setPixmapBackground(const QString& filename);
+ void setPixmapBackground(const QString& filename, Paintable::DrawMode mode);
void setPixmapKnob(const QString& filename);
PaintablePointer m_pKnob;
diff --git a/src/widget/wpixmapstore.cpp b/src/widget/wpixmapstore.cpp
index cf3985a53b..63b1839833 100644
--- a/src/widget/wpixmapstore.cpp
+++ b/src/widget/wpixmapstore.cpp
@@ -17,13 +17,25 @@
#include "widget/wpixmapstore.h"
+#include <QString>
#include <QtDebug>
// static
QHash<QString, WeakPaintablePointer> WPixmapStore::m_paintableCache;
QSharedPointer<ImgSource> WPixmapStore::m_loader = QSharedPointer<ImgSource>();
-Paintable::Paintable(QImage* pImage) {
+Paintable::DrawMode Paintable::DrawModeFromString(QString str) {
+ if (str.toUpper() == "TILE") {
+ return TILE;
+ } else if (str.toUpper() == "STRETCH") {
+ return STRETCH;
+ }
+ qWarning() << "Unknown string for Paintable drawing mode " << str << ", using TILE";
+ return TILE;
+}
+
+Paintable::Paintable(QImage* pImage, DrawMode mode)
+ : m_draw_mode(mode) {
#if QT_VERSION >= 0x040700
m_pPixmap.reset(new QPixmap());
m_pPixmap->convertFromImage(*pImage);
@@ -33,9 +45,24 @@ Paintable::Paintable(QImage* pImage) {
delete pImage;
}
-Paintable::Paintable(const QString& fileName) {
+Paintable::Paintable(const QString& fileName, DrawMode mode)
+ : m_draw_mode(mode) {
if (fileName.endsWith(".svg", Qt::CaseInsensitive)) {
- m_pSvg.reset(new QSvgRenderer(fileName));
+ if (mode == STRETCH) {
+ m_pSvg.reset(new QSvgRenderer(fileName));
+ } else if (mode == TILE) {
+ // The SVG renderer doesn't directly support tiling, so we render
+ // it to a pixmap which will then get tiled.
+ QSvgRenderer renderer(fileName);
+ QImage copy_buffer(renderer.defaultSize(), QImage::Format_ARGB32);
+ copy_buffer.fill(0x00000000); // Transparent black.
+ m_pPixmap.reset(new QPixmap(renderer.defaultSize()));
+ QPainter painter(&copy_buffer);
+ renderer.render(&painter);
+ m_pPixmap->convertFromImage(copy_buffer);
+ } else {
+ qWarning() << "Error, unknown drawing mode!";
+ }
} else {
m_pPixmap.reset(new QPixmap(fileName));
}
@@ -85,8 +112,15 @@ void Paintable::draw(const QRectF& targetRect, QPainter* pPainter) {
}
if (!m_pPixmap.isNull() && !m_pPixmap->isNull()) {
- pPainter->drawPixmap(targetRect, *m_pPixmap, m_pPixmap->rect());
+ if (m_draw_mode == Paintable::STRETCH) {
+ pPainter->drawPixmap(targetRect, *m_pPixmap, m_pPixmap->rect());
+ } else if (m_draw_mode == Paintable::TILE) {
+ pPainter->drawTiledPixmap(targetRect, *m_pPixmap, QPoint(0,0));
+ }
} else if (!m_pSvg.isNull() && m_pSvg->isValid()) {
+ if (m_draw_mode == Paintable::TILE) {
+ qWarning() << "Tiled SVG should have been rendered to pixmap!";
+ }
m_pSvg->render(pPainter, targetRect);
}
}
@@ -143,7 +177,8 @@ void Paintable::resizeSvgPixmap(const QRectF& targetRect,
}
// static
-PaintablePointer WPixmapStore::getPaintable(const QString& fileName) {
+PaintablePointer WPixmapStore::getPaintable(const QString& fileName,
+ Paintable::DrawMode mode) {
// See if we have a cached value for the pixmap.
PaintablePointer pPaintable = m_paintableCache.value(fileName, PaintablePointer());
if (pPaintable) {
@@ -155,9 +190,9 @@ PaintablePointer WPixmapStore::getPaintable(const QString& fileName) {
if (m_loader) {
QImage* pImage = m_loader->getImage(fileName);
- pPaintable = PaintablePointer(new Paintable(pImage));
+ pPaintable = PaintablePointer(new Paintable(pImage, mode));
} else {
- pPaintable = PaintablePointer(new Paintable(fileName));
+ pPaintable = PaintablePointer(new Paintable(fileName, mode));
}
if (pPaintable.isNull() || pPaintable->isNull()) {
diff --git a/src/widget/wpixmapstore.h b/src/widget/wpixmapstore.h
index 8b8207e3e1..6744a307b2 100644
--- a/src/widget/wpixmapstore.h
+++ b/src/widget/wpixmapstore.h
@@ -29,13 +29,20 @@
#include "skin/imgsource.h"
+class QString;
+
// Wrapper around QImage and QSvgRenderer to support rendering SVG images in
// high fidelity.
class Paintable {
public:
+ enum DrawMode {
+ STRETCH,
+ TILE
+ };
+
// Takes ownership of QImage.
- Paintable(QImage* pImage);
- Paintable(const QString& fileName);
+ Paintable(QImage* pImage, DrawMode mode);
+ Paintable(const QString& fileName, DrawMode mode);
QSize size() const;
int width() const;
@@ -48,6 +55,7 @@ class Paintable {
void draw(const QRectF& targetRect, QPainter* pPainter,
const QRectF& sourceRect);
bool isNull() const;
+ static DrawMode DrawModeFromString(QString str);
private:
void resizeSvgPixmap(const QRectF& targetRect, const QRectF& sourceRect);
@@ -55,6 +63,7 @@ class Paintable {
QScopedPointer<QPixmap> m_pPixmap;
QScopedPointer<QSvgRenderer> m_pSvg;
QScopedPointer<QPixmap> m_pPixmapSvg;
+ DrawMode m_draw_mode;
};
typedef QSharedPointer<Paintable> PaintablePointer;
@@ -62,7 +71,8 @@ typedef QWeakPointer<Paintable> WeakPaintablePointer;
class WPixmapStore {
public:
- static PaintablePointer getPaintable(const QString& fileName);
+ static PaintablePointer getPaintable(const QString& fileName,
+ Paintable::DrawMode mode);
static QPixmap* getPixmapNoCache(const QString& fileName);
static void setLoader(QSharedPointer<ImgSource> ld);
diff --git a/src/widget/wpushbutton.cpp b/src/widget/wpushbutton.cpp
index 23b78e7052..cdbfae366d 100644
--- a/src/widget/wpushbutton.cpp
+++ b/src/widget/wpushbutton.cpp
@@ -58,7 +58,10 @@ void WPushButton::setup(QDomNode node, const SkinContext& context) {
// Set background pixmap if available
if (context.hasNode(node, "BackPath")) {
- setPixmapBackground(context.getSkinPath(context.selectString(node, "BackPath")));
+ QString mode_str = context.selectAttributeString(
+ context.selectElement(node, "BackPath"), "scalemode", "TILE");
+ setPixmapBackground(context.getSkinPath(context.selectString(node, "BackPath")),
+ Paintable::DrawModeFromString(mode_str));
}
// Load pixmaps for associated states
@@ -188,7 +191,8 @@ void WPushButton::setPixmap(int iState, bool bPressed, const QString &filename)
return;
}
- PaintablePointer pPixmap = WPixmapStore::getPaintable(filename);
+ PaintablePointer pPixmap = WPixmapStore::getPaintable(filename,
+ Paintable::STRETCH);
if (pPixmap.isNull() || pPixmap->isNull()) {
qDebug() << "WPushButton: Error loading pixmap:" << filename;
@@ -199,9 +203,10 @@ void WPushButton::setPixmap(int iState, bool bPressed, const QString &filename)
pixmaps.replace(iState, pPixmap);
}
-void WPushButton::setPixmapBackground(const QString &filename) {
+void WPushButton::setPixmapBackground(const QString &filename,
+ Paintable::DrawMode mode) {
// Load background pixmap
- m_pPixmapBack = WPixmapStore::getPaintable(filename);
+ m_pPixmapBack = WPixmapStore::getPaintable(filename, mode);
if (m_pPixmapBack.isNull() || m_pPixmapBack->isNull()) {
qDebug() << "WPushButton: Error loading background pixmap:" << filename;
}
diff --git a/src/widget/wpushbutton.h b/src/widget/wpushbutton.h
index 52aeead901..f74a24a42b 100644
--- a/src/widget/wpushbutton.h
+++ b/src/widget/wpushbutton.h
@@ -70,7 +70,7 @@ class WPushButton : public WWidget {
// Associates a background pixmap with the widget. This is only needed if
// the button pixmaps contains alpha channel values.
- void setPixmapBackground(const QString &filename);
+ void setPixmapBackground(const QString &filename, Paintable::DrawMode mode);
// True, if the button is currently pressed
bool m_bPressed;
diff --git a/src/widget/wslidercomposed.cpp b/src/widget/wslidercomposed.cpp
index 4672c9f3d6..64423ee65e 100644
--- a/src/widget/wslidercomposed.cpp
+++ b/src/widget/wslidercomposed.cpp
@@ -65,7 +65,8 @@ void WSliderComposed::setup(QDomNode node, const SkinContext& context) {
}
void WSliderComposed::setSliderPixmap(const QString& filenameSlider) {
- m_pSlider = WPixmapStore::getPaintable(filenameSlider);
+ m_pSlider = WPixmapStore::getPaintable(filenameSlider,
+ Paintable::STRETCH);
if (!m_pSlider) {
qDebug() << "WSliderComposed: Error loading slider pixmap:" << filenameSlider;
} else {
@@ -76,7 +77,8 @@ void WSliderComposed::setSliderPixmap(const QString& filenameSlider) {
void WSliderComposed::setHandlePixmap(bool bHorizontal, const QString& filenameHandle) {
m_bHorizontal = bHorizontal;
- m_pHandle = WPixmapStore::getPaintable(filenameHandle);
+ m_pHandle = WPixmapStore::getPaintable(filenameHandle,
+ Paintable::STRETCH);
if (!m_pHandle) {
qDebug() << "WSliderComposed: Error loading handle pixmap:" << filenameHandle;
} else {
@@ -127,7 +129,7 @@ void WSliderComposed::mouseMoveEvent(QMouseEvent * e) {
// Emit valueChanged signal
if (m_bEventWhileDrag) {
- setControlParameter(newValue);
+ setControlParameterUp(newValue);
}
// Update display
diff --git a/src/widget/wslidercomposed.h b/src/widget/wslidercomposed.h
index c42de7afda..0ca1f8b615 100644
--- a/src/widget/wslidercomposed.h
+++ b/src/widget/wslidercomposed.h
@@ -45,6 +45,7 @@ class WSliderComposed : public WWidget {
void setSliderPixmap(const QString& filenameSlider);
void setHandlePixmap(bool bHorizontal, const QString& filenameHandle);
inline bool isHorizontal() const { return m_bHorizontal; };
+
public slots:
void onConnectedControlValueChanged(double);
void fillDebugTooltip(QStringList* debug);
diff --git a/src/widget/wstatuslight.cpp b/src/widget/wstatuslight.cpp
index 829ecd8636..0585826685 100644
--- a/src/widget/wstatuslight.cpp
+++ b/src/widget/wstatuslight.cpp
@@ -47,6 +47,16 @@ void WStatusLight::setNoPos(int iNoPos) {
m_pixmaps.resize(iNoPos);
}
+WStatusLight::SizeMode WStatusLight::SizeModeFromString(QString str) {
+ if (str.toUpper() == "FIXED" ) {
+ return FIXED;
+ } else if (str.toUpper() == "RESIZE") {
+ return RESIZE;
+ }
+ qWarning() << "Unknown status light size mode " << str << ", using FIXED";
+ return FIXED;
+}
+
void WStatusLight::setup(QDomNode node, const SkinContext& context) {
// Number of states. Add one to account for the background.
setNoPos(context.selectInt(node, "NumberPos") + 1);
@@ -56,29 +66,50 @@ void WStatusLight::setup(QDomNode node, const SkinContext& context) {
// Accept either PathStatusLight or PathStatusLight1 for value 1,
QString nodeName = QString("PathStatusLight%1").arg(i);
if (context.hasNode(node, nodeName)) {
- setPixmap(i, context.getSkinPath(context.selectString(node, nodeName)));
+ QString mode = context.selectAttributeString(
+ context.selectElement(node, nodeName), "sizemode", "FIXED");
+ setPixmap(i, context.getSkinPath(context.selectString(node, nodeName)),
+ SizeModeFromString(mode));
} else if (i == 0 && context.hasNode(node, "PathBack")) {
- setPixmap(i, context.getSkinPath(context.selectString(node, "PathBack")));
+ QString mode = context.selectAttributeString(
+ context.selectElement(node, "PathBack"), "sizemode", "FIXED");
+ setPixmap(i, context.getSkinPath(context.selectString(node, "PathBack")),
+ SizeModeFromString(mode));
} else if (i == 1 && context.hasNode(node, "PathStatusLight")) {
- setPixmap(i, context.getSkinPath(context.selectString(node, "PathStatusLight")));
+ QString mode = context.selectAttributeString(
+ context.selectElement(node, "PathStatusLight"), "sizemode", "FIXED");
+ setPixmap(i, context.getSkinPath(context.selectString(node, "PathStatusLight")),
+ SizeModeFromString(mode));
} else {
m_pixmaps[i].clear();
}
}
}
-void WStatusLight::setPixmap(int iState, const QString& filename) {
+void WStatusLight::setPixmap(int iState, const QString& filename, SizeMode mode) {
if (iState < 0 || iState >= m_pixmaps.size()) {
return;
}
- PaintablePointer pPixmap = WPixmapStore::getPaintable(filename);
+ PaintablePointer pPixmap = WPixmapStore::getPaintable(filename,
+ Paintable::STRETCH);
if (!pPixmap.isNull() && !pPixmap->isNull()) {
m_pixmaps[iState] = pPixmap;
- // Set size of widget equal to pixmap size
- setFixedSize(pPixmap->size());
+ switch (mode) {
+ case RESIZE:
+ // Allow the pixmap to stretch or tile.
+ setBaseSize(pPixmap->size());
+ break;
+ case FIXED:
+ // Set size of widget equal to pixmap size
+ setFixedSize(pPixmap->size());
+ break;
+ default:
+ setFixedSize(pPixmap->size());
+ break;
+ }
} else {
qDebug() << "WStatusLight: Error loading pixmap:" << filename << iState;
m_pixmaps[iState].clear();
diff --git a/src/widget/wstatuslight.h b/src/widget/wstatuslight.h
index 721dd1a520..6f860b59eb 100644
--- a/src/widget/wstatuslight.h
+++ b/