/* 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. */ #define IS_PIC_USER #include "gview.h" void doSet(GtkWidget *widget, gpointer data) { ren *backD; gint xim, yim, xr, yr, wr, hr, dr, workx, worky; gchar *style; char **inX; GdkPixmap *pix; GdkBitmap *mask; GdkImlibImage *newImg; backD = (ren *) data; style = gtk_entry_get_text(GTK_ENTRY (GTK_COMBO (backD->ent)->entry)); gdk_window_get_geometry(GDK_ROOT_PARENT(), &xr, &yr, &wr, &hr, &dr); xim = backD->view->backPic->rgb_width; yim = backD->view->backPic->rgb_height; switch (style[0]) { case 'C': workx = (wr / 2) - (xim / 2); worky = (hr / 2) - (yim / 2); inX = g_malloc(sizeof(char *) * 63); inX[0] = g_strdup(back_xpm[0]); inX[1] = g_strdup(back_xpm[1]); inX[2] = g_strconcat(".\tc ", backD->view->defBackColor, NULL); for (dr = 3; dr < 63; dr++) inX[dr] = g_strdup(back_xpm[dr]); newImg = gdk_imlib_create_image_from_xpm_data(inX); for (dr = 0; dr < 63; dr++) g_free(inX[dr]); g_free(inX); gdk_imlib_render(newImg, wr, hr); pix = gdk_imlib_copy_image(newImg); gdk_imlib_paste_image(backD->view->backPic, (GdkWindow *) pix, workx, worky, xim, yim); gdk_window_set_back_pixmap(GDK_ROOT_PARENT(), pix, FALSE); gdk_window_clear(GDK_ROOT_PARENT()); gdk_imlib_free_pixmap(pix); gdk_imlib_kill_image(newImg); break; case 'T': gdk_imlib_load_file_to_pixmap(backD->view->backPic->filename, &pix, &mask); gdk_window_set_back_pixmap(GDK_ROOT_PARENT(), pix, FALSE); gdk_window_clear(GDK_ROOT_PARENT()); gdk_imlib_free_pixmap(pix); break; case 'S': gdk_imlib_render(backD->view->backPic, wr, hr); gdk_imlib_apply_image(backD->view->backPic, GDK_ROOT_PARENT()); gdk_imlib_render(backD->view->backPic, xim, yim); break; default: break; } gtk_widget_destroy(backD->rsp); } void cancelSet(GtkWidget *widget, gpointer data) { gtk_widget_destroy(((ren *)data)->rsp); } void backDestroy(GtkWidget *widget, gpointer data) { ren *backD; backD = (ren *) data; if (backD->view->backPic != backD->view->currPic) { gdk_imlib_kill_image(backD->view->backPic); backD->view->backPic = backD->view->currPic; } g_free(backD); } void setBack(GtkWidget *widget, gpointer data) { sgview *view; ren *backD; GtkWidget *rsp, *fix, *cmb, *hbox; GList *types, *tmp; gchar *str; view = (sgview *) data; if (!(view->backPic)) return; backD = g_malloc(sizeof(ren) * 1); backD->view = view; types = g_list_alloc(); str = g_strdup(_("Centered")); types->data = (gpointer) str; str = g_strdup(_("Tiled")); types = g_list_append(types, (gpointer) str); str = g_strdup(_("Scaled")); types = g_list_append(types, (gpointer) str); rsp = gtk_window_new(GTK_WINDOW_DIALOG); backD->rsp = rsp; gtk_window_set_position(GTK_WINDOW (rsp), GTK_WIN_POS_MOUSE); gtk_widget_set_usize(GTK_WIDGET (rsp), 160, 70); gtk_window_set_policy(GTK_WINDOW (rsp), FALSE, FALSE, FALSE); gtk_signal_connect(GTK_OBJECT (rsp), "destroy", (GtkSignalFunc) backDestroy, (gpointer) backD); gtk_window_set_title(GTK_WINDOW (rsp), _("Set Image As Background")); gtk_window_set_modal(GTK_WINDOW (rsp), TRUE); gtk_container_border_width(GTK_CONTAINER (rsp), 5); fix = gtk_fixed_new(); gtk_container_add(GTK_CONTAINER (rsp), fix); cmb = gtk_combo_new(); backD->ent = cmb; gtk_widget_set_usize(GTK_WIDGET (cmb), 150, 24); gtk_combo_set_popdown_strings(GTK_COMBO (cmb), types); gtk_entry_set_editable(GTK_ENTRY (GTK_COMBO (cmb)->entry), FALSE); gtk_entry_set_text(GTK_ENTRY (GTK_COMBO (cmb)->entry), _("Centered")); gtk_fixed_put(GTK_FIXED (fix), cmb, 0, 5); gtk_widget_show(cmb); hbox = gtk_hbox_new(TRUE, 10); gtk_widget_set_usize(GTK_WIDGET (hbox), 150, 25); gtk_fixed_put(GTK_FIXED (fix), hbox, 0, 35); gAddButtonBox(view, (gpointer) backD, GTK_BOX (hbox), _("Set"), _("Set the image as the background"), (GtkSignalFunc) doSet); gAddButtonBox(view, (gpointer) backD, GTK_BOX (hbox), _("Cancel"), _("Close this window"), (GtkSignalFunc) cancelSet); gtk_widget_show(hbox); gtk_widget_show(fix); gtk_widget_show(rsp); tmp = types; while (tmp) { g_free(tmp->data); tmp = tmp->next; } g_list_free(types); }