From f5d0524b16c3bfef0ad7bc4604a16b7590bcf295 Mon Sep 17 00:00:00 2001 From: Kumar Date: Tue, 20 Oct 2020 22:56:22 +0530 Subject: [PATCH] Enable track-wide color coding (#5573) * Enable track-wide color coding * Add support for automation tracks * Allow saving & loading track colors * Allow track color to be reset to default * Partially migrate common settings to Track.cpp, fix bug * Completely migrate local TCO color functions to TCO class, fix bug * Set QColorDialog colors to better colors * Color the side of the track according to TCO colors * Disable color gradient when muted * Change selection color to depend on TCO color * Fix breaking builds * Bug fix * Fix another bug where BB track colors wouldn't load * Restore changed demo to original state * Fix BB Editor bug * Fix breaking builds * Allow random color picking * Fix copy-paste bug * Change how color is painted on a track * Cleanup, and implement per-pattern colors * Cleanup comments * Migrate some functions * Remove redundant function * Rename some functions * Migrate duplicates to superclass * Use ColorChooser and reorder some includes * Change how colors are saved * Fix some formatting * Fix some code * Change how clip colors work * Fix some unexpected behaviors * Fix note border coloring being green on colored tracks * Change name of an option * Remove redundant code * Fix ghost changes * Remove colorRgb * Rename backgroundColor, remove some variables we don't use * Remove a redundant variable * Migrate some duplicates to superclass * Check for nullpointer * Remove redundant variable * Update some logic * Change how muted colors are displayed * Change how dark muted tracks become * Place setModified() in appropriate places * Make getColorForDisplay() function * Change how colors are organised and saved * Remove m_useStyleColor * Remove a comment * Quick changes * Change how colors are saved * Remove redundant stuff * Remove redundant stuff pt. 2 * Change how colors are copied * Fixes pt. 3 * Fixes pt. 4 * Change spaces to tabs * Fix pseudochanges * Remove s_lastTCOColor * Fix pseudochanges pt. 2 * Fix breaking builds * Add files via upload * Add comments (again) --- ...- Krem Kaakkuja (Second Flight Remix).mmpz | Bin 46081 -> 46520 bytes include/AutomationPatternView.h | 5 +- include/BBTrack.h | 52 ----- include/Track.h | 53 ++++- src/core/AutomationPattern.cpp | 11 + src/core/Track.cpp | 205 +++++++++++++++++- src/gui/AutomationPatternView.cpp | 8 +- src/tracks/BBTrack.cpp | 128 ++--------- src/tracks/Pattern.cpp | 33 ++- src/tracks/SampleTrack.cpp | 34 ++- 10 files changed, 337 insertions(+), 192 deletions(-) diff --git a/data/projects/demos/Greippi - Krem Kaakkuja (Second Flight Remix).mmpz b/data/projects/demos/Greippi - Krem Kaakkuja (Second Flight Remix).mmpz index 9ea29b34d3f1aaaf6fe86afe1e0bf10a162abe9a..d08ca6e04c176c2516b85769f6f8bf4f3f0c96fb 100644 GIT binary patch literal 46520 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 EPE)HV{Qv*} literal 46081 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

a=cfHuPut%5ET*p%(#2Lhis||<#S<{^Udtt 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 diff --git a/include/AutomationPatternView.h b/include/AutomationPatternView.h index 3f019483a..a6529b5d4 100644 --- a/include/AutomationPatternView.h +++ b/include/AutomationPatternView.h @@ -27,10 +27,11 @@ #include +#include "AutomationPattern.h" +#include "Song.h" +#include "SongEditor.h" #include "Track.h" -class AutomationPattern; - class AutomationPatternView : public TrackContentObjectView { diff --git a/include/BBTrack.h b/include/BBTrack.h index 70195f28d..36a108845 100644 --- a/include/BBTrack.h +++ b/include/BBTrack.h @@ -50,33 +50,11 @@ public: return( "bbtco" ); } - unsigned int color() const - { - return( m_color.rgb() ); - } - - QColor colorObj() const - { - return m_color; - } - - void setColor( const QColor & c ) - { - m_color = QColor( c ); - } - - void setUseStyleColor( bool b ) - { - m_useStyleColor = b; - } - int bbTrackIndex(); TrackContentObjectView * createView( TrackView * _tv ) override; private: - QColor m_color; - bool m_useStyleColor; friend class BBTCOView; @@ -92,11 +70,6 @@ public: BBTCOView( TrackContentObject * _tco, TrackView * _tv ); virtual ~BBTCOView() = default; - QColor color() const - { - return( m_bbTCO->m_color ); - } - void setColor( QColor _new_color ); public slots: void update() override; @@ -105,8 +78,6 @@ protected slots: void openInBBEditor(); void resetName(); void changeName(); - void changeColor(); - void resetColor(); protected: @@ -162,27 +133,6 @@ public: m_disabledTracks.removeAll( _track ); } - static void setLastTCOColor( const QColor & c ) - { - if( ! s_lastTCOColor ) - { - s_lastTCOColor = new QColor( c ); - } - else - { - *s_lastTCOColor = QColor( c ); - } - } - - static void clearLastTCOColor() - { - if( s_lastTCOColor ) - { - delete s_lastTCOColor; - } - s_lastTCOColor = NULL; - } - protected: inline QString nodeName() const override { @@ -196,8 +146,6 @@ private: typedef QMap infoMap; static infoMap s_infoMap; - static QColor * s_lastTCOColor; - friend class BBTrackView; } ; diff --git a/include/Track.h b/include/Track.h index a49308320..dd6066986 100644 --- a/include/Track.h +++ b/include/Track.h @@ -133,6 +133,25 @@ public: { return m_autoResize; } + + QColor color() const + { + return m_color; + } + + void setColor( const QColor & c ) + { + m_color = c; + } + + bool hasColor(); + + void useCustomClipColor( bool b ); + + bool usesCustomClipColor() + { + return m_useCustomClipColor; + } virtual void movePosition( const MidiTime & pos ); virtual void changeLength( const MidiTime & length ); @@ -154,6 +173,8 @@ public: MidiTime startTimeOffset() const; void setStartTimeOffset( const MidiTime &startTimeOffset ); + + void updateColor(); // Will copy the state of a TCO to another TCO static void copyStateTo( TrackContentObject *src, TrackContentObject *dst ); @@ -166,6 +187,7 @@ signals: void lengthChanged(); void positionChanged(); void destroyedTCO(); + void trackColorChanged(); private: @@ -189,6 +211,9 @@ private: bool m_selectViewOnCreate; + QColor m_color; + bool m_useCustomClipColor; + friend class TrackContentObjectView; } ; @@ -264,11 +289,16 @@ public: // some metadata to be written to the clipboard. static void remove( QVector tcovs ); static void toggleMute( QVector tcovs ); + + QColor getColorForDisplay( QColor ); public slots: virtual bool close(); void remove(); void update() override; + + void changeClipColor(); + void useTrackColor(); protected: enum ContextMenuAction @@ -486,6 +516,10 @@ private slots: void cloneTrack(); void removeTrack(); void updateMenu(); + void changeTrackColor(); + void randomTrackColor(); + void resetTrackColor(); + void useTrackColor(); void toggleRecording(bool on); void recordingOn(); void recordingOff(); @@ -503,6 +537,9 @@ private: signals: void trackRemovalScheduled( TrackView * t ); + void colorChanged( QColor & c ); + void colorParented(); + void colorReset(); } ; @@ -635,7 +672,16 @@ public: { return m_processingLock.tryLock(); } - + + QColor color() + { + return m_color; + } + bool useColor() + { + return m_hasColor; + } + BoolModel* getMutedModel(); public slots: @@ -647,6 +693,8 @@ public slots: void toggleSolo(); + void trackColorChanged( QColor & c ); + void trackColorReset(); private: TrackContainer* m_trackContainer; @@ -665,6 +713,9 @@ private: tcoVector m_trackContentObjects; QMutex m_processingLock; + + QColor m_color; + bool m_hasColor; friend class TrackView; diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp index 2fd1cea12..8886d7ea5 100644 --- a/src/core/AutomationPattern.cpp +++ b/src/core/AutomationPattern.cpp @@ -538,6 +538,11 @@ void AutomationPattern::saveSettings( QDomDocument & _doc, QDomElement & _this ) _this.setAttribute( "prog", QString::number( progressionType() ) ); _this.setAttribute( "tens", QString::number( getTension() ) ); _this.setAttribute( "mute", QString::number( isMuted() ) ); + + if( usesCustomClipColor() ) + { + _this.setAttribute( "color", color().name() ); + } for( timeMap::const_iterator it = m_timeMap.begin(); it != m_timeMap.end(); ++it ) @@ -593,6 +598,12 @@ void AutomationPattern::loadSettings( const QDomElement & _this ) m_idsToResolve << element.attribute( "id" ).toInt(); } } + + if( _this.hasAttribute( "color" ) ) + { + useCustomClipColor( true ); + setColor( _this.attribute( "color" ) ); + } int len = _this.attribute( "len" ).toInt(); if( len <= 0 ) diff --git a/src/core/Track.cpp b/src/core/Track.cpp index 343768b56..70da1e1d7 100644 --- a/src/core/Track.cpp +++ b/src/core/Track.cpp @@ -38,8 +38,10 @@ #include "Track.h" #include +#include #include +#include #include #include #include @@ -56,6 +58,7 @@ #include "BBTrackContainer.h" #include "ConfigManager.h" #include "Clipboard.h" +#include "ColorChooser.h" #include "embed.h" #include "Engine.h" #include "GuiApplication.h" @@ -104,7 +107,9 @@ TrackContentObject::TrackContentObject( Track * track ) : m_startPosition(), m_length(), m_mutedModel( false, this, tr( "Mute" ) ), - m_selectViewOnCreate( false ) + m_selectViewOnCreate( false ), + m_color( 128, 128, 128 ), + m_useCustomClipColor( false ) { if( getTrack() ) { @@ -238,8 +243,28 @@ void TrackContentObject::setStartTimeOffset( const MidiTime &startTimeOffset ) m_startTimeOffset = startTimeOffset; } +// Update TCO color if it follows the track color +void TrackContentObject::updateColor() +{ + if( ! m_useCustomClipColor ) + { + emit trackColorChanged(); + } +} +void TrackContentObject::useCustomClipColor( bool b ) +{ + m_useCustomClipColor = b; + updateColor(); +} + + +bool TrackContentObject::hasColor() +{ + return usesCustomClipColor() || getTrack()->useColor(); +} + @@ -303,6 +328,8 @@ TrackContentObjectView::TrackContentObjectView( TrackContentObject * tco, this, SLOT( updatePosition() ) ); connect( m_tco, SIGNAL( destroyedTCO() ), this, SLOT( close() ) ); setModel( m_tco ); + connect( m_tco, SIGNAL( trackColorChanged() ), this, SLOT( update() ) ); + connect( m_trackView->getTrackOperationsWidget(), SIGNAL( colorParented() ), this, SLOT( useTrackColor() ) ); m_trackView->getTrackContentWidget()->addTCOView( this ); updateLength(); @@ -512,6 +539,32 @@ void TrackContentObjectView::updatePosition() + +void TrackContentObjectView::changeClipColor() +{ + // Get a color from the user + QColor new_color = ColorChooser( this ).withPalette( ColorChooser::Palette::Track )->getColor( m_tco->color() ); + if( ! new_color.isValid() ) + { return; } + + // Use that color + m_tco->setColor( new_color ); + m_tco->useCustomClipColor( true ); + update(); +} + + + +void TrackContentObjectView::useTrackColor() +{ + m_tco->useCustomClipColor( false ); + update(); +} + + + + + /*! \brief Change the trackContentObjectView's display when something * being dragged enters it. * @@ -1151,6 +1204,13 @@ void TrackContentObjectView::contextMenuEvent( QContextMenuEvent * cme ) : tr("Mute/unmute selection (<%1> + middle click)")).arg(UI_CTRL_KEY), [this](){ contextMenuAction( Mute ); } ); + contextMenu.addSeparator(); + + contextMenu.addAction( embed::getIconPixmap( "colorize" ), + tr( "Set clip color" ), this, SLOT( changeClipColor() ) ); + contextMenu.addAction( embed::getIconPixmap( "colorize" ), + tr( "Use track color" ), this, SLOT( useTrackColor() ) ); + constructContextMenu( &contextMenu ); contextMenu.exec( QCursor::pos() ); @@ -1354,6 +1414,51 @@ MidiTime TrackContentObjectView::draggedTCOPos( QMouseEvent * me ) } +// Return the color that the TCO's background should be +QColor TrackContentObjectView::getColorForDisplay( QColor defaultColor ) +{ + // Get the pure TCO color + auto tcoColor = m_tco->hasColor() + ? m_tco->usesCustomClipColor() + ? m_tco->color() + : m_tco->getTrack()->color() + : defaultColor; + + // Set variables + QColor c, mutedCustomColor; + bool muted = m_tco->getTrack()->isMuted() || m_tco->isMuted(); + mutedCustomColor = tcoColor; + mutedCustomColor.setHsv( mutedCustomColor.hsvHue(), mutedCustomColor.hsvSaturation() / 4, mutedCustomColor.value() ); + + // Change the pure color by state: selected, muted, colored, normal + if( isSelected() ) + { + c = m_tco->hasColor() + ? ( muted + ? mutedCustomColor.darker( 350 ) + : tcoColor.darker( 150 ) ) + : selectedColor(); + } + else + { + if( muted ) + { + c = m_tco->hasColor() + ? mutedCustomColor.darker( 250 ) + : mutedBackgroundColor(); + } + else + { + c = tcoColor; + } + } + + // Return color to caller + return c; +} + + + // =========================================================================== @@ -2073,6 +2178,10 @@ TrackOperationsWidget::TrackOperationsWidget( TrackView * parent ) : m_trackView->trackContainerView(), SLOT( deleteTrackView( TrackView * ) ), Qt::QueuedConnection ); + + connect( m_trackView->getTrack()->getMutedModel(), SIGNAL( dataChanged() ), + this, SLOT( update() ) ); + } @@ -2135,7 +2244,15 @@ void TrackOperationsWidget::mousePressEvent( QMouseEvent * me ) void TrackOperationsWidget::paintEvent( QPaintEvent * pe ) { QPainter p( this ); + p.fillRect( rect(), palette().brush(QPalette::Background) ); + + if( m_trackView->getTrack()->useColor() && ! m_trackView->getTrack()->getMutedModel()->value() ) + { + QRect coloredRect( 0, 0, 10, m_trackView->getTrack()->getHeight() ); + + p.fillRect( coloredRect, m_trackView->getTrack()->color() ); + } if( m_trackView->isMovingTrack() == false ) { @@ -2190,7 +2307,41 @@ void TrackOperationsWidget::removeTrack() emit trackRemovalScheduled( m_trackView ); } +void TrackOperationsWidget::changeTrackColor() +{ + QColor new_color = ColorChooser( this ).withPalette( ColorChooser::Palette::Track )-> \ + getColor( m_trackView->getTrack()->color() ); + + if( ! new_color.isValid() ) + { return; } + emit colorChanged( new_color ); + + Engine::getSong()->setModified(); + update(); +} + +void TrackOperationsWidget::resetTrackColor() +{ + emit colorReset(); + Engine::getSong()->setModified(); + update(); +} + +void TrackOperationsWidget::randomTrackColor() +{ + QColor buffer = ColorChooser::getPalette( ColorChooser::Palette::Track )[ rand() % 48 ]; + + emit colorChanged( buffer ); + Engine::getSong()->setModified(); + update(); +} + +void TrackOperationsWidget::useTrackColor() +{ + emit colorParented(); + Engine::getSong()->setModified(); +} /*! \brief Update the trackOperationsWidget context menu @@ -2231,6 +2382,17 @@ void TrackOperationsWidget::updateMenu() toMenu->addAction( tr( "Turn all recording on" ), this, SLOT( recordingOn() ) ); toMenu->addAction( tr( "Turn all recording off" ), this, SLOT( recordingOff() ) ); } + + toMenu->addSeparator(); + toMenu->addAction( embed::getIconPixmap( "colorize" ), + tr( "Change color" ), this, SLOT( changeTrackColor() ) ); + toMenu->addAction( embed::getIconPixmap( "colorize" ), + tr( "Reset color to default" ), this, SLOT( resetTrackColor() ) ); + toMenu->addAction( embed::getIconPixmap( "colorize" ), + tr( "Set random color" ), this, SLOT( randomTrackColor() ) ); + toMenu->addSeparator(); + toMenu->addAction( embed::getIconPixmap( "colorize" ), + tr( "Clear clip colors" ), this, SLOT( useTrackColor() ) ); } @@ -2286,7 +2448,9 @@ Track::Track( TrackTypes type, TrackContainer * tc ) : m_soloModel( false, this, tr( "Solo" ) ), /*!< For controlling track soloing */ m_simpleSerializingMode( false ), - m_trackContentObjects() /*!< The track content objects (segments) */ + m_trackContentObjects(), /*!< The track content objects (segments) */ + m_color( 0, 0, 0 ), + m_hasColor( false ) { m_trackContainer->addTrack( this ); m_height = -1; @@ -2431,7 +2595,12 @@ void Track::saveSettings( QDomDocument & doc, QDomElement & element ) { element.setAttribute( "trackheight", m_height ); } - + + if( m_hasColor ) + { + element.setAttribute( "color", m_color.name() ); + } + QDomElement tsDe = doc.createElement( nodeName() ); // let actual track (InstrumentTrack, bbTrack, sampleTrack etc.) save // its settings @@ -2484,6 +2653,12 @@ void Track::loadSettings( const QDomElement & element ) // Older project files that didn't have this attribute will set the value to false (issue 5562) m_mutedBeforeSolo = QVariant( element.attribute( "mutedBeforeSolo", "0" ) ).toBool(); + if( element.hasAttribute( "color" ) ) + { + m_color.setNamedColor( element.attribute( "color" ) ); + m_hasColor = true; + } + if( m_simpleSerializingMode ) { QDomNode node = element.firstChild(); @@ -2861,7 +3036,24 @@ void Track::toggleSolo() } } +void Track::trackColorChanged( QColor & c ) +{ + for (int i = 0; i < numOfTCOs(); i++) + { + m_trackContentObjects[i]->updateColor(); + } + m_hasColor = true; + m_color = c; +} +void Track::trackColorReset() +{ + for (int i = 0; i < numOfTCOs(); i++) + { + m_trackContentObjects[i]->updateColor(); + } + m_hasColor = false; +} BoolModel *Track::getMutedModel() @@ -2932,6 +3124,13 @@ TrackView::TrackView( Track * track, TrackContainerView * tcv ) : connect( &m_track->m_soloModel, SIGNAL( dataChanged() ), m_track, SLOT( toggleSolo() ), Qt::DirectConnection ); + + connect( &m_trackOperationsWidget, SIGNAL( colorChanged( QColor & ) ), + m_track, SLOT( trackColorChanged( QColor & ) ) ); + + connect( &m_trackOperationsWidget, SIGNAL( colorReset() ), + m_track, SLOT( trackColorReset() ) ); + // create views for already existing TCOs for( Track::tcoVector::iterator it = m_track->m_trackContentObjects.begin(); diff --git a/src/gui/AutomationPatternView.cpp b/src/gui/AutomationPatternView.cpp index 6daba567b..1c9ac03a4 100644 --- a/src/gui/AutomationPatternView.cpp +++ b/src/gui/AutomationPatternView.cpp @@ -216,8 +216,6 @@ void AutomationPatternView::constructContextMenu( QMenu * _cm ) this, SLOT( disconnectObject( QAction * ) ) ); _cm->addMenu( m ); } - - _cm->addSeparator(); } @@ -256,13 +254,9 @@ void AutomationPatternView::paintEvent( QPaintEvent * ) QPainter p( &m_paintPixmap ); QLinearGradient lingrad( 0, 0, 0, height() ); - QColor c; + QColor c = getColorForDisplay( painter.background().color() ); bool muted = m_pat->getTrack()->isMuted() || m_pat->isMuted(); bool current = gui->automationEditor()->currentPattern() == m_pat; - - // state: selected, muted, normal - c = isSelected() ? selectedColor() : ( muted ? mutedBackgroundColor() - : painter.background().color() ); lingrad.setColorAt( 1, c.darker( 300 ) ); lingrad.setColorAt( 0, c ); diff --git a/src/tracks/BBTrack.cpp b/src/tracks/BBTrack.cpp index 24d0fc9bd..2bd0fdaf5 100644 --- a/src/tracks/BBTrack.cpp +++ b/src/tracks/BBTrack.cpp @@ -23,7 +23,6 @@ */ #include "BBTrack.h" -#include #include #include @@ -32,8 +31,8 @@ #include "embed.h" #include "Engine.h" #include "gui_templates.h" -#include "MainWindow.h" #include "GuiApplication.h" +#include "MainWindow.h" #include "Mixer.h" #include "RenameDialog.h" #include "Song.h" @@ -47,9 +46,7 @@ BBTrack::infoMap BBTrack::s_infoMap; BBTCO::BBTCO( Track * _track ) : - TrackContentObject( _track ), - m_color( 128, 128, 128 ), - m_useStyleColor( true ) + TrackContentObject( _track ) { bar_t t = Engine::getBBTrackContainer()->lengthOfBB( bbTrackIndex() ); if( t > 0 ) @@ -74,15 +71,9 @@ void BBTCO::saveSettings( QDomDocument & doc, QDomElement & element ) } element.setAttribute( "len", length() ); element.setAttribute( "muted", isMuted() ); - element.setAttribute( "color", color() ); - - if( m_useStyleColor ) + if( usesCustomClipColor() ) { - element.setAttribute( "usestyle", 1 ); - } - else - { - element.setAttribute( "usestyle", 0 ); + element.setAttribute( "color", color().name() ); } } @@ -101,33 +92,21 @@ void BBTCO::loadSettings( const QDomElement & element ) { toggleMute(); } - - if( element.hasAttribute( "color" ) ) + + // for colors saved in 1.3-onwards + if( element.hasAttribute( "color" ) && !element.hasAttribute( "usestyle" ) ) { - setColor( QColor( element.attribute( "color" ).toUInt() ) ); + useCustomClipColor( true ); + setColor( element.attribute( "color" ) ); } - if( element.hasAttribute( "usestyle" ) ) - { - if( element.attribute( "usestyle" ).toUInt() == 1 ) - { - m_useStyleColor = true; - } - else - { - m_useStyleColor = false; - } - } + // for colors saved before 1.3 else { - if( m_color.rgb() == qRgb( 128, 182, 175 ) || m_color.rgb() == qRgb( 64, 128, 255 ) ) // old or older default color - { - m_useStyleColor = true; - } - else - { - m_useStyleColor = false; - } + if( element.hasAttribute( "color" ) ) + { setColor( QColor( element.attribute( "color" ).toUInt() ) ); } + + // usestyle attribute is no longer used } } @@ -153,7 +132,8 @@ BBTCOView::BBTCOView( TrackContentObject * _tco, TrackView * _tv ) : m_bbTCO( dynamic_cast( _tco ) ), m_paintPixmap() { - connect( _tco->getTrack(), SIGNAL( dataChanged() ), this, SLOT( update() ) ); + connect( _tco->getTrack(), SIGNAL( dataChanged() ), + this, SLOT( update() ) ); setStyle( QApplication::style() ); } @@ -173,10 +153,6 @@ void BBTCOView::constructContextMenu( QMenu * _cm ) _cm->addAction( embed::getIconPixmap( "edit_rename" ), tr( "Change name" ), this, SLOT( changeName() ) ); - _cm->addAction( embed::getIconPixmap( "colorize" ), - tr( "Change color" ), this, SLOT( changeColor() ) ); - _cm->addAction( embed::getIconPixmap( "colorize" ), - tr( "Reset color to default" ), this, SLOT( resetColor() ) ); } @@ -210,13 +186,7 @@ void BBTCOView::paintEvent( QPaintEvent * ) QPainter p( &m_paintPixmap ); QLinearGradient lingrad( 0, 0, 0, height() ); - QColor c; - bool muted = m_bbTCO->getTrack()->isMuted() || m_bbTCO->isMuted(); - - // state: selected, muted, default, user selected - c = isSelected() ? selectedColor() : ( muted ? mutedBackgroundColor() - : ( m_bbTCO->m_useStyleColor ? painter.background().color() - : m_bbTCO->colorObj() ) ); + QColor c = getColorForDisplay( painter.background().color() ); lingrad.setColorAt( 0, c.lighter( 130 ) ); lingrad.setColorAt( 1, c.lighter( 70 ) ); @@ -305,63 +275,6 @@ void BBTCOView::changeName() - -void BBTCOView::changeColor() -{ - QColor new_color = QColorDialog::getColor( m_bbTCO->m_color ); - if( ! new_color.isValid() ) - { - return; - } - if( isSelected() ) - { - QVector selected = - gui->songEditor()->m_editor->selectedObjects(); - for( QVector::iterator it = - selected.begin(); - it != selected.end(); ++it ) - { - BBTCOView * bb_tcov = dynamic_cast( *it ); - if( bb_tcov ) - { - bb_tcov->setColor( new_color ); - } - } - } - else - { - setColor( new_color ); - } -} - - -/** \brief Makes the BB pattern use the colour defined in the stylesheet */ -void BBTCOView::resetColor() -{ - if( ! m_bbTCO->m_useStyleColor ) - { - m_bbTCO->m_useStyleColor = true; - Engine::getSong()->setModified(); - update(); - } - BBTrack::clearLastTCOColor(); -} - - - -void BBTCOView::setColor( QColor new_color ) -{ - if( new_color.rgb() != m_bbTCO->color() ) - { - m_bbTCO->setColor( new_color ); - m_bbTCO->m_useStyleColor = false; - Engine::getSong()->setModified(); - update(); - } - BBTrack::setLastTCOColor( new_color ); -} - - void BBTCOView::update() { ToolTip::add(this, m_bbTCO->name()); @@ -371,8 +284,6 @@ void BBTCOView::update() -QColor * BBTrack::s_lastTCOColor = NULL; - BBTrack::BBTrack( TrackContainer* tc ) : Track( Track::BBTrack, tc ) { @@ -474,11 +385,6 @@ TrackView * BBTrack::createView( TrackContainerView* tcv ) TrackContentObject * BBTrack::createTCO( const MidiTime & _pos ) { BBTCO * bbtco = new BBTCO( this ); - if( s_lastTCOColor ) - { - bbtco->setColor( *s_lastTCOColor ); - bbtco->setUseStyleColor( false ); - } return bbtco; } diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp index e5de8b83b..69d575813 100644 --- a/src/tracks/Pattern.cpp +++ b/src/tracks/Pattern.cpp @@ -30,11 +30,13 @@ #include #include #include +#include #include "AudioSampleRecorder.h" #include "BBTrackContainer.h" #include "DeprecationHelper.h" #include "embed.h" +#include "gui_templates.h" #include "GuiApplication.h" #include "InstrumentTrack.h" #include "PianoRoll.h" @@ -356,6 +358,11 @@ void Pattern::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "type", m_patternType ); _this.setAttribute( "name", name() ); + + if( usesCustomClipColor() ) + { + _this.setAttribute( "color", color().name() ); + } // as the target of copied/dragged pattern is always an existing // pattern, we must not store actual position, instead we store -1 // which tells loadSettings() not to mess around with position @@ -387,6 +394,13 @@ void Pattern::loadSettings( const QDomElement & _this ) m_patternType = static_cast( _this.attribute( "type" ).toInt() ); setName( _this.attribute( "name" ) ); + + if( _this.hasAttribute( "color" ) ) + { + useCustomClipColor( true ); + setColor( _this.attribute( "color" ) ); + } + if( _this.attribute( "pos" ).toInt() >= 0 ) { movePosition( _this.attribute( "pos" ).toInt() ); @@ -853,14 +867,20 @@ void PatternView::paintEvent( QPaintEvent * ) QPainter p( &m_paintPixmap ); + QColor c; bool const muted = m_pat->getTrack()->isMuted() || m_pat->isMuted(); bool current = gui->pianoRoll()->currentPattern() == m_pat; bool beatPattern = m_pat->m_patternType == Pattern::BeatPattern; - - // state: selected, normal, beat pattern, muted - QColor c = isSelected() ? selectedColor() : ( ( !muted && !beatPattern ) - ? painter.background().color() : ( beatPattern - ? BBPatternBackground() : mutedBackgroundColor() ) ); + + if( beatPattern ) + { + // Do not paint BBTCOs how we paint pattern TCOs + c = BBPatternBackground(); + } + else + { + c = getColorForDisplay( painter.background().color() ); + } // invert the gradient for the background in the B&B editor QLinearGradient lingrad( 0, 0, 0, height() ); @@ -973,7 +993,8 @@ void PatternView::paintEvent( QPaintEvent * ) // set colour based on mute status QColor noteFillColor = muted ? getMutedNoteFillColor() : getNoteFillColor(); - QColor noteBorderColor = muted ? getMutedNoteBorderColor() : getNoteBorderColor(); + QColor noteBorderColor = muted ? getMutedNoteBorderColor() + : ( m_pat->hasColor() ? c.lighter( 200 ) : getNoteBorderColor() ); bool const drawAsLines = height() < 64; if (drawAsLines) diff --git a/src/tracks/SampleTrack.cpp b/src/tracks/SampleTrack.cpp index 80d41adea..6515be3e4 100644 --- a/src/tracks/SampleTrack.cpp +++ b/src/tracks/SampleTrack.cpp @@ -275,7 +275,11 @@ void SampleTCO::saveSettings( QDomDocument & _doc, QDomElement & _this ) _this.setAttribute( "data", m_sampleBuffer->toBase64( s ) ); } - _this.setAttribute ("sample_rate", m_sampleBuffer->sampleRate()); + _this.setAttribute( "sample_rate", m_sampleBuffer->sampleRate()); + if( usesCustomClipColor() ) + { + _this.setAttribute( "color", color().name() ); + } // TODO: start- and end-frame } @@ -297,8 +301,14 @@ void SampleTCO::loadSettings( const QDomElement & _this ) setMuted( _this.attribute( "muted" ).toInt() ); setStartTimeOffset( _this.attribute( "off" ).toInt() ); - if (_this.hasAttribute("sample_rate")) { - m_sampleBuffer->setSampleRate(_this.attribute("sample_rate").toInt()); + if ( _this.hasAttribute( "sample_rate" ) ) { + m_sampleBuffer->setSampleRate( _this.attribute( "sample_rate" ).toInt() ); + } + + if( _this.hasAttribute( "color" ) ) + { + useCustomClipColor( true ); + setColor( _this.attribute( "color" ) ); } } @@ -397,6 +407,14 @@ void SampleTCOView::contextMenuEvent( QContextMenuEvent * _cme ) /*contextMenu.addAction( embed::getIconPixmap( "record" ), tr( "Set/clear record" ), m_tco, SLOT( toggleRecord() ) );*/ + + contextMenu.addSeparator(); + + contextMenu.addAction( embed::getIconPixmap( "colorize" ), + tr( "Set clip color" ), this, SLOT( changeClipColor() ) ); + contextMenu.addAction( embed::getIconPixmap( "colorize" ), + tr( "Use track color" ), this, SLOT( useTrackColor() ) ); + constructContextMenu( &contextMenu ); contextMenu.exec( QCursor::pos() ); @@ -525,13 +543,9 @@ void SampleTCOView::paintEvent( QPaintEvent * pe ) QPainter p( &m_paintPixmap ); QLinearGradient lingrad( 0, 0, 0, height() ); - QColor c; + QColor c = getColorForDisplay( painter.background().color() ); bool muted = m_tco->getTrack()->isMuted() || m_tco->isMuted(); - // state: selected, muted, normal - c = isSelected() ? selectedColor() : ( muted ? mutedBackgroundColor() - : painter.background().color() ); - lingrad.setColorAt( 1, c.darker( 300 ) ); lingrad.setColorAt( 0, c ); @@ -571,12 +585,12 @@ void SampleTCOView::paintEvent( QPaintEvent * pe ) p.setRenderHint( QPainter::Antialiasing, false ); // inner border - p.setPen( c.lighter( 160 ) ); + p.setPen( c.lighter( 135 ) ); p.drawRect( 1, 1, rect().right() - TCO_BORDER_WIDTH, rect().bottom() - TCO_BORDER_WIDTH ); // outer border - p.setPen( c.darker( 300 ) ); + p.setPen( c.darker( 200 ) ); p.drawRect( 0, 0, rect().right(), rect().bottom() ); // draw the 'muted' pixmap only if the pattern was manualy muted