@@ -45,9 +45,102 @@
|
||||
#include "interpolation.h"
|
||||
#include "MemoryManager.h"
|
||||
|
||||
//#include <iostream>
|
||||
//#include <cstdlib>
|
||||
template<ch_cnt_t CHANNELS> class BasicFilters;
|
||||
|
||||
template<ch_cnt_t CHANNELS>
|
||||
class LinkwitzRiley
|
||||
{
|
||||
MM_OPERATORS
|
||||
public:
|
||||
LinkwitzRiley( float sampleRate )
|
||||
{
|
||||
m_sampleRate = sampleRate;
|
||||
clearHistory();
|
||||
}
|
||||
virtual ~LinkwitzRiley() {}
|
||||
|
||||
inline void clearHistory()
|
||||
{
|
||||
for( int i = 0; i < CHANNELS; ++i )
|
||||
{
|
||||
m_z1[i] = m_z2[i] = m_z3[i] = m_z4[i] = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
inline void setSampleRate( float sampleRate )
|
||||
{
|
||||
m_sampleRate = sampleRate;
|
||||
}
|
||||
|
||||
inline void setCoeffs( float freq )
|
||||
{
|
||||
// wc
|
||||
const float wc = F_2PI * freq;
|
||||
const float wc2 = wc * wc;
|
||||
const float wc3 = wc2 * wc;
|
||||
m_wc4 = wc2 * wc2;
|
||||
|
||||
// k
|
||||
const float k = wc / tanf( F_PI * freq / m_sampleRate );
|
||||
const float k2 = k * k;
|
||||
const float k3 = k2 * k;
|
||||
m_k4 = k2 * k2;
|
||||
|
||||
// a
|
||||
static const float sqrt2 = sqrtf( 2.0f );
|
||||
const float sq_tmp1 = sqrt2 * wc3 * k;
|
||||
const float sq_tmp2 = sqrt2 * wc * k3;
|
||||
m_a = 4.0f * wc2 * k2 + 2.0f * sq_tmp1 + m_k4 + 2.0f * sq_tmp2 + m_wc4;
|
||||
|
||||
// b
|
||||
m_b1 = ( 4.0f * ( m_wc4 + sq_tmp1 - m_k4 - sq_tmp2 ) ) / m_a;
|
||||
m_b2 = ( 6.0f * m_wc4 - 8.0f * wc2 * k2 + 6.0f * m_k4 ) / m_a;
|
||||
m_b3 = ( 4.0f * ( m_wc4 - sq_tmp1 + sq_tmp2 - m_k4 ) ) / m_a;
|
||||
m_b4 = ( m_k4 - 2.0f * sq_tmp1 + m_wc4 - 2.0f * sq_tmp2 + 4.0f * wc2 * k2 ) / m_a;
|
||||
}
|
||||
|
||||
inline void setLowpass( float freq )
|
||||
{
|
||||
setCoeffs( freq );
|
||||
m_a0 = m_wc4 / m_a;
|
||||
m_a1 = 4.0f * m_a0;
|
||||
m_a2 = 6.0f * m_a0;
|
||||
}
|
||||
|
||||
inline void setHighpass( float freq )
|
||||
{
|
||||
setCoeffs( freq );
|
||||
m_a0 = m_k4 / m_a;
|
||||
m_a1 = 4.0f * m_a0;
|
||||
m_a2 = 6.0f * m_a0;
|
||||
}
|
||||
|
||||
inline float update( float in, ch_cnt_t ch )
|
||||
{
|
||||
const float a0in = m_a0 * in;
|
||||
const float a1in = m_a1 * in;
|
||||
const float out = m_z1[ch] + a0in;
|
||||
|
||||
m_z1[ch] = a1in + m_z2[ch] - ( m_b1 * out );
|
||||
m_z2[ch] = ( m_a2 * in ) + m_z3[ch] - ( m_b2 * out );
|
||||
m_z3[ch] = a1in + m_z4[ch] - ( m_b3 * out );
|
||||
m_z4[ch] = a0in - ( m_b4 * out );
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
private:
|
||||
float m_sampleRate;
|
||||
float m_wc4;
|
||||
float m_k4;
|
||||
float m_a, m_a0, m_a1, m_a2;
|
||||
float m_b1, m_b2, m_b3, m_b4;
|
||||
|
||||
typedef float frame[CHANNELS];
|
||||
frame m_z1, m_z2, m_z3, m_z4;
|
||||
};
|
||||
typedef LinkwitzRiley<2> StereoLinkwitzRiley;
|
||||
|
||||
template<ch_cnt_t CHANNELS>
|
||||
class BiQuad
|
||||
{
|
||||
|
||||
@@ -69,8 +69,6 @@ public:
|
||||
|
||||
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,
|
||||
@@ -85,9 +83,6 @@ 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;
|
||||
|
||||
static QPalette * s_palette;
|
||||
|
||||
private:
|
||||
|
||||
@@ -145,6 +145,7 @@ private:
|
||||
void finalize();
|
||||
|
||||
void toggleWindow( QWidget *window, bool forceShow = false );
|
||||
void refocus();
|
||||
|
||||
|
||||
QMdiArea * m_workspace;
|
||||
|
||||
@@ -50,7 +50,7 @@ MultitapEchoEffect::MultitapEchoEffect( Model* parent, const Descriptor::SubPlug
|
||||
Effect( &multitapecho_plugin_descriptor, parent, key ),
|
||||
m_stages( 1 ),
|
||||
m_controls( this ),
|
||||
m_buffer( 20100.0f ),
|
||||
m_buffer( 16100.0f ),
|
||||
m_sampleRate( Engine::mixer()->processingSampleRate() ),
|
||||
m_sampleRatio( 1.0f / m_sampleRate )
|
||||
{
|
||||
|
||||
@@ -35,7 +35,7 @@ MultitapEchoControls::MultitapEchoControls( MultitapEchoEffect * eff ) :
|
||||
EffectControls( eff ),
|
||||
m_effect( eff ),
|
||||
m_steps( 16, 4, 32, this, "Steps" ),
|
||||
m_stepLength( 100.0f, 1.0f, 1000.0f, 0.1f, 1000.0f, this, "Step length" ),
|
||||
m_stepLength( 100.0f, 1.0f, 500.0f, 0.1f, 500.0f, this, "Step length" ),
|
||||
m_dryGain( 0.0f, -80.0f, 20.0f, 0.1f, this, "Dry gain" ),
|
||||
m_swapInputs( false, this, "Swap inputs" ),
|
||||
m_stages( 1.0f, 1.0f, 4.0f, 1.0f, this, "Lowpass stages" ),
|
||||
|
||||
@@ -56,7 +56,7 @@ RingBuffer::RingBuffer( float size ) :
|
||||
|
||||
RingBuffer::~RingBuffer()
|
||||
{
|
||||
delete m_buffer;
|
||||
delete[] m_buffer;
|
||||
}
|
||||
|
||||
|
||||
@@ -308,7 +308,7 @@ void RingBuffer::updateSamplerate()
|
||||
float newsize = static_cast<float>( ( m_size - m_fpp ) * Engine::mixer()->processingSampleRate() ) / m_samplerate;
|
||||
m_size = static_cast<f_cnt_t>( ceilf( newsize ) ) + m_fpp;
|
||||
m_samplerate = Engine::mixer()->processingSampleRate();
|
||||
delete m_buffer;
|
||||
delete[] m_buffer;
|
||||
m_buffer = new sampleFrame[ m_size ];
|
||||
memset( m_buffer, 0, m_size * sizeof( sampleFrame ) );
|
||||
m_position = 0;
|
||||
|
||||
@@ -149,7 +149,9 @@ SampleBuffer::SampleBuffer( const f_cnt_t _frames ) :
|
||||
|
||||
SampleBuffer::~SampleBuffer()
|
||||
{
|
||||
MM_FREE( m_origData );
|
||||
if( m_origData != NULL )
|
||||
MM_FREE( m_origData );
|
||||
|
||||
MM_FREE( m_data );
|
||||
}
|
||||
|
||||
@@ -1477,11 +1479,3 @@ SampleBuffer::handleState::~handleState()
|
||||
{
|
||||
src_delete( m_resamplingData );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* vim: set tw=0 noexpandtab: */
|
||||
|
||||
@@ -542,6 +542,3 @@ int main( int argc, char * * argv )
|
||||
|
||||
return( ret );
|
||||
}
|
||||
|
||||
|
||||
/* vim: set tw=0 noexpandtab: */
|
||||
|
||||
@@ -340,10 +340,3 @@ void ExportProjectDialog::updateTitleBar( int _prog )
|
||||
Engine::mainWindow()->setWindowTitle(
|
||||
tr( "Rendering: %1%" ).arg( _prog ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* vim: set tw=0 noexpandtab: */
|
||||
|
||||
@@ -35,78 +35,6 @@
|
||||
#include "LmmsStyle.h"
|
||||
#include "LmmsPalette.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",
|
||||
"...+@@",
|
||||
"..#$$%",
|
||||
"&%$$$%",
|
||||
"@$$$$%",
|
||||
"&%$$$%",
|
||||
"..#$$%",
|
||||
"...+@@"};
|
||||
|
||||
QPalette * LmmsStyle::s_palette = NULL;
|
||||
|
||||
QLinearGradient getGradient( const QColor & _col, const QRectF & _rect )
|
||||
@@ -226,196 +154,6 @@ QPalette LmmsStyle::standardPalette( void ) const
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
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:
|
||||
QProxyStyle::drawControl( element, option, painter, widget );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
void LmmsStyle::drawComplexControl( ComplexControl control,
|
||||
const QStyleOptionComplex * option,
|
||||
QPainter *painter,
|
||||
@@ -589,174 +327,6 @@ int LmmsStyle::pixelMetric( PixelMetric _metric, const QStyleOption * _option,
|
||||
}
|
||||
}
|
||||
|
||||
// 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 QProxyStyle::sizeFromContents( type, option, size, widget );
|
||||
}
|
||||
*/
|
||||
/*
|
||||
QRect LmmsStyle::subControlRect( ComplexControl control, const QStyleOptionComplex* option, SubControl subControl, const QWidget* widget ) const
|
||||
{
|
||||
QRect rect = QProxyStyle::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
|
||||
{
|
||||
|
||||
@@ -99,24 +99,24 @@ MainWindow::MainWindow() :
|
||||
ConfigManager::inst()->userProjectsDir() + "*" +
|
||||
ConfigManager::inst()->factoryProjectsDir(),
|
||||
"*.mmp *.mmpz *.xml *.mid *.flp",
|
||||
tr( "My projects" ),
|
||||
tr( "My Projects" ),
|
||||
embed::getIconPixmap( "project_file" ).transformed( QTransform().rotate( 90 ) ),
|
||||
splitter ) );
|
||||
sideBar->appendTab( new FileBrowser(
|
||||
ConfigManager::inst()->userSamplesDir() + "*" +
|
||||
ConfigManager::inst()->factorySamplesDir(),
|
||||
"*", tr( "My samples" ),
|
||||
"*", tr( "My Samples" ),
|
||||
embed::getIconPixmap( "sample_file" ).transformed( QTransform().rotate( 90 ) ),
|
||||
splitter ) );
|
||||
sideBar->appendTab( new FileBrowser(
|
||||
ConfigManager::inst()->userPresetsDir() + "*" +
|
||||
ConfigManager::inst()->factoryPresetsDir(),
|
||||
"*.xpf *.cs.xml *.xiz",
|
||||
tr( "My presets" ),
|
||||
tr( "My Presets" ),
|
||||
embed::getIconPixmap( "preset_file" ).transformed( QTransform().rotate( 90 ) ),
|
||||
splitter ) );
|
||||
sideBar->appendTab( new FileBrowser( QDir::homePath(), "*",
|
||||
tr( "My home" ),
|
||||
tr( "My Home" ),
|
||||
embed::getIconPixmap( "home" ).transformed( QTransform().rotate( 90 ) ),
|
||||
splitter ) );
|
||||
|
||||
@@ -132,11 +132,11 @@ MainWindow::MainWindow() :
|
||||
#endif
|
||||
sideBar->appendTab( new FileBrowser( root_paths.join( "*" ), "*",
|
||||
#ifdef LMMS_BUILD_WIN32
|
||||
tr( "My computer" ),
|
||||
tr( "My Computer" ),
|
||||
#elif defined(LMMS_BUILD_APPLE)
|
||||
tr( "Volumes" ),
|
||||
#else
|
||||
tr( "Root directory" ),
|
||||
tr( "Root Directory" ),
|
||||
#endif
|
||||
|
||||
embed::getIconPixmap( "computer" ).transformed( QTransform().rotate( 90 ) ),
|
||||
@@ -245,7 +245,7 @@ void MainWindow::finalize()
|
||||
|
||||
m_recentlyOpenedProjectsMenu = project_menu->addMenu(
|
||||
embed::getIconPixmap( "project_open_recent" ),
|
||||
tr( "&Recently opened projects" ) );
|
||||
tr( "&Recently Opened Projects" ) );
|
||||
connect( m_recentlyOpenedProjectsMenu, SIGNAL( aboutToShow() ),
|
||||
this, SLOT( updateRecentlyOpenedProjectsMenu() ) );
|
||||
connect( m_recentlyOpenedProjectsMenu, SIGNAL( triggered( QAction * ) ),
|
||||
@@ -257,7 +257,7 @@ void MainWindow::finalize()
|
||||
Qt::CTRL + Qt::Key_S );
|
||||
|
||||
project_menu->addAction( embed::getIconPixmap( "project_save" ),
|
||||
tr( "Save as new &version" ),
|
||||
tr( "Save as New &Version" ),
|
||||
this, SLOT( saveProjectAsNewVersion() ),
|
||||
Qt::CTRL + Qt::ALT + Qt::Key_S );
|
||||
project_menu->addAction( embed::getIconPixmap( "project_saveas" ),
|
||||
@@ -275,7 +275,7 @@ void MainWindow::finalize()
|
||||
SLOT( exportProject() ),
|
||||
Qt::CTRL + Qt::Key_E );
|
||||
project_menu->addAction( embed::getIconPixmap( "project_export" ),
|
||||
tr( "E&xport tracks..." ),
|
||||
tr( "E&xport Tracks..." ),
|
||||
Engine::getSong(),
|
||||
SLOT( exportProjectTracks() ),
|
||||
Qt::CTRL + Qt::SHIFT + Qt::Key_E );
|
||||
@@ -331,7 +331,7 @@ void MainWindow::finalize()
|
||||
if( true )
|
||||
{
|
||||
help_menu->addAction( embed::getIconPixmap( "help" ),
|
||||
tr( "Online help" ),
|
||||
tr( "Online Help" ),
|
||||
this, SLOT( browseHelp() ) );
|
||||
}
|
||||
else
|
||||
@@ -341,7 +341,7 @@ void MainWindow::finalize()
|
||||
this, SLOT( help() ) );
|
||||
}
|
||||
help_menu->addAction( embed::getIconPixmap( "whatsthis" ),
|
||||
tr( "What's this?" ),
|
||||
tr( "What's This?" ),
|
||||
this, SLOT( enterWhatsThisMode() ) );
|
||||
|
||||
help_menu->addSeparator();
|
||||
@@ -721,7 +721,7 @@ void MainWindow::openProject()
|
||||
{
|
||||
if( mayChangeProject() )
|
||||
{
|
||||
FileDialog ofd( this, tr( "Open project" ), "", tr( "LMMS (*.mmp *.mmpz)" ) );
|
||||
FileDialog ofd( this, tr( "Open Project" ), "", tr( "LMMS (*.mmp *.mmpz)" ) );
|
||||
|
||||
ofd.setDirectory( ConfigManager::inst()->userProjectsDir() );
|
||||
ofd.setFileMode( FileDialog::ExistingFiles );
|
||||
@@ -786,7 +786,7 @@ bool MainWindow::saveProject()
|
||||
|
||||
bool MainWindow::saveProjectAs()
|
||||
{
|
||||
VersionedSaveDialog sfd( this, tr( "Save project" ), "",
|
||||
VersionedSaveDialog sfd( this, tr( "Save Project" ), "",
|
||||
tr( "LMMS Project (*.mmpz *.mmp);;"
|
||||
"LMMS Project Template (*.mpt)" ) );
|
||||
QString f = Engine::getSong()->projectFileName();
|
||||
@@ -879,6 +879,7 @@ void MainWindow::toggleWindow( QWidget *window, bool forceShow )
|
||||
else
|
||||
{
|
||||
parent->hide();
|
||||
refocus();
|
||||
}
|
||||
|
||||
// Workaround for Qt Bug #260116
|
||||
@@ -891,6 +892,38 @@ void MainWindow::toggleWindow( QWidget *window, bool forceShow )
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* When an editor window with focus is toggled off, attempt to set focus
|
||||
* to the next visible editor window, or if none are visible, set focus
|
||||
* to the parent window.
|
||||
*/
|
||||
void MainWindow::refocus()
|
||||
{
|
||||
QList<QWidget*> editors;
|
||||
editors
|
||||
<< Engine::songEditor()->parentWidget()
|
||||
<< Engine::getBBEditor()->parentWidget()
|
||||
<< Engine::pianoRoll()->parentWidget()
|
||||
<< Engine::automationEditor()->parentWidget();
|
||||
|
||||
bool found = false;
|
||||
QList<QWidget*>::Iterator editor;
|
||||
for( editor = editors.begin(); editor != editors.end(); ++editor )
|
||||
{
|
||||
if( ! (*editor)->isHidden() ) {
|
||||
(*editor)->setFocus();
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( ! found )
|
||||
this->setFocus();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void MainWindow::toggleBBEditorWin( bool forceShow )
|
||||
{
|
||||
toggleWindow( Engine::getBBEditor(), forceShow );
|
||||
|
||||
@@ -790,11 +790,3 @@ bool SongEditor::allowRubberband() const
|
||||
{
|
||||
return( m_editModeButton->isChecked() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* vim: set tw=0 noexpandtab: */
|
||||
|
||||
Reference in New Issue
Block a user