# HG changeset patch # User Yoshiki Yazawa # Date 1241160626 -32400 # Node ID 05909b952b060256409337e4426038c15dc23dad # Parent 5b59ccf95b2bbac67bb3cd9e8e0398a828fa1a5d# Parent 0434f34b1ee4e2f425ad8ccb1b883c1e741e2973 merged diff -r 5b59ccf95b2b -r 05909b952b06 src/layout.c --- a/src/layout.c Fri May 01 15:49:57 2009 +0900 +++ b/src/layout.c Fri May 01 15:50:26 2009 +0900 @@ -391,7 +391,177 @@ return button; } -#if 0 +/* + *----------------------------------------------------------------------------- + * color profile button (and menu) + *----------------------------------------------------------------------------- + */ + +#ifdef HAVE_LCMS + +static void layout_color_menu_enable_cb(GtkWidget *widget, gpointer data) +{ + LayoutWindow *lw = data; + + layout_image_color_profile_set_use(lw, (!layout_image_color_profile_get_use(lw))); + layout_image_refresh(lw); +} + +static void layout_color_menu_use_image_cb(GtkWidget *widget, gpointer data) +{ + LayoutWindow *lw = data; + gint input, screen; + gboolean use_image; + + if (!layout_image_color_profile_get(lw, &input, &screen, &use_image)) return; + layout_image_color_profile_set(lw, input, screen, !use_image); + layout_image_refresh(lw); +} + +#define COLOR_MENU_KEY "color_menu_key" + +static void layout_color_menu_input_cb(GtkWidget *widget, gpointer data) +{ + LayoutWindow *lw = data; + gint type; + gint input, screen; + gboolean use_image; + + if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) return; + + type = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), COLOR_MENU_KEY)); + if (type < 0 || type >= COLOR_PROFILE_FILE + COLOR_PROFILE_INPUTS) return; + + if (!layout_image_color_profile_get(lw, &input, &screen, &use_image)) return; + if (type == input) return; + + layout_image_color_profile_set(lw, type, screen, use_image); + layout_image_refresh(lw); +} + +static void layout_color_menu_screen_cb(GtkWidget *widget, gpointer data) +{ + LayoutWindow *lw = data; + gint type; + gint input, screen; + gboolean use_image; + + if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) return; + + type = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), COLOR_MENU_KEY)); + if (type < 0 || type > 1) return; + + if (!layout_image_color_profile_get(lw, &input, &screen, &use_image)) return; + if (type == screen) return; + + layout_image_color_profile_set(lw, input, type, use_image); + layout_image_refresh(lw); +} + +static gchar *layout_color_name_parse(const gchar *name) +{ + if (!name || !*name) return g_strdup(_("Empty")); + return g_strdelimit(g_strdup(name), "_", '-'); +} + +#endif /* HAVE_LCMS */ + +static void layout_color_button_press_cb(GtkWidget *widget, gpointer data) +{ +#ifndef HAVE_LCMS + gchar *msg = g_strdup_printf(_("This installation of %s was not built with support for color profiles."), GQ_APPNAME); + file_util_warning_dialog(_("Color profiles not supported"), + msg, + GTK_STOCK_DIALOG_INFO, widget); + g_free(msg); + return; +#else + LayoutWindow *lw = data; + GtkWidget *menu; + GtkWidget *item; + gchar *buf; + gboolean active; + gint input = 0; + gint screen = 0; + gboolean use_image = FALSE; + gboolean from_image; + gint image_profile; + gint i; + + if (!layout_image_color_profile_get(lw, &input, &screen, &use_image)) return; + + image_profile = layout_image_color_profile_get_from_image(lw); + from_image = use_image && (image_profile != COLOR_PROFILE_NONE); + menu = popup_menu_short_lived(); + + active = layout_image_color_profile_get_use(lw); + menu_item_add_check(menu, _("Use _color profiles"), active, + G_CALLBACK(layout_color_menu_enable_cb), lw); + + menu_item_add_divider(menu); + + item = menu_item_add_check(menu, _("Use profile from _image"), use_image, + G_CALLBACK(layout_color_menu_use_image_cb), lw); + gtk_widget_set_sensitive(item, image_profile == COLOR_PROFILE_MEM || (image_profile > COLOR_PROFILE_NONE && image_profile < COLOR_PROFILE_FILE)); + + for (i = COLOR_PROFILE_SRGB; i < COLOR_PROFILE_FILE; i++) + { + const gchar *label; + + switch (i) + { + case COLOR_PROFILE_SRGB: label = _("sRGB"); break; + case COLOR_PROFILE_ADOBERGB: label = _("AdobeRGB compatible"); break; + default: label = "fixme"; break; + } + buf = g_strdup_printf(_("Input _%d: %s%s"), i, label, (i == image_profile) ? " *" : ""); + item = menu_item_add_radio(menu, (i == COLOR_PROFILE_SRGB) ? NULL : item, + buf, (input == i), + G_CALLBACK(layout_color_menu_input_cb), lw); + g_free(buf); + g_object_set_data(G_OBJECT(item), COLOR_MENU_KEY, GINT_TO_POINTER(i)); + gtk_widget_set_sensitive(item, active && !from_image); + } + + for (i = 0; i < COLOR_PROFILE_INPUTS; i++) + { + const gchar *name = options->color_profile.input_name[i]; + const gchar *file = options->color_profile.input_file[i]; + gchar *end; + + if (!name || !name[0]) name = filename_from_path(file); + + end = layout_color_name_parse(name); + buf = g_strdup_printf(_("Input _%d: %s"), i + COLOR_PROFILE_FILE, end); + g_free(end); + + item = menu_item_add_radio(menu, item, + buf, (i + COLOR_PROFILE_FILE == input), + G_CALLBACK(layout_color_menu_input_cb), lw); + g_free(buf); + g_object_set_data(G_OBJECT(item), COLOR_MENU_KEY, GINT_TO_POINTER(i + COLOR_PROFILE_FILE)); + gtk_widget_set_sensitive(item, active && !from_image && is_readable_file(file)); + } + + menu_item_add_divider(menu); + + item = menu_item_add_radio(menu, NULL, + _("Screen sRGB"), (screen == 0), + G_CALLBACK(layout_color_menu_screen_cb), lw); + + g_object_set_data(G_OBJECT(item), COLOR_MENU_KEY, GINT_TO_POINTER(0)); + gtk_widget_set_sensitive(item, active); + + item = menu_item_add_radio(menu, item, + _("_Screen profile"), (screen == 1), + G_CALLBACK(layout_color_menu_screen_cb), lw); + g_object_set_data(G_OBJECT(item), COLOR_MENU_KEY, GINT_TO_POINTER(1)); + gtk_widget_set_sensitive(item, active && is_readable_file(options->color_profile.screen_file)); + + gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, GDK_CURRENT_TIME); +#endif /* HAVE_LCMS */ +} + static GtkWidget *layout_color_button(LayoutWindow *lw) { GtkWidget *button; @@ -415,7 +585,7 @@ return button; } -#endif + /* *----------------------------------------------------------------------------- * write button @@ -679,9 +849,13 @@ gtk_box_pack_start(GTK_BOX(hbox), lw->info_sort, FALSE, FALSE, 0); gtk_widget_show(lw->info_sort); + lw->info_color = layout_color_button(lw); + gtk_widget_show(lw->info_color); + lw->info_write = layout_write_button(lw); gtk_widget_show(lw->info_write); + if (small_format) gtk_box_pack_end(GTK_BOX(hbox), lw->info_color, FALSE, FALSE, 0); if (small_format) gtk_box_pack_end(GTK_BOX(hbox), lw->info_write, FALSE, FALSE, 0); lw->info_status = layout_status_label(NULL, lw->info_box, TRUE, 0, (!small_format)); @@ -697,6 +871,7 @@ hbox = lw->info_box; } lw->info_details = layout_status_label(NULL, hbox, TRUE, 0, TRUE); + if (!small_format) gtk_box_pack_start(GTK_BOX(hbox), lw->info_color, FALSE, FALSE, 0); if (!small_format) gtk_box_pack_start(GTK_BOX(hbox), lw->info_write, FALSE, FALSE, 0); lw->info_pixel = layout_status_label(NULL, hbox, FALSE, PIXEL_LABEL_WIDTH, TRUE); if (lw->options.info_pixel_hidden) gtk_widget_hide(gtk_widget_get_parent(lw->info_pixel)); @@ -1630,6 +1805,7 @@ lw->info_box = NULL; lw->info_progress_bar = NULL; lw->info_sort = NULL; + lw->info_color = NULL; lw->info_status = NULL; lw->info_details = NULL; lw->info_pixel = NULL; diff -r 5b59ccf95b2b -r 05909b952b06 src/layout_image.c --- a/src/layout_image.c Fri May 01 15:49:57 2009 +0900 +++ b/src/layout_image.c Fri May 01 15:50:26 2009 +0900 @@ -1082,13 +1082,13 @@ image_color_profile_set_use(lw->image, enable); -// if (lw->info_color) -// { + if (lw->info_color) + { #ifndef HAVE_LCMS -// enable = FALSE; + enable = FALSE; #endif -// gtk_widget_set_sensitive(GTK_BIN(lw->info_color)->child, enable); -// } + gtk_widget_set_sensitive(GTK_BIN(lw->info_color)->child, enable); + } } gboolean layout_image_color_profile_get_use(LayoutWindow *lw) diff -r 5b59ccf95b2b -r 05909b952b06 src/layout_util.c --- a/src/layout_util.c Fri May 01 15:49:57 2009 +0900 +++ b/src/layout_util.c Fri May 01 15:50:26 2009 +0900 @@ -21,7 +21,6 @@ #include "collect.h" #include "collect-dlg.h" #include "compat.h" -#include "color-man.h" #include "dupe.h" #include "editors.h" #include "filedata.h" @@ -54,7 +53,6 @@ static gboolean layout_bar_enabled(LayoutWindow *lw); static gboolean layout_bar_sort_enabled(LayoutWindow *lw); -static void layout_util_sync_color(LayoutWindow *lw); /* *----------------------------------------------------------------------------- @@ -1037,163 +1035,6 @@ #endif - -/* - *----------------------------------------------------------------------------- - * color profile button (and menu) - *----------------------------------------------------------------------------- - */ - -static void layout_color_menu_enable_cb(GtkToggleAction *action, gpointer data) -{ -#ifdef HAVE_LCMS - LayoutWindow *lw = data; - - layout_image_color_profile_set_use(lw, gtk_toggle_action_get_active(action)); - layout_util_sync_color(lw); - layout_image_refresh(lw); -#endif -} - -static void layout_color_menu_use_image_cb(GtkToggleAction *action, gpointer data) -{ -#ifdef HAVE_LCMS - LayoutWindow *lw = data; - gint input, screen; - gboolean use_image; - - if (!layout_image_color_profile_get(lw, &input, &screen, &use_image)) return; - layout_image_color_profile_set(lw, input, screen, gtk_toggle_action_get_active(action)); - layout_util_sync_color(lw); - layout_image_refresh(lw); -#endif -} - -static void layout_color_menu_input_cb(GtkRadioAction *action, GtkRadioAction *current, gpointer data) -{ -#ifdef HAVE_LCMS - LayoutWindow *lw = data; - gint type; - gint input, screen; - gboolean use_image; - - type = gtk_radio_action_get_current_value(action); - if (type < 0 || type >= COLOR_PROFILE_FILE + COLOR_PROFILE_INPUTS) return; - - if (!layout_image_color_profile_get(lw, &input, &screen, &use_image)) return; - if (type == input) return; - - layout_image_color_profile_set(lw, type, screen, use_image); - layout_image_refresh(lw); -#endif -} - -#if 0 -static gchar *layout_color_name_parse(const gchar *name) -{ - if (!name || !*name) return g_strdup(_("Empty")); - return g_strdelimit(g_strdup(name), "_", '-'); -} - - -static void layout_color_button_press_cb(GtkWidget *widget, gpointer data) -{ -#ifndef HAVE_LCMS - gchar *msg = g_strdup_printf(_("This installation of %s was not built with support for color profiles."), GQ_APPNAME); - file_util_warning_dialog(_("Color profiles not supported"), - msg, - GTK_STOCK_DIALOG_INFO, widget); - g_free(msg); - return; -#else - LayoutWindow *lw = data; - GtkWidget *menu; - GtkWidget *item; - gchar *buf; - gboolean active; - gint input = 0; - gint screen = 0; - gboolean use_image = FALSE; - gboolean from_image; - gint image_profile; - gint i; - - if (!layout_image_color_profile_get(lw, &input, &screen, &use_image)) return; - - image_profile = layout_image_color_profile_get_from_image(lw); - from_image = use_image && (image_profile != COLOR_PROFILE_NONE); - menu = popup_menu_short_lived(); - - active = layout_image_color_profile_get_use(lw); - menu_item_add_check(menu, _("Use _color profiles"), active, - G_CALLBACK(layout_color_menu_enable_cb), lw); - - menu_item_add_divider(menu); - - item = menu_item_add_check(menu, _("Use profile from _image"), use_image, - G_CALLBACK(layout_color_menu_use_image_cb), lw); - gtk_widget_set_sensitive(item, image_profile == COLOR_PROFILE_MEM || (image_profile > COLOR_PROFILE_NONE && image_profile < COLOR_PROFILE_FILE)); - - for (i = COLOR_PROFILE_SRGB; i < COLOR_PROFILE_FILE; i++) - { - const gchar *label; - - switch (i) - { - case COLOR_PROFILE_SRGB: label = _("sRGB"); break; - case COLOR_PROFILE_ADOBERGB: label = _("AdobeRGB compatible"); break; - default: label = "fixme"; break; - } - buf = g_strdup_printf(_("Input _%d: %s%s"), i, label, (i == image_profile) ? " *" : ""); - item = menu_item_add_radio(menu, (i == COLOR_PROFILE_SRGB) ? NULL : item, - buf, (input == i), - G_CALLBACK(layout_color_menu_input_cb), lw); - g_free(buf); - g_object_set_data(G_OBJECT(item), COLOR_MENU_KEY, GINT_TO_POINTER(i)); - gtk_widget_set_sensitive(item, active && !from_image); - } - - for (i = 0; i < COLOR_PROFILE_INPUTS; i++) - { - const gchar *name = options->color_profile.input_name[i]; - const gchar *file = options->color_profile.input_file[i]; - gchar *end; - - if (!name || !name[0]) name = filename_from_path(file); - - end = layout_color_name_parse(name); - buf = g_strdup_printf(_("Input _%d: %s"), i + COLOR_PROFILE_FILE, end); - g_free(end); - - item = menu_item_add_radio(menu, item, - buf, (i + COLOR_PROFILE_FILE == input), - G_CALLBACK(layout_color_menu_input_cb), lw); - g_free(buf); - g_object_set_data(G_OBJECT(item), COLOR_MENU_KEY, GINT_TO_POINTER(i + COLOR_PROFILE_FILE)); - gtk_widget_set_sensitive(item, active && !from_image && is_readable_file(file)); - } - - menu_item_add_divider(menu); - - item = menu_item_add_radio(menu, NULL, - _("Screen sRGB"), (screen == 0), - G_CALLBACK(layout_color_menu_screen_cb), lw); - - g_object_set_data(G_OBJECT(item), COLOR_MENU_KEY, GINT_TO_POINTER(0)); - gtk_widget_set_sensitive(item, active); - - item = menu_item_add_radio(menu, item, - _("_Screen profile"), (screen == 1), - G_CALLBACK(layout_color_menu_screen_cb), lw); - g_object_set_data(G_OBJECT(item), COLOR_MENU_KEY, GINT_TO_POINTER(1)); - gtk_widget_set_sensitive(item, active && is_readable_file(options->color_profile.screen_file)); - - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, GDK_CURRENT_TIME); -#endif /* HAVE_LCMS */ -} - -#endif - /* *----------------------------------------------------------------------------- * recent menu @@ -1306,7 +1147,6 @@ { "ViewMenu", NULL, N_("_View"), NULL, NULL, NULL }, { "DirMenu", NULL, N_("_View Directory as"), NULL, NULL, NULL }, { "ZoomMenu", NULL, N_("_Zoom"), NULL, NULL, NULL }, - { "ColorMenu", NULL, N_("Color _Management"), NULL, NULL, NULL }, { "ConnectZoomMenu", NULL, N_("_Connected Zoom"), NULL, NULL, NULL }, { "SplitMenu", NULL, N_("_Split"), NULL, NULL, NULL }, { "HelpMenu", NULL, N_("_Help"), NULL, NULL, NULL }, @@ -1428,8 +1268,6 @@ { "SBar", NULL, N_("_Info"), "K", NULL, CB(layout_menu_bar_cb), FALSE }, { "SBarSort", NULL, N_("Sort _manager"), "S", NULL, CB(layout_menu_bar_sort_cb), FALSE }, { "SlideShow", NULL, N_("Toggle _slideshow"),"S", NULL, CB(layout_menu_slideshow_cb), FALSE }, - { "UseColorProfiles", NULL, N_("Use _color profiles"), NULL, NULL, CB(layout_color_menu_enable_cb), FALSE}, - { "UseImageProfile", NULL, N_("Use profile from _image"), NULL, NULL, CB(layout_color_menu_use_image_cb), FALSE}, }; static GtkRadioActionEntry menu_radio_entries[] = { @@ -1444,14 +1282,6 @@ { "SplitSingle", NULL, N_("Single"), "Y", NULL, SPLIT_NONE } }; -static GtkRadioActionEntry menu_color_radio_entries[] = { - { "ColorProfile0", NULL, N_("Input _0: sRGB"), NULL, NULL, COLOR_PROFILE_SRGB }, - { "ColorProfile1", NULL, N_("Input _1: AdobeRGB compatible"), NULL, NULL, COLOR_PROFILE_ADOBERGB }, - { "ColorProfile2", NULL, N_("Input _2"), NULL, NULL, COLOR_PROFILE_FILE }, - { "ColorProfile3", NULL, N_("Input _3"), NULL, NULL, COLOR_PROFILE_FILE + 1 }, - { "ColorProfile4", NULL, N_("Input _4"), NULL, NULL, COLOR_PROFILE_FILE + 2 }, - { "ColorProfile5", NULL, N_("Input _5"), NULL, NULL, COLOR_PROFILE_FILE + 3 } -}; #undef CB @@ -1537,16 +1367,6 @@ " " " " " " -" " -" " -" " -" " -" " -" " -" " -" " -" " -" " " " " " " " @@ -1901,10 +1721,6 @@ gtk_action_group_add_radio_actions(lw->action_group, menu_view_dir_radio_entries, VIEW_DIR_TYPES_COUNT, 0, G_CALLBACK(layout_menu_view_dir_as_cb), lw); - gtk_action_group_add_radio_actions(lw->action_group, - menu_color_radio_entries, COLOR_PROFILE_FILE + COLOR_PROFILE_INPUTS, - 0, G_CALLBACK(layout_color_menu_input_cb), lw); - lw->ui_manager = gtk_ui_manager_new(); gtk_ui_manager_set_add_tearoffs(lw->ui_manager, TRUE); @@ -2061,62 +1877,6 @@ * misc *----------------------------------------------------------------------------- */ -static gchar *layout_color_name_parse(const gchar *name) -{ - if (!name || !*name) return g_strdup(_("Empty")); - return g_strdelimit(g_strdup(name), "_", '-'); -} - -static void layout_util_sync_color(LayoutWindow *lw) -{ - GtkAction *action; - gint input = 0; - gint screen = 0; - gboolean use_color; - gboolean use_image = FALSE; - gint i; - gchar action_name[15]; - - if (!lw->action_group) return; - if (!layout_image_color_profile_get(lw, &input, &screen, &use_image)) return; - - use_color = layout_image_color_profile_get_use(lw); - - action = gtk_action_group_get_action(lw->action_group, "UseColorProfiles"); - gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), use_color); - - action = gtk_action_group_get_action(lw->action_group, "UseImageProfile"); - gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), use_image); - gtk_action_set_sensitive(action, use_color); - - for (i = 0; i < COLOR_PROFILE_FILE + COLOR_PROFILE_INPUTS; i++) - { - sprintf(action_name, "ColorProfile%d", i); - action = gtk_action_group_get_action(lw->action_group, action_name); - - if (i >= COLOR_PROFILE_FILE) - { - const gchar *name = options->color_profile.input_name[i - COLOR_PROFILE_FILE]; - const gchar *file = options->color_profile.input_file[i - COLOR_PROFILE_FILE]; - gchar *end; - gchar *buf; - - if (!name || !name[0]) name = filename_from_path(file); - - end = layout_color_name_parse(name); - buf = g_strdup_printf(_("Input _%d: %s"), i, end); - g_free(end); - - g_object_set(G_OBJECT(action), "label", buf, NULL); - g_free(buf); - - gtk_action_set_visible(action, file && file[0]); - } - - gtk_action_set_sensitive(action, !use_image); - gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), (i == input)); - } -} static void layout_util_sync_views(LayoutWindow *lw) { @@ -2154,7 +1914,6 @@ action = gtk_action_group_get_action(lw->action_group, "SlideShow"); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), layout_image_slideshow_active(lw)); - layout_util_sync_color(lw); } void layout_util_sync_thumb(LayoutWindow *lw) diff -r 5b59ccf95b2b -r 05909b952b06 src/typedefs.h --- a/src/typedefs.h Fri May 01 15:49:57 2009 +0900 +++ b/src/typedefs.h Fri May 01 15:50:26 2009 +0900 @@ -628,6 +628,7 @@ GtkWidget *info_box; GtkWidget *info_progress_bar; GtkWidget *info_sort; + GtkWidget *info_color; GtkWidget *info_status; GtkWidget *info_details; GtkWidget *info_zoom;