From d51893dec6a5a8a37dfe888ef3bb3a61f6a37e4c Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 8 Jul 2020 21:49:52 -0600 Subject: [PATCH] start repacking beatbox GUI using constraint packing --- gtk2_ardour/beatbox_gui.cc | 69 ++++++++++++++++++++------------------ gtk2_ardour/beatbox_gui.h | 13 ++++--- 2 files changed, 44 insertions(+), 38 deletions(-) diff --git a/gtk2_ardour/beatbox_gui.cc b/gtk2_ardour/beatbox_gui.cc index e95ab4ac48..c6fef7e6a3 100644 --- a/gtk2_ardour/beatbox_gui.cc +++ b/gtk2_ardour/beatbox_gui.cc @@ -20,7 +20,7 @@ #include #include -#include +#include #include "pbd/compose.h" #include "pbd/i18n.h" @@ -38,6 +38,7 @@ #include "canvas/canvas.h" #include "canvas/grid.h" #include "canvas/box.h" +#include "canvas/cbox.h" #include "canvas/rectangle.h" #include "canvas/polygon.h" #include "canvas/scroll_group.h" @@ -69,6 +70,7 @@ BBGUI::BBGUI (boost::shared_ptr bb) , bbox (bb) , horizontal_adjustment (0.0, 0.0, 800.0) , vertical_adjustment (0.0, 0.0, 10.0, 400.0) + , export_as_region_button (_("Export as Region")) , vscrollbar (vertical_adjustment) { _canvas_viewport = new GtkCanvasViewport (horizontal_adjustment, vertical_adjustment); @@ -242,67 +244,66 @@ SequencerView::SequencerView (StepSequencer& s, ArdourCanvas::Item *p) 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_vbox = new ArdourCanvas::cBox (_canvas->root(), ArdourCanvas::Vertical); + button_packer = new ArdourCanvas::cBox (_canvas->root(), ArdourCanvas::Horizontal); + no_scroll_vbox->pack_start (button_packer, PackOptions (PackExpand|PackFill), PackOptions (0)); v_scroll_group = new ScrollGroup (_canvas->root(), ScrollGroup::ScrollsVertically); _canvas->add_scroller (*v_scroll_group); - sequence_vbox = new ArdourCanvas::VBox (v_scroll_group); + sequence_vbox = new ArdourCanvas::cBox (v_scroll_group, ArdourCanvas::Vertical); sequence_vbox->set_position (Duple (0, (mode_button_ydim + mode_button_spacing) + _step_dimen + 3)); - velocity_mode_button = new Rectangle (no_scroll_group); + velocity_mode_button = new Rectangle (_canvas); velocity_mode_button->set_corner_radius (10.0); - velocity_mode_button->set_position (Duple (rhs_xoffset, mode_button_spacing)); - velocity_mode_button->set (Rect (0, 0, mode_button_width, mode_button_height)); + velocity_mode_button->set_intrinsic_size (mode_button_width, mode_button_height); velocity_mode_button->set_fill_color (current_mode_color); velocity_mode_text = new Text (velocity_mode_button); velocity_mode_text->set_font_description (UIConfiguration::instance().get_LargeFont()); velocity_mode_text->set (_("Velocity")); velocity_mode_text->set_color (contrasting_text_color (velocity_mode_button->fill_color())); - velocity_mode_text->set_position (mode_button_center.translate (Duple (-velocity_mode_text->width()/2.0, -velocity_mode_text->height()/2.0))); - pitch_mode_button = new Rectangle (no_scroll_group); + pitch_mode_button = new Rectangle (_canvas); pitch_mode_button->set_corner_radius (10.0); - pitch_mode_button->set_position (Duple (rhs_xoffset + mode_button_xdim, mode_button_spacing)); - pitch_mode_button->set (Rect (0, 0, mode_button_width, mode_button_height)); + pitch_mode_button->set_intrinsic_size (mode_button_width, mode_button_height); pitch_mode_button->set_fill_color (not_current_mode_color); pitch_mode_text = new Text (pitch_mode_button); pitch_mode_text->set_font_description (UIConfiguration::instance().get_LargeFont()); pitch_mode_text->set (_("Pitch")); pitch_mode_text->set_color (contrasting_text_color (pitch_mode_button->fill_color())); - pitch_mode_text->set_position (mode_button_center.translate (Duple (-pitch_mode_text->width()/2.0, -pitch_mode_text->height()/2.0))); - gate_mode_button = new Rectangle (no_scroll_group); + gate_mode_button = new Rectangle (_canvas); gate_mode_button->set_corner_radius (10.0); - gate_mode_button->set_position (Duple (rhs_xoffset + (mode_button_xdim * 2), mode_button_spacing)); - gate_mode_button->set (Rect (0, 0, mode_button_width, mode_button_height)); + gate_mode_button->set_intrinsic_size (mode_button_width, mode_button_height); gate_mode_button->set_fill_color (not_current_mode_color); gate_mode_text = new Text (gate_mode_button); gate_mode_text->set_font_description (UIConfiguration::instance().get_LargeFont()); gate_mode_text->set (_("Gate")); gate_mode_text->set_color (contrasting_text_color (gate_mode_button->fill_color())); - gate_mode_text->set_position (mode_button_center.translate (Duple (-gate_mode_text->width()/2.0, -gate_mode_text->height()/2.0))); - octave_mode_button = new Rectangle (no_scroll_group); + octave_mode_button = new Rectangle (_canvas); octave_mode_button->set_corner_radius (10.0); - octave_mode_button->set_position (Duple (rhs_xoffset + (mode_button_xdim * 3), mode_button_spacing)); - octave_mode_button->set (Rect (0, 0, mode_button_width, mode_button_height)); + octave_mode_button->set_intrinsic_size (mode_button_width, mode_button_height); octave_mode_button->set_fill_color (not_current_mode_color); octave_mode_text = new Text (octave_mode_button); octave_mode_text->set_font_description (UIConfiguration::instance().get_LargeFont()); octave_mode_text->set (_("Octave")); octave_mode_text->set_color (contrasting_text_color (octave_mode_button->fill_color())); - octave_mode_text->set_position (mode_button_center.translate (Duple (-octave_mode_text->width()/2.0, -octave_mode_text->height()/2.0))); - timing_mode_button = new Rectangle (no_scroll_group); + timing_mode_button = new Rectangle (_canvas); timing_mode_button->set_corner_radius (10.0); - timing_mode_button->set_position (Duple (rhs_xoffset + (mode_button_xdim * 4), mode_button_spacing)); - timing_mode_button->set (Rect (0, 0, mode_button_width, mode_button_height)); + timing_mode_button->set_intrinsic_size (mode_button_width, mode_button_height); timing_mode_button->set_fill_color (not_current_mode_color); timing_mode_text = new Text (timing_mode_button); timing_mode_text->set_font_description (UIConfiguration::instance().get_LargeFont()); timing_mode_text->set (_("Timing")); timing_mode_text->set_color (contrasting_text_color (timing_mode_button->fill_color())); - timing_mode_text->set_position (mode_button_center.translate (Duple (-timing_mode_text->width()/2.0, -timing_mode_text->height()/2.0))); + + button_packer->pack_start (velocity_mode_button, PackOptions (PackExpand|PackFill), PackOptions (0)); + button_packer->pack_start (pitch_mode_button, PackOptions (PackExpand|PackFill), PackOptions (0)); + button_packer->pack_start (gate_mode_button, PackOptions (PackExpand|PackFill), PackOptions (0)); + button_packer->pack_start (octave_mode_button, PackOptions (PackExpand|PackFill), PackOptions (0)); + button_packer->pack_start (timing_mode_button, PackOptions (PackExpand|PackFill), PackOptions (0)); /* place "us", the rectangle that contains/defines/draws the grid */ set_position (Duple (rhs_xoffset, _step_dimen + mode_button_ydim + mode_button_spacing)); @@ -370,8 +371,8 @@ SequencerView::sequencer_changed (PropertyChange const &) set (Rect (0, 0, _width, _height)); if (!step_indicator_box) { - 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 = new ArdourCanvas::cBox (_canvas, ArdourCanvas::Horizontal); + no_scroll_vbox->pack_start (step_indicator_box); step_indicator_box->name = "step_indicator_box"; step_indicator_box->set_fill (true); step_indicator_box->set_spacing (1.0); @@ -388,7 +389,8 @@ SequencerView::sequencer_changed (PropertyChange const &) size_t n = step_indicators.size(); while (step_indicators.size() < nsteps) { - SequencerStepIndicator* ssi = new SequencerStepIndicator (*this, step_indicator_box, n); + SequencerStepIndicator* ssi = new SequencerStepIndicator (*this, canvas(), n); + step_indicator_box->pack_start (ssi, PackOptions (PackExpand|PackFill), PackOptions (0)); step_indicators.push_back (ssi); ++n; } @@ -522,8 +524,8 @@ Gtkmm2ext::Color SequencerStepIndicator::current_text_color = Gtkmm2ext::Color ( Gtkmm2ext::Color SequencerStepIndicator::bright_outline_color = Gtkmm2ext::Color (0); int SequencerStepIndicator::dragging = 0; -SequencerStepIndicator::SequencerStepIndicator (SequencerView& s, Item* p, size_t n) - : Rectangle (p) +SequencerStepIndicator::SequencerStepIndicator (SequencerView& s, ArdourCanvas::Canvas* c, size_t n) + : Rectangle (c) , sv (s) , number (n) , being_dragged (false) @@ -536,7 +538,7 @@ SequencerStepIndicator::SequencerStepIndicator (SequencerView& s, Item* p, size_ bright_outline_color = UIConfiguration::instance().color ("gtk_bright_indicator"); } - set (Rect (0.0, 0.0, _step_dimen - 1, _step_dimen - 1)); // UR/LR corners, not UR, width, height + set_intrinsic_size (_step_dimen - 1, _step_dimen - 1); set_fill_color (HSV (UIConfiguration::instance().color ("gtk_bases")).lighter (0.1)); set_fill (true); @@ -696,8 +698,8 @@ SequencerStepIndicator::render (Rect const & area, Cairo::RefPtrset (X_("0")); } else { - const int64_t gcd = boost::math::gcd (_step.offset().to_ticks(), int64_t (1920)); + const int64_t gcd = boost::integer::gcd (_step.offset().to_ticks(), int64_t (1920)); const int64_t n = _step.offset().to_ticks() / gcd; const int64_t d = 1920 / gcd; text->set (string_compose ("%1/%2", n, d)); @@ -1047,7 +1049,7 @@ StepView::adjust_step_duration (Step::DurationRatio const & amt) /**/ SequenceView::SequenceView (SequencerView& sview, StepSequence& sq, Item* parent) - : HBox (parent) + : cBox (parent, Horizontal) , sv (sview) , sequence (sq) { @@ -1098,8 +1100,9 @@ SequenceView::SequenceView (SequencerView& sview, StepSequence& sq, Item* parent const size_t nsteps = sequencer().nsteps(); for (size_t n = 0; n < nsteps; ++n) { - StepView* stepview = new StepView (*this, sequence.step (n), this); + StepView* stepview = new StepView (*this, sequence.step (n), canvas()); step_views.push_back (stepview); + pack_start (stepview, PackOptions (PackExpand|PackFill), PackOptions (PackExpand|PackFill)); } } diff --git a/gtk2_ardour/beatbox_gui.h b/gtk2_ardour/beatbox_gui.h index 34c2bc1c12..3a4d3db15d 100644 --- a/gtk2_ardour/beatbox_gui.h +++ b/gtk2_ardour/beatbox_gui.h @@ -36,6 +36,7 @@ #include "widgets/ardour_button.h" #include "canvas/box.h" +#include "canvas/cbox.h" #include "canvas/canvas.h" #include "canvas/rectangle.h" @@ -110,8 +111,10 @@ class SequencerView : public ArdourCanvas::Rectangle, public sigc::trackable { Mode _mode; ArdourCanvas::ScrollGroup* v_scroll_group; ArdourCanvas::Container* no_scroll_group; - ArdourCanvas::HBox* step_indicator_box; - ArdourCanvas::VBox* sequence_vbox; + ArdourCanvas::cBox* no_scroll_vbox; + ArdourCanvas::cBox* button_packer; + ArdourCanvas::cBox* step_indicator_box; + ArdourCanvas::cBox* sequence_vbox; ArdourCanvas::Rectangle* velocity_mode_button; ArdourCanvas::Rectangle* pitch_mode_button; @@ -135,7 +138,7 @@ class SequencerView : public ArdourCanvas::Rectangle, public sigc::trackable { }; -class SequenceView : public ArdourCanvas::HBox +class SequenceView : public ArdourCanvas::cBox { public: SequenceView (SequencerView&, ARDOUR::StepSequence&, ArdourCanvas::Item* parent); @@ -172,7 +175,7 @@ class SequenceView : public ArdourCanvas::HBox class StepView : public ArdourCanvas::Rectangle, public sigc::trackable { public: - StepView (SequenceView&, ARDOUR::Step&, ArdourCanvas::Item* parent); + StepView (SequenceView&, ARDOUR::Step&, ArdourCanvas::Canvas* canvas); void render (ArdourCanvas::Rect const &, Cairo::RefPtr) const; bool on_event (GdkEvent*); @@ -213,7 +216,7 @@ class StepView : public ArdourCanvas::Rectangle, public sigc::trackable { class SequencerStepIndicator : public ArdourCanvas::Rectangle, public sigc::trackable { public: - SequencerStepIndicator (SequencerView&, ArdourCanvas::Item* parent, size_t n); + SequencerStepIndicator (SequencerView&, ArdourCanvas::Canvas*, size_t n); void render (ArdourCanvas::Rect const &, Cairo::RefPtr) const; bool on_event (GdkEvent*);