Update of /cvsroot/ufraw/ufraw
In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv13568
Modified Files:
ufraw.h ufraw_preview.c ufraw_ufraw.c ufraw_ui.h
Log Message:
Code refactoring. CFG->size, CFG->shrink are always kept at the setting
required to generate the preview, only switching to final value
when generating final image.
Index: ufraw.h
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw.h,v
retrieving revision 1.132
retrieving revision 1.133
diff -u -d -r1.132 -r1.133
--- ufraw.h 5 Nov 2009 06:02:58 -0000 1.132
+++ ufraw.h 6 Nov 2009 06:42:03 -0000 1.133
@@ -256,8 +256,6 @@
long valid;
gboolean rgbg;
gboolean invalidate_event;
- void (*producer)(struct ufraw_struct *uf, UFRawPhase phase);
- void *producer_data;
} ufraw_image_data;
typedef struct ufraw_struct {
Index: ufraw_ui.h
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_ui.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -d -r1.28 -r1.29
--- ufraw_ui.h 5 Nov 2009 06:02:58 -0000 1.28
+++ ufraw_ui.h 6 Nov 2009 06:42:03 -0000 1.29
@@ -27,7 +27,7 @@
typedef enum { render_default, render_overexposed, render_underexposed
} RenderModeType;
-typedef enum { cancel_button, ok_button, save_button,
+typedef enum { options_button, cancel_button, ok_button, save_button,
gimp_button, delete_button, num_buttons } ControlButtons;
typedef enum { spot_cursor, crop_cursor,
Index: ufraw_ufraw.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_ufraw.c,v
retrieving revision 1.209
retrieving revision 1.210
diff -u -d -r1.209 -r1.210
--- ufraw_ufraw.c 5 Nov 2009 06:02:58 -0000 1.209
+++ ufraw_ufraw.c 6 Nov 2009 06:42:03 -0000 1.210
@@ -1399,23 +1399,16 @@
switch (phase)
{
case ufraw_raw_phase:
- if (out->valid != (long)0xffffffff)
- {
- if (out->producer)
- out->producer(uf, phase);
- else
- ufraw_convert_image_raw(uf, phase);
- out->valid = 0xffffffff;
+ if (out->valid != (long)0xffffffff) {
+ ufraw_convert_image_raw(uf, phase);
}
return out;
case ufraw_first_phase:
- if (out->valid != (long)0xffffffff)
- {
- if (out->producer)
- out->producer(uf, phase);
- else
- ufraw_convert_image_first(uf, phase);
+ if (out->valid != (long)0xffffffff) {
+ ufraw_convert_image_first(uf, phase);
+ ufraw_rotate_image_buffer(&uf->Images[phase],
+ uf->conf->rotationAngle);
ufraw_convert_prepare_buffers(uf);
#ifdef HAVE_LENSFUN
ufraw_prepare_lensfun(uf, ufraw_lensfun_phase);
Index: ufraw_preview.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_preview.c,v
retrieving revision 1.298
retrieving revision 1.299
diff -u -d -r1.298 -r1.299
--- ufraw_preview.c 5 Nov 2009 06:02:58 -0000 1.298
+++ ufraw_preview.c 6 Nov 2009 06:42:03 -0000 1.299
@@ -1192,6 +1192,10 @@
rgb[c] = 100.0*live_his[0][c]/CropCount;
color_labels_set(data->UnderLabels, rgb);
+ gchar buf[20];
+ g_snprintf(buf, sizeof(buf), "%d", data->UF->hotpixels);
+ gtk_label_set_text(data->HotpixelCount, buf);
+
return FALSE;
}
@@ -1401,7 +1405,6 @@
for (i=0; i<data->UF->colors; i++)
gtk_adjustment_set_value(data->ChannelAdjustment[i],
CFG->chanMul[i]);
- gtk_adjustment_set_value(data->ZoomAdjustment, CFG->Zoom);
uf_combo_box_set_data(data->BitDepthCombo,
&CFG->profile[out_profile][CFG->profileIndex[out_profile]].BitDepth);
@@ -1472,13 +1475,6 @@
(int)(MAX(CFG->grayscaleMixer[2], 0) / max * 255));
gtk_label_set_markup(data->GrayscaleMixerColor, tmp);
- if ( fabs(data->shrink-floor(data->shrink+0.0005))<0.0005 ) {
- CFG->shrink = floor(data->shrink+0.0005);
- CFG->size = 0;
- } else {
- CFG->shrink = 1;
- CFG->size = floor(MAX(data->height, data->width)+0.5);
- }
data->FreezeDialog = FALSE;
update_shrink_ranges(data);
render_preview(data);
@@ -1838,38 +1834,6 @@
return TRUE;
}
-static void preview_convert_image_raw(ufraw_data *uf, UFRawPhase phase)
-{
- preview_data *data = uf->Images[phase].producer_data;
- gchar buf[20];
-
- ufraw_developer_prepare(uf, display_developer); /* for rgbWB */
- ufraw_convert_image_raw(uf, phase);
- g_snprintf(buf, sizeof (buf), "%d", data->UF->hotpixels);
- gtk_label_set_text(data->HotpixelCount, buf);
-}
-
-static void preview_convert_image_first(ufraw_data *uf, UFRawPhase phase)
-{
- preview_data *data = uf->Images[phase].producer_data;
- int shrinkSave = CFG->shrink;
- int sizeSave = CFG->size;
- CFG->shrink = zoom_to_scale(CFG->Zoom);
- if (CFG->shrink==0) {
- int cropHeight = data->UF->conf->CropY2 - data->UF->conf->CropY1;
- int cropWidth = data->UF->conf->CropX2 - data->UF->conf->CropX1;
- int cropSize = MAX(cropHeight, cropWidth);
- CFG->size = MIN(CFG->Zoom, 100.0) / 100.0 * cropSize;
- } else {
- CFG->size = 0;
- }
- ufraw_developer_prepare(uf, display_developer); /* for rgbWB */
- ufraw_convert_image_first(uf, phase);
- ufraw_rotate_image_buffer(&uf->Images[phase], uf->conf->rotationAngle);
- CFG->shrink = shrinkSave;
- CFG->size = sizeSave;
-}
-
static void update_shrink_ranges(preview_data *data)
{
if (data->FreezeDialog) return;
@@ -1877,27 +1841,24 @@
int croppedWidth = CFG->CropX2 - CFG->CropX1;
int croppedHeight = CFG->CropY2 - CFG->CropY1;
- if (CFG->size > 0) {
+ if ( fabs(data->shrink-floor(data->shrink+0.0005))<0.0005 ) {
+ data->shrink = floor(data->shrink+0.0005);
+ data->height = croppedHeight / data->shrink;
+ data->width = croppedWidth / data->shrink;
+ } else {
+ int size = floor(MAX(data->height, data->width)+0.5);
if (croppedHeight > croppedWidth) {
- data->height = CFG->size;
- data->width = CFG->size * croppedWidth / croppedHeight;
- data->shrink = (double)croppedHeight / CFG->size;
+ data->height = size;
+ data->width = size * croppedWidth / croppedHeight;
+ data->shrink = (double)croppedHeight / size;
} else {
- data->width = CFG->size;
- data->height = CFG->size * croppedHeight / croppedWidth;
- data->shrink = (double)croppedWidth / CFG->size;
- }
- } else {
- if (CFG->shrink<1) {
- ufraw_message(UFRAW_ERROR, _("Fatal Error: uf->conf->shrink<1"));
- CFG->shrink = 1;
+ data->width = size;
+ data->height = size * croppedHeight / croppedWidth;
+ data->shrink = (double)croppedWidth / size;
}
- data->height = croppedHeight / CFG->shrink;
- data->width = croppedWidth / CFG->shrink;
- data->shrink = CFG->shrink;
}
- gtk_spin_button_set_range(data->HeightSpin, 0, croppedHeight);
- gtk_spin_button_set_range(data->WidthSpin, 0, croppedWidth);
+ gtk_spin_button_set_range(data->HeightSpin, 10, croppedHeight);
+ gtk_spin_button_set_range(data->WidthSpin, 10, croppedWidth);
gtk_adjustment_set_value(data->ShrinkAdjustment, data->shrink);
gtk_adjustment_set_value(data->HeightAdjustment, data->height);
gtk_adjustment_set_value(data->WidthAdjustment, data->width);
@@ -2014,6 +1975,16 @@
return;
double oldZoom = CFG->Zoom;
CFG->Zoom = newZoom;
+ // Set shrink/size values for preview rendering
+ CFG->shrink = zoom_to_scale(CFG->Zoom);
+ if (CFG->shrink==0) {
+ int cropHeight = data->UF->conf->CropY2 - data->UF->conf->CropY1;
+ int cropWidth = data->UF->conf->CropX2 - data->UF->conf->CropX1;
+ int cropSize = MAX(cropHeight, cropWidth);
+ CFG->size = MIN(CFG->Zoom, 100.0) / 100.0 * cropSize;
+ } else {
+ CFG->size = 0;
+ }
render_status_text(data);
if (oldZoom>=100.0 && newZoom>=100.0) {
gtk_image_view_set_zoom(GTK_IMAGE_VIEW(data->PreviewWidget),
@@ -2653,8 +2624,8 @@
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
CFG->grayscaleMode = i;
- update_scales(data);
ufraw_invalidate_layer(data->UF, ufraw_develop_phase);
+ update_scales(data);
(void)user_data;
}
@@ -3260,9 +3231,8 @@
gtk_entry_set_text(entry, conf_default.remoteGimpCommand);
}
-static void options_dialog(GtkWidget *widget, gpointer user_data)
+static void options_dialog(preview_data *data)
{
- preview_data *data = get_preview_data(widget);
GtkWidget *optionsDialog, *profileTable[profile_types];
GtkWidget *notebook, *label, *page, *button, *text, *box, *image;
GtkTable *baseCurveTable, *curveTable;
@@ -3270,7 +3240,6 @@
char txt[max_name], *buf;
long i, j, response;
- user_data = user_data;
if (data->FreezeDialog) return;
data->OptionsChanged = FALSE;
int saveBaseCurveIndex = CFG->BaseCurveIndex;
@@ -3279,7 +3248,7 @@
for (i=0; i<profile_types; i++)
saveProfileIndex[i] = CFG->profileIndex[i];
optionsDialog = gtk_dialog_new_with_buttons(_("UFRaw options"),
- GTK_WINDOW(gtk_widget_get_toplevel(widget)),
+ GTK_WINDOW(gtk_widget_get_toplevel(data->PreviewWidget)),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
@@ -3706,7 +3675,21 @@
long response = UFRAW_NO_RESPONSE;
int status = UFRAW_SUCCESS;
+ // Switch from preview shrink/size to final shrink/size
+ int shrinkSave = CFG->shrink;
+ int sizeSave = CFG->size;
+ if ( fabs(data->shrink-floor(data->shrink+0.0005))<0.0005 ) {
+ CFG->shrink = floor(data->shrink+0.0005);
+ CFG->size = 0;
+ } else {
+ CFG->shrink = 1;
+ CFG->size = floor(MAX(data->height, data->width)+0.5);
+ }
switch (type) {
+ case options_button:
+ data->FreezeDialog = FALSE;
+ options_dialog(data);
+ break;
case cancel_button:
response = GTK_RESPONSE_CANCEL;
break;
@@ -3716,7 +3699,8 @@
break;
case save_button:
status = ufraw_save_now(data->UF, widget);
- response = GTK_RESPONSE_OK;
+ if (status == UFRAW_SUCCESS)
+ response = GTK_RESPONSE_OK;
break;
case gimp_button:
if ( ufraw_send_to_gimp(data->UF)==UFRAW_SUCCESS )
@@ -3724,21 +3708,26 @@
break;
case ok_button:
status = (*data->SaveFunc)(data->UF, widget);
- response = GTK_RESPONSE_OK;
+ if (status == UFRAW_SUCCESS)
+ response = GTK_RESPONSE_OK;
}
- // cases that set error status require redrawing of the preview image
- if ( status!=UFRAW_SUCCESS ) {
- preview_progress(widget, "", 0);
- ufraw_invalidate_layer(data->UF, ufraw_raw_phase);
- } else if ( response!=UFRAW_NO_RESPONSE ) {
+ if (response != UFRAW_NO_RESPONSE) {
+ // Finish this session
g_object_set_data(G_OBJECT(window), "WindowResponse",
(gpointer)response);
gtk_main_quit();
+ } else {
+ // Restore setting
+ CFG->shrink = shrinkSave;
+ CFG->size = sizeSave;
+ data->FreezeDialog = FALSE;
+ gtk_widget_set_sensitive(data->Controls, TRUE);
+ // cases that set error status require redrawing of the preview image
+ if (status != UFRAW_SUCCESS) {
+ ufraw_invalidate_layer(data->UF, ufraw_raw_phase);
+ render_preview(data);
+ }
}
- data->FreezeDialog = FALSE;
- gtk_widget_set_sensitive(data->Controls, TRUE);
- if ( status!=UFRAW_SUCCESS )
- render_preview(data);
}
static gboolean control_button_key_press_event(
@@ -4760,10 +4749,11 @@
table = GTK_TABLE(table_with_frame(page, NULL, TRUE));
label = gtk_label_new(_("Shrink factor"));
gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, 0, 0, 0, 0);
- data->ShrinkAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new(CFG->shrink,
+ data->shrink = CFG->shrink;
+ data->ShrinkAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new(data->shrink,
1, 100, 1, 2, 0));
g_object_set_data(G_OBJECT(data->ShrinkAdjustment),
- "Adjustment-Accuracy", (gpointer)0);
+ "Adjustment-Accuracy", (gpointer)3);
data->ShrinkSpin = GTK_SPIN_BUTTON(gtk_spin_button_new(
data->ShrinkAdjustment, 1, 3));
g_object_set_data(G_OBJECT(data->ShrinkAdjustment), "Parent-Widget",
@@ -5406,7 +5396,7 @@
gtk_box_pack_start(hbox, gtk_label_new(_("Options")),
FALSE, FALSE, 0);
g_signal_connect(G_OBJECT(button), "clicked",
- G_CALLBACK(options_dialog), previewWindow);
+ G_CALLBACK(control_button_event), (gpointer)options_button);
gtk_box_pack_start(box, button, FALSE, FALSE, 0);
if (!plugin) {
@@ -5421,7 +5411,7 @@
// Cancel button:
button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
g_signal_connect(G_OBJECT(button), "clicked",
- G_CALLBACK(control_button_event), cancel_button);
+ G_CALLBACK(control_button_event), (gpointer)cancel_button);
gtk_box_pack_start(box, button, FALSE, FALSE, 0);
/* plugin=0 : Normal stand-alone
@@ -5497,18 +5487,21 @@
ufraw_load_raw(uf);
gtk_widget_set_sensitive(data->Controls, TRUE);
- ufraw_image_data *img;
- img = &uf->Images[ufraw_raw_phase];
- img->producer = preview_convert_image_raw;
- img->producer_data = data;
- img = &uf->Images[ufraw_first_phase];
- img->producer = preview_convert_image_first;
- img->producer_data = data;
- ufraw_developer_prepare(uf, display_developer);
+ // Set shrink/size values for preview rendering
+ CFG->shrink = zoom_to_scale(CFG->Zoom);
+ if (CFG->shrink==0) {
+ int cropHeight = data->UF->conf->CropY2 - data->UF->conf->CropY1;
+ int cropWidth = data->UF->conf->CropX2 - data->UF->conf->CropX1;
+ int cropSize = MAX(cropHeight, cropWidth);
+ CFG->size = MIN(CFG->Zoom, 100.0) / 100.0 * cropSize;
+ } else {
+ CFG->size = 0;
+ }
/* Collect raw histogram data */
memset(data->raw_his, 0, sizeof(data->raw_his));
/* minor issue: this triggers the first phase conversion too soon */
+ ufraw_developer_prepare(uf, display_developer);
ufraw_image_data *image = ufraw_rgb_image(data->UF, TRUE, NULL);
for (i=0; i<image->height*image->width; i++) {
guint16 *buf = (guint16*)(image->buffer+i*image->depth);
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
ufraw-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ufraw-cvs