mirror of
https://github.com/LMMS/lmms.git
synced 2026-03-17 13:38:22 -04:00
Merge branch 'stable-0.4' into stable-0.4-new-fx-mixer
Conflicts: src/core/FxMixer.cpp src/gui/FxMixerView.cpp
This commit is contained in:
@@ -52,9 +52,7 @@ public:
|
||||
inline bool hasAutomation() const
|
||||
{
|
||||
return m_autoPattern != NULL &&
|
||||
!typeInfo<float>::isEqual(
|
||||
m_autoPattern->getTimeMap()[0],
|
||||
defaultValue() );
|
||||
m_autoPattern->getTimeMap().isEmpty() == false;
|
||||
}
|
||||
|
||||
AutomationPattern * automationPattern()
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* lmms_style.h - the graphical style used by LMMS to create a consistent
|
||||
* LmmsStyle.h - the graphical style used by LMMS to create a consistent
|
||||
* interface
|
||||
*
|
||||
* Copyright (c) 2007-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2007-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
@@ -30,16 +30,46 @@
|
||||
#include <QtGui/QPlastiqueStyle>
|
||||
|
||||
|
||||
class lmmsStyle : public QPlastiqueStyle
|
||||
class LmmsStyle : public QPlastiqueStyle
|
||||
{
|
||||
public:
|
||||
lmmsStyle();
|
||||
virtual ~lmmsStyle()
|
||||
enum ColorRole
|
||||
{
|
||||
AutomationBarFill,
|
||||
AutomationBarValue,
|
||||
AutomationSelectedBarFill,
|
||||
AutomationCrosshair,
|
||||
PianoRollStepNote,
|
||||
PianoRollSelectedNote,
|
||||
PianoRollDefaultNote,
|
||||
PianoRollFrozenNote,
|
||||
PianoRollMutedNote,
|
||||
PianoRollEditHandle,
|
||||
PianoRollVolumeLevel,
|
||||
PianoRollPanningLevel,
|
||||
PianoRollSelectedLevel,
|
||||
TimelineForecolor,
|
||||
StandardGraphLine,
|
||||
StandardGraphHandle,
|
||||
StandardGraphHandleBorder,
|
||||
StandardGraphCrosshair,
|
||||
TextFloatForecolor,
|
||||
TextFloatFill,
|
||||
VisualizationLevelLow,
|
||||
VisualizationLevelMid,
|
||||
VisualizationLevelPeak,
|
||||
NumColorRoles
|
||||
};
|
||||
|
||||
LmmsStyle();
|
||||
virtual ~LmmsStyle()
|
||||
{
|
||||
}
|
||||
|
||||
virtual QPalette standardPalette( void ) const;
|
||||
|
||||
virtual void drawControl( ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget ) const;
|
||||
|
||||
virtual void drawComplexControl(
|
||||
ComplexControl control,
|
||||
const QStyleOptionComplex * option,
|
||||
@@ -54,6 +84,14 @@ public:
|
||||
const QStyleOption * option = 0,
|
||||
const QWidget * widget = 0 ) const;
|
||||
|
||||
QSize sizeFromContents( ContentsType type, const QStyleOption* option, const QSize& size, const QWidget* widget ) const;
|
||||
QRect subControlRect( ComplexControl control, const QStyleOptionComplex *option, SubControl subControl, const QWidget *widget ) const;
|
||||
|
||||
private:
|
||||
QImage colorizeXpm( const char * const * xpm, const QBrush& fill ) const;
|
||||
void hoverColors( bool sunken, bool hover, bool active, QColor& color, QColor& blend ) const;
|
||||
QColor m_colors[ LmmsStyle::NumColorRoles ];
|
||||
|
||||
} ;
|
||||
|
||||
#endif
|
||||
@@ -121,8 +121,8 @@ void FxChannel::doProcessing( sampleFrame * _buf )
|
||||
{
|
||||
m_fxChain.startRunning();
|
||||
m_stillRunning = m_fxChain.processAudioBuffer( _buf, fpp );
|
||||
m_peakLeft = engine::mixer()->peakValueLeft( _buf, fpp ) * v;
|
||||
m_peakRight = engine::mixer()->peakValueRight( _buf, fpp ) * v;
|
||||
m_peakLeft = qMax( m_peakLeft, engine::mixer()->peakValueLeft( _buf, fpp ) * v );
|
||||
m_peakRight = qMax( m_peakRight, engine::mixer()->peakValueRight( _buf, fpp ) * v );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* main.cpp - just main.cpp which is starting up app...
|
||||
*
|
||||
* Copyright (c) 2004-2013 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2012-2013 Paul Giblock <p/at/pgiblock.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
@@ -58,7 +58,7 @@
|
||||
#include "config_mgr.h"
|
||||
#include "embed.h"
|
||||
#include "engine.h"
|
||||
#include "lmms_style.h"
|
||||
#include "LmmsStyle.h"
|
||||
#include "ImportFilter.h"
|
||||
#include "MainWindow.h"
|
||||
#include "ProjectRenderer.h"
|
||||
@@ -386,7 +386,7 @@ int main( int argc, char * * argv )
|
||||
if( render_out.isEmpty() )
|
||||
{
|
||||
// init style and palette
|
||||
QApplication::setStyle( new lmmsStyle() );
|
||||
QApplication::setStyle( new LmmsStyle() );
|
||||
|
||||
// init splash screen - this is a bit difficult as we have a
|
||||
// semi-transparent splash-image therefore we first need to grab
|
||||
|
||||
@@ -458,17 +458,18 @@ void FxMixerView::updateFaders()
|
||||
const float fall_off = 1.2;
|
||||
if( m->m_fxChannels[i]->m_peakLeft > opl )
|
||||
{
|
||||
m_fxChannelViews[i]->m_fader->setPeak_L(
|
||||
m->m_fxChannels[i]->m_peakLeft );
|
||||
m_fxChannelViews[i]->m_fader->setPeak_L( m->m_fxChannels[i]->m_peakLeft );
|
||||
m->m_fxChannels[i]->m_peakLeft = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_fxChannelViews[i]->m_fader->setPeak_L( opl/fall_off );
|
||||
}
|
||||
|
||||
if( m->m_fxChannels[i]->m_peakRight > opr )
|
||||
{
|
||||
m_fxChannelViews[i]->m_fader->setPeak_R(
|
||||
m->m_fxChannels[i]->m_peakRight );
|
||||
m_fxChannelViews[i]->m_fader->setPeak_R( m->m_fxChannels[i]->m_peakRight );
|
||||
m->m_fxChannels[i]->m_peakRight = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
836
src/gui/LmmsStyle.cpp
Normal file
836
src/gui/LmmsStyle.cpp
Normal file
@@ -0,0 +1,836 @@
|
||||
/*
|
||||
* LmmsStyle.cpp - the graphical style used by LMMS to create a consistent
|
||||
* interface
|
||||
*
|
||||
* Copyright (c) 2007-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this program (see COPYING); if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301 USA.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <QtCore/QFile>
|
||||
#include <QtGui/QApplication>
|
||||
#include <QtGui/QFrame>
|
||||
#include <QtGui/QPainter>
|
||||
#include <QtGui/QPixmapCache>
|
||||
#include <QtGui/QStyleOption>
|
||||
|
||||
#include "LmmsStyle.h"
|
||||
|
||||
|
||||
const int BUTTON_LENGTH = 24;
|
||||
|
||||
static const char * const s_scrollbarArrowUpXpm[] = {
|
||||
"7 6 8 1",
|
||||
" g None",
|
||||
". g #000000",
|
||||
"+ g #101010",
|
||||
"@ g #A0A0A0",
|
||||
"# g #C0C0C0",
|
||||
"$ g #FFFFFF",
|
||||
"% g #808080",
|
||||
"& g #202020",
|
||||
"..+@+..",
|
||||
"..#$#..",
|
||||
".%$$$%.",
|
||||
"&$$$$$&",
|
||||
"@$$$$$@",
|
||||
"@#####@"};
|
||||
|
||||
static const char * const s_scrollbarArrowRightXpm[] = {
|
||||
"6 7 8 1",
|
||||
" c None",
|
||||
". c #A0A0A0",
|
||||
"+ c #202020",
|
||||
"@ c #000000",
|
||||
"# c #C0C0C0",
|
||||
"$ c #FFFFFF",
|
||||
"% c #808080",
|
||||
"& c #101010",
|
||||
"..+@@@",
|
||||
"#$$%@@",
|
||||
"#$$$#&",
|
||||
"#$$$$.",
|
||||
"#$$$#&",
|
||||
"#$$%@@",
|
||||
"..+@@@"};
|
||||
|
||||
static const char * const s_scrollbarArrowDownXpm[] = {
|
||||
"7 6 8 1",
|
||||
" g None",
|
||||
". g #000000",
|
||||
"+ g #101010",
|
||||
"@ g #A0A0A0",
|
||||
"# g #C0C0C0",
|
||||
"$ g #FFFFFF",
|
||||
"% g #808080",
|
||||
"& g #202020",
|
||||
"@#####@",
|
||||
"@$$$$$@",
|
||||
"&$$$$$&",
|
||||
".%$$$%.",
|
||||
"..#$#..",
|
||||
"..+@+.."};
|
||||
|
||||
static const char * const s_scrollbarArrowLeftXpm[] = {
|
||||
"6 7 8 1",
|
||||
" g None",
|
||||
". g #000000",
|
||||
"+ g #202020",
|
||||
"@ g #A0A0A0",
|
||||
"# g #808080",
|
||||
"$ g #FFFFFF",
|
||||
"% g #C0C0C0",
|
||||
"& g #101010",
|
||||
"...+@@",
|
||||
"..#$$%",
|
||||
"&%$$$%",
|
||||
"@$$$$%",
|
||||
"&%$$$%",
|
||||
"..#$$%",
|
||||
"...+@@"};
|
||||
|
||||
|
||||
|
||||
QLinearGradient getGradient( const QColor & _col, const QRectF & _rect )
|
||||
{
|
||||
QLinearGradient g( _rect.topLeft(), _rect.bottomLeft() );
|
||||
|
||||
qreal hue = _col.hueF();
|
||||
qreal value = _col.valueF();
|
||||
qreal saturation = _col.saturationF();
|
||||
|
||||
QColor c = _col;
|
||||
c.setHsvF( hue, 0.42 * saturation, 0.98 * value ); // TODO: pattern: 1.08
|
||||
g.setColorAt( 0, c );
|
||||
c.setHsvF( hue, 0.58 * saturation, 0.95 * value ); // TODO: pattern: 1.05
|
||||
g.setColorAt( 0.25, c );
|
||||
c.setHsvF( hue, 0.70 * saturation, 0.93 * value ); // TODO: pattern: 1.03
|
||||
g.setColorAt( 0.5, c );
|
||||
|
||||
c.setHsvF( hue, 0.95 * saturation, 0.9 * value );
|
||||
g.setColorAt( 0.501, c );
|
||||
c.setHsvF( hue * 0.95, 0.95 * saturation, 0.95 * value );
|
||||
g.setColorAt( 0.75, c );
|
||||
c.setHsvF( hue * 0.90, 0.95 * saturation, 1 * value );
|
||||
g.setColorAt( 1.0, c );
|
||||
|
||||
return g;
|
||||
}
|
||||
|
||||
|
||||
|
||||
QLinearGradient darken( const QLinearGradient & _gradient )
|
||||
{
|
||||
QGradientStops stops = _gradient.stops();
|
||||
for (int i = 0; i < stops.size(); ++i) {
|
||||
QColor color = stops.at(i).second;
|
||||
stops[i].second = color.lighter(133);
|
||||
}
|
||||
|
||||
QLinearGradient g = _gradient;
|
||||
g.setStops(stops);
|
||||
return g;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void drawPath( QPainter *p, const QPainterPath &path,
|
||||
const QColor &col, const QColor &borderCol,
|
||||
bool dark = false )
|
||||
{
|
||||
const QRectF pathRect = path.boundingRect();
|
||||
|
||||
const QLinearGradient baseGradient = getGradient(col, pathRect);
|
||||
const QLinearGradient darkGradient = darken(baseGradient);
|
||||
|
||||
p->setOpacity(0.25);
|
||||
|
||||
// glow
|
||||
if (dark)
|
||||
p->strokePath(path, QPen(darkGradient, 4));
|
||||
else
|
||||
p->strokePath(path, QPen(baseGradient, 4));
|
||||
|
||||
p->setOpacity(1.0);
|
||||
|
||||
// fill
|
||||
if (dark)
|
||||
p->fillPath(path, darkGradient);
|
||||
else
|
||||
p->fillPath(path, baseGradient);
|
||||
|
||||
// TODO: Remove??
|
||||
/*
|
||||
QLinearGradient g(pathRect.topLeft(), pathRect.topRight());
|
||||
g.setCoordinateMode(QGradient::ObjectBoundingMode);
|
||||
|
||||
p->setOpacity(0.2);
|
||||
p->fillPath(path, g);*/
|
||||
// END: Remove??
|
||||
|
||||
p->setOpacity(0.5);
|
||||
|
||||
// highlight (bb)
|
||||
if (dark)
|
||||
p->strokePath(path, QPen(borderCol.lighter(133), 2));
|
||||
else
|
||||
p->strokePath(path, QPen(borderCol, 2));
|
||||
}
|
||||
|
||||
|
||||
|
||||
static QString getCacheKey( const QString & _key,
|
||||
const QStyleOption * _option, const QSize & _size )
|
||||
{
|
||||
QString tmp;
|
||||
const QStyleOptionComplex *complexOption =
|
||||
qstyleoption_cast<const QStyleOptionComplex *> ( _option );
|
||||
tmp.sprintf( "%s,%d,%d,%d,%lld,%dx%d",
|
||||
_key.toLatin1().constData(),
|
||||
uint( _option->state ),
|
||||
complexOption ? uint( complexOption->activeSubControls ) : uint( 0 ),
|
||||
_option->direction,
|
||||
_option->palette.cacheKey(),
|
||||
_size.width(),
|
||||
_size.height() );
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
LmmsStyle::LmmsStyle() :
|
||||
QPlastiqueStyle()
|
||||
{
|
||||
QFile file( "resources:style.css" );
|
||||
file.open( QIODevice::ReadOnly );
|
||||
qApp->setStyleSheet( file.readAll() );
|
||||
|
||||
qApp->setPalette( standardPalette() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
QPalette LmmsStyle::standardPalette( void ) const
|
||||
{
|
||||
QPalette pal = QPlastiqueStyle::standardPalette();
|
||||
/* pal.setColor( QPalette::Background, QColor( 91, 101, 113 ) );
|
||||
pal.setColor( QPalette::WindowText, QColor( 240, 240, 240 ) );
|
||||
pal.setColor( QPalette::Base, QColor( 128, 128, 128 ) );
|
||||
pal.setColor( QPalette::Text, QColor( 224, 224, 224 ) );
|
||||
pal.setColor( QPalette::Button, QColor( 201, 201, 201 ) );
|
||||
pal.setColor( QPalette::Shadow, QColor( 0, 0, 0 ) );
|
||||
pal.setColor( QPalette::ButtonText, QColor( 0, 0, 0 ) );
|
||||
pal.setColor( QPalette::BrightText, QColor( 74, 253, 133 ) );
|
||||
pal.setColor( QPalette::Highlight, QColor( 100, 100, 100 ) );
|
||||
pal.setColor( QPalette::HighlightedText, QColor( 255, 255, 255 ) );*/
|
||||
|
||||
QStringList paletteData = qApp->styleSheet().split( '\n' ).filter( QRegExp( "^palette:*" ) );
|
||||
foreach( QString s, paletteData )
|
||||
{
|
||||
if (s.contains("background")) { pal.setColor( QPalette::Background, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("windowtext")) { pal.setColor( QPalette::WindowText, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("base")) { pal.setColor( QPalette::Base, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("buttontext")) { pal.setColor( QPalette::ButtonText, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("brighttext")) { pal.setColor( QPalette::BrightText, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("text")) { pal.setColor( QPalette::Text, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("button")) { pal.setColor( QPalette::Button, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("shadow")) { pal.setColor( QPalette::Shadow, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("highlightedtext")) { pal.setColor( QPalette::HighlightedText, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("highlight")) { pal.setColor( QPalette::Highlight, QColor( s.mid( s.indexOf("#"), 7 ) ) ); };
|
||||
}
|
||||
|
||||
return( pal );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void LmmsStyle::drawControl( ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget ) const
|
||||
{
|
||||
|
||||
switch( element )
|
||||
{
|
||||
case CE_ScrollBarAddLine:
|
||||
if( const QStyleOptionSlider * scrollBar = qstyleoption_cast<const QStyleOptionSlider *>( option ) )
|
||||
{
|
||||
|
||||
bool horizontal = scrollBar->orientation == Qt::Horizontal;
|
||||
bool isEnabled = scrollBar->state & State_Enabled;
|
||||
bool sunken = scrollBar->state & State_Sunken;
|
||||
bool hover = scrollBar->state & State_MouseOver;
|
||||
|
||||
QString pixmapName = getCacheKey( QLatin1String( "ScrollBarAddLine" ), option, option->rect.size() );
|
||||
|
||||
QPixmap cache;
|
||||
if( !QPixmapCache::find( pixmapName, cache ) )
|
||||
{
|
||||
cache = QPixmap( option->rect.size() );
|
||||
QPainter cachePainter( &cache );
|
||||
|
||||
cache.fill( QColor( 48, 48, 48 ) );
|
||||
QColor sliderColor;
|
||||
QColor blurColor;
|
||||
hoverColors(sunken, hover,
|
||||
scrollBar->activeSubControls & SC_ScrollBarAddLine && isEnabled,
|
||||
sliderColor, blurColor);
|
||||
|
||||
int scrollBarExtent = pixelMetric( PM_ScrollBarExtent, option, widget );
|
||||
cachePainter.setPen( QPen( sliderColor, 0 ) );
|
||||
if( horizontal )
|
||||
{
|
||||
int r = cache.rect().right();
|
||||
cachePainter.fillRect(0, 2, BUTTON_LENGTH-2,
|
||||
scrollBarExtent-4, sliderColor);
|
||||
|
||||
cachePainter.drawLine( r, 4, r, scrollBarExtent - 5 );
|
||||
cachePainter.drawLine( r - 1, 3, r - 1, scrollBarExtent - 4 );
|
||||
|
||||
const QPointF points[4] = {
|
||||
QPoint( r, 3 ), QPoint( r, scrollBarExtent - 4 ),
|
||||
QPoint( r - 1, 2 ), QPoint( r - 1, scrollBarExtent - 3 )};
|
||||
|
||||
cachePainter.setPen( QPen( blurColor, 0 ) );
|
||||
cachePainter.drawPoints( points, 4 );
|
||||
|
||||
QImage arrow = colorizeXpm( s_scrollbarArrowRightXpm, option->palette.foreground().color() );
|
||||
if( ( scrollBar->activeSubControls & SC_ScrollBarAddLine ) && sunken )
|
||||
{
|
||||
cachePainter.translate( 1, 1 );
|
||||
}
|
||||
cachePainter.drawImage( cache.rect().center() - QPoint( 3, 3 ), arrow );
|
||||
}
|
||||
else
|
||||
{
|
||||
int b = cache.rect().bottom();
|
||||
cachePainter.fillRect( 2, 0, scrollBarExtent - 4, BUTTON_LENGTH - 2, sliderColor );
|
||||
cachePainter.drawLine( 4, b, scrollBarExtent - 5, b );
|
||||
cachePainter.drawLine( 3, b - 1, scrollBarExtent - 4, b - 1 );
|
||||
|
||||
const QPointF points[4] = {
|
||||
QPoint( 3, b ), QPoint( scrollBarExtent - 4, b ),
|
||||
QPoint( 2, b - 1 ), QPoint( scrollBarExtent - 3, b - 1 )};
|
||||
|
||||
cachePainter.setPen( QPen( blurColor, 0 ) );
|
||||
cachePainter.drawPoints( points, 4 );
|
||||
|
||||
QImage arrow = colorizeXpm( s_scrollbarArrowDownXpm, option->palette.foreground().color() );
|
||||
if( ( scrollBar->activeSubControls & SC_ScrollBarAddLine ) && sunken )
|
||||
{
|
||||
cachePainter.translate( 1, 1 );
|
||||
}
|
||||
cachePainter.drawImage( cache.rect().center() - QPoint( 3, 3 ), arrow );
|
||||
}
|
||||
QPixmapCache::insert( pixmapName, cache );
|
||||
}
|
||||
painter->drawPixmap( option->rect.topLeft(), cache );
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case CE_ScrollBarSubLine:
|
||||
if(const QStyleOptionSlider *scrollBar = qstyleoption_cast<const QStyleOptionSlider *>( option ) )
|
||||
{
|
||||
bool horizontal = scrollBar->orientation == Qt::Horizontal;
|
||||
bool isEnabled = scrollBar->state & State_Enabled;
|
||||
bool sunken = scrollBar->state & State_Sunken;
|
||||
bool hover = scrollBar->state & State_MouseOver;
|
||||
|
||||
QString pixmapName = getCacheKey( QLatin1String( "ScrollBarSubLine" ), option, option->rect.size() );
|
||||
QPixmap cache;
|
||||
if( !QPixmapCache::find( pixmapName, cache ) )
|
||||
{
|
||||
cache = QPixmap( option->rect.size() );
|
||||
QPainter cachePainter( &cache );
|
||||
|
||||
cache.fill( QColor( 48, 48, 48 ) ); // TODO: Fill with CSS background
|
||||
QColor sliderColor;
|
||||
QColor blurColor;
|
||||
hoverColors(sunken, hover,
|
||||
scrollBar->activeSubControls & SC_ScrollBarSubLine && isEnabled,
|
||||
sliderColor, blurColor);
|
||||
|
||||
int scrollBarExtent = pixelMetric( PM_ScrollBarExtent, option, widget );
|
||||
cachePainter.setPen( QPen( sliderColor, 0 ) );
|
||||
if( horizontal )
|
||||
{
|
||||
cachePainter.fillRect( 2, 2, BUTTON_LENGTH - 2, scrollBarExtent - 4, sliderColor );
|
||||
cachePainter.drawLine( 0, 4, 0, scrollBarExtent - 5 );
|
||||
cachePainter.drawLine( 1, 3, 1, scrollBarExtent - 4 );
|
||||
|
||||
const QPointF points[4] = {
|
||||
QPoint( 0, 3 ), QPoint( 0, scrollBarExtent - 4 ),
|
||||
QPoint( 1, 2 ), QPoint( 1, scrollBarExtent - 3 )};
|
||||
|
||||
cachePainter.setPen( QPen( blurColor, 0 ) );
|
||||
cachePainter.drawPoints( points, 4 );
|
||||
|
||||
QImage arrow = colorizeXpm( s_scrollbarArrowLeftXpm, option->palette.foreground().color() );
|
||||
if( ( scrollBar->activeSubControls & SC_ScrollBarSubLine ) && sunken )
|
||||
{
|
||||
cachePainter.translate( 1, 1 );
|
||||
}
|
||||
cachePainter.drawImage( cache.rect().center() - QPoint( 3, 3 ), arrow );
|
||||
}
|
||||
else
|
||||
{
|
||||
cachePainter.fillRect( 2, 2, scrollBarExtent - 4, BUTTON_LENGTH - 2, sliderColor );
|
||||
cachePainter.drawLine( 4, 0, scrollBarExtent - 5, 0 );
|
||||
cachePainter.drawLine( 3, 1, scrollBarExtent - 4, 1 );
|
||||
|
||||
const QPointF points[4] = {
|
||||
QPoint( 3, 0 ), QPoint( scrollBarExtent - 4, 0 ),
|
||||
QPoint( 2, 1 ), QPoint( scrollBarExtent - 3, 1 )};
|
||||
|
||||
cachePainter.setPen( QPen( blurColor, 0 ) );
|
||||
cachePainter.drawPoints( points, 4 );
|
||||
|
||||
QImage arrow = colorizeXpm( s_scrollbarArrowUpXpm, option->palette.foreground().color() );
|
||||
if( ( scrollBar->activeSubControls & SC_ScrollBarSubLine ) && sunken )
|
||||
{
|
||||
cachePainter.translate( 1, 1 );
|
||||
}
|
||||
cachePainter.drawImage( cache.rect().center() - QPoint( 3, 3 ), arrow );
|
||||
}
|
||||
QPixmapCache::insert( pixmapName, cache );
|
||||
}
|
||||
painter->drawPixmap( option->rect.topLeft(), cache );
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case CE_ScrollBarSubPage:
|
||||
case CE_ScrollBarAddPage:
|
||||
break;
|
||||
|
||||
case CE_ScrollBarSlider:
|
||||
if( const QStyleOptionSlider* scrollBar = qstyleoption_cast<const QStyleOptionSlider *>( option ) )
|
||||
{
|
||||
bool horizontal = scrollBar->orientation == Qt::Horizontal;
|
||||
bool isEnabled = scrollBar->state & State_Enabled;
|
||||
bool sunken = scrollBar->state & State_Sunken;
|
||||
bool hover = scrollBar->state & State_MouseOver;
|
||||
|
||||
QColor sliderColor, blendColor;
|
||||
hoverColors( sunken, hover, (scrollBar->activeSubControls & SC_ScrollBarSlider) && isEnabled, sliderColor, blendColor);
|
||||
|
||||
QRect rc = scrollBar->rect;
|
||||
if( horizontal )
|
||||
{
|
||||
painter->fillRect( rc.left(), rc.top() + 2, rc.width(), rc.height() - 4, sliderColor );
|
||||
}
|
||||
else
|
||||
{
|
||||
painter->fillRect( rc.left() + 2, rc.top(), rc.width() - 4, rc.height(), sliderColor );
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
QPlastiqueStyle::drawControl( element, option, painter, widget );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void LmmsStyle::drawComplexControl( ComplexControl control,
|
||||
const QStyleOptionComplex * option,
|
||||
QPainter *painter,
|
||||
const QWidget *widget ) const
|
||||
{
|
||||
// fix broken titlebar styling on win32
|
||||
if( control == CC_TitleBar )
|
||||
{
|
||||
const QStyleOptionTitleBar * titleBar =
|
||||
qstyleoption_cast<const QStyleOptionTitleBar *>(option );
|
||||
if( titleBar )
|
||||
{
|
||||
QStyleOptionTitleBar so( *titleBar );
|
||||
so.palette = standardPalette();
|
||||
so.palette.setColor( QPalette::HighlightedText,
|
||||
( titleBar->titleBarState & State_Active ) ?
|
||||
QColor( 255, 255, 255 ) :
|
||||
QColor( 192, 192, 192 ) );
|
||||
so.palette.setColor( QPalette::Text,
|
||||
QColor( 64, 64, 64 ) );
|
||||
QPlastiqueStyle::drawComplexControl( control, &so,
|
||||
painter, widget );
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if( control == CC_ScrollBar )
|
||||
{
|
||||
QColor background = QColor( 48, 48, 48 );
|
||||
painter->fillRect( option->rect, background );
|
||||
|
||||
}
|
||||
QPlastiqueStyle::drawComplexControl( control, option, painter, widget );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void LmmsStyle::drawPrimitive( PrimitiveElement element,
|
||||
const QStyleOption *option, QPainter *painter,
|
||||
const QWidget *widget) const
|
||||
{
|
||||
if( element == QStyle::PE_Frame ||
|
||||
element == QStyle::PE_FrameLineEdit ||
|
||||
element == QStyle::PE_PanelLineEdit )
|
||||
{
|
||||
const QRect rect = option->rect;
|
||||
|
||||
QColor black = QColor( 0, 0, 0 );
|
||||
QColor shadow = option->palette.shadow().color();
|
||||
QColor highlight = option->palette.highlight().color();
|
||||
|
||||
int a100 = 165;
|
||||
int a75 = static_cast<int>( a100 * .75 );
|
||||
int a50 = static_cast<int>( a100 * .6 );
|
||||
int a25 = static_cast<int>( a100 * .33 );
|
||||
|
||||
QLine lines[4];
|
||||
QPoint points[4];
|
||||
|
||||
// black inside lines
|
||||
// 50%
|
||||
black.setAlpha(a100);
|
||||
painter->setPen(QPen(black, 0));
|
||||
lines[0] = QLine(rect.left() + 2, rect.top() + 1,
|
||||
rect.right() - 2, rect.top() + 1);
|
||||
lines[1] = QLine(rect.left() + 2, rect.bottom() - 1,
|
||||
rect.right() - 2, rect.bottom() - 1);
|
||||
lines[2] = QLine(rect.left() + 1, rect.top() + 2,
|
||||
rect.left() + 1, rect.bottom() - 2);
|
||||
lines[3] = QLine(rect.right() - 1, rect.top() + 2,
|
||||
rect.right() - 1, rect.bottom() - 2);
|
||||
painter->drawLines(lines, 4);
|
||||
|
||||
// black inside dots
|
||||
black.setAlpha(a50);
|
||||
painter->setPen(QPen(black, 0));
|
||||
points[0] = QPoint(rect.left() + 2, rect.top() + 2);
|
||||
points[1] = QPoint(rect.left() + 2, rect.bottom() - 2);
|
||||
points[2] = QPoint(rect.right() - 2, rect.top() + 2);
|
||||
points[3] = QPoint(rect.right() - 2, rect.bottom() - 2);
|
||||
painter->drawPoints(points, 4);
|
||||
|
||||
|
||||
// outside lines - shadow
|
||||
// 100%
|
||||
shadow.setAlpha(a75);
|
||||
painter->setPen(QPen(shadow, 0));
|
||||
lines[0] = QLine(rect.left() + 2, rect.top(),
|
||||
rect.right() - 2, rect.top());
|
||||
lines[1] = QLine(rect.left(), rect.top() + 2,
|
||||
rect.left(), rect.bottom() - 2);
|
||||
painter->drawLines(lines, 2);
|
||||
|
||||
// outside corner dots - shadow
|
||||
// 75%
|
||||
shadow.setAlpha(a50);
|
||||
painter->setPen(QPen(shadow, 0));
|
||||
points[0] = QPoint(rect.left() + 1, rect.top() + 1);
|
||||
points[1] = QPoint(rect.right() - 1, rect.top() + 1);
|
||||
painter->drawPoints(points, 2);
|
||||
|
||||
// outside end dots - shadow
|
||||
// 50%
|
||||
shadow.setAlpha(a25);
|
||||
painter->setPen(QPen(shadow, 0));
|
||||
points[0] = QPoint(rect.left() + 1, rect.top());
|
||||
points[1] = QPoint(rect.left(), rect.top() + 1);
|
||||
points[2] = QPoint(rect.right() - 1, rect.top());
|
||||
points[3] = QPoint(rect.left(), rect.bottom() - 1);
|
||||
painter->drawPoints(points, 4);
|
||||
|
||||
|
||||
// outside lines - highlight
|
||||
// 100%
|
||||
highlight.setAlpha(a75);
|
||||
painter->setPen(QPen(highlight, 0));
|
||||
lines[0] = QLine(rect.left() + 2, rect.bottom(),
|
||||
rect.right() - 2, rect.bottom());
|
||||
lines[1] = QLine(rect.right(), rect.top() + 2,
|
||||
rect.right(), rect.bottom() - 2);
|
||||
painter->drawLines(lines, 2);
|
||||
|
||||
// outside corner dots - highlight
|
||||
// 75%
|
||||
highlight.setAlpha(a50);
|
||||
painter->setPen(QPen(highlight, 0));
|
||||
points[0] = QPoint(rect.left() + 1, rect.bottom() - 1);
|
||||
points[1] = QPoint(rect.right() - 1, rect.bottom() - 1);
|
||||
painter->drawPoints(points, 2);
|
||||
|
||||
// outside end dots - highlight
|
||||
// 50%
|
||||
highlight.setAlpha(a25);
|
||||
painter->setPen(QPen(highlight, 0));
|
||||
points[0] = QPoint(rect.right() - 1, rect.bottom());
|
||||
points[1] = QPoint(rect.right(), rect.bottom() - 1);
|
||||
points[2] = QPoint(rect.left() + 1, rect.bottom());
|
||||
points[3] = QPoint(rect.right(), rect.top() + 1);
|
||||
painter->drawPoints(points, 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
QPlastiqueStyle::drawPrimitive( element, option, painter,
|
||||
widget );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
int LmmsStyle::pixelMetric( PixelMetric _metric, const QStyleOption * _option,
|
||||
const QWidget * _widget ) const
|
||||
{
|
||||
switch( _metric )
|
||||
{
|
||||
case QStyle::PM_ButtonMargin:
|
||||
return 3;
|
||||
|
||||
case QStyle::PM_ButtonIconSize:
|
||||
return 20;
|
||||
|
||||
case QStyle::PM_ToolBarItemMargin:
|
||||
return 1;
|
||||
|
||||
case QStyle::PM_ToolBarItemSpacing:
|
||||
return 2;
|
||||
|
||||
case QStyle::PM_TitleBarHeight:
|
||||
return 24;
|
||||
|
||||
default:
|
||||
return QPlastiqueStyle::pixelMetric( _metric, _option,
|
||||
_widget );
|
||||
}
|
||||
}
|
||||
|
||||
// QStyle::SH_TitleBar_NoBorder
|
||||
|
||||
QSize LmmsStyle::sizeFromContents( ContentsType type, const QStyleOption* option, const QSize& size, const QWidget* widget ) const
|
||||
{
|
||||
if( type == CT_ScrollBar )
|
||||
{
|
||||
if( const QStyleOptionSlider * scrollBar = qstyleoption_cast<const QStyleOptionSlider *>( option ) )
|
||||
{
|
||||
int scrollBarExtent = pixelMetric( PM_ScrollBarExtent, option, widget );
|
||||
int scrollBarSliderMinimum = pixelMetric( PM_ScrollBarSliderMin, option, widget );
|
||||
if( scrollBar->orientation == Qt::Horizontal )
|
||||
{
|
||||
return QSize( BUTTON_LENGTH * 2 + scrollBarSliderMinimum, scrollBarExtent );
|
||||
}
|
||||
else
|
||||
{
|
||||
return QSize( scrollBarExtent, BUTTON_LENGTH * 2 + scrollBarSliderMinimum );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return QPlastiqueStyle::sizeFromContents( type, option, size, widget );
|
||||
}
|
||||
|
||||
|
||||
QRect LmmsStyle::subControlRect( ComplexControl control, const QStyleOptionComplex* option, SubControl subControl, const QWidget* widget ) const
|
||||
{
|
||||
QRect rect = QPlastiqueStyle::subControlRect( control, option, subControl, widget );
|
||||
|
||||
switch( control )
|
||||
{
|
||||
case CC_ScrollBar:
|
||||
if( const QStyleOptionSlider* scrollBar = qstyleoption_cast<const QStyleOptionSlider *>( option ) )
|
||||
{
|
||||
int scrollBarExtent = pixelMetric( PM_ScrollBarExtent, scrollBar, widget );
|
||||
int sliderMaxLength = (
|
||||
( scrollBar->orientation == Qt::Horizontal ) ?
|
||||
scrollBar->rect.width() :
|
||||
scrollBar->rect.height() ) -
|
||||
( BUTTON_LENGTH * 2 + 6 );
|
||||
int sliderMinLength = pixelMetric( PM_ScrollBarSliderMin, scrollBar, widget );
|
||||
int sliderLength;
|
||||
|
||||
// calculate slider length
|
||||
if( scrollBar->maximum != scrollBar->minimum )
|
||||
{
|
||||
uint valueRange = scrollBar->maximum - scrollBar->minimum;
|
||||
sliderLength = ( scrollBar->pageStep * sliderMaxLength ) /
|
||||
( valueRange + scrollBar->pageStep );
|
||||
|
||||
if( sliderLength < sliderMinLength || valueRange > ( INT_MAX ) / 2 )
|
||||
{
|
||||
sliderLength = sliderMinLength;
|
||||
}
|
||||
if( sliderLength > sliderMaxLength )
|
||||
{
|
||||
sliderLength = sliderMaxLength;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sliderLength = sliderMaxLength;
|
||||
}
|
||||
|
||||
int sliderStart = BUTTON_LENGTH + 3 + sliderPositionFromValue(
|
||||
scrollBar->minimum,
|
||||
scrollBar->maximum,
|
||||
scrollBar->sliderPosition,
|
||||
sliderMaxLength - sliderLength,
|
||||
scrollBar->upsideDown );
|
||||
|
||||
QRect scrollBarRect = scrollBar->rect;
|
||||
|
||||
switch( subControl )
|
||||
{
|
||||
case SC_ScrollBarSubLine: // top/left button
|
||||
if( scrollBar->orientation == Qt::Horizontal )
|
||||
{
|
||||
rect.setRect( scrollBarRect.left() + 2, scrollBarRect.top(),
|
||||
BUTTON_LENGTH, scrollBarExtent );
|
||||
}
|
||||
else
|
||||
{
|
||||
rect.setRect( scrollBarRect.left(), scrollBarRect.top() + 2,
|
||||
scrollBarExtent, BUTTON_LENGTH );
|
||||
}
|
||||
break;
|
||||
|
||||
case SC_ScrollBarAddLine: // bottom/right button
|
||||
if( scrollBar->orientation == Qt::Horizontal )
|
||||
{
|
||||
rect.setRect( scrollBarRect.right() - 1 - BUTTON_LENGTH,
|
||||
scrollBarRect.top(), BUTTON_LENGTH, scrollBarExtent );
|
||||
}
|
||||
else
|
||||
{
|
||||
rect.setRect( scrollBarRect.left(),
|
||||
scrollBarRect.bottom() - 1 - BUTTON_LENGTH,
|
||||
scrollBarExtent, BUTTON_LENGTH );
|
||||
}
|
||||
break;
|
||||
|
||||
case SC_ScrollBarSubPage:
|
||||
if( scrollBar->orientation == Qt::Horizontal )
|
||||
{
|
||||
rect.setRect( scrollBarRect.left() + 2 + BUTTON_LENGTH,
|
||||
scrollBarRect.top(),
|
||||
sliderStart - ( scrollBarRect.left() + 2 + BUTTON_LENGTH ),
|
||||
scrollBarExtent );
|
||||
}
|
||||
else
|
||||
{
|
||||
rect.setRect( scrollBarRect.left(),
|
||||
scrollBarRect.top() + 2 + BUTTON_LENGTH, scrollBarExtent,
|
||||
sliderStart - ( scrollBarRect.left() + 2 + BUTTON_LENGTH ) );
|
||||
}
|
||||
break;
|
||||
|
||||
case SC_ScrollBarAddPage:
|
||||
if( scrollBar->orientation == Qt::Horizontal )
|
||||
{
|
||||
rect.setRect( sliderStart + sliderLength, 0,
|
||||
sliderMaxLength - sliderStart - sliderLength,
|
||||
scrollBarExtent );
|
||||
}
|
||||
else
|
||||
rect.setRect( 0, sliderStart + sliderLength, scrollBarExtent,
|
||||
sliderMaxLength - sliderStart - sliderLength );
|
||||
break;
|
||||
|
||||
case SC_ScrollBarGroove:
|
||||
if( scrollBar->orientation == Qt::Horizontal )
|
||||
{
|
||||
rect = scrollBarRect.adjusted( BUTTON_LENGTH, 0, -BUTTON_LENGTH, 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
rect = scrollBarRect.adjusted( 0, BUTTON_LENGTH, 0, -BUTTON_LENGTH );
|
||||
}
|
||||
break;
|
||||
|
||||
case SC_ScrollBarSlider:
|
||||
if( scrollBar->orientation == Qt::Horizontal )
|
||||
{
|
||||
rect.setRect( sliderStart, 0, sliderLength, scrollBarExtent );
|
||||
}
|
||||
else
|
||||
{
|
||||
rect.setRect( 0, sliderStart, scrollBarExtent, sliderLength );
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
rect = visualRect( scrollBar->direction, scrollBarRect, rect );
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return rect;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
QImage LmmsStyle::colorizeXpm( const char * const * xpm, const QBrush& fill ) const
|
||||
{
|
||||
QImage arrowXpm( xpm );
|
||||
QImage arrow( arrowXpm.size(), QImage::Format_ARGB32 );
|
||||
QPainter arrowPainter( &arrow );
|
||||
arrowPainter.fillRect( arrow.rect(), fill );
|
||||
arrowPainter.end();
|
||||
arrow.setAlphaChannel( arrowXpm );
|
||||
|
||||
return arrow;
|
||||
}
|
||||
|
||||
|
||||
void LmmsStyle::hoverColors( bool sunken, bool hover, bool active, QColor& color, QColor& blend ) const
|
||||
{
|
||||
if( active )
|
||||
{
|
||||
if( sunken )
|
||||
{
|
||||
color = QColor( 75, 75, 75 );
|
||||
blend = QColor( 65, 65, 65 );
|
||||
}
|
||||
else if( hover )
|
||||
{
|
||||
color = QColor( 100, 100, 100 );
|
||||
blend = QColor( 75, 75, 75 );
|
||||
}
|
||||
else
|
||||
{
|
||||
color = QColor( 21, 21, 21 );
|
||||
blend = QColor( 33, 33, 33 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
color = QColor( 21, 21, 21 );
|
||||
blend = QColor( 33, 33, 33 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,253 +0,0 @@
|
||||
/*
|
||||
* lmms_style.cpp - the graphical style used by LMMS to create a consistent
|
||||
* interface
|
||||
*
|
||||
* Copyright (c) 2007-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this program (see COPYING); if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301 USA.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <QtCore/QFile>
|
||||
#include <QtGui/QApplication>
|
||||
#include <QtGui/QFrame>
|
||||
#include <QtGui/QPainter>
|
||||
#include <QtGui/QStyleOption>
|
||||
|
||||
#include "lmms_style.h"
|
||||
|
||||
|
||||
lmmsStyle::lmmsStyle() :
|
||||
QPlastiqueStyle()
|
||||
{
|
||||
QFile file( "resources:style.css" );
|
||||
file.open( QIODevice::ReadOnly );
|
||||
qApp->setStyleSheet( file.readAll() );
|
||||
|
||||
qApp->setPalette( standardPalette() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
QPalette lmmsStyle::standardPalette( void ) const
|
||||
{
|
||||
QPalette pal = QPlastiqueStyle::standardPalette();
|
||||
/* pal.setColor( QPalette::Background, QColor( 91, 101, 113 ) );
|
||||
pal.setColor( QPalette::WindowText, QColor( 240, 240, 240 ) );
|
||||
pal.setColor( QPalette::Base, QColor( 128, 128, 128 ) );
|
||||
pal.setColor( QPalette::Text, QColor( 224, 224, 224 ) );
|
||||
pal.setColor( QPalette::Button, QColor( 201, 201, 201 ) );
|
||||
pal.setColor( QPalette::Shadow, QColor( 0, 0, 0 ) );
|
||||
pal.setColor( QPalette::ButtonText, QColor( 0, 0, 0 ) );
|
||||
pal.setColor( QPalette::BrightText, QColor( 74, 253, 133 ) );
|
||||
pal.setColor( QPalette::Highlight, QColor( 100, 100, 100 ) );
|
||||
pal.setColor( QPalette::HighlightedText, QColor( 255, 255, 255 ) );*/
|
||||
|
||||
QStringList paletteData = qApp->styleSheet().split( '\n' ).filter( QRegExp( "^palette:*" ) );
|
||||
foreach( QString s, paletteData )
|
||||
{
|
||||
if (s.contains("background")) { pal.setColor( QPalette::Background, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("windowtext")) { pal.setColor( QPalette::WindowText, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("base")) { pal.setColor( QPalette::Base, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("buttontext")) { pal.setColor( QPalette::ButtonText, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("brighttext")) { pal.setColor( QPalette::BrightText, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("text")) { pal.setColor( QPalette::Text, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("button")) { pal.setColor( QPalette::Button, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("shadow")) { pal.setColor( QPalette::Shadow, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("highlightedtext")) { pal.setColor( QPalette::HighlightedText, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
|
||||
else if (s.contains("highlight")) { pal.setColor( QPalette::Highlight, QColor( s.mid( s.indexOf("#"), 7 ) ) ); };
|
||||
}
|
||||
|
||||
return( pal );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void lmmsStyle::drawComplexControl( ComplexControl control,
|
||||
const QStyleOptionComplex * option,
|
||||
QPainter *painter,
|
||||
const QWidget *widget ) const
|
||||
{
|
||||
// fix broken titlebar styling on win32
|
||||
if( control == CC_TitleBar )
|
||||
{
|
||||
const QStyleOptionTitleBar * titleBar =
|
||||
qstyleoption_cast<const QStyleOptionTitleBar *>(option );
|
||||
if( titleBar )
|
||||
{
|
||||
QStyleOptionTitleBar so( *titleBar );
|
||||
so.palette = standardPalette();
|
||||
so.palette.setColor( QPalette::HighlightedText,
|
||||
( titleBar->titleBarState & State_Active ) ?
|
||||
QColor( 255, 255, 255 ) :
|
||||
QColor( 192, 192, 192 ) );
|
||||
so.palette.setColor( QPalette::Text,
|
||||
QColor( 64, 64, 64 ) );
|
||||
QPlastiqueStyle::drawComplexControl( control, &so,
|
||||
painter, widget );
|
||||
return;
|
||||
}
|
||||
}
|
||||
QPlastiqueStyle::drawComplexControl( control, option, painter, widget );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void lmmsStyle::drawPrimitive( PrimitiveElement element,
|
||||
const QStyleOption *option, QPainter *painter,
|
||||
const QWidget *widget) const
|
||||
{
|
||||
if( element == QStyle::PE_Frame ||
|
||||
element == QStyle::PE_FrameLineEdit ||
|
||||
element == QStyle::PE_PanelLineEdit )
|
||||
{
|
||||
const QRect rect = option->rect;
|
||||
|
||||
QColor black = QColor( 0, 0, 0 );
|
||||
QColor shadow = option->palette.shadow().color();
|
||||
QColor highlight = option->palette.highlight().color();
|
||||
|
||||
int a100 = 165;
|
||||
int a75 = static_cast<int>( a100 * .75 );
|
||||
int a50 = static_cast<int>( a100 * .6 );
|
||||
int a25 = static_cast<int>( a100 * .33 );
|
||||
|
||||
QLine lines[4];
|
||||
QPoint points[4];
|
||||
|
||||
// black inside lines
|
||||
// 50%
|
||||
black.setAlpha(a100);
|
||||
painter->setPen(QPen(black, 0));
|
||||
lines[0] = QLine(rect.left() + 2, rect.top() + 1,
|
||||
rect.right() - 2, rect.top() + 1);
|
||||
lines[1] = QLine(rect.left() + 2, rect.bottom() - 1,
|
||||
rect.right() - 2, rect.bottom() - 1);
|
||||
lines[2] = QLine(rect.left() + 1, rect.top() + 2,
|
||||
rect.left() + 1, rect.bottom() - 2);
|
||||
lines[3] = QLine(rect.right() - 1, rect.top() + 2,
|
||||
rect.right() - 1, rect.bottom() - 2);
|
||||
painter->drawLines(lines, 4);
|
||||
|
||||
// black inside dots
|
||||
black.setAlpha(a50);
|
||||
painter->setPen(QPen(black, 0));
|
||||
points[0] = QPoint(rect.left() + 2, rect.top() + 2);
|
||||
points[1] = QPoint(rect.left() + 2, rect.bottom() - 2);
|
||||
points[2] = QPoint(rect.right() - 2, rect.top() + 2);
|
||||
points[3] = QPoint(rect.right() - 2, rect.bottom() - 2);
|
||||
painter->drawPoints(points, 4);
|
||||
|
||||
|
||||
// outside lines - shadow
|
||||
// 100%
|
||||
shadow.setAlpha(a75);
|
||||
painter->setPen(QPen(shadow, 0));
|
||||
lines[0] = QLine(rect.left() + 2, rect.top(),
|
||||
rect.right() - 2, rect.top());
|
||||
lines[1] = QLine(rect.left(), rect.top() + 2,
|
||||
rect.left(), rect.bottom() - 2);
|
||||
painter->drawLines(lines, 2);
|
||||
|
||||
// outside corner dots - shadow
|
||||
// 75%
|
||||
shadow.setAlpha(a50);
|
||||
painter->setPen(QPen(shadow, 0));
|
||||
points[0] = QPoint(rect.left() + 1, rect.top() + 1);
|
||||
points[1] = QPoint(rect.right() - 1, rect.top() + 1);
|
||||
painter->drawPoints(points, 2);
|
||||
|
||||
// outside end dots - shadow
|
||||
// 50%
|
||||
shadow.setAlpha(a25);
|
||||
painter->setPen(QPen(shadow, 0));
|
||||
points[0] = QPoint(rect.left() + 1, rect.top());
|
||||
points[1] = QPoint(rect.left(), rect.top() + 1);
|
||||
points[2] = QPoint(rect.right() - 1, rect.top());
|
||||
points[3] = QPoint(rect.left(), rect.bottom() - 1);
|
||||
painter->drawPoints(points, 4);
|
||||
|
||||
|
||||
// outside lines - highlight
|
||||
// 100%
|
||||
highlight.setAlpha(a75);
|
||||
painter->setPen(QPen(highlight, 0));
|
||||
lines[0] = QLine(rect.left() + 2, rect.bottom(),
|
||||
rect.right() - 2, rect.bottom());
|
||||
lines[1] = QLine(rect.right(), rect.top() + 2,
|
||||
rect.right(), rect.bottom() - 2);
|
||||
painter->drawLines(lines, 2);
|
||||
|
||||
// outside corner dots - highlight
|
||||
// 75%
|
||||
highlight.setAlpha(a50);
|
||||
painter->setPen(QPen(highlight, 0));
|
||||
points[0] = QPoint(rect.left() + 1, rect.bottom() - 1);
|
||||
points[1] = QPoint(rect.right() - 1, rect.bottom() - 1);
|
||||
painter->drawPoints(points, 2);
|
||||
|
||||
// outside end dots - highlight
|
||||
// 50%
|
||||
highlight.setAlpha(a25);
|
||||
painter->setPen(QPen(highlight, 0));
|
||||
points[0] = QPoint(rect.right() - 1, rect.bottom());
|
||||
points[1] = QPoint(rect.right(), rect.bottom() - 1);
|
||||
points[2] = QPoint(rect.left() + 1, rect.bottom());
|
||||
points[3] = QPoint(rect.right(), rect.top() + 1);
|
||||
painter->drawPoints(points, 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
QPlastiqueStyle::drawPrimitive( element, option, painter,
|
||||
widget );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
int lmmsStyle::pixelMetric( PixelMetric _metric, const QStyleOption * _option,
|
||||
const QWidget * _widget ) const
|
||||
{
|
||||
switch( _metric )
|
||||
{
|
||||
case QStyle::PM_ButtonMargin:
|
||||
return 3;
|
||||
|
||||
case QStyle::PM_ButtonIconSize:
|
||||
return 20;
|
||||
|
||||
case QStyle::PM_ToolBarItemMargin:
|
||||
return 1;
|
||||
|
||||
case QStyle::PM_ToolBarItemSpacing:
|
||||
return 2;
|
||||
|
||||
case QStyle::PM_TitleBarHeight:
|
||||
return 24;
|
||||
|
||||
default:
|
||||
return QPlastiqueStyle::pixelMetric( _metric, _option,
|
||||
_widget );
|
||||
}
|
||||
}
|
||||
|
||||
// QStyle::SH_TitleBar_NoBorder
|
||||
@@ -618,7 +618,7 @@ pianoRoll::pianoRoll() :
|
||||
if( engine::mainWindow()->workspace() )
|
||||
{
|
||||
engine::mainWindow()->workspace()->addSubWindow( this );
|
||||
parentWidget()->setMinimumWidth( tb_layout->minimumSize().width()+10 );
|
||||
parentWidget()->setMinimumSize( tb_layout->minimumSize().width()+10, 200 );
|
||||
parentWidget()->resize( tb_layout->minimumSize().width()+10,
|
||||
INITIAL_PIANOROLL_HEIGHT );
|
||||
parentWidget()->hide();
|
||||
@@ -917,6 +917,9 @@ inline void pianoRoll::drawDetuningInfo( QPainter & _p, note * _n, int _x,
|
||||
int middle_y = _y + KEY_LINE_HEIGHT / 2;
|
||||
_p.setPen( QColor( 0xFF, 0xDF, 0x20 ) );
|
||||
|
||||
int old_x = 0;
|
||||
int old_y = 0;
|
||||
|
||||
timeMap & map = _n->detuning()->automationPattern()->getTimeMap();
|
||||
for( timeMap::ConstIterator it = map.begin(); it != map.end(); ++it )
|
||||
{
|
||||
@@ -929,10 +932,28 @@ inline void pianoRoll::drawDetuningInfo( QPainter & _p, note * _n, int _x,
|
||||
|
||||
const float level = it.value();
|
||||
|
||||
int pos_y = (int)( middle_y - level * KEY_LINE_HEIGHT / 10 );
|
||||
int pos_y = (int)( middle_y - level * KEY_LINE_HEIGHT );
|
||||
|
||||
if( old_x != 0 && old_y != 0 )
|
||||
{
|
||||
switch( _n->detuning()->automationPattern()->progressionType() )
|
||||
{
|
||||
case AutomationPattern::DiscreteProgression:
|
||||
_p.drawLine( old_x, old_y, pos_x, old_y );
|
||||
_p.drawLine( pos_x, old_y, pos_x, pos_y );
|
||||
break;
|
||||
case AutomationPattern::CubicHermiteProgression: /* TODO */
|
||||
case AutomationPattern::LinearProgression:
|
||||
_p.drawLine( old_x, old_y, pos_x, pos_y );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
_p.drawLine( pos_x - 1, pos_y, pos_x + 1, pos_y );
|
||||
_p.drawLine( pos_x, pos_y - 1, pos_x, pos_y + 1 );
|
||||
|
||||
old_x = pos_x;
|
||||
old_y = pos_y;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user