From b45c0c5f027efe5943be8660ea7fa0b2cf87b8f5 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Tue, 18 Mar 2014 20:34:34 +0100 Subject: [PATCH 1/5] MainWindow: coding style improvements --- include/MainWindow.h | 91 ++++++++++++++---------------- src/gui/MainWindow.cpp | 59 +++++++++++-------- src/gui/widgets/ControllerView.cpp | 3 +- src/gui/widgets/EffectView.cpp | 1 + src/gui/widgets/knob.cpp | 1 + 5 files changed, 82 insertions(+), 73 deletions(-) diff --git a/include/MainWindow.h b/include/MainWindow.h index 8a10f1351..9d713431d 100644 --- a/include/MainWindow.h +++ b/include/MainWindow.h @@ -1,8 +1,8 @@ /* - * main_window.h - declaration of class MainWindow, the main window of LMMS + * MainWindow.h - declaration of class MainWindow, the main window of LMMS + * + * Copyright (c) 2004-2014 Tobias Doerffel * - * Copyright (c) 2004-2013 Tobias Doerffel - * * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net * * This program is free software; you can redistribute it and/or @@ -22,15 +22,13 @@ * */ - -#ifndef _MAIN_WINDOW_H -#define _MAIN_WINDOW_H +#ifndef MAIN_WINDOW_H +#define MAIN_WINDOW_H #include #include #include #include -#include class QAction; class QDomElement; @@ -46,14 +44,14 @@ class MainWindow : public QMainWindow { Q_OBJECT public: - inline QMdiArea * workspace( void ) + QMdiArea* workspace() { - return( m_workspace ); + return m_workspace; } - inline QWidget * toolBar( void ) + QWidget* toolBar() { - return( m_toolBar ); + return m_toolBar; } int addWidgetToToolBar( QWidget * _w, int _row = -1, int _col = -1 ); @@ -63,24 +61,24 @@ public: // every function that replaces current file (e.g. creates new file, // opens another file...) has to call this before and may only process // if this function returns true - bool mayChangeProject( void ); + bool mayChangeProject(); - void clearKeyModifiers( void ); + void clearKeyModifiers(); - inline bool isCtrlPressed( void ) + bool isCtrlPressed() { - return( m_keyMods.m_ctrl ); + return m_keyMods.m_ctrl; } - inline bool isShiftPressed( void ) + bool isShiftPressed() { - return( m_keyMods.m_shift ); + return m_keyMods.m_shift; } - inline bool isAltPressed( void ) + bool isAltPressed() { - return( m_keyMods.m_alt ); + return m_keyMods.m_alt; } static void saveWidgetState( QWidget * _w, QDomElement & _de ); @@ -88,34 +86,29 @@ public: public slots: - void resetWindowTitle( void ); + void resetWindowTitle(); - inline void emptySlot( void ) - { - } - inline void enterWhatsThisMode( void ) - { - QWhatsThis::enterWhatsThisMode(); - } - void createNewProject( void ); + void emptySlot(); + void enterWhatsThisMode(); + void createNewProject(); void createNewProjectFromTemplate( QAction * _idx ); - void openProject( void ); - bool saveProject( void ); - bool saveProjectAs( void ); - bool saveProjectAsNewVersion( void ); - void showSettingsDialog( void ); - void aboutLMMS( void ); - void help( void ); - void toggleAutomationEditorWin( void ); + void openProject(); + bool saveProject(); + bool saveProjectAs(); + bool saveProjectAsNewVersion(); + void showSettingsDialog(); + void aboutLMMS(); + void help(); + void toggleAutomationEditorWin(); void toggleBBEditorWin( bool forceShow = false ); - void toggleSongEditorWin( void ); - void toggleProjectNotesWin( void ); - void toggleFxMixerWin( void ); - void togglePianoRollWin( void ); - void toggleControllerRack( void ); + void toggleSongEditorWin(); + void toggleProjectNotesWin(); + void toggleFxMixerWin(); + void togglePianoRollWin(); + void toggleControllerRack(); - void undo( void ); - void redo( void ); + void undo(); + void redo(); protected: @@ -127,11 +120,11 @@ protected: private: - MainWindow( void ); + MainWindow(); MainWindow( const MainWindow & ); virtual ~MainWindow(); - void finalize( void ); + void finalize(); void toggleWindow( QWidget *window, bool forceShow = false ); @@ -169,17 +162,17 @@ private: private slots: - void browseHelp( void ); - void fillTemplatesMenu( void ); + void browseHelp(); + void fillTemplatesMenu(); void openRecentlyOpenedProject( QAction * _action ); void showTool( QAction * _idx ); - void updateRecentlyOpenedProjectsMenu( void ); + void updateRecentlyOpenedProjectsMenu(); void autoSave(); signals: - void periodicUpdate( void ); + void periodicUpdate(); } ; diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 45595546a..a6e2451c4 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include "lmmsversion.h" #include "MainWindow.h" @@ -67,7 +68,7 @@ -MainWindow::MainWindow( void ) : +MainWindow::MainWindow() : m_workspace( NULL ), m_templatesMenu( NULL ), m_recentlyOpenedProjectsMenu( NULL ), @@ -211,7 +212,7 @@ MainWindow::~MainWindow() -void MainWindow::finalize( void ) +void MainWindow::finalize() { resetWindowTitle(); setWindowIcon( embed::getIconPixmap( "icon" ) ); @@ -542,7 +543,7 @@ void MainWindow::addSpacingToToolBar( int _size ) -void MainWindow::resetWindowTitle( void ) +void MainWindow::resetWindowTitle() { QString title = ""; if( engine::getSong()->projectFileName() != "" ) @@ -564,7 +565,7 @@ void MainWindow::resetWindowTitle( void ) -bool MainWindow::mayChangeProject( void ) +bool MainWindow::mayChangeProject() { engine::getSong()->stop(); @@ -599,7 +600,7 @@ bool MainWindow::mayChangeProject( void ) -void MainWindow::clearKeyModifiers( void ) +void MainWindow::clearKeyModifiers() { m_keyMods.m_ctrl = FALSE; m_keyMods.m_shift = FALSE; @@ -658,8 +659,20 @@ void MainWindow::restoreWidgetState( QWidget * _w, const QDomElement & _de ) +void MainWindow::emptySlot() +{ +} -void MainWindow::createNewProject( void ) + + +void MainWindow::enterWhatsThisMode() +{ + QWhatsThis::enterWhatsThisMode(); +} + + + +void MainWindow::createNewProject() { if( mayChangeProject() ) { @@ -708,7 +721,7 @@ void MainWindow::openProject() -void MainWindow::updateRecentlyOpenedProjectsMenu( void ) +void MainWindow::updateRecentlyOpenedProjectsMenu() { m_recentlyOpenedProjectsMenu->clear(); QStringList rup = configManager::inst()->recentlyOpenedProjects(); @@ -734,7 +747,7 @@ void MainWindow::openRecentlyOpenedProject( QAction * _action ) -bool MainWindow::saveProject( void ) +bool MainWindow::saveProject() { if( engine::getSong()->projectFileName() == "" ) { @@ -750,7 +763,7 @@ bool MainWindow::saveProject( void ) -bool MainWindow::saveProjectAs( void ) +bool MainWindow::saveProjectAs() { VersionedSaveDialog sfd( this, tr( "Save project" ), "", tr( "LMMS Project (*.mmpz *.mmp);;" @@ -779,7 +792,7 @@ bool MainWindow::saveProjectAs( void ) -bool MainWindow::saveProjectAsNewVersion( void ) +bool MainWindow::saveProjectAsNewVersion() { QString fileName = engine::getSong()->projectFileName(); if( fileName == "" ) @@ -799,7 +812,7 @@ bool MainWindow::saveProjectAsNewVersion( void ) -void MainWindow::showSettingsDialog( void ) +void MainWindow::showSettingsDialog() { setupDialog sd; sd.exec(); @@ -808,7 +821,7 @@ void MainWindow::showSettingsDialog( void ) -void MainWindow::aboutLMMS( void ) +void MainWindow::aboutLMMS() { aboutDialog().exec(); } @@ -816,7 +829,7 @@ void MainWindow::aboutLMMS( void ) -void MainWindow::help( void ) +void MainWindow::help() { QMessageBox::information( this, tr( "Help not available" ), tr( "Currently there's no help " @@ -865,7 +878,7 @@ void MainWindow::toggleBBEditorWin( bool forceShow ) -void MainWindow::toggleSongEditorWin( void ) +void MainWindow::toggleSongEditorWin() { toggleWindow( engine::songEditor() ); } @@ -873,7 +886,7 @@ void MainWindow::toggleSongEditorWin( void ) -void MainWindow::toggleProjectNotesWin( void ) +void MainWindow::toggleProjectNotesWin() { toggleWindow( engine::getProjectNotes() ); } @@ -881,7 +894,7 @@ void MainWindow::toggleProjectNotesWin( void ) -void MainWindow::togglePianoRollWin( void ) +void MainWindow::togglePianoRollWin() { toggleWindow( engine::pianoRoll() ); } @@ -889,7 +902,7 @@ void MainWindow::togglePianoRollWin( void ) -void MainWindow::toggleAutomationEditorWin( void ) +void MainWindow::toggleAutomationEditorWin() { toggleWindow( engine::automationEditor() ); } @@ -897,7 +910,7 @@ void MainWindow::toggleAutomationEditorWin( void ) -void MainWindow::toggleFxMixerWin( void ) +void MainWindow::toggleFxMixerWin() { toggleWindow( engine::fxMixerView() ); } @@ -905,7 +918,7 @@ void MainWindow::toggleFxMixerWin( void ) -void MainWindow::toggleControllerRack( void ) +void MainWindow::toggleControllerRack() { toggleWindow( engine::getControllerRackView() ); } @@ -913,7 +926,7 @@ void MainWindow::toggleControllerRack( void ) -void MainWindow::undo( void ) +void MainWindow::undo() { engine::projectJournal()->undo(); } @@ -921,7 +934,7 @@ void MainWindow::undo( void ) -void MainWindow::redo( void ) +void MainWindow::redo() { engine::projectJournal()->redo(); } @@ -1015,7 +1028,7 @@ void MainWindow::timerEvent( QTimerEvent * _te) -void MainWindow::fillTemplatesMenu( void ) +void MainWindow::fillTemplatesMenu() { m_templatesMenu->clear(); @@ -1064,7 +1077,7 @@ void MainWindow::showTool( QAction * _idx ) -void MainWindow::browseHelp( void ) +void MainWindow::browseHelp() { // file:// alternative for offline help QString url = "http://lmms.sf.net/wiki/index.php?title=Main_Page"; diff --git a/src/gui/widgets/ControllerView.cpp b/src/gui/widgets/ControllerView.cpp index 3fe10d720..936412b33 100644 --- a/src/gui/widgets/ControllerView.cpp +++ b/src/gui/widgets/ControllerView.cpp @@ -2,7 +2,7 @@ * ControllerView.cpp - view-component for an controller * * Copyright (c) 2008-2009 Paul Giblock - * Copyright (c) 2011 Tobias Doerffel + * Copyright (c) 2011-2014 Tobias Doerffel * * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net * @@ -30,6 +30,7 @@ #include #include #include +#include #include "ControllerView.h" diff --git a/src/gui/widgets/EffectView.cpp b/src/gui/widgets/EffectView.cpp index d61adc966..e4c01bed8 100644 --- a/src/gui/widgets/EffectView.cpp +++ b/src/gui/widgets/EffectView.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include "EffectView.h" #include "caption_menu.h" diff --git a/src/gui/widgets/knob.cpp b/src/gui/widgets/knob.cpp index 73f00d84a..008ad62d2 100644 --- a/src/gui/widgets/knob.cpp +++ b/src/gui/widgets/knob.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #ifndef __USE_XOPEN #define __USE_XOPEN From 41c154dc954f9fea2a770eb6f9856084544ecee3 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Tue, 18 Mar 2014 20:39:52 +0100 Subject: [PATCH 2/5] Control play/pause buttons in slot of MainWindow via signal in Song class The engine class as the component instance manager is the wrong place to control the play/pause buttons. Instead emit a signal in the Song class and update the buttons in a slot in MainWindow. This fixes problems with GUI/pixmap operations happening outside the GUI thread when exporting a project. Closes #435. --- include/MainWindow.h | 2 ++ include/engine.h | 2 -- include/song.h | 1 + src/core/engine.cpp | 36 ------------------------------------ src/core/song.cpp | 17 ++++++----------- src/gui/MainWindow.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 48 insertions(+), 49 deletions(-) diff --git a/include/MainWindow.h b/include/MainWindow.h index 9d713431d..c621059ad 100644 --- a/include/MainWindow.h +++ b/include/MainWindow.h @@ -107,6 +107,8 @@ public slots: void togglePianoRollWin(); void toggleControllerRack(); + void updatePlayPauseIcons(); + void undo(); void redo(); diff --git a/include/engine.h b/include/engine.h index 8310c4d90..a4fc34c3e 100644 --- a/include/engine.h +++ b/include/engine.h @@ -147,8 +147,6 @@ public: return s_controllerRackView; } - static void updatePlayPauseIcons(); - static float framesPerTick() { return s_framesPerTick; diff --git a/include/song.h b/include/song.h index f0d93e186..0fb2a2047 100644 --- a/include/song.h +++ b/include/song.h @@ -360,6 +360,7 @@ private: signals: void projectLoaded(); + void playbackStateChanged(); void lengthChanged( int _tacts ); void tempoChanged( bpm_t _new_bpm ); void timeSignatureChanged( int _old_ticks_per_tact, diff --git a/src/core/engine.cpp b/src/core/engine.cpp index 983cd7160..58323681f 100644 --- a/src/core/engine.cpp +++ b/src/core/engine.cpp @@ -146,42 +146,6 @@ void engine::destroy() -void engine::updatePlayPauseIcons() -{ - s_songEditor->setPauseIcon( false ); - s_automationEditor->setPauseIcon( false ); - s_bbEditor->setPauseIcon( false ); - s_pianoRoll->setPauseIcon( false ); - - if( s_song->isPlaying() ) - { - switch( s_song->playMode() ) - { - case song::Mode_PlaySong: - s_songEditor->setPauseIcon( true ); - break; - - case song::Mode_PlayAutomationPattern: - s_automationEditor->setPauseIcon( true ); - break; - - case song::Mode_PlayBB: - s_bbEditor->setPauseIcon( true ); - break; - - case song::Mode_PlayPattern: - s_pianoRoll->setPauseIcon( true ); - break; - - default: - break; - } - } -} - - - - void engine::updateFramesPerTick() { s_framesPerTick = s_mixer->processingSampleRate() * 60.0f * 4 / diff --git a/src/core/song.cpp b/src/core/song.cpp index 04632bc94..5961a3ea3 100644 --- a/src/core/song.cpp +++ b/src/core/song.cpp @@ -404,10 +404,7 @@ void song::playSong() savePos(); - if( QApplication::type() != QApplication::Tty ) - { - engine::updatePlayPauseIcons(); - } + emit playbackStateChanged(); } @@ -447,7 +444,7 @@ void song::playTrack( track * _trackToPlay ) savePos(); - engine::updatePlayPauseIcons(); + emit playbackStateChanged(); } @@ -468,7 +465,7 @@ void song::playBB() savePos(); - engine::updatePlayPauseIcons(); + emit playbackStateChanged(); } @@ -493,7 +490,7 @@ void song::playPattern( pattern * _patternToPlay, bool _loop ) savePos(); - engine::updatePlayPauseIcons(); + emit playbackStateChanged(); } @@ -546,7 +543,7 @@ void song::togglePause() m_vstSyncController.setPlaybackState( m_playing ); - engine::updatePlayPauseIcons(); + emit playbackStateChanged(); } @@ -605,9 +602,7 @@ void song::stop() m_playMode = Mode_None; - if(QApplication::type() != QApplication::Tty) { - engine::updatePlayPauseIcons(); - } + emit playbackStateChanged(); } diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index a6e2451c4..eb6dcf188 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -190,6 +190,9 @@ MainWindow::MainWindow() : connect(&m_autoSaveTimer, SIGNAL(timeout()), this, SLOT(autoSave())); m_autoSaveTimer.start(1000 * 60); // 1 minute } + + connect( engine::getSong(), SIGNAL( playbackStateChanged() ), + this, SLOT( updatePlayPauseIcons() ) ); } @@ -926,6 +929,42 @@ void MainWindow::toggleControllerRack() +void MainWindow::updatePlayPauseIcons() +{ + engine::songEditor()->setPauseIcon( false ); + engine::automationEditor()->setPauseIcon( false ); + engine::getBBEditor()->setPauseIcon( false ); + engine::pianoRoll()->setPauseIcon( false ); + + if( engine::getSong()->isPlaying() ) + { + switch( engine::getSong()->playMode() ) + { + case song::Mode_PlaySong: + engine::songEditor()->setPauseIcon( true ); + break; + + case song::Mode_PlayAutomationPattern: + engine::automationEditor()->setPauseIcon( true ); + break; + + case song::Mode_PlayBB: + engine::getBBEditor()->setPauseIcon( true ); + break; + + case song::Mode_PlayPattern: + engine::pianoRoll()->setPauseIcon( true ); + break; + + default: + break; + } + } +} + + + + void MainWindow::undo() { engine::projectJournal()->undo(); From 9ab6699a263a176dd1b41bb527820a9d6e6bafa8 Mon Sep 17 00:00:00 2001 From: Hannu Haahti Date: Wed, 19 Mar 2014 00:31:29 +0200 Subject: [PATCH 3/5] sf2_player: fix #481 --- plugins/sf2_player/sf2_player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/sf2_player/sf2_player.cpp b/plugins/sf2_player/sf2_player.cpp index a5b9e36d1..4fba5c648 100644 --- a/plugins/sf2_player/sf2_player.cpp +++ b/plugins/sf2_player/sf2_player.cpp @@ -607,7 +607,7 @@ void sf2Instrument::playNote( NotePlayHandle * _n, sampleFrame * ) } #endif - const float currentVelocity = _n->volumeLevel( tfp ) * MidiMaxVelocity * DefaultVolume / MaxVolume; + const float currentVelocity = _n->volumeLevel( tfp ) * instrumentTrack()->midiPort()->baseVelocity(); if( pluginData->fluidVoice && pluginData->lastVelocity != currentVelocity ) { From 0b46aa4506ddbd032d3bf5df56dceb5b6beb00f3 Mon Sep 17 00:00:00 2001 From: Vesa Date: Wed, 19 Mar 2014 03:19:02 +0200 Subject: [PATCH 4/5] Dual Filter fix: make more efficient - don't calculate coefficients unnecessarily --- plugins/DualFilter/DualFilter.cpp | 27 ++++++++++++++--- plugins/DualFilter/DualFilter.h | 4 +++ plugins/DualFilter/DualFilterControls.cpp | 35 +++++++++++++---------- plugins/DualFilter/DualFilterControls.h | 3 +- 4 files changed, 49 insertions(+), 20 deletions(-) diff --git a/plugins/DualFilter/DualFilter.cpp b/plugins/DualFilter/DualFilter.cpp index 12ac79436..de6932a02 100644 --- a/plugins/DualFilter/DualFilter.cpp +++ b/plugins/DualFilter/DualFilter.cpp @@ -55,6 +55,10 @@ DualFilterEffect::DualFilterEffect( Model* parent, const Descriptor::SubPluginFe { m_filter1 = new basicFilters<2>( engine::mixer()->processingSampleRate() ); m_filter2 = new basicFilters<2>( engine::mixer()->processingSampleRate() ); + + // ensure filters get updated + m_filter1changed = true; + m_filter2changed = true; } @@ -82,10 +86,23 @@ bool DualFilterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames m_filter1->setFilterType( m_dfControls.m_filter1Model.value() ); m_filter2->setFilterType( m_dfControls.m_filter2Model.value() ); + + const bool enabled1 = m_dfControls.m_enabled1Model.value(); + const bool enabled2 = m_dfControls.m_enabled2Model.value(); - if( m_dfControls.m_enabled1Model.value() ) m_filter1->calcFilterCoeffs( m_dfControls.m_cut1Model.value(), m_dfControls.m_res1Model.value() ); - if( m_dfControls.m_enabled2Model.value() ) m_filter2->calcFilterCoeffs( m_dfControls.m_cut2Model.value(), m_dfControls.m_res2Model.value() ); + // recalculate only when necessary + if( enabled1 && m_filter1changed ) + { + m_filter1->calcFilterCoeffs( m_dfControls.m_cut1Model.value(), m_dfControls.m_res1Model.value() ); + m_filter1changed = false; + } + if( enabled2 && m_filter2changed ) + { + m_filter2->calcFilterCoeffs( m_dfControls.m_cut2Model.value(), m_dfControls.m_res2Model.value() ); + m_filter2changed = false; + } + // buffer processing loop for( fpp_t f = 0; f < frames; ++f ) { @@ -98,7 +115,7 @@ bool DualFilterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames const float mix2 = ( ( m_dfControls.m_mixModel.value( f ) + 1.0f ) / 2.0f ); // update filter 1 - if( m_dfControls.m_enabled1Model.value() ) + if( enabled1 ) { s1[0] = m_filter1->update( s1[0], 0 ); s1[1] = m_filter1->update( s1[1], 1 ); @@ -113,7 +130,7 @@ bool DualFilterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames } // update filter 2 - if( m_dfControls.m_enabled2Model.value() ) + if( enabled2 ) { s2[0] = m_filter2->update( s2[0], 0 ); s2[1] = m_filter2->update( s2[1], 1 ); @@ -140,6 +157,8 @@ bool DualFilterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames + + extern "C" { diff --git a/plugins/DualFilter/DualFilter.h b/plugins/DualFilter/DualFilter.h index 7949f84ab..d0bdd2aea 100644 --- a/plugins/DualFilter/DualFilter.h +++ b/plugins/DualFilter/DualFilter.h @@ -43,11 +43,15 @@ public: return &m_dfControls; } + private: DualFilterControls m_dfControls; basicFilters<2> * m_filter1; basicFilters<2> * m_filter2; + + bool m_filter1changed; + bool m_filter2changed; friend class DualFilterControls; diff --git a/plugins/DualFilter/DualFilterControls.cpp b/plugins/DualFilter/DualFilterControls.cpp index 5fbefa8f8..06ead0b31 100644 --- a/plugins/DualFilter/DualFilterControls.cpp +++ b/plugins/DualFilter/DualFilterControls.cpp @@ -51,19 +51,13 @@ DualFilterControls::DualFilterControls( DualFilterEffect* effect ) : m_res2Model( 0.5, basicFilters<0>::minQ(), 10.0, 0.01, this, tr( "Q/Resonance 2" ) ), m_gain2Model( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Gain 2" ) ) { - connect( &m_enabled1Model, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) ); - connect( &m_filter1Model, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) ); - connect( &m_cut1Model, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) ); - connect( &m_res1Model, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) ); - connect( &m_gain1Model, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) ); + connect( &m_filter1Model, SIGNAL( dataChanged() ), this, SLOT( updateFilter1() ) ); + connect( &m_cut1Model, SIGNAL( dataChanged() ), this, SLOT( updateFilter1() ) ); + connect( &m_res1Model, SIGNAL( dataChanged() ), this, SLOT( updateFilter1() ) ); - connect( &m_mixModel, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) ); - - connect( &m_enabled2Model, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) ); - connect( &m_filter2Model, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) ); - connect( &m_cut2Model, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) ); - connect( &m_res2Model, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) ); - connect( &m_gain2Model, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) ); + connect( &m_filter2Model, SIGNAL( dataChanged() ), this, SLOT( updateFilter2() ) ); + connect( &m_cut2Model, SIGNAL( dataChanged() ), this, SLOT( updateFilter2() ) ); + connect( &m_res2Model, SIGNAL( dataChanged() ), this, SLOT( updateFilter2() ) ); m_filter1Model.addItem( tr( "LowPass" ), new PixmapLoader( "filter_lp" ) ); m_filter1Model.addItem( tr( "HiPass" ), new PixmapLoader( "filter_hp" ) ); @@ -102,19 +96,30 @@ DualFilterControls::DualFilterControls( DualFilterEffect* effect ) : - -void DualFilterControls::changeControl() +void DualFilterControls::updateFilter1() { - engine::getSong()->setModified(); + m_effect->m_filter1changed = true; +} + +void DualFilterControls::updateFilter2() +{ + m_effect->m_filter2changed = true; } void DualFilterControls::updateFilters() { + // swap filters to new ones + delete m_effect->m_filter1; delete m_effect->m_filter2; m_effect->m_filter1 = new basicFilters<2>( engine::mixer()->processingSampleRate() ); m_effect->m_filter2 = new basicFilters<2>( engine::mixer()->processingSampleRate() ); + + // flag filters as needing recalculation + + updateFilter1(); + updateFilter2(); } diff --git a/plugins/DualFilter/DualFilterControls.h b/plugins/DualFilter/DualFilterControls.h index 69c2571e8..8f02eb051 100644 --- a/plugins/DualFilter/DualFilterControls.h +++ b/plugins/DualFilter/DualFilterControls.h @@ -62,7 +62,8 @@ public: private slots: - void changeControl(); + void updateFilter1(); + void updateFilter2(); void updateFilters(); private: From 34ba29cfcd134222bce58941375490bf62791a6d Mon Sep 17 00:00:00 2001 From: Vesa Date: Wed, 19 Mar 2014 03:26:36 +0200 Subject: [PATCH 5/5] Change Linux Multimedia etc. to LMMS in desktop/package files --- data/lmms | 2 +- data/lmms.desktop | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/lmms b/data/lmms index cd921eaa5..274886185 100644 --- a/data/lmms +++ b/data/lmms @@ -1,4 +1,4 @@ ?package(lmms):needs="X11" section="Apps/Sound" \ title="LMMS" hints="Audio" command="/usr/bin/lmms" \ - longtitle="Linux MultiMedia Studio" \ + longtitle="LMMS" \ icon="/usr/share/pixmaps/lmms.png" diff --git a/data/lmms.desktop b/data/lmms.desktop index c374b7e66..807ed54f6 100644 --- a/data/lmms.desktop +++ b/data/lmms.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Name=Linux MultiMedia Studio +Name=LMMS GenericName=music production suite GenericName[ca]=Programari de producció musical GenericName[de]=Software zur Musik-Produktion