Author: post
Date: 2013-03-26 13:08:39 +0100 (Tue, 26 Mar 2013)
New Revision: 4335
Modified:
trunk/src/application.h
trunk/src/rs-actions.c
Log:
Allow copy&paste of image transformations.
Modified: trunk/src/application.h
===================================================================
--- trunk/src/application.h 2013-03-26 12:04:58 UTC (rev 4334)
+++ trunk/src/application.h 2013-03-26 12:08:39 UTC (rev 4335)
@@ -72,6 +72,9 @@
RSSettings *settings_buffer;
RSDcpFile *dcp_buffer;
RSIccProfile *icc_buffer;
+ RS_RECT crop_buffer;
+ gdouble angle_buffer;
+ guint orientation_buffer;
gint current_setting;
RS_QUEUE *queue;
RSStore *store;
Modified: trunk/src/rs-actions.c
===================================================================
--- trunk/src/rs-actions.c 2013-03-26 12:04:58 UTC (rev 4334)
+++ trunk/src/rs-actions.c 2013-03-26 12:08:39 UTC (rev 4335)
@@ -480,7 +480,7 @@
MASK_CHANNELMIXER|MASK_TCA|MASK_VIGNETTING|MASK_CURVE;
/* Widgets for copy dialog */
-static GtkWidget *cb_profile, *cb_exposure, *cb_saturation, *cb_hue,
*cb_contrast, *cb_whitebalance, *cb_curve, *cb_sharpen, *cb_denoise_luma,
*cb_denoise_chroma, *cb_channelmixer, *cb_tca, *cb_vignetting, *b_all_none;
+static GtkWidget *cb_profile, *cb_exposure, *cb_saturation, *cb_hue,
*cb_contrast, *cb_whitebalance, *cb_curve, *cb_sharpen, *cb_denoise_luma,
*cb_denoise_chroma, *cb_channelmixer, *cb_tca, *cb_vignetting,*cb_transform,
*b_all_none;
static void
all_none_clicked(GtkButton *button, gpointer user_data)
@@ -513,6 +513,7 @@
cb_tca = gtk_check_button_new_with_label (_("TCA"));
cb_vignetting = gtk_check_button_new_with_label (_("Vignetting"));
cb_curve = gtk_check_button_new_with_label (_("Curve"));
+ cb_transform = gtk_check_button_new_with_label (_("Transform"));
b_all_none = gtk_button_new_with_label (_("Select All/None"));
g_signal_connect(b_all_none, "clicked", G_CALLBACK(all_none_clicked),
NULL);
@@ -533,6 +534,7 @@
gtk_box_pack_start (GTK_BOX (cb_box), cb_tca, FALSE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (cb_box), cb_vignetting, FALSE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (cb_box), cb_curve, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (cb_box), cb_transform, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (cb_box), b_all_none, FALSE, TRUE, 0);
dialog = gui_dialog_make_from_widget(GTK_STOCK_DIALOG_QUESTION,
_("Select Settings to Copy"), cb_box);
@@ -558,6 +560,7 @@
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_tca), !!(mask &
MASK_TCA));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_vignetting), !!(mask
& MASK_VIGNETTING));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_curve), !!(mask &
MASK_CURVE));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_transform), !!(mask &
MASK_TRANSFORM));
}
static gint
@@ -590,6 +593,8 @@
mask |= MASK_VIGNETTING;
if (GTK_TOGGLE_BUTTON(cb_curve)->active)
mask |= MASK_CURVE;
+ if (GTK_TOGGLE_BUTTON(cb_transform)->active)
+ mask |= MASK_TRANSFORM;
return mask;
}
@@ -615,6 +620,12 @@
rs_settings_copy(rs->photo->settings[rs->current_setting],
MASK_ALL, rs->settings_buffer);
rs->dcp_buffer = rs_photo_get_dcp_profile(rs->photo);
rs->icc_buffer = rs_photo_get_icc_profile(rs->photo);
+ RS_RECT *c = rs_photo_get_crop(rs->photo);
+ rs->crop_buffer.x1 = c->x1;rs->crop_buffer.x2 = c->x2;
+ rs->crop_buffer.y1 = c->y1;rs->crop_buffer.y2 = c->y2;
+ rs->angle_buffer = rs->photo->angle;
+ rs->orientation_buffer = rs->photo->orientation;
+
gui_status_notify(_("Copied settings"));
}
gtk_widget_destroy (dialog);
@@ -631,7 +642,7 @@
if (rs->settings_buffer)
{
rs_conf_get_integer(CONF_PASTE_MASK, &mask);
- if(mask > 0)
+ if(mask != 0)
{
RSMetadata *metadata;
RS_PHOTO *photo;
@@ -649,19 +660,27 @@
photo = rs_photo_new();
photo->filename =
g_strdup(g_list_nth_data(selected, cur));
- /* Make sure we rotate this right */
- metadata =
rs_metadata_new_from_file(photo->filename);
- switch (metadata->orientation)
+ if (mask & MASK_TRANSFORM)
{
- case 90:
ORIENTATION_90(photo->orientation);
- break;
- case 180:
ORIENTATION_180(photo->orientation);
- break;
- case 270:
ORIENTATION_270(photo->orientation);
- break;
+ photo->orientation =
rs->orientation_buffer;
+ rs_photo_set_angle(photo,
rs->angle_buffer, FALSE);
+ rs_photo_set_crop(photo,
&rs->crop_buffer);
+ } else
+ {
+ /* Make sure we rotate this right */
+ metadata =
rs_metadata_new_from_file(photo->filename);
+ switch (metadata->orientation)
+ {
+ case 90:
ORIENTATION_90(photo->orientation);
+ break;
+ case 180:
ORIENTATION_180(photo->orientation);
+ break;
+ case 270:
ORIENTATION_270(photo->orientation);
+ break;
+ }
+ g_object_unref(metadata);
}
- g_object_unref(metadata);
-
+
new_mask = rs_cache_load(photo);
rs_settings_copy(rs->settings_buffer, mask,
photo->settings[rs->current_setting]);
if (mask & MASK_PROFILE)
@@ -671,18 +690,27 @@
else if (rs->icc_buffer)
rs_photo_set_icc_profile(photo,
rs->icc_buffer);
}
- rs_cache_save(photo, new_mask | mask);
+ rs_cache_save(photo, (new_mask | mask) &
MASK_ALL);
g_object_unref(photo);
}
g_list_free(selected);
/* Apply to current photo */
- if (rs->photo && (mask & MASK_PROFILE))
+ if (rs->photo)
{
- if (rs->dcp_buffer)
- rs_photo_set_dcp_profile(rs->photo,
rs->dcp_buffer);
- else if (rs->icc_buffer)
- rs_photo_set_icc_profile(rs->photo,
rs->icc_buffer);
+ if (mask & MASK_PROFILE)
+ {
+ if (rs->dcp_buffer)
+
rs_photo_set_dcp_profile(rs->photo, rs->dcp_buffer);
+ else if (rs->icc_buffer)
+
rs_photo_set_icc_profile(rs->photo, rs->icc_buffer);
+ }
+ if (mask & MASK_TRANSFORM)
+ {
+ rs->photo->orientation =
rs->orientation_buffer;
+ rs_photo_set_angle(rs->photo,
rs->angle_buffer, FALSE);
+ rs_photo_set_crop(rs->photo,
&rs->crop_buffer);
+ }
}
if (rs->photo)
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit