X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fcwindowtool.C;h=f0f372a5aba2f82315f2ee38d7a232af060e21a8;hp=cb3a1d7e4f7cf4d0187a8ce82e631d34d6702451;hb=HEAD;hpb=9d8694b7d2e0f4202e025eaf78d096340184b4e6 diff --git a/cinelerra-5.1/cinelerra/cwindowtool.C b/cinelerra-5.1/cinelerra/cwindowtool.C index cb3a1d7e..f0f372a5 100644 --- a/cinelerra-5.1/cinelerra/cwindowtool.C +++ b/cinelerra-5.1/cinelerra/cwindowtool.C @@ -83,6 +83,7 @@ void CWindowTool::start_tool(int operation) //printf("CWindowTool::start_tool 1\n"); if(current_tool != operation) { + int previous_tool = current_tool; current_tool = operation; switch(operation) { @@ -104,6 +105,10 @@ void CWindowTool::start_tool(int operation) case CWINDOW_RULER: new_gui = new CWindowRulerGUI(mwindow, this); break; + case CWINDOW_PROTECT: + mwindow->edl->session->tool_window = 0; + gui->composite_panel->operation[CWINDOW_TOOL_WINDOW]->update(0); + // fall thru default: result = 1; stop_tool(); @@ -120,13 +125,11 @@ void CWindowTool::start_tool(int operation) output_lock->lock("CWindowTool::start_tool"); this->tool_gui = new_gui; tool_gui->create_objects(); - - if(mwindow->edl->session->tool_window && - mwindow->session->show_cwindow) tool_gui->show_window(); - tool_gui->lock_window("CWindowTool::start_tool 1"); - tool_gui->flush(); - tool_gui->unlock_window(); - + if( previous_tool == CWINDOW_PROTECT || previous_tool == CWINDOW_NONE ) { + mwindow->edl->session->tool_window = 1; + gui->composite_panel->operation[CWINDOW_TOOL_WINDOW]->update(1); + } + update_show_window(); // Signal thread to run next tool GUI input_lock->unlock(); @@ -290,7 +293,6 @@ int CWindowToolGUI::close_event() int CWindowToolGUI::keypress_event() { int result = 0; - int cwindow_operation = CWINDOW_NONE; switch( get_keypress() ) { case 'w': @@ -306,6 +308,8 @@ int CWindowToolGUI::keypress_event() case KEY_F8: case KEY_F9: case KEY_F10: + case KEY_F11: + case KEY_F12: resend_event(thread->gui); result = 1; } @@ -909,7 +913,9 @@ void CWindowCameraGUI::update() if(z_auto) { float value = z_auto->get_value(); z->update(value); + thread->gui->lock_window("CWindowCameraGUI::update"); thread->gui->composite_panel->cpanel_zoom->update(value); + thread->gui->unlock_window(); } if( x_auto && y_auto && z_auto ) @@ -1351,7 +1357,9 @@ void CWindowProjectorGUI::update() if(z_auto) { float value = z_auto->get_value(); z->update(value); + thread->gui->lock_window("CWindowProjectorGUI::update"); thread->gui->composite_panel->cpanel_zoom->update(value); + thread->gui->unlock_window(); } if( x_auto && y_auto && z_auto ) @@ -2306,30 +2314,32 @@ CWindowRulerGUI::~CWindowRulerGUI() void CWindowRulerGUI::create_objects() { - int x = 10, y = 10; + int x = 10, y = 10, x1 = 100; BC_Title *title; lock_window("CWindowRulerGUI::create_objects"); add_subwindow(title = new BC_Title(x, y, _("Current:"))); - add_subwindow(current = new BC_Title(x + title->get_w() + 10, y, "")); + add_subwindow(current = new BC_TextBox(x1, y, 200, 1, "")); y += title->get_h() + 5; - add_subwindow(title = new BC_Title(x, y, _("Point 1:"))); - add_subwindow(point1 = new BC_Title(x + title->get_w() + 10, y, "")); + add_subwindow(point1 = new BC_TextBox(x1, y, 200, 1, "")); y += title->get_h() + 5; - add_subwindow(title = new BC_Title(x, y, _("Point 2:"))); - add_subwindow(point2 = new BC_Title(x + title->get_w() + 10, y, "")); + add_subwindow(point2 = new BC_TextBox(x1, y, 200, 1, "")); + y += title->get_h() + 5; + add_subwindow(title = new BC_Title(x, y, _("Deltas:"))); + add_subwindow(deltas = new BC_TextBox(x1, y, 200, 1, "")); y += title->get_h() + 5; - add_subwindow(title = new BC_Title(x, y, _("Distance:"))); - add_subwindow(distance = new BC_Title(x + title->get_w() + 10, y, "")); + add_subwindow(distance = new BC_TextBox(x1, y, 200, 1, "")); y += title->get_h() + 5; add_subwindow(title = new BC_Title(x, y, _("Angle:"))); - add_subwindow(angle = new BC_Title(x + title->get_w() + 10, y, "")); + add_subwindow(angle = new BC_TextBox(x1, y, 200, 1, "")); y += title->get_h() + 10; char string[BCTEXTLEN]; - sprintf(string, _("Press Ctrl to lock ruler to the\nnearest 45%c angle."), 0xb0); + sprintf(string, + _("Press Ctrl to lock ruler to the\nnearest 45%c%c angle."), + 0xc2, 0xb0); // degrees utf add_subwindow(title = new BC_Title(x, y, string)); @@ -2344,42 +2354,27 @@ void CWindowRulerGUI::create_objects() void CWindowRulerGUI::update() { - double distance_value = - sqrt(SQR(mwindow->edl->session->ruler_x2 - mwindow->edl->session->ruler_x1) + - SQR(mwindow->edl->session->ruler_y2 - mwindow->edl->session->ruler_y1)); - double angle_value = atan((mwindow->edl->session->ruler_y2 - mwindow->edl->session->ruler_y1) / - (mwindow->edl->session->ruler_x2 - mwindow->edl->session->ruler_x1)) * - 360 / - 2 / - M_PI; - - if(EQUIV(distance_value, 0.0)) - { - angle_value = 0.0; - } - else - if(angle_value < 0) - { - angle_value *= -1; - } - char string[BCTEXTLEN]; - sprintf(string, "%d, %d", - mwindow->session->cwindow_output_x, - mwindow->session->cwindow_output_y); + int cx = mwindow->session->cwindow_output_x; + int cy = mwindow->session->cwindow_output_y; + sprintf(string, "%d, %d", cx, cy); current->update(string); - sprintf(string, "%.0f, %.0f", - mwindow->edl->session->ruler_x1, - mwindow->edl->session->ruler_y1); + double x1 = mwindow->edl->session->ruler_x1; + double y1 = mwindow->edl->session->ruler_y1; + sprintf(string, "%.0f, %.0f", x1, y1); point1->update(string); - sprintf(string, "%.0f, %.0f", - mwindow->edl->session->ruler_x2, - mwindow->edl->session->ruler_y2); + double x2 = mwindow->edl->session->ruler_x2; + double y2 = mwindow->edl->session->ruler_y2; + sprintf(string, "%.0f, %.0f", x2, y2); point2->update(string); - - sprintf(string, _("%0.01f pixels"), distance_value); + double dx = x2 - x1, dy = y2 - y1; + sprintf(string, "%s%.0f, %s%.0f", (dx>=0? "+":""), dx, (dy>=0? "+":""), dy); + deltas->update(string); + double d = sqrt(dx*dx + dy*dy); + sprintf(string, _("%0.01f pixels"), d); distance->update(string); - sprintf(string, "%0.02f %c", angle_value, 0xb0); + double a = d > 0 ? (atan2(-dy, dx) * 180/M_PI) : 0.; + sprintf(string, "%0.02f %c%c", a, 0xc2, 0xb0); angle->update(string); }