audio clip editor: basics of line dragging
This commit is contained in:
parent
eac0f28642
commit
5b4dd8dcf4
@ -60,6 +60,7 @@ using std::max;
|
|||||||
|
|
||||||
AudioClipEditor::AudioClipEditor ()
|
AudioClipEditor::AudioClipEditor ()
|
||||||
: spp (0)
|
: spp (0)
|
||||||
|
, _current_drag (0)
|
||||||
{
|
{
|
||||||
const double scale = UIConfiguration::instance().get_ui_scale();
|
const double scale = UIConfiguration::instance().get_ui_scale();
|
||||||
|
|
||||||
@ -83,6 +84,10 @@ AudioClipEditor::AudioClipEditor ()
|
|||||||
loop_line->set (Duple (50, 0), Duple (50, 1));
|
loop_line->set (Duple (50, 0), Duple (50, 1));
|
||||||
loop_line->set_outline_width (line_width * scale);
|
loop_line->set_outline_width (line_width * scale);
|
||||||
|
|
||||||
|
start_line->Event.connect (sigc::bind (sigc::mem_fun (*this, &AudioClipEditor::line_event_handler), start_line));
|
||||||
|
end_line->Event.connect (sigc::bind (sigc::mem_fun (*this, &AudioClipEditor::line_event_handler), end_line));
|
||||||
|
loop_line->Event.connect (sigc::bind (sigc::mem_fun (*this, &AudioClipEditor::line_event_handler), loop_line));
|
||||||
|
|
||||||
/* hide lines until there is a region */
|
/* hide lines until there is a region */
|
||||||
|
|
||||||
line_container->hide ();
|
line_container->hide ();
|
||||||
@ -95,6 +100,66 @@ AudioClipEditor::~AudioClipEditor ()
|
|||||||
drop_waves ();
|
drop_waves ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
AudioClipEditor::line_event_handler (GdkEvent* ev, ArdourCanvas::Line* l)
|
||||||
|
{
|
||||||
|
std::cerr << "event type " << Gtkmm2ext::event_type_string (ev->type) << " on line " << std::endl;
|
||||||
|
|
||||||
|
switch (ev->type) {
|
||||||
|
case GDK_BUTTON_PRESS:
|
||||||
|
_current_drag = new LineDrag (*this, *l);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case GDK_BUTTON_RELEASE:
|
||||||
|
if (_current_drag) {
|
||||||
|
_current_drag->end (&ev->button);
|
||||||
|
delete _current_drag;
|
||||||
|
_current_drag = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GDK_MOTION_NOTIFY:
|
||||||
|
if (_current_drag) {
|
||||||
|
_current_drag->motion (&ev->motion);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
AudioClipEditor::LineDrag::LineDrag (AudioClipEditor& ed, ArdourCanvas::Line& l)
|
||||||
|
: editor (ed)
|
||||||
|
, line (l)
|
||||||
|
{
|
||||||
|
line.grab();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
AudioClipEditor::LineDrag::begin (GdkEventButton* ev)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
AudioClipEditor::LineDrag::end (GdkEventButton* ev)
|
||||||
|
{
|
||||||
|
line.ungrab();
|
||||||
|
std::cerr << "grab end\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
AudioClipEditor::LineDrag::motion (GdkEventMotion* ev)
|
||||||
|
{
|
||||||
|
line.set_x0 (ev->x);
|
||||||
|
line.set_x1 (ev->x);
|
||||||
|
std::cerr << "move to " << ev->x << ", " << ev->y << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AudioClipEditor::set_colors ()
|
AudioClipEditor::set_colors ()
|
||||||
{
|
{
|
||||||
|
@ -81,12 +81,35 @@ class AudioClipEditor : public ArdourCanvas::GtkCanvas
|
|||||||
std::vector<ArdourWaveView::WaveView *> waves;
|
std::vector<ArdourWaveView::WaveView *> waves;
|
||||||
double spp;
|
double spp;
|
||||||
|
|
||||||
|
enum LineType {
|
||||||
|
StartLine,
|
||||||
|
EndLine,
|
||||||
|
LoopLine,
|
||||||
|
};
|
||||||
|
|
||||||
bool event_handler (GdkEvent* ev);
|
bool event_handler (GdkEvent* ev);
|
||||||
|
bool line_event_handler (GdkEvent* ev, ArdourCanvas::Line*);
|
||||||
void drop_waves ();
|
void drop_waves ();
|
||||||
void set_wave_heights (int);
|
void set_wave_heights (int);
|
||||||
void set_wave_spp (ARDOUR::samplecnt_t);
|
void set_wave_spp (ARDOUR::samplecnt_t);
|
||||||
void set_waveform_colors ();
|
void set_waveform_colors ();
|
||||||
void set_colors ();
|
void set_colors ();
|
||||||
|
|
||||||
|
class LineDrag {
|
||||||
|
public:
|
||||||
|
LineDrag (AudioClipEditor&, ArdourCanvas::Line&);
|
||||||
|
|
||||||
|
void begin (GdkEventButton*);
|
||||||
|
void end (GdkEventButton*);
|
||||||
|
void motion (GdkEventMotion*);
|
||||||
|
|
||||||
|
private:
|
||||||
|
AudioClipEditor& editor;
|
||||||
|
ArdourCanvas::Line& line;
|
||||||
|
};
|
||||||
|
|
||||||
|
friend class LineDrag;
|
||||||
|
LineDrag* _current_drag;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AudioClipEditorBox : public ClipEditorBox
|
class AudioClipEditorBox : public ClipEditorBox
|
||||||
|
Loading…
Reference in New Issue
Block a user