changeset 4:2f11ab3e6047

added option handling; added output for convert; commented all ratio code cause it is not really important now
author meillo@marmaro.de
date Fri, 07 Dec 2007 17:40:08 +0100
parents 6aaba3a61563
children 61e5a1727231
files Makefile callbacks.c callbacks.h interface.c main.c main.h
diffstat 6 files changed, 296 insertions(+), 60 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Wed Dec 05 00:08:39 2007 +0100
+++ b/Makefile	Fri Dec 07 17:40:08 2007 +0100
@@ -19,8 +19,8 @@
 
 
 clean:
-	rm *.o
-	rm ${PACKAGE}
+	rm -f *.o
+	rm -f ${PACKAGE}
 
 
 # end of file
--- a/callbacks.c	Wed Dec 05 00:08:39 2007 +0100
+++ b/callbacks.c	Fri Dec 07 17:40:08 2007 +0100
@@ -5,49 +5,131 @@
 #include "interface.h"
 #include "support.h"
 
-
+/*
 void update_spin_button_ratio(GtkWidget* spinbutton) {
 	g_print("ratio change: %f\n", ratio);
-	/*gtk_spin_button_set_value((spinbutton), gtk_spin_button_get_value(spinbutton));*/
-	/*gtk_spin_button_update(spinbutton);*/
 	on_ratio_w_spinbutton_value_changed(spinbutton, NULL);
 }
 
-void on_ratio_none_activate (GtkMenuItem* menuitem, gpointer user_data) {
-	ratio = (double) 1;
-	update_spin_button_ratio(lookup_widget(cropper_window, "ratio_w_spinbutton"));
-}
-
-
-void on_ratio_square_activate (GtkMenuItem* menuitem, gpointer user_data) {
-	ratio = (double) 1;
-	update_spin_button_ratio(lookup_widget(cropper_window, "ratio_w_spinbutton"));
-}
-
-
-void on_ratio_4x3_activate (GtkMenuItem* menuitem, gpointer user_data) {
-	ratio = (double) 4/3;
-	update_spin_button_ratio(lookup_widget(cropper_window, "ratio_w_spinbutton"));
-}
-
-
-void on_ratio_3x2_activate (GtkMenuItem* menuitem, gpointer user_data) {
-	ratio = (double) 3/2;
-	update_spin_button_ratio(lookup_widget(cropper_window, "ratio_w_spinbutton"));
-}
-
-
-void on_ratio_custom_activate (GtkMenuItem* menuitem, gpointer user_data) {
-	ratio = (double) gtk_spin_button_get_value_as_int(lookup_widget(cropper_window, "ratio_w_spinbutton")) / gtk_spin_button_get_value_as_int(lookup_widget(cropper_window, "ratio_h_spinbutton"));
-	update_spin_button_ratio(lookup_widget(cropper_window, "ratio_w_spinbutton"));
-}
-
 
 
 
 
+void on_ratio_none_activate (GtkMenuItem* menuitem, gpointer user_data) {
+	ratio = 1;
+	update_spin_button_ratio(lookup_widget(cropper_window, "ratio_w_spinbutton"));
+}
+
+
+void on_ratio_square_activate (GtkMenuItem* menuitem, gpointer user_data) {
+	ratio = 1;
+	update_spin_button_ratio(lookup_widget(cropper_window, "ratio_w_spinbutton"));
+}
+
+
+void on_ratio_4x3_activate (GtkMenuItem* menuitem, gpointer user_data) {
+	ratio = 4.0/3.0;
+	update_spin_button_ratio(lookup_widget(cropper_window, "ratio_w_spinbutton"));
+}
+
+
+void on_ratio_3x2_activate (GtkMenuItem* menuitem, gpointer user_data) {
+	ratio = 1.5;
+	update_spin_button_ratio(lookup_widget(cropper_window, "ratio_w_spinbutton"));
+}
+
+
+void on_ratio_custom_activate (GtkMenuItem* menuitem, gpointer user_data) {
+	ratio = gtk_spin_button_get_value(lookup_widget(cropper_window, "ratio_w_spinbutton")) / gtk_spin_button_get_value(lookup_widget(cropper_window, "ratio_h_spinbutton"));
+	update_spin_button_ratio(lookup_widget(cropper_window, "ratio_w_spinbutton"));
+}
+*/
+
+
+
+
+
+
+
+
+
+/*
+static void ratio_optionmenu_changed_cb (GtkOptionMenu* optionmenu, gpointer unser_data) {
+	int      idx = gtk_option_menu_get_history (optionmenu);
+	int      w = 1, h = 1;
+	gboolean use_ratio = TRUE;
+
+	switch (idx) {
+		case GTH_CROP_RATIO_NONE:
+			use_ratio = FALSE;
+			break;
+		case GTH_CROP_RATIO_SQUARE:
+			w = h = 1;
+			break;
+		case GTH_CROP_RATIO_IMAGE:
+			w = lookup_widget(cropper_window, "image_width");
+			h = lookup_widget(cropper_window, "image_height");
+			break;
+		case GTH_CROP_RATIO_DISPLAY:
+			w = lookup_widget(cropper_window, "display_width");
+			h = lookup_widget(cropper_window, "display_height");
+			break;
+		case GTH_CROP_RATIO_4_3:
+			w = 4;
+			h = 3;
+			break;
+		case GTH_CROP_RATIO_4_6:
+			w = 4;
+			h = 6;
+			break;
+		case GTH_CROP_RATIO_CUSTOM:
+		default:
+			w = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (lookup_widget(cropper_window, "ratio_w_spinbutton")));
+			h = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (lookup_widget(cropper_window, "ratio_h_spinbutton")));
+			break;
+	}
+
+	gtk_widget_set_sensitive (lookup_widget(cropper_window, "custom_ratio_box"), idx == GTH_CROP_RATIO_CUSTOM);
+	set_spin_value (cropper_window, lookup_widget(cropper_window, "ratio_w_spinbutton"), w);
+	set_spin_value (cropper_window, lookup_widget(cropper_window, "ratio_h_spinbutton"), h);
+
+	gth_image_selector_set_ratio (GTH_IMAGE_SELECTOR (lookup_widget(cropper_window, "crop_image")), use_ratio, (double) w / h);
+}
+
+
+static void ratio_value_changed_cb (GtkSpinButton* spin, gpointer unser_data) {
+	int w, h;
+
+	w = gtk_spin_button_get_value_as_int (lookup_widget(cropper_window, "ratio_w_spinbutton"));
+	h = gtk_spin_button_get_value_as_int (lookup_widget(cropper_window, "ratio_h_spinbutton"));
+			
+	gth_image_selector_set_ratio (GTH_IMAGE_SELECTOR (lookup_widget(cropper_window, "crop_image")), TRUE, (double) w / h);
+}
+
+
+static void ratio_swap_button_cb (GtkButton* button, gpointer unser_data) {
+	int w, h;
+
+	w = gtk_spin_button_get_value_as_int(lookup_widget(cropper_window, "ratio_w_spinbutton"));
+	h = gtk_spin_button_get_value_as_int(lookup_widget(cropper_window, "ratio_h_spinbutton"));
+
+	set_spin_value(cropper_window, lookup_widget(cropper_window, "ratio_w_spinbutton"), h);
+	set_spin_value(cropper_window, lookup_widget(cropper_window, "ratio_h_spinbutton"), w);
+
+	gth_image_selector_set_ratio(GTH_IMAGE_SELECTOR (lookup_widget(cropper_window, "crop_image")), TRUE, (double) h / w);
+}
+
+*/
+
+
+
+
+
+
+
+
+/*
 void on_ratio_w_spinbutton_value_changed (GtkSpinButton* spinbutton, gpointer user_data) {
-	/*gtk_spin_button_set_value(lookup_widget(cropper_window, "ratio_h_spinbutton"), gtk_spin_button_get_value(spinbutton) / ratio);*/
 	g_print("spinbutton W - ratio: %f\n", ratio);
 	gtk_spin_button_set_value(lookup_widget(cropper_window, "ratio_h_spinbutton"), gtk_spin_button_get_value(spinbutton) / ratio);
 }
@@ -62,7 +144,6 @@
 
 
 void on_ratio_h_spinbutton_value_changed (GtkSpinButton* spinbutton, gpointer user_data) {
-	/*gtk_spin_button_set_value(lookup_widget(cropper_window, "ratio_w_spinbutton"), gtk_spin_button_get_value(spinbutton) * ratio);*/
 	g_print("spinbutton H - ratio: %f\n", ratio);
 	gtk_spin_button_set_value(lookup_widget(cropper_window, "ratio_w_spinbutton"), gtk_spin_button_get_value(spinbutton) * ratio);
 
@@ -76,16 +157,26 @@
 	gtk_spin_button_update(lookup_widget(cropper_window, "ratio_w_spinbutton"));
 
 }
-
-
+*/
 
 
 
-gboolean on_cropper_window_delete_event (GtkWidget* widget, GdkEvent *event, gpointer user_data) {
-	/* g_print("thanks for using the program - visit http://prog.marmaro.de\n"); */
-	return FALSE;
+void on_crop_clicked(GtkButton* button, gpointer user_data) {
+	char crop_call[256];
+
+	sprintf(crop_call, "echo \"convert -crop %ix%i+%i+%i %s cropped_%s\"",
+		gtk_spin_button_get_value_as_int(lookup_widget(cropper_window, "crop_width_spinbutton")),
+		gtk_spin_button_get_value_as_int(lookup_widget(cropper_window, "crop_height_spinbutton")),
+		gtk_spin_button_get_value_as_int(lookup_widget(cropper_window, "crop_x_spinbutton")),
+		gtk_spin_button_get_value_as_int(lookup_widget(cropper_window, "crop_y_spinbutton")),
+		image_filename,
+		image_filename
+	);
+	system(crop_call);
+	gtk_main_quit();
 }
 
+
 void on_cropper_window_destroy (GtkObject* object, gpointer user_data) {
 	gtk_main_quit();
 }
--- a/callbacks.h	Wed Dec 05 00:08:39 2007 +0100
+++ b/callbacks.h	Fri Dec 07 17:40:08 2007 +0100
@@ -1,19 +1,32 @@
+#ifndef _CALLBACKS_H_
+#define _CALLBACKS_H_
+
 #include <gtk/gtk.h>
 
 double ratio;
 
+/*
 void on_ratio_none_activate(GtkMenuItem* menuitem, gpointer user_data);
 void on_ratio_square_activate(GtkMenuItem* menuitem, gpointer user_data);
 void on_ratio_4x3_activate(GtkMenuItem* menuitem, gpointer user_data);
 void on_ratio_3x2_activate(GtkMenuItem* menuitem, gpointer user_data);
 void on_ratio_custom_activate(GtkMenuItem* menuitem, gpointer user_data);
 
+static void ratio_optionmenu_changed_cb (GtkOptionMenu* optionmenu, gpointer unser_data);
+static void ratio_value_changed_cb (GtkSpinButton* spin, gpointer unser_data);
+static void ratio_swap_button_cb (GtkButton* button, gpointer unser_data);
+
 void on_ratio_w_spinbutton_value_changed(GtkSpinButton* spinbutton, gpointer user_data);
 void on_ratio_w_spinbutton_change_value(GtkSpinButton* spinbutton, GtkScrollType scroll, gpointer user_data);
 void on_ratio_h_spinbutton_change_value(GtkSpinButton* spinbutton, GtkScrollType scroll, gpointer user_data);
 void on_ratio_h_spinbutton_value_changed(GtkSpinButton* spinbutton, gpointer user_data);
 void on_ratio_swap_button_clicked(GtkButton* button, gpointer user_data);
+*/
+
+void on_crop_clicked(GtkButton* button, gpointer user_data);
 
 void on_cropper_window_destroy(GtkObject* object, gpointer user_data);
-gboolean on_cropper_window_delete_event(GtkWidget* widget, GdkEvent *event, gpointer user_data);
+/*gboolean on_cropper_window_delete_event(GtkWidget* widget, GdkEvent *event, gpointer user_data);*/
 
+
+#endif
--- a/interface.c	Wed Dec 05 00:08:39 2007 +0100
+++ b/interface.c	Fri Dec 07 17:40:08 2007 +0100
@@ -81,6 +81,13 @@
   GtkWidget *image3;
   GtkWidget *crop_zoom_fit_button;
   GtkWidget *image1;
+	GtkWidget *dialog_action_area1;
+	GtkWidget *crop_okbutton;
+	GtkWidget *alignment1;
+	GtkWidget *hbox11;
+	GtkWidget *crop_image;
+	GtkWidget *label12;
+
 
   cropper_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   gtk_widget_set_name (cropper_window, "cropper_window");
@@ -400,48 +407,148 @@
 
 
 
+/*
+  okay_box = gtk_hbox_new (FALSE, 0);
+  gtk_widget_set_name (okay_box, "okay_box");
+  gtk_widget_show (okay_box);
+  gtk_box_pack_end (GTK_BOX (hbox16), okay_box, FALSE, TRUE, 0);
+*/
+
+	crop_okbutton = gtk_button_new (); 
+	gtk_widget_set_name (crop_okbutton, "crop_okbutton"); 
+	gtk_widget_show (crop_okbutton); 
+	gtk_box_pack_end (GTK_BOX (dialog_vbox1), crop_okbutton, FALSE, FALSE, 0); 
+	GTK_WIDGET_SET_FLAGS (crop_okbutton, GTK_CAN_DEFAULT); 
+
+	alignment1 = gtk_alignment_new (0.5, 0.5, 0, 0); 
+	gtk_widget_set_name (alignment1, "alignment1"); 
+	gtk_widget_show (alignment1); 
+	gtk_container_add (GTK_CONTAINER (crop_okbutton), alignment1); 
+
+	hbox11 = gtk_hbox_new (FALSE, 2); 
+	gtk_widget_set_name (hbox11, "hbox11"); 
+	gtk_widget_show (hbox11); 
+	gtk_container_add (GTK_CONTAINER (alignment1), hbox11); 
+
+	crop_image = gtk_image_new_from_stock ("gtk-ok", GTK_ICON_SIZE_BUTTON); 
+	gtk_widget_set_name (crop_image, "crop_image"); 
+	gtk_widget_show (crop_image); 
+	gtk_box_pack_start (GTK_BOX (hbox11), crop_image, FALSE, FALSE, 0); 
+
+	label12 = gtk_label_new_with_mnemonic ("_Crop"); 
+	gtk_widget_set_name (label12, "label12"); 
+	gtk_widget_show (label12); 
+	gtk_box_pack_start (GTK_BOX (hbox11), label12, FALSE, FALSE, 0); 
 
 
 
-  g_signal_connect ((gpointer) cropper_window, "delete_event",
-                    G_CALLBACK (on_cropper_window_delete_event),
-                    NULL);
-  g_signal_connect ((gpointer) cropper_window, "destroy",
+
+
+/* destroy */
+  g_signal_connect (G_OBJECT (cropper_window), "destroy",
                     G_CALLBACK (on_cropper_window_destroy),
                     NULL);
 
-  g_signal_connect ((gpointer) ratio_w_spinbutton, "value_changed",
+
+/* crop */
+  g_signal_connect (G_OBJECT (crop_okbutton), "clicked",
+                    G_CALLBACK (on_crop_clicked),
+                    NULL);
+
+
+
+/* aspect ratio */
+/*
+  g_signal_connect (G_OBJECT (ratio_w_spinbutton), "value_changed",
                     G_CALLBACK (on_ratio_w_spinbutton_value_changed),
                     NULL);
-  g_signal_connect ((gpointer) ratio_w_spinbutton, "change_value",
-                    G_CALLBACK (on_ratio_w_spinbutton_change_value),
-                    NULL);
-  g_signal_connect ((gpointer) ratio_swap_button, "clicked",
+  g_signal_connect (G_OBJECT (ratio_swap_button), "clicked",
                     G_CALLBACK (on_ratio_swap_button_clicked),
                     NULL);
-  g_signal_connect ((gpointer) ratio_h_spinbutton, "change_value",
-                    G_CALLBACK (on_ratio_h_spinbutton_change_value),
-                    NULL);
-  g_signal_connect ((gpointer) ratio_h_spinbutton, "value_changed",
+  g_signal_connect (G_OBJECT (ratio_h_spinbutton), "value_changed",
                     G_CALLBACK (on_ratio_h_spinbutton_value_changed),
                     NULL);
 
-  g_signal_connect ((gpointer) ratio_none, "activate",
+  g_signal_connect (G_OBJECT (ratio_none), "activate",
                     G_CALLBACK (on_ratio_none_activate),
                     NULL);
-  g_signal_connect ((gpointer) ratio_square, "activate",
+  g_signal_connect (G_OBJECT (ratio_square), "activate",
                     G_CALLBACK (on_ratio_square_activate),
                     NULL);
-  g_signal_connect ((gpointer) ratio_4x3, "activate",
+  g_signal_connect (G_OBJECT (ratio_4x3), "activate",
                     G_CALLBACK (on_ratio_4x3_activate),
                     NULL);
-  g_signal_connect ((gpointer) ratio_3x2, "activate",
+  g_signal_connect (G_OBJECT (ratio_3x2), "activate",
                     G_CALLBACK (on_ratio_3x2_activate),
                     NULL);
-  g_signal_connect ((gpointer) ratio_custom, "activate",
+  g_signal_connect (G_OBJECT (ratio_custom), "activate",
                     G_CALLBACK (on_ratio_custom_activate),
                     NULL);
 
+g_signal_connect (G_OBJECT (lookup_widget(cropper_window, "ratio_optionmenu")), "changed",
+	G_CALLBACK (ratio_optionmenu_changed_cb),
+	NULL);
+g_signal_connect (G_OBJECT (lookup_widget(cropper_window, "ratio_w_spinbutton")), "value_changed",
+	G_CALLBACK (ratio_value_changed_cb),
+	NULL);
+g_signal_connect (G_OBJECT (lookup_widget(cropper_window, "ratio_h_spinbutton")), "value_changed",
+	G_CALLBACK (ratio_value_changed_cb),
+	NULL);
+g_signal_connect (G_OBJECT (lookup_widget(cropper_window, "ratio_swap_button")), "clicked",
+	G_CALLBACK (ratio_swap_button_cb),
+	NULL);
+*/
+
+
+/* selection */
+/*
+g_signal_connect (G_OBJECT (lookup_widget(cropper_window, "crop_x_spinbutton")), "value_changed",
+	G_CALLBACK (selection_x_value_changed_cb),
+	data);
+g_signal_connect (G_OBJECT (lookup_widget(cropper_window, "crop_y_spinbutton")), "value_changed",
+	G_CALLBACK (selection_y_value_changed_cb),
+	data);
+g_signal_connect (G_OBJECT (lookup_widget(cropper_window, "crop_width_spinbutton")), "value_changed",
+	G_CALLBACK (selection_width_value_changed_cb),
+	data);
+g_signal_connect (G_OBJECT (lookup_widget(cropper_window, "crop_height_spinbutton")), "value_changed",
+	G_CALLBACK (selection_height_value_changed_cb),
+	data);
+g_signal_connect (G_OBJECT (lookup_widget(cropper_window, "crop_image")), "selection_changed",
+	G_CALLBACK (selection_changed_cb),
+	data);
+*/
+
+
+/* zoom */
+/*
+g_signal_connect (G_OBJECT (zoom_in_button), "clicked",
+	G_CALLBACK (zoom_in_button_clicked_cb),
+	data);
+g_signal_connect (G_OBJECT (zoom_out_button), "clicked",
+	G_CALLBACK (zoom_out_button_clicked_cb),
+	data);
+g_signal_connect (G_OBJECT (zoom_100_button), "clicked",
+	G_CALLBACK (zoom_100_button_clicked_cb),
+	data);
+g_signal_connect (G_OBJECT (zoom_fit_button), "clicked",
+	G_CALLBACK (zoom_fit_button_clicked_cb),
+	data);
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
   /* Store pointers to all widgets, for use by lookup_widget(). */
   GLADE_HOOKUP_OBJECT_NO_REF (cropper_window, cropper_window, "cropper_window");
@@ -498,6 +605,13 @@
   GLADE_HOOKUP_OBJECT (cropper_window, image3, "image3");
   GLADE_HOOKUP_OBJECT (cropper_window, crop_zoom_fit_button, "crop_zoom_fit_button");
   GLADE_HOOKUP_OBJECT (cropper_window, image1, "image1");
+	/*GLADE_HOOKUP_OBJECT_NO_REF (cropper_window, dialog_action_area1, "dialog_action_area1"); */
+	GLADE_HOOKUP_OBJECT (cropper_window, crop_okbutton, "crop_okbutton"); 
+	GLADE_HOOKUP_OBJECT (cropper_window, alignment1, "alignment1");
+	GLADE_HOOKUP_OBJECT (cropper_window, hbox11, "hbox11");
+	GLADE_HOOKUP_OBJECT (cropper_window, crop_image, "crop_image");
+	GLADE_HOOKUP_OBJECT (cropper_window, label12, "label12");
+
 
   return cropper_window;
 }
--- a/main.c	Wed Dec 05 00:08:39 2007 +0100
+++ b/main.c	Fri Dec 07 17:40:08 2007 +0100
@@ -7,6 +7,23 @@
 
 int main (int argc, char *argv[]) {
 
+	/* printf("argc: %i\nargv[0]: %s\nargv[1]: %s\nargv[2]: %s\n", argc, argv[0], argv[1], argv[2]); */
+
+	/* commandline option handling */
+	if (argc == 2) {
+		if (strcmp(argv[1], "--version") == 0) {
+			g_print("cropper - a crop frontend for convert\nversion 0.1\nhttp://prog.marmaro.de\n");
+			return(0);
+		} else {
+			image_filename = argv[1];
+		}
+	} else {
+		g_print("usage: %s <image>\n", argv[0]);
+		return(1);
+	}
+
+
+
   gtk_set_locale ();
   gtk_init (&argc, &argv);
 
--- a/main.h	Wed Dec 05 00:08:39 2007 +0100
+++ b/main.h	Fri Dec 07 17:40:08 2007 +0100
@@ -4,5 +4,6 @@
 #include <gtk/gtk.h>
 
 GtkWidget* cropper_window;
+char* image_filename;
 
 #endif