From: Good Guy Date: Tue, 14 May 2019 21:23:17 +0000 (-0600) Subject: modify clr btn 16 plugins, add regdmp for sigtraps, rework mask_engine, mask rotate... X-Git-Tag: 2019-08~52 X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=commitdiff_plain;h=c857b2fb7965d27d86d5785fb9f1b8957a871a1a;hp=413642aafb5e96e9c72b53312176838526fbfd97;ds=sidebyside modify clr btn 16 plugins, add regdmp for sigtraps, rework mask_engine, mask rotate,scale,names,modes --- diff --git a/cinelerra-5.1/cinelerra/cwindowgui.C b/cinelerra-5.1/cinelerra/cwindowgui.C index d29e0575..af4d818d 100644 --- a/cinelerra-5.1/cinelerra/cwindowgui.C +++ b/cinelerra-5.1/cinelerra/cwindowgui.C @@ -1823,7 +1823,18 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, } SubMask *mask = gui->mask_keyframe->get_submask(mwindow->edl->session->cwindow_mask); - + if( get_buttonpress() == WHEEL_UP || get_buttonpress() == WHEEL_DOWN ) { + if( !gui->shift_down() ) { + mwindow->undo->update_undo_before(_("mask rotate"), this); + gui->current_operation = CWINDOW_MASK_ROTATE; + } + else { + mwindow->undo->update_undo_before(_("mask scale"), this); + gui->current_operation = CWINDOW_MASK_SCALE; + } + gui->affected_point = 0; + } + else // Translate entire keyframe if(gui->alt_down() && mask->points.size()) { mwindow->undo->update_undo_before(_("mask translate"), 0); @@ -1993,17 +2004,12 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, if(button_press && result) { #ifdef USE_KEYFRAME_SPANNING - MaskPoint *point = points.values[gui->affected_point]; - gui->center_x = point->x; - gui->center_y = point->y; - gui->control_in_x = point->control_x1; - gui->control_in_y = point->control_y1; - gui->control_out_x = point->control_x2; - gui->control_out_y = point->control_y2; - gui->tool_panel->raise_window(); + ArrayList &mask_points = points; #else SubMask *mask = gui->mask_keyframe->get_submask(mwindow->edl->session->cwindow_mask); - MaskPoint *point = mask->points.values[gui->affected_point]; + ArrayList &mask_points = mask->points; +#endif + MaskPoint *point = mask_points.values[gui->affected_point]; gui->center_x = point->x; gui->center_y = point->y; gui->control_in_x = point->control_x1; @@ -2011,18 +2017,15 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, gui->control_out_x = point->control_x2; gui->control_out_y = point->control_y2; gui->tool_panel->raise_window(); -#endif } //printf("CWindowCanvas::do_mask 8\n"); - if(cursor_motion) { + if( cursor_motion ) { #ifdef USE_KEYFRAME_SPANNING // Must update the reference keyframes for every cursor motion - gui->mask_keyframe = - (MaskAuto*)gui->cwindow->calculate_affected_auto( - mask_autos, - 0); + gui->mask_keyframe = (MaskAuto*)gui->cwindow-> + calculate_affected_auto(mask_autos, 0); gui->orig_mask_keyframe->copy_data(gui->mask_keyframe); #endif @@ -2033,12 +2036,13 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, gui->current_operation != CWINDOW_NONE) { // mwindow->undo->update_undo_before(_("mask point"), this); #ifdef USE_KEYFRAME_SPANNING - MaskPoint *point = points.get(gui->affected_point); + ArrayList &mask_points = points; #else - MaskPoint *point = mask->points.get(gui->affected_point); + ArrayList &mask_points = mask->points; #endif + MaskPoint *point = mask_points.get(gui->affected_point); // canvas_to_output(mwindow->edl, 0, cursor_x, cursor_y); -//printf("CWindowCanvas::do_mask 9 %d %d\n", mask->points.size(), gui->affected_point); +//printf("CWindowCanvas::do_mask 9 %d %d\n", mask_points.size(), gui->affected_point); float last_x = point->x; float last_y = point->y; @@ -2046,39 +2050,52 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, float last_control_y1 = point->control_y1; float last_control_x2 = point->control_x2; float last_control_y2 = point->control_y2; + int rotate = 0; switch(gui->current_operation) { - case CWINDOW_MASK: + case CWINDOW_MASK: //printf("CWindowCanvas::do_mask %d %d\n", __LINE__, gui->affected_point); - point->x = mask_cursor_x - gui->x_origin + gui->center_x; - point->y = mask_cursor_y - gui->y_origin + gui->center_y; - break; + point->x = mask_cursor_x - gui->x_origin + gui->center_x; + point->y = mask_cursor_y - gui->y_origin + gui->center_y; + break; - case CWINDOW_MASK_CONTROL_IN: - point->control_x1 = mask_cursor_x - gui->x_origin + gui->control_in_x; - point->control_y1 = mask_cursor_y - gui->y_origin + gui->control_in_y; - break; + case CWINDOW_MASK_CONTROL_IN: + point->control_x1 = mask_cursor_x - gui->x_origin + gui->control_in_x; + point->control_y1 = mask_cursor_y - gui->y_origin + gui->control_in_y; + break; - case CWINDOW_MASK_CONTROL_OUT: - point->control_x2 = mask_cursor_x - gui->x_origin + gui->control_out_x; - point->control_y2 = mask_cursor_y - gui->y_origin + gui->control_out_y; - break; + case CWINDOW_MASK_CONTROL_OUT: + point->control_x2 = mask_cursor_x - gui->x_origin + gui->control_out_x; + point->control_y2 = mask_cursor_y - gui->y_origin + gui->control_out_y; + break; - case CWINDOW_MASK_TRANSLATE: -#ifdef USE_KEYFRAME_SPANNING - for(int i = 0; i < points.size(); i++) { - points.values[i]->x += mask_cursor_x - gui->x_origin; - points.values[i]->y += mask_cursor_y - gui->y_origin; - } -#else - for(int i = 0; i < mask->points.size(); i++) { - mask->points.values[i]->x += mask_cursor_x - gui->x_origin; - mask->points.values[i]->y += mask_cursor_y - gui->y_origin; - } -#endif - gui->x_origin = mask_cursor_x; - gui->y_origin = mask_cursor_y; - break; + case CWINDOW_MASK_TRANSLATE: + for(int i = 0; i < mask_points.size(); i++) { + mask_points.values[i]->x += mask_cursor_x - gui->x_origin; + mask_points.values[i]->y += mask_cursor_y - gui->y_origin; + } + gui->x_origin = mask_cursor_x; + gui->y_origin = mask_cursor_y; + break; + case CWINDOW_MASK_ROTATE: + rotate = 1; + case CWINDOW_MASK_SCALE: { + int button_no = get_buttonpress(); + double scale = button_no == WHEEL_UP ? 1.02 : 0.98; + double theta = button_no == WHEEL_UP ? M_PI/360. : -M_PI/360.; + float st = sin(theta), ct = cos(theta); + gui->x_origin = mask_cursor_x; + gui->y_origin = mask_cursor_y; + for( int i=0; ix - mask_cursor_x; + float py = point->y - mask_cursor_y; + float nx = !rotate ? px*scale : px*ct + py*st; + float ny = !rotate ? py*scale : py*ct - px*st; + point->x = nx + mask_cursor_x; + point->y = ny + mask_cursor_y; + } + break; } } if( !EQUIV(last_x, point->x) || @@ -3297,8 +3314,16 @@ int CWindowCanvas::button_press_event() break; case CWINDOW_MASK: - if(get_buttonpress() == 1) + switch( get_buttonpress() ) { + case LEFT_BUTTON: result = do_mask(redraw, rerender, 1, 0, 0); + break; + case WHEEL_UP: + case WHEEL_DOWN: + result = do_mask(redraw, rerender, 1, 1, 0); + break; + } + if( result ) redraw_canvas = 1; break; case CWINDOW_EYEDROP: @@ -3316,6 +3341,7 @@ int CWindowCanvas::button_press_event() int CWindowCanvas::button_release_event() { int result = 0; + const char *undo_label = 0; switch(gui->current_operation) { @@ -3328,11 +3354,11 @@ int CWindowCanvas::button_release_event() break; case CWINDOW_CAMERA: - mwindow->undo->update_undo_after(_("camera"), LOAD_AUTOMATION); + undo_label = _("camera"); break; case CWINDOW_PROJECTOR: - mwindow->undo->update_undo_after(_("projector"), LOAD_AUTOMATION); + undo_label = _("projector"); break; case CWINDOW_MASK: @@ -3341,13 +3367,23 @@ int CWindowCanvas::button_release_event() case CWINDOW_MASK_TRANSLATE: // Finish mask operation gui->mask_keyframe = 0; - mwindow->undo->update_undo_after(_("mask"), LOAD_AUTOMATION); + undo_label = _("mask"); + break; + case CWINDOW_MASK_ROTATE: + gui->mask_keyframe = 0; + undo_label = _("mask rotate"); + break; + case CWINDOW_MASK_SCALE: + gui->mask_keyframe = 0; + undo_label = _("mask scale"); break; case CWINDOW_NONE: result = Canvas::button_release_event(); break; } + if( undo_label ) + mwindow->undo->update_undo_after(undo_label, LOAD_AUTOMATION); gui->current_operation = CWINDOW_NONE; return result; } diff --git a/cinelerra-5.1/cinelerra/cwindowtool.C b/cinelerra-5.1/cinelerra/cwindowtool.C index 99577fd8..4a76981c 100644 --- a/cinelerra-5.1/cinelerra/cwindowtool.C +++ b/cinelerra-5.1/cinelerra/cwindowtool.C @@ -330,14 +330,14 @@ int CWindowToolGUI::translation_event() CWindowCoord::CWindowCoord(CWindowToolGUI *gui, int x, int y, float value, int log_increment = 0) - : BC_TumbleTextBox(gui, (float)value, (float)-65536, (float)65536, x, y, 100) + : BC_TumbleTextBox(gui, (float)value, (float)-65536, (float)65536, x, y, 100, 3) { this->gui = gui; set_log_floatincrement(log_increment); } CWindowCoord::CWindowCoord(CWindowToolGUI *gui, int x, int y, int value) - : BC_TumbleTextBox(gui, (int64_t)value, (int64_t)-65536, (int64_t)65536, x, y, 100) + : BC_TumbleTextBox(gui, (int64_t)value, (int64_t)-65536, (int64_t)65536, x, y, 100, 3) { this->gui = gui; } @@ -1481,111 +1481,140 @@ int CWindowProjectorBottom::handle_event() } -CWindowMaskMode::CWindowMaskMode(MWindow *mwindow, +CWindowMaskName::CWindowMaskName(MWindow *mwindow, CWindowToolGUI *gui, int x, int y, const char *text) - : BC_PopupMenu(x, y, 220, text, 1) + : BC_PopupTextBox(gui, 0, text, x, y, 100, 160) { this->mwindow = mwindow; this->gui = gui; } -void CWindowMaskMode::create_objects() +CWindowMaskName::~CWindowMaskName() { - add_item(new BC_MenuItem(mode_to_text(MASK_MULTIPLY_ALPHA))); - add_item(new BC_MenuItem(mode_to_text(MASK_SUBTRACT_ALPHA))); } -char* CWindowMaskMode::mode_to_text(int mode) +int CWindowMaskName::handle_event() { - switch(mode) - { - case MASK_MULTIPLY_ALPHA: - return _("Multiply alpha"); - break; - - case MASK_SUBTRACT_ALPHA: - return _("Subtract alpha"); - break; + Track *track; + MaskAutos *autos; + MaskAuto *keyframe; + SubMask *mask; + MaskPoint *point; +//printf("CWindowMaskGUI::update 1\n"); + ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, mask, point, 0); + if( track ) { + int k = get_number(); + if( k < 0 ) k = mwindow->edl->session->cwindow_mask; + else mwindow->edl->session->cwindow_mask = k; + if( k >= 0 && k < mask_items.size() ) { + mask_items[k]->set_text(get_text()); + update_list(&mask_items); + } +#ifdef USE_KEYFRAME_SPANNING + MaskAuto temp_keyframe(mwindow->edl, autos); + temp_keyframe.copy_data(keyframe); + SubMask *submask = temp_keyframe.get_submask(mwindow->edl->session->cwindow_mask); + memset(submask->name, 0, sizeof(submask->name)); + strncpy(submask->name, get_text(), sizeof(submask->name)-1); + ((MaskAutos*)track->automation->autos[AUTOMATION_MASK])->update_parameter(&temp_keyframe); +#else + for(MaskAuto *current = (MaskAuto*)autos->default_auto; current; ) { + SubMask *submask = current->get_submask(mwindow->edl->session->cwindow_mask); + memset(submask->name, 0, sizeof(submask->name)); + strncpy(submask->name, get_text(), sizeof(submask->name)); + current = current == (MaskAuto*)autos->default_auto ? + (MaskAuto*)autos->first : (MaskAuto*)NEXT; + } +#endif + gui->update(); + gui->update_preview(); } - - return _("Subtract alpha"); + return 1; } -int CWindowMaskMode::text_to_mode(char *text) +void CWindowMaskName::update_items(MaskAuto *keyframe) { - if(!strcasecmp(text, _("Multiply alpha"))) - return MASK_MULTIPLY_ALPHA; - else - if(!strcasecmp(text, _("Subtract alpha"))) - return MASK_SUBTRACT_ALPHA; + mask_items.remove_all_objects(); + int sz = keyframe->masks.size(); + for( int i=0; imasks.get(i); + char *text = sub_mask->name; + mask_items.append(new BC_ListBoxItem(text)); + } + update_list(&mask_items); +} - return MASK_SUBTRACT_ALPHA; + +CWindowMaskDelMask::CWindowMaskDelMask(MWindow *mwindow, + CWindowToolGUI *gui, int x, int y) + : BC_GenericButton(x, y, _("Delete")) +{ + this->mwindow = mwindow; + this->gui = gui; + set_tooltip(_("Delete mask")); } -int CWindowMaskMode::handle_event() +int CWindowMaskDelMask::handle_event() { MaskAutos *autos; MaskAuto *keyframe; Track *track; MaskPoint *point; SubMask *mask; + // Get existing keyframe ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, mask, point, 0); - if(track) - { - mwindow->undo->update_undo_before(_("mask mode"), 0); + + if( track ) { + mwindow->undo->update_undo_before(_("mask delete"), 0); + #ifdef USE_KEYFRAME_SPANNING // Create temp keyframe MaskAuto temp_keyframe(mwindow->edl, autos); temp_keyframe.copy_data(keyframe); // Update parameter - temp_keyframe.mode = text_to_mode(get_text()); + SubMask *submask = temp_keyframe.get_submask(mwindow->edl->session->cwindow_mask); + submask->points.remove_all_objects(); // Commit change to span of keyframes - autos->update_parameter(&temp_keyframe); + ((MaskAutos*)track->automation->autos[AUTOMATION_MASK])->update_parameter(&temp_keyframe); #else - ((MaskAuto*)autos->default_auto)->mode = - text_to_mode(get_text()); + for(MaskAuto *current = (MaskAuto*)autos->default_auto; current; ) { + SubMask *submask = current->get_submask(mwindow->edl->session->cwindow_mask); + submask->points.remove_all_objects(); + current = current == (MaskAuto*)autos->default_auto ? + (MaskAuto*)autos->first : (MaskAuto*)NEXT; + } #endif - mwindow->undo->update_undo_after(_("mask mode"), LOAD_AUTOMATION); + gui->update(); + gui->update_preview(); + mwindow->undo->update_undo_after(_("mask delete"), LOAD_AUTOMATION); } -//printf("CWindowMaskMode::handle_event 1\n"); - gui->update_preview(); return 1; } - - - - - - - -CWindowMaskDelete::CWindowMaskDelete(MWindow *mwindow, - CWindowToolGUI *gui, - int x, - int y) +CWindowMaskDelPoint::CWindowMaskDelPoint(MWindow *mwindow, + CWindowToolGUI *gui, int x, int y) : BC_GenericButton(x, y, _("Delete")) { this->mwindow = mwindow; this->gui = gui; + set_tooltip(_("Delete point")); } -int CWindowMaskDelete::handle_event() +int CWindowMaskDelPoint::handle_event() { MaskAutos *autos; MaskAuto *keyframe; Track *track; MaskPoint *point; SubMask *mask; - int total_points = 0; + int total_points; // Get existing keyframe ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, mask, point, 0); - - if(track) - { - mwindow->undo->update_undo_before(_("mask delete"), 0); + if( track ) { + mwindow->undo->update_undo_before(_("point delete"), 0); #ifdef USE_KEYFRAME_SPANNING // Create temp keyframe @@ -1593,51 +1622,31 @@ 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++) - { - *submask->points.values[i] = *submask->points.values[i + 1]; - } - - if(submask->points.total) - { - submask->points.remove_object( - submask->points.values[submask->points.total - 1]); + int i = mwindow->cwindow->gui->affected_point; + for( ; ipoints.total-1; ++i ) + *submask->points.values[i] = *submask->points.values[i+1]; + if( submask->points.total > 0 ) { + point = submask->points.values[submask->points.total-1]; + submask->points.remove_object(point); } total_points = submask->points.total; // Commit change to span of keyframes ((MaskAutos*)track->automation->autos[AUTOMATION_MASK])->update_parameter(&temp_keyframe); #else - for(MaskAuto *current = (MaskAuto*)autos->default_auto; - current; ) - { + MaskAuto *current = (MaskAuto*)autos->default_auto; + while( 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; - i++) - { - *submask->points.values[i] = *submask->points.values[i + 1]; - } - - if(submask->points.total) - { - submask->points.remove_object( - submask->points.values[submask->points.total - 1]); + int i = mwindow->cwindow->gui->affected_point; + for( ; ipoints.total-1; ++i ) { + *submask->points.values[i] = *submask->points.values[i+1]; + if( submask->points.total > 0 ) { + point = submask->points.values[submask->points.total-1]; + submask->points.remove_object(point); } total_points = submask->points.total; - - if(current == (MaskAuto*)autos->default_auto) - current = (MaskAuto*)autos->first; - else - current = (MaskAuto*)NEXT; + current = current == (MaskAuto*)autos->default_auto ? + (MaskAuto*)autos->first : (MaskAuto*)NEXT; } #endif if( mwindow->cwindow->gui->affected_point >= total_points ) @@ -1649,123 +1658,18 @@ int CWindowMaskDelete::handle_event() mwindow->undo->update_undo_after(_("mask delete"), LOAD_AUTOMATION); } - return 1; } -int CWindowMaskDelete::keypress_event() +int CWindowMaskDelPoint::keypress_event() { - if(get_keypress() == BACKSPACE || - get_keypress() == DELETE) + if( get_keypress() == BACKSPACE || + get_keypress() == DELETE ) return handle_event(); return 0; } -// CWindowMaskCycleNext::CWindowMaskCycleNext(MWindow *mwindow, CWindowToolGUI *gui, int x, int y) -// : BC_GenericButton(x, y, _("Cycle next")) -// { -// this->mwindow = mwindow; -// this->gui = gui; -// } -// int CWindowMaskCycleNext::handle_event() -// { -// MaskAuto *keyframe; -// MaskAutos *autos; -// Track *track; -// MaskPoint *point; -// SubMask *mask; -// ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, mask, point, 0); -// -// MaskPoint *temp; -// -// // Should apply to all keyframes -// if(keyframe && mask->points.total) -// { -// temp = mask->points.values[0]; -// -// for(int i = 0; i < mask->points.total - 1; i++) -// { -// mask->points.values[i] = mask->points.values[i + 1]; -// } -// mask->points.values[mask->points.total - 1] = temp; -// -// mwindow->cwindow->gui->affected_point--; -// if(mwindow->cwindow->gui->affected_point < 0) -// mwindow->cwindow->gui->affected_point = mask->points.total - 1; -// -// gui->update(); -// gui->update_preview(); -// } -// -// return 1; -// } -// -// CWindowMaskCyclePrev::CWindowMaskCyclePrev(MWindow *mwindow, CWindowToolGUI *gui, int x, int y) -// : BC_GenericButton(x, y, _("Cycle prev")) -// { -// this->mwindow = mwindow; -// this->gui = gui; -// } -// int CWindowMaskCyclePrev::handle_event() -// { -// MaskAuto *keyframe; -// MaskAutos *autos; -// Track *track; -// MaskPoint *point; -// SubMask *mask; -// ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, mask, point, 0); -// -// // Should apply to all keyframes -// MaskPoint *temp; -// if(keyframe && mask->points.total) -// { -// temp = mask->points.values[mask->points.total - 1]; -// -// for(int i = mask->points.total - 1; i > 0; i--) -// { -// mask->points.values[i] = mask->points.values[i - 1]; -// } -// mask->points.values[0] = temp; -// -// mwindow->cwindow->gui->affected_point++; -// if(mwindow->cwindow->gui->affected_point >= mask->points.total) -// mwindow->cwindow->gui->affected_point = 0; -// -// gui->update(); -// gui->update_preview(); -// } -// return 1; -// } - - -CWindowMaskNumber::CWindowMaskNumber(MWindow *mwindow, - CWindowToolGUI *gui, - int x, - int y) - : BC_TumbleTextBox(gui, - (int64_t)mwindow->edl->session->cwindow_mask, - (int64_t)0, - (int64_t)SUBMASKS - 1, - x, - y, - 100) -{ - this->mwindow = mwindow; - this->gui = gui; -} - -CWindowMaskNumber::~CWindowMaskNumber() -{ -} - -int CWindowMaskNumber::handle_event() -{ - mwindow->edl->session->cwindow_mask = atol(get_text()); - gui->update(); - gui->update_preview(); - return 1; -} CWindowMaskAffectedPoint::CWindowMaskAffectedPoint(MWindow *mwindow, @@ -1809,17 +1713,8 @@ int CWindowMaskAffectedPoint::handle_event() } - - - CWindowMaskFeather::CWindowMaskFeather(MWindow *mwindow, CWindowToolGUI *gui, int x, int y) - : BC_TumbleTextBox(gui, - (int64_t)0, - (int64_t)0, - (int64_t)0xff, - x, - y, - 100) + : BC_TumbleTextBox(gui, 0, 0, 0xff, x, y, 64, 2) { this->mwindow = mwindow; this->gui = gui; @@ -1827,7 +1722,15 @@ CWindowMaskFeather::CWindowMaskFeather(MWindow *mwindow, CWindowToolGUI *gui, in CWindowMaskFeather::~CWindowMaskFeather() { } -int CWindowMaskFeather::handle_event() + +int CWindowMaskFeather::update(float v) +{ + CWindowMaskGUI *mask_gui = (CWindowMaskGUI*)gui; + mask_gui->feather_slider->update(v); + return BC_TumbleTextBox::update(v); +} + +int CWindowMaskFeather::update_value(float v) { MaskAutos *autos; MaskAuto *keyframe; @@ -1845,19 +1748,17 @@ int CWindowMaskFeather::handle_event() // Get existing keyframe ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, mask, point, create_it); - - if(track) - { + if( track ) { #ifdef USE_KEYFRAME_SPANNING // Create temp keyframe MaskAuto temp_keyframe(mwindow->edl, autos); temp_keyframe.copy_data(keyframe); // Update parameter - temp_keyframe.feather = atof(get_text()); + temp_keyframe.feather = v; // Commit change to span of keyframes autos->update_parameter(&temp_keyframe); #else - keyframe->feather = atof(get_text()); + keyframe->feather = v; #endif gui->update_preview(); @@ -1867,26 +1768,58 @@ int CWindowMaskFeather::handle_event() return 1; } +int CWindowMaskFeather::handle_event() +{ + float v = atof(get_text()); + CWindowMaskGUI * mask_gui = (CWindowMaskGUI*)gui; + mask_gui->feather_slider->update(v); + return mask_gui->feather->update_value(v); +} -CWindowMaskValue::CWindowMaskValue(MWindow *mwindow, CWindowToolGUI *gui, int x, int y) - : BC_ISlider(x, - y, - 0, - 200, - 200, - 0, - 100, - 0) +CWindowMaskFeatherSlider::CWindowMaskFeatherSlider(MWindow *mwindow, + CWindowToolGUI *gui, int x, int y, int w, float v) + : BC_FSlider(x, y, 0, w, w, 0.f, 255.f, v) { this->mwindow = mwindow; this->gui = gui; + set_precision(0.01); +} + +CWindowMaskFeatherSlider::~CWindowMaskFeatherSlider() +{ +} + +int CWindowMaskFeatherSlider::handle_event() +{ + float v = get_value(); + CWindowMaskGUI * mask_gui = (CWindowMaskGUI*)gui; + mask_gui->feather->update(v); + return mask_gui->feather->update_value(v); +} + +int CWindowMaskFeatherSlider::update(float v) +{ + return BC_FSlider::update(v); +} + +CWindowMaskFade::CWindowMaskFade(MWindow *mwindow, CWindowToolGUI *gui, int x, int y) + : BC_TumbleTextBox(gui, 0, -100.f, 100.f, x, y, 64, 2) +{ + this->mwindow = mwindow; + this->gui = gui; +} +CWindowMaskFade::~CWindowMaskFade() +{ } -CWindowMaskValue::~CWindowMaskValue() +int CWindowMaskFade::update(float v) { + CWindowMaskGUI *mask_gui = (CWindowMaskGUI*)gui; + mask_gui->fade_slider->update(v); + return BC_TumbleTextBox::update(v); } -int CWindowMaskValue::handle_event() +int CWindowMaskFade::update_value(float v) { MaskAutos *autos; MaskAuto *keyframe; @@ -1899,27 +1832,104 @@ int CWindowMaskValue::handle_event() int create_it = 1; #endif - mwindow->undo->update_undo_before(_("mask value"), this); + mwindow->undo->update_undo_before(_("mask fade"), this); + +// Get existing keyframe ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, - mask, point, create_it); + mask, point, create_it); + if( track ) { +#ifdef USE_KEYFRAME_SPANNING +// Create temp keyframe + MaskAuto temp_keyframe(mwindow->edl, autos); + temp_keyframe.copy_data(keyframe); +// Update parameter + temp_keyframe.value = v; +// Commit change to span of keyframes + autos->update_parameter(&temp_keyframe); +#else + keyframe->value = v; +#endif - if(track) - { + gui->update_preview(); + } + + mwindow->undo->update_undo_after(_("mask fade"), LOAD_AUTOMATION); + return 1; +} + +int CWindowMaskFade::handle_event() +{ + float v = atof(get_text()); + CWindowMaskGUI * mask_gui = (CWindowMaskGUI*)gui; + mask_gui->fade_slider->update(v); + return mask_gui->fade->update_value(v); +} + +CWindowMaskFadeSlider::CWindowMaskFadeSlider(MWindow *mwindow, CWindowToolGUI *gui, + int x, int y, int w) + : BC_ISlider(x, y, 0, w, w, -200, 200, 0) +{ + this->mwindow = mwindow; + this->gui = gui; +} + +CWindowMaskFadeSlider::~CWindowMaskFadeSlider() +{ +} + +int CWindowMaskFadeSlider::handle_event() +{ + float v = 100*get_value()/200; + CWindowMaskGUI *mask_gui = (CWindowMaskGUI*)gui; + mask_gui->fade->BC_TumbleTextBox::update(v); + return mask_gui->fade->update_value(v); +} + +int CWindowMaskFadeSlider::update(int64_t v) +{ + return BC_ISlider::update(200*v/100); +} + +CWindowMaskMode::CWindowMaskMode(MWindow *mwindow, + CWindowToolGUI *gui, int x, int y) + : BC_Toggle(x, y, mwindow->theme->mask_mode_toggle, 0) +{ + this->mwindow = mwindow; + this->gui = gui; + set_tooltip(_("Mode")); +} + +CWindowMaskMode::~CWindowMaskMode() +{ +} + +int CWindowMaskMode::handle_event() +{ + MaskAutos *autos; + MaskAuto *keyframe; + Track *track; + MaskPoint *point; + SubMask *mask; +// Get existing keyframe + ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, mask, point, 0); + if( track ) { + mwindow->undo->update_undo_before(_("mask mode"), 0); #ifdef USE_KEYFRAME_SPANNING // Create temp keyframe MaskAuto temp_keyframe(mwindow->edl, autos); temp_keyframe.copy_data(keyframe); // Update parameter - temp_keyframe.value = get_value(); + temp_keyframe.mode = get_value(); // Commit change to span of keyframes autos->update_parameter(&temp_keyframe); #else - keyframe->value = get_value(); + ((MaskAuto*)autos->default_auto)->mode = get_value(); #endif + mwindow->undo->update_undo_after(_("mask mode"), LOAD_AUTOMATION); } +//printf("CWindowMaskMode::handle_event 1\n"); gui->update_preview(); - mwindow->undo->update_undo_after(_("mask value"), LOAD_AUTOMATION); return 1; } @@ -1973,28 +1983,120 @@ int CWindowDisableOpenGLMasking::handle_event() } +CWindowMaskClrMask::CWindowMaskClrMask(MWindow *mwindow, + CWindowMaskGUI *gui, int x, int y) + : BC_Button(x, y, mwindow->theme->get_image_set("reset_button")) +{ + this->mwindow = mwindow; + this->gui = gui; + set_tooltip(_("Delete all masks")); +} + +CWindowMaskClrMask::~CWindowMaskClrMask() +{ +} + +int CWindowMaskClrMask::calculate_w(MWindow *mwindow) +{ + VFrame *vfrm = *mwindow->theme->get_image_set("reset_button"); + return vfrm->get_w(); +} + +int CWindowMaskClrMask::handle_event() +{ + MaskAutos *autos; + MaskAuto *keyframe; + Track *track; + MaskPoint *point; + SubMask *mask; +// Get existing keyframe + ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, mask, point, 0); + if( track ) { + mwindow->undo->update_undo_before(_("del masks"), 0); + ((MaskAutos*)track->automation->autos[AUTOMATION_MASK])->clear_all(); + gui->update(); + gui->update_preview(); + mwindow->undo->update_undo_after(_("del masks"), LOAD_AUTOMATION); + } + return 1; +} +CWindowMaskClrPoint::CWindowMaskClrPoint(MWindow *mwindow, + CWindowMaskGUI *gui, int x, int y) + : BC_Button(x, y, mwindow->theme->get_image_set("reset_button")) +{ + this->mwindow = mwindow; + this->gui = gui; + set_tooltip(_("Delete all points")); +} +CWindowMaskClrPoint::~CWindowMaskClrPoint() +{ +} + +int CWindowMaskClrPoint::handle_event() +{ + MaskAutos *autos; + MaskAuto *keyframe; + Track *track; + MaskPoint *point; + SubMask *mask; + int total_points; + +// Get existing keyframe + ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, mask, point, 0); + if( track ) { + mwindow->undo->update_undo_before(_("clr points"), 0); +#ifdef USE_KEYFRAME_SPANNING +// Create temp keyframe + MaskAuto temp_keyframe(mwindow->edl, autos); + temp_keyframe.copy_data(keyframe); + SubMask *submask = temp_keyframe.get_submask(mwindow->edl->session->cwindow_mask); + submask->points.remove_all_objects(); + total_points = 0; +// Commit change to span of keyframes + ((MaskAutos*)track->automation->autos[AUTOMATION_MASK])->update_parameter(&temp_keyframe); +#else + MaskAuto *current = (MaskAuto*)autos->default_auto; + while( current ) { + SubMask *submask = current->get_submask(mwindow->edl->session->cwindow_mask); + submask->points.clear(); + current = current == (MaskAuto*)autos->default_auto ? + (MaskAuto*)autos->first : (MaskAuto*)NEXT; + } + total_points = 0; +#endif + if( mwindow->cwindow->gui->affected_point >= total_points ) + mwindow->cwindow->gui->affected_point = + total_points > 0 ? total_points-1 : 0; + + gui->update(); + gui->update_preview(); + mwindow->undo->update_undo_after(_("clr points"), LOAD_AUTOMATION); + } + + return 1; +} CWindowMaskGUI::CWindowMaskGUI(MWindow *mwindow, CWindowTool *thread) : CWindowToolGUI(mwindow, thread, - _(PROGRAM_NAME ": Mask"), 330, 320) + _(PROGRAM_NAME ": Mask"), 340, 350) { this->mwindow = mwindow; this->thread = thread; - number = 0; active_point = 0; + fade = 0; feather = 0; } CWindowMaskGUI::~CWindowMaskGUI() { lock_window("CWindowMaskGUI::~CWindowMaskGUI"); - delete number; delete active_point; + delete fade; delete feather; unlock_window(); } @@ -2002,6 +2104,8 @@ CWindowMaskGUI::~CWindowMaskGUI() void CWindowMaskGUI::create_objects() { int x = 10, y = 10, margin = mwindow->theme->widget_border; + int clr_x = get_w()-x - CWindowMaskClrMask::calculate_w(mwindow); + int del_x = clr_x-margin - CWindowMaskDelMask::calculate_w(this,_("Delete")); //MaskAuto *keyframe = 0; //Track *track = mwindow->cwindow->calculate_affected_track(); //if(track) @@ -2009,56 +2113,63 @@ void CWindowMaskGUI::create_objects() lock_window("CWindowMaskGUI::create_objects"); BC_Title *title; - add_subwindow(title = new BC_Title(x, y, _("Mode:"))); - add_subwindow(mode = new CWindowMaskMode(mwindow, - this, x + title->get_w() + margin, y, "")); - mode->create_objects(); - y += mode->get_h() + margin; - add_subwindow(title = new BC_Title(x, y, _("Value:"))); - add_subwindow(value = new CWindowMaskValue(mwindow, this, x + title->get_w() + margin, y)); - y += value->get_h() + margin; - add_subwindow(delete_point = new CWindowMaskDelete(mwindow, this, x, y)); - int x1 = x + delete_point->get_w() + 2*margin; - add_subwindow(title = new BC_Title(x1, y, _("Point:"))); - x1 += title->get_w() + margin; + add_subwindow(title = new BC_Title(x, y, _("Mask:"))); + int x1 = x + title->get_w() + margin; + name = new CWindowMaskName(mwindow, this, x + title->get_w() + margin, y, ""); + name->create_objects(); + x1 = x + name->get_w() + 2*margin; + add_subwindow(clr_mask = new CWindowMaskClrMask(mwindow, this, clr_x, y)); + add_subwindow(del_mask = new CWindowMaskDelMask(mwindow, this, del_x, y)); + y += name->get_h() + margin; + add_subwindow(title = new BC_Title(x, y, _("Fade:"))); + x1 = x + title->get_w() + margin; + fade = new CWindowMaskFade(mwindow, this, x1, y); + fade->create_objects(); + x1 += fade->get_w() + 2*margin; + int w1 = clr_x-2*margin - x1; + add_subwindow(fade_slider = new CWindowMaskFadeSlider(mwindow, this, x1, y, w1)); + x1 += fade_slider->get_w() + 2*margin; + add_subwindow(mode = new CWindowMaskMode(mwindow, this, clr_x, y)); + y += fade->get_h() + 3*margin; + add_subwindow(title = new BC_Title(x, y, _("Point:"))); + x1 = x + title->get_w() + margin; active_point = new CWindowMaskAffectedPoint(mwindow, this, x1, y); active_point->create_objects(); - y += delete_point->get_h() + margin; - add_subwindow(title = new BC_Title(x, y, _("Mask number:"))); - number = new CWindowMaskNumber(mwindow, - this, x + title->get_w() + margin, y); - number->create_objects(); - y += number->get_h() + margin; - add_subwindow(title = new BC_Title(x, y, _("Feather:"))); - feather = new CWindowMaskFeather(mwindow, - this, x + title->get_w() + margin, y); - feather->create_objects(); - y += feather->get_h() + margin; + x1 += active_point->get_w() + margin; + add_subwindow(clr_point = new CWindowMaskClrPoint(mwindow, this, clr_x, y)); + add_subwindow(del_point = new CWindowMaskDelPoint(mwindow, this, del_x, y)); + y += active_point->get_h() + margin; add_subwindow(title = new BC_Title(x, y, "X:")); - x += title->get_w() + margin; - this->x = new CWindowCoord(this, x, y, (float)0.0); + x1 = x + title->get_w() + margin; + this->x = new CWindowCoord(this, x1, y, (float)0.0); this->x->create_objects(); - x += this->x->get_w() + margin; - add_subwindow(title = new BC_Title(x, y, "Y:")); - x += title->get_w() + margin; - this->y = new CWindowCoord(this, x, y, (float)0.0); + x1 += this->x->get_w() + 3*margin; + add_subwindow(title = new BC_Title(x1, y, "Y:")); + x1 += title->get_w() + margin; + this->y = new CWindowCoord(this, x1, y, (float)0.0); this->y->create_objects(); - - x = 10; - y += this->y->get_h() + margin; - add_subwindow(title = new BC_Title(x, y, _("Press Shift to move an end point"))); - 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; - + y += this->x->get_h() + 3*margin; + add_subwindow(title = new BC_Title(x, y, _("Feather:"))); + x1 = x + title->get_w() + margin; + feather = new CWindowMaskFeather(mwindow, this, x1, y); + feather->create_objects(); + x1 += feather->get_w() + margin; + feather_slider = new CWindowMaskFeatherSlider(mwindow, this, x1, y, 140, 0); + add_subwindow(feather_slider); + y += feather->get_h() + margin; add_subwindow(this->apply_before_plugins = new CWindowMaskBeforePlugins(this, 10, y)); y += this->apply_before_plugins->get_h() + margin; add_subwindow(this->disable_opengl_masking = new CWindowDisableOpenGLMasking(this, 10, y)); - + y += this->disable_opengl_masking->get_h() + 3*margin; + add_subwindow(new BC_Bar(x, y, get_w()-2*x)); + y += 2*margin; + add_subwindow(title = new BC_Title(x, y, _( + "Shift+LMB: move an end point\n" + "Ctrl+LMB: move a control point\n" + "Wheel Up/Dn: rotate around pointer\n" + "Shift+Wheel Up/Dn: scale around pointer\n" + "Alt+LMB: to drag translate the mask\n" + "Shift+Key Delete to delete the mask"))); update(); unlock_window(); } @@ -2122,26 +2233,27 @@ void CWindowMaskGUI::update() if(mask) { - feather->update((int64_t)autos->get_feather(position_i, PLAY_FORWARD)); - value->update((int64_t)autos->get_value(position_i, PLAY_FORWARD)); - apply_before_plugins->update((int64_t)keyframe->apply_before_plugins); - disable_opengl_masking->update((int64_t)keyframe->disable_opengl_masking); + feather->update(autos->get_feather(position_i, PLAY_FORWARD)); + fade->update(autos->get_value(position_i, PLAY_FORWARD)); + apply_before_plugins->update(keyframe->apply_before_plugins); + disable_opengl_masking->update(keyframe->disable_opengl_masking); } } //printf("CWindowMaskGUI::update 1\n"); active_point->update((int64_t)mwindow->cwindow->gui->affected_point); - number->update((int64_t)mwindow->edl->session->cwindow_mask); + name->update_items(keyframe); + int k = mwindow->edl->session->cwindow_mask; + const char *text = k >= 0 && k < keyframe->masks.size() ? + keyframe->masks[k]->name : ""; + name->update(text); //printf("CWindowMaskGUI::update 1\n"); - if(track) - { + if( track ) { #ifdef USE_KEYFRAME_SPANNING - mode->set_text( - CWindowMaskMode::mode_to_text(keyframe->mode)); + mode->update(keyframe->mode); #else - mode->set_text( - CWindowMaskMode::mode_to_text(((MaskAuto*)autos->default_auto)->mode)); + mode->set_text(((MaskAuto*)autos->default_auto)->mode); #endif } //printf("CWindowMaskGUI::update 2\n"); diff --git a/cinelerra-5.1/cinelerra/cwindowtool.h b/cinelerra-5.1/cinelerra/cwindowtool.h index 92fa72b9..1eb5002e 100644 --- a/cinelerra-5.1/cinelerra/cwindowtool.h +++ b/cinelerra-5.1/cinelerra/cwindowtool.h @@ -24,17 +24,14 @@ #include "condition.inc" #include "cwindowgui.inc" +#include "cwindowtool.inc" #include "guicast.h" +#include "keyframe.inc" #include "maskauto.inc" #include "maskautos.inc" #include "mwindow.inc" -class CWindowToolGUI; -class CWindowCoord; -class CWindowCurveToggle; - - // This common thread supports all the tool GUI's. class CWindowTool : public Thread { @@ -128,57 +125,70 @@ public: CWindowCoord *x1, *y1, *width, *height; }; -class CWindowMaskMode : public BC_PopupMenu +class CWindowMaskItems : public ArrayList { public: - CWindowMaskMode(MWindow *mwindow, CWindowToolGUI *gui, int x, int y, const char *text); - void create_objects(); - int handle_event(); - static char* mode_to_text(int mode); - int text_to_mode(char *text); + CWindowMaskItems() {} + ~CWindowMaskItems() { remove_all_objects(); } +}; + +class CWindowMaskName : public BC_PopupTextBox +{ +public: + CWindowMaskName(MWindow *mwindow, CWindowToolGUI *gui, int x, int y, const char *text); + ~CWindowMaskName(); MWindow *mwindow; CWindowToolGUI *gui; + CWindowMaskItems mask_items; + + int handle_event(); + void update_items(MaskAuto *keyframe); }; -class CWindowMaskDelete : public BC_GenericButton +class CWindowMaskFade : public BC_TumbleTextBox { public: - CWindowMaskDelete(MWindow *mwindow, CWindowToolGUI *gui, int x, int y); + CWindowMaskFade(MWindow *mwindow, CWindowToolGUI *gui, int x, int y); + ~CWindowMaskFade(); + int update(float v); + int update_value(float v); int handle_event(); - int keypress_event(); MWindow *mwindow; CWindowToolGUI *gui; }; -class CWindowMaskCycleNext : public BC_GenericButton +class CWindowMaskFadeSlider : public BC_ISlider { public: - CWindowMaskCycleNext(MWindow *mwindow, CWindowToolGUI *gui, int x, int y); + CWindowMaskFadeSlider(MWindow *mwindow, CWindowToolGUI *gui, + int x, int y, int w); + ~CWindowMaskFadeSlider(); int handle_event(); + int update(int64_t v); + char *get_caption() { return 0; } MWindow *mwindow; CWindowToolGUI *gui; }; -class CWindowMaskCyclePrev : public BC_GenericButton +class CWindowMaskMode : public BC_Toggle { public: - CWindowMaskCyclePrev(MWindow *mwindow, CWindowToolGUI *gui, int x, int y); + CWindowMaskMode(MWindow *mwindow, CWindowToolGUI *gui, int x, int y); + ~CWindowMaskMode(); int handle_event(); MWindow *mwindow; CWindowToolGUI *gui; }; -class CWindowMaskNumber : public BC_TumbleTextBox +class CWindowMaskDelMask : public BC_GenericButton { public: - CWindowMaskNumber(MWindow *mwindow, CWindowToolGUI *gui, int x, int y); - ~CWindowMaskNumber(); + CWindowMaskDelMask(MWindow *mwindow, CWindowToolGUI *gui, int x, int y); int handle_event(); MWindow *mwindow; CWindowToolGUI *gui; }; - class CWindowMaskAffectedPoint : public BC_TumbleTextBox { public: @@ -189,27 +199,63 @@ public: CWindowToolGUI *gui; }; +class CWindowMaskDelPoint : public BC_GenericButton +{ +public: + CWindowMaskDelPoint(MWindow *mwindow, CWindowToolGUI *gui, int x, int y); + int handle_event(); + int keypress_event(); + MWindow *mwindow; + CWindowToolGUI *gui; +}; class CWindowMaskFeather : public BC_TumbleTextBox { public: CWindowMaskFeather(MWindow *mwindow, CWindowToolGUI *gui, int x, int y); ~CWindowMaskFeather(); + int update(float v); + int update_value(float v); int handle_event(); MWindow *mwindow; CWindowToolGUI *gui; }; -class CWindowMaskValue : public BC_ISlider +class CWindowMaskFeatherSlider : public BC_FSlider { public: - CWindowMaskValue(MWindow *mwindow, CWindowToolGUI *gui, int x, int y); - ~CWindowMaskValue(); + CWindowMaskFeatherSlider(MWindow *mwindow, CWindowToolGUI *gui, + int x, int y, int w, float v); + ~CWindowMaskFeatherSlider(); int handle_event(); + int update(float v); + char *get_caption() { return 0; } MWindow *mwindow; CWindowToolGUI *gui; }; +class CWindowMaskClrMask : public BC_Button +{ +public: + CWindowMaskClrMask(MWindow *mwindow, CWindowMaskGUI *gui, int x, int y); + ~CWindowMaskClrMask(); + static int calculate_w(MWindow *mwindow); + int handle_event(); + MWindow *mwindow; + CWindowMaskGUI *gui; +}; + +class CWindowMaskClrPoint : public BC_Button +{ +public: + CWindowMaskClrPoint(MWindow *mwindow, CWindowMaskGUI *gui, int x, int y); + ~CWindowMaskClrPoint(); + + int handle_event(); + MWindow *mwindow; + CWindowMaskGUI *gui; +}; + class CWindowMaskBeforePlugins : public BC_CheckBox { public: @@ -238,22 +284,23 @@ public: SubMask* &mask, MaskPoint* &point, int create_it); void update_preview(); - CWindowCoord *x, *y; + CWindowMaskName *name; + CWindowMaskClrMask *clr_mask; + CWindowMaskDelMask *del_mask; + CWindowMaskFade *fade; + CWindowMaskFadeSlider *fade_slider; CWindowMaskMode *mode; - CWindowMaskFeather *feather; - CWindowMaskDelete *delete_point; CWindowMaskAffectedPoint *active_point; -// Not necessary if all keyframes have same points -// CWindowMaskCycleNext *next_point; -// CWindowMaskCyclePrev *prev_point; - CWindowMaskNumber *number; - CWindowMaskValue *value; + CWindowMaskClrPoint *clr_point; + CWindowMaskDelPoint *del_point; + CWindowCoord *x, *y; + CWindowMaskFeather *feather; + CWindowMaskFeatherSlider *feather_slider; CWindowMaskBeforePlugins *apply_before_plugins; CWindowDisableOpenGLMasking *disable_opengl_masking; }; -class CWindowEyedropCheckBox; class CWindowEyedropGUI : public CWindowToolGUI { public: diff --git a/cinelerra-5.1/cinelerra/cwindowtool.inc b/cinelerra-5.1/cinelerra/cwindowtool.inc index 60e24153..0d284c05 100644 --- a/cinelerra-5.1/cinelerra/cwindowtool.inc +++ b/cinelerra-5.1/cinelerra/cwindowtool.inc @@ -24,5 +24,39 @@ class CWindowTool; +class CWindowToolGUI; +class CWindowCoord; +class CWindowCurveToggle; +class CWindowCropOK; +class CWindowCropGUI; +class CWindowMaskList; +class CWindowMaskName; +class CWindowMaskFade; +class CWindowMaskMode; +class CWindowMaskDelMask; +class CWindowMaskAffectedPoint; +class CWindowMaskDelPoint; +class CWindowMaskFeather; +class CWindowMaskFeatherSlider; +class CWindowMaskBeforePlugins; +class CWindowDisableOpenGLMasking; +class CWindowMaskGUI; +class CWindowEyedropGUI; +class CWindowEyedropCheckBox; +class CWindowCameraGUI; +class CWindowCameraLeft; +class CWindowCameraCenter; +class CWindowCameraRight; +class CWindowCameraTop; +class CWindowCameraMiddle; +class CWindowCameraBottom; +class CWindowProjectorGUI; +class CWindowProjectorLeft; +class CWindowProjectorCenter; +class CWindowProjectorRight; +class CWindowProjectorTop; +class CWindowProjectorMiddle; +class CWindowProjectorBottom; +class CWindowRulerGUI; #endif diff --git a/cinelerra-5.1/cinelerra/edl.inc b/cinelerra-5.1/cinelerra/edl.inc index 29c5ec3e..c798319f 100644 --- a/cinelerra-5.1/cinelerra/edl.inc +++ b/cinelerra-5.1/cinelerra/edl.inc @@ -151,6 +151,8 @@ class EDL; #define CWINDOW_MASK_CONTROL_IN 0x15 #define CWINDOW_MASK_CONTROL_OUT 0x16 #define CWINDOW_MASK_TRANSLATE 0x17 +#define CWINDOW_MASK_ROTATE 0x18 +#define CWINDOW_MASK_SCALE 0x19 // Inclusive limits for zoom panel #define MIN_ZOOM_TIME 1 diff --git a/cinelerra-5.1/cinelerra/maskauto.C b/cinelerra-5.1/cinelerra/maskauto.C index 1b1f9600..74eec3a8 100644 --- a/cinelerra-5.1/cinelerra/maskauto.C +++ b/cinelerra-5.1/cinelerra/maskauto.C @@ -64,9 +64,11 @@ int MaskPoint::operator==(MaskPoint& ptr) EQUIV(control_y2, ptr.control_y2); } -SubMask::SubMask(MaskAuto *keyframe) +SubMask::SubMask(MaskAuto *keyframe, int no) { this->keyframe = keyframe; + memset(name, 0, sizeof(name)); + sprintf(name, "%d", no); } SubMask::~SubMask() @@ -95,6 +97,8 @@ int SubMask::operator==(SubMask& ptr) void SubMask::copy_from(SubMask& ptr) { + memset(name, 0, sizeof(name)); + strncpy(name, ptr.name, sizeof(name-1)); points.remove_all_objects(); //printf("SubMask::copy_from 1 %p %d\n", this, ptr.points.total); for(int i = 0; i < ptr.points.total; i++) @@ -171,6 +175,7 @@ void SubMask::copy(FileXML *file) { file->tag.set_title("MASK"); file->tag.set_property("NUMBER", keyframe->masks.number_of(this)); + file->tag.set_property("NAME", name); file->append_tag(); file->append_newline(); @@ -230,7 +235,7 @@ MaskAuto::MaskAuto(EDL *edl, MaskAutos *autos) // submask matches. for(int i = 0; i < SUBMASKS; i++) - masks.append(new SubMask(this)); + masks.append(new SubMask(this, i)); } MaskAuto::~MaskAuto() @@ -312,7 +317,7 @@ void MaskAuto::copy_data(MaskAuto *src) masks.remove_all_objects(); for(int i = 0; i < src->masks.size(); i++) { - masks.append(new SubMask(this)); + masks.append(new SubMask(this, i)); masks.values[i]->copy_from(*src->masks.values[i]); } } @@ -340,7 +345,7 @@ int MaskAuto::interpolate_from(Auto *a1, Auto *a2, int64_t position, Auto *templ i < mask_auto1->masks.total; i++) { - SubMask *new_submask = new SubMask(this); + SubMask *new_submask = new SubMask(this, i); masks.append(new_submask); SubMask *mask1 = mask_auto1->masks.values[i]; SubMask *mask2 = mask_auto2->masks.values[i]; @@ -408,24 +413,21 @@ void MaskAuto::load(FileXML *file) for(int i = 0; i < masks.size(); i++) { delete masks.values[i]; - masks.values[i] = new SubMask(this); + masks.values[i] = new SubMask(this, i); } int result = 0; - while(!result) - { - result = file->read_tag(); - - if(!result) - { - if(file->tag.title_is("/AUTO")) - result = 1; - else - if(file->tag.title_is("MASK")) - { - SubMask *mask = masks.values[file->tag.get_property("NUMBER", 0)]; - mask->load(file); - } + while( !(result = file->read_tag()) ) { + if( file->tag.title_is("/AUTO") ) break; + if( file->tag.title_is("MASK") ) { + int no = file->tag.get_property("NUMBER", 0); + char name[BCTEXTLEN]; name[0] = 0; + file->tag.get_property("NAME", name); + if( !name[0] ) sprintf(name, "%d", no); + SubMask *mask = masks.values[no]; + memset(mask->name, 0, sizeof(mask->name)); + strncpy(mask->name, name, sizeof(mask->name)); + mask->load(file); } } // dump(); @@ -454,7 +456,6 @@ void MaskAuto::copy(int64_t start, int64_t end, FileXML *file, int default_auto) //printf("MaskAuto::copy 10\n"); } - file->append_newline(); file->tag.set_title("/AUTO"); file->append_tag(); file->append_newline(); diff --git a/cinelerra-5.1/cinelerra/maskauto.h b/cinelerra-5.1/cinelerra/maskauto.h index 5162d8e9..1bae9ab8 100644 --- a/cinelerra-5.1/cinelerra/maskauto.h +++ b/cinelerra-5.1/cinelerra/maskauto.h @@ -47,7 +47,7 @@ public: class SubMask { public: - SubMask(MaskAuto *keyframe); + SubMask(MaskAuto *keyframe, int no); ~SubMask(); // Don't use == @@ -58,6 +58,7 @@ public: void copy(FileXML *file); void dump(); + char name[BCSTRLEN]; ArrayList points; MaskAuto *keyframe; }; diff --git a/cinelerra-5.1/cinelerra/maskauto.inc b/cinelerra-5.1/cinelerra/maskauto.inc index 21a067b6..5d144612 100644 --- a/cinelerra-5.1/cinelerra/maskauto.inc +++ b/cinelerra-5.1/cinelerra/maskauto.inc @@ -28,10 +28,9 @@ class MaskAuto; class MaskPoint; class SubMask; -enum -{ +enum { MASK_MULTIPLY_ALPHA, - MASK_SUBTRACT_ALPHA + MASK_SUBTRACT_ALPHA, }; #define SUBMASKS 8 diff --git a/cinelerra-5.1/cinelerra/maskautos.C b/cinelerra-5.1/cinelerra/maskautos.C index 843d76ee..62b6ad74 100644 --- a/cinelerra-5.1/cinelerra/maskautos.C +++ b/cinelerra-5.1/cinelerra/maskautos.C @@ -190,30 +190,19 @@ int MaskAutos::get_value(int64_t position, int direction) int result = (int)((double)((MaskAuto*)begin)->value * (1.0 - weight) + (double)((MaskAuto*)end)->value * weight + 0.5); -// printf("MaskAutos::get_value %d %d %f %d %f %d\n", -// __LINE__, -// ((MaskAuto*)begin)->value, -// 1.0 - weight, -// ((MaskAuto*)end)->value, -// weight, -// result); +// printf("MaskAutos::get_value %d %d %f %d %f %d\n", __LINE__, +// ((MaskAuto*)begin)->value, 1.0 - weight, ((MaskAuto*)end)->value, weight, result); return result; } -void MaskAutos::avg_points(MaskPoint *output, - MaskPoint *input1, - MaskPoint *input2, - int64_t output_position, - int64_t position1, - int64_t position2) +void MaskAutos::avg_points(MaskPoint *output, MaskPoint *input1, MaskPoint *input2, + int64_t output_position, int64_t position1, int64_t position2) { - if(position2 == position1) - { + if(position2 == position1) { *output = *input1; } - else - { + else { float fraction2 = (float)(output_position - position1) / (position2 - position1); float fraction1 = 1 - fraction2; output->x = input1->x * fraction1 + input2->x * fraction2; diff --git a/cinelerra-5.1/cinelerra/maskengine.C b/cinelerra-5.1/cinelerra/maskengine.C index ed7cbaae..fd7458e1 100644 --- a/cinelerra-5.1/cinelerra/maskengine.C +++ b/cinelerra-5.1/cinelerra/maskengine.C @@ -41,12 +41,6 @@ MaskPackage::~MaskPackage() { } - - - - - - MaskUnit::MaskUnit(MaskEngine *engine) : LoadClient(engine) { @@ -54,10 +48,9 @@ MaskUnit::MaskUnit(MaskEngine *engine) this->temp = 0; } - MaskUnit::~MaskUnit() { - if(temp) delete temp; + if( temp ) delete temp; } @@ -69,7 +62,7 @@ void MaskUnit::draw_line_clamped(VFrame *frame, int draw_x1, draw_y1; int draw_x2, draw_y2; - if(y2 < y1) { + if( y2 < y1 ) { draw_x1 = x2; draw_y1 = y2; draw_x2 = x1; draw_y2 = y1; } @@ -80,18 +73,18 @@ void MaskUnit::draw_line_clamped(VFrame *frame, unsigned char **rows = (unsigned char**)frame->get_rows(); - if(draw_y2 != draw_y1) { + if( draw_y2 != draw_y1 ) { float slope = ((float)draw_x2 - draw_x1) / ((float)draw_y2 - draw_y1); int w = frame->get_w() - 1; int h = frame->get_h(); - for(float y = draw_y1; y < draw_y2; y++) { - if(y >= 0 && y < h) { + for( float y = draw_y1; y < draw_y2; y++ ) { + if( y >= 0 && y < h ) { int x = (int)((y - draw_y1) * slope + draw_x1); int y_i = (int)y; int x_i = CLIP(x, 0, w); - if(rows[y_i][x_i] == k) + if( rows[y_i][x_i] == k ) rows[y_i][x_i] = 0; else rows[y_i][x_i] = k; @@ -100,12 +93,8 @@ void MaskUnit::draw_line_clamped(VFrame *frame, } } -void MaskUnit::blur_strip(double *val_p, - double *val_m, - double *dst, - double *src, - int size, - int max) +void MaskUnit::blur_strip(double *val_p, double *val_m, + double *dst, double *src, int size, int max) { double *sp_p = src; double *sp_m = src + size - 1; @@ -115,42 +104,31 @@ void MaskUnit::blur_strip(double *val_p, double initial_m = sp_m[0]; //printf("MaskUnit::blur_strip %d\n", size); - for(int k = 0; k < size; k++) - { + for( int k = 0; k < size; k++ ) { int terms = (k < 4) ? k : 4; int l; - for(l = 0; l <= terms; l++) - { + for( l = 0; l <= terms; l++ ) { *vp += n_p[l] * sp_p[-l] - d_p[l] * vp[-l]; *vm += n_m[l] * sp_m[l] - d_m[l] * vm[l]; } - for( ; l <= 4; l++) - { + for( ; l <= 4; l++) { *vp += (n_p[l] - bd_p[l]) * initial_p; *vm += (n_m[l] - bd_m[l]) * initial_m; } - sp_p++; - sp_m--; - vp++; - vm--; + sp_p++; sp_m--; + vp++; vm--; } - for(int i = 0; i < size; i++) - { + for( int i = 0; i < size; i++ ) { double sum = val_p[i] + val_m[i]; CLAMP(sum, 0, max); dst[i] = sum; } } -void MaskUnit::do_feather(VFrame *output, - VFrame *input, - double feather, - int start_y, - int end_y, - int start_x, - int end_x) +void MaskUnit::do_feather(VFrame *output, VFrame *input, double feather, + int start_y, int end_y, int start_x, int end_x) { //printf("MaskUnit::do_feather %f\n", feather); // Get constants @@ -204,10 +182,10 @@ void MaskUnit::do_feather(VFrame *output, d_p[4] = exp(2 * constants[0] + 2 * constants[1]); - for(int i = 0; i < 5; i++) d_m[i] = d_p[i]; + for( int i = 0; i < 5; i++ ) d_m[i] = d_p[i]; n_m[0] = 0.0; - for(int i = 1; i <= 4; i++) + for( int i = 1; i <= 4; i++ ) n_m[i] = n_p[i] - d_p[i] * n_p[0]; double sum_n_p, sum_n_m, sum_d; @@ -216,8 +194,7 @@ void MaskUnit::do_feather(VFrame *output, sum_n_p = 0.0; sum_n_m = 0.0; sum_d = 0.0; - for(int i = 0; i < 5; i++) - { + for( int i = 0; i < 5; i++ ) { sum_n_p += n_p[i]; sum_n_m += n_m[i]; sum_d += d_p[i]; @@ -226,35 +203,11 @@ void MaskUnit::do_feather(VFrame *output, a = sum_n_p / (1 + sum_d); b = sum_n_m / (1 + sum_d); - for(int i = 0; i < 5; i++) - { + for( int i = 0; i < 5; i++ ) { bd_p[i] = d_p[i] * a; bd_m[i] = d_m[i] * b; } - - - - - - - - - - - - - - - - - - - - - - -#define DO_FEATHER(type, max) \ -{ \ +#define DO_FEATHER(type, max) { \ int frame_w = input->get_w(); \ int frame_h = input->get_h(); \ int size = MAX(frame_w, frame_h); \ @@ -267,50 +220,35 @@ void MaskUnit::do_feather(VFrame *output, int j; \ \ /* printf("DO_FEATHER 1\n"); */ \ - if(end_x > start_x) \ - { \ - for(j = start_x; j < end_x; j++) \ - { \ + if( end_x > start_x ) { \ + for( j = start_x; j < end_x; j++ ) { \ /* printf("DO_FEATHER 1.1 %d\n", j); */ \ bzero(val_p, sizeof(double) * frame_h); \ bzero(val_m, sizeof(double) * frame_h); \ - for(int k = 0; k < frame_h; k++) \ - { \ + for( int k = 0; k < frame_h; k++ ) { \ src[k] = (double)in_rows[k][j]; \ } \ - \ blur_strip(val_p, val_m, dst, src, frame_h, max); \ - \ - for(int k = 0; k < frame_h; k++) \ - { \ + for( int k = 0; k < frame_h; k++ ) { \ out_rows[k][j] = (type)dst[k]; \ } \ } \ } \ - \ - if(end_y > start_y) \ - { \ - for(j = start_y; j < end_y; j++) \ - { \ + if( end_y > start_y ) { \ + for( j = start_y; j < end_y; j++ ) { \ /* printf("DO_FEATHER 2 %d\n", j); */ \ bzero(val_p, sizeof(double) * frame_w); \ bzero(val_m, sizeof(double) * frame_w); \ - for(int k = 0; k < frame_w; k++) \ - { \ + for( int k = 0; k < frame_w; k++ ) { \ src[k] = (double)out_rows[j][k]; \ } \ - \ blur_strip(val_p, val_m, dst, src, frame_w, max); \ - \ - for(int k = 0; k < frame_w; k++) \ - { \ + for( int k = 0; k < frame_w; k++ ) { \ out_rows[j][k] = (type)dst[k]; \ } \ } \ } \ - \ /* printf("DO_FEATHER 3\n"); */ \ - \ delete [] src; \ delete [] dst; \ delete [] val_p; \ @@ -318,85 +256,51 @@ void MaskUnit::do_feather(VFrame *output, /* printf("DO_FEATHER 4\n"); */ \ } - - - - - - - //printf("do_feather %d\n", frame->get_color_model()); - switch(input->get_color_model()) - { - case BC_A8: - DO_FEATHER(unsigned char, 0xff); - break; - - case BC_A16: - DO_FEATHER(uint16_t, 0xffff); - break; - - case BC_A_FLOAT: - DO_FEATHER(float, 1); - break; + switch( input->get_color_model() ) { + case BC_A8: + DO_FEATHER(unsigned char, 0xff); + break; + case BC_A16: + DO_FEATHER(uint16_t, 0xffff); + break; + case BC_A_FLOAT: + DO_FEATHER(float, 1); + break; } - - - - } void MaskUnit::process_package(LoadPackage *package) { MaskPackage *ptr = (MaskPackage*)package; + float engine_value = engine->value; + int engine_mode = engine->mode; - if(engine->recalculate && - engine->step == DO_MASK) - { - VFrame *mask; - if(engine->feather > 0) - mask = engine->temp_mask; - else - mask = engine->mask; - -SET_TRACE + if( engine->recalculate && engine->step == DO_MASK ) { + VFrame *mask = engine->feather > 0 ? engine->temp_mask : engine->mask; // Generated oversampling frame int mask_w = mask->get_w(); //int mask_h = mask->get_h(); int oversampled_package_w = mask_w * OVERSAMPLE; int oversampled_package_h = (ptr->end_y - ptr->start_y) * OVERSAMPLE; -//printf("MaskUnit::process_package 1\n"); - -SET_TRACE - if(temp && - (temp->get_w() != oversampled_package_w || - temp->get_h() != oversampled_package_h)) { + if( temp && + (temp->get_w() != oversampled_package_w || + temp->get_h() != oversampled_package_h) ) { delete temp; temp = 0; } -//printf("MaskUnit::process_package 1\n"); - -SET_TRACE - if(!temp) { + if( !temp ) { temp = new VFrame(oversampled_package_w, oversampled_package_h, BC_A8, 0); } - -SET_TRACE temp->clear_frame(); -//printf("MaskUnit::process_package 1 %d\n", engine->point_sets.total); - -SET_TRACE - // Draw oversampled region of polygons on temp - for(int k = 0; k < engine->point_sets.total; k++) - { + for( int k=0; kpoint_sets.total; ++k ) { int old_x, old_y; unsigned char max = k + 1; ArrayList *points = engine->point_sets.values[k]; - if(points->total < 3) continue; + if( points->total < 3 ) continue; //printf("MaskUnit::process_package 2 %d %d\n", k, points->total); - for(int i = 0; i < points->total; i++) - { + for( int i=0; itotal; ++i ) { MaskPoint *point1 = points->values[i]; MaskPoint *point2 = (i >= points->total - 1) ? points->values[0] : @@ -404,10 +308,10 @@ SET_TRACE float x, y; int segments = (int)(sqrt(SQR(point1->x - point2->x) + SQR(point1->y - point2->y))); - if(point1->control_x2 == 0 && + if( point1->control_x2 == 0 && point1->control_y2 == 0 && point2->control_x1 == 0 && - point2->control_y1 == 0) + point2->control_y1 == 0 ) segments = 1; float x0 = point1->x; float y0 = point1->y; @@ -418,8 +322,7 @@ SET_TRACE float x3 = point2->x; float y3 = point2->y; - for(int j = 0; j <= segments; j++) - { + for( int j = 0; j <= segments; j++ ) { float t = (float)j / segments; float tpow2 = t * t; float tpow3 = t * t * t; @@ -440,8 +343,7 @@ SET_TRACE x *= OVERSAMPLE; y *= OVERSAMPLE; - if(j > 0) - { + if( j > 0 ) { draw_line_clamped(temp, old_x, old_y, (int)x, (int)y, max); } @@ -449,298 +351,145 @@ SET_TRACE old_y = (int)y; } } - -SET_TRACE -//printf("MaskUnit::process_package 1\n"); - - - - - // Fill in the polygon in the horizontal direction - for(int i = 0; i < oversampled_package_h; i++) - { + for( int i=0; iget_rows()[i]; - int value = 0x0; - int total = 0; - - for(int j = 0; j < oversampled_package_w; j++) - if(row[j] == max) total++; - - if(total > 1) - { - if(total & 0x1) total--; - for(int j = 0; j < oversampled_package_w; j++) - { - if(row[j] == max && total > 0) - { - if(value) - value = 0x0; - else - value = max; - total--; - } - else - { - if(value) row[j] = value; + int value = 0, total = 0; + + for( int j=0; j 1 ) { + if( total & 0x1 ) --total; + for( int j=0; j0 ) { + --total; + value = value ? 0 : max; } + else if( value ) + row[j] = value; } } } } - - -SET_TRACE - - - - - -#define DOWNSAMPLE(type, temp_type, value) \ -for(int i = 0; i < ptr->end_y - ptr->start_y; i++) \ -{ \ - type *output_row = (type*)mask->get_rows()[i + ptr->start_y]; \ - unsigned char **input_rows = (unsigned char**)temp->get_rows() + i * OVERSAMPLE; \ - \ - \ - for(int j = 0; j < mask_w; j++) \ - { \ +#define DOWNSAMPLE(type, temp_type, value, v) do { \ +for( int y=0; yend_y-ptr->start_y; ++y ) { \ + type *output_row = (type*)mask->get_rows()[y + ptr->start_y]; \ + unsigned char **input_rows = (unsigned char**)temp->get_rows() + y * OVERSAMPLE; \ + for( int x=0; xget_color_model()) - { - case BC_A8: - { - unsigned char value; - value = (int)((float)engine->value / 100 * 0xff); - DOWNSAMPLE(unsigned char, int64_t, value); - break; - } - - case BC_A16: - { - uint16_t value; - value = (int)((float)engine->value / 100 * 0xffff); - DOWNSAMPLE(uint16_t, int64_t, value); - break; - } - - case BC_A_FLOAT: - { - float value; - value = (float)engine->value / 100; - DOWNSAMPLE(float, double, value); - break; - } + switch( mask->get_color_model() ) { + case BC_A8: { + unsigned char value; + value = (int)(engine_value / 100 * 0xff); + if( engine->value >= 0 ) + DOWNSAMPLE(unsigned char, int64_t, value, total); + else + DOWNSAMPLE(unsigned char, int64_t, value, value-total); + break; } + + case BC_A16: { + uint16_t value; + value = (int)(engine_value / 100 * 0xffff); + if( engine->value >= 0 ) + DOWNSAMPLE(uint16_t, int64_t, value, total); + else + DOWNSAMPLE(uint16_t, int64_t, value, value-total); + break; } + + case BC_A_FLOAT: { + float value; + value = engine_value / 100; + if( engine->value >= 0 ) + DOWNSAMPLE(float, double, value, total); + else + DOWNSAMPLE(float, double, value, value-total); + break; } } } -SET_TRACE - -SET_TRACE - - if(engine->step == DO_X_FEATHER) - { - - if(engine->recalculate) - { -// Feather polygon - if(engine->feather > 0) do_feather(engine->mask, - engine->temp_mask, - engine->feather, - ptr->start_y, - ptr->end_y, - 0, - 0); - } + if( engine->step == DO_X_FEATHER && engine->recalculate && // Feather polygon + engine->feather > 0 ) { + do_feather(engine->mask, + engine->temp_mask, engine->feather, + ptr->start_y, ptr->end_y, 0, 0); //printf("MaskUnit::process_package 3 %f\n", engine->feather); } - if(engine->step == DO_Y_FEATHER) - { - if(engine->recalculate) - { -// Feather polygon - if(engine->feather > 0) do_feather(engine->mask, - engine->temp_mask, - engine->feather, - 0, - 0, - ptr->start_x, - ptr->end_x); - } + if( engine->step == DO_Y_FEATHER && engine->recalculate && // Feather polygon + engine->feather > 0 ) { + do_feather(engine->mask, + engine->temp_mask, engine->feather, + 0, 0, ptr->start_x, ptr->end_x); } - if(engine->step == DO_APPLY) - { -// Apply mask - int mask_w = engine->mask->get_w(); - - -#define APPLY_MASK_SUBTRACT_ALPHA(type, max, components, do_yuv) \ -{ \ - type *output_row = (type*)engine->output->get_rows()[i]; \ - type *mask_row = (type*)engine->mask->get_rows()[i]; \ - int chroma_offset = (int)(max + 1) / 2; \ - \ - for(int j = 0; j < mask_w; j++) \ - { \ - if(components == 4) \ - { \ - output_row[j * 4 + 3] = output_row[j * 4 + 3] * (max - mask_row[j]) / max; \ - } \ - else \ - { \ - output_row[j * 3] = output_row[j * 3] * (max - mask_row[j]) / max; \ - \ - output_row[j * 3 + 1] = output_row[j * 3 + 1] * (max - mask_row[j]) / max; \ - output_row[j * 3 + 2] = output_row[j * 3 + 2] * (max - mask_row[j]) / max; \ - \ - if(do_yuv) \ - { \ - output_row[j * 3 + 1] += chroma_offset * mask_row[j] / max; \ - output_row[j * 3 + 2] += chroma_offset * mask_row[j] / max; \ - } \ - } \ - } \ -} - -#define APPLY_MASK_MULTIPLY_ALPHA(type, max, components, do_yuv) \ -{ \ - type *output_row = (type*)engine->output->get_rows()[i]; \ - type *mask_row = (type*)engine->mask->get_rows()[i]; \ + if( engine->step == DO_APPLY ) { // Apply mask +#define APPLY_MASK_ALPHA(cmodel, type, max, components, do_yuv, a, b) \ +case cmodel: \ +for( int y=ptr->start_y; yend_y; ++y ) { \ + type *output_row = (type*)engine->output->get_rows()[y]; \ + type *mask_row = (type*)engine->mask->get_rows()[y]; \ int chroma_offset = (int)(max + 1) / 2; \ - \ - for(int j = 0; j < mask_w; j++) \ - { \ - if(components == 4) \ - { \ - output_row[j * 4 + 3] = output_row[j * 4 + 3] * mask_row[j] / max; \ + for( int x=0; xoutput->get_color_model() ) { \ + APPLY_MASK_ALPHA(BC_RGB888, unsigned char, 0xff, 3, 0, a, b); \ + APPLY_MASK_ALPHA(BC_RGB_FLOAT, float, 1.0, 3, 0, a, b); \ + APPLY_MASK_ALPHA(BC_YUV888, unsigned char, 0xff, 3, 1, a, b); \ + APPLY_MASK_ALPHA(BC_RGBA_FLOAT, float, 1.0, 4, 0, a, b); \ + APPLY_MASK_ALPHA(BC_YUVA8888, unsigned char, 0xff, 4, 1, a, b); \ + APPLY_MASK_ALPHA(BC_RGBA8888, unsigned char, 0xff, 4, 0, a, b); \ + APPLY_MASK_ALPHA(BC_RGB161616, uint16_t, 0xffff, 3, 0, a, b); \ + APPLY_MASK_ALPHA(BC_YUV161616, uint16_t, 0xffff, 3, 1, a, b); \ + APPLY_MASK_ALPHA(BC_YUVA16161616, uint16_t, 0xffff, 4, 1, a, b); \ + APPLY_MASK_ALPHA(BC_RGBA16161616, uint16_t, 0xffff, 4, 0, a, b); \ +} break //printf("MaskUnit::process_package 1 %d\n", engine->mode); - for(int i = ptr->start_y; i < ptr->end_y; i++) - { - switch(engine->mode) - { - case MASK_MULTIPLY_ALPHA: - switch(engine->output->get_color_model()) - { - case BC_RGB888: - APPLY_MASK_MULTIPLY_ALPHA(unsigned char, 0xff, 3, 0); - break; - case BC_RGB_FLOAT: - APPLY_MASK_MULTIPLY_ALPHA(float, 1.0, 3, 0); - break; - case BC_YUV888: - APPLY_MASK_MULTIPLY_ALPHA(unsigned char, 0xff, 3, 1); - break; - case BC_RGBA_FLOAT: - APPLY_MASK_MULTIPLY_ALPHA(float, 1.0, 4, 0); - break; - case BC_YUVA8888: - APPLY_MASK_MULTIPLY_ALPHA(unsigned char, 0xff, 4, 1); - break; - case BC_RGBA8888: - APPLY_MASK_MULTIPLY_ALPHA(unsigned char, 0xff, 4, 0); - break; - case BC_RGB161616: - APPLY_MASK_MULTIPLY_ALPHA(uint16_t, 0xffff, 3, 0); - break; - case BC_YUV161616: - APPLY_MASK_MULTIPLY_ALPHA(uint16_t, 0xffff, 3, 1); - break; - case BC_YUVA16161616: - APPLY_MASK_MULTIPLY_ALPHA(uint16_t, 0xffff, 4, 1); - break; - case BC_RGBA16161616: - APPLY_MASK_MULTIPLY_ALPHA(uint16_t, 0xffff, 4, 0); - break; - } - break; - - case MASK_SUBTRACT_ALPHA: - switch(engine->output->get_color_model()) - { - case BC_RGB888: - APPLY_MASK_SUBTRACT_ALPHA(unsigned char, 0xff, 3, 0); - break; - case BC_RGB_FLOAT: - APPLY_MASK_SUBTRACT_ALPHA(float, 1.0, 3, 0); - break; - case BC_RGBA_FLOAT: - APPLY_MASK_SUBTRACT_ALPHA(float, 1.0, 4, 0); - break; - case BC_RGBA8888: - APPLY_MASK_SUBTRACT_ALPHA(unsigned char, 0xff, 4, 0); - break; - case BC_YUV888: - APPLY_MASK_SUBTRACT_ALPHA(unsigned char, 0xff, 3, 1); - break; - case BC_YUVA8888: - APPLY_MASK_SUBTRACT_ALPHA(unsigned char, 0xff, 4, 1); - break; - case BC_RGB161616: - APPLY_MASK_SUBTRACT_ALPHA(uint16_t, 0xffff, 3, 0); - break; - case BC_RGBA16161616: - APPLY_MASK_SUBTRACT_ALPHA(uint16_t, 0xffff, 4, 0); - break; - case BC_YUV161616: - APPLY_MASK_SUBTRACT_ALPHA(uint16_t, 0xffff, 3, 1); - break; - case BC_YUVA16161616: - APPLY_MASK_SUBTRACT_ALPHA(uint16_t, 0xffff, 4, 1); - break; - } - break; - } + int mask_w = engine->mask->get_w(); + switch( engine_mode ) { + MASK_ALPHA(MASK_MULTIPLY_ALPHA, m, n); + MASK_ALPHA(MASK_SUBTRACT_ALPHA, n, m); } } } - - - MaskEngine::MaskEngine(int cpus) : LoadServer(cpus, cpus * OVERSAMPLE * 2) // : LoadServer(1, OVERSAMPLE * 2) @@ -750,14 +499,12 @@ MaskEngine::MaskEngine(int cpus) MaskEngine::~MaskEngine() { - if(mask) - { + if( mask ) { delete mask; delete temp_mask; } - for(int i = 0; i < point_sets.total; i++) - { + for( int i = 0; i < point_sets.total; i++ ) { ArrayList *points = point_sets.values[i]; points->remove_all_objects(); } @@ -768,11 +515,10 @@ int MaskEngine::points_equivalent(ArrayList *new_points, ArrayList *points) { //printf("MaskEngine::points_equivalent %d %d\n", new_points->total, points->total); - if(new_points->total != points->total) return 0; + if( new_points->total != points->total ) return 0; - for(int i = 0; i < new_points->total; i++) - { - if(!(*new_points->values[i] == *points->values[i])) return 0; + for( int i = 0; i < new_points->total; i++ ) { + if( !(*new_points->values[i] == *points->values[i]) ) return 0; } return 1; @@ -787,64 +533,55 @@ void MaskEngine::do_mask(VFrame *output, int new_color_model = 0; recalculate = 0; - switch(output->get_color_model()) - { - case BC_RGB_FLOAT: - case BC_RGBA_FLOAT: - new_color_model = BC_A_FLOAT; - break; - - case BC_RGB888: - case BC_RGBA8888: - case BC_YUV888: - case BC_YUVA8888: - new_color_model = BC_A8; - break; - - case BC_RGB161616: - case BC_RGBA16161616: - case BC_YUV161616: - case BC_YUVA16161616: - new_color_model = BC_A16; - break; + switch( output->get_color_model() ) { + case BC_RGB_FLOAT: + case BC_RGBA_FLOAT: + new_color_model = BC_A_FLOAT; + break; + + case BC_RGB888: + case BC_RGBA8888: + case BC_YUV888: + case BC_YUVA8888: + new_color_model = BC_A8; + break; + + case BC_RGB161616: + case BC_RGBA16161616: + case BC_YUV161616: + case BC_YUVA16161616: + new_color_model = BC_A16; + break; } // Determine if recalculation is needed SET_TRACE - if(mask && - (mask->get_w() != output->get_w() || - mask->get_h() != output->get_h() || - mask->get_color_model() != new_color_model)) - { + if( mask && + (mask->get_w() != output->get_w() || + mask->get_h() != output->get_h() || + mask->get_color_model() != new_color_model) ) { delete mask; delete temp_mask; mask = 0; recalculate = 1; } - if(!recalculate) - { - if(point_sets.total != keyframe_set->total_submasks(start_position_project, - PLAY_FORWARD)) + if( !recalculate ) { + if( point_sets.total != keyframe_set->total_submasks(start_position_project, + PLAY_FORWARD) ) recalculate = 1; } - if(!recalculate) - { - for(int i = 0; - i < keyframe_set->total_submasks(start_position_project, - PLAY_FORWARD) && !recalculate; - i++) - { - ArrayList *new_points = new ArrayList; - keyframe_set->get_points(new_points, - i, - start_position_project, - PLAY_FORWARD); - if(!points_equivalent(new_points, point_sets.values[i])) recalculate = 1; - new_points->remove_all_objects(); - delete new_points; + if( !recalculate ) { + for( int i=0,n=keyframe_set->total_submasks(start_position_project, PLAY_FORWARD); + i new_points; + keyframe_set->get_points(&new_points, i, + start_position_project, PLAY_FORWARD); + if( !points_equivalent(&new_points, point_sets.values[i]) ) + recalculate = 1; + new_points.remove_all_objects(); } } @@ -853,35 +590,31 @@ SET_TRACE float new_feather = keyframe_set->get_feather(start_position_project, PLAY_FORWARD); - if(recalculate || + if( recalculate || !EQUIV(new_feather, feather) || - !EQUIV(new_value, value)) - { + !EQUIV(new_value, value) ) { recalculate = 1; - if(!mask) - { + if( !mask ) { mask = new VFrame(output->get_w(), output->get_h(), new_color_model, 0); temp_mask = new VFrame(output->get_w(), output->get_h(), new_color_model, 0); } - if(new_feather > 0) + if( new_feather > 0 ) temp_mask->clear_frame(); else mask->clear_frame(); - for(int i = 0; i < point_sets.total; i++) - { + for( int i = 0; i < point_sets.total; i++ ) { ArrayList *points = point_sets.values[i]; points->remove_all_objects(); } point_sets.remove_all_objects(); - for(int i = 0; + for( int i = 0; i < keyframe_set->total_submasks(start_position_project, PLAY_FORWARD); - i++) - { + i++ ) { ArrayList *new_points = new ArrayList; keyframe_set->get_points(new_points, i, diff --git a/cinelerra-5.1/cinelerra/playback3d.C b/cinelerra-5.1/cinelerra/playback3d.C index 8d58deb3..eed42cd9 100644 --- a/cinelerra-5.1/cinelerra/playback3d.C +++ b/cinelerra-5.1/cinelerra/playback3d.C @@ -1208,19 +1208,29 @@ void Playback3D::do_mask_sync(Playback3DCommand *command) // Clear screen glDisable(GL_TEXTURE_2D); - if( command->default_auto->mode == MASK_MULTIPLY_ALPHA ) { - glClearColor(0.0, 0.0, 0.0, 0.0); - glColor4f((float)command->keyframe->value / 100, - (float)command->keyframe->value / 100, - (float)command->keyframe->value / 100, - 1.0); + float value = command->keyframe->value / 100.f; + if( value >= 0 ) { + if( command->default_auto->mode == MASK_MULTIPLY_ALPHA ) { + glClearColor(0.f, 0.f, 0.f, 0.f); + glColor4f(value, value, value, 1.f); + } + else { + glClearColor(1.f, 1.f, 1.f, 1.f); + value = 1.f - value; + glColor4f(value, value, value, 1.f); + } } else { - glClearColor(1.0, 1.0, 1.0, 1.0); - glColor4f((float)1.0 - (float)command->keyframe->value / 100, - (float)1.0 - (float)command->keyframe->value / 100, - (float)1.0 - (float)command->keyframe->value / 100, - 1.0); + if( command->default_auto->mode == MASK_MULTIPLY_ALPHA ) { + value = -value; + glClearColor(value, value, value, 1.f); + glColor4f(0.f, 0.f, 0.f, 0.f); + } + else { + value = 1.f + value; + glClearColor(value, value, value, 1.f); + glColor4f(1.f, 1.f, 1.f, 1.f); + } } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); diff --git a/cinelerra-5.1/cinelerra/theme.C b/cinelerra-5.1/cinelerra/theme.C index 946eb37e..3b5de953 100644 --- a/cinelerra-5.1/cinelerra/theme.C +++ b/cinelerra-5.1/cinelerra/theme.C @@ -131,6 +131,7 @@ Theme::Theme() ffmpeg_toggle = 0; proxy_s_toggle = 0; proxy_p_toggle = 0; + mask_mode_toggle = 0; infoasset_data = 0; in_point = 0; insert_data = 0; diff --git a/cinelerra-5.1/cinelerra/theme.h b/cinelerra-5.1/cinelerra/theme.h index 5873fcd8..1845b871 100644 --- a/cinelerra-5.1/cinelerra/theme.h +++ b/cinelerra-5.1/cinelerra/theme.h @@ -322,6 +322,7 @@ public: VFrame **ffmpeg_toggle; VFrame **proxy_p_toggle; VFrame **proxy_s_toggle; + VFrame **mask_mode_toggle; VFrame **infoasset_data; VFrame **in_point; VFrame **insert_data; diff --git a/cinelerra-5.1/guicast/bcsignals.C b/cinelerra-5.1/guicast/bcsignals.C index 59597ffa..0aed3c8b 100644 --- a/cinelerra-5.1/guicast/bcsignals.C +++ b/cinelerra-5.1/guicast/bcsignals.C @@ -386,17 +386,77 @@ const char* BC_Signals::sig_to_str(int number) #if __i386__ #define IP eip #define sigregs_t sigcontext + +static void reg_dump(FILE *fp,sigregs_t *rp) +{ + fprintf(fp,"REGS:\n"); + fprintf(fp," gs: %04x:%04x\n", rp->gs,rp->__gsh); + fprintf(fp," fs: %04x:%04x\n", rp->fs,rp->__fsh); + fprintf(fp," es: %04x:%04x\n", rp->es,rp->__esh); + fprintf(fp," ds: %04x:%04x\n", rp->ds,rp->__dsh); + fprintf(fp," edi: %14p %d\n", (void*)rp->edi,rp->edi); + fprintf(fp," esi: %14p %d\n", (void*)rp->esi,rp->esi); + fprintf(fp," ebp: %14p %d\n", (void*)rp->ebp,rp->ebp); + fprintf(fp," esp: %14p %d\n", (void*)rp->esp,rp->esp); + fprintf(fp," ebx: %14p %d\n", (void*)rp->ebx,rp->ebx); + fprintf(fp," edx: %14p %d\n", (void*)rp->edx,rp->edx); + fprintf(fp," ecx: %14p %d\n", (void*)rp->ecx,rp->ecx); + fprintf(fp," eax: %14p %d\n", (void*)rp->eax,rp->eax); + fprintf(fp," trapno: %14p %d\n", (void*)rp->trapno,rp->trapno); + fprintf(fp," err: %14p %d\n", (void*)rp->err,rp->err); + fprintf(fp," eip: %14p %d\n", (void*)rp->eip,rp->eip); + fprintf(fp," cs: %04xd : %04x\n", rp->cs,rp->__csh); + fprintf(fp," eflags: %14p %d\n", (void*)rp->eflags,rp->eflags); + fprintf(fp," esp_at_signal: %p %d\n", (void*)rp->esp_at_signal,rp->esp_at_signal); + fprintf(fp," ss: %04xd : %04x\n", rp->ss,rp->__ssh); + fprintf(fp," oldmask: %14p %d\n", (void*)rp->oldmask,rp->oldmask); + fprintf(fp," cr2: %14p %d\n", (void*)rp->cr2,rp->cr2); + fprintf(fp,"\n"); +} #endif #if __x86_64__ #define IP rip #define sigregs_t sigcontext + +static void reg_dump(FILE *fp,sigregs_t *rp) +{ + fprintf(fp,"REGS:\n"); + fprintf(fp," r8: %20p %jd\n", (void*)rp->r8,rp->r8); + fprintf(fp," r9: %20p %jd\n", (void*)rp->r9,rp->r9); + fprintf(fp," r10: %20p %jd\n", (void*)rp->r10,rp->r10); + fprintf(fp," r11: %20p %jd\n", (void*)rp->r11,rp->r11); + fprintf(fp," r12: %20p %jd\n", (void*)rp->r12,rp->r12); + fprintf(fp," r13: %20p %jd\n", (void*)rp->r13,rp->r13); + fprintf(fp," r14: %20p %jd\n", (void*)rp->r14,rp->r14); + fprintf(fp," r15: %20p %jd\n", (void*)rp->r15,rp->r15); + fprintf(fp," rdi: %20p %jd\n", (void*)rp->rdi,rp->rdi); + fprintf(fp," rsi: %20p %jd\n", (void*)rp->rsi,rp->rsi); + fprintf(fp," rbp: %20p %jd\n", (void*)rp->rbp,rp->rbp); + fprintf(fp," rbx: %20p %jd\n", (void*)rp->rbx,rp->rbx); + fprintf(fp," rdx: %20p %jd\n", (void*)rp->rdx,rp->rdx); + fprintf(fp," rax: %20p %jd\n", (void*)rp->rax,rp->rax); + fprintf(fp," rcx: %20p %jd\n", (void*)rp->rcx,rp->rcx); + fprintf(fp," rsp: %20p %jd\n", (void*)rp->rsp,rp->rsp); + fprintf(fp," rip: %20p %jd\n", (void*)rp->rip,rp->rip); + fprintf(fp," eflags: %14p %jd\n", (void*)rp->eflags,rp->eflags); + fprintf(fp," cs: %04x\n", rp->cs); + fprintf(fp," gs: %04x\n", rp->gs); + fprintf(fp," fs: %04x\n", rp->fs); + fprintf(fp," err: %20p %jd\n", (void*)rp->err,rp->err); + fprintf(fp," trapno: %20p %jd\n", (void*)rp->trapno,rp->trapno); + fprintf(fp," oldmask: %20p %jd\n", (void*)rp->oldmask,rp->oldmask); + fprintf(fp," cr2: %20p %jd\n", (void*)rp->cr2,rp->cr2); + fprintf(fp,"\n"); +} + #endif #if __powerpc__ || __powerpc64__ || __powerpc64le__ #include #define IP nip #define sigregs_t pt_regs +static void reg_dump(FILE *fp,sigregs_t *rp) {} #endif #ifndef IP @@ -481,6 +541,7 @@ static void handle_dump(int n, siginfo_t * info, void *sc) else fprintf(fp,"err opening: %s, %m\n", proc_mem); + reg_dump(fp, c); fprintf(fp,"\n\n"); if( fp != stdout ) fclose(fp); char cmd[1024], *cp = cmd; diff --git a/cinelerra-5.1/guicast/bcslider.h b/cinelerra-5.1/guicast/bcslider.h index 18bb5181..093b9620 100644 --- a/cinelerra-5.1/guicast/bcslider.h +++ b/cinelerra-5.1/guicast/bcslider.h @@ -32,13 +32,8 @@ class BC_PercentageSlider; class BC_Slider : public BC_SubWindow { public: - BC_Slider(int x, - int y, - int pixels, - int pointer_motion_range, - VFrame **images, - int show_number, - int vertical, + BC_Slider(int x, int y, int pixels, int pointer_motion_range, + VFrame **images, int show_number, int vertical, int use_caption); virtual ~BC_Slider(); @@ -108,18 +103,9 @@ private: class BC_ISlider : public BC_Slider { public: - BC_ISlider(int x, - int y, - int vertical, - int pixels, - int pointer_motion_range, - int64_t minvalue, - int64_t maxvalue, - int64_t value, - int use_caption = 0, - VFrame **data = 0, - int *output = 0); - + BC_ISlider(int x, int y, int vertical, int pixels, int pointer_motion_range, + int64_t minvalue, int64_t maxvalue, int64_t value, + int use_caption = 0, VFrame **data = 0, int *output = 0); int update(int64_t value); int update(int pointer_motion_range, int64_t value, int64_t minvalue, int64_t maxvalue); int64_t get_value(); @@ -142,16 +128,9 @@ private: class BC_FSlider : public BC_Slider { public: - BC_FSlider(int x, - int y, - int vertical, - int pixels, - int pointer_motion_range, - float minvalue, - float maxvalue, - float value, - int use_caption = 0, - VFrame **data = 0); + BC_FSlider(int x, int y, int vertical, int pixels, int pointer_motion_range, + float minvalue, float maxvalue, float value, + int use_caption = 0, VFrame **data = 0); friend class BC_PercentageSlider; @@ -179,20 +158,11 @@ private: class BC_PercentageSlider : public BC_FSlider { public: - BC_PercentageSlider(int x, - int y, - int vertical, - int pixels, - int pointer_motion_range, - float minvalue, - float maxvalue, - float value, - int use_caption = 0, - VFrame **data = 0); - + BC_PercentageSlider(int x, int y, int vertical, int pixels, int pointer_motion_range, + float minvalue, float maxvalue, float value, + int use_caption = 0, VFrame **data = 0); char* get_caption(); private: }; - #endif diff --git a/cinelerra-5.1/plugins/brightness/brightnesswindow.C b/cinelerra-5.1/plugins/brightness/brightnesswindow.C index 72d9e82a..b127e275 100644 --- a/cinelerra-5.1/plugins/brightness/brightnesswindow.C +++ b/cinelerra-5.1/plugins/brightness/brightnesswindow.C @@ -22,6 +22,7 @@ #include "bcdisplayinfo.h" #include "brightnesswindow.h" #include "language.h" +#include "theme.h" @@ -179,7 +180,7 @@ int BrightnessReset::handle_event() } BrightnessSliderClr::BrightnessSliderClr(BrightnessMain *client, BrightnessWindow *window, int x, int y, int w, int is_brightness) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, client->get_theme()->get_image_set("reset_button")) { this->client = client; this->window = window; diff --git a/cinelerra-5.1/plugins/brightness/brightnesswindow.h b/cinelerra-5.1/plugins/brightness/brightnesswindow.h index 1b122ed3..877d216b 100644 --- a/cinelerra-5.1/plugins/brightness/brightnesswindow.h +++ b/cinelerra-5.1/plugins/brightness/brightnesswindow.h @@ -91,7 +91,7 @@ public: BrightnessWindow *window; }; -class BrightnessSliderClr : public BC_GenericButton +class BrightnessSliderClr : public BC_Button { public: BrightnessSliderClr(BrightnessMain *client, BrightnessWindow *window, int x, int y, int w, int is_brightness); diff --git a/cinelerra-5.1/plugins/color3way/color3waywindow.C b/cinelerra-5.1/plugins/color3way/color3waywindow.C index 78203e86..1e188f26 100644 --- a/cinelerra-5.1/plugins/color3way/color3waywindow.C +++ b/cinelerra-5.1/plugins/color3way/color3waywindow.C @@ -677,7 +677,7 @@ Color3WaySliderClrSection::Color3WaySliderClrSection(Color3WayMain *plugin, int w, int clear, int section) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button")) { this->plugin = plugin; this->gui = gui; diff --git a/cinelerra-5.1/plugins/color3way/color3waywindow.h b/cinelerra-5.1/plugins/color3way/color3waywindow.h index 6c6d728b..672de5c6 100644 --- a/cinelerra-5.1/plugins/color3way/color3waywindow.h +++ b/cinelerra-5.1/plugins/color3way/color3waywindow.h @@ -142,7 +142,7 @@ public: }; -class Color3WaySliderClrSection : public BC_GenericButton +class Color3WaySliderClrSection : public BC_Button { public: Color3WaySliderClrSection(Color3WayMain *plugin, diff --git a/cinelerra-5.1/plugins/colorbalance/colorbalancewindow.C b/cinelerra-5.1/plugins/colorbalance/colorbalancewindow.C index 1719fee8..56d3c27b 100644 --- a/cinelerra-5.1/plugins/colorbalance/colorbalancewindow.C +++ b/cinelerra-5.1/plugins/colorbalance/colorbalancewindow.C @@ -22,6 +22,7 @@ #include "bcdisplayinfo.h" #include "colorbalancewindow.h" #include "language.h" +#include "theme.h" @@ -241,7 +242,7 @@ int ColorBalanceReset::handle_event() ColorBalanceSliderClr::ColorBalanceSliderClr(ColorBalanceMain *plugin, ColorBalanceWindow *gui, int x, int y, int w, int clear) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button")) { this->plugin = plugin; this->gui = gui; diff --git a/cinelerra-5.1/plugins/colorbalance/colorbalancewindow.h b/cinelerra-5.1/plugins/colorbalance/colorbalancewindow.h index 02b3e39a..3076691a 100644 --- a/cinelerra-5.1/plugins/colorbalance/colorbalancewindow.h +++ b/cinelerra-5.1/plugins/colorbalance/colorbalancewindow.h @@ -119,7 +119,7 @@ public: ColorBalanceWindow *gui; }; -class ColorBalanceSliderClr : public BC_GenericButton +class ColorBalanceSliderClr : public BC_Button { public: ColorBalanceSliderClr(ColorBalanceMain *plugin, ColorBalanceWindow *gui, int x, int y, int w, int clear); diff --git a/cinelerra-5.1/plugins/huesaturation/huesaturation.C b/cinelerra-5.1/plugins/huesaturation/huesaturation.C index c6a23290..ce1e1512 100644 --- a/cinelerra-5.1/plugins/huesaturation/huesaturation.C +++ b/cinelerra-5.1/plugins/huesaturation/huesaturation.C @@ -31,6 +31,7 @@ #include "bccolors.h" #include "playback3d.h" #include "pluginvclient.h" +#include "theme.h" #include "vframe.h" #include @@ -202,7 +203,7 @@ int HueReset::handle_event() HueSliderClr::HueSliderClr(HueEffect *plugin, HueWindow *gui, int x, int y, int w, int clear) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button")) { this->plugin = plugin; this->gui = gui; diff --git a/cinelerra-5.1/plugins/huesaturation/huesaturation.h b/cinelerra-5.1/plugins/huesaturation/huesaturation.h index a591a852..c763ba4f 100644 --- a/cinelerra-5.1/plugins/huesaturation/huesaturation.h +++ b/cinelerra-5.1/plugins/huesaturation/huesaturation.h @@ -111,7 +111,7 @@ public: HueWindow *gui; }; -class HueSliderClr : public BC_GenericButton +class HueSliderClr : public BC_Button { public: HueSliderClr(HueEffect *plugin, HueWindow *gui, int x, int y, int w, int clear); diff --git a/cinelerra-5.1/plugins/linearblur/linearblur.C b/cinelerra-5.1/plugins/linearblur/linearblur.C index d5d326f0..dab0043a 100644 --- a/cinelerra-5.1/plugins/linearblur/linearblur.C +++ b/cinelerra-5.1/plugins/linearblur/linearblur.C @@ -33,6 +33,7 @@ #include "language.h" #include "loadbalance.h" #include "pluginvclient.h" +#include "theme.h" #include "vframe.h" @@ -302,7 +303,7 @@ int LinearBlurDefaultSettings::handle_event() LinearBlurSliderClr::LinearBlurSliderClr(LinearBlurMain *plugin, LinearBlurWindow *gui, int x, int y, int w, int clear) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button")) { this->plugin = plugin; this->gui = gui; diff --git a/cinelerra-5.1/plugins/linearblur/linearblur.h b/cinelerra-5.1/plugins/linearblur/linearblur.h index 88f49a81..676f0331 100644 --- a/cinelerra-5.1/plugins/linearblur/linearblur.h +++ b/cinelerra-5.1/plugins/linearblur/linearblur.h @@ -124,7 +124,7 @@ public: LinearBlurWindow *gui; }; -class LinearBlurSliderClr : public BC_GenericButton +class LinearBlurSliderClr : public BC_Button { public: LinearBlurSliderClr(LinearBlurMain *plugin, LinearBlurWindow *gui, int x, int y, int w, int clear); diff --git a/cinelerra-5.1/plugins/polar/polar.C b/cinelerra-5.1/plugins/polar/polar.C index 16812843..ffdc0ae5 100644 --- a/cinelerra-5.1/plugins/polar/polar.C +++ b/cinelerra-5.1/plugins/polar/polar.C @@ -28,6 +28,7 @@ #include "language.h" #include "loadbalance.h" #include "pluginvclient.h" +#include "theme.h" #include "vframe.h" @@ -98,7 +99,7 @@ public: PolarWindow *window; }; -class PolarSliderClr : public BC_GenericButton +class PolarSliderClr : public BC_Button { public: PolarSliderClr(PolarEffect *plugin, PolarWindow *window, int x, int y, int w, int clear); @@ -347,7 +348,7 @@ int PolarReset::handle_event() PolarSliderClr::PolarSliderClr(PolarEffect *plugin, PolarWindow *window, int x, int y, int w, int clear) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button")) { this->plugin = plugin; this->window = window; diff --git a/cinelerra-5.1/plugins/radialblur/radialblur.C b/cinelerra-5.1/plugins/radialblur/radialblur.C index 5137a6f2..5b80b0b8 100644 --- a/cinelerra-5.1/plugins/radialblur/radialblur.C +++ b/cinelerra-5.1/plugins/radialblur/radialblur.C @@ -306,7 +306,7 @@ int RadialBlurDefaultSettings::handle_event() RadialBlurSliderClr::RadialBlurSliderClr(RadialBlurMain *plugin, RadialBlurWindow *gui, int x, int y, int w, int clear) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button")) { this->plugin = plugin; this->gui = gui; diff --git a/cinelerra-5.1/plugins/radialblur/radialblur.h b/cinelerra-5.1/plugins/radialblur/radialblur.h index c111b55e..368c0e0c 100644 --- a/cinelerra-5.1/plugins/radialblur/radialblur.h +++ b/cinelerra-5.1/plugins/radialblur/radialblur.h @@ -37,6 +37,7 @@ #include "language.h" #include "loadbalance.h" #include "pluginvclient.h" +#include "theme.h" #include "vframe.h" #define RESET_DEFAULT_SETTINGS 10 @@ -128,7 +129,7 @@ public: RadialBlurWindow *gui; }; -class RadialBlurSliderClr : public BC_GenericButton +class RadialBlurSliderClr : public BC_Button { public: RadialBlurSliderClr(RadialBlurMain *plugin, RadialBlurWindow *gui, int x, int y, int w, int clear); diff --git a/cinelerra-5.1/plugins/rgbshift/rgbshift.C b/cinelerra-5.1/plugins/rgbshift/rgbshift.C index dca56c2d..f05cb3a0 100644 --- a/cinelerra-5.1/plugins/rgbshift/rgbshift.C +++ b/cinelerra-5.1/plugins/rgbshift/rgbshift.C @@ -130,7 +130,7 @@ int RGBShiftReset::handle_event() RGBShiftSliderClr::RGBShiftSliderClr(RGBShiftEffect *plugin, RGBShiftWindow *window, int x, int y, int w, int clear) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button")) { this->plugin = plugin; this->window = window; diff --git a/cinelerra-5.1/plugins/rgbshift/rgbshift.h b/cinelerra-5.1/plugins/rgbshift/rgbshift.h index e948c40d..4d71e6a8 100644 --- a/cinelerra-5.1/plugins/rgbshift/rgbshift.h +++ b/cinelerra-5.1/plugins/rgbshift/rgbshift.h @@ -31,6 +31,7 @@ #include "language.h" #include "bccolors.h" #include "pluginvclient.h" +#include "theme.h" #include "vframe.h" #include @@ -86,7 +87,7 @@ public: RGBShiftWindow *window; }; -class RGBShiftSliderClr : public BC_GenericButton +class RGBShiftSliderClr : public BC_Button { public: RGBShiftSliderClr(RGBShiftEffect *plugin, RGBShiftWindow *window, int x, int y, int w, int clear); diff --git a/cinelerra-5.1/plugins/sharpen/sharpenwindow.C b/cinelerra-5.1/plugins/sharpen/sharpenwindow.C index 18ddefd9..67f31bcf 100644 --- a/cinelerra-5.1/plugins/sharpen/sharpenwindow.C +++ b/cinelerra-5.1/plugins/sharpen/sharpenwindow.C @@ -198,7 +198,7 @@ int SharpenDefaultSettings::handle_event() SharpenSliderClr::SharpenSliderClr(SharpenMain *client, SharpenWindow *gui, int x, int y, int w) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, client->get_theme()->get_image_set("reset_button")) { this->client = client; this->gui = gui; diff --git a/cinelerra-5.1/plugins/sharpen/sharpenwindow.h b/cinelerra-5.1/plugins/sharpen/sharpenwindow.h index b1e684c4..6cc21706 100644 --- a/cinelerra-5.1/plugins/sharpen/sharpenwindow.h +++ b/cinelerra-5.1/plugins/sharpen/sharpenwindow.h @@ -26,6 +26,7 @@ #include "filexml.h" #include "mutex.h" #include "sharpen.h" +#include "theme.h" #define RESET_DEFAULT_SETTINGS 10 #define RESET_ALL 0 @@ -120,7 +121,7 @@ public: SharpenWindow *gui; }; -class SharpenSliderClr : public BC_GenericButton +class SharpenSliderClr : public BC_Button { public: SharpenSliderClr(SharpenMain *client, SharpenWindow *gui, int x, int y, int w); diff --git a/cinelerra-5.1/plugins/shiftinterlace/shiftinterlace.C b/cinelerra-5.1/plugins/shiftinterlace/shiftinterlace.C index 3c8b15f3..4d578886 100644 --- a/cinelerra-5.1/plugins/shiftinterlace/shiftinterlace.C +++ b/cinelerra-5.1/plugins/shiftinterlace/shiftinterlace.C @@ -201,7 +201,7 @@ int ShiftInterlaceReset::handle_event() ShiftInterlaceSliderClr::ShiftInterlaceSliderClr(ShiftInterlaceMain *plugin, ShiftInterlaceWindow *gui, int x, int y, int w, int clear) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button")) { this->plugin = plugin; this->gui = gui; diff --git a/cinelerra-5.1/plugins/shiftinterlace/shiftinterlace.h b/cinelerra-5.1/plugins/shiftinterlace/shiftinterlace.h index 4bba77e2..68a8735f 100644 --- a/cinelerra-5.1/plugins/shiftinterlace/shiftinterlace.h +++ b/cinelerra-5.1/plugins/shiftinterlace/shiftinterlace.h @@ -29,6 +29,7 @@ #include "guicast.h" #include "language.h" #include "pluginvclient.h" +#include "theme.h" #include "vframe.h" @@ -91,7 +92,7 @@ public: ShiftInterlaceWindow *gui; }; -class ShiftInterlaceSliderClr : public BC_GenericButton +class ShiftInterlaceSliderClr : public BC_Button { public: ShiftInterlaceSliderClr(ShiftInterlaceMain *plugin, ShiftInterlaceWindow *gui, int x, int y, int w, int clear); diff --git a/cinelerra-5.1/plugins/theme_blond/blondtheme.C b/cinelerra-5.1/plugins/theme_blond/blondtheme.C index ce13c51f..5423dde9 100644 --- a/cinelerra-5.1/plugins/theme_blond/blondtheme.C +++ b/cinelerra-5.1/plugins/theme_blond/blondtheme.C @@ -275,6 +275,12 @@ void BlondTheme::initialize() "new_bigbutton_dn.png", "new_ok_images"); + new_button("reset.png", + "reset_up.png", + "reset_dn.png", + "reset_hi.png", + "reset_button"); + resources->cancel_images = new_button("cancel.png", "filebox_bigbutton_up.png", "filebox_bigbutton_hi.png", @@ -636,6 +642,13 @@ void BlondTheme::initialize() "proxy_s_down.png", "proxy_s_chkdhi.png"); + mask_mode_toggle = new_image_set(5, + "mask_mode_up.png", + "mask_mode_hi.png", + "mask_mode_chkd.png", + "mask_mode_down.png", + "mask_mode_chkdhi.png"); + shbtn_data = new_image_set(3, "shbtn_up.png", "shbtn_hi.png", diff --git a/cinelerra-5.1/plugins/theme_blond/data/mask_mode_chkd.png b/cinelerra-5.1/plugins/theme_blond/data/mask_mode_chkd.png new file mode 100644 index 00000000..f02f1ad4 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond/data/mask_mode_chkd.png differ diff --git a/cinelerra-5.1/plugins/theme_blond/data/mask_mode_chkdhi.png b/cinelerra-5.1/plugins/theme_blond/data/mask_mode_chkdhi.png new file mode 100644 index 00000000..2c24ad8b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond/data/mask_mode_chkdhi.png differ diff --git a/cinelerra-5.1/plugins/theme_blond/data/mask_mode_down.png b/cinelerra-5.1/plugins/theme_blond/data/mask_mode_down.png new file mode 100644 index 00000000..c5946a09 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond/data/mask_mode_down.png differ diff --git a/cinelerra-5.1/plugins/theme_blond/data/mask_mode_hi.png b/cinelerra-5.1/plugins/theme_blond/data/mask_mode_hi.png new file mode 100644 index 00000000..f3f30607 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond/data/mask_mode_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_blond/data/mask_mode_up.png b/cinelerra-5.1/plugins/theme_blond/data/mask_mode_up.png new file mode 100644 index 00000000..566432c7 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond/data/mask_mode_up.png differ diff --git a/cinelerra-5.1/plugins/theme_blond/data/reset.png b/cinelerra-5.1/plugins/theme_blond/data/reset.png new file mode 100644 index 00000000..bd714a16 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond/data/reset.png differ diff --git a/cinelerra-5.1/plugins/theme_blond/data/reset_dn.png b/cinelerra-5.1/plugins/theme_blond/data/reset_dn.png new file mode 100644 index 00000000..3362081b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond/data/reset_dn.png differ diff --git a/cinelerra-5.1/plugins/theme_blond/data/reset_hi.png b/cinelerra-5.1/plugins/theme_blond/data/reset_hi.png new file mode 100644 index 00000000..49bfefe9 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond/data/reset_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_blond/data/reset_up.png b/cinelerra-5.1/plugins/theme_blond/data/reset_up.png new file mode 100644 index 00000000..a9ced0f8 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond/data/reset_up.png differ diff --git a/cinelerra-5.1/plugins/theme_blond_cv/blondcvtheme.C b/cinelerra-5.1/plugins/theme_blond_cv/blondcvtheme.C index 4d396a3e..2ae27160 100644 --- a/cinelerra-5.1/plugins/theme_blond_cv/blondcvtheme.C +++ b/cinelerra-5.1/plugins/theme_blond_cv/blondcvtheme.C @@ -328,6 +328,12 @@ void BlondCVTheme::initialize() "generic_dn.png", "new_ok_images"); + new_button("reset.png", + "reset_up.png", + "reset_dn.png", + "reset_hi.png", + "reset_button"); + resources->cancel_images = new_button("cancel.png", "generic_up.png", "generic_hi.png", @@ -656,6 +662,13 @@ void BlondCVTheme::initialize() "proxy_s_down.png", "proxy_s_chkdhi.png"); + mask_mode_toggle = new_image_set(5, + "mask_mode_up.png", + "mask_mode_hi.png", + "mask_mode_chkd.png", + "mask_mode_down.png", + "mask_mode_chkdhi.png"); + shbtn_data = new_image_set(3, "shbtn_up.png", "shbtn_hi.png", diff --git a/cinelerra-5.1/plugins/theme_blond_cv/data/mask_mode_chkd.png b/cinelerra-5.1/plugins/theme_blond_cv/data/mask_mode_chkd.png new file mode 100644 index 00000000..f02f1ad4 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond_cv/data/mask_mode_chkd.png differ diff --git a/cinelerra-5.1/plugins/theme_blond_cv/data/mask_mode_chkdhi.png b/cinelerra-5.1/plugins/theme_blond_cv/data/mask_mode_chkdhi.png new file mode 100644 index 00000000..2c24ad8b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond_cv/data/mask_mode_chkdhi.png differ diff --git a/cinelerra-5.1/plugins/theme_blond_cv/data/mask_mode_down.png b/cinelerra-5.1/plugins/theme_blond_cv/data/mask_mode_down.png new file mode 100644 index 00000000..c5946a09 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond_cv/data/mask_mode_down.png differ diff --git a/cinelerra-5.1/plugins/theme_blond_cv/data/mask_mode_hi.png b/cinelerra-5.1/plugins/theme_blond_cv/data/mask_mode_hi.png new file mode 100644 index 00000000..f3f30607 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond_cv/data/mask_mode_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_blond_cv/data/mask_mode_up.png b/cinelerra-5.1/plugins/theme_blond_cv/data/mask_mode_up.png new file mode 100644 index 00000000..566432c7 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond_cv/data/mask_mode_up.png differ diff --git a/cinelerra-5.1/plugins/theme_blond_cv/data/reset.png b/cinelerra-5.1/plugins/theme_blond_cv/data/reset.png new file mode 100644 index 00000000..bd714a16 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond_cv/data/reset.png differ diff --git a/cinelerra-5.1/plugins/theme_blond_cv/data/reset_dn.png b/cinelerra-5.1/plugins/theme_blond_cv/data/reset_dn.png index 335def55..3362081b 100644 Binary files a/cinelerra-5.1/plugins/theme_blond_cv/data/reset_dn.png and b/cinelerra-5.1/plugins/theme_blond_cv/data/reset_dn.png differ diff --git a/cinelerra-5.1/plugins/theme_blond_cv/data/reset_hi.png b/cinelerra-5.1/plugins/theme_blond_cv/data/reset_hi.png index 55dc379c..49bfefe9 100644 Binary files a/cinelerra-5.1/plugins/theme_blond_cv/data/reset_hi.png and b/cinelerra-5.1/plugins/theme_blond_cv/data/reset_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_blond_cv/data/reset_up.png b/cinelerra-5.1/plugins/theme_blond_cv/data/reset_up.png index 4ce4270d..a9ced0f8 100644 Binary files a/cinelerra-5.1/plugins/theme_blond_cv/data/reset_up.png and b/cinelerra-5.1/plugins/theme_blond_cv/data/reset_up.png differ diff --git a/cinelerra-5.1/plugins/theme_blue/bluetheme.C b/cinelerra-5.1/plugins/theme_blue/bluetheme.C index 8cfd267f..4f2785de 100644 --- a/cinelerra-5.1/plugins/theme_blue/bluetheme.C +++ b/cinelerra-5.1/plugins/theme_blue/bluetheme.C @@ -275,6 +275,12 @@ void BlueDotTheme::initialize() "new_bigbutton_dn.png", "new_ok_images"); + new_button("reset.png", + "reset_up.png", + "reset_dn.png", + "reset_hi.png", + "reset_button"); + resources->cancel_images = new_button("cancel.png", "filebox_bigbutton_up.png", "filebox_bigbutton_hi.png", @@ -636,6 +642,13 @@ void BlueDotTheme::initialize() "proxy_s_down.png", "proxy_s_chkdhi.png"); + mask_mode_toggle = new_image_set(5, + "mask_mode_up.png", + "mask_mode_hi.png", + "mask_mode_chkd.png", + "mask_mode_down.png", + "mask_mode_chkdhi.png"); + shbtn_data = new_image_set(3, "shbtn_up.png", "shbtn_hi.png", diff --git a/cinelerra-5.1/plugins/theme_blue/data/mask_mode_chkd.png b/cinelerra-5.1/plugins/theme_blue/data/mask_mode_chkd.png new file mode 100644 index 00000000..f02f1ad4 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue/data/mask_mode_chkd.png differ diff --git a/cinelerra-5.1/plugins/theme_blue/data/mask_mode_chkdhi.png b/cinelerra-5.1/plugins/theme_blue/data/mask_mode_chkdhi.png new file mode 100644 index 00000000..2c24ad8b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue/data/mask_mode_chkdhi.png differ diff --git a/cinelerra-5.1/plugins/theme_blue/data/mask_mode_down.png b/cinelerra-5.1/plugins/theme_blue/data/mask_mode_down.png new file mode 100644 index 00000000..c5946a09 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue/data/mask_mode_down.png differ diff --git a/cinelerra-5.1/plugins/theme_blue/data/mask_mode_hi.png b/cinelerra-5.1/plugins/theme_blue/data/mask_mode_hi.png new file mode 100644 index 00000000..f3f30607 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue/data/mask_mode_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_blue/data/mask_mode_up.png b/cinelerra-5.1/plugins/theme_blue/data/mask_mode_up.png new file mode 100644 index 00000000..566432c7 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue/data/mask_mode_up.png differ diff --git a/cinelerra-5.1/plugins/theme_blue/data/reset.png b/cinelerra-5.1/plugins/theme_blue/data/reset.png new file mode 100644 index 00000000..bd714a16 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue/data/reset.png differ diff --git a/cinelerra-5.1/plugins/theme_blue/data/reset_dn.png b/cinelerra-5.1/plugins/theme_blue/data/reset_dn.png new file mode 100644 index 00000000..3362081b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue/data/reset_dn.png differ diff --git a/cinelerra-5.1/plugins/theme_blue/data/reset_hi.png b/cinelerra-5.1/plugins/theme_blue/data/reset_hi.png new file mode 100644 index 00000000..49bfefe9 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue/data/reset_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_blue/data/reset_up.png b/cinelerra-5.1/plugins/theme_blue/data/reset_up.png new file mode 100644 index 00000000..a9ced0f8 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue/data/reset_up.png differ diff --git a/cinelerra-5.1/plugins/theme_blue_dot/bluedottheme.C b/cinelerra-5.1/plugins/theme_blue_dot/bluedottheme.C index 2d956f6f..b2f3565a 100644 --- a/cinelerra-5.1/plugins/theme_blue_dot/bluedottheme.C +++ b/cinelerra-5.1/plugins/theme_blue_dot/bluedottheme.C @@ -286,6 +286,12 @@ void BlueDotTheme::initialize() "generic_dn.png", "new_ok_images"); + new_button("reset.png", + "reset_up.png", + "reset_dn.png", + "reset_hi.png", + "reset_button"); + resources->cancel_images = new_button("cancel.png", "generic_up.png", "generic_hi.png", @@ -681,6 +687,13 @@ void BlueDotTheme::initialize() "proxy_s_down.png", "proxy_s_chkdhi.png"); + mask_mode_toggle = new_image_set(5, + "mask_mode_up.png", + "mask_mode_hi.png", + "mask_mode_chkd.png", + "mask_mode_down.png", + "mask_mode_chkdhi.png"); + shbtn_data = new_image_set(3, "shbtn_up.png", "shbtn_hi.png", diff --git a/cinelerra-5.1/plugins/theme_blue_dot/data/mask_mode_chkd.png b/cinelerra-5.1/plugins/theme_blue_dot/data/mask_mode_chkd.png new file mode 100644 index 00000000..f02f1ad4 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue_dot/data/mask_mode_chkd.png differ diff --git a/cinelerra-5.1/plugins/theme_blue_dot/data/mask_mode_chkdhi.png b/cinelerra-5.1/plugins/theme_blue_dot/data/mask_mode_chkdhi.png new file mode 100644 index 00000000..2c24ad8b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue_dot/data/mask_mode_chkdhi.png differ diff --git a/cinelerra-5.1/plugins/theme_blue_dot/data/mask_mode_down.png b/cinelerra-5.1/plugins/theme_blue_dot/data/mask_mode_down.png new file mode 100644 index 00000000..c5946a09 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue_dot/data/mask_mode_down.png differ diff --git a/cinelerra-5.1/plugins/theme_blue_dot/data/mask_mode_hi.png b/cinelerra-5.1/plugins/theme_blue_dot/data/mask_mode_hi.png new file mode 100644 index 00000000..f3f30607 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue_dot/data/mask_mode_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_blue_dot/data/mask_mode_up.png b/cinelerra-5.1/plugins/theme_blue_dot/data/mask_mode_up.png new file mode 100644 index 00000000..566432c7 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue_dot/data/mask_mode_up.png differ diff --git a/cinelerra-5.1/plugins/theme_blue_dot/data/reset.png b/cinelerra-5.1/plugins/theme_blue_dot/data/reset.png new file mode 100644 index 00000000..bd714a16 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue_dot/data/reset.png differ diff --git a/cinelerra-5.1/plugins/theme_blue_dot/data/reset_dn.png b/cinelerra-5.1/plugins/theme_blue_dot/data/reset_dn.png new file mode 100644 index 00000000..3362081b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue_dot/data/reset_dn.png differ diff --git a/cinelerra-5.1/plugins/theme_blue_dot/data/reset_hi.png b/cinelerra-5.1/plugins/theme_blue_dot/data/reset_hi.png new file mode 100644 index 00000000..49bfefe9 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue_dot/data/reset_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_blue_dot/data/reset_up.png b/cinelerra-5.1/plugins/theme_blue_dot/data/reset_up.png new file mode 100644 index 00000000..a9ced0f8 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue_dot/data/reset_up.png differ diff --git a/cinelerra-5.1/plugins/theme_bright/brighttheme.C b/cinelerra-5.1/plugins/theme_bright/brighttheme.C index 10601716..a33d70e6 100644 --- a/cinelerra-5.1/plugins/theme_bright/brighttheme.C +++ b/cinelerra-5.1/plugins/theme_bright/brighttheme.C @@ -282,6 +282,12 @@ void BrightTheme::initialize() "bigbutton_dn.png", "new_ok_images"); + new_button("reset.png", + "reset_up.png", + "reset_dn.png", + "reset_hi.png", + "reset_button"); + resources->cancel_images = new_button("cancel.png", "bigbutton_up.png", "bigbutton_hi.png", @@ -642,6 +648,13 @@ void BrightTheme::initialize() "proxy_s_down.png", "proxy_s_chkdhi.png"); + mask_mode_toggle = new_image_set(5, + "mask_mode_up.png", + "mask_mode_hi.png", + "mask_mode_chkd.png", + "mask_mode_down.png", + "mask_mode_chkdhi.png"); + shbtn_data = new_image_set(3, "shbtn_up.png", "shbtn_hi.png", diff --git a/cinelerra-5.1/plugins/theme_bright/data/mask_mode_chkd.png b/cinelerra-5.1/plugins/theme_bright/data/mask_mode_chkd.png new file mode 100644 index 00000000..f02f1ad4 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_bright/data/mask_mode_chkd.png differ diff --git a/cinelerra-5.1/plugins/theme_bright/data/mask_mode_chkdhi.png b/cinelerra-5.1/plugins/theme_bright/data/mask_mode_chkdhi.png new file mode 100644 index 00000000..2c24ad8b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_bright/data/mask_mode_chkdhi.png differ diff --git a/cinelerra-5.1/plugins/theme_bright/data/mask_mode_down.png b/cinelerra-5.1/plugins/theme_bright/data/mask_mode_down.png new file mode 100644 index 00000000..c5946a09 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_bright/data/mask_mode_down.png differ diff --git a/cinelerra-5.1/plugins/theme_bright/data/mask_mode_hi.png b/cinelerra-5.1/plugins/theme_bright/data/mask_mode_hi.png new file mode 100644 index 00000000..f3f30607 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_bright/data/mask_mode_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_bright/data/mask_mode_up.png b/cinelerra-5.1/plugins/theme_bright/data/mask_mode_up.png new file mode 100644 index 00000000..566432c7 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_bright/data/mask_mode_up.png differ diff --git a/cinelerra-5.1/plugins/theme_bright/data/reset.png b/cinelerra-5.1/plugins/theme_bright/data/reset.png new file mode 100644 index 00000000..bd714a16 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_bright/data/reset.png differ diff --git a/cinelerra-5.1/plugins/theme_bright/data/reset_dn.png b/cinelerra-5.1/plugins/theme_bright/data/reset_dn.png new file mode 100644 index 00000000..3362081b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_bright/data/reset_dn.png differ diff --git a/cinelerra-5.1/plugins/theme_bright/data/reset_hi.png b/cinelerra-5.1/plugins/theme_bright/data/reset_hi.png new file mode 100644 index 00000000..49bfefe9 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_bright/data/reset_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_bright/data/reset_up.png b/cinelerra-5.1/plugins/theme_bright/data/reset_up.png new file mode 100644 index 00000000..a9ced0f8 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_bright/data/reset_up.png differ diff --git a/cinelerra-5.1/plugins/theme_hulk/data/mask_mode_chkd.png b/cinelerra-5.1/plugins/theme_hulk/data/mask_mode_chkd.png new file mode 100644 index 00000000..f02f1ad4 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_hulk/data/mask_mode_chkd.png differ diff --git a/cinelerra-5.1/plugins/theme_hulk/data/mask_mode_chkdhi.png b/cinelerra-5.1/plugins/theme_hulk/data/mask_mode_chkdhi.png new file mode 100644 index 00000000..2c24ad8b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_hulk/data/mask_mode_chkdhi.png differ diff --git a/cinelerra-5.1/plugins/theme_hulk/data/mask_mode_down.png b/cinelerra-5.1/plugins/theme_hulk/data/mask_mode_down.png new file mode 100644 index 00000000..c5946a09 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_hulk/data/mask_mode_down.png differ diff --git a/cinelerra-5.1/plugins/theme_hulk/data/mask_mode_hi.png b/cinelerra-5.1/plugins/theme_hulk/data/mask_mode_hi.png new file mode 100644 index 00000000..f3f30607 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_hulk/data/mask_mode_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_hulk/data/mask_mode_up.png b/cinelerra-5.1/plugins/theme_hulk/data/mask_mode_up.png new file mode 100644 index 00000000..566432c7 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_hulk/data/mask_mode_up.png differ diff --git a/cinelerra-5.1/plugins/theme_hulk/data/reset.png b/cinelerra-5.1/plugins/theme_hulk/data/reset.png new file mode 100644 index 00000000..bd714a16 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_hulk/data/reset.png differ diff --git a/cinelerra-5.1/plugins/theme_hulk/data/reset_dn.png b/cinelerra-5.1/plugins/theme_hulk/data/reset_dn.png new file mode 100644 index 00000000..3362081b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_hulk/data/reset_dn.png differ diff --git a/cinelerra-5.1/plugins/theme_hulk/data/reset_hi.png b/cinelerra-5.1/plugins/theme_hulk/data/reset_hi.png new file mode 100644 index 00000000..49bfefe9 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_hulk/data/reset_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_hulk/data/reset_up.png b/cinelerra-5.1/plugins/theme_hulk/data/reset_up.png new file mode 100644 index 00000000..a9ced0f8 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_hulk/data/reset_up.png differ diff --git a/cinelerra-5.1/plugins/theme_hulk/hulktheme.C b/cinelerra-5.1/plugins/theme_hulk/hulktheme.C index cd479fcf..42bfe88e 100644 --- a/cinelerra-5.1/plugins/theme_hulk/hulktheme.C +++ b/cinelerra-5.1/plugins/theme_hulk/hulktheme.C @@ -276,6 +276,12 @@ void HULKTHEME::initialize() "new_bigbutton_dn.png", "new_ok_images"); + new_button("reset.png", + "reset_up.png", + "reset_dn.png", + "reset_hi.png", + "reset_button"); + resources->cancel_images = new_button("cancel.png", "filebox_bigbutton_up.png", "filebox_bigbutton_hi.png", @@ -637,6 +643,13 @@ void HULKTHEME::initialize() "proxy_s_down.png", "proxy_s_chkdhi.png"); + mask_mode_toggle = new_image_set(5, + "mask_mode_up.png", + "mask_mode_hi.png", + "mask_mode_chkd.png", + "mask_mode_down.png", + "mask_mode_chkdhi.png"); + shbtn_data = new_image_set(3, "shbtn_up.png", "shbtn_hi.png", diff --git a/cinelerra-5.1/plugins/theme_neophyte/data/mask_mode_chkd.png b/cinelerra-5.1/plugins/theme_neophyte/data/mask_mode_chkd.png new file mode 100644 index 00000000..f02f1ad4 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_neophyte/data/mask_mode_chkd.png differ diff --git a/cinelerra-5.1/plugins/theme_neophyte/data/mask_mode_chkdhi.png b/cinelerra-5.1/plugins/theme_neophyte/data/mask_mode_chkdhi.png new file mode 100644 index 00000000..2c24ad8b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_neophyte/data/mask_mode_chkdhi.png differ diff --git a/cinelerra-5.1/plugins/theme_neophyte/data/mask_mode_down.png b/cinelerra-5.1/plugins/theme_neophyte/data/mask_mode_down.png new file mode 100644 index 00000000..c5946a09 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_neophyte/data/mask_mode_down.png differ diff --git a/cinelerra-5.1/plugins/theme_neophyte/data/mask_mode_hi.png b/cinelerra-5.1/plugins/theme_neophyte/data/mask_mode_hi.png new file mode 100644 index 00000000..f3f30607 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_neophyte/data/mask_mode_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_neophyte/data/mask_mode_up.png b/cinelerra-5.1/plugins/theme_neophyte/data/mask_mode_up.png new file mode 100644 index 00000000..566432c7 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_neophyte/data/mask_mode_up.png differ diff --git a/cinelerra-5.1/plugins/theme_neophyte/data/reset.png b/cinelerra-5.1/plugins/theme_neophyte/data/reset.png new file mode 100644 index 00000000..bd714a16 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_neophyte/data/reset.png differ diff --git a/cinelerra-5.1/plugins/theme_neophyte/data/reset_dn.png b/cinelerra-5.1/plugins/theme_neophyte/data/reset_dn.png new file mode 100644 index 00000000..3362081b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_neophyte/data/reset_dn.png differ diff --git a/cinelerra-5.1/plugins/theme_neophyte/data/reset_hi.png b/cinelerra-5.1/plugins/theme_neophyte/data/reset_hi.png new file mode 100644 index 00000000..49bfefe9 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_neophyte/data/reset_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_neophyte/data/reset_up.png b/cinelerra-5.1/plugins/theme_neophyte/data/reset_up.png new file mode 100644 index 00000000..a9ced0f8 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_neophyte/data/reset_up.png differ diff --git a/cinelerra-5.1/plugins/theme_neophyte/neophyte.C b/cinelerra-5.1/plugins/theme_neophyte/neophyte.C index b23ddf59..de9d59c0 100644 --- a/cinelerra-5.1/plugins/theme_neophyte/neophyte.C +++ b/cinelerra-5.1/plugins/theme_neophyte/neophyte.C @@ -354,6 +354,12 @@ void NEOPHYTETHEME::initialize() "new_bigbutton_hi.png", "new_bigbutton_dn.png", "new_ok_images"); + new_button( + "reset.png", + "reset_up.png", + "reset_dn.png", + "reset_hi.png", + "reset_button"); resources->cancel_images = new_button( "cancel.png", "filebox_bigbutton_up.png", @@ -766,6 +772,12 @@ void NEOPHYTETHEME::initialize() "proxy_s_chkd.png", "proxy_s_down.png", "proxy_s_chkdhi.png"); + mask_mode_toggle = new_image_set(5, + "mask_mode_up.png", + "mask_mode_hi.png", + "mask_mode_chkd.png", + "mask_mode_down.png", + "mask_mode_chkdhi.png"); shbtn_data = new_image_set( 3, "shbtn_up.png", diff --git a/cinelerra-5.1/plugins/theme_pinklady/data/mask_mode_chkd.png b/cinelerra-5.1/plugins/theme_pinklady/data/mask_mode_chkd.png new file mode 100644 index 00000000..f02f1ad4 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_pinklady/data/mask_mode_chkd.png differ diff --git a/cinelerra-5.1/plugins/theme_pinklady/data/mask_mode_chkdhi.png b/cinelerra-5.1/plugins/theme_pinklady/data/mask_mode_chkdhi.png new file mode 100644 index 00000000..2c24ad8b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_pinklady/data/mask_mode_chkdhi.png differ diff --git a/cinelerra-5.1/plugins/theme_pinklady/data/mask_mode_down.png b/cinelerra-5.1/plugins/theme_pinklady/data/mask_mode_down.png new file mode 100644 index 00000000..c5946a09 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_pinklady/data/mask_mode_down.png differ diff --git a/cinelerra-5.1/plugins/theme_pinklady/data/mask_mode_hi.png b/cinelerra-5.1/plugins/theme_pinklady/data/mask_mode_hi.png new file mode 100644 index 00000000..f3f30607 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_pinklady/data/mask_mode_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_pinklady/data/mask_mode_up.png b/cinelerra-5.1/plugins/theme_pinklady/data/mask_mode_up.png new file mode 100644 index 00000000..566432c7 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_pinklady/data/mask_mode_up.png differ diff --git a/cinelerra-5.1/plugins/theme_pinklady/data/reset.png b/cinelerra-5.1/plugins/theme_pinklady/data/reset.png new file mode 100644 index 00000000..bd714a16 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_pinklady/data/reset.png differ diff --git a/cinelerra-5.1/plugins/theme_pinklady/data/reset_dn.png b/cinelerra-5.1/plugins/theme_pinklady/data/reset_dn.png new file mode 100644 index 00000000..3362081b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_pinklady/data/reset_dn.png differ diff --git a/cinelerra-5.1/plugins/theme_pinklady/data/reset_hi.png b/cinelerra-5.1/plugins/theme_pinklady/data/reset_hi.png new file mode 100644 index 00000000..49bfefe9 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_pinklady/data/reset_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_pinklady/data/reset_up.png b/cinelerra-5.1/plugins/theme_pinklady/data/reset_up.png new file mode 100644 index 00000000..a9ced0f8 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_pinklady/data/reset_up.png differ diff --git a/cinelerra-5.1/plugins/theme_pinklady/pinkladytheme.C b/cinelerra-5.1/plugins/theme_pinklady/pinkladytheme.C index bc4b0f0e..9a8c6322 100644 --- a/cinelerra-5.1/plugins/theme_pinklady/pinkladytheme.C +++ b/cinelerra-5.1/plugins/theme_pinklady/pinkladytheme.C @@ -261,6 +261,12 @@ void PINKLADY::initialize() "new_bigbutton_dn.png", "new_ok_images"); + new_button("reset.png", + "reset_up.png", + "reset_dn.png", + "reset_hi.png", + "reset_button"); + resources->cancel_images = new_button("cancel.png", "filebox_bigbutton_up.png", "filebox_bigbutton_hi.png", @@ -622,6 +628,13 @@ void PINKLADY::initialize() "proxy_s_down.png", "proxy_s_chkdhi.png"); + mask_mode_toggle = new_image_set(5, + "mask_mode_up.png", + "mask_mode_hi.png", + "mask_mode_chkd.png", + "mask_mode_down.png", + "mask_mode_chkdhi.png"); + shbtn_data = new_image_set(3, "shbtn_up.png", "shbtn_hi.png", diff --git a/cinelerra-5.1/plugins/theme_suv/data/mask_mode_chkd.png b/cinelerra-5.1/plugins/theme_suv/data/mask_mode_chkd.png new file mode 100644 index 00000000..f02f1ad4 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_suv/data/mask_mode_chkd.png differ diff --git a/cinelerra-5.1/plugins/theme_suv/data/mask_mode_chkdhi.png b/cinelerra-5.1/plugins/theme_suv/data/mask_mode_chkdhi.png new file mode 100644 index 00000000..2c24ad8b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_suv/data/mask_mode_chkdhi.png differ diff --git a/cinelerra-5.1/plugins/theme_suv/data/mask_mode_down.png b/cinelerra-5.1/plugins/theme_suv/data/mask_mode_down.png new file mode 100644 index 00000000..c5946a09 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_suv/data/mask_mode_down.png differ diff --git a/cinelerra-5.1/plugins/theme_suv/data/mask_mode_hi.png b/cinelerra-5.1/plugins/theme_suv/data/mask_mode_hi.png new file mode 100644 index 00000000..f3f30607 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_suv/data/mask_mode_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_suv/data/mask_mode_up.png b/cinelerra-5.1/plugins/theme_suv/data/mask_mode_up.png new file mode 100644 index 00000000..566432c7 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_suv/data/mask_mode_up.png differ diff --git a/cinelerra-5.1/plugins/theme_suv/data/reset.png b/cinelerra-5.1/plugins/theme_suv/data/reset.png new file mode 100644 index 00000000..bd714a16 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_suv/data/reset.png differ diff --git a/cinelerra-5.1/plugins/theme_suv/data/reset.svg b/cinelerra-5.1/plugins/theme_suv/data/reset.svg new file mode 100644 index 00000000..b3778c7b --- /dev/null +++ b/cinelerra-5.1/plugins/theme_suv/data/reset.svg @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/cinelerra-5.1/plugins/theme_suv/data/reset_dn.png b/cinelerra-5.1/plugins/theme_suv/data/reset_dn.png new file mode 100644 index 00000000..3362081b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_suv/data/reset_dn.png differ diff --git a/cinelerra-5.1/plugins/theme_suv/data/reset_hi.png b/cinelerra-5.1/plugins/theme_suv/data/reset_hi.png new file mode 100644 index 00000000..49bfefe9 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_suv/data/reset_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_suv/data/reset_up.png b/cinelerra-5.1/plugins/theme_suv/data/reset_up.png new file mode 100644 index 00000000..a9ced0f8 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_suv/data/reset_up.png differ diff --git a/cinelerra-5.1/plugins/theme_suv/suv.C b/cinelerra-5.1/plugins/theme_suv/suv.C index c2a072a1..c1aacc25 100644 --- a/cinelerra-5.1/plugins/theme_suv/suv.C +++ b/cinelerra-5.1/plugins/theme_suv/suv.C @@ -272,6 +272,12 @@ void SUV::initialize() "new_bigbutton_dn.png", "new_ok_images"); + new_button("reset.png", + "reset_up.png", + "reset_dn.png", + "reset_hi.png", + "reset_button"); + resources->cancel_images = new_button("cancel.png", "filebox_bigbutton_up.png", "filebox_bigbutton_hi.png", @@ -623,6 +629,13 @@ void SUV::initialize() "proxy_s_down.png", "proxy_s_chkdhi.png"); + mask_mode_toggle = new_image_set(5, + "mask_mode_up.png", + "mask_mode_hi.png", + "mask_mode_chkd.png", + "mask_mode_down.png", + "mask_mode_chkdhi.png"); + shbtn_data = new_image_set(3, "shbtn_up.png", "shbtn_hi.png", diff --git a/cinelerra-5.1/plugins/theme_unflat/data/mask_mode_chkd.png b/cinelerra-5.1/plugins/theme_unflat/data/mask_mode_chkd.png new file mode 100644 index 00000000..f02f1ad4 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_unflat/data/mask_mode_chkd.png differ diff --git a/cinelerra-5.1/plugins/theme_unflat/data/mask_mode_chkdhi.png b/cinelerra-5.1/plugins/theme_unflat/data/mask_mode_chkdhi.png new file mode 100644 index 00000000..2c24ad8b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_unflat/data/mask_mode_chkdhi.png differ diff --git a/cinelerra-5.1/plugins/theme_unflat/data/mask_mode_down.png b/cinelerra-5.1/plugins/theme_unflat/data/mask_mode_down.png new file mode 100644 index 00000000..c5946a09 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_unflat/data/mask_mode_down.png differ diff --git a/cinelerra-5.1/plugins/theme_unflat/data/mask_mode_hi.png b/cinelerra-5.1/plugins/theme_unflat/data/mask_mode_hi.png new file mode 100644 index 00000000..f3f30607 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_unflat/data/mask_mode_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_unflat/data/mask_mode_up.png b/cinelerra-5.1/plugins/theme_unflat/data/mask_mode_up.png new file mode 100644 index 00000000..566432c7 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_unflat/data/mask_mode_up.png differ diff --git a/cinelerra-5.1/plugins/theme_unflat/data/reset.png b/cinelerra-5.1/plugins/theme_unflat/data/reset.png new file mode 100644 index 00000000..bd714a16 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_unflat/data/reset.png differ diff --git a/cinelerra-5.1/plugins/theme_unflat/data/reset_dn.png b/cinelerra-5.1/plugins/theme_unflat/data/reset_dn.png new file mode 100644 index 00000000..3362081b Binary files /dev/null and b/cinelerra-5.1/plugins/theme_unflat/data/reset_dn.png differ diff --git a/cinelerra-5.1/plugins/theme_unflat/data/reset_hi.png b/cinelerra-5.1/plugins/theme_unflat/data/reset_hi.png new file mode 100644 index 00000000..49bfefe9 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_unflat/data/reset_hi.png differ diff --git a/cinelerra-5.1/plugins/theme_unflat/data/reset_up.png b/cinelerra-5.1/plugins/theme_unflat/data/reset_up.png new file mode 100644 index 00000000..a9ced0f8 Binary files /dev/null and b/cinelerra-5.1/plugins/theme_unflat/data/reset_up.png differ diff --git a/cinelerra-5.1/plugins/theme_unflat/unflattheme.C b/cinelerra-5.1/plugins/theme_unflat/unflattheme.C index 231d33b2..be1da538 100644 --- a/cinelerra-5.1/plugins/theme_unflat/unflattheme.C +++ b/cinelerra-5.1/plugins/theme_unflat/unflattheme.C @@ -270,6 +270,12 @@ void UNFLATTHEME::initialize() "new_bigbutton_dn.png", "new_ok_images"); + new_button("reset.png", + "reset_up.png", + "reset_dn.png", + "reset_hi.png", + "reset_button"); + resources->cancel_images = new_button("cancel.png", "filebox_bigbutton_up.png", "filebox_bigbutton_hi.png", @@ -631,6 +637,13 @@ void UNFLATTHEME::initialize() "proxy_s_down.png", "proxy_s_chkdhi.png"); + mask_mode_toggle = new_image_set(5, + "mask_mode_up.png", + "mask_mode_hi.png", + "mask_mode_chkd.png", + "mask_mode_down.png", + "mask_mode_chkdhi.png"); + shbtn_data = new_image_set(3, "shbtn_up.png", "shbtn_hi.png", diff --git a/cinelerra-5.1/plugins/unsharp/unsharpwindow.C b/cinelerra-5.1/plugins/unsharp/unsharpwindow.C index 270131dd..18a0403d 100644 --- a/cinelerra-5.1/plugins/unsharp/unsharpwindow.C +++ b/cinelerra-5.1/plugins/unsharp/unsharpwindow.C @@ -21,18 +21,11 @@ #include "bcdisplayinfo.h" #include "language.h" +#include "theme.h" #include "unsharp.h" #include "unsharpwindow.h" - - - - - - - - UnsharpWindow::UnsharpWindow(UnsharpMain *plugin) : PluginClientWindow(plugin, 285, 170, 285, 170, 0) { @@ -174,7 +167,7 @@ int UnsharpDefaultSettings::handle_event() } UnsharpSliderClr::UnsharpSliderClr(UnsharpMain *plugin, UnsharpWindow *window, int x, int y, int w, int clear) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button")) { this->plugin = plugin; this->window = window; diff --git a/cinelerra-5.1/plugins/unsharp/unsharpwindow.h b/cinelerra-5.1/plugins/unsharp/unsharpwindow.h index b04f6239..3b4ef7ca 100644 --- a/cinelerra-5.1/plugins/unsharp/unsharpwindow.h +++ b/cinelerra-5.1/plugins/unsharp/unsharpwindow.h @@ -77,7 +77,7 @@ public: UnsharpWindow *window; }; -class UnsharpSliderClr : public BC_GenericButton +class UnsharpSliderClr : public BC_Button { public: UnsharpSliderClr(UnsharpMain *plugin, UnsharpWindow *window, int x, int y, int w, int clear); diff --git a/cinelerra-5.1/plugins/wave/wave.C b/cinelerra-5.1/plugins/wave/wave.C index 8a80c687..c5f0c3f3 100644 --- a/cinelerra-5.1/plugins/wave/wave.C +++ b/cinelerra-5.1/plugins/wave/wave.C @@ -246,7 +246,7 @@ int WaveDefaultSettings::handle_event() } WaveSliderClr::WaveSliderClr(WaveEffect *plugin, WaveWindow *gui, int x, int y, int w, int clear) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button")) { this->plugin = plugin; this->gui = gui; diff --git a/cinelerra-5.1/plugins/wave/wave.h b/cinelerra-5.1/plugins/wave/wave.h index 2c206a2c..e8ba8d0a 100644 --- a/cinelerra-5.1/plugins/wave/wave.h +++ b/cinelerra-5.1/plugins/wave/wave.h @@ -32,6 +32,7 @@ #include "language.h" #include "loadbalance.h" #include "pluginvclient.h" +#include "theme.h" #include "vframe.h" #include @@ -147,7 +148,7 @@ public: WaveWindow *gui; }; -class WaveSliderClr : public BC_GenericButton +class WaveSliderClr : public BC_Button { public: WaveSliderClr(WaveEffect *plugin, WaveWindow *gui, int x, int y, int w, int clear); diff --git a/cinelerra-5.1/plugins/whirl/whirl.C b/cinelerra-5.1/plugins/whirl/whirl.C index ff8eb44c..ed84243d 100644 --- a/cinelerra-5.1/plugins/whirl/whirl.C +++ b/cinelerra-5.1/plugins/whirl/whirl.C @@ -28,6 +28,7 @@ #include "language.h" #include "loadbalance.h" #include "pluginvclient.h" +#include "theme.h" #include "vframe.h" @@ -121,7 +122,7 @@ public: WhirlWindow *window; }; -class WhirlSliderClr : public BC_GenericButton +class WhirlSliderClr : public BC_Button { public: WhirlSliderClr(WhirlEffect *plugin, WhirlWindow *window, int x, int y, int w, int clear); @@ -459,7 +460,7 @@ int WhirlDefaultSettings::handle_event() } WhirlSliderClr::WhirlSliderClr(WhirlEffect *plugin, WhirlWindow *window, int x, int y, int w, int clear) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button")) { this->plugin = plugin; this->window = window; diff --git a/cinelerra-5.1/plugins/yuv/yuv.C b/cinelerra-5.1/plugins/yuv/yuv.C index 845ca48a..868137f8 100644 --- a/cinelerra-5.1/plugins/yuv/yuv.C +++ b/cinelerra-5.1/plugins/yuv/yuv.C @@ -27,6 +27,7 @@ #include "language.h" #include "bccolors.h" #include "pluginvclient.h" +#include "theme.h" #include "vframe.h" #include @@ -79,7 +80,7 @@ public: YUVWindow *window; }; -class YUVSliderClr : public BC_GenericButton +class YUVSliderClr : public BC_Button { public: YUVSliderClr(YUVEffect *plugin, YUVWindow *window, int x, int y, int w, int clear); @@ -226,7 +227,7 @@ int YUVReset::handle_event() YUVSliderClr::YUVSliderClr(YUVEffect *plugin, YUVWindow *window, int x, int y, int w, int clear) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button")) { this->plugin = plugin; this->window = window; diff --git a/cinelerra-5.1/plugins/yuvshift/yuvshift.C b/cinelerra-5.1/plugins/yuvshift/yuvshift.C index 6f5aad0b..0f0b85b6 100644 --- a/cinelerra-5.1/plugins/yuvshift/yuvshift.C +++ b/cinelerra-5.1/plugins/yuvshift/yuvshift.C @@ -130,7 +130,7 @@ int YUVShiftReset::handle_event() YUVShiftSliderClr::YUVShiftSliderClr(YUVShiftEffect *plugin, YUVShiftWindow *window, int x, int y, int w, int clear) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button")) { this->plugin = plugin; this->window = window; diff --git a/cinelerra-5.1/plugins/yuvshift/yuvshift.h b/cinelerra-5.1/plugins/yuvshift/yuvshift.h index 1c2a2c10..b6dfae8b 100644 --- a/cinelerra-5.1/plugins/yuvshift/yuvshift.h +++ b/cinelerra-5.1/plugins/yuvshift/yuvshift.h @@ -30,6 +30,7 @@ #include "language.h" #include "bccolors.h" #include "pluginvclient.h" +#include "theme.h" #include "vframe.h" #include @@ -85,7 +86,7 @@ public: YUVShiftWindow *window; }; -class YUVShiftSliderClr : public BC_GenericButton +class YUVShiftSliderClr : public BC_Button { public: YUVShiftSliderClr(YUVShiftEffect *plugin, YUVShiftWindow *window, int x, int y, int w, int clear); diff --git a/cinelerra-5.1/plugins/zoomblur/zoomblur.C b/cinelerra-5.1/plugins/zoomblur/zoomblur.C index 9637d79e..0d40b7ca 100644 --- a/cinelerra-5.1/plugins/zoomblur/zoomblur.C +++ b/cinelerra-5.1/plugins/zoomblur/zoomblur.C @@ -300,7 +300,7 @@ int ZoomBlurDefaultSettings::handle_event() ZoomBlurSliderClr::ZoomBlurSliderClr(ZoomBlurMain *plugin, ZoomBlurWindow *window, int x, int y, int w, int clear) - : BC_GenericButton(x, y, w, _("⌂")) + : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button")) { this->plugin = plugin; this->window = window; diff --git a/cinelerra-5.1/plugins/zoomblur/zoomblur.h b/cinelerra-5.1/plugins/zoomblur/zoomblur.h index a39cde3e..cd78677f 100644 --- a/cinelerra-5.1/plugins/zoomblur/zoomblur.h +++ b/cinelerra-5.1/plugins/zoomblur/zoomblur.h @@ -32,6 +32,7 @@ #include "language.h" #include "loadbalance.h" #include "pluginvclient.h" +#include "theme.h" #include "vframe.h" #define RESET_DEFAULT_SETTINGS 10 @@ -141,7 +142,7 @@ public: }; -class ZoomBlurSliderClr : public BC_GenericButton +class ZoomBlurSliderClr : public BC_Button { public: ZoomBlurSliderClr(ZoomBlurMain *plugin, ZoomBlurWindow *window, int x, int y, int w, int clear);