1
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2
* filename: xrender.c *
4
* UTIL C-source: Medical Image Conversion Utility *
6
* purpose : rendering type handling *
8
* project : (X)MedCon by Erik Nolf *
10
* Functions : XMdcApplyNewRendering() - Apply new rendering *
11
* XMdcRenderingSelCallbackApply() - Rendering Apply *
12
* XMdcRenderingSel() - Rendering selection *
14
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
15
/* $Id: xrender.c,v 1.8 2004/01/04 22:36:17 enlf Exp $
19
Copyright (C) 1997-2004 by Erik Nolf
21
This program is free software; you can redistribute it and/or modify it
22
under the terms of the GNU General Public License as published by the
23
Free Software Foundation; either version 2, or (at your option) any later
26
This program is distributed in the hope that it will be useful, but
27
WITHOUT ANY WARRANTY; without even the implied warranty of
28
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
29
Public License for more details.
31
You should have received a copy of the GNU General Public License along
32
with this program; if not, write to the Free Software Foundation, Inc.,
33
59 Place - Suite 330, Boston, MA 02111-1307, USA. */
35
/****************************************************************************
37
****************************************************************************/
43
/****************************************************************************
45
****************************************************************************/
47
static GtkWidget *wrender=NULL;
49
/****************************************************************************
51
****************************************************************************/
53
void XMdcApplyNewRendering(void)
55
gtk_widget_set_sensitive(my.viewwindow,FALSE);
57
XMdcRemovePreviousColorMap();
58
XMdcRemovePreviousImages();
61
XMdcBuildCurrentImages();
63
gtk_widget_set_sensitive(my.viewwindow,TRUE);
66
void XMdcRenderingSelCallbackApply(GtkWidget *widget, gpointer data)
68
GdkRgbDither dither = sRenderSelection.Dither;
69
GdkInterpType interp = sRenderSelection.Interp;
71
MdcDebugPrint("dither type: ");
72
if (GTK_TOGGLE_BUTTON(sRenderSelection.DitherNone)->active) {
73
dither = GDK_RGB_DITHER_NONE; MdcDebugPrint("\tnone");
74
}else if (GTK_TOGGLE_BUTTON(sRenderSelection.DitherNormal)->active) {
75
dither = GDK_RGB_DITHER_NORMAL; MdcDebugPrint("\tnormal");
76
}else if (GTK_TOGGLE_BUTTON(sRenderSelection.DitherMax)->active) {
77
dither = GDK_RGB_DITHER_MAX; MdcDebugPrint("\tmax");
80
MdcDebugPrint("interpolation type: ");
82
if (GTK_TOGGLE_BUTTON(sRenderSelection.InterpNearest)->active) {
83
interp = GDK_INTERP_NEAREST; MdcDebugPrint("\tnearest");
84
}else if (GTK_TOGGLE_BUTTON(sRenderSelection.InterpTiles)->active) {
85
interp = GDK_INTERP_TILES; MdcDebugPrint("\ttiles");
86
}else if (GTK_TOGGLE_BUTTON(sRenderSelection.InterpBilinear)->active) {
87
interp = GDK_INTERP_BILINEAR; MdcDebugPrint("\tbilinear");
88
}else if (GTK_TOGGLE_BUTTON(sRenderSelection.InterpHyper)->active) {
89
interp = GDK_INTERP_HYPER; MdcDebugPrint("\thyper");
92
if (sRenderSelection.Dither != dither ||
93
sRenderSelection.Interp != interp) {
94
sRenderSelection.Dither = dither;
95
sRenderSelection.Interp = interp;
96
if (XMDC_FILE_OPEN == MDC_YES) XMdcApplyNewRendering();
102
void XMdcRenderingSel(void)
110
GtkWidget *separator;
113
if (wrender == NULL) {
114
wrender = gtk_window_new(GTK_WINDOW_TOPLEVEL);
116
gtk_signal_connect(GTK_OBJECT(wrender),"destroy",
117
GTK_SIGNAL_FUNC(XMdcMedconQuit),NULL);
118
gtk_signal_connect(GTK_OBJECT(wrender),"delete_event",
119
GTK_SIGNAL_FUNC(XMdcHandlerToHide),NULL);
121
gtk_window_set_title(GTK_WINDOW(wrender),"Render Selection");
123
gtk_container_set_border_width (GTK_CONTAINER (wrender), 0);
125
box1 = gtk_vbox_new (FALSE, 0);
126
gtk_container_add (GTK_CONTAINER (wrender), box1);
127
gtk_widget_show(box1);
129
box2 = gtk_vbox_new (FALSE, 5);
130
gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
131
gtk_container_set_border_width (GTK_CONTAINER(box2), 5);
132
gtk_widget_show(box2);
134
box3 = gtk_hbox_new (FALSE, 5);
135
gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0);
136
gtk_widget_show(box3);
138
/* create frame Dither Type */
139
frame = gtk_frame_new("Dither Type");
140
gtk_box_pack_start(GTK_BOX (box3), frame, TRUE, TRUE, 0);
141
gtk_widget_show(frame);
143
box4 = gtk_vbox_new(FALSE, 0);
144
gtk_container_add(GTK_CONTAINER(frame), box4);
145
gtk_container_set_border_width(GTK_CONTAINER(box4), 5);
146
gtk_widget_show(box4);
148
button = gtk_radio_button_new_with_label(NULL, "None");
149
gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
150
if (sRenderSelection.Dither == GDK_RGB_DITHER_NONE)
151
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), TRUE);
152
gtk_widget_show(button);
153
sRenderSelection.DitherNone = button;
155
group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
156
button = gtk_radio_button_new_with_label(group, "Normal (8 bpp and below)");
157
gtk_box_pack_start (GTK_BOX(box4), button, TRUE, TRUE, 0);
158
if (sRenderSelection.Dither == GDK_RGB_DITHER_NORMAL)
159
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), TRUE);
160
gtk_widget_show(button);
161
sRenderSelection.DitherNormal = button;
163
group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
164
button = gtk_radio_button_new_with_label(group, "Max (16 bpp and below)");
165
gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
166
if (sRenderSelection.Dither == GDK_RGB_DITHER_MAX)
167
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), TRUE);
168
gtk_widget_show(button);
169
sRenderSelection.DitherMax = button;
171
/* create frame Interpolation Type */
172
frame = gtk_frame_new("Interpolation Type");
173
gtk_box_pack_start(GTK_BOX(box3), frame, TRUE, TRUE, 0);
174
gtk_widget_show(frame);
176
box4 = gtk_vbox_new(FALSE, 0);
177
gtk_container_add(GTK_CONTAINER(frame), box4);
178
gtk_container_set_border_width(GTK_CONTAINER(box4), 10);
179
gtk_widget_show(box4);
182
gtk_radio_button_new_with_label(NULL,"Nearest neighbour sampling");
183
gtk_box_pack_start(GTK_BOX(box4), button, TRUE, TRUE, 0);
184
if (sRenderSelection.Interp == GDK_INTERP_NEAREST)
185
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), TRUE);
186
gtk_widget_show(button);
187
sRenderSelection.InterpNearest = button;
189
group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
191
gtk_radio_button_new_with_label(group,"Tiles as mix nearest and bilinear");
192
gtk_box_pack_start (GTK_BOX(box4), button, TRUE, TRUE, 0);
193
if (sRenderSelection.Interp == GDK_INTERP_TILES)
194
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), TRUE);
195
gtk_widget_show(button);
196
sRenderSelection.InterpTiles = button;
198
group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
200
gtk_radio_button_new_with_label(group,"Bilinear interpolation");
201
gtk_box_pack_start (GTK_BOX(box4), button, TRUE, TRUE, 0);
202
if (sRenderSelection.Interp == GDK_INTERP_BILINEAR)
203
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), TRUE);
204
gtk_widget_show(button);
205
sRenderSelection.InterpBilinear = button;
207
group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
209
gtk_radio_button_new_with_label(group,"Hyperbolic-filter interpolation");
210
gtk_box_pack_start (GTK_BOX(box4), button, TRUE, TRUE, 0);
211
if (sRenderSelection.Interp == GDK_INTERP_HYPER)
212
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), TRUE);
213
gtk_widget_show(button);
214
sRenderSelection.InterpHyper = button;
216
/* create horizontal separator */
217
separator = gtk_hseparator_new ();
218
gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, FALSE, 0);
219
gtk_widget_show (separator);
221
/* create bottom button box */
222
box2 = gtk_hbox_new (FALSE, 0);
223
gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 2);
224
gtk_widget_show(box2);
226
button = gtk_button_new_with_label("Apply");
227
gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 2);
228
gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
229
GTK_SIGNAL_FUNC(gtk_widget_hide), GTK_OBJECT(wrender));
230
gtk_signal_connect(GTK_OBJECT(button), "clicked",
231
GTK_SIGNAL_FUNC(XMdcRenderingSelCallbackApply), NULL);
232
gtk_widget_show(button);
234
button = gtk_button_new_with_label ("Cancel");
235
gtk_box_pack_start(GTK_BOX(box2), button, TRUE, TRUE, 2);
236
gtk_signal_connect_object(GTK_OBJECT (button), "clicked",
237
GTK_SIGNAL_FUNC(gtk_widget_hide),GTK_OBJECT(wrender));
238
gtk_widget_show(button);
241
/* set buttons to appropriate state */
242
GtkWidget *b1, *b2, *b3, *b4;
244
gtk_widget_hide(wrender);
246
b1 = sRenderSelection.DitherNone;
247
b2 = sRenderSelection.DitherNormal;
248
b3 = sRenderSelection.DitherMax;
249
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b1),FALSE);
250
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b2),FALSE);
251
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b3),FALSE);
252
switch (sRenderSelection.Dither) {
253
case GDK_RGB_DITHER_NONE :
254
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b1),TRUE); break;
255
case GDK_RGB_DITHER_NORMAL:
256
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b2),TRUE); break;
257
case GDK_RGB_DITHER_MAX :
258
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b3),TRUE); break;
261
b1 = sRenderSelection.InterpNearest;
262
b2 = sRenderSelection.InterpTiles;
263
b3 = sRenderSelection.InterpBilinear;
264
b4 = sRenderSelection.InterpHyper;
265
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b1),FALSE);
266
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b2),FALSE);
267
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b3),FALSE);
268
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b4),FALSE);
269
switch (sRenderSelection.Interp) {
270
case GDK_INTERP_NEAREST :
271
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b1),TRUE); break;
272
case GDK_INTERP_TILES :
273
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b2),TRUE); break;
274
case GDK_INTERP_BILINEAR:
275
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b3),TRUE); break;
276
case GDK_INTERP_HYPER :
277
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b4),TRUE); break;
283
XMdcShowWidget(wrender);