aboutsummaryrefslogtreecommitdiff
path: root/src/imagedisplay.c
diff options
context:
space:
mode:
authorTom White <weiss@jade.(none)>2008-09-29 18:23:46 +0100
committerThomas White <taw27@cam.ac.uk>2008-10-02 17:56:45 +0100
commitf6a8e7ef02e6f449c2c3aa6186bf10d81c127dd3 (patch)
tree80bce3620f8823e15a00db4b1165101a2a933c86 /src/imagedisplay.c
parentd200349cad19fa80947b441711cc36685a974aa2 (diff)
Add a scale bar to the diffraction patterns
Diffstat (limited to 'src/imagedisplay.c')
-rw-r--r--src/imagedisplay.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/imagedisplay.c b/src/imagedisplay.c
index 4ca46a5..b6de26a 100644
--- a/src/imagedisplay.c
+++ b/src/imagedisplay.c
@@ -23,6 +23,7 @@
#include "imagedisplay.h"
#include "utils.h"
+#include "mapping.h"
/* Free pixbuf data when reference count drops to zero */
static void imagedisplay_free_data(guchar *image_eightbit, ImageDisplay *imagedisplay) {
@@ -167,6 +168,33 @@ void imagedisplay_close(ImageDisplay *imagedisplay) {
}
}
+static void imagedisplay_add_scalebar(ImageDisplay *imagedisplay, GtkWidget *drawingarea,
+ double scale, double xoffs, double yoffs) {
+
+ PangoLayout *layout;
+ double sb;
+ 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;
+ gdk_draw_rectangle(drawingarea->window, drawingarea->style->bg_gc[GTK_WIDGET_STATE(drawingarea)], TRUE,
+ xoffs+20, yoffs+view_height-20-bheight,
+ bwidth, bheight);
+ gdk_draw_line(drawingarea->window, drawingarea->style->fg_gc[GTK_WIDGET_STATE(drawingarea)],
+ xoffs+30, yoffs+view_height-30,
+ xoffs+30+(scale*sb), yoffs+view_height-30);
+ gdk_draw_layout(drawingarea->window, drawingarea->style->fg_gc[GTK_WIDGET_STATE(drawingarea)],
+ xoffs+30, yoffs+view_height-20-bheight+10, layout);
+
+}
+
#define imagedisplay_draw_line(gc,x1,y1,x2,y2) (gdk_draw_line(drawingarea->window,gc, \
xoffs+(x1), yoffs+imagedisplay->view_height-1-(y1), \
xoffs+(x2), yoffs+imagedisplay->view_height-1-(y2)))
@@ -202,6 +230,9 @@ static gboolean imagedisplay_redraw(GtkWidget *drawingarea, GdkEventExpose *even
* tan(imagedisplay->imagerecord.omega)) * scale);
}
+ /* Add 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,