static void fix_movedcompoundpoint(int x, int y) { float scalex, scaley; canvas_ref_proc = canvas_locmove_proc = null_proc; elastic_box(fix_x, fix_y, cur_x, cur_y); /* erase last lengths if appres.showlengths is true */ erase_lengths(); adjust_box_pos(x, y, from_x, from_y, &cur_x, &cur_y); /* make a copy of the original and save as unchanged object */ old_c = copy_compound(cur_c); clean_up(); old_c->next = cur_c; set_latestcompound(old_c); set_action_object(F_EDIT, O_COMPOUND); scalex = ((float) (cur_x - fix_x)) / (from_x - fix_x); scaley = ((float) (cur_y - fix_y)) / (from_y - fix_y); /* scale the compound */ scale_compound(cur_c, scalex, scaley, fix_x, fix_y); /* redraw anything under the old compound */ redisplay_compound(old_c); /* and the new compound */ redisplay_compound(cur_c); /* turn back on all relevant markers */ update_markers(new_objmask); set_lastposition(from_x, from_y); set_newposition(cur_x, cur_y); set_modifiedflag(); wrapup_movepoint(); }
static void place_lib_object(int x, int y, unsigned int shift) { F_compound *this_c; canvas_leftbut_proc = null_proc; canvas_middlebut_proc = null_proc; canvas_rightbut_proc = null_proc; canvas_locmove_proc = null_proc; canvas_ref_proc = null_proc; put_draw(ERASE); clean_up(); if (draw_box) translate_compound(new_c,cur_x,cur_y); /* remove it from the depths because it will be added when it is put in the main list */ remove_compound_depth(new_c); add_compound(new_c); set_modifiedflag(); redisplay_compound(new_c); if (shift) { /* temporarily turn off library place mode so we can edit the object just placed */ canvas_kbd_proc = null_proc; clear_mousefun(); set_mousefun("","","", "", "", ""); turn_off_current(); set_cursor(arrow_cursor); edit_remember_lib_mode = True; this_c = new_c; edit_item(this_c, O_COMPOUND, 0, 0); } else { put_selected(); } }
static void init_move(F_line *p, int type, int x, int y, int px, int py) { /* turn off all markers */ update_markers(0); switch (type) { case O_COMPOUND: set_cursor(wait_cursor); cur_c = (F_compound *) p; list_delete_compound(&objects.compounds, cur_c); redisplay_compound(cur_c); set_cursor(null_cursor); init_compounddragging(cur_c, px, py); break; case O_POLYLINE: set_cursor(wait_cursor); cur_l = (F_line *) p; list_delete_line(&objects.lines, cur_l); redisplay_line(cur_l); set_cursor(null_cursor); init_linedragging(cur_l, px, py); break; case O_TXT: set_cursor(wait_cursor); cur_t = (F_text *) p; list_delete_text(&objects.texts, cur_t); redisplay_text(cur_t); set_cursor(null_cursor); init_textdragging(cur_t, x, y); break; case O_ELLIPSE: set_cursor(wait_cursor); cur_e = (F_ellipse *) p; list_delete_ellipse(&objects.ellipses, cur_e); redisplay_ellipse(cur_e); set_cursor(null_cursor); init_ellipsedragging(cur_e, px, py); break; case O_ARC: set_cursor(wait_cursor); cur_a = (F_arc *) p; list_delete_arc(&objects.arcs, cur_a); redisplay_arc(cur_a); set_cursor(null_cursor); init_arcdragging(cur_a, px, py); break; case O_SPLINE: set_cursor(wait_cursor); cur_s = (F_spline *) p; list_delete_spline(&objects.splines, cur_s); redisplay_spline(cur_s); set_cursor(null_cursor); init_splinedragging(cur_s, px, py); break; default: return; } }
static void init_flipcompound(F_compound *old_c, int px, int py) { F_compound *new_c; set_temp_cursor(wait_cursor); new_c = copy_compound(old_c); flip_compound(new_c, px, py, flip_axis); if (copy) { add_compound(new_c); } else { toggle_compoundmarker(old_c); draw_compoundelements(old_c, ERASE); change_compound(old_c, new_c); } /* redisplay objects under this object before it was rotated */ redisplay_compound(old_c); /* and this object and any other objects on top */ redisplay_compound(new_c); reset_cursor(); }
static void put_draw(int paint_mode) { register int x1, y1, x2, y2; if (draw_box) { x1=cur_x; y1=cur_y; x2=cur_x+off_library_x; y2=cur_y+off_library_y; elastic_box(x1, y1, x2, y2); } else { if (paint_mode==ERASE) redisplay_compound(new_c); else redisplay_objects(new_c); } }
static void cancel_drag_compound(void) { canvas_ref_proc = canvas_locmove_proc = null_proc; elastic_movebox(); /* erase last lengths if appres.showlengths is true */ erase_lengths(); free_linkinfo(&cur_links); if (return_proc == copy_selected) { free_compound(&new_c); } else { list_add_compound(&objects.compounds, new_c); redisplay_compound(new_c); } /* turn back on all relevant markers */ update_markers(new_objmask); (*return_proc) (); draw_mousefun_canvas(); }
static void place_lib_object_orig(int x, int y, unsigned int shift) { int dx,dy; canvas_ref_proc = null_proc; put_draw(ERASE); clean_up(); /* move back to original position */ dx = orig_put_x-x; dy = orig_put_y-y; translate_compound(new_c,dx,dy); /* remove it from the depths because it will be added when it is put in the main list */ remove_compound_depth(new_c); add_compound(new_c); set_modifiedflag(); redisplay_compound(new_c); put_selected(); }
void undo_delete(void) { int xmin, ymin, xmax, ymax; char ctemp[PATH_MAX]; switch (last_object) { case O_POLYLINE: list_add_line(&objects.lines, saved_objects.lines); redisplay_line(saved_objects.lines); break; case O_ELLIPSE: list_add_ellipse(&objects.ellipses, saved_objects.ellipses); redisplay_ellipse(saved_objects.ellipses); break; case O_TXT: list_add_text(&objects.texts, saved_objects.texts); redisplay_text(saved_objects.texts); break; case O_SPLINE: list_add_spline(&objects.splines, saved_objects.splines); redisplay_spline(saved_objects.splines); break; case O_ARC: list_add_arc(&objects.arcs, saved_objects.arcs); redisplay_arc(saved_objects.arcs); break; case O_COMPOUND: list_add_compound(&objects.compounds, saved_objects.compounds); redisplay_compound(saved_objects.compounds); break; case O_ALL_OBJECT: saved_objects.next = NULL; compound_bound(&saved_objects, &xmin, &ymin, &xmax, &ymax); tail(&objects, &object_tails); append_objects(&objects, &saved_objects, &object_tails); redisplay_zoomed_region(xmin, ymin, xmax, ymax); } last_action = F_ADD; }
static void place_compound_x(int x, int y) { int dx, dy; canvas_leftbut_proc = null_proc; canvas_middlebut_proc = null_proc; canvas_rightbut_proc = null_proc; canvas_locmove_proc = null_proc; canvas_ref_proc = null_proc; adjust_pos(x, y, fix_x, fix_y, &x, &y); dx = x - fix_x; dy = y - fix_y; translate_compound(new_c, dx, dy); clean_up(); set_latestcompound(new_c); if (return_proc == copy_selected) { add_compound(new_c); adjust_links(cur_linkmode, cur_links, dx, dy, 0, 0, 1.0, 1.0, True); free_linkinfo(&cur_links); } else { list_add_compound(&objects.compounds, new_c); adjust_links(cur_linkmode, cur_links, dx, dy, 0, 0, 1.0, 1.0, False); set_lastposition(fix_x, fix_y); set_newposition(x, y); set_lastlinkinfo(cur_linkmode, cur_links); cur_links = NULL; set_action_object(F_MOVE, O_COMPOUND); } set_modifiedflag(); redisplay_compound(new_c); /* turn back on all relevant markers */ update_markers(new_objmask); (*return_proc) (); draw_mousefun_canvas(); }
void create_lineobject(int x, int y) { F_line *line; F_compound *comp; int dot; if (num_point == 0) { if ((first_point = create_point()) == NULL) { line_drawing_selected(); draw_mousefun_canvas(); return; } cur_point = first_point; first_point->x = fix_x = cur_x = x; first_point->y = fix_y = cur_y = y; first_point->next = NULL; num_point++; } else if (x != fix_x || y != fix_y) { get_intermediatepoint(x, y, 0); } /* dimension line must have 2 different points */ if (dimension_line && first_point->x == x && first_point->y == y) return; dot = (num_point == 1); elastic_line(); /* erase any length info if appres.showlengths is true */ erase_lengths(); if ((line = create_line()) == NULL) { line_drawing_selected(); draw_mousefun_canvas(); return; } line->type = T_POLYLINE; line->style = cur_linestyle; line->thickness = cur_linewidth; line->pen_color = cur_pencolor; line->fill_color = cur_fillcolor; line->depth = cur_depth; line->pen_style = -1; line->join_style = cur_joinstyle; line->cap_style = cur_capstyle; line->fill_style = cur_fillstyle; line->style_val = cur_styleval * (cur_linewidth + 1) / 2; line->points = first_point; if (!dot) { if (cur_mode == F_POLYGON) { /* close off polygon */ line->type = T_POLYGON; num_point++; append_point(first_point->x, first_point->y, &cur_point); elastic_line(); fix_x = first_point->x; fix_y = first_point->y; elastic_line(); /* fix last elastic line */ } else { /* polyline; draw any arrows */ if (autoforwardarrow_mode && !dimension_line) line->for_arrow = forward_arrow(); /* arrow will be drawn in draw_line below */ if (autobackwardarrow_mode && !dimension_line) line->back_arrow = backward_arrow(); /* arrow will be drawn in draw_line below */ } cur_x = fix_x; cur_y = fix_y; elastic_moveline(first_point); /* erase temporary outline */ } if (dimension_line) { comp = create_dimension_line(line, True); reset_action_on(); /* this signals redisplay_curobj() not to refresh */ /* draw it and anything on top of it */ redisplay_compound(comp); } else { add_line(line); reset_action_on(); /* this signals redisplay_curobj() not to refresh */ /* draw it and anything on top of it */ redisplay_line(line); } line_drawing_selected(); if (!edit_remember_dimline_mode) draw_mousefun_canvas(); }