Remove Knob related code from FloatModelEditorBase

First removal of Knob related code from FloatModelEditorBase.
This commit is contained in:
Michael Gregorius
2023-07-08 14:12:28 +02:00
parent 15246b2758
commit b748c3ff33
2 changed files with 16 additions and 235 deletions

View File

@@ -76,12 +76,9 @@ class LMMS_EXPORT FloatModelEditorBase : public QWidget, public FloatModelView
mapPropertyFromModel(bool,isVolumeKnob,setVolumeKnob,m_volumeKnob);
mapPropertyFromModel(float,volumeRatio,setVolumeRatio,m_volumeRatio);
Q_PROPERTY(knobTypesTemp knobNum READ knobNum WRITE setknobNum)
Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor)
void initUi( const QString & _name ); //!< to be called by ctors
void onKnobNumUpdated(); //!< to be called when you updated @a m_knobNum
public:
FloatModelEditorBase( knobTypesTemp _knob_num, QWidget * _parent = nullptr, const QString & _name = QString() );
@@ -107,9 +104,6 @@ public:
float outerRadius() const;
void setOuterRadius( float r );
knobTypesTemp knobNum() const;
void setknobNum( knobTypesTemp k );
QPointF centerPoint() const;
float centerPointX() const;
void setCenterPointX( float c );
@@ -143,7 +137,6 @@ 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 );
@@ -160,7 +153,6 @@ private:
QLineF calculateLine( const QPointF & _mid, float _radius,
float _innerRadius = 1) const;
void drawKnob( QPainter * _p );
void setPosition( const QPoint & _p );
bool updateAngle();

View File

@@ -93,81 +93,14 @@ void FloatModelEditorBase::initUi( const QString & _name )
setWindowTitle( _name );
onKnobNumUpdated();
setTotalAngle( 270.0f );
setInnerRadius( 1.0f );
setOuterRadius( 10.0f );
setFocusPolicy( Qt::ClickFocus );
// This is a workaround to enable style sheets for knobs which are not styled knobs.
//
// It works as follows: the palette colors that are assigned as the line color previously
// had been hard coded in the drawKnob method for the different knob types. Now the
// drawKnob method uses the line color to draw the lines. By assigning the palette colors
// as the line colors here the knob lines will be drawn in this color unless the stylesheet
// overrides that color.
switch (knobNum())
{
case knobSmall_17Temp:
case knobBright_26Temp:
case knobDark_28Temp:
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_32Temp:
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;
}
doConnections();
}
void FloatModelEditorBase::onKnobNumUpdated()
{
if( m_knobNum != knobStyledTemp )
{
QString knobFilename;
switch (m_knobNum)
{
case knobDark_28Temp:
knobFilename = "knob01";
break;
case knobBright_26Temp:
knobFilename = "knob02";
break;
case knobSmall_17Temp:
knobFilename = "knob03";
break;
case knobVintage_32Temp:
knobFilename = "knob05";
break;
case knobStyledTemp: // only here to stop the compiler from complaining
break;
}
// If knobFilename is still empty here we should get the fallback pixmap of size 1x1
m_knobPixmap = std::make_unique<QPixmap>(QPixmap(embed::getIconPixmap(knobFilename.toUtf8().constData())));
if (!this->isEnabled())
{
convertPixmapToGrayScaleTemp(*m_knobPixmap.get());
}
setFixedSize( m_knobPixmap->width(), m_knobPixmap->height() );
}
}
void FloatModelEditorBase::setLabel( const QString & txt )
{
m_label = txt;
@@ -253,26 +186,6 @@ void FloatModelEditorBase::setOuterRadius( float r )
knobTypesTemp FloatModelEditorBase::knobNum() const
{
return m_knobNum;
}
void FloatModelEditorBase::setknobNum( knobTypesTemp k )
{
if( m_knobNum != k )
{
m_knobNum = k;
onKnobNumUpdated();
}
}
QPointF FloatModelEditorBase::centerPoint() const
{
return m_centerPoint;
@@ -380,112 +293,6 @@ bool FloatModelEditorBase::updateAngle()
void FloatModelEditorBase::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 );
return;
}
m_cache = QImage( size(), QImage::Format_ARGB32 );
m_cache.fill( qRgba( 0, 0, 0, 0 ) );
QPainter p( &m_cache );
QPoint mid;
if( m_knobNum == knobStyledTemp )
{
p.setRenderHint( QPainter::Antialiasing );
// Perhaps this can move to setOuterRadius()
if( m_outerColor.isValid() )
{
QRadialGradient gradient( centerPoint(), outerRadius() );
gradient.setColorAt( 0.4, _p->pen().brush().color() );
gradient.setColorAt( 1, m_outerColor );
p.setPen( QPen( gradient, lineWidth(),
Qt::SolidLine, Qt::RoundCap ) );
}
else {
QPen pen = p.pen();
pen.setWidth( (int) lineWidth() );
pen.setCapStyle( Qt::RoundCap );
p.setPen( pen );
}
p.drawLine( calculateLine( centerPoint(), outerRadius(),
innerRadius() ) );
p.end();
_p->drawImage( 0, 0, m_cache );
return;
}
// Old-skool knobs
const float radius = m_knobPixmap->width() / 2.0f - 1;
mid = QPoint( width() / 2, m_knobPixmap->height() / 2 );
p.drawPixmap( static_cast<int>(
width() / 2 - m_knobPixmap->width() / 2 ), 0,
*m_knobPixmap );
p.setRenderHint( QPainter::Antialiasing );
const int centerAngle = angleFromValue( model()->inverseScaledValue( model()->centerValue() ), model()->minValue(), model()->maxValue(), m_totalAngle );
const int arcLineWidth = 2;
const int arcRectSize = m_knobPixmap->width() - arcLineWidth;
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_17Temp:
{
p.drawLine( calculateLine( mid, radius-2 ) );
break;
}
case knobBright_26Temp:
{
p.drawLine( calculateLine( mid, radius-5 ) );
break;
}
case knobDark_28Temp:
{
const float rb = qMax<float>( ( radius - 10 ) / 3.0,
0.0 );
const float re = qMax<float>( ( radius - 4 ), 0.0 );
QLineF ln = calculateLine( mid, re, rb );
ln.translate( 1, 1 );
p.drawLine( ln );
break;
}
case knobVintage_32Temp:
{
p.drawLine( calculateLine( mid, radius-2, 2 ) );
break;
}
case knobStyledTemp:
break;
}
p.drawArc( mid.x() - arcRectSize/2, 1, arcRectSize, arcRectSize, (90-centerAngle)*16, -16*(m_angle-centerAngle) );
p.end();
_p->drawImage( 0, 0, m_cache );
}
float FloatModelEditorBase::getValue( const QPoint & _p )
{
float value;
@@ -663,26 +470,23 @@ void FloatModelEditorBase::mouseDoubleClickEvent( QMouseEvent * )
void FloatModelEditorBase::paintEvent( QPaintEvent * _me )
{
QPainter p( this );
QPainter p(this);
drawKnob( &p );
if( !m_label.isEmpty() )
{
if (!m_isHtmlLabel)
{
p.setFont(pointSizeF(p.font(), 6.5));
p.setPen(textColor());
p.drawText(width() / 2 -
horizontalAdvance(p.fontMetrics(), m_label) / 2,
height() - 2, m_label);
}
else
{
m_tdRenderer->setDefaultFont(pointSizeF(p.font(), 6.5));
p.translate((width() - m_tdRenderer->idealWidth()) / 2, (height() - m_tdRenderer->pageSize().height()) / 2);
m_tdRenderer->drawContents(&p);
}
}
QColor const foreground(3, 94, 97);
auto const * mod = model();
auto const minValue = mod->minValue();
auto const maxValue = mod->maxValue();
auto const range = maxValue - minValue;
// Compute the percentage
// min + x * (max - min) = v <=> x = (v - min) / (max - min)
auto const percentage = range == 0 ? 1. : (mod->value() - minValue) / range;
QRect r = rect();
p.setPen(foreground);
p.setBrush(foreground);
p.drawRect(QRect(r.topLeft(), QPoint(r.width() * percentage, r.height())));
}
@@ -838,21 +642,6 @@ void FloatModelEditorBase::doConnections()
}
void FloatModelEditorBase::changeEvent(QEvent * ev)
{
if (ev->type() == QEvent::EnabledChange)
{
onKnobNumUpdated();
if (!m_label.isEmpty())
{
setLabel(m_label);
}
m_cache = QImage();
update();
}
}
void convertPixmapToGrayScaleTemp(QPixmap& pixMap)
{
QImage temp = pixMap.toImage().convertToFormat(QImage::Format_ARGB32);