/* Copyright (C) 1999 Southern Gold Development * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gview.h" void setGeneric(GtkWidget *widget, gpointer data, sgImageSetFunc set, sgImageSetFunc get, gint mode) { sgview *view; gfloat val; gint place; GdkImlibColorModifier mod; view = (sgview *) data; val = GTK_ADJUSTMENT (widget)->value; place = val * 256; get (view->currPic, &mod); switch (mode) { case 0: mod.contrast = place; break; case 1: mod.brightness = place; break; case 2: mod.gamma = place; break; default: break; } set (view->currPic, &mod); gdk_imlib_apply_image(view->currPic, GTK_WIDGET (view->draw)->window); } void contrastSet(GtkWidget *widget, gpointer data) { setGeneric(widget, data, (sgImageSetFunc) gdk_imlib_set_image_modifier, (sgImageSetFunc) gdk_imlib_get_image_modifier,0); } void brightSet(GtkWidget *widget, gpointer data) { setGeneric(widget, data, (sgImageSetFunc) gdk_imlib_set_image_modifier, (sgImageSetFunc) gdk_imlib_get_image_modifier,1); } void gammaSet(GtkWidget *widget, gpointer data) { setGeneric(widget, data, (sgImageSetFunc) gdk_imlib_set_image_modifier, (sgImageSetFunc) gdk_imlib_get_image_modifier,2); } void contrastRSet(GtkWidget *widget, gpointer data) { setGeneric(widget, data, (sgImageSetFunc) gdk_imlib_set_image_red_modifier, (sgImageSetFunc) gdk_imlib_get_image_red_modifier,0); } void brightRSet(GtkWidget *widget, gpointer data) { setGeneric(widget, data, (sgImageSetFunc) gdk_imlib_set_image_red_modifier, (sgImageSetFunc) gdk_imlib_get_image_red_modifier,1); } void gammaRSet(GtkWidget *widget, gpointer data) { setGeneric(widget, data, (sgImageSetFunc) gdk_imlib_set_image_red_modifier, (sgImageSetFunc) gdk_imlib_get_image_red_modifier,2); } void contrastBSet(GtkWidget *widget, gpointer data) { setGeneric(widget, data, (sgImageSetFunc) gdk_imlib_set_image_blue_modifier, (sgImageSetFunc) gdk_imlib_get_image_blue_modifier,0); } void brightBSet(GtkWidget *widget, gpointer data) { setGeneric(widget, data, (sgImageSetFunc) gdk_imlib_set_image_blue_modifier, (sgImageSetFunc) gdk_imlib_get_image_blue_modifier,1); } void gammaBSet(GtkWidget *widget, gpointer data) { setGeneric(widget, data, (sgImageSetFunc) gdk_imlib_set_image_blue_modifier, (sgImageSetFunc) gdk_imlib_get_image_blue_modifier,2); } void contrastGSet(GtkWidget *widget, gpointer data) { setGeneric(widget, data, (sgImageSetFunc) gdk_imlib_set_image_green_modifier, (sgImageSetFunc) gdk_imlib_get_image_green_modifier,0); } void brightGSet(GtkWidget *widget, gpointer data) { setGeneric(widget, data, (sgImageSetFunc) gdk_imlib_set_image_green_modifier, (sgImageSetFunc) gdk_imlib_get_image_green_modifier, 1); } void gammaGSet(GtkWidget *widget, gpointer data) { setGeneric(widget, data, (sgImageSetFunc) gdk_imlib_set_image_green_modifier, (sgImageSetFunc) gdk_imlib_get_image_green_modifier, 2); } void createDialog(sgview *view, const gchar *title, GdkImlibColorModifier *mod, GtkSignalFunc setBright, GtkSignalFunc setContrast, GtkSignalFunc setGamma) { GtkWidget *rsp, *fix, *fra, *sca, *lbl, *btn; GtkObject *adj; gfloat val; rsp = gtk_window_new(GTK_WINDOW_DIALOG); gtk_window_set_position(GTK_WINDOW (rsp), GTK_WIN_POS_MOUSE); gtk_widget_set_usize(rsp, 240, 150); gtk_window_set_policy(GTK_WINDOW (rsp), FALSE, FALSE, FALSE); gtk_signal_connect(GTK_OBJECT (rsp), "destroy", (GtkSignalFunc) killDiag, (gpointer) view); gtk_container_border_width(GTK_CONTAINER (rsp), 5); fix = gtk_fixed_new(); gtk_container_add(GTK_CONTAINER (rsp), fix); fra = gtk_frame_new(title); gtk_widget_set_usize(fra, 230, 110); gtk_fixed_put(GTK_FIXED (fix), fra, 0, 0); gtk_widget_show(fra); lbl = gtk_label_new(_("Brightness")); gtk_fixed_put(GTK_FIXED (fix), lbl, 5, 15); gtk_widget_show(lbl); val = mod->brightness / 256.0; adj = gtk_adjustment_new(val, 0.0, 2.0, 0.05, 0.2, 0.2); gtk_signal_connect(GTK_OBJECT (adj), "value-changed", (GtkSignalFunc) setBright, (gpointer) view); sca = gtk_hscale_new(GTK_ADJUSTMENT (adj)); gtk_widget_set_usize(sca, 150, 29); gtk_fixed_put(GTK_FIXED (fix), sca, 70, 15); gtk_widget_show(sca); lbl = gtk_label_new(_("Contrast")); gtk_fixed_put(GTK_FIXED (fix), lbl, 5, 45); gtk_widget_show(lbl); val = mod->contrast / 256.0; adj = gtk_adjustment_new(val, 0.0, 2.0, 0.05, 0.2, 0.2); gtk_signal_connect(GTK_OBJECT (adj), "value-changed", (GtkSignalFunc) setContrast, (gpointer) view); sca = gtk_hscale_new(GTK_ADJUSTMENT (adj)); gtk_widget_set_usize(sca, 150, 29); gtk_fixed_put(GTK_FIXED (fix), sca, 70, 45); gtk_widget_show(sca); lbl = gtk_label_new(_("Gamma")); gtk_fixed_put(GTK_FIXED (fix), lbl, 5, 75); gtk_widget_show(lbl); val = mod->gamma / 256.0; adj = gtk_adjustment_new(val, 0.0, 10.0, 0.1, 1.0, 1.0); gtk_signal_connect(GTK_OBJECT (adj), "value-changed", (GtkSignalFunc) setGamma, (gpointer) view); sca = gtk_hscale_new(GTK_ADJUSTMENT (adj)); gtk_widget_set_usize(sca, 150, 29); gtk_fixed_put(GTK_FIXED (fix), sca, 70, 75); gtk_widget_show(sca); btn = gAddButtonFix(view, (gpointer) rsp, GTK_FIXED (fix), _("Close"), _("Close this window"), (GtkSignalFunc) NULL, 100, 25, 70, 115); gtk_signal_connect_object(GTK_OBJECT (btn), "clicked", (GtkSignalFunc) gtk_widget_destroy, (GtkObject *) rsp); gtk_widget_show(fix); gtk_widget_show(rsp); view->setrsp = rsp; } void redDialog(GtkWidget *widget, gpointer data) { sgview *view; GdkImlibColorModifier mod; view = (sgview *) data; if (view->setrsp) gtk_widget_destroy(view->setrsp); gdk_imlib_get_image_red_modifier(view->currPic, &mod); createDialog(view, _("Adjust Red Settings"), &mod, (GtkSignalFunc) brightRSet, (GtkSignalFunc) contrastRSet, (GtkSignalFunc) gammaRSet); } void blueDialog(GtkWidget *widget, gpointer data) { sgview *view; GdkImlibColorModifier mod; view = (sgview *) data; if (view->setrsp) gtk_widget_destroy(view->setrsp); gdk_imlib_get_image_blue_modifier(view->currPic, &mod); createDialog(view, _("Adjust Blue Settings"), &mod, (GtkSignalFunc) brightBSet, (GtkSignalFunc) contrastBSet, (GtkSignalFunc) gammaBSet); } void greenDialog(GtkWidget *widget, gpointer data) { sgview *view; GdkImlibColorModifier mod; view = (sgview *) data; if (view->setrsp) gtk_widget_destroy(view->setrsp); gdk_imlib_get_image_green_modifier(view->currPic, &mod); createDialog(view, _("Adjust Green Settings"), &mod, (GtkSignalFunc) brightGSet, (GtkSignalFunc) contrastGSet, (GtkSignalFunc) gammaGSet); } void setDialog(GtkWidget *widget, gpointer data) { sgview *view; GdkImlibColorModifier mod; view = (sgview *) data; if (view->setrsp) gtk_widget_destroy(view->setrsp); gdk_imlib_get_image_modifier(view->currPic, &mod); createDialog(view, _("Adjust Image Settings"), &mod, (GtkSignalFunc) brightSet, (GtkSignalFunc) contrastSet, (GtkSignalFunc) gammaSet); }