[Rawstudio-commit] r2055 - trunk/src
Anders Brander
anders at brander.dk
Tue Sep 30 21:15:11 CEST 2008
Author: abrander
Date: 2008-09-30 21:15:11 +0200 (Tue, 30 Sep 2008)
New Revision: 2055
Modified:
trunk/src/gtk-interface.c
trunk/src/rs-preview-widget.c
Log:
[229] Made color-indicator - well - colored (Patch by Aleksandr Zolotarev).
Modified: trunk/src/gtk-interface.c
===================================================================
--- trunk/src/gtk-interface.c 2008-09-30 19:12:16 UTC (rev 2054)
+++ trunk/src/gtk-interface.c 2008-09-30 19:15:11 UTC (rev 2055)
@@ -54,8 +54,8 @@
static gboolean fullscreen;
GtkWindow *rawstudio_window;
static gint busycount = 0;
-static GtkWidget *valuefield;
-static GtkWidget *hbox;
+//static GtkWidget *valuefield[3];
+//static GtkWidget *hbox;
GdkGC *dashed;
GdkGC *grid;
@@ -793,14 +793,27 @@
}
void
-preview_motion(RSPreviewWidget *preview, RS_PREVIEW_CALLBACK_DATA *cbdata, RS_BLOB *rs)
+preview_motion(RSPreviewWidget *preview, RS_PREVIEW_CALLBACK_DATA *cbdata, GtkLabel **valuefield)
{
+ gint c;
gchar tmp[20];
- g_snprintf(tmp, 20, "%u %u %u", cbdata->pixel8[R], cbdata->pixel8[G], cbdata->pixel8[B]);
- gtk_label_set_text(GTK_LABEL(valuefield), tmp);
+ for(c=0;c<3;c++)
+ {
+ g_snprintf(tmp, 20, "%u", cbdata->pixel8[c]);
+ gtk_label_set_markup (valuefield[c], tmp);
+ }
}
+void
+preview_leave(RSPreviewWidget *preview, RS_PREVIEW_CALLBACK_DATA *cbdata, GtkLabel **valuefield)
+{
+ gint c;
+
+ for(c=0;c<3;c++)
+ gtk_label_set_text(valuefield[c], "-");
+}
+
static gboolean
open_file_in_mainloop(gpointer data)
{
@@ -909,6 +922,10 @@
GdkColor grid_fg = {0, 32767, 32767, 32767};
GdkColor bgcolor = {0, 0, 0, 0 };
GString *window_title = g_string_new(_("Rawstudio"));
+ GdkColor tmpcolor;
+ GtkWidget *hbox; /* for statusbar */
+ GtkWidget *valuefield[3];
+
gtk_window_set_default_icon_from_file(PACKAGE_DATA_DIR "/icons/" PACKAGE ".png", NULL);
rs->window = gui_window_make(rs);
@@ -926,9 +943,30 @@
/* Build status bar */
statusbar = GTK_STATUSBAR(gtk_statusbar_new());
- valuefield = gtk_label_new(NULL);
+
+ valuefield[R] = gtk_label_new(NULL);
+ gtk_label_set_width_chars (GTK_LABEL(valuefield[R]), 3);
+ gtk_misc_set_alignment (GTK_MISC(valuefield[R]), 1.0, 0.5);
+ gdk_color_parse("#ef2929", &tmpcolor); /* Scarlet Red */
+ gtk_widget_modify_fg (GTK_WIDGET(valuefield[R]), GTK_STATE_NORMAL, &tmpcolor);
+
+ valuefield[G] = gtk_label_new(NULL);
+ gtk_label_set_width_chars (GTK_LABEL(valuefield[G]), 3);
+ gtk_misc_set_alignment (GTK_MISC(valuefield[G]), 1.0, 0.5);
+ gdk_color_parse("#8ae234", &tmpcolor); /* Chameleon */
+ gtk_widget_modify_fg (GTK_WIDGET(valuefield[G]), GTK_STATE_NORMAL, &tmpcolor);
+
+ valuefield[B] = gtk_label_new(NULL);
+ gtk_label_set_width_chars (GTK_LABEL(valuefield[B]), 3);
+ gtk_misc_set_alignment (GTK_MISC(valuefield[B]), 1.0, 0.5);
+ gdk_color_parse("#729fcf", &tmpcolor); /* Sky Blue */
+ gtk_widget_modify_fg (GTK_WIDGET(valuefield[B]), GTK_STATE_NORMAL, &tmpcolor);
+
hbox = gtk_hbox_new (FALSE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), valuefield, FALSE, TRUE, 0);
+ gtk_box_set_spacing(GTK_BOX(hbox), 3);
+ gtk_box_pack_start (GTK_BOX (hbox), valuefield[R], FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), valuefield[G], FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), valuefield[B], FALSE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (statusbar), TRUE, TRUE, 0);
/* Build toolbox */
@@ -969,7 +1007,8 @@
rs_conf_get_color(CONF_PREBGCOLOR, &bgcolor);
rs_preview_widget_set_bgcolor(RS_PREVIEW_WIDGET(rs->preview), &bgcolor);
g_signal_connect(G_OBJECT(rs->preview), "wb-picked", G_CALLBACK(preview_wb_picked), rs);
- g_signal_connect(G_OBJECT(rs->preview), "motion", G_CALLBACK(preview_motion), rs);
+ g_signal_connect(G_OBJECT(rs->preview), "motion", G_CALLBACK(preview_motion), valuefield);
+ g_signal_connect(G_OBJECT(rs->preview), "leave", G_CALLBACK(preview_leave), valuefield);
/* Split pane below iconbox */
pane = gtk_hpaned_new ();
Modified: trunk/src/rs-preview-widget.c
===================================================================
--- trunk/src/rs-preview-widget.c 2008-09-30 19:12:16 UTC (rev 2054)
+++ trunk/src/rs-preview-widget.c 2008-09-30 19:15:11 UTC (rev 2055)
@@ -151,6 +151,8 @@
GdkPixbuf *buffer[MAX_VIEWS];
RSColorTransform *rct[MAX_VIEWS];
gint dirty[MAX_VIEWS]; /* Dirty flag, used for multiple things */
+
+ gboolean prev_inside_image; /* For motion and leave function*/
};
/* Define the boiler plate stuff using the predefined macro */
@@ -168,6 +170,7 @@
enum {
WB_PICKED,
MOTION_SIGNAL,
+ LEAVE_SIGNAL,
LAST_SIGNAL
};
@@ -183,6 +186,7 @@
static void adjustment_changed(GtkAdjustment *adjustment, gpointer user_data);
static gboolean button(GtkWidget *widget, GdkEventButton *event, RSPreviewWidget *preview);
static gboolean motion(GtkWidget *widget, GdkEventMotion *event, gpointer user_data);
+static gboolean leave(GtkWidget *widget, GdkEventCrossing *event, gpointer user_data);
static void settings_changed(RS_PHOTO *photo, RSSettingsMask mask, RSPreviewWidget *preview);
static void spatial_changed(RS_PHOTO *photo, RSPreviewWidget *preview);
static void input_changed(RS_IMAGE16 *image, RSPreviewWidget *preview);
@@ -224,6 +228,14 @@
NULL,
g_cclosure_marshal_VOID__POINTER,
G_TYPE_NONE, 1, G_TYPE_POINTER);
+ signals[LEAVE_SIGNAL] = g_signal_new ("leave",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+ 0, /* Is this right? */
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1, G_TYPE_POINTER);
}
/**
@@ -256,12 +268,15 @@
G_CALLBACK (button), preview);
g_signal_connect (G_OBJECT (preview->canvas), "motion_notify_event",
G_CALLBACK (motion), preview);
+ g_signal_connect (G_OBJECT (preview->canvas), "leave_notify_event",
+ G_CALLBACK (leave), preview);
/* Let us know about pointer movements */
gtk_widget_set_events(GTK_WIDGET(preview->canvas), 0
| GDK_BUTTON_PRESS_MASK
| GDK_BUTTON_RELEASE_MASK
- | GDK_POINTER_MOTION_MASK);
+ | GDK_POINTER_MOTION_MASK
+ | GDK_LEAVE_NOTIFY_MASK);
preview->state = WB_PICKER;
preview->split = SPLIT_VERTICAL;
@@ -307,6 +322,8 @@
g_signal_connect(G_OBJECT(preview->canvas), "size-allocate", G_CALLBACK(size_allocate), preview);
g_signal_connect(G_OBJECT(preview), "realize", G_CALLBACK(realize), NULL);
g_signal_connect(G_OBJECT(preview->canvas), "scroll_event", G_CALLBACK (scroll), preview);
+
+ preview->prev_inside_image = FALSE;
}
/**
@@ -1865,9 +1882,37 @@
if (make_cbdata(preview, view, &cbdata, scaled_x, scaled_y, real_x, real_y))
g_signal_emit (G_OBJECT (preview), signals[MOTION_SIGNAL], 0, &cbdata);
}
+
+ /* Check not to generate superfluous signals "leave"*/
+ if (inside_image != preview->prev_inside_image)
+ {
+ preview->prev_inside_image = inside_image;
+ if (!inside_image && g_signal_has_handler_pending(preview, signals[LEAVE_SIGNAL], 0, FALSE))
+ {
+ RS_PREVIEW_CALLBACK_DATA cbdata;
+ if (make_cbdata(preview, view, &cbdata, scaled_x, scaled_y, real_x, real_y))
+ g_signal_emit (G_OBJECT (preview), signals[LEAVE_SIGNAL], 0, &cbdata);
+ }
+ }
+
return TRUE;
}
+static gboolean
+leave(GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)
+{
+ RSPreviewWidget *preview = RS_PREVIEW_WIDGET(user_data);
+
+ /* Check not to generate superfluous signals "leave"*/
+ if (preview->prev_inside_image)
+ {
+ preview->prev_inside_image = FALSE;
+ if (g_signal_has_handler_pending(preview, signals[LEAVE_SIGNAL], 0, FALSE))
+ g_signal_emit (G_OBJECT (preview), signals[LEAVE_SIGNAL], 0, NULL);
+ }
+ return TRUE;
+}
+
static void
settings_changed(RS_PHOTO *photo, RSSettingsMask mask, RSPreviewWidget *preview)
{
More information about the Rawstudio-commit
mailing list