X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Fsketcher%2Fsketcherwindow.C;h=796a84c4312a0920cde427caa84b0d8976d8aabf;hb=98d1bfa28f082b49eddf01f583e0af16d3a28ba4;hp=5a38b4b81438a82c2d6b78084055da0e9972e9b9;hpb=b8edca23c6b2a5109676001cd04759507e354364;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/plugins/sketcher/sketcherwindow.C b/cinelerra-5.1/plugins/sketcher/sketcherwindow.C index 5a38b4b8..796a84c4 100644 --- a/cinelerra-5.1/plugins/sketcher/sketcherwindow.C +++ b/cinelerra-5.1/plugins/sketcher/sketcherwindow.C @@ -68,7 +68,7 @@ int SketcherCurvePenItem::handle_event() popup->update(pen); SketcherWindow *gui = popup->gui; SketcherConfig &config = gui->plugin->config; - int ci = config.cv_selected; + int ci = gui->plugin->cv_selected; if( ci >= 0 && ci < config.curves.size() ) { SketcherCurve *cv = config.curves[ci]; cv->pen = pen; @@ -112,7 +112,7 @@ void SketcherCurveColor::handle_done_event(int result) { if( result ) color = orig_color | (~orig_alpha<<24); SketcherConfig &config = gui->plugin->config; - int ci = config.cv_selected; + int ci = gui->plugin->cv_selected; if( ci >= 0 && ci < config.curves.size() ) { SketcherCurve *cv = config.curves[ci]; cv->color = color; @@ -129,7 +129,7 @@ int SketcherCurveColor::handle_new_color(int color, int alpha) gui->lock_window("SketcherCurveColor::update_gui"); update_gui(color); SketcherConfig &config = gui->plugin->config; - int ci = config.cv_selected; + int ci = gui->plugin->cv_selected; if( ci >= 0 ) { SketcherCurve *cv = config.curves[ci]; cv->color = color; @@ -167,11 +167,11 @@ int SketcherPointX::handle_event() { if( !SketcherCoord::handle_event() ) return 0; SketcherConfig &config = gui->plugin->config; - int ci = config.cv_selected; + int ci = gui->plugin->cv_selected; if( ci >= 0 && ci < config.curves.size() ) { SketcherCurve *cv = config.curves[ci]; SketcherPointList *point_list = gui->point_list; - int pi = config.pt_selected; + int pi = gui->plugin->pt_selected; SketcherPoints &points = cv->points; if( pi >= 0 && pi < points.size() ) { coord v = atof(get_text()); @@ -187,11 +187,11 @@ int SketcherPointY::handle_event() { if( !SketcherCoord::handle_event() ) return 0; SketcherConfig &config = gui->plugin->config; - int ci = config.cv_selected; + int ci = gui->plugin->cv_selected; if( ci >= 0 && ci < config.curves.size() ) { SketcherCurve *cv = config.curves[ci]; SketcherPointList *point_list = gui->point_list; - int pi = config.pt_selected; + int pi = gui->plugin->pt_selected; SketcherPoints &points = cv->points; if( pi >= 0 && pi < points.size() ) { coord v = atof(get_text()); @@ -208,11 +208,11 @@ int SketcherPointId::handle_event() { if( !SketcherNum::handle_event() ) return 0; SketcherConfig &config = gui->plugin->config; - int ci = config.cv_selected; + int ci = gui->plugin->cv_selected; if( ci >= 0 && ci < config.curves.size() ) { SketcherCurve *cv = config.curves[ci]; SketcherPointList *point_list = gui->point_list; - int pi = config.pt_selected; + int pi = gui->plugin->pt_selected; SketcherPoints &points = cv->points; if( pi >= 0 && pi < points.size() ) { int id = atoi(get_text()); @@ -238,7 +238,7 @@ int SketcherCurveWidth::handle_event() { if( !SketcherNum::handle_event() ) return 0; SketcherConfig &config = gui->plugin->config; - int ci = config.cv_selected; + int ci = gui->plugin->cv_selected; if( ci >= 0 && ci < config.curves.size() ) { SketcherCurve *cv = config.curves[ci]; int v = atoi(get_text()); @@ -278,6 +278,7 @@ SketcherAliasing::SketcherAliasing(SketcherWindow *gui, Sketcher *plugin, { this->gui = gui; this->plugin = plugin; + set_tooltip(_("Anti-Aliasing")); } SketcherAliasing::~SketcherAliasing() { @@ -293,7 +294,7 @@ void SketcherAliasing::create_objects() const char *SketcherAliasing::alias_to_text(int alias) { if( alias < 0 ) return _("Off"); - if( alias > 0 ) return _("Dbl"); + if( alias > 0 ) return _("Double"); return _("On"); } @@ -343,7 +344,7 @@ void SketcherWindow::create_objects() int x = xS(10), y = yS(10), dy = 0, x1, y1; int margin = plugin->get_theme()->widget_border; BC_Title *title; - int ci = plugin->config.cv_selected; + int ci = plugin->cv_selected; if( ci < 0 || ci >= plugin->config.curves.size() ) ci = plugin->new_curve(); SketcherCurve *cv = plugin->config.curves[ci]; @@ -409,15 +410,15 @@ void SketcherWindow::create_objects() add_subwindow(bar); dy = bmax(dy,bar->get_h()); y += dy + yS(2)*margin; - int pi = plugin->config.pt_selected; + int pi = plugin->pt_selected; SketcherPoint *pt = pi >= 0 && pi < cv->points.size() ? cv->points[pi] : 0; reset_points = new SketcherResetPoints(this, plugin, x1=x, y+yS(3)); add_subwindow(reset_points); dy = bmax(dy,reset_points->get_h()); x1 += reset_points->get_w() + xS(2)*margin; - if( plugin->config.drag ) { + if( plugin->drag ) { if( !grab(plugin->server->mwindow->cwindow->gui) ) { eprintf("drag enabled, but compositor already grabbed\n"); - plugin->config.drag = 0; + plugin->drag = 0; } } drag = new SketcherDrag(this, x1, y); @@ -492,7 +493,7 @@ void SketcherWindow::create_objects() "drag point\n" "drag all curves\n" "new fill point"))); dy = bmax(dy, notes1->get_h()); - add_subwindow(notes2 = new BC_Title(x+xS(220), y, + add_subwindow(notes2 = new BC_Title(x+xS(280), y, _(" RMB\n" "new arc point\n" "select curve\n" @@ -502,9 +503,9 @@ void SketcherWindow::create_objects() y += dy + margin + yS(10); add_subwindow(notes3 = new BC_Title(x, y, - "Wheel: rotate, centered on cursor\n" + _("Wheel: rotate, centered on cursor\n" "Wheel: shift: scale, centered on cursor\n" - "Key DEL= delete point, +Shift= delete curve\n")); + "Key DEL= delete point, +Shift= delete curve\n"))); resize_window(get_w(), help_y); show_window(1); @@ -612,7 +613,7 @@ int SketcherWindow::do_grab_event(XEvent *event) int SketcherWindow::grab_button_press(XEvent *event) { SketcherConfig &config = plugin->config; - int ci = config.cv_selected; + int ci = plugin->cv_selected; if( ci < 0 || ci >= plugin->config.curves.size() ) return 0; MWindow *mwindow = plugin->server->mwindow; @@ -622,7 +623,7 @@ int SketcherWindow::grab_button_press(XEvent *event) SketcherCurves &curves = config.curves; SketcherCurve *cv = curves[ci]; SketcherPoints &points = cv->points; - int pi = config.pt_selected; + int pi = plugin->pt_selected; float s = 1.001; // min scale float th = 0.1 * M_PI/180.f; // min theta .1 deg per wheel_btn @@ -723,13 +724,13 @@ int SketcherWindow::grab_cursor_motion() return 0; pending_motion = 0; SketcherConfig &config = plugin->config; - int ci = config.cv_selected; + int ci = plugin->cv_selected; if( ci < 0 || ci >= plugin->config.curves.size() ) return 0; SketcherCurves &curves = config.curves; SketcherCurve *cv = curves[ci]; SketcherPoints &points = cv->points; - int pi = config.pt_selected; + int pi = plugin->pt_selected; if( (state & ShiftMask) ) { // string of points if( (state & (Button1Mask|Button3Mask)) ) { @@ -873,7 +874,7 @@ void SketcherCurveList::set_selected(int k) gui->curve_color->update_gui(cv->color); ci = k; } - plugin->config.cv_selected = ci; + plugin->cv_selected = ci; update_list(ci); } @@ -931,7 +932,7 @@ int SketcherNewCurve::handle_event() int pen = gui->curve_pen->pen; int color = gui->curve_color->color; int width = gui->curve_width->width; - int ci = plugin->config.cv_selected; + int ci = plugin->cv_selected; if( ci >= 0 && ci < plugin->config.curves.size() ) { SketcherCurve *cv = plugin->config.curves[ci]; pen = cv->pen; width = cv->width; color = cv->color; @@ -955,7 +956,7 @@ SketcherDelCurve::~SketcherDelCurve() int SketcherDelCurve::handle_event() { SketcherConfig &config = plugin->config; - int ci = config.cv_selected; + int ci = plugin->cv_selected; SketcherCurves &curves = config.curves; if( ci >= 0 && ci < curves.size() ) { curves.remove_object_number(ci--); @@ -981,7 +982,7 @@ SketcherCurveUp::~SketcherCurveUp() int SketcherCurveUp::handle_event() { SketcherConfig &config = gui->plugin->config; - int ci = config.cv_selected; + int ci = gui->plugin->cv_selected; SketcherCurves &curves = config.curves; if( ci > 0 && ci < curves.size() ) { SketcherCurve *&cv0 = curves[ci]; @@ -1005,7 +1006,7 @@ SketcherCurveDn::~SketcherCurveDn() int SketcherCurveDn::handle_event() { SketcherConfig &config = gui->plugin->config; - int ci = config.cv_selected; + int ci = gui->plugin->cv_selected; SketcherCurves &curves = config.curves; if( ci >= 0 && ci < curves.size()-1 ) { SketcherCurve *&cv0 = curves[ci]; @@ -1030,12 +1031,11 @@ int SketcherPointTypeItem::handle_event() SketcherWindow *gui = popup->gui; SketcherConfig &config = gui->plugin->config; SketcherCurves &curves = config.curves; - int ci = config.cv_selected; + int ci = gui->plugin->cv_selected; if( ci < 0 || ci >= curves.size() ) return 1; SketcherCurve *cv = curves[ci]; SketcherPoints &points = cv->points; - int pi = config.pt_selected; ArrayList selected; for( int v,i=0; (v=gui->point_list->get_selection_number(0, i))>=0; ++i ) @@ -1049,6 +1049,7 @@ int SketcherPointTypeItem::handle_event() gui->point_list->set_point(k, PT_TY, _(pt_type[arc])); } + int pi = gui->plugin->pt_selected; gui->point_list->update_list(pi); gui->send_configure_change(); return 1; @@ -1142,7 +1143,7 @@ void SketcherPointList::set_point(int i, int c, const char *cp) void SketcherPointList::set_selected(int k) { SketcherPoint *pt = 0; - int ci = plugin->config.cv_selected, pi = -1; + int ci = plugin->cv_selected, pi = -1; if( ci >= 0 && ci < plugin->config.curves.size() ) { SketcherCurve *cv = plugin->config.curves[ci]; pt = k >= 0 && k < cv->points.size() ? cv->points[pi=k] : 0; @@ -1151,7 +1152,7 @@ void SketcherPointList::set_selected(int k) gui->point_x->update(pt ? pt->x : 0.f); gui->point_y->update(pt ? pt->y : 0.f); gui->point_id->update(pt ? pt->id : 0); - plugin->config.pt_selected = pi; + plugin->pt_selected = pi; update_list(pi); } void SketcherPointList::update_list(int k) @@ -1164,7 +1165,7 @@ void SketcherPointList::update_list(int k) void SketcherPointList::update(int k) { clear(); - int ci = plugin->config.cv_selected, sz = 0; + int ci = plugin->cv_selected, sz = 0; if( ci >= 0 && ci < plugin->config.curves.size() ) { SketcherCurve *cv = plugin->config.curves[ci]; SketcherPoints &points = cv->points; @@ -1184,19 +1185,19 @@ void SketcherPointList::update(int k) void SketcherWindow::update_gui() { SketcherConfig &config = plugin->config; - int ci = config.cv_selected; - int pi = config.pt_selected; - curve_list->update(ci); - point_list->update(pi); + curve_list->update(plugin->cv_selected); + point_list->update(plugin->pt_selected); + int ci = plugin->cv_selected; SketcherCurve *cv = ci >= 0 ? config.curves[ci] : 0; curve_width->update(cv ? cv->width : 1); curve_pen->update(cv ? cv->pen : PEN_SQUARE); curve_color->set_color(cv ? cv->color : CV_COLOR); - SketcherPoint *pt = pi >= 0 ? cv->points[pi] : 0; + int pi = plugin->pt_selected; + SketcherPoint *pt = pi >= 0 && pipoints.size() ? cv->points[pi] : 0; point_x->update(pt ? pt->x : 0); point_y->update(pt ? pt->y : 0); point_id->update(pt ? pt->id : 0); - drag->update(plugin->config.drag); + drag->update(plugin->drag); } @@ -1212,14 +1213,16 @@ SketcherPointUp::~SketcherPointUp() int SketcherPointUp::handle_event() { SketcherConfig &config = gui->plugin->config; - int ci = config.cv_selected; + int ci = gui->plugin->cv_selected; if( ci < 0 || ci >= config.curves.size() ) return 1; SketcherCurve *cv = config.curves[ci]; SketcherPoints &points = cv->points; if( points.size() < 2 ) return 1; - int pi = config.pt_selected; + int pi = gui->plugin->pt_selected; + if( pi < 0 || pi >= points.size() ) + return 1; ArrayList selected; for( int v,i=0; (v=gui->point_list->get_selection_number(0, i))>=0; ++i ) @@ -1250,7 +1253,7 @@ SketcherPointDn::~SketcherPointDn() int SketcherPointDn::handle_event() { SketcherConfig &config = gui->plugin->config; - int ci = config.cv_selected; + int ci = gui->plugin->cv_selected; if( ci < 0 || ci >= config.curves.size() ) return 1; SketcherCurve *cv = config.curves[ci]; @@ -1258,7 +1261,9 @@ int SketcherPointDn::handle_event() int sz1 = points.size()-1; if( sz1 < 1 ) return 1; - int pi = config.pt_selected; + int pi = gui->plugin->pt_selected; + if( pi < 0 || pi >= points.size() ) + return 1; ArrayList selected; for( int v,i=0; (v=gui->point_list->get_selection_number(0, i))>=0; ++i ) @@ -1278,7 +1283,7 @@ int SketcherPointDn::handle_event() } SketcherDrag::SketcherDrag(SketcherWindow *gui, int x, int y) - : BC_CheckBox(x, y, gui->plugin->config.drag, _("Drag")) + : BC_CheckBox(x, y, gui->plugin->drag, (C_("Drag"))) { this->gui = gui; } @@ -1294,10 +1299,20 @@ int SketcherDrag::handle_event() } else gui->ungrab(cwindow_gui); - gui->plugin->config.drag = value; + gui->plugin->drag = value; gui->send_configure_change(); return 1; } +int SketcherWindow::handle_ungrab() +{ + CWindowGUI *cwindow_gui = plugin->server->mwindow->cwindow->gui; + int ret = ungrab(cwindow_gui); + if( ret ) { + drag->update(0); + plugin->drag = 0; + } + return ret; +} SketcherNewPoint::SketcherNewPoint(SketcherWindow *gui, Sketcher *plugin, int x, int y) : BC_GenericButton(x, y, xS(96), _("New")) @@ -1310,9 +1325,18 @@ SketcherNewPoint::~SketcherNewPoint() } int SketcherNewPoint::handle_event() { - int pi = plugin->config.pt_selected; + SketcherConfig &config = gui->plugin->config; + SketcherCurves &curves = config.curves; + int ci = gui->plugin->cv_selected; + if( ci < 0 || ci >= curves.size() ) + return -1; + SketcherCurve *cv = curves[ci]; + SketcherPoints &points = cv->points; + int pi = gui->plugin->pt_selected; + if( pi < 0 || pi >= points.size() ) + return -1; int arc = gui->point_type->type; - int k = plugin->new_point(pi+1, arc); + int k = plugin->new_point(pi<0 ? 0 : pi+1, arc); gui->point_list->update(k); gui->send_configure_change(); return 1; @@ -1331,12 +1355,14 @@ int SketcherDelPoint::handle_event() { SketcherConfig &config = gui->plugin->config; SketcherCurves &curves = config.curves; - int ci = config.cv_selected; + int ci = gui->plugin->cv_selected; if( ci < 0 || ci >= curves.size() ) return 1; SketcherCurve *cv = curves[ci]; SketcherPoints &points = cv->points; - int pi = config.pt_selected; + int pi = gui->plugin->pt_selected; + if( pi < 0 || pi >= points.size() ) + return 1; ArrayList selected; for( int v,i=0; (v=gui->point_list->get_selection_number(0, i))>=0; ++i ) @@ -1385,7 +1411,7 @@ SketcherResetPoints::~SketcherResetPoints() int SketcherResetPoints::handle_event() { SketcherConfig &config = gui->plugin->config; - int ci = config.cv_selected; + int ci = gui->plugin->cv_selected; if( ci >= 0 && ci < config.curves.size() ) { SketcherCurve *cv = config.curves[ci]; cv->points.remove_all_objects();