mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 23:05:04 +01:00
start using Canvas::Box as intended
This commit is contained in:
parent
2ae616bf44
commit
3fb713370f
2 changed files with 47 additions and 70 deletions
|
|
@ -257,6 +257,7 @@ SequencerGrid::SequencerGrid (StepSequencer& s, Canvas* c)
|
||||||
: Rectangle (c)
|
: Rectangle (c)
|
||||||
, _sequencer (s)
|
, _sequencer (s)
|
||||||
, _mode (Velocity)
|
, _mode (Velocity)
|
||||||
|
, step_indicator_bg (0)
|
||||||
{
|
{
|
||||||
if (current_mode_color == 0) {
|
if (current_mode_color == 0) {
|
||||||
current_mode_color = UIConfiguration::instance().color ("gtk_lightest");
|
current_mode_color = UIConfiguration::instance().color ("gtk_lightest");
|
||||||
|
|
@ -266,8 +267,9 @@ SequencerGrid::SequencerGrid (StepSequencer& s, Canvas* c)
|
||||||
const Duple mode_button_center (mode_button_width/2.0, mode_button_height/2.0);
|
const Duple mode_button_center (mode_button_width/2.0, mode_button_height/2.0);
|
||||||
|
|
||||||
no_scroll_group = new ArdourCanvas::Container (_canvas->root());
|
no_scroll_group = new ArdourCanvas::Container (_canvas->root());
|
||||||
step_indicator_box = new ArdourCanvas::Container (no_scroll_group);
|
step_indicator_box = new ArdourCanvas::HBox (no_scroll_group);
|
||||||
step_indicator_box->set_position (Duple (rhs_xoffset, mode_button_height + (mode_button_spacing * 2.0)));
|
step_indicator_box->set_position (Duple (rhs_xoffset, mode_button_height + (mode_button_spacing * 2.0)));
|
||||||
|
step_indicator_box->name = "step_indicator_box";
|
||||||
|
|
||||||
v_scroll_group = new ScrollGroup (_canvas->root(), ScrollGroup::ScrollsVertically);
|
v_scroll_group = new ScrollGroup (_canvas->root(), ScrollGroup::ScrollsVertically);
|
||||||
_canvas->add_scroller (*v_scroll_group);
|
_canvas->add_scroller (*v_scroll_group);
|
||||||
|
|
@ -393,22 +395,31 @@ SequencerGrid::sequencer_changed (PropertyChange const &)
|
||||||
|
|
||||||
set (Rect (0, 0, _width, _height));
|
set (Rect (0, 0, _width, _height));
|
||||||
|
|
||||||
step_indicator_box->clear (true); /* delete all existing step indicators */
|
delete step_indicator_bg;
|
||||||
step_indicators.clear ();
|
|
||||||
|
|
||||||
step_indicator_bg = new ArdourCanvas::Rectangle (step_indicator_box);
|
step_indicator_bg = new ArdourCanvas::Rectangle (no_scroll_group);
|
||||||
step_indicator_bg->set_fill_color (HSV (UIConfiguration::instance().color ("gtk_bases")).lighter (0.1));
|
step_indicator_bg->set_fill_color (HSV (UIConfiguration::instance().color ("gtk_bases")).lighter (0.1));
|
||||||
step_indicator_bg->set_outline (false);
|
step_indicator_bg->set_outline (false);
|
||||||
|
step_indicator_bg->set_position (Duple (rhs_xoffset, mode_button_height + (mode_button_spacing * 2.0)));
|
||||||
step_indicator_bg->set (Rect (0, 0, _width, _step_dimen));
|
step_indicator_bg->set (Rect (0, 0, _width, _step_dimen));
|
||||||
|
step_indicator_bg->lower_to_bottom ();
|
||||||
|
|
||||||
/* indicator row */
|
/* indicator row */
|
||||||
|
|
||||||
for (size_t n = 0; n < nsteps; ++n) {
|
while (step_indicators.size() > nsteps) {
|
||||||
SequencerStepIndicator* ssi = new SequencerStepIndicator (*this, step_indicator_box, n);
|
SequencerStepIndicator* ssi = step_indicators.back();
|
||||||
ssi->set_position (Duple (n * _step_dimen, 0));
|
step_indicators.pop_back();
|
||||||
ssi->set (Rect (0, 0, _step_dimen, _step_dimen));
|
delete ssi;
|
||||||
ssi->set_fill_color (random());
|
}
|
||||||
|
|
||||||
|
size_t n = step_indicators.size();
|
||||||
|
|
||||||
|
while (step_indicators.size() < nsteps) {
|
||||||
|
SequencerStepIndicator* ssi = new SequencerStepIndicator (*this, canvas(), n);
|
||||||
|
ssi->set (Rect (0.0, 0.0, _step_dimen - 3.0, _step_dimen - 3.0));
|
||||||
|
step_indicator_box->pack_start (ssi);
|
||||||
step_indicators.push_back (ssi);
|
step_indicators.push_back (ssi);
|
||||||
|
++n;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* step views, one per step per sequence */
|
/* step views, one per step per sequence */
|
||||||
|
|
@ -416,25 +427,28 @@ SequencerGrid::sequencer_changed (PropertyChange const &)
|
||||||
clear (true);
|
clear (true);
|
||||||
step_views.clear ();
|
step_views.clear ();
|
||||||
|
|
||||||
if (nsequences != sequence_headers.size()) {
|
while (sequence_headers.size() > nsequences) {
|
||||||
//sequence_headers.clear (true);
|
SequenceHeader* sh = sequence_headers.back ();
|
||||||
|
sequence_headers.pop_back ();
|
||||||
|
delete sh;
|
||||||
|
}
|
||||||
|
|
||||||
cerr << "Creating " << nsequences << " SH\n";
|
n = sequence_headers.size();
|
||||||
|
|
||||||
for (size_t s = 0; s < nsequences; ++s) {
|
while (sequence_headers.size() < nsequences) {
|
||||||
SequenceHeader* sh = new SequenceHeader (*this, _sequencer.sequence (s), v_scroll_group);
|
SequenceHeader* sh = new SequenceHeader (*this, _sequencer.sequence (n), v_scroll_group);
|
||||||
sh->set_position (Duple (0, (mode_button_ydim + mode_button_spacing) + ((s+1) * _step_dimen)));
|
sh->set_position (Duple (0, (mode_button_ydim + mode_button_spacing) + ((n+1) * _step_dimen)));
|
||||||
sh->set (Rect (1, 1, rhs_xoffset - 2, _step_dimen - 2));
|
sh->set (Rect (1, 1, rhs_xoffset - 2, _step_dimen - 2));
|
||||||
sh->set_fill_color (UIConfiguration::instance().color ("gtk_bright_color"));
|
sh->set_fill_color (UIConfiguration::instance().color ("gtk_bright_color"));
|
||||||
sequence_headers.push_back (sh);
|
sequence_headers.push_back (sh);
|
||||||
}
|
++n;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t s = 0; s < nsequences; ++s) {
|
for (size_t s = 0; s < nsequences; ++s) {
|
||||||
for (size_t n = 0; n < nsteps; ++n) {
|
for (size_t n = 0; n < nsteps; ++n) {
|
||||||
StepView* sv = new StepView (*this, _sequencer.sequence (s).step (n), this);
|
StepView* sv = new StepView (*this, _sequencer.sequence (s).step (n), this);
|
||||||
sv->set_position (Duple (n * _step_dimen, s * _step_dimen));
|
sv->set_position (Duple (n * _step_dimen, s * _step_dimen));
|
||||||
sv->set (Rect (1, 1, _step_dimen - 2, _step_dimen - 2));
|
sv->set (Rect (0, 0, _step_dimen - 1, _step_dimen - 1));
|
||||||
step_views.push_back (sv);
|
step_views.push_back (sv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -533,45 +547,8 @@ SequencerGrid::set_mode (Mode m)
|
||||||
void
|
void
|
||||||
SequencerGrid::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const
|
SequencerGrid::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const
|
||||||
{
|
{
|
||||||
Rect self (item_to_window (get(), false));
|
/* might do more one day */
|
||||||
const Rect draw = self.intersection (area);
|
Rectangle::render (area, context);
|
||||||
|
|
||||||
if (!draw) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_fill_context (context);
|
|
||||||
context->rectangle (draw.x0, draw.y0, draw.width(), draw.height());
|
|
||||||
context->fill ();
|
|
||||||
|
|
||||||
context->set_line_width (1.0);
|
|
||||||
|
|
||||||
/* horizontal lines */
|
|
||||||
|
|
||||||
Gtkmm2ext::set_source_rgba (context, 0x000000ff);
|
|
||||||
|
|
||||||
for (size_t n = 0; n < _sequencer.nsequences(); ++n) {
|
|
||||||
double x = 0;
|
|
||||||
double y = n * _step_dimen;
|
|
||||||
Duple start = item_to_window (Duple (x, y).translate (Duple (0.5, 0.5)));
|
|
||||||
|
|
||||||
context->move_to (start.x, start.y);
|
|
||||||
context->line_to (start.x + _width, start.y);
|
|
||||||
context->stroke ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* vertical */
|
|
||||||
|
|
||||||
for (size_t n = 0; n < _sequencer.nsteps(); ++n) {
|
|
||||||
double x = n * _step_dimen;
|
|
||||||
double y = 0;
|
|
||||||
Duple start = item_to_window (Duple (x, y).translate (Duple (0.5, 0.5)));
|
|
||||||
|
|
||||||
context->move_to (start.x, start.y);
|
|
||||||
context->line_to (start.x, start.y + _height);
|
|
||||||
context->stroke ();
|
|
||||||
}
|
|
||||||
|
|
||||||
render_children (area, context);
|
render_children (area, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -591,8 +568,8 @@ Gtkmm2ext::Color SequencerStepIndicator::current_text_color = Gtkmm2ext::Color (
|
||||||
Gtkmm2ext::Color SequencerStepIndicator::bright_outline_color = Gtkmm2ext::Color (0);
|
Gtkmm2ext::Color SequencerStepIndicator::bright_outline_color = Gtkmm2ext::Color (0);
|
||||||
int SequencerStepIndicator::dragging = 0;
|
int SequencerStepIndicator::dragging = 0;
|
||||||
|
|
||||||
SequencerStepIndicator::SequencerStepIndicator (SequencerGrid& s, Item *p, size_t n)
|
SequencerStepIndicator::SequencerStepIndicator (SequencerGrid& s, Canvas* c, size_t n)
|
||||||
: Rectangle (p)
|
: Rectangle (c)
|
||||||
, grid (s)
|
, grid (s)
|
||||||
, number (n)
|
, number (n)
|
||||||
, being_dragged (false)
|
, being_dragged (false)
|
||||||
|
|
@ -610,16 +587,16 @@ SequencerStepIndicator::SequencerStepIndicator (SequencerGrid& s, Item *p, size_
|
||||||
|
|
||||||
poly = new Polygon (this);
|
poly = new Polygon (this);
|
||||||
Points points;
|
Points points;
|
||||||
/* half pixel shifts are to get a clean single pixel outline */
|
points.push_back (Duple (0, 0));
|
||||||
points.push_back (Duple (0.5, 0.5));
|
points.push_back (Duple (_step_dimen - 4.0, 0));
|
||||||
points.push_back (Duple (_step_dimen - 0.5, 0.5));
|
points.push_back (Duple (_step_dimen - 4.0, (_step_dimen - 4.0)/2.0));
|
||||||
points.push_back (Duple (_step_dimen - 0.5, (_step_dimen - 1.0)/2.0));
|
points.push_back (Duple ((_step_dimen - 4.0)/2.0, _step_dimen - 4.0));
|
||||||
points.push_back (Duple ((_step_dimen - 1.0)/2.0, _step_dimen - 0.5));
|
points.push_back (Duple (0, (_step_dimen - 4.0)/2.0));
|
||||||
points.push_back (Duple (0.5, (_step_dimen - 1.0)/2.0));
|
|
||||||
poly->set (points);
|
poly->set (points);
|
||||||
poly->set_fill_color (current_color);
|
poly->set_fill_color (current_color);
|
||||||
poly->set_outline_color (other_color);
|
poly->set_outline_color (other_color);
|
||||||
poly->set_ignore_events (true);
|
poly->set_ignore_events (true);
|
||||||
|
poly->move (Duple (0.5, 0.5));
|
||||||
|
|
||||||
text = new Text (this);
|
text = new Text (this);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -131,7 +131,7 @@ class StepView : public ArdourCanvas::Rectangle, public sigc::trackable {
|
||||||
|
|
||||||
class SequencerStepIndicator : public ArdourCanvas::Rectangle, public sigc::trackable {
|
class SequencerStepIndicator : public ArdourCanvas::Rectangle, public sigc::trackable {
|
||||||
public:
|
public:
|
||||||
SequencerStepIndicator (SequencerGrid&, ArdourCanvas::Item *, size_t n);
|
SequencerStepIndicator (SequencerGrid&, ArdourCanvas::Canvas*, size_t n);
|
||||||
void render (ArdourCanvas::Rect const &, Cairo::RefPtr<Cairo::Context>) const;
|
void render (ArdourCanvas::Rect const &, Cairo::RefPtr<Cairo::Context>) const;
|
||||||
bool on_event (GdkEvent*);
|
bool on_event (GdkEvent*);
|
||||||
|
|
||||||
|
|
@ -207,7 +207,7 @@ class SequencerGrid : public ArdourCanvas::Rectangle, public sigc::trackable {
|
||||||
ArdourCanvas::ScrollGroup* v_scroll_group;
|
ArdourCanvas::ScrollGroup* v_scroll_group;
|
||||||
ArdourCanvas::Container* no_scroll_group;
|
ArdourCanvas::Container* no_scroll_group;
|
||||||
ArdourCanvas::Rectangle* step_indicator_bg;
|
ArdourCanvas::Rectangle* step_indicator_bg;
|
||||||
ArdourCanvas::Container* step_indicator_box;
|
ArdourCanvas::HBox* step_indicator_box;
|
||||||
|
|
||||||
ArdourCanvas::Rectangle* velocity_mode_button;
|
ArdourCanvas::Rectangle* velocity_mode_button;
|
||||||
ArdourCanvas::Rectangle* pitch_mode_button;
|
ArdourCanvas::Rectangle* pitch_mode_button;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue