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.
This commit is contained in:
Jonathan Moore Liles 2012-02-29 20:46:57 -08:00
parent 9974e9bb47
commit ca56b8c337
9 changed files with 44 additions and 30 deletions

View File

@ -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 );
} }
} }

View File

@ -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;
} }
}; };

View File

@ -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 *

View File

@ -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;

View File

@ -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
} { } {

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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 );