X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fcwindowtool.C;h=e5e6b2adf43f660e843e5e5aa9002d260b8e0ee7;hb=cb73d14fe59acbe8eba0a62f4af26a23072201fa;hp=bfb7856018b76733d106af2a97a94c491752f964;hpb=667ff598ae2a94f48c7056aee1d77d7cde39066b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/cwindowtool.C b/cinelerra-5.1/cinelerra/cwindowtool.C index bfb78560..e5e6b2ad 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(); @@ -289,9 +292,29 @@ int CWindowToolGUI::close_event() int CWindowToolGUI::keypress_event() { - if(get_keypress() == 'w' || get_keypress() == 'W') + int result = 0; + + switch( get_keypress() ) { + case 'w': + case 'W': return close_event(); - return 0; + case KEY_F1: + case KEY_F2: + case KEY_F3: + case KEY_F4: + case KEY_F5: + case KEY_F6: + case KEY_F7: + case KEY_F8: + case KEY_F9: + case KEY_F10: + case KEY_F11: + case KEY_F12: + resend_event(thread->gui); + result = 1; + } + + return result; } int CWindowToolGUI::translation_event() @@ -546,7 +569,7 @@ void CWindowEyedropGUI::update() rgb_hex->update(rgb_text); float y, u, v; - YUV::rgb_to_yuv_f(r, g, b, y, u, v); + YUV::yuv.rgb_to_yuv_f(r, g, b, y, u, v); this->y->update(y); this->u->update(u); u += 0.5; this->v->update(v); v += 0.5; @@ -1662,6 +1685,9 @@ int CWindowMaskDelete::handle_event() temp_keyframe.copy_data(keyframe); // Update parameter SubMask *submask = temp_keyframe.get_submask(mwindow->edl->session->cwindow_mask); + if( shift_down() ) + submask->points.remove_all_objects(); + for(int i = mwindow->cwindow->gui->affected_point; i < submask->points.total - 1; i++) @@ -1683,6 +1709,8 @@ int CWindowMaskDelete::handle_event() current; ) { SubMask *submask = current->get_submask(mwindow->edl->session->cwindow_mask); + if( shift_down() ) + submask->points.remove_all_objects(); for(int i = mwindow->cwindow->gui->affected_point; i < submask->points.total - 1; @@ -2045,11 +2073,8 @@ int CWindowDisableOpenGLMasking::handle_event() CWindowMaskGUI::CWindowMaskGUI(MWindow *mwindow, CWindowTool *thread) - : CWindowToolGUI(mwindow, - thread, - _(PROGRAM_NAME ": Mask"), - 330, - 310) + : CWindowToolGUI(mwindow, thread, + _(PROGRAM_NAME ": Mask"), 330, 320) { this->mwindow = mwindow; this->thread = thread; @@ -2117,6 +2142,8 @@ void CWindowMaskGUI::create_objects() y += title->get_h() + margin; add_subwindow(title = new BC_Title(x, y, _("Press Ctrl to move a control point"))); y += title->get_h() + margin; + add_subwindow(title = new BC_Title(x, y, _("Shift+click Delete to delete the mask"))); + y += title->get_h() + margin; add_subwindow(title = new BC_Title(x, y, _("Press Alt to translate the mask"))); y += 30; @@ -2283,30 +2310,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)); @@ -2321,42 +2350,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); }