*
*/
+#include "awindow.h"
+#include "awindowgui.h"
#include "bcsignals.h"
#include "clip.h"
#include "cplayback.h"
if( press && get_value() ) {
timebar->current_operation = TIMEBAR_DRAG_LABEL;
timebar->drag_label = this;
- set_cursor(MOVE_CURSOR, 0, 0);
+ set_cursor(HSEPARATE_CURSOR, 0, 0);
mwindow->undo->update_undo_before(_("drag label"), this);
return 1;
}
case TIMEBAR_DRAG_LABEL:
if( !press ) {
timebar->current_operation = TIMEBAR_NONE;
+ timebar->drag_label = 0;
set_cursor(ARROW_CURSOR, 0, 0);
mwindow->undo->update_undo_after(_("drag label"), LOAD_TIMEBAR);
+ mwindow->awindow->gui->async_update_assets(); // labels folder
}
break;
}
return 1;
}
+void LabelGUI::update_value()
+{
+ EDL *edl = timebar->get_edl();
+ double start = edl->local_session->get_selectionstart(1);
+ double end = edl->local_session->get_selectionend(1);
+ int v = ( label->position >= start && end >= label->position ) ||
+ edl->equivalent(label->position, start) ||
+ edl->equivalent(label->position, end) ||
+ timebar->drag_label == this ? 1 : 0;
+ update(v);
+}
+
InPointGUI::InPointGUI(MWindow *mwindow, TimeBar *timebar,
int64_t pixel, double position)
gui->pixel = pixel;
gui->reposition(0);
}
- else {
- gui->draw_face(1,0);
- }
+// else {
+// gui->draw_face(1,0);
+// }
labels.values[output]->position = current->position;
labels.values[output]->set_tooltip(current->textstr);
labels.values[output]->label = current;
}
- if( edl->local_session->get_selectionstart(1) <= current->position &&
- edl->local_session->get_selectionend(1) >= current->position )
- labels.values[output]->update(1);
- else
- if( labels.values[output]->get_value() )
- labels.values[output]->update(0);
-
- output++;
+ labels.values[output++]->update_value();
}
}
}
EDL *edl = get_edl();
if( !edl ) return;
for( int i = 0; i < labels.total; i++ ) {
- LabelGUI *label = labels.values[i];
- if( edl->equivalent(label->position,
- edl->local_session->get_selectionstart(1)) ||
- edl->equivalent(label->position,
- edl->local_session->get_selectionend(1)) ) {
- if( !label->get_value() ) label->update(1);
- }
- else
- if( label->get_value() ) label->update(0);
+ labels.values[i]->update_value();
}
if( edl->equivalent(edl->local_session->get_inpoint(),
int result = 0;
int redraw = 0;
-//printf("TimeBar::cursor_motion_event %d %p %d\n", __LINE__, this, current_operation);
- switch( current_operation )
- {
- case TIMEBAR_DRAG_LEFT:
- case TIMEBAR_DRAG_RIGHT:
- case TIMEBAR_DRAG_CENTER:
- if( has_preview() )
- result = move_preview(redraw);
- break;
-
- case TIMEBAR_DRAG_LABEL:
- if( drag_label ) {
- int pixel = get_relative_cursor_x();
- double position = pixel_to_position(pixel);
- if( drag_label->label )
- drag_label->label->position = position;
- else if( drag_label == in_point ) {
- EDL *edl = get_edl();
- edl->local_session->set_inpoint(position);
- }
- else if( drag_label == out_point ) {
- EDL *edl = get_edl();
- edl->local_session->set_outpoint(position);
+ switch( current_operation ) {
+ case TIMEBAR_DRAG_LEFT:
+ case TIMEBAR_DRAG_RIGHT:
+ case TIMEBAR_DRAG_CENTER:
+ if( has_preview() )
+ result = move_preview(redraw);
+ break;
+
+ case TIMEBAR_DRAG_LABEL:
+ if( drag_label ) {
+ EDL *edl = get_edl();
+ int pixel = get_relative_cursor_x();
+ double position = pixel_to_position(pixel);
+ if( drag_label->label )
+ drag_label->label->position = position;
+ else if( drag_label == in_point ) {
+ if( out_point && edl->local_session->outpoint_valid() ) {
+ double out_pos = edl->local_session->get_outpoint();
+ if( position > out_pos ) {
+ edl->local_session->set_outpoint(position);
+ drag_label = out_point;
+ position = out_pos;
+ }
}
+ edl->local_session->set_inpoint(position);
}
- highlighted = 1;
- redraw = 1; // fall thru
-
- case TIMEBAR_DRAG:
- update_cursor();
- handle_mwindow_drag();
- result = 1;
-//printf("TimeBar::cursor_motion_event %d %d\n", __LINE__, current_operation);
- break;
-
- default:
- if( cursor_above() ) {
- highlighted = 1;
- redraw = 1;
+ else if( drag_label == out_point ) {
+ if( in_point && edl->local_session->inpoint_valid() ) {
+ double in_pos = edl->local_session->get_inpoint();
+ if( position < in_pos ) {
+ edl->local_session->set_inpoint(position);
+ drag_label = in_point;
+ position = in_pos;
+ }
+ }
+ edl->local_session->set_outpoint(position);
}
+ }
+ // fall thru
+ case TIMEBAR_DRAG:
+ update_cursor();
+ handle_mwindow_drag();
+ result = 1;
+ break;
-//printf("TimeBar::cursor_motion_event 20\n");
- if( has_preview() )
- result = test_preview(0);
-//printf("TimeBar::cursor_motion_event 30\n");
- break;
+ default:
+ if( has_preview() )
+ result = test_preview(0);
+ break;
}
-//printf("TimeBar::cursor_motion_event %d %d\n", __LINE__, current_operation);
if( redraw ) {
update(1);
}
-//printf("TimeBar::cursor_motion_event %d %p %d\n", __LINE__, this, current_operation);
return result;
}