nedsim->cell_size * OVERALL_WIDTH_IN_CELLS,
nedsim->cell_size * (HEADER_HEIGHT_IN_CELLS + nedsim->num_data_rows + FOOTER_HEIGHT_IN_CELLS)
);
+
+ // Give the panel rounded corners by first deleting the four right-angle corners...
+ set_color(nedsim, &color_list[nedsim->color_index].panel_bg);
+ XFillRectangle(nedsim->dpy, nedsim->win, nedsim->gc,
+ nedsim->origin_x_offset,
+ nedsim->origin_y_offset,
+ nedsim->cell_size,
+ nedsim->cell_size
+ );
+ XFillRectangle(nedsim->dpy, nedsim->win, nedsim->gc,
+ nedsim->origin_x_offset + (nedsim->cell_size * (OVERALL_WIDTH_IN_CELLS-1)),
+ nedsim->origin_y_offset,
+ nedsim->cell_size,
+ nedsim->cell_size
+ );
+ XFillRectangle(nedsim->dpy, nedsim->win, nedsim->gc,
+ nedsim->origin_x_offset,
+ nedsim->origin_y_offset + (nedsim->cell_size * (HEADER_HEIGHT_IN_CELLS + nedsim->num_data_rows + FOOTER_HEIGHT_IN_CELLS - 1)),
+ nedsim->cell_size,
+ nedsim->cell_size
+ );
+ XFillRectangle(nedsim->dpy, nedsim->win, nedsim->gc,
+ nedsim->origin_x_offset + (nedsim->cell_size * (OVERALL_WIDTH_IN_CELLS-1)),
+ nedsim->origin_y_offset + (nedsim->cell_size * (HEADER_HEIGHT_IN_CELLS + nedsim->num_data_rows + FOOTER_HEIGHT_IN_CELLS - 1)),
+ nedsim->cell_size,
+ nedsim->cell_size
+ );
+ // ...and then replacing them with filled arcs, forming rounded corners.
+ set_color(nedsim, &color_list[nedsim->color_index].panel_fg);
+ XFillArc(nedsim->dpy, nedsim->win, nedsim->gc,
+ nedsim->origin_x_offset,
+ nedsim->origin_y_offset,
+ nedsim->cell_size * 2, nedsim->cell_size * 2,
+ 180*64, -90*64
+ );
+ XFillArc(nedsim->dpy, nedsim->win, nedsim->gc,
+ nedsim->origin_x_offset + (nedsim->cell_size * (OVERALL_WIDTH_IN_CELLS-2)),
+ nedsim->origin_y_offset,
+ nedsim->cell_size * 2, nedsim->cell_size * 2,
+ 0, 90*64
+ );
+ XFillArc(nedsim->dpy, nedsim->win, nedsim->gc,
+ nedsim->origin_x_offset,
+ nedsim->origin_y_offset + (nedsim->cell_size * (HEADER_HEIGHT_IN_CELLS + nedsim->num_data_rows + FOOTER_HEIGHT_IN_CELLS - 2)),
+ nedsim->cell_size * 2, nedsim->cell_size * 2,
+ 180*64, 90*64
+ );
+ XFillArc(nedsim->dpy, nedsim->win, nedsim->gc,
+ nedsim->origin_x_offset + (nedsim->cell_size * (OVERALL_WIDTH_IN_CELLS-2)),
+ nedsim->origin_y_offset + (nedsim->cell_size * (HEADER_HEIGHT_IN_CELLS + nedsim->num_data_rows + FOOTER_HEIGHT_IN_CELLS - 2)),
+ nedsim->cell_size * 2, nedsim->cell_size * 2,
+ 0, -90*64
+ );
}
// TODO: Explain
XGetWindowAttributes(nedsim->dpy, nedsim->win, &xgwa);
/* Only restart the simulation if the window changed size. */
if (nedsim->dpy_width != xgwa.width || nedsim->dpy_height != xgwa.height) {
- NEDsim_free(dpy, win, closure);
- closure = NEDsim_init(dpy, win);
+ struct NEDstate * original_nedstate = nedsim->nedstate;
+ nedsim->nedstate = NULL;
+ NEDsim_free(dpy, win, nedsim);
+ struct NEDsim * new_nedsim = NEDsim_init(dpy, win);
+ new_nedsim->nedstate = original_nedstate;
+ closure = new_nedsim;
}
}