Theming of disabled knobs (#5549)
Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com> Co-authored-by: Dominic Clark <mrdomclark@gmail.com>
This commit is contained in:
@@ -11,6 +11,11 @@ QMdiArea {
|
||||
background-image: url(resources:background_artwork.png);
|
||||
}
|
||||
|
||||
Knob {
|
||||
qproperty-lineInactiveColor: rgb(120, 120, 120);
|
||||
qproperty-arcInactiveColor: rgba(120, 120, 120, 70);
|
||||
}
|
||||
|
||||
AutomationEditor {
|
||||
background-color: rgb(0, 0, 0);
|
||||
color: #e0e0e0;
|
||||
|
||||
@@ -40,6 +40,11 @@ QMdiArea {
|
||||
background-color: #111314;
|
||||
}
|
||||
|
||||
Knob {
|
||||
qproperty-lineInactiveColor: rgb(120, 120, 120);
|
||||
qproperty-arcInactiveColor: rgba(120, 120, 120, 70);
|
||||
}
|
||||
|
||||
AutomationEditor {
|
||||
color: #ffffff;
|
||||
background-color: #141616;
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
#ifndef KNOB_H
|
||||
#define KNOB_H
|
||||
|
||||
#include <memory>
|
||||
#include <QPixmap>
|
||||
#include <QWidget>
|
||||
#include <QtCore/QPoint>
|
||||
|
||||
@@ -41,6 +43,7 @@ enum knobTypes
|
||||
} ;
|
||||
|
||||
|
||||
void convertPixmapToGrayScale(QPixmap &pixMap);
|
||||
|
||||
class LMMS_EXPORT Knob : public QWidget, public FloatModelView
|
||||
{
|
||||
@@ -58,8 +61,12 @@ class LMMS_EXPORT Knob : public QWidget, public FloatModelView
|
||||
// Unfortunately, the gradient syntax doesn't create our gradient
|
||||
// correctly so we need to do this:
|
||||
Q_PROPERTY(QColor outerColor READ outerColor WRITE setOuterColor)
|
||||
Q_PROPERTY(QColor lineColor READ lineColor WRITE setlineColor)
|
||||
Q_PROPERTY(QColor arcColor READ arcColor WRITE setarcColor)
|
||||
|
||||
Q_PROPERTY(QColor lineActiveColor MEMBER m_lineActiveColor)
|
||||
Q_PROPERTY(QColor lineInactiveColor MEMBER m_lineInactiveColor)
|
||||
Q_PROPERTY(QColor arcActiveColor MEMBER m_arcActiveColor)
|
||||
Q_PROPERTY(QColor arcInactiveColor MEMBER m_arcInactiveColor)
|
||||
|
||||
mapPropertyFromModel(bool,isVolumeKnob,setVolumeKnob,m_volumeKnob);
|
||||
mapPropertyFromModel(float,volumeRatio,setVolumeRatio,m_volumeRatio);
|
||||
|
||||
@@ -74,7 +81,6 @@ public:
|
||||
Knob( knobTypes _knob_num, QWidget * _parent = NULL, const QString & _name = QString() );
|
||||
Knob( QWidget * _parent = NULL, const QString & _name = QString() ); //!< default ctor
|
||||
Knob( const Knob& other ) = delete;
|
||||
virtual ~Knob();
|
||||
|
||||
// TODO: remove
|
||||
inline void setHintText( const QString & _txt_before,
|
||||
@@ -108,10 +114,6 @@ public:
|
||||
|
||||
QColor outerColor() const;
|
||||
void setOuterColor( const QColor & c );
|
||||
QColor lineColor() const;
|
||||
void setlineColor( const QColor & c );
|
||||
QColor arcColor() const;
|
||||
void setarcColor( const QColor & c );
|
||||
|
||||
QColor textColor() const;
|
||||
void setTextColor( const QColor & c );
|
||||
@@ -134,6 +136,7 @@ protected:
|
||||
void mouseDoubleClickEvent( QMouseEvent * _me ) override;
|
||||
void paintEvent( QPaintEvent * _me ) override;
|
||||
void wheelEvent( QWheelEvent * _me ) override;
|
||||
void changeEvent(QEvent * ev) override;
|
||||
|
||||
virtual float getValue( const QPoint & _p );
|
||||
|
||||
@@ -169,7 +172,7 @@ private:
|
||||
|
||||
QString m_label;
|
||||
|
||||
QPixmap * m_knobPixmap;
|
||||
std::unique_ptr<QPixmap> m_knobPixmap;
|
||||
BoolModel m_volumeKnob;
|
||||
FloatModel m_volumeRatio;
|
||||
|
||||
@@ -187,8 +190,11 @@ private:
|
||||
float m_outerRadius;
|
||||
float m_lineWidth;
|
||||
QColor m_outerColor;
|
||||
QColor m_lineColor; //!< unused yet
|
||||
QColor m_arcColor; //!< unused yet
|
||||
|
||||
QColor m_lineActiveColor;
|
||||
QColor m_lineInactiveColor;
|
||||
QColor m_arcActiveColor;
|
||||
QColor m_arcInactiveColor;
|
||||
|
||||
QColor m_textColor;
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <memory>
|
||||
#include <QApplication>
|
||||
#include <QBitmap>
|
||||
#include <QFontMetrics>
|
||||
@@ -46,6 +47,7 @@
|
||||
#include "MainWindow.h"
|
||||
#include "ProjectJournal.h"
|
||||
#include "Song.h"
|
||||
#include "stdshims.h"
|
||||
#include "StringPairDrag.h"
|
||||
#include "TextFloat.h"
|
||||
|
||||
@@ -58,7 +60,6 @@ Knob::Knob( knobTypes _knob_num, QWidget * _parent, const QString & _name ) :
|
||||
QWidget( _parent ),
|
||||
FloatModelView( new FloatModel( 0, 0, 0, 1, NULL, _name, true ), this ),
|
||||
m_label( "" ),
|
||||
m_knobPixmap( NULL ),
|
||||
m_volumeKnob( false ),
|
||||
m_volumeRatio( 100.0, 0.0, 1000000.0 ),
|
||||
m_buttonPressed( false ),
|
||||
@@ -105,10 +106,16 @@ void Knob::initUi( const QString & _name )
|
||||
case knobSmall_17:
|
||||
case knobBright_26:
|
||||
case knobDark_28:
|
||||
setlineColor(QApplication::palette().color( QPalette::Active, QPalette::WindowText ));
|
||||
m_lineActiveColor = QApplication::palette().color(QPalette::Active, QPalette::WindowText);
|
||||
m_arcActiveColor = QColor(QApplication::palette().color(
|
||||
QPalette::Active, QPalette::WindowText));
|
||||
m_arcActiveColor.setAlpha(70);
|
||||
break;
|
||||
case knobVintage_32:
|
||||
setlineColor(QApplication::palette().color( QPalette::Active, QPalette::Shadow ));
|
||||
m_lineActiveColor = QApplication::palette().color(QPalette::Active, QPalette::Shadow);
|
||||
m_arcActiveColor = QColor(QApplication::palette().color(
|
||||
QPalette::Active, QPalette::Shadow));
|
||||
m_arcActiveColor.setAlpha(70);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -144,8 +151,11 @@ void Knob::onKnobNumUpdated()
|
||||
}
|
||||
|
||||
// If knobFilename is still empty here we should get the fallback pixmap of size 1x1
|
||||
m_knobPixmap = new QPixmap( embed::getIconPixmap( knobFilename.toUtf8().constData() ) );
|
||||
|
||||
m_knobPixmap = make_unique<QPixmap>(QPixmap(embed::getIconPixmap(knobFilename.toUtf8().constData())));
|
||||
if (!this->isEnabled())
|
||||
{
|
||||
convertPixmapToGrayScale(*m_knobPixmap.get());
|
||||
}
|
||||
setFixedSize( m_knobPixmap->width(), m_knobPixmap->height() );
|
||||
}
|
||||
}
|
||||
@@ -153,17 +163,6 @@ void Knob::onKnobNumUpdated()
|
||||
|
||||
|
||||
|
||||
Knob::~Knob()
|
||||
{
|
||||
if( m_knobPixmap )
|
||||
{
|
||||
delete m_knobPixmap;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void Knob::setLabel( const QString & txt )
|
||||
{
|
||||
m_label = txt;
|
||||
@@ -308,35 +307,6 @@ void Knob::setOuterColor( const QColor & c )
|
||||
|
||||
|
||||
|
||||
QColor Knob::lineColor() const
|
||||
{
|
||||
return m_lineColor;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Knob::setlineColor( const QColor & c )
|
||||
{
|
||||
m_lineColor = c;
|
||||
}
|
||||
|
||||
|
||||
|
||||
QColor Knob::arcColor() const
|
||||
{
|
||||
return m_arcColor;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Knob::setarcColor( const QColor & c )
|
||||
{
|
||||
m_arcColor = c;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
QColor Knob::textColor() const
|
||||
{
|
||||
return m_textColor;
|
||||
@@ -383,6 +353,10 @@ bool Knob::updateAngle()
|
||||
|
||||
void Knob::drawKnob( QPainter * _p )
|
||||
{
|
||||
bool enabled = this->isEnabled();
|
||||
QColor currentArcColor = enabled ? m_arcActiveColor : m_arcInactiveColor;
|
||||
QColor currentLineColor = enabled ? m_lineActiveColor : m_lineInactiveColor;
|
||||
|
||||
if( updateAngle() == false && !m_cache.isNull() )
|
||||
{
|
||||
_p->drawImage( 0, 0, m_cache );
|
||||
@@ -441,33 +415,24 @@ void Knob::drawKnob( QPainter * _p )
|
||||
const int arcLineWidth = 2;
|
||||
const int arcRectSize = m_knobPixmap->width() - arcLineWidth;
|
||||
|
||||
QColor col;
|
||||
if( m_knobNum == knobVintage_32 )
|
||||
{ col = QApplication::palette().color( QPalette::Active, QPalette::Shadow ); }
|
||||
else
|
||||
{ col = QApplication::palette().color( QPalette::Active, QPalette::WindowText ); }
|
||||
col.setAlpha( 70 );
|
||||
|
||||
p.setPen( QPen( col, 2 ) );
|
||||
p.setPen(QPen(currentArcColor, 2));
|
||||
p.drawArc( mid.x() - arcRectSize/2, 1, arcRectSize, arcRectSize, 315*16, 16*m_totalAngle );
|
||||
|
||||
p.setPen(QPen(currentLineColor, 2));
|
||||
switch( m_knobNum )
|
||||
{
|
||||
case knobSmall_17:
|
||||
{
|
||||
p.setPen( QPen( lineColor(), 2 ) );
|
||||
p.drawLine( calculateLine( mid, radius-2 ) );
|
||||
break;
|
||||
}
|
||||
case knobBright_26:
|
||||
{
|
||||
p.setPen( QPen( lineColor(), 2 ) );
|
||||
p.drawLine( calculateLine( mid, radius-5 ) );
|
||||
break;
|
||||
}
|
||||
case knobDark_28:
|
||||
{
|
||||
p.setPen( QPen( lineColor(), 2 ) );
|
||||
const float rb = qMax<float>( ( radius - 10 ) / 3.0,
|
||||
0.0 );
|
||||
const float re = qMax<float>( ( radius - 4 ), 0.0 );
|
||||
@@ -478,7 +443,6 @@ void Knob::drawKnob( QPainter * _p )
|
||||
}
|
||||
case knobVintage_32:
|
||||
{
|
||||
p.setPen( QPen( lineColor(), 2 ) );
|
||||
p.drawLine( calculateLine( mid, radius-2, 2 ) );
|
||||
break;
|
||||
}
|
||||
@@ -840,3 +804,35 @@ void Knob::doConnections()
|
||||
this, SLOT( update() ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Knob::changeEvent(QEvent * ev)
|
||||
{
|
||||
if (ev->type() == QEvent::EnabledChange)
|
||||
{
|
||||
onKnobNumUpdated();
|
||||
if (!m_label.isEmpty())
|
||||
{
|
||||
setLabel(m_label);
|
||||
}
|
||||
m_cache = QImage();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void convertPixmapToGrayScale(QPixmap& pixMap)
|
||||
{
|
||||
QImage temp = pixMap.toImage().convertToFormat(QImage::Format_ARGB32);
|
||||
for (int i = 0; i < temp.height(); ++i)
|
||||
{
|
||||
for (int j = 0; j < temp.width(); ++j)
|
||||
{
|
||||
const auto pix = temp.pixelColor(i, j);
|
||||
const auto gscale = 0.2126 * pix.redF() + 0.7152 * pix.greenF() + 0.0722 * pix.blueF();
|
||||
const auto pixGray = QColor::fromRgbF(gscale, gscale, gscale, pix.alphaF());
|
||||
temp.setPixelColor(i, j, pixGray);
|
||||
}
|
||||
}
|
||||
pixMap.convertFromImage(temp);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user