1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
/*
* crystfelimageview.h
*
* CrystFEL's image viewer widget
*
* Copyright © 2020-2021 Deutsches Elektronen-Synchrotron DESY,
* a research centre of the Helmholtz Association.
*
* Authors:
* 2020-2021 Thomas White <taw@physics.org>
*
* This file is part of CrystFEL.
*
* CrystFEL is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CrystFEL is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with CrystFEL. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef CRYSTFELIMAGEVIEW_H
#define CRYSTFELIMAGEVIEW_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <image.h>
#include <datatemplate.h>
#define CRYSTFEL_TYPE_IMAGE_VIEW (crystfel_image_view_get_type())
#define CRYSTFEL_IMAGE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \
CRYSTFEL_TYPE_IMAGE_VIEW, CrystFELImageView))
#define CRYSTFEL_IS_IMAGE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
CRYSTFEL_TYPE_IMAGE_VIEW))
#define CRYSTFEL_IMAGE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((obj), \
CRYSTFEL_TYPE_IMAGE_VIEW, CrystFELImageView))
#define CRYSTFEL_IS_IMAGE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((obj), \
CRYSTFEL_TYPE_IMAGE_VIEW))
#define CRYSTFEL_IMAGE_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), \
CRYSTFEL_TYPE_IMAGE_VIEW, CrystFELImageView))
struct _crystfelimageview
{
GtkDrawingArea parent_instance;
/*< private >*/
GtkIMContext *im_context;
/* Detector size in metres */
double detector_w;
double detector_h;
/* Redraw/scroll stuff */
int need_rerender;
int need_recentre;
double scale_lo;
double scale_hi;
GtkScrollablePolicy hpol;
GtkScrollablePolicy vpol;
GtkAdjustment *hadj;
GtkAdjustment *vadj;
double visible_width;
double visible_height;
double zoom; /* screen pixels per m */
double drag_start_x;
double drag_start_y;
double drag_start_sp_x;
double drag_start_sp_y;
double min_x;
double max_y;
const struct image *image;
GdkPixbuf **pixbufs;
double brightness;
int show_centre;
int show_peaks;
int show_refls;
int label_refls;
float peak_box_size;
float refl_box_size;
int resolution_rings;
struct refl_precalc *refl_precalc;
};
struct _crystfelimageviewclass
{
GtkDrawingAreaClass parent_class;
};
typedef struct _crystfelimageview CrystFELImageView;
typedef struct _crystfelimageviewclass CrystFELImageViewClass;
extern GType crystfel_image_view_get_type(void);
extern GtkWidget *crystfel_image_view_new(void);
extern int crystfel_image_view_set_image(CrystFELImageView *iv,
const struct image *image);
extern void crystfel_image_view_reset_zoom(CrystFELImageView *iv);
extern void crystfel_image_view_set_brightness(CrystFELImageView *iv,
double brightness);
extern void crystfel_image_view_set_show_centre(CrystFELImageView *iv,
int show_centre);
extern void crystfel_image_view_set_show_peaks(CrystFELImageView *iv,
int show_peaks);
extern void crystfel_image_view_set_show_reflections(CrystFELImageView *iv,
int show_refls);
extern void crystfel_image_view_set_label_reflections(CrystFELImageView *iv,
int label_refls);
extern void crystfel_image_view_set_peak_box_size(CrystFELImageView *iv,
float box_size);
extern void crystfel_image_view_set_refl_box_size(CrystFELImageView *iv,
float box_size);
extern void crystfel_image_view_set_resolution_rings(CrystFELImageView *iv,
int rings);
extern void crystfel_image_view_set_colour_scale(CrystFELImageView *iv,
double lo, double hi);
#endif /* CRYSTFELIMAGEVIEW_H */
|