#include "automation.h"
#include "autos.h"
+#include "bccolors.h"
#include "bcsignals.h"
#include "canvas.h"
#include "clip.h"
#include "tracks.h"
#include "transportque.h"
#include "vtrack.h"
+#include "zoombar.h"
static double my_zoom_table[] =
control_out_x = control_out_y = 0;
translating_zoom = 0;
highlighted = 0;
+// *** CONTEXT_HELP ***
+ context_help_set_keyword("Compositor Window");
}
CWindowGUI::~CWindowGUI()
canvas = new CWindowCanvas(mwindow, this);
canvas->create_objects(mwindow->edl);
- canvas->use_cwindow();
-
add_subwindow(timebar = new CTimeBar(mwindow,
this,
if( current_operation == CWINDOW_NONE &&
mwindow->edl != 0 && canvas->get_canvas() &&
mwindow->edl->session->cwindow_click2play &&
- canvas->get_canvas()->get_cursor_over_window() ) {
+ canvas->get_canvas()->cursor_above() ) {
switch( get_buttonpress() ) {
case LEFT_BUTTON:
if( !cwindow->playback_engine->is_playing_back ) {
keyboard_zoomout();
result = 1;
break;
- case 'f':
- unlock_window();
- canvas->use_fullscreen(canvas->get_fullscreen() ? 0 : 1);
- lock_window("CWindowGUI::keypress_event 1");
+ case 'f': {
+ int on = canvas->get_fullscreen() ? 0 : 1;
+ canvas->set_fullscreen(on, 1);
+ result = 1;
+ break; }
+ case ESC:
+ canvas->set_fullscreen(0, 1);
result = 1;
break;
case 'x':
lock_window("CWindowGUI::keypress_event 3");
result = 1;
break;
- case ESC:
- unlock_window();
- canvas->use_fullscreen(0);
- lock_window("CWindowGUI::keypress_event 4");
- result = 1;
- break;
case LEFT:
if( !ctrl_down() ) {
int alt_down = this->alt_down();
if( !result )
result = transport->keypress_event();
+ if( !result )
+ result = context_help_check_and_show();
+
return result;
}
mwindow->theme->cedit_x, mwindow->theme->cedit_y,
mwindow->edl->session->editing_mode,
0, // use_editing_mode
- 1, // use_keyframe
+ 0, // use_keyframe
0, // use_splice
0, // use_overwrite
1, // use_copy
1, // use_cut
0, // use_commerical
0, // use_goto
- 1) // use_clk2play
+ 1, // use_clk2play
+ 1, // use_scope
+ 0, // use_gang_tracks
+ 0) // use_timecode
{
this->mwindow = mwindow;
this->cwindow = cwindow;
void panel_btn(set_auto_keyframes,(int v), set_auto_keyframes(v))
void panel_btn(set_span_keyframes,(int v), set_span_keyframes(v))
void panel_btn(set_labels_follow_edits,(int v), set_labels_follow_edits(v))
+void panel_btn(set_gang_tracks,(int v), set_gang_tracks(v))
CWindowMeters::CWindowMeters(MWindow *mwindow,
gui->lock_window("CWindowTransport::goto_end 2");
}
+CWindowCanvasToggleControls::CWindowCanvasToggleControls(CWindowCanvas *canvas)
+ : BC_MenuItem(calculate_text(canvas->get_controls()))
+{
+ this->canvas = canvas;
+}
+int CWindowCanvasToggleControls::handle_event()
+{
+ canvas->toggle_controls();
+ set_text(calculate_text(canvas->get_controls()));
+ return 1;
+}
+
+const char *CWindowCanvasToggleControls::calculate_text(int controls)
+{
+ return !controls ? _("Show controls") : _("Hide controls");
+}
CWindowCanvas::CWindowCanvas(MWindow *mwindow, CWindowGUI *gui)
{
this->mwindow = mwindow;
this->gui = gui;
+ last_xscroll = 0;
+ last_yscroll = 0;
+ last_zoom = 0;
+ controls = 0;
+}
+
+void CWindowCanvas::create_objects(EDL *edl)
+{
+ Canvas::create_objects(edl);
+ canvas_menu->add_item(new CanvasPopupAuto(this));
+ canvas_menu->add_item(new CanvasPopupResetCamera(this));
+ canvas_menu->add_item(new CanvasPopupResetProjector(this));
+ canvas_menu->add_item(new CanvasPopupCameraKeyframe(this));
+ canvas_menu->add_item(new CanvasPopupProjectorKeyframe(this));
+ canvas_menu->add_item(controls = new CWindowCanvasToggleControls(this));
+ fullscreen_menu->add_item(new CanvasPopupAuto(this));
}
void CWindowCanvas::status_event()
mwindow->edl->session->cwindow_scrollbars = use_scrollbars;
}
-int CWindowCanvas::use_fullscreen(int on)
+int CWindowCanvas::set_fullscreen(int on, int unlock)
{
- if( Canvas::use_fullscreen(on) ) {
- gui->lock_window("CWindowCanvas::use_fullscreen");
- zoom_auto();
- if( !on ) gui->zoom_panel->update(0);
- gui->unlock_window();
+ int ret = 0;
+ if( on && !get_fullscreen() ) {
+ last_xscroll = get_xscroll();
+ last_yscroll = get_yscroll();
+ last_zoom = get_zoom();
+ Canvas::set_fullscreen(1, unlock);
+// zoom_auto();
+ ret = 1;
}
- return 1;
+ if( !on && get_fullscreen() ) {
+ Canvas::set_fullscreen(0, unlock);
+ gui->zoom_panel->update(get_zoom());
+ update_zoom(last_xscroll, last_yscroll, last_zoom);
+ gui->update_canvas();
+ ret = 1;
+ }
+ return ret;
}
int CWindowCanvas::get_xscroll()
return 1;
}
+int CWindowCanvas::scope_on()
+{
+ EditPanelScopeDialog *scope_dialog = gui->edit_panel->scope_dialog;
+ if( !scope_dialog || !scope_dialog->scope_gui ) return 0;
+ if( scope_dialog->scope_gui->use_refresh ) return 0;
+ if( scope_dialog->scope_gui->use_release ) return 0;
+ return scope_dialog->running();
+}
+
+void CWindowCanvas::draw_scope(VFrame *output, int refresh)
+{
+ if( !output ) return;
+ EditPanelScopeDialog *scope_dialog = gui->edit_panel->scope_dialog;
+ if( !scope_dialog || !scope_dialog->scope_gui ) return;
+ if( scope_dialog->scope_gui->use_refresh && !refresh ) return;
+ if( scope_dialog->scope_gui->use_release && refresh >= 0 ) return;
+ scope_dialog->process(output);
+}
+
void CWindowCanvas::draw_refresh(int flush)
{
BC_WindowBase *window = get_canvas();
gui->eyedrop_visible = 1;
}
-// Decompression coefficients straight out of jpeglib
-#define V_TO_R 1.40200
-#define V_TO_G -0.71414
-
-#define U_TO_G -0.34414
-#define U_TO_B 1.77200
-
-#define GET_COLOR(type, components, max, do_yuv) \
-{ \
+#define GET_COLOR(type, components, max, do_yuv) { \
type *row = (type*)(refresh_frame->get_rows()[i]) + \
j * components; \
float red = (float)*row++ / max; \
float green = (float)*row++ / max; \
float blue = (float)*row++ / max; \
if( do_yuv ) \
- { \
- float r = red + V_TO_R * (blue - 0.5); \
- float g = red + U_TO_G * (green - 0.5) + V_TO_G * (blue - 0.5); \
- float b = red + U_TO_B * (green - 0.5); \
- mwindow->edl->local_session->red += r; \
- mwindow->edl->local_session->green += g; \
- mwindow->edl->local_session->blue += b; \
- if( r > mwindow->edl->local_session->red_max ) mwindow->edl->local_session->red_max = r; \
- if( g > mwindow->edl->local_session->green_max ) mwindow->edl->local_session->green_max = g; \
- if( b > mwindow->edl->local_session->blue_max ) mwindow->edl->local_session->blue_max = b; \
- } \
- else \
- { \
- mwindow->edl->local_session->red += red; \
- mwindow->edl->local_session->green += green; \
- mwindow->edl->local_session->blue += blue; \
- if( red > mwindow->edl->local_session->red_max ) mwindow->edl->local_session->red_max = red; \
- if( green > mwindow->edl->local_session->green_max ) mwindow->edl->local_session->green_max = green; \
- if( blue > mwindow->edl->local_session->blue_max ) mwindow->edl->local_session->blue_max = blue; \
- } \
+ YUV::yuv.yuv_to_rgb_f(red, green, blue, red, green-0.5, blue-0.5); \
+ mwindow->edl->local_session->red += red; \
+ mwindow->edl->local_session->green += green; \
+ mwindow->edl->local_session->blue += blue; \
+ if( red > mwindow->edl->local_session->red_max ) mwindow->edl->local_session->red_max = red; \
+ if( green > mwindow->edl->local_session->green_max ) mwindow->edl->local_session->green_max = green; \
+ if( blue > mwindow->edl->local_session->blue_max ) mwindow->edl->local_session->blue_max = blue; \
}
-
-
mwindow->edl->local_session->red = 0;
mwindow->edl->local_session->green = 0;
mwindow->edl->local_session->blue = 0;
z_keyframe->set_value(1);
gui->sync_parameters(CHANGE_PARAMS, 1, 1);
+ MWindowGUI *mgui = mwindow->gui;
+ mgui->lock_window("CWindowCanvas::reset_keyframe");
+ gui->mwindow->edl->local_session->reset_view_limits();
+ gui->mwindow->gui->zoombar->update_autozoom();
+ mgui->unlock_window();
+ mwindow->save_backup();
}
}
redraw = 1;
}
- float x_val = gui->affected_x->get_value();
- float y_val = gui->affected_y->get_value();
- float z_val = gui->affected_z->get_value();
+ CWindowToolGUI *tool_gui = !gui->tool_panel ? 0 : gui->tool_panel->tool_gui;
+ int edge = tool_gui ? tool_gui->edge : 0;
+ int span = tool_gui ? tool_gui->span : 0;
+
+ float x_val = gui->affected_x->get_value(edge);
+ float y_val = gui->affected_y->get_value(edge);
+ float z_val = gui->affected_z->get_value(edge);
if( gui->translating_zoom ) {
float z = gui->center_z + (cursor_y - gui->y_origin) / yS(128);
redraw = 1;
redraw_canvas = 1;
}
- gui->affected_z->set_value(z);
+ gui->affected_z->bump_value(z, edge, span);
}
else {
float dx = cursor_x - gui->x_origin;
}
float x = gui->center_x + dx;
float y = gui->center_y + dy;
- gui->affected_x->set_value(x);
- gui->affected_y->set_value(y);
+ gui->affected_x->bump_value(x, edge, span);
+ gui->affected_y->bump_value(y, edge, span);
if( !EQUIV(x_val, x) || !EQUIV(y_val, y) ) {
rerender = 1;
redraw = 1;
if( EQUIV(zoom, my_zoom_table[idx]) ) continue;
if( zoom < my_zoom_table[idx] ) break;
}
- zoom = idx < total_zooms ? my_zoom_table[idx] : 1.1 * zoom;
+ float zoom11 = 1.1f * zoom;
+ zoom = idx < total_zooms ? my_zoom_table[idx] : zoom11;
+ if( zoom > zoom11 ) zoom = zoom11;
break; }
case WHEEL_DOWN: {
int idx = total_zooms;
if( EQUIV(my_zoom_table[idx], zoom) ) continue;
if( my_zoom_table[idx] < zoom ) break;
}
- zoom = idx >= 0 ? my_zoom_table[idx] : 0.9 * zoom;
+ float zoom09 = 0.9f * zoom;
+ zoom = idx >= 0 ? my_zoom_table[idx] : zoom09;
+ if( zoom < zoom09 ) zoom = zoom09;
break; }
case MIDDLE_BUTTON:
if( gui->shift_down() ) {
break;
case CWINDOW_ZOOM:
- test_zoom(redraw);
+ result = test_zoom(redraw);
break;
case CWINDOW_CROP:
{
int result = 0;
const char *undo_label = 0;
+ BC_WindowBase *window = get_canvas();
+ if( window && !window->get_video_on() )
+ draw_scope(refresh_frame, -1);
switch( gui->current_operation ) {
case CWINDOW_SCROLL:
gui->resize_event(gui->get_w(), gui->get_h());
}
-int CWindowCanvas::get_cwindow_controls()
+int CWindowCanvas::get_controls()
{
return mwindow->session->cwindow_controls;
}