More updates to song editor graphics based on feedback and IRC discussions

also fixed the automation pattern rendering which had some slightly bad behaviour
This commit is contained in:
Vesa
2014-02-24 01:49:48 +02:00
parent 8b138202ca
commit 3ccc0685b7
6 changed files with 85 additions and 60 deletions

View File

@@ -67,7 +67,7 @@ const int TRACK_OP_WIDTH_COMPACT = 60;
const int MINIMAL_TRACK_HEIGHT = 8;
const int DEFAULT_TRACK_HEIGHT = 32;
const int TCO_BORDER_WIDTH = 1;
const int TCO_BORDER_WIDTH = 2;
class trackContentObject : public Model, public JournallingObject

View File

@@ -422,8 +422,8 @@ void trackContentObjectView::updateLength()
{
setFixedWidth(
static_cast<int>( m_tco->length() * pixelsPerTact() /
MidiTime::ticksPerTact() ) +
TCO_BORDER_WIDTH * 2-1 );
MidiTime::ticksPerTact() ) + 1 /*+
TCO_BORDER_WIDTH * 2-1*/ );
}
m_trackView->trackContainerView()->update();
}

View File

@@ -174,7 +174,7 @@ void AutomationPatternView::constructContextMenu( QMenu * _cm )
this, SLOT( disconnectObject( QAction * ) ) );
_cm->addMenu( m );
}
_cm->addSeparator();
}
@@ -213,14 +213,23 @@ void AutomationPatternView::paintEvent( QPaintEvent * )
QPainter p( &m_paintPixmap );
QLinearGradient lingrad( 0, 0, 0, height() );
const QColor c = isSelected() ? QColor( 0, 0, 224 ) :
QColor( 0x99, 0xAF, 0xFF );
QColor c;
if( !( m_pat->getTrack()->isMuted() || m_pat->isMuted() ) )
c = isSelected() ? QColor( 0, 0, 224 )
: QColor( 0x99, 0xAF, 0xFF );
else
c = QColor( 80,80,80 );
lingrad.setColorAt( 1, c.darker( 300 ) );
lingrad.setColorAt( 0, c );
p.setBrush( lingrad );
p.setPen( QColor( 0, 0, 0 ) );
p.drawRect( QRect( 0, 0, width() - 1, height() - 1 ) );
p.setPen( c.lighter( 160 ) );
p.drawRect( 1, 1, width()-3, height()-3 );
p.setBrush( QBrush() );
p.setPen( c.darker( 300 ) );
p.drawRect( 0, 0, width()-1, height()-1 );
const float ppt = fixedTCOs() ?
( parentWidget()->width() - 2 * TCO_BORDER_WIDTH )
@@ -232,40 +241,29 @@ void AutomationPatternView::paintEvent( QPaintEvent * )
for( tact_t t = 1; t < m_pat->length().getTact(); ++t )
{
p.drawLine( x_base + static_cast<int>( ppt * t ) - 1,
TCO_BORDER_WIDTH, x_base + static_cast<int>(
ppt * t ) - 1, 5 );
p.drawLine( x_base + static_cast<int>( ppt * t ) - 1,
height() - ( 4 + 2 * TCO_BORDER_WIDTH ),
x_base + static_cast<int>( ppt * t ) - 1,
height() - 2 * TCO_BORDER_WIDTH );
const int tx = x_base + static_cast<int>( ppt * t ) - 1;
if( tx < ( width() - TCO_BORDER_WIDTH*2 ) )
{
p.drawLine( tx, TCO_BORDER_WIDTH, tx, 5 );
p.drawLine( tx, height() - ( 4 + 2 * TCO_BORDER_WIDTH ),
tx, height() - 2 * TCO_BORDER_WIDTH );
}
}
const float min = m_pat->firstObject()->minValue<float>();
const float max = m_pat->firstObject()->maxValue<float>();
const float y_scale = max - min;
const float h = ( height()-2*TCO_BORDER_WIDTH ) / y_scale;
const float h = ( height() - 2*TCO_BORDER_WIDTH ) / y_scale;
p.translate( 0.0f, max * height() / y_scale-1 );
p.translate( 0.0f, max * height() / y_scale - TCO_BORDER_WIDTH );
p.scale( 1.0f, -h );
QLinearGradient lin2grad( 0, min, 0, max );
const QColor cl = QColor( 0x99, 0xAF, 0xFF );
if( m_pat->isMuted() || m_pat->getTrack()->isMuted() )
{
lin2grad.setColorAt( 1, QColor( 200,200,200 ) );
lin2grad.setColorAt( 0, QColor( 100,100,100 ) );
}
else
{
lin2grad.setColorAt( 1, QColor( 255,255,255 ) );
lin2grad.setColorAt( 0, cl );
}
// TODO: skip this part for patterns or parts of the pattern that will
// not be on the screen
lin2grad.setColorAt( 1, c.lighter( 200 ) );
lin2grad.setColorAt( 0, c );
for( AutomationPattern::timeMap::const_iterator it =
m_pat->getTimeMap().begin();
it != m_pat->getTimeMap().end(); ++it )
@@ -275,6 +273,8 @@ void AutomationPatternView::paintEvent( QPaintEvent * )
const float x1 = x_base + it.key() * ppt /
MidiTime::ticksPerTact();
const float x2 = (float)( width() - TCO_BORDER_WIDTH );
if( x1 > ( width() - TCO_BORDER_WIDTH ) ) break;
p.fillRect( QRectF( x1, 0.0f, x2-x1, it.value() ),
lin2grad );
break;
@@ -288,6 +288,7 @@ void AutomationPatternView::paintEvent( QPaintEvent * )
MidiTime::ticksPerTact();
const float x2 = x_base + (i+1) * ppt /
MidiTime::ticksPerTact();
if( x1 > ( width() - TCO_BORDER_WIDTH ) ) break;
p.fillRect( QRectF( x1, 0.0f, x2-x1, value ),
lin2grad );

View File

@@ -329,24 +329,33 @@ void SampleTCOView::paintEvent( QPaintEvent * _pe )
{
QPainter p( this );
const QColor c = isSelected() ? QColor( 0, 0, 224 ) :
QColor( 74, 253, 133 );
QColor c;
if( !( m_tco->getTrack()->isMuted() || m_tco->isMuted() ) )
c = isSelected() ? QColor( 0, 0, 224 )
: QColor( 74, 253, 133 );
else c = QColor( 80, 80, 80 );
QLinearGradient grad( 0, 0, 0, height() );
grad.setColorAt( 1, c.darker( 300 ) );
grad.setColorAt( 0, c );
p.fillRect( _pe->rect(), grad );
p.setBrush( grad );
p.setPen( c.lighter( 160 ) );
p.drawRect( 1, 1, width()-3, height()-3 );
p.setPen( QColor( 0, 0, 0 ) );
p.setBrush( QBrush() );
p.setPen( c.darker( 300 ) );
p.drawRect( 0, 0, width()-1, height()-1 );
if( m_tco->getTrack()->isMuted() || m_tco->isMuted() )
{
p.setPen( QColor( 128, 128, 128 ) );
}
else
{
p.setPen( c.lighter( 300 ) );
p.setPen( c.lighter( 200 ) );
}
QRect r = QRect( 1, 1,
qMax( static_cast<int>( m_tco->sampleLength() *

View File

@@ -48,7 +48,7 @@ bbTrack::infoMap bbTrack::s_infoMap;
bbTCO::bbTCO( track * _track, unsigned int _color ) :
trackContentObject( _track ),
m_color( _color > 0 ? _color : qRgb( 105, 150, 145 ) )
m_color( _color > 0 ? _color : qRgb( 128, 182, 175 ) )
{
tact_t t = engine::getBBTrackContainer()->lengthOfBB(
bbTrack::numOfBBTrack( getTrack() ) );
@@ -205,12 +205,15 @@ void bbTCOView::paintEvent( QPaintEvent * )
}
}
p.setPen( col.dark() );
p.setPen( col.lighter( 130 ) );
p.drawRect( 1, 1, rect().right()-2, rect().bottom()-2 );
p.setPen( col.darker( 300 ) );
p.drawRect( 0, 0, rect().right(), rect().bottom() );
p.setFont( pointSize<8>( p.font() ) );
p.setPen( QColor( 0, 0, 0 ) );
p.drawText( 2, p.fontMetrics().height() - 1, m_bbTCO->name() );
p.drawText( 3, p.fontMetrics().height(), m_bbTCO->name() );
if( m_bbTCO->isMuted() )
{
@@ -402,7 +405,7 @@ trackContentObject * bbTrack::createTCO( const MidiTime & _pos )
if( tcos.size() > 0 && dynamic_cast<bbTCO *>( tcos.back() ) != NULL )
{
return new bbTCO( this, dynamic_cast<bbTCO *>( tcos.back() )->color() );
}
return new bbTCO( this );
}
@@ -579,7 +582,7 @@ void bbTrackView::clickedTrackLabel()
{
tv->m_trackLabel->update();
}*/
}

View File

@@ -184,9 +184,9 @@ note * pattern::addNote( const note & _new_note, const bool _quant_pos )
}
else
{
// simple algorithm for inserting the note between two
// simple algorithm for inserting the note between two
// notes with smaller and greater position
// maybe it could be optimized by starting in the middle and
// maybe it could be optimized by starting in the middle and
// going forward or backward but note-inserting isn't that
// time-critical since it is usually not done while playing...
long new_note_abs_time = new_note->pos();
@@ -245,7 +245,7 @@ void pattern::removeNote( const note * _note_to_del )
note * pattern::rearrangeNote( const note * _note_to_proc,
const bool _quant_pos )
{
// just rearrange the position of the note by removing it and adding
// just rearrange the position of the note by removing it and adding
// a copy of it -> addNote inserts it at the correct position
note copy_of_note( *_note_to_proc );
removeNote( _note_to_proc );
@@ -257,7 +257,7 @@ note * pattern::rearrangeNote( const note * _note_to_proc,
void pattern::rearrangeAllNotes()
{
// sort notes by start time
// sort notes by start time
qSort(m_notes.begin(), m_notes.end(), note::lessThan );
}
@@ -765,7 +765,7 @@ void patternView::wheelEvent( QWheelEvent * _we )
}
note * n = m_pat->m_notes[step];
int vol = n->getVolume();
if( n->length() == 0 && _we->delta() > 0 )
{
n->setLength( -DefaultTicksPerTact );
@@ -831,25 +831,37 @@ void patternView::paintEvent( QPaintEvent * )
QPainter p( &m_paintPixmap );
QLinearGradient lingrad( 0, 0, 0, height() );
const QColor c = isSelected() ? QColor( 0, 0, 224 ) :
QColor( 119, 199, 216 );
if( m_pat->m_patternType == pattern::BeatPattern )
{
lingrad.setColorAt( 0, QColor( 16, 16, 16 ) );
lingrad.setColorAt( 1, QColor( 80, 80, 80 ) );
}
QColor c;
if(( m_pat->m_patternType != pattern::BeatPattern ) &&
!( m_pat->getTrack()->isMuted() || m_pat->isMuted() ))
c = isSelected() ? QColor( 0, 0, 224 )
: QColor( 119, 199, 216 );
else
c = QColor( 80, 80, 80 );
if( m_pat->m_patternType != pattern::BeatPattern )
{
lingrad.setColorAt( 1, c.darker( 300 ) );
lingrad.setColorAt( 0, c );
}
else
{
lingrad.setColorAt( 0, c.darker( 300 ) );
lingrad.setColorAt( 1, c );
}
p.setBrush( lingrad );
p.setPen( QColor( 0, 0, 0 ) );
//p.drawRect( 0, 0, width() - 1, height() - 1 );
p.setPen( c.darker( 300 ) );
p.drawRect( QRect( 0, 0, width() - 1, height() - 1 ) );
p.setBrush( QBrush() );
if( m_pat->m_patternType != pattern::BeatPattern )
{
p.setPen( c.lighter( 130 ) );
p.drawRect( QRect( 1, 1, width() - 3, height() - 3 ) );
}
const float ppt = fixedTCOs() ?
( parentWidget()->width() - 2 * TCO_BORDER_WIDTH )
@@ -875,7 +887,7 @@ void patternView::paintEvent( QPaintEvent * )
int central_key = 0;
if( m_pat->m_notes.size() > 0 )
{
// first determine the central tone so that we can
// first determine the central tone so that we can
// display the area where most of the m_notes are
int total_notes = 0;
for( NoteVector::Iterator it = m_pat->m_notes.begin();
@@ -981,11 +993,11 @@ void patternView::paintEvent( QPaintEvent * )
}
else if( ( no / 4 ) % 2 )
{
p.drawPixmap( x, y, stepoff );
p.drawPixmap( x, y, stepoffl );
}
else
{
p.drawPixmap( x, y, stepoffl );
p.drawPixmap( x, y, stepoff );
}
}
}
@@ -993,7 +1005,7 @@ void patternView::paintEvent( QPaintEvent * )
p.setFont( pointSize<8>( p.font() ) );
if( m_pat->isMuted() || m_pat->getTrack()->isMuted() )
{
p.setPen( QColor( 50, 50, 502 ) );
p.setPen( QColor( 30, 30, 30 ) );
}
else
{
@@ -1002,7 +1014,7 @@ void patternView::paintEvent( QPaintEvent * )
if( m_pat->name() != m_pat->instrumentTrack()->name() )
{
p.drawText( 2, p.fontMetrics().height() - 1, m_pat->name() );
p.drawText( 3, p.fontMetrics().height(), m_pat->name() );
}
if( m_pat->isMuted() )