static void free_goop(Display * display, goopstruct * gp) { int l; if (gp->layers != NULL) { for (l = 0; l < gp->nlayers; l++) { if (gp->layers[l].blobs != NULL) { int b; for (b = 0; b < gp->layers[l].nblobs; b++) { if (gp->layers[l].blobs[b].r != NULL) free(gp->layers[l].blobs[b].r); free_spline(gp->layers[l].blobs[b].splines); } free(gp->layers[l].blobs); } if (gp->layers[l].gc != None) XFreeGC(display, gp->layers[l].gc); if (gp->layers[l].pixmap != None) XFreePixmap(display, gp->layers[l].pixmap); } free(gp->layers); gp->layers = (layer *) NULL; } if (gp->pixmap_gc != None) { XFreeGC(display, gp->pixmap_gc); gp->pixmap_gc = None; } if (gp->pixmap != None) { XFreePixmap(display, gp->pixmap); gp->pixmap = None; } }
static void cancel_spline(void) { canvas_ref_proc = canvas_locmove_proc = null_proc; elastic_moveline(new_s->points); /* erase last lengths if appres.showlengths is true */ erase_lengths(); if (return_proc == copy_selected) { free_spline(&new_s); } else { list_add_spline(&objects.splines, new_s); redisplay_spline(new_s); } /* turn back on all relevant markers */ update_markers(new_objmask); (*return_proc) (); draw_mousefun_canvas(); }
void free_compound(F_compound **list) { F_compound *c, *compound; for (c = *list; c != NULL;) { compound = c; c = c->next; free_arc(&compound->arcs); free_compound(&compound->compounds); free_ellipse(&compound->ellipses); free_line(&compound->lines); free_spline(&compound->splines); free_text(&compound->texts); if (compound->comments) { free(compound->comments); compound->comments = NULL; } free((char *) compound); compound = NULL; } *list = NULL; }
void line_spline(F_line *l, int type_value) { F_spline *s; if (num_points(l->points) < CLOSED_SPLINE_MIN_NUM_POINTS) { put_msg("Not enough points for a spline"); beep(); return; } if ((s = create_spline()) == NULL) return; s->type = type_value; if (l->type == T_POLYGON) s->points = copy_points(l->points->next); else s->points = copy_points(l->points); s->style = l->style; s->thickness = l->thickness; s->pen_color = l->pen_color; s->fill_color = l->fill_color; s->depth = l->depth; s->style_val = l->style_val; s->cap_style = l->cap_style; s->pen_style = l->pen_style; s->fill_style = l->fill_style; s->sfactors = NULL; s->next = NULL; if (l->for_arrow) { s->for_arrow = create_arrow(); s->for_arrow->type = l->for_arrow->type; s->for_arrow->style = l->for_arrow->style; s->for_arrow->thickness = l->for_arrow->thickness; s->for_arrow->wd = l->for_arrow->wd; s->for_arrow->ht = l->for_arrow->ht; } else { s->for_arrow = NULL; } if (l->back_arrow) { s->back_arrow = create_arrow(); s->back_arrow->type = l->back_arrow->type; s->back_arrow->style = l->back_arrow->style; s->back_arrow->thickness = l->back_arrow->thickness; s->back_arrow->wd = l->back_arrow->wd; s->back_arrow->ht = l->back_arrow->ht; } else { s->back_arrow = NULL; } /* A spline must have an s parameter for each point */ if (!make_sfactors(s)) { free_spline(&s); return; } /* Get rid of the line and draw the new spline */ delete_line(l); /* now put back the new spline */ mask_toggle_splinemarker(s); list_add_spline(&objects.splines, s); redisplay_spline(s); set_action_object(F_CONVERT, O_POLYLINE); set_latestspline(s); set_modifiedflag(); }
void clean_up(void) { if (last_action == F_EDIT) { switch (last_object) { case O_ARC: saved_objects.arcs->next = NULL; free_arc(&saved_objects.arcs); break; case O_COMPOUND: saved_objects.compounds->next = NULL; free_compound(&saved_objects.compounds); break; case O_ELLIPSE: saved_objects.ellipses->next = NULL; free_ellipse(&saved_objects.ellipses); break; case O_POLYLINE: saved_objects.lines->next = NULL; free_line(&saved_objects.lines); break; case O_SPLINE: saved_objects.splines->next = NULL; free_spline(&saved_objects.splines); break; case O_TXT: saved_objects.texts->next = NULL; free_text(&saved_objects.texts); break; case O_FIGURE: free((char *) saved_objects.comments); break; } } else if (last_action==F_DELETE || last_action==F_JOIN || last_action==F_SPLIT) { switch (last_object) { case O_ARC: free_arc(&saved_objects.arcs); break; case O_COMPOUND: free_compound(&saved_objects.compounds); break; case O_ELLIPSE: free_ellipse(&saved_objects.ellipses); break; case O_POLYLINE: free_line(&saved_objects.lines); break; case O_SPLINE: free_spline(&saved_objects.splines); break; case O_TXT: free_text(&saved_objects.texts); break; case O_ALL_OBJECT: free_arc(&saved_objects.arcs); free_compound(&saved_objects.compounds); free_ellipse(&saved_objects.ellipses); free_line(&saved_objects.lines); free_spline(&saved_objects.splines); free_text(&saved_objects.texts); break; } } else if (last_action == F_DELETE_POINT || last_action == F_ADD_POINT) { if (last_action == F_DELETE_POINT) { /************************************************** free((char *) last_selected_point); free((char *) last_selected_sfactor); **************************************************/ last_next_point = NULL; } last_prev_point = NULL; last_selected_point = NULL; saved_objects.arcs = NULL; saved_objects.compounds = NULL; saved_objects.ellipses = NULL; saved_objects.lines = NULL; saved_objects.splines = NULL; saved_objects.texts = NULL; } else if (last_action == F_LOAD) { free_arc(&saved_objects.arcs); free_compound(&saved_objects.compounds); free_ellipse(&saved_objects.ellipses); free_line(&saved_objects.lines); free_spline(&saved_objects.splines); free_text(&saved_objects.texts); } else if (last_action == F_GLUE) { saved_objects.compounds = NULL; } else if (last_action == F_BREAK) { free((char *) saved_objects.compounds); saved_objects.compounds = NULL; } else if (last_action == F_ADD || last_action == F_MOVE) { saved_objects.arcs = NULL; saved_objects.compounds = NULL; saved_objects.ellipses = NULL; saved_objects.lines = NULL; saved_objects.splines = NULL; saved_objects.texts = NULL; free_linkinfo(&last_links); } else if (last_action == F_CONVERT) { if (last_object == O_POLYLINE) saved_objects.splines = NULL; else saved_objects.lines = NULL; } else if (last_action == F_OPEN_CLOSE) { saved_objects.splines = NULL; saved_objects.lines = NULL; free((char *) last_for_arrow); free((char *) last_back_arrow); } else if (last_action == F_ADD_ARROW_HEAD || last_action == F_DELETE_ARROW_HEAD) { saved_objects.splines = NULL; saved_objects.lines = NULL; saved_objects.arcs = NULL; last_prev_point = NULL; last_selected_point = NULL; } last_action = F_NULL; }