From 1dca13f19111c01204abd7deb3a9f027a7a733a0 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 6 Apr 2009 16:54:48 +0100 Subject: Make circles smaller, and remove trailing spaces --- src/imagedisplay.c | 143 ++++++++++++++++++++++++++--------------------------- 1 file changed, 71 insertions(+), 72 deletions(-) diff --git a/src/imagedisplay.c b/src/imagedisplay.c index 8915c41..574e3f2 100644 --- a/src/imagedisplay.c +++ b/src/imagedisplay.c @@ -34,10 +34,10 @@ static void imagedisplay_rescale(ImageDisplay *imagedisplay, unsigned int v_w, u unsigned int w, h; float aspect_image, aspect_window; - + w = imagedisplay->imagerecord.width; h = imagedisplay->imagerecord.height; - + /* Preserve aspect ratio */ aspect_image = (float)w/h; aspect_window = (float)v_w/v_h; @@ -46,16 +46,16 @@ static void imagedisplay_rescale(ImageDisplay *imagedisplay, unsigned int v_w, u } else { v_h = v_w/aspect_image; } - + if ( imagedisplay->pixbuf_scaled ) { g_object_unref(imagedisplay->pixbuf_scaled); } - + /* Create the scaled pixbuf from the 8-bit display data */ imagedisplay->pixbuf_scaled = gdk_pixbuf_scale_simple(imagedisplay->pixbuf, v_w, v_h, GDK_INTERP_BILINEAR); imagedisplay->view_width = v_w; imagedisplay->view_height = v_h; - + } static gboolean imagedisplay_configure_event(GtkWidget *widget, GdkEventConfigure *event, ImageDisplay *imagedisplay) { @@ -63,7 +63,7 @@ static gboolean imagedisplay_configure_event(GtkWidget *widget, GdkEventConfigur imagedisplay->drawingarea_width = event->width; imagedisplay->drawingarea_height = event->height; imagedisplay_rescale(imagedisplay, event->width, event->height); - + return FALSE; } @@ -75,14 +75,14 @@ void imagedisplay_put_data(ImageDisplay *imagedisplay, ImageRecord imagerecord) int min, max; double c, scale; int b; - + h = imagerecord.height; w = imagerecord.width; - + if ( imagedisplay->pixbuf ) { g_object_unref(imagedisplay->pixbuf); } - + min = 2<<15; max = 0; b = (h+w)/20; /* Number of pixels of ignored border */ for ( y=b; ydata = malloc(3*w*h); for ( y=0; ydata[3*( x+w*(h-1-y) )] = val8; imagedisplay->data[3*( x+w*(h-1-y) )+1] = val8; imagedisplay->data[3*( x+w*(h-1-y) )+2] = val8; - + } } - + memcpy(&imagedisplay->imagerecord, &imagerecord, sizeof(ImageRecord)); - + /* Create the pixbuf from the 8-bit display data */ imagedisplay->pixbuf = gdk_pixbuf_new_from_data(imagedisplay->data, GDK_COLORSPACE_RGB, FALSE, 8, w, h, w*3, (GdkPixbufDestroyNotify)imagedisplay_free_data, imagedisplay); - + if ( imagedisplay->realised ) { imagedisplay_force_redraw(imagedisplay); } @@ -127,9 +127,9 @@ void imagedisplay_put_data(ImageDisplay *imagedisplay, ImageRecord imagerecord) } void imagedisplay_clear_marks(ImageDisplay *imagedisplay) { - + ImageDisplayMark *cur; - + cur = imagedisplay->marks; while ( cur ) { ImageDisplayMark *next = cur->next; @@ -137,28 +137,28 @@ void imagedisplay_clear_marks(ImageDisplay *imagedisplay) { cur = next; } imagedisplay->marks = NULL; - + } static void imagedisplay_destroyed(GtkWidget *widget, ImageDisplay *imagedisplay) { imagedisplay_clear_marks(imagedisplay); - + if ( imagedisplay->flags & IMAGEDISPLAY_QUIT_IF_CLOSED ) { gtk_exit(0); } - + g_object_unref(G_OBJECT(imagedisplay->gc_centre)); g_object_unref(G_OBJECT(imagedisplay->gc_tiltaxis)); g_object_unref(G_OBJECT(imagedisplay->gc_marks_1)); g_object_unref(G_OBJECT(imagedisplay->gc_marks_2)); - + if ( imagedisplay->flags & IMAGEDISPLAY_FREE ) { free(imagedisplay->imagerecord.image); } free(imagedisplay); - + } void imagedisplay_close(ImageDisplay *imagedisplay) { @@ -176,11 +176,11 @@ static void imagedisplay_add_scalebar(ImageDisplay *imagedisplay, GtkWidget *dra PangoRectangle rect; int bwidth, bheight; int view_height = imagedisplay->view_height; - + sb = mapping_scale_bar_length(&imagedisplay->imagerecord); layout = gtk_widget_create_pango_layout(drawingarea, "1 nm^-1"); pango_layout_get_pixel_extents(layout, &rect, NULL); - + bwidth = (sb*scale)+20; bheight = rect.height+30; if ( rect.width > bwidth ) bwidth = rect.width+20; @@ -200,20 +200,20 @@ static void imagedisplay_add_scalebar(ImageDisplay *imagedisplay, GtkWidget *dra xoffs+(x2), yoffs+imagedisplay->view_height-1-(y2))) static gboolean imagedisplay_redraw(GtkWidget *drawingarea, GdkEventExpose *event, ImageDisplay *imagedisplay) { - + double scale, xoffs, yoffs; ImageDisplayMark *cur; double max; - + xoffs = ((double)imagedisplay->drawingarea_width - imagedisplay->view_width) / 2; yoffs = ((double)imagedisplay->drawingarea_height - imagedisplay->view_height) / 2; scale = (double)imagedisplay->view_width/imagedisplay->imagerecord.width; - + gdk_draw_pixbuf(drawingarea->window, drawingarea->style->bg_gc[GTK_WIDGET_STATE(drawingarea)], imagedisplay->pixbuf_scaled, 0, 0, xoffs, yoffs, imagedisplay->view_width, imagedisplay->view_height, GDK_RGB_DITHER_NONE, 0, 0); - + if ( imagedisplay->flags & IMAGEDISPLAY_SHOW_TILT_AXIS ) { /* This is nasty, but works */ imagedisplay_draw_line(imagedisplay->gc_tiltaxis, @@ -229,12 +229,12 @@ static gboolean imagedisplay_redraw(GtkWidget *drawingarea, GdkEventExpose *even (imagedisplay->imagerecord.y_centre - imagedisplay->imagerecord.width * tan(imagedisplay->imagerecord.omega)) * scale); } - + /* Add scale bar */ if ( imagedisplay->flags & IMAGEDISPLAY_SCALE_BAR ) { imagedisplay_add_scalebar(imagedisplay, drawingarea, scale, xoffs, yoffs); } - + /* NB This calls the function above, which sorts out stuff */ if ( imagedisplay->flags & IMAGEDISPLAY_SHOW_CENTRE ) { imagedisplay_draw_line(imagedisplay->gc_centre, @@ -253,23 +253,23 @@ static gboolean imagedisplay_redraw(GtkWidget *drawingarea, GdkEventExpose *even cur = imagedisplay->marks; max = 0.0; while ( cur ) { - + if ( cur->weight < 0.0 ) { //printf("ID: Warning: ImageDisplayMark with negative weight\n"); cur = cur->next; continue; } - + if ( log(1+0.1*cur->weight) > max ) max = log(1+0.1*cur->weight); cur = cur->next; - + } - + cur = imagedisplay->marks; while ( cur ) { - + GdkGC *gc; - + switch ( cur->type ) { case IMAGEDISPLAY_MARK_CIRCLE_1 : gc = imagedisplay->gc_marks_1; break; case IMAGEDISPLAY_MARK_CIRCLE_2 : gc = imagedisplay->gc_marks_2; break; @@ -278,39 +278,39 @@ static gboolean imagedisplay_redraw(GtkWidget *drawingarea, GdkEventExpose *even case IMAGEDISPLAY_MARK_LINE_2 : gc = imagedisplay->gc_marks_2; break; default : gc = imagedisplay->gc_marks_1; break; } - + if ( (cur->type == IMAGEDISPLAY_MARK_CIRCLE_1) || (cur->type == IMAGEDISPLAY_MARK_CIRCLE_2) || (cur->type == IMAGEDISPLAY_MARK_CIRCLE_3) ) { - + double r; - + if ( cur->weight < 0.0 ) { cur = cur->next; continue; } - + if ( cur->type == IMAGEDISPLAY_MARK_CIRCLE_1 ) { r = 10.0; } else { - r = 20.0 * (log(1+0.1*cur->weight)/max); + r = 10.0 * (log(1+0.1*cur->weight)/max); } - + gdk_draw_arc(drawingarea->window, gc, FALSE, xoffs + cur->x*scale - r, yoffs + imagedisplay->view_height-1-cur->y*scale - r, 2*r, 2*r, 0, 64*360); - + } else if ( (cur->type == IMAGEDISPLAY_MARK_LINE_1) || (cur->type == IMAGEDISPLAY_MARK_LINE_2) ) { - + gdk_draw_line(drawingarea->window, gc, xoffs + cur->x*scale, yoffs + imagedisplay->view_height-1-cur->y*scale, xoffs + cur->x2*scale, yoffs + imagedisplay->view_height-1-cur->y2*scale ); - + } - + cur = cur->next; } @@ -321,11 +321,11 @@ static gboolean imagedisplay_redraw(GtkWidget *drawingarea, GdkEventExpose *even static gint imagedisplay_realize(GtkWidget *widget, ImageDisplay *imagedisplay) { GdkColor colour; - + imagedisplay->gc_centre = gdk_gc_new(imagedisplay->drawingarea->window); gdk_color_parse("yellow", &colour); gdk_gc_set_rgb_fg_color(imagedisplay->gc_centre, &colour); - + imagedisplay->gc_tiltaxis = gdk_gc_new(imagedisplay->drawingarea->window); gdk_color_parse("#6600dd", &colour); gdk_gc_set_rgb_fg_color(imagedisplay->gc_tiltaxis, &colour); @@ -350,14 +350,14 @@ static gint imagedisplay_realize(GtkWidget *widget, ImageDisplay *imagedisplay) imagedisplay->realised = TRUE; return 0; - + } ImageDisplay *imagedisplay_new_nowindow(ImageRecord imagerecord, ImageDisplayFlags flags, const char *message, GCallback mouse_click_func, gpointer callback_data) { ImageDisplay *imagedisplay; - + imagedisplay = malloc(sizeof(ImageDisplay)); imagedisplay->imagerecord = imagerecord; imagedisplay->view_width = 512; @@ -370,27 +370,27 @@ ImageDisplay *imagedisplay_new_nowindow(ImageRecord imagerecord, ImageDisplayFla imagedisplay->pixbuf_scaled = NULL; imagedisplay->realised = FALSE; imagedisplay->window = NULL; - + imagedisplay_put_data(imagedisplay, imagerecord); - + imagedisplay->vbox = gtk_vbox_new(FALSE, 0); - + if ( message ) { GtkWidget *label; label = gtk_label_new(message); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_box_pack_start(GTK_BOX(imagedisplay->vbox), label, FALSE, TRUE, 3); } - + imagedisplay->drawingarea = gtk_drawing_area_new(); gtk_box_pack_start(GTK_BOX(imagedisplay->vbox), imagedisplay->drawingarea, TRUE, TRUE, 0); - + if ( imagedisplay->mouse_click_func ) { gtk_widget_add_events(GTK_WIDGET(imagedisplay->drawingarea), GDK_BUTTON_PRESS_MASK); g_signal_connect(GTK_OBJECT(imagedisplay->drawingarea), "button-press-event", G_CALLBACK(imagedisplay->mouse_click_func), callback_data); } - + g_signal_connect(GTK_OBJECT(imagedisplay->drawingarea), "realize", G_CALLBACK(imagedisplay_realize), imagedisplay); g_signal_connect(GTK_OBJECT(imagedisplay->drawingarea), "destroy", @@ -399,7 +399,7 @@ ImageDisplay *imagedisplay_new_nowindow(ImageRecord imagerecord, ImageDisplayFla G_CALLBACK(imagedisplay_configure_event), imagedisplay); g_signal_connect(GTK_OBJECT(imagedisplay->drawingarea), "expose-event", G_CALLBACK(imagedisplay_redraw), imagedisplay); - + return imagedisplay; } @@ -411,24 +411,24 @@ ImageDisplay *imagedisplay_open_with_message(ImageRecord imagerecord, const char ImageDisplay *imagedisplay; GdkGeometry geom; - + imagedisplay = imagedisplay_new_nowindow(imagerecord, flags, message, mouse_click_func, callback_data); - + imagedisplay->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_add(GTK_CONTAINER(imagedisplay->window), imagedisplay->vbox); imagedisplay->title = strdup(title); gtk_window_set_title(GTK_WINDOW(imagedisplay->window), imagedisplay->title); - + geom.min_width = 128; geom.min_height = 128; gtk_window_set_geometry_hints(GTK_WINDOW(imagedisplay->window), GTK_WIDGET(imagedisplay->drawingarea), &geom, GDK_HINT_MIN_SIZE); - + gtk_window_set_default_size(GTK_WINDOW(imagedisplay->window), 512, 512); - + gtk_widget_show_all(imagedisplay->window); - + return imagedisplay; - + } ImageDisplay *imagedisplay_open(ImageRecord image, const char *title, ImageDisplayFlags flags) { @@ -438,13 +438,13 @@ ImageDisplay *imagedisplay_open(ImageRecord image, const char *title, ImageDispl void imagedisplay_add_mark(ImageDisplay *imagedisplay, double x, double y, ImageDisplayMarkType type, double weight) { ImageDisplayMark *new; - + new = malloc(sizeof(ImageDisplayMark)); new->x = x; new->y = y; new->type = type; new->weight = weight; new->next = NULL; - + if ( !imagedisplay->marks ) { imagedisplay->marks = new; } else { @@ -461,14 +461,14 @@ void imagedisplay_add_line(ImageDisplay *imagedisplay, double x1, double y1, double x2, double y2, ImageDisplayMarkType type) { ImageDisplayMark *new; - + new = malloc(sizeof(ImageDisplayMark)); new->x = x1; new->y = y1; new->x2 = x2; new->y2 = y2; new->type = type; new->weight = 1.0; /* This field makes little sense for a line */ new->next = NULL; - + if ( !imagedisplay->marks ) { imagedisplay->marks = new; } else { @@ -486,4 +486,3 @@ void imagedisplay_force_redraw(ImageDisplay *imagedisplay) { gtk_widget_queue_draw_area(imagedisplay->drawingarea, 0, 0, imagedisplay->drawingarea_width, imagedisplay->drawingarea_height); } - -- cgit v1.2.3