From bc8fd91eed538ddb9a3fdd3b7e05c9ac16a61c97 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Tue, 12 May 2009 09:28:53 +0000 Subject: Move stock icons from libmisc to libview and make the API public --- (limited to 'libview') diff --git a/libview/Makefile.am b/libview/Makefile.am index edfacef..d59de19 100644 --- a/libview/Makefile.am +++ b/libview/Makefile.am @@ -12,6 +12,7 @@ INST_H_FILES = \ ev-jobs.h \ ev-job-scheduler.h \ ev-page-cache.h \ + ev-stock-icons.h \ ev-view.h \ ev-view-type-builtins.h @@ -23,6 +24,7 @@ libevview_la_SOURCES = \ ev-job-scheduler.c \ ev-page-cache.c \ ev-pixbuf-cache.c \ + ev-stock-icons.c \ ev-timeline.c \ ev-transition-animation.c \ ev-view.c \ @@ -33,6 +35,7 @@ libevview_la_SOURCES = \ $(INST_H_FILES) libevview_la_CPPFLAGS = \ + -DDATADIR=\"$(pkgdatadir)\" \ -DG_LOG_DOMAIN=\"EvinceView\" \ -DGNOMELOCALEDIR=\"$(datadir)/locale\" \ -DEVINCE_COMPILATION \ diff --git a/libview/ev-stock-icons.c b/libview/ev-stock-icons.c new file mode 100644 index 0000000..09aa89e --- /dev/null +++ b/libview/ev-stock-icons.c @@ -0,0 +1,136 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* Stock icons for Evince + * + * Copyright (C) 2003 Martin Kretzschmar + * + * Author: + * Martin Kretzschmar + * + * Evince 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. + * + * Evince 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 + +#include "ev-stock-icons.h" + +typedef struct { + char *stock_id; + char *icon; +} EvStockIcon; + +/* Evince stock icons */ +static const EvStockIcon stock_icons [] = { + { EV_STOCK_ZOOM, "zoom" }, + { EV_STOCK_ZOOM_PAGE, "zoom-fit-page" }, + { EV_STOCK_ZOOM_WIDTH, "zoom-fit-width" }, + { EV_STOCK_VIEW_DUAL, "view-page-facing" }, + { EV_STOCK_VIEW_CONTINUOUS, "view-page-continuous" }, + { EV_STOCK_ROTATE_LEFT, "object-rotate-left"}, + { EV_STOCK_ROTATE_RIGHT, "object-rotate-right"}, + { EV_STOCK_RUN_PRESENTATION, "x-office-presentation"}, + { EV_STOCK_VISIBLE, "eye"} +}; + +static gchar *ev_icons_path; + +static void +ev_stock_icons_add_icons_path_for_screen (GdkScreen *screen) +{ + GtkIconTheme *icon_theme; + + g_return_if_fail (ev_icons_path != NULL); + + icon_theme = screen ? gtk_icon_theme_get_for_screen (screen) : gtk_icon_theme_get_default (); + if (icon_theme) { + gchar **path = NULL; + gint n_paths; + gint i; + + /* GtkIconTheme will then look in Evince custom hicolor dir + * for icons as well as the standard search paths + */ + gtk_icon_theme_get_search_path (icon_theme, &path, &n_paths); + for (i = n_paths - 1; i >= 0; i--) { + if (g_ascii_strcasecmp (ev_icons_path, path[i]) == 0) + break; + } + + if (i < 0) + gtk_icon_theme_append_search_path (icon_theme, + ev_icons_path); + + g_strfreev (path); + } +} + +/** + * ev_stock_icons_init: + * + * Creates a new icon factory, adding the base stock icons to it. + */ +void +ev_stock_icons_init (void) +{ + GtkIconFactory *factory; + GtkIconSource *source; + gint i; + + ev_icons_path = g_build_filename (DATADIR, "icons", NULL); + + factory = gtk_icon_factory_new (); + gtk_icon_factory_add_default (factory); + + source = gtk_icon_source_new (); + + for (i = 0; i < G_N_ELEMENTS (stock_icons); i++) { + GtkIconSet *set; + + gtk_icon_source_set_icon_name (source, stock_icons [i].icon); + + set = gtk_icon_set_new (); + gtk_icon_set_add_source (set, source); + + gtk_icon_factory_add (factory, stock_icons [i].stock_id, set); + gtk_icon_set_unref (set); + } + + gtk_icon_source_free (source); + + g_object_unref (G_OBJECT (factory)); + + ev_stock_icons_add_icons_path_for_screen (gdk_screen_get_default ()); +} + +void +ev_stock_icons_set_screen (GdkScreen *screen) +{ + g_return_if_fail (GDK_IS_SCREEN (screen)); + + ev_stock_icons_add_icons_path_for_screen (screen); +} + +void +ev_stock_icons_shutdown (void) +{ + g_free (ev_icons_path); +} + +void +ev_stock_icons_add_icons_path (void) +{ + ev_stock_icons_add_icons_path_for_screen (gdk_screen_get_default ()); +} diff --git a/libview/ev-stock-icons.h b/libview/ev-stock-icons.h new file mode 100644 index 0000000..c49dc17 --- /dev/null +++ b/libview/ev-stock-icons.h @@ -0,0 +1,52 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* Stock icons for Evince + * + * Copyright (C) 2003 Martin Kretzschmar + * + * Author: + * Martin Kretzschmar + * + * Evince 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. + * + * Evince 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. + */ + +#if !defined (__EV_EVINCE_VIEW_H_INSIDE__) && !defined (EVINCE_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __EV_STOCK_ICONS_H__ +#define __EV_STOCK_ICONS_H__ + +#include + +G_BEGIN_DECLS + +/* Evince stock icons */ +#define EV_STOCK_ZOOM "zoom" +#define EV_STOCK_ZOOM_PAGE "zoom-fit-page" +#define EV_STOCK_ZOOM_WIDTH "zoom-fit-width" +#define EV_STOCK_VIEW_DUAL "view-page-facing" +#define EV_STOCK_VIEW_CONTINUOUS "view-page-continuous" +#define EV_STOCK_ROTATE_LEFT "object-rotate-left" +#define EV_STOCK_ROTATE_RIGHT "object-rotate-right" +#define EV_STOCK_RUN_PRESENTATION "x-office-presentation" +#define EV_STOCK_VISIBLE "eye" + +void ev_stock_icons_init (void); +void ev_stock_icons_shutdown (void); +void ev_stock_icons_set_screen (GdkScreen *screen); + +G_END_DECLS + +#endif /* __EV_STOCK_ICONS_H__ */ -- cgit v0.9.1