Make note shape (circle, square) optional.
Also, get rid of the canvas's ability to display different shapes on the same canvas, since we never use that feature anyway.pull/3/head
parent
9974e9bb47
commit
ca56b8c337
17
src/canvas.C
17
src/canvas.C
|
@ -50,7 +50,6 @@ Canvas::_alloc_array ( void )
|
||||||
{
|
{
|
||||||
a[ x ][ y ].flags = 0;
|
a[ x ][ y ].flags = 0;
|
||||||
a[ x ][ y ].state = -1;
|
a[ x ][ y ].state = -1;
|
||||||
a[ x ][ y ].shape = SQUARE;
|
|
||||||
a[ x ][ y ].color = 0;
|
a[ x ][ y ].color = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -111,7 +110,7 @@ Canvas::grid ( Grid *g )
|
||||||
|
|
||||||
update_mapping();
|
update_mapping();
|
||||||
|
|
||||||
m.shape = m.grid->draw_shape();
|
// m.shape = m.grid->draw_shape();
|
||||||
|
|
||||||
/* connect signals */
|
/* connect signals */
|
||||||
/* FIXME: what happens when we do this twice? */
|
/* FIXME: what happens when we do this twice? */
|
||||||
|
@ -283,7 +282,7 @@ Canvas::copy ( void )
|
||||||
void
|
void
|
||||||
Canvas::_reset ( void )
|
Canvas::_reset ( void )
|
||||||
{
|
{
|
||||||
cell_t empty = {0,0,0,0};
|
cell_t empty = {0,0,0};
|
||||||
|
|
||||||
for ( uint y = m.vp->h; y-- ; )
|
for ( uint y = m.vp->h; y-- ; )
|
||||||
for ( uint x = m.vp->w; x-- ; )
|
for ( uint x = m.vp->w; x-- ; )
|
||||||
|
@ -302,7 +301,6 @@ Canvas::clear ( void )
|
||||||
for ( uint x = m.vp->w; x--; )
|
for ( uint x = m.vp->w; x--; )
|
||||||
{
|
{
|
||||||
m.current[ x ][ y ].color = 0;
|
m.current[ x ][ y ].color = 0;
|
||||||
m.current[ x ][ y ].shape = m.shape;
|
|
||||||
m.current[ x ][ y ].state = EMPTY;
|
m.current[ x ][ y ].state = EMPTY;
|
||||||
m.current[ x ][ y ].flags = 0;
|
m.current[ x ][ y ].flags = 0;
|
||||||
}
|
}
|
||||||
|
@ -339,6 +337,8 @@ Canvas::flip ( void )
|
||||||
|
|
||||||
if ( viewable_x( m.playhead ) ) draw_line( m.playhead - m.vp->x, F_PLAYHEAD );
|
if ( viewable_x( m.playhead ) ) draw_line( m.playhead - m.vp->x, F_PLAYHEAD );
|
||||||
|
|
||||||
|
const int shape = m.grid->draw_shape();
|
||||||
|
|
||||||
for ( uint y = m.vp->h; y--; )
|
for ( uint y = m.vp->h; y--; )
|
||||||
for ( uint x = m.vp->w; x--; )
|
for ( uint x = m.vp->w; x--; )
|
||||||
{
|
{
|
||||||
|
@ -353,7 +353,7 @@ Canvas::flip ( void )
|
||||||
|
|
||||||
if ( *c != *p )
|
if ( *c != *p )
|
||||||
gui_draw_shape( m.origin_x + m.margin_left + x * m.div_w, m.origin_y + m.margin_top + y * m.div_h, m.div_w, m.div_h, m.border_w,
|
gui_draw_shape( m.origin_x + m.margin_left + x * m.div_w, m.origin_y + m.margin_top + y * m.div_h, m.div_w, m.div_h, m.border_w,
|
||||||
c->shape, c->state, c->flags, c->color );
|
shape, c->state, c->flags, c->color );
|
||||||
}
|
}
|
||||||
|
|
||||||
cell_t **tmp = m.previous;
|
cell_t **tmp = m.previous;
|
||||||
|
@ -451,7 +451,6 @@ Canvas::draw_shape ( int x, int y, int shape, int state, int color, bool selecte
|
||||||
if ( x < 0 || y < 0 || x >= m.vp->w || y >= m.vp->h )
|
if ( x < 0 || y < 0 || x >= m.vp->w || y >= m.vp->h )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m.current[ x ][ y ].shape = shape;
|
|
||||||
m.current[ x ][ y ].color = color;
|
m.current[ x ][ y ].color = color;
|
||||||
m.current[ x ][ y ].state = (uint)m.vp->x + x > m.grid->ts_to_x( m.grid->length() ) ? PARTIAL : state;
|
m.current[ x ][ y ].state = (uint)m.vp->x + x > m.grid->ts_to_x( m.grid->length() ) ? PARTIAL : state;
|
||||||
if ( selected )
|
if ( selected )
|
||||||
|
@ -553,18 +552,18 @@ Canvas::redraw ( void )
|
||||||
draw_mapping();
|
draw_mapping();
|
||||||
draw_ruler();
|
draw_ruler();
|
||||||
|
|
||||||
|
const int shape = m.grid->draw_shape();
|
||||||
|
|
||||||
for ( int y = m.vp->h; y--; )
|
for ( int y = m.vp->h; y--; )
|
||||||
for ( int x = m.vp->w; x--; )
|
for ( int x = m.vp->w; x--; )
|
||||||
{
|
{
|
||||||
cell_t c = m.previous[ x ][ y ];
|
cell_t c = m.previous[ x ][ y ];
|
||||||
|
|
||||||
if ( c.shape > HEXAGON ) return;
|
|
||||||
|
|
||||||
if ( m.vp->x + x == m.playhead )
|
if ( m.vp->x + x == m.playhead )
|
||||||
c.flags |= F_PLAYHEAD;
|
c.flags |= F_PLAYHEAD;
|
||||||
|
|
||||||
gui_draw_shape( m.origin_x + m.margin_left + x * m.div_w, m.origin_y + m.margin_top + y * m.div_h, m.div_w, m.div_h, m.border_w,
|
gui_draw_shape( m.origin_x + m.margin_left + x * m.div_w, m.origin_y + m.margin_top + y * m.div_h, m.div_w, m.div_h, m.border_w,
|
||||||
c.shape, c.state, c.flags, c.color );
|
shape, c.state, c.flags, c.color );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,15 +28,14 @@ using namespace sigc;
|
||||||
class Mapping;
|
class Mapping;
|
||||||
|
|
||||||
struct cell_t {
|
struct cell_t {
|
||||||
unsigned char color;
|
unsigned char color : 8;
|
||||||
unsigned char shape : 4;
|
|
||||||
unsigned char state : 4;
|
unsigned char state : 4;
|
||||||
unsigned char flags : 4;
|
unsigned char flags : 4;
|
||||||
|
|
||||||
bool
|
bool
|
||||||
operator!= ( const cell_t &rhs )
|
operator!= ( const cell_t &rhs )
|
||||||
{
|
{
|
||||||
return color != rhs.color || shape != rhs.shape || state != rhs.state || flags != rhs.flags;
|
return color != rhs.color || state != rhs.state || flags != rhs.flags;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,6 @@ Grid::Grid ( const Grid &rhs ) : sigc::trackable()
|
||||||
_notes = rhs._notes ? strdup( rhs._notes ) : NULL;
|
_notes = rhs._notes ? strdup( rhs._notes ) : NULL;
|
||||||
_number = rhs._number;
|
_number = rhs._number;
|
||||||
_height = rhs._height;
|
_height = rhs._height;
|
||||||
_draw_shape = rhs._draw_shape;
|
|
||||||
|
|
||||||
_mode = 0;
|
_mode = 0;
|
||||||
_locked = 0;
|
_locked = 0;
|
||||||
|
@ -674,7 +673,7 @@ Grid::draw ( Canvas *c, int bx, int by, int bw, int bh )
|
||||||
// if ( ts >= start && ts <= end )
|
// if ( ts >= start && ts <= end )
|
||||||
if ( tse >= start && ts <= end )
|
if ( tse >= start && ts <= end )
|
||||||
c->draw_dash( ts_to_x( ts ), note_to_y( e->note() ), ts_to_x( tse - ts ),
|
c->draw_dash( ts_to_x( ts ), note_to_y( e->note() ), ts_to_x( tse - ts ),
|
||||||
_draw_shape, e->note_velocity(), e->selected() );
|
draw_shape(), e->note_velocity(), e->selected() );
|
||||||
}
|
}
|
||||||
|
|
||||||
c->flip();
|
c->flip();
|
||||||
|
@ -834,11 +833,6 @@ Grid::mode ( void ) const
|
||||||
return _mode;
|
return _mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
Grid::draw_shape ( void ) const
|
|
||||||
{
|
|
||||||
return _draw_shape;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** return a pointer to a copy of grid's event list in raw form */
|
/** return a pointer to a copy of grid's event list in raw form */
|
||||||
event_list *
|
event_list *
|
||||||
|
|
|
@ -109,8 +109,6 @@ protected:
|
||||||
char *_name;
|
char *_name;
|
||||||
int _number;
|
int _number;
|
||||||
|
|
||||||
int _draw_shape;
|
|
||||||
|
|
||||||
bool _suspend_update;
|
bool _suspend_update;
|
||||||
|
|
||||||
unsigned int _bpb; /* beats per bar */
|
unsigned int _bpb; /* beats per bar */
|
||||||
|
@ -201,7 +199,7 @@ public:
|
||||||
char * notes ( void ) const;
|
char * notes ( void ) const;
|
||||||
virtual void mode ( int m );
|
virtual void mode ( int m );
|
||||||
virtual int mode ( void ) const;
|
virtual int mode ( void ) const;
|
||||||
int draw_shape ( void ) const;
|
virtual int draw_shape ( void ) const = 0;
|
||||||
int next_note_x ( int x ) const;
|
int next_note_x ( int x ) const;
|
||||||
int prev_note_x ( int x ) const;
|
int prev_note_x ( int x ) const;
|
||||||
|
|
||||||
|
|
|
@ -183,7 +183,7 @@ if ( Fl::event() == FL_SHORTCUT && Fl::event_key() == FL_Escape )
|
||||||
|
|
||||||
if ( maybe_save_song() )
|
if ( maybe_save_song() )
|
||||||
quit();} open
|
quit();} open
|
||||||
xywh {856 305 865 800} type Double box PLASTIC_UP_BOX color 37 resizable xclass non size_range {600 420 0 0} visible
|
xywh {856 276 865 800} type Double box PLASTIC_UP_BOX color 37 resizable xclass non size_range {600 420 0 0} visible
|
||||||
} {
|
} {
|
||||||
Fl_Menu_Bar menu_bar {open
|
Fl_Menu_Bar menu_bar {open
|
||||||
xywh {0 0 869 30} color 37
|
xywh {0 0 869 30} color 37
|
||||||
|
@ -378,6 +378,25 @@ pattern_canvas_widget->redraw();}
|
||||||
config.follow_playhead = val ? true : false;}
|
config.follow_playhead = val ? true : false;}
|
||||||
xywh {10 10 40 25} type Toggle value 1
|
xywh {10 10 40 25} type Toggle value 1
|
||||||
}
|
}
|
||||||
|
Submenu {} {
|
||||||
|
label {Note Shape} open
|
||||||
|
xywh {0 0 74 24}
|
||||||
|
} {
|
||||||
|
MenuItem {} {
|
||||||
|
label Circle
|
||||||
|
callback {pattern::note_shape = CIRCLE;
|
||||||
|
pattern_canvas_widget->redraw();
|
||||||
|
}
|
||||||
|
xywh {0 0 40 24} type Radio
|
||||||
|
}
|
||||||
|
MenuItem {} {
|
||||||
|
label Square
|
||||||
|
callback {pattern::note_shape = SQUARE;
|
||||||
|
pattern_canvas_widget->redraw();
|
||||||
|
} selected
|
||||||
|
xywh {0 0 40 24} type Radio
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Submenu {} {
|
Submenu {} {
|
||||||
label {&Help} open
|
label {&Help} open
|
||||||
|
@ -981,7 +1000,7 @@ else
|
||||||
} {
|
} {
|
||||||
MenuItem {} {
|
MenuItem {} {
|
||||||
label Pattern
|
label Pattern
|
||||||
callback {song.play_mode = PATTERN;} selected
|
callback {song.play_mode = PATTERN;}
|
||||||
xywh {5 5 40 25}
|
xywh {5 5 40 25}
|
||||||
}
|
}
|
||||||
MenuItem {} {
|
MenuItem {} {
|
||||||
|
@ -1048,7 +1067,7 @@ detach_button->value( 0 );} open
|
||||||
Function {make_about_popup()} {open
|
Function {make_about_popup()} {open
|
||||||
} {
|
} {
|
||||||
Fl_Window about_popup {
|
Fl_Window about_popup {
|
||||||
label About open selected
|
label About open
|
||||||
xywh {697 224 535 685} type Double non_modal size_range {535 685 535 685} visible
|
xywh {697 224 535 685} type Double non_modal size_range {535 685 535 685} visible
|
||||||
} {
|
} {
|
||||||
Fl_Box {} {
|
Fl_Box {} {
|
||||||
|
@ -1848,8 +1867,7 @@ for ( i = 0; i < MAX_PATTERN; i++ )
|
||||||
b->value( 0 );
|
b->value( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
}} {selected
|
}} {}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Function {resize( int X, int Y, int W, int H )} {open return_type void
|
Function {resize( int X, int Y, int W, int H )} {open return_type void
|
||||||
} {
|
} {
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
#include "jack.H"
|
#include "jack.H"
|
||||||
#include "transport.H"
|
#include "transport.H"
|
||||||
|
|
||||||
|
int pattern::note_shape = CIRCLE;
|
||||||
|
|
||||||
event_list pattern::_recorded_events;
|
event_list pattern::_recorded_events;
|
||||||
vector <pattern*> pattern::_patterns;
|
vector <pattern*> pattern::_patterns;
|
||||||
int pattern::_solo;
|
int pattern::_solo;
|
||||||
|
@ -37,7 +39,6 @@ pattern::pattern ( void )
|
||||||
viewport.h = 32;
|
viewport.h = 32;
|
||||||
viewport.w = 32;
|
viewport.w = 32;
|
||||||
|
|
||||||
_draw_shape = CIRCLE;
|
|
||||||
_channel = _port = 0;
|
_channel = _port = 0;
|
||||||
|
|
||||||
_ppqn = 4;
|
_ppqn = 4;
|
||||||
|
|
|
@ -36,6 +36,7 @@ class pattern : public Grid
|
||||||
static int _solo;
|
static int _solo;
|
||||||
static int _pattern_recording;
|
static int _pattern_recording;
|
||||||
|
|
||||||
|
|
||||||
static int solo ( void );
|
static int solo ( void );
|
||||||
|
|
||||||
int _channel, _port;
|
int _channel, _port;
|
||||||
|
@ -54,6 +55,10 @@ class pattern : public Grid
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
static int note_shape;
|
||||||
|
|
||||||
|
int draw_shape ( void ) const { return pattern::note_shape; }
|
||||||
|
|
||||||
static signal <void> signal_create_destroy;
|
static signal <void> signal_create_destroy;
|
||||||
|
|
||||||
Mapping mapping;
|
Mapping mapping;
|
||||||
|
|
|
@ -31,8 +31,6 @@ phrase::phrase ( void )
|
||||||
viewport.h = 32;
|
viewport.h = 32;
|
||||||
viewport.w = 32;
|
viewport.w = 32;
|
||||||
|
|
||||||
_draw_shape = SQUARE;
|
|
||||||
|
|
||||||
_add();
|
_add();
|
||||||
|
|
||||||
char *s;
|
char *s;
|
||||||
|
|
|
@ -38,6 +38,8 @@ public:
|
||||||
|
|
||||||
static signal <void> signal_create_destroy;
|
static signal <void> signal_create_destroy;
|
||||||
|
|
||||||
|
int draw_shape ( void ) const { return SQUARE; }
|
||||||
|
|
||||||
phrase ( void );
|
phrase ( void );
|
||||||
~phrase ( void );
|
~phrase ( void );
|
||||||
phrase ( const phrase &rhs );
|
phrase ( const phrase &rhs );
|
||||||
|
|
Loading…
Reference in New Issue