Merge https://github.com/LMMS/lmms into bugs_283_303
This commit is contained in:
@@ -15,7 +15,7 @@ INCLUDE(FindPkgConfig)
|
||||
|
||||
SET(VERSION_MAJOR "0")
|
||||
SET(VERSION_MINOR "9")
|
||||
SET(VERSION_PATCH "91")
|
||||
SET(VERSION_PATCH "92")
|
||||
#SET(VERSION_SUFFIX "")
|
||||
SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
|
||||
IF(VERSION_SUFFIX)
|
||||
|
||||
2
README
2
README
@@ -1,4 +1,4 @@
|
||||
LMMS 0.9.91
|
||||
LMMS 0.9.92
|
||||
===========
|
||||
|
||||
Copyright (c) 2004-2014 by LMMS developers
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _PIANO_ROLL_H
|
||||
#define _PIANO_ROLL_H
|
||||
#ifndef PIANO_ROLL_H
|
||||
#define PIANO_ROLL_H
|
||||
|
||||
#include <QtGui/QWidget>
|
||||
|
||||
@@ -147,6 +147,7 @@ protected slots:
|
||||
|
||||
|
||||
signals:
|
||||
void currentPatternChanged();
|
||||
void semiToneMarkerMenuScaleSetEnabled(bool);
|
||||
void semiToneMarkerMenuChordSetEnabled(bool);
|
||||
|
||||
@@ -169,7 +170,7 @@ private:
|
||||
ActionChangeNoteProperty,
|
||||
ActionResizeNoteEditArea
|
||||
};
|
||||
|
||||
|
||||
enum noteEditMode
|
||||
{
|
||||
NoteEditVolume,
|
||||
@@ -205,7 +206,7 @@ private:
|
||||
void autoScroll( const MidiTime & _t );
|
||||
|
||||
MidiTime newNoteLen() const;
|
||||
|
||||
|
||||
void shiftPos(int amount);
|
||||
void shiftSemiTone(int amount);
|
||||
bool isSelection() const;
|
||||
@@ -213,19 +214,19 @@ private:
|
||||
void testPlayNote( note * n );
|
||||
void testPlayKey( int _key, int _vol, int _pan );
|
||||
void pauseTestNotes( bool _pause = true );
|
||||
|
||||
|
||||
inline int noteEditTop() const;
|
||||
inline int keyAreaBottom() const;
|
||||
inline int noteEditBottom() const;
|
||||
inline int keyAreaTop() const;
|
||||
inline int noteEditRight() const;
|
||||
inline int noteEditLeft() const;
|
||||
|
||||
|
||||
void dragNotes( int x, int y, bool alt, bool shift );
|
||||
|
||||
|
||||
static const int cm_scrollAmtHoriz = 10;
|
||||
static const int cm_scrollAmtVert = 1;
|
||||
|
||||
|
||||
static QPixmap * s_whiteKeyBigPm;
|
||||
static QPixmap * s_whiteKeyBigPressedPm;
|
||||
static QPixmap * s_whiteKeySmallPm;
|
||||
@@ -252,7 +253,7 @@ private:
|
||||
toolButton * m_eraseButton;
|
||||
toolButton * m_selectButton;
|
||||
toolButton * m_detuneButton;
|
||||
|
||||
|
||||
toolButton * m_cutButton;
|
||||
toolButton * m_copyButton;
|
||||
toolButton * m_pasteButton;
|
||||
@@ -287,22 +288,22 @@ private:
|
||||
int m_selectedTick;
|
||||
int m_selectStartKey;
|
||||
int m_selectedKeys;
|
||||
|
||||
|
||||
// boundary box around all selected notes when dragging
|
||||
int m_moveBoundaryLeft;
|
||||
int m_moveBoundaryTop;
|
||||
int m_moveBoundaryRight;
|
||||
int m_moveBoundaryBottom;
|
||||
|
||||
|
||||
// remember where the scrolling started when dragging so that
|
||||
// we can handle dragging while scrolling with arrow keys
|
||||
int m_mouseDownKey;
|
||||
int m_mouseDownTick;
|
||||
|
||||
|
||||
// remember the last x and y of a mouse movement
|
||||
int m_lastMouseX;
|
||||
int m_lastMouseY;
|
||||
|
||||
|
||||
// x,y of when the user starts a drag
|
||||
int m_moveStartX;
|
||||
int m_moveStartY;
|
||||
@@ -312,7 +313,7 @@ private:
|
||||
int m_ppt;
|
||||
int m_totalKeysToScroll;
|
||||
|
||||
// remember these values to use them
|
||||
// remember these values to use them
|
||||
// for the next note that is set
|
||||
MidiTime m_lenOfNewNotes;
|
||||
volume_t m_lastNoteVolume;
|
||||
@@ -323,7 +324,7 @@ private:
|
||||
|
||||
editModes m_editMode;
|
||||
editModes m_ctrlMode; // mode they were in before they hit ctrl
|
||||
|
||||
|
||||
bool m_mouseDownLeft; //true if left click is being held down
|
||||
bool m_mouseDownRight; //true if right click is being held down
|
||||
|
||||
@@ -337,7 +338,7 @@ private:
|
||||
note * noteUnderMouse();
|
||||
|
||||
// turn a selection rectangle into selected notes
|
||||
void computeSelectedNotes( bool shift );
|
||||
void computeSelectedNotes( bool shift );
|
||||
void clearSelectedNotes();
|
||||
|
||||
friend class engine;
|
||||
|
||||
@@ -170,12 +170,12 @@ public:
|
||||
if ( m_exportLoop )
|
||||
{
|
||||
return m_exporting == true &&
|
||||
m_playPos[Mode_PlaySong].getTact() >= length();
|
||||
m_playPos[Mode_PlaySong].getTicks() >= length() * ticksPerTact();
|
||||
}
|
||||
else
|
||||
{
|
||||
return m_exporting == true &&
|
||||
m_playPos[Mode_PlaySong].getTact() >= length() + 1;
|
||||
m_playPos[Mode_PlaySong].getTicks() >= ( length() + 1 ) * ticksPerTact();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ lmmsicon ICON data/lmms.ico
|
||||
#include <windows.h>
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 0,9,91,0
|
||||
FILEVERSION 0,9,92,0
|
||||
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
|
||||
FILEOS VOS_NT_WINDOWS32
|
||||
FILETYPE VFT_APP
|
||||
|
||||
@@ -52,7 +52,7 @@ Plugin::Descriptor PLUGIN_EXPORT audiofileprocessor_plugin_descriptor =
|
||||
STRINGIFY( PLUGIN_NAME ),
|
||||
"AudioFileProcessor",
|
||||
QT_TRANSLATE_NOOP( "pluginBrowser",
|
||||
"simple sampler with various settings for "
|
||||
"Simple sampler with various settings for "
|
||||
"using samples (e.g. drums) in an "
|
||||
"instrument-track" ),
|
||||
"Tobias Doerffel <tobydox/at/users.sf.net>",
|
||||
|
||||
@@ -44,7 +44,7 @@ Plugin::Descriptor PLUGIN_EXPORT kicker_plugin_descriptor =
|
||||
STRINGIFY( PLUGIN_NAME ),
|
||||
"Kicker",
|
||||
QT_TRANSLATE_NOOP( "pluginBrowser",
|
||||
"versatile kick- & bassdrum-synthesizer" ),
|
||||
"Versatile kick- & bassdrum-synthesizer" ),
|
||||
"Tobias Doerffel <tobydox/at/users.sf.net>",
|
||||
0x0100,
|
||||
Plugin::Instrument,
|
||||
|
||||
@@ -43,7 +43,6 @@
|
||||
#include "embed.cpp"
|
||||
#include "moc_lb302.cxx"
|
||||
|
||||
|
||||
// Envelope Recalculation period
|
||||
#define ENVINC 64
|
||||
|
||||
@@ -340,7 +339,7 @@ lb302Synth::lb302Synth( InstrumentTrack * _instrumentTrack ) :
|
||||
|
||||
vcfs[0] = new lb302Filter3Pole(&fs);
|
||||
vcfs[1] = new lb302FilterIIR2(&fs);
|
||||
vcf = vcfs[1];
|
||||
db24Toggled();
|
||||
|
||||
sample_cnt = 0;
|
||||
release_frame = 1<<24;
|
||||
@@ -401,6 +400,7 @@ void lb302Synth::loadSettings( const QDomElement & _this )
|
||||
slideToggle.loadSettings( _this, "slide");
|
||||
deadToggle.loadSettings( _this, "dead");
|
||||
db24Toggle.loadSettings( _this, "db24");
|
||||
db24Toggled();
|
||||
|
||||
filterChanged();
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 2.8 KiB |
@@ -4,7 +4,7 @@
|
||||
* please read readme.txt in this directory
|
||||
*
|
||||
* Copyright (c) 2014 Wong Cho Ching
|
||||
*
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@@ -159,7 +159,7 @@ void SfxrSynth::resetSample( bool restart )
|
||||
|
||||
|
||||
|
||||
void SfxrSynth::update( sampleFrame * buffer, const fpp_t frameNum )
|
||||
void SfxrSynth::update( sampleFrame * buffer, const int32_t frameNum )
|
||||
{
|
||||
for(int i=0;i<frameNum;i++)
|
||||
{
|
||||
@@ -452,7 +452,7 @@ QString sfxrInstrument::nodeName() const
|
||||
void sfxrInstrument::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer )
|
||||
{
|
||||
float currentSampleRate = engine::mixer()->processingSampleRate();
|
||||
|
||||
|
||||
fpp_t frameNum = _n->framesLeftForCurrentPeriod();
|
||||
if ( _n->totalFramesPlayed() == 0 || _n->m_pluginData == NULL )
|
||||
{
|
||||
@@ -464,10 +464,13 @@ void sfxrInstrument::playNote( NotePlayHandle * _n, sampleFrame * _working_buffe
|
||||
return;
|
||||
}
|
||||
|
||||
fpp_t pitchedFrameNum = (_n->frequency()/BaseFreq)*frameNum;
|
||||
|
||||
int32_t pitchedFrameNum = (_n->frequency()/BaseFreq)*frameNum;
|
||||
|
||||
pitchedFrameNum /= ( currentSampleRate / 44100 );
|
||||
|
||||
|
||||
// debug code
|
||||
// qDebug( "pFN %d", pitchedFrameNum );
|
||||
|
||||
sampleFrame * pitchedBuffer = new sampleFrame[pitchedFrameNum];
|
||||
static_cast<SfxrSynth*>(_n->m_pluginData)->update( pitchedBuffer, pitchedFrameNum );
|
||||
for( fpp_t i=0; i<frameNum; i++ )
|
||||
@@ -483,7 +486,7 @@ void sfxrInstrument::playNote( NotePlayHandle * _n, sampleFrame * _working_buffe
|
||||
applyRelease( _working_buffer, _n );
|
||||
|
||||
instrumentTrack()->processAudioBuffer( _working_buffer, frameNum, _n );
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -622,7 +625,7 @@ sfxrInstrumentView::sfxrInstrumentView( Instrument * _instrument,
|
||||
m_dSlideKnob ->setObjectName( "freqKnob" );
|
||||
m_vibDepthKnob ->setObjectName( "freqKnob" );
|
||||
m_vibSpeedKnob ->setObjectName( "freqKnob" );
|
||||
|
||||
|
||||
createKnob(m_changeAmtKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*0, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*2, "Change Amount");
|
||||
createKnob(m_changeSpeedKnob, KNOBS_BASE_X+KNOB_BLOCK_SIZE_X*1, KNOBS_BASE_Y+KNOB_BLOCK_SIZE_Y*2, "Change Speed");
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* please read readme.txt in this directory
|
||||
*
|
||||
* Copyright (c) 2014 Wong Cho Ching
|
||||
*
|
||||
*
|
||||
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@@ -25,8 +25,8 @@
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _SFXR_H
|
||||
#define _SFXR_H
|
||||
#ifndef SFXR_H
|
||||
#define SFXR_H
|
||||
|
||||
#include "Instrument.h"
|
||||
#include "InstrumentView.h"
|
||||
@@ -74,7 +74,7 @@ public:
|
||||
virtual ~SfxrSynth();
|
||||
|
||||
void resetSample( bool restart );
|
||||
void update( sampleFrame * buffer, const fpp_t frameNum );
|
||||
void update( sampleFrame * buffer, const int32_t frameNum );
|
||||
|
||||
bool isPlaying() const;
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ Plugin::Descriptor PLUGIN_EXPORT tripleoscillator_plugin_descriptor =
|
||||
STRINGIFY( PLUGIN_NAME ),
|
||||
"TripleOscillator",
|
||||
QT_TRANSLATE_NOOP( "pluginBrowser",
|
||||
"three powerful oscillators you can modulate "
|
||||
"Three powerful oscillators you can modulate "
|
||||
"in several ways" ),
|
||||
"Tobias Doerffel <tobydox/at/users.sf.net>",
|
||||
0x0110,
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 7.7 KiB |
@@ -859,13 +859,13 @@ QString SampleBuffer::openAudioFile() const
|
||||
// set filters
|
||||
QStringList types;
|
||||
types << tr( "All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc "
|
||||
"*.aif *.aiff *.au *.raw *.mp3)" )
|
||||
"*.aif *.aiff *.au *.raw)" )
|
||||
<< tr( "Wave-Files (*.wav)" )
|
||||
<< tr( "OGG-Files (*.ogg)" )
|
||||
<< tr( "DrumSynth-Files (*.ds)" )
|
||||
<< tr( "FLAC-Files (*.flac)" )
|
||||
<< tr( "SPEEX-Files (*.spx)" )
|
||||
<< tr( "MP3-Files (*.mp3)" )
|
||||
//<< tr( "MP3-Files (*.mp3)" )
|
||||
//<< tr( "MIDI-Files (*.mid)" )
|
||||
<< tr( "VOC-Files (*.voc)" )
|
||||
<< tr( "AIFF-Files (*.aif *.aiff)" )
|
||||
|
||||
@@ -309,6 +309,9 @@ void song::processNextBuffer()
|
||||
// offset
|
||||
ticks = ticks % ( max_tact * MidiTime::ticksPerTact() );
|
||||
|
||||
// wrap milli second counter
|
||||
m_elapsedMilliSeconds = ( ticks * 60 * 1000 / 48 ) / getTempo();
|
||||
|
||||
m_vstSyncController.setAbsolutePosition( ticks );
|
||||
}
|
||||
}
|
||||
@@ -551,6 +554,12 @@ void song::togglePause()
|
||||
|
||||
void song::stop()
|
||||
{
|
||||
// do not stop/reset things again if we're stopped already
|
||||
if( m_playMode == Mode_None )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
timeLine * tl = m_playPos[m_playMode].m_timeLine;
|
||||
m_playing = false;
|
||||
m_paused = false;
|
||||
|
||||
@@ -1911,6 +1911,8 @@ void AutomationEditor::play()
|
||||
engine::getSong()->togglePause();
|
||||
}
|
||||
}
|
||||
|
||||
setPauseIcon( engine::getSong()->isPlaying() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -48,6 +48,8 @@ AutomationPatternView::AutomationPatternView( AutomationPattern * _pattern,
|
||||
{
|
||||
connect( m_pat, SIGNAL( dataChanged() ),
|
||||
this, SLOT( update() ) );
|
||||
connect( engine::automationEditor(), SIGNAL( currentPatternChanged() ),
|
||||
this, SLOT( update() ) );
|
||||
|
||||
setAttribute( Qt::WA_OpaquePaintEvent, true );
|
||||
setFixedHeight( parentWidget()->height() - 2 );
|
||||
@@ -228,11 +230,17 @@ void AutomationPatternView::paintEvent( QPaintEvent * )
|
||||
lingrad.setColorAt( 0, c );
|
||||
|
||||
p.setBrush( lingrad );
|
||||
p.setPen( c.lighter( 160 ) );
|
||||
if( engine::automationEditor()->currentPattern() == m_pat )
|
||||
p.setPen( c.lighter( 160 ) );
|
||||
else
|
||||
p.setPen( c.lighter( 130 ) );
|
||||
p.drawRect( 1, 1, width()-3, height()-3 );
|
||||
|
||||
p.setBrush( QBrush() );
|
||||
p.setPen( c.darker( 300 ) );
|
||||
if( engine::automationEditor()->currentPattern() == m_pat )
|
||||
p.setPen( c.lighter( 130 ) );
|
||||
else
|
||||
p.setPen( c.darker( 300 ) );
|
||||
p.drawRect( 0, 0, width()-1, height()-1 );
|
||||
|
||||
const float ppt = fixedTCOs() ?
|
||||
@@ -302,16 +310,15 @@ void AutomationPatternView::paintEvent( QPaintEvent * )
|
||||
|
||||
p.resetMatrix();
|
||||
p.setFont( pointSize<8>( p.font() ) );
|
||||
if( m_pat->isMuted() || m_pat->getTrack()->isMuted() )
|
||||
{
|
||||
p.setPen( QColor( 50, 50, 50 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
p.setPen( QColor( 0, 0, 0 ) );
|
||||
}
|
||||
|
||||
p.drawText( 2, p.fontMetrics().height() - 1, m_pat->name() );
|
||||
QColor text_color = ( m_pat->isMuted() || m_pat->getTrack()->isMuted() )
|
||||
? QColor( 30, 30, 30 )
|
||||
: QColor( 255, 255, 255 );
|
||||
|
||||
p.setPen( QColor( 0, 0, 0 ) );
|
||||
p.drawText( 4, p.fontMetrics().height()+1, m_pat->name() );
|
||||
p.setPen( text_color );
|
||||
p.drawText( 3, p.fontMetrics().height(), m_pat->name() );
|
||||
|
||||
if( m_pat->isMuted() )
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -380,9 +380,13 @@ void SampleTCOView::paintEvent( QPaintEvent * _pe )
|
||||
if( m_tco->isRecord() )
|
||||
{
|
||||
p.setFont( pointSize<7>( p.font() ) );
|
||||
p.setPen( QColor( 224, 0, 0 ) );
|
||||
p.drawText( 9, p.fontMetrics().height() - 1, "Rec" );
|
||||
p.setBrush( QBrush( QColor( 224, 0, 0 ) ) );
|
||||
|
||||
p.setPen( QColor( 0, 0, 0 ) );
|
||||
p.drawText( 10, p.fontMetrics().height()+1, "Rec" );
|
||||
p.setPen( QColor( 255, 60, 60 ) );
|
||||
p.drawText( 9, p.fontMetrics().height(), "Rec" );
|
||||
|
||||
p.setBrush( QBrush( QColor( 255, 60, 60 ) ) );
|
||||
p.drawEllipse( 4, 5, 4, 4 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -212,9 +212,12 @@ void bbTCOView::paintEvent( QPaintEvent * )
|
||||
p.drawRect( 0, 0, rect().right(), rect().bottom() );
|
||||
|
||||
p.setFont( pointSize<8>( p.font() ) );
|
||||
|
||||
p.setPen( QColor( 0, 0, 0 ) );
|
||||
p.drawText( 4, p.fontMetrics().height()+1, m_bbTCO->name() );
|
||||
p.setPen( QColor( 255, 255, 255 ) );
|
||||
p.drawText( 3, p.fontMetrics().height(), m_bbTCO->name() );
|
||||
|
||||
|
||||
if( m_bbTCO->isMuted() )
|
||||
{
|
||||
p.drawPixmap( 3, p.fontMetrics().height() + 1,
|
||||
|
||||
@@ -605,6 +605,9 @@ patternView::patternView( pattern * _pattern, trackView * _parent ) :
|
||||
m_paintPixmap(),
|
||||
m_needsUpdate( true )
|
||||
{
|
||||
connect( engine::pianoRoll(), SIGNAL( currentPatternChanged() ),
|
||||
this, SLOT( update() ) );
|
||||
|
||||
if( s_stepBtnOn == NULL )
|
||||
{
|
||||
s_stepBtnOn = new QPixmap( embed::getIconPixmap(
|
||||
@@ -931,13 +934,19 @@ void patternView::paintEvent( QPaintEvent * )
|
||||
}
|
||||
|
||||
p.setBrush( lingrad );
|
||||
p.setPen( c.darker( 300 ) );
|
||||
if( engine::pianoRoll()->currentPattern() == m_pat && m_pat->m_patternType != pattern::BeatPattern )
|
||||
p.setPen( c.lighter( 130 ) );
|
||||
else
|
||||
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 ) );
|
||||
if( engine::pianoRoll()->currentPattern() == m_pat )
|
||||
p.setPen( c.lighter( 160 ) );
|
||||
else
|
||||
p.setPen( c.lighter( 130 ) );
|
||||
p.drawRect( QRect( 1, 1, width() - 3, height() - 3 ) );
|
||||
}
|
||||
|
||||
@@ -961,7 +970,7 @@ void patternView::paintEvent( QPaintEvent * )
|
||||
}
|
||||
|
||||
// melody pattern paint event
|
||||
|
||||
|
||||
if( m_pat->m_patternType == pattern::MelodyPattern )
|
||||
{
|
||||
if( m_pat->m_notes.size() > 0 )
|
||||
@@ -970,12 +979,12 @@ void patternView::paintEvent( QPaintEvent * )
|
||||
// display the area where most of the m_notes are
|
||||
// also calculate min/max tones so the tonal range can be
|
||||
// properly stretched accross the pattern vertically
|
||||
|
||||
|
||||
int central_key = 0;
|
||||
int max_key = 0;
|
||||
int min_key = 9999999;
|
||||
int total_notes = 0;
|
||||
|
||||
|
||||
for( NoteVector::Iterator it = m_pat->m_notes.begin();
|
||||
it != m_pat->m_notes.end(); ++it )
|
||||
{
|
||||
@@ -992,13 +1001,13 @@ void patternView::paintEvent( QPaintEvent * )
|
||||
{
|
||||
central_key = central_key / total_notes;
|
||||
const int keyrange = qMax( qMax( max_key - central_key, central_key - min_key ), 1 );
|
||||
|
||||
|
||||
// debug code
|
||||
// qDebug( "keyrange: %d", keyrange );
|
||||
|
||||
// determine height of the pattern view, sans borders
|
||||
const int ht = height() - 1 - TCO_BORDER_WIDTH * 2;
|
||||
|
||||
|
||||
// determine maximum height value for drawing bounds checking
|
||||
const int max_ht = height() - 1 - TCO_BORDER_WIDTH;
|
||||
|
||||
@@ -1023,7 +1032,7 @@ void patternView::paintEvent( QPaintEvent * )
|
||||
( float( central_key - ( *it )->key() ) / keyrange + 1.0f ) / 2;
|
||||
// multiply that by pattern height
|
||||
const int y_pos = static_cast<int>( TCO_BORDER_WIDTH + y_key * ht );
|
||||
|
||||
|
||||
// debug code
|
||||
// if( ( *it )->length() > 0 ) qDebug( "key %d, central_key %d, y_key %f, y_pos %d", ( *it )->key(), central_key, y_key, y_pos );
|
||||
|
||||
@@ -1039,7 +1048,7 @@ void patternView::paintEvent( QPaintEvent * )
|
||||
const int x2 = x_base +
|
||||
static_cast<int>
|
||||
( ( ( *it )->pos() + ( *it )->length() ) * ( ppt / MidiTime::ticksPerTact() ) );
|
||||
|
||||
|
||||
// check bounds, draw line
|
||||
if( x1 < width() - TCO_BORDER_WIDTH )
|
||||
p.drawLine( x1, y_pos,
|
||||
@@ -1121,17 +1130,16 @@ void patternView::paintEvent( QPaintEvent * )
|
||||
}
|
||||
|
||||
p.setFont( pointSize<8>( p.font() ) );
|
||||
if( m_pat->isMuted() || m_pat->getTrack()->isMuted() )
|
||||
{
|
||||
p.setPen( QColor( 30, 30, 30 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
p.setPen( QColor( 0, 0, 0 ) );
|
||||
}
|
||||
|
||||
QColor text_color = ( m_pat->isMuted() || m_pat->getTrack()->isMuted() )
|
||||
? QColor( 30, 30, 30 )
|
||||
: QColor( 255, 255, 255 );
|
||||
|
||||
if( m_pat->name() != m_pat->instrumentTrack()->name() )
|
||||
{
|
||||
p.setPen( QColor( 0, 0, 0 ) );
|
||||
p.drawText( 4, p.fontMetrics().height()+1, m_pat->name() );
|
||||
p.setPen( text_color );
|
||||
p.drawText( 3, p.fontMetrics().height(), m_pat->name() );
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user