Mercurial > cropper
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; }