From f62a4ec8486bc8489420e73e3981ccde92395342 Mon Sep 17 00:00:00 2001 From: Vladimir Nadvornik Date: Sat, 25 Apr 2009 22:08:09 +0000 Subject: [PATCH] separated Orientation and Grayscale functions moved Grayscale to Color management menu --- src/image.c | 18 ++++++++++++------ src/image.h | 4 +++- src/img-view.c | 14 +++++++------- src/layout_image.c | 22 +++++++++++++++++++--- src/layout_image.h | 4 +++- src/layout_util.c | 28 ++++++++++++++++------------ src/lirc.c | 4 ++-- src/menu.c | 6 +----- src/typedefs.h | 1 - 9 files changed, 63 insertions(+), 38 deletions(-) diff --git a/src/image.c b/src/image.c index 9e01a128..2761bd21 100644 --- a/src/image.c +++ b/src/image.c @@ -363,7 +363,7 @@ static void image_post_process_tile_color_cb(PixbufRenderer *pr, GdkPixbuf **pix } -void image_alter(ImageWindow *imd, AlterType type) +void image_alter_orientation(ImageWindow *imd, AlterType type) { static const gint rotate_90[] = {1, 6, 7, 8, 5, 2, 3, 4, 1}; static const gint rotate_90_cc[] = {1, 8, 5, 6, 7, 4, 1, 2, 3}; @@ -393,19 +393,15 @@ void image_alter(ImageWindow *imd, AlterType type) case ALTER_FLIP: imd->orientation = flip[imd->orientation]; break; - case ALTER_DESATURATE: - imd->desaturate = !imd->desaturate; - break; case ALTER_NONE: imd->orientation = imd->image_fd->exif_orientation ? imd->image_fd->exif_orientation : 1; - imd->desaturate = FALSE; break; default: return; break; } - if (type != ALTER_NONE && type != ALTER_DESATURATE) + if (type != ALTER_NONE) { if (imd->image_fd->user_orientation == 0) file_data_ref(imd->image_fd); imd->image_fd->user_orientation = imd->orientation; @@ -417,12 +413,22 @@ void image_alter(ImageWindow *imd, AlterType type) } pixbuf_renderer_set_orientation((PixbufRenderer *)imd->pr, imd->orientation); +} + +void image_set_desaturate(ImageWindow *imd, gboolean desaturate) +{ + imd->desaturate = desaturate; if (imd->cm || imd->desaturate) pixbuf_renderer_set_post_process_func((PixbufRenderer *)imd->pr, image_post_process_tile_color_cb, (gpointer) imd, (imd->cm != NULL) ); else pixbuf_renderer_set_post_process_func((PixbufRenderer *)imd->pr, NULL, NULL, TRUE); + pixbuf_renderer_set_orientation((PixbufRenderer *)imd->pr, imd->orientation); } +gboolean image_get_desaturate(ImageWindow *imd) +{ + return imd->desaturate; +} /* *------------------------------------------------------------------- diff --git a/src/image.h b/src/image.h index 3b0e9942..7f4811c6 100644 --- a/src/image.h +++ b/src/image.h @@ -76,7 +76,9 @@ void image_scroll_to_point(ImageWindow *imd, gint x, gint y, gdouble x_align, gdouble y_align); void image_get_scroll_center(ImageWindow *imd, gdouble *x, gdouble *y); void image_set_scroll_center(ImageWindow *imd, gdouble x, gdouble y); -void image_alter(ImageWindow *imd, AlterType type); +void image_alter_orientation(ImageWindow *imd, AlterType type); +void image_set_desaturate(ImageWindow *imd, gboolean desaturate); +gboolean image_get_desaturate(ImageWindow *imd); /* zoom */ void image_zoom_adjust(ImageWindow *imd, gdouble increment); diff --git a/src/img-view.c b/src/img-view.c index 11f386f4..afc0db7d 100644 --- a/src/img-view.c +++ b/src/img-view.c @@ -448,16 +448,16 @@ static gboolean view_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, switch (event->keyval) { case 'R': case 'r': - image_alter(imd, ALTER_ROTATE_180); + image_alter_orientation(imd, ALTER_ROTATE_180); break; case 'M': case 'm': - image_alter(imd, ALTER_MIRROR); + image_alter_orientation(imd, ALTER_MIRROR); break; case 'F': case 'f': - image_alter(imd, ALTER_FLIP); + image_alter_orientation(imd, ALTER_FLIP); break; case 'G': case 'g': - image_alter(imd, ALTER_DESATURATE); + image_set_desaturate(imd, !image_get_desaturate(imd)); break; case 'P': case 'p': { @@ -558,10 +558,10 @@ static gboolean view_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, view_overlay_toggle(vw); break; case ']': - image_alter(imd, ALTER_ROTATE_90); + image_alter_orientation(imd, ALTER_ROTATE_90); break; case '[': - image_alter(imd, ALTER_ROTATE_90_CC); + image_alter_orientation(imd, ALTER_ROTATE_90_CC); break; case GDK_Delete: case GDK_KP_Delete: if (options->file_ops.enable_delete_key) @@ -1094,7 +1094,7 @@ static void view_alter_cb(GtkWidget *widget, gpointer data) type = GPOINTER_TO_INT(data); if (!vw) return; - image_alter(vw->imd, type); + image_alter_orientation(vw->imd, type); } static void view_wallpaper_cb(GtkWidget *widget, gpointer data) diff --git a/src/layout_image.c b/src/layout_image.c index 3ea7c3a7..fa33be8d 100644 --- a/src/layout_image.c +++ b/src/layout_image.c @@ -331,7 +331,7 @@ static void li_pop_menu_alter_cb(GtkWidget *widget, gpointer data) lw = submenu_item_get_data(widget); type = (AlterType)GPOINTER_TO_INT(data); - image_alter(lw->image, type); + image_alter_orientation(lw->image, type); } static void li_pop_menu_new_cb(GtkWidget *widget, gpointer data) @@ -884,13 +884,29 @@ void layout_image_zoom_set_fill_geometry(LayoutWindow *lw, gboolean vertical, gb } } -void layout_image_alter(LayoutWindow *lw, AlterType type) +void layout_image_alter_orientation(LayoutWindow *lw, AlterType type) { if (!layout_valid(&lw)) return; - image_alter(lw->image, type); + image_alter_orientation(lw->image, type); } +void layout_image_set_desaturate(LayoutWindow *lw, gboolean desaturate) +{ + if (!layout_valid(&lw)) return; + + image_set_desaturate(lw->image, desaturate); +} + +gboolean layout_image_get_desaturate(LayoutWindow *lw) +{ + if (!layout_valid(&lw)) return FALSE; + + return image_get_desaturate(lw->image); +} + + + const gchar *layout_image_get_path(LayoutWindow *lw) { if (!layout_valid(&lw)) return NULL; diff --git a/src/layout_image.h b/src/layout_image.h index 13446296..e5fe5001 100644 --- a/src/layout_image.h +++ b/src/layout_image.h @@ -51,7 +51,9 @@ void layout_image_zoom_adjust(LayoutWindow *lw, gdouble increment, gboolean conn void layout_image_zoom_adjust_at_point(LayoutWindow *lw, gdouble increment, gint x, gint y, gboolean connect_zoom); void layout_image_zoom_set(LayoutWindow *lw, gdouble zoom, gboolean connect_zoom); void layout_image_zoom_set_fill_geometry(LayoutWindow *lw, gboolean vertical, gboolean connect_zoom); -void layout_image_alter(LayoutWindow *lw, AlterType type); +void layout_image_alter_orientation(LayoutWindow *lw, AlterType type); +void layout_image_set_desaturate(LayoutWindow *lw, gboolean desaturate); +gboolean layout_image_get_desaturate(LayoutWindow *lw); void layout_image_next(LayoutWindow *lw); void layout_image_prev(LayoutWindow *lw); diff --git a/src/layout_util.c b/src/layout_util.c index ff592c09..7c070308 100644 --- a/src/layout_util.c +++ b/src/layout_util.c @@ -319,49 +319,49 @@ static void layout_menu_alter_90_cb(GtkAction *action, gpointer data) { LayoutWindow *lw = data; - layout_image_alter(lw, ALTER_ROTATE_90); + layout_image_alter_orientation(lw, ALTER_ROTATE_90); } static void layout_menu_alter_90cc_cb(GtkAction *action, gpointer data) { LayoutWindow *lw = data; - layout_image_alter(lw, ALTER_ROTATE_90_CC); + layout_image_alter_orientation(lw, ALTER_ROTATE_90_CC); } static void layout_menu_alter_180_cb(GtkAction *action, gpointer data) { LayoutWindow *lw = data; - layout_image_alter(lw, ALTER_ROTATE_180); + layout_image_alter_orientation(lw, ALTER_ROTATE_180); } static void layout_menu_alter_mirror_cb(GtkAction *action, gpointer data) { LayoutWindow *lw = data; - layout_image_alter(lw, ALTER_MIRROR); + layout_image_alter_orientation(lw, ALTER_MIRROR); } static void layout_menu_alter_flip_cb(GtkAction *action, gpointer data) { LayoutWindow *lw = data; - layout_image_alter(lw, ALTER_FLIP); + layout_image_alter_orientation(lw, ALTER_FLIP); } -static void layout_menu_alter_desaturate_cb(GtkAction *action, gpointer data) +static void layout_menu_alter_desaturate_cb(GtkToggleAction *action, gpointer data) { LayoutWindow *lw = data; - layout_image_alter(lw, ALTER_DESATURATE); + layout_image_set_desaturate(lw, gtk_toggle_action_get_active(action)); } static void layout_menu_alter_none_cb(GtkAction *action, gpointer data) { LayoutWindow *lw = data; - layout_image_alter(lw, ALTER_NONE); + layout_image_alter_orientation(lw, ALTER_NONE); } static void layout_menu_config_cb(GtkAction *action, gpointer data) @@ -1301,7 +1301,7 @@ static GtkActionEntry menu_entries[] = { { "GoMenu", NULL, N_("_Go"), NULL, NULL, NULL }, { "EditMenu", NULL, N_("_Edit"), NULL, NULL, NULL }, { "SelectMenu", NULL, N_("_Select"), NULL, NULL, NULL }, - { "AdjustMenu", NULL, N_("_Adjust"), NULL, NULL, NULL }, + { "OrientationMenu", NULL, N_("_Orientation"), NULL, NULL, NULL }, { "ExternalMenu", NULL, N_("E_xternal Editors"), NULL, NULL, NULL }, { "ViewMenu", NULL, N_("_View"), NULL, NULL, NULL }, { "DirMenu", NULL, N_("_View Directory as"), NULL, NULL, NULL }, @@ -1347,7 +1347,6 @@ static GtkActionEntry menu_entries[] = { { "Rotate180", NULL, N_("Rotate 1_80"), "R", NULL, CB(layout_menu_alter_180_cb) }, { "Mirror", NULL, N_("_Mirror"), "M", NULL, CB(layout_menu_alter_mirror_cb) }, { "Flip", NULL, N_("_Flip"), "F", NULL, CB(layout_menu_alter_flip_cb) }, - { "Grayscale", NULL, N_("Toggle _grayscale"),"G", NULL, CB(layout_menu_alter_desaturate_cb) }, { "AlterNone", NULL, N_("_Original state"), "O", NULL, CB(layout_menu_alter_none_cb) }, { "SelectAll", NULL, N_("Select _all"), "A", NULL, CB(layout_menu_select_all_cb) }, @@ -1430,6 +1429,7 @@ static GtkToggleActionEntry menu_toggle_entries[] = { { "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}, + { "Grayscale", NULL, N_("Toggle _grayscale"),"G", NULL, CB(layout_menu_alter_desaturate_cb), FALSE}, }; static GtkRadioActionEntry menu_radio_entries[] = { @@ -1512,13 +1512,12 @@ static const gchar *menu_ui_description = " " " " " " -" " +" " " " " " " " " " " " -" " " " " " " " @@ -1546,6 +1545,8 @@ static const gchar *menu_ui_description = " " " " " " +" " +" " " " " " " " @@ -2115,6 +2116,9 @@ static void layout_util_sync_color(LayoutWindow *lw) gtk_action_set_sensitive(action, !use_image); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), (i == input)); } + + action = gtk_action_group_get_action(lw->action_group, "Grayscale"); + gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), layout_image_get_desaturate(lw)); } static void layout_util_sync_views(LayoutWindow *lw) diff --git a/src/lirc.c b/src/lirc.c index 40fd0712..a244108c 100644 --- a/src/lirc.c +++ b/src/lirc.c @@ -164,11 +164,11 @@ static gboolean lirc_input_callback(GIOChannel *source, GIOCondition condition, } else if (g_ascii_strcasecmp("ROTATE_90", cmd) == 0) { - layout_image_alter(lw, ALTER_ROTATE_90); + layout_image_alter_orientation(lw, ALTER_ROTATE_90); } else if (g_ascii_strcasecmp("ROTATE_90_CC", cmd) == 0) { - layout_image_alter(lw, ALTER_ROTATE_90_CC); + layout_image_alter_orientation(lw, ALTER_ROTATE_90_CC); } else if (g_ascii_strcasecmp("INFO", cmd) == 0) { diff --git a/src/menu.c b/src/menu.c index 3a4e93af..f6390eca 100644 --- a/src/menu.c +++ b/src/menu.c @@ -230,9 +230,6 @@ gchar *alter_type_get_text(AlterType type) case ALTER_FLIP: return _("_Flip"); break; - case ALTER_DESATURATE: - return _("Toggle _grayscale"); - break; case ALTER_NONE: return _("_Original state"); break; @@ -271,14 +268,13 @@ static GtkWidget *real_submenu_add_alter(GtkWidget *menu, GCallback func, gpoint submenu_add_alter_item(submenu, func, ALTER_ROTATE_180, accel_group, 'R', GDK_SHIFT_MASK); submenu_add_alter_item(submenu, func, ALTER_MIRROR, accel_group, 'M', GDK_SHIFT_MASK); submenu_add_alter_item(submenu, func, ALTER_FLIP, accel_group, 'F', GDK_SHIFT_MASK); - submenu_add_alter_item(submenu, func, ALTER_DESATURATE, accel_group, 'G', GDK_SHIFT_MASK); submenu_add_alter_item(submenu, func, ALTER_NONE, accel_group, 'O', GDK_SHIFT_MASK); if (menu) { GtkWidget *item; - item = menu_item_add(menu, _("_Adjust"), NULL, NULL); + item = menu_item_add(menu, _("_Orientation"), NULL, NULL); gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); return item; } diff --git a/src/typedefs.h b/src/typedefs.h index 37645ddf..754af386 100644 --- a/src/typedefs.h +++ b/src/typedefs.h @@ -60,7 +60,6 @@ typedef enum { ALTER_ROTATE_180, ALTER_MIRROR, ALTER_FLIP, - ALTER_DESATURATE } AlterType; typedef enum { -- 2.20.1