From e406c332499f01a97379c163ce1326cfc13ee570 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Sun, 22 Apr 2001 00:04:10 +0000 Subject: color custumozation added --- mixgtk/mixgtk_colorsel.c | 181 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 mixgtk/mixgtk_colorsel.c (limited to 'mixgtk/mixgtk_colorsel.c') diff --git a/mixgtk/mixgtk_colorsel.c b/mixgtk/mixgtk_colorsel.c new file mode 100644 index 0000000..c1f5a3d --- /dev/null +++ b/mixgtk/mixgtk_colorsel.c @@ -0,0 +1,181 @@ +/* -*-c-*- -------------- mixgtk_colorsel.c : + * Implementation of the functions declared in mixgtk_colorsel.h + * ------------------------------------------------------------------ + * Last change: Time-stamp: "2001-04-22 01:54:20 jao" + * ------------------------------------------------------------------ + * Copyright (C) 2001 Free Software Foundation, Inc. + * + * 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 +#include "mixgtk_widgets.h" +#include "mixgtk_mixal.h" +#include "mixgtk_colorsel.h" + +/* types of line colors */ +#define LNO_ 3 +/* colors per line */ +#define ZNO_ 2 + + +static GtkWidget *color_dialog_ = NULL; +static const char *anames_[LNO_][ZNO_] = { + {"bpbg_area", "bpfg_area"}, + {"clbg_area", "clfg_area"}, + {"plbg_area", "plfg_area"} +}; + +typedef struct +{ + GtkWidget *area; + gboolean changed; + GdkColor color; +} area_id_t; + +static area_id_t areas_[LNO_][ZNO_]; +static area_id_t *current_ = NULL; + +#define COLORSEL_DLG_NAME_ "colorsel_dialog" +static GtkWidget *colorseldlg_ = NULL; + + +static void +set_area_color_ (GtkWidget *area, const GdkColor *color) +{ + static GdkColor gdk_color; + + GdkColormap *colormap = gdk_window_get_colormap (area->window); + + g_assert (area); + g_assert (color); + + gdk_color.red = color->red; + gdk_color.green = color->green; + gdk_color.blue = color->blue; + gdk_color_alloc (colormap, &gdk_color); + gdk_window_set_background (area->window, &gdk_color); + gdk_window_clear (area->window); + gtk_widget_draw (area, FALSE); +} + + + +/* drawingarea event handler */ +static gint +area_event_(GtkWidget *widget, GdkEvent *event, gpointer areaid) +{ + gint handled = FALSE; + /* Check if we've received a button pressed event */ + if (event->type == GDK_BUTTON_PRESS) + { +/* handled = TRUE; */ + current_ = (area_id_t *)areaid; + /* Show the dialog */ + gtk_widget_show (colorseldlg_); + } + return handled; +} + +/* initialise the color selection dialog */ +gboolean +mixgtk_colorsel_init (void) +{ + int i, j; + color_dialog_ = mixgtk_widget_factory_get (MIXGTK_WIDGET_COLORSEL_DIALOG); + g_return_val_if_fail (color_dialog_ != NULL, FALSE); + colorseldlg_ = mixgtk_widget_factory_get_by_name (COLORSEL_DLG_NAME_); + g_return_val_if_fail (colorseldlg_ != NULL, FALSE); + for (i = 0; i < LNO_; ++i) + for (j = 0; j < ZNO_; ++j) + { + areas_[i][j].area = mixgtk_widget_factory_get_by_name (anames_[i][j]); + g_return_val_if_fail (areas_[i][j].area != NULL, FALSE); + areas_[i][j].changed = FALSE; + gtk_widget_set_events (areas_[i][j].area, GDK_BUTTON_PRESS_MASK); + gtk_signal_connect (GTK_OBJECT(areas_[i][j].area), "event", + (GtkSignalFunc)area_event_, (gpointer)&areas_[i][j]); + + } + return TRUE; +} + +/* gtk callbacks */ +void +on_colors_activate (GtkWidget *w, gpointer p) +{ + int i, j; + + /* must show widget before changing its colors */ + gtk_widget_show (color_dialog_); + + for (i = 0; i < LNO_; ++i) + for (j = 0; j < ZNO_; ++j) + { + areas_[i][j].changed = FALSE; + set_area_color_ (areas_[i][j].area, mixgtk_mixal_get_color (i, j)); + } + current_ = NULL; +} + +void +on_ok_colorseldlg_clicked (GtkWidget *widget, gpointer data) +{ + static gdouble color[3]; + GtkWidget *colorsel = GTK_COLOR_SELECTION_DIALOG (colorseldlg_)->colorsel; + gtk_widget_hide (colorseldlg_); + /* Get current color */ + gtk_color_selection_get_color (GTK_COLOR_SELECTION (colorsel), color); + /* Fit to a unsigned 16 bit integer (0..65535) and + * insert into the GdkColor structure */ + current_->color.red = (guint16)(color[0]*65535.0); + current_->color.green = (guint16)(color[1]*65535.0); + current_->color.blue = (guint16)(color[2]*65535.0); + set_area_color_ (current_->area, ¤t_->color); + current_->changed = TRUE; +} + +void +on_cancel_colorseldlg_clicked (GtkWidget *widget, gpointer data) +{ + gtk_widget_hide (colorseldlg_); +} + +void +on_colors_apply_clicked (GtkWidget *widget, gpointer data) +{ + int i, j; + for (i = 0; i < LNO_; ++i) + for (j = 0; j < ZNO_; ++j) + { + if (areas_[i][j].changed) + mixgtk_mixal_set_color (i, j, &areas_[i][j].color); + } +} + +void +on_colors_ok_clicked (GtkWidget *widget, gpointer data) +{ + on_colors_apply_clicked (widget, data); + gtk_widget_hide (color_dialog_); +} + +void +on_colors_cancel_clicked (GtkWidget *widget, gpointer data) +{ + gtk_widget_hide (color_dialog_); +} + -- cgit v1.2.3