view callbacks.c @ 14:da18f2d4f92f

removed all buttons and stuff from the window; cleaned up
author meillo@marmaro.de
date Thu, 04 Mar 2010 18:31:28 +0100
parents 13bc21684b8a
children 7dbf3879939a
line wrap: on
line source

#include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gdk/gdkkeysyms.h>
#include "main.h"
#include "callbacks.h"
#include "support.h"

int image_width;
int image_height;
float inc = 0.3;
float zoom = 1.0;


/*
void
update_spin_button_ratio(GtkWidget* spinbutton)
{
	g_print("ratio change: %f\n", ratio);
	on_ratio_w_spinbutton_value_changed(spinbutton, NULL);
}


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)
{
	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);
}


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)
{
	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);

}


void
on_ratio_swap_button_clicked(GtkButton* button, gpointer user_data)
{
	
	ratio = 1.0 / ratio;
	gtk_spin_button_set_value(lookup_widget(cropper_window, "ratio_w_spinbutton"),
	                          gtk_spin_button_get_value(lookup_widget(cropper_window,
	                          "ratio_h_spinbutton")));
	gtk_spin_button_update(lookup_widget(cropper_window, "ratio_w_spinbutton"));

}
*/


void
update_title(char* zoom)
{
	char title[128];
	snprintf(title, 128, "cropper (%s) %dx%d+%d+%d", zoom, w, h, x, y);
	gtk_window_set_title(GTK_WINDOW(cropper_window), title);
}


/* zoom */
void
set_zoom()
{
	static GdkPixbuf* pixbuf_new;
	g_object_unref(pixbuf_new);

	pixbuf_new = gdk_pixbuf_scale_simple(image_buffer, image_width*zoom, image_height*zoom,
	                                     GDK_INTERP_BILINEAR);
	gtk_image_set_from_pixbuf((GtkImage*) lookup_widget(cropper_window, "image_area"), pixbuf_new);
}

void
on_zoom_in_button_clicked(GtkObject* object, gpointer user_data)
{
	zoom *= 1 + inc;
	set_zoom();
}

void
on_zoom_out_button_clicked(GtkObject* object, gpointer user_data)
{
	zoom *= 1 - inc;
	set_zoom();
}

void
on_zoom_100_button_clicked(GtkObject* object, gpointer user_data)
{
	zoom = 1.0;
	set_zoom();
}

void
on_zoom_fit_button_clicked(GtkObject* object, gpointer user_data)
{
	int w, h;
	float zw, zh;
	GtkWidget* image_a;

	image_a = (GtkWidget*) lookup_widget(cropper_window, "image_area");
	gdk_drawable_get_size(image_a->window, &w, &h);

	zw = w*1.0 / image_width;
	zh = h*1.0 / image_height;

	zoom = (zw < zh) ? zw : zh;
	set_zoom();
}







void
crop(void)
{
	char crop_call[256];

	sprintf(crop_call, "echo \"convert -crop %ix%i+%i+%i %s cropped_%s\"",
		gtk_spin_button_get_value_as_int((GtkSpinButton*) lookup_widget(cropper_window,
		                                 "crop_width_spinbutton")),
		gtk_spin_button_get_value_as_int((GtkSpinButton*) lookup_widget(cropper_window,
		                                 "crop_height_spinbutton")),
		gtk_spin_button_get_value_as_int((GtkSpinButton*) lookup_widget(cropper_window,
		                                 "crop_x_spinbutton")),
		gtk_spin_button_get_value_as_int((GtkSpinButton*) lookup_widget(cropper_window,
		                                 "crop_y_spinbutton")),
		image_filename,
		image_filename
	);
	system(crop_call);
	gtk_main_quit();
}


void
on_cropper_window_create(GtkObject* object, gpointer user_data)
{
	image_width = gdk_pixbuf_get_width(image_buffer);
	image_height = gdk_pixbuf_get_height(image_buffer);

	/*
	image_buffer = gdk_pixbuf_new_from_file(image_filename, NULL);
	image_area = gtk_image_new_from_pixbuf(image_buffer);

	int w, h;
	GtkWidget* image_a;

	image_a = (GtkWidget*) lookup_widget(cropper_window, "image_area");
	gdk_drawable_get_size(image_a->window, &w, &h);

	image_width = w - 200;
	image_height = h - 150;
	set_zoom();
	*/
}

void
on_cropper_window_destroy(GtkObject* object, gpointer user_data)
{
	gtk_main_quit();
}




gboolean
on_key_press(GtkWidget* window, GdkEventKey* pKey, gpointer userdata)
{
	if (pKey->type != GDK_KEY_PRESS) {
		return FALSE;
	}
	switch (pKey->keyval) {
	case GDK_q:
		gtk_main_quit();
		break;
	case GDK_Return:
		crop();
		break;
	case GDK_plus:
		on_zoom_in_button_clicked(NULL, userdata);
		break;
	case GDK_minus:
		on_zoom_out_button_clicked(NULL, userdata);
		break;
	case GDK_0:
		on_zoom_100_button_clicked(NULL, userdata);
		break;
	case GDK_f:
		on_zoom_fit_button_clicked(NULL, userdata);
		break;
	}
	return TRUE;
}