New preference dialog.

2002-10-10  Jens Finke  <jens@triq.net>

	New preference dialog.

	* configure.in: Check for libglade.

	* Makefile.am: Added glade related stuff.

	* eog.schemas: Changed keys for image view, so that they better
	reflect the preference dialog settings.

	* eog.glade,
	* eog.gladep,
	* eog-glade.h: New glade related files.

	* libeog/image-view.[ch] (paint_rectangle): Consider use_check_pattern variable.
	(image_view_set_check_type),
	(image_view_set_check_size): Set use_check_pattern variable.
	(image_view_set_transparent_color): New function.

	* shell/Makefile.am: Added eog-preferences.[ch] files.

	* shell/eog-preferences.[ch]: New files.

	* shell/eog-shell-ui.xml: Added Edit/Preferences menu item.

	* shell/eog-window.c (verb_EditPreferences_cb): New function.

	* viewer/eog-image-view-ui.xml: Removed preference settings from
	the menu.

	* viewer/eog-image-view.c: Removed all stuff related to the
	setting/changing of preferences through the menu.
	(dither_changed_cb),
	(check_size_changed_cb),
	(check_type_changed_cb): Removed.
	(interp_type_changed_cb): Reworked.
	(trans_color_changed_cb),
	(transparency_changed_cb): New function.
	(eog_iamge_view_construct): Adapted to new gconf schema.
	Removed ui related properties from property bag.

	* viewer/eog-image-view.h: Adapted gconf keys.
This commit is contained in:
Jens Finke 2002-10-10 15:59:22 +00:00 committed by Jens Finke
parent 4e50ce08df
commit aab1d1706b
17 changed files with 668 additions and 548 deletions

View file

@ -1,3 +1,47 @@
2002-10-10 Jens Finke <jens@triq.net>
New preference dialog.
* configure.in: Check for libglade.
* Makefile.am: Added glade related stuff.
* eog.schemas: Changed keys for image view, so that they better
reflect the preference dialog settings.
* eog.glade,
* eog.gladep,
* eog-glade.h: New glade related files.
* libeog/image-view.[ch] (paint_rectangle): Consider use_check_pattern variable.
(image_view_set_check_type),
(image_view_set_check_size): Set use_check_pattern variable.
(image_view_set_transparent_color): New function.
* shell/Makefile.am: Added eog-preferences.[ch] files.
* shell/eog-preferences.[ch]: New files.
* shell/eog-shell-ui.xml: Added Edit/Preferences menu item.
* shell/eog-window.c (verb_EditPreferences_cb): New function.
* viewer/eog-image-view-ui.xml: Removed preference settings from
the menu.
* viewer/eog-image-view.c: Removed all stuff related to the
setting/changing of preferences through the menu.
(dither_changed_cb),
(check_size_changed_cb),
(check_type_changed_cb): Removed.
(interp_type_changed_cb): Reworked.
(trans_color_changed_cb),
(transparency_changed_cb): New function.
(eog_iamge_view_construct): Adapted to new gconf schema.
Removed ui related properties from property bag.
* viewer/eog-image-view.h: Adapted gconf keys.
2002-10-10 Kjartan Maraas <kmaraas@gnome.org> 2002-10-10 Kjartan Maraas <kmaraas@gnome.org>
* shell/eog-window.c (eog_window_init): Plug a leak. * shell/eog-window.c (eog_window_init): Plug a leak.

View file

@ -13,6 +13,9 @@ EXTRA_DIST = \
$(schema_DATA) \ $(schema_DATA) \
eog.desktop.in \ eog.desktop.in \
eog.spec \ eog.spec \
eog.gladep \
eog.glade \
eog-glade.h \
eog.spec.in \ eog.spec.in \
gnome-eog.png \ gnome-eog.png \
intltool-extract.in \ intltool-extract.in \
@ -24,6 +27,9 @@ Graphicsdir = $(datadir)/applications
Graphics_in_files = eog.desktop.in Graphics_in_files = eog.desktop.in
Graphics_DATA = $(Graphics_in_files:.desktop.in=.desktop) Graphics_DATA = $(Graphics_in_files:.desktop.in=.desktop)
Gladedir = $(datadir)/eog/glade
Glade_DATA = eog.glade
@INTLTOOL_DESKTOP_RULE@ @INTLTOOL_DESKTOP_RULE@
schemadir = $(sysconfdir)/gconf/schemas schemadir = $(sysconfdir)/gconf/schemas

View file

@ -18,6 +18,7 @@ LIBGNOMEUI_REQUIRED=1.115.0
LIBBONOBOUI_REQUIRED=1.115.0 LIBBONOBOUI_REQUIRED=1.115.0
BONOBO_ACTIVATION_REQUIRED=0.9.7 BONOBO_ACTIVATION_REQUIRED=0.9.7
LIBRSVG_REQUIRED=1.1.6 LIBRSVG_REQUIRED=1.1.6
LIBGLADE_REQUIRED=2.0.1
dnl =============================================================================== dnl ===============================================================================
@ -143,7 +144,7 @@ dnl AM_CONDITIONAL(ENABLE_GNOCAM, test x"$gnocam" = "xyes")
gnocam=no gnocam=no
AM_CONDITIONAL(ENABLE_GNOCAM, false) AM_CONDITIONAL(ENABLE_GNOCAM, false)
EOG_MODULES="gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libgnomeprint-2.0 >= $LIBGNOMEPRINT_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libbonoboui-2.0 >= $LIBBONOBOUI_REQUIRED bonobo-activation-2.0 >= $BONOBO_ACTIVATION_REQUIRED librsvg-2.0 >= $LIBRSVG_REQUIRED" EOG_MODULES="gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libgnomeprint-2.0 >= $LIBGNOMEPRINT_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libbonoboui-2.0 >= $LIBBONOBOUI_REQUIRED bonobo-activation-2.0 >= $BONOBO_ACTIVATION_REQUIRED librsvg-2.0 >= $LIBRSVG_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED"
PKG_CHECK_MODULES(EOG, $EOG_MODULES) PKG_CHECK_MODULES(EOG, $EOG_MODULES)
AC_SUBST(EOG_CFLAGS) AC_SUBST(EOG_CFLAGS)
AC_SUBST(EOG_LIBS) AC_SUBST(EOG_LIBS)

13
eog-glade.h Normal file
View file

@ -0,0 +1,13 @@
/*
* Datei für übersetzbare Zeichenketten, erzeugt durch Glade.
* Fügen Sie diese Datei zur POTFILES.in Ihres Projektes hinzu.
* Compilieren Sie sie NICHT als Teil Ihrer Anwendung.
*/
gchar *s = N_("Eye of Gnome Preferences");
gchar *s = N_("Interpolate image on zoom (better quality but slower)");
gchar *s = N_("By checkpattern ");
gchar *s = N_("By color");
gchar *s = N_("Pick a color");
gchar *s = N_("Indicate Transparency");
gchar *s = N_("Image Viewer");

239
eog.glade Normal file
View file

@ -0,0 +1,239 @@
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
<glade-interface>
<requires lib="gnome"/>
<widget class="GtkWindow" id="Preferences Dialog">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="title" translatable="yes">Eye of Gnome Preferences</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_NONE</property>
<property name="modal">False</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">True</property>
<child>
<widget class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">6</property>
<child>
<widget class="GtkNotebook" id="notebook1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="show_tabs">True</property>
<property name="show_border">True</property>
<property name="tab_pos">GTK_POS_TOP</property>
<property name="scrollable">False</property>
<property name="tab_hborder">2</property>
<property name="tab_vborder">2</property>
<property name="enable_popup">False</property>
<child>
<widget class="GtkVBox" id="vbox2">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">6</property>
<child>
<widget class="GtkCheckButton" id="interpolate_check">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Interpolate image on zoom (better quality but slower)</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="active">False</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="label_xalign">0</property>
<property name="label_yalign">0.5</property>
<property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
<child>
<widget class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkVBox" id="vbox3">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">6</property>
<child>
<widget class="GtkRadioButton" id="checkpattern_radio">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">By checkpattern </property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="active">False</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox2">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">6</property>
<child>
<widget class="GtkRadioButton" id="color_radio">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">By color</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="active">False</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
<property name="group">checkpattern_radio</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GnomeColorPicker" id="colorpicker">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="dither">True</property>
<property name="use_alpha">False</property>
<property name="title" translatable="yes">Pick a color</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
</child>
<child>
<widget class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="label" translatable="yes">Indicate Transparency</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="type">label_item</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
<packing>
<property name="tab_expand">False</property>
<property name="tab_fill">True</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label" translatable="yes">Image Viewer</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="type">tab</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkHButtonBox" id="hbuttonbox1">
<property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<property name="spacing">0</property>
<child>
<widget class="GtkButton" id="close_button">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-close</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>

9
eog.gladep Normal file
View file

@ -0,0 +1,9 @@
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-project SYSTEM "http://glade.gnome.org/glade-project-2.0.dtd">
<glade-project>
<name>eog</name>
<program_name>eog</program_name>
<output_translatable_strings>TRUE</output_translatable_strings>
<translatable_strings_file>eog-glade.h</translatable_strings_file>
</glade-project>

View file

@ -1,88 +1,45 @@
<gconfschemafile> <gconfschemafile>
<schemalist> <schemalist>
<schema> <schema>
<key>/schemas/apps/eog/view/interp_type</key> <key>/schemas/apps/eog/view/interpolate</key>
<applyto>/apps/eog/view/interp_type</applyto> <applyto>/apps/eog/view/interpolate</applyto>
<owner>eog</owner> <owner>eog</owner>
<type>int</type> <type>bool</type>
<default>2</default>
<locale name="C">
<short>Interpolation type</short>
<long>Type of interpolation to use for views. Possible values
are: 0 (nearest neighbor), 2 (bilienar), 3 (hyperbolic).
Value 1 (tiles) is in effect the same as nearest neighbor and
thus is not used.</long>
</locale>
</schema>
<schema>
<key>/schemas/apps/eog/view/check_type</key>
<applyto>/apps/eog/view/check_type</applyto>
<owner>eog</owner>
<type>int</type>
<default>1</default> <default>1</default>
<locale name="C"> <locale name="C">
<short>Type of checks</short> <short>Interpolate Image</short>
<long>Type of the checkered background that will be drawn <long>Wether the image should be interpolated on zoom or not.
behind images with transparency. Possible values are: 0 (dark This leads to better quality but is somewhat slower than non
checks), 1 (midtone checks), 2 (light checks), 3 (black interpolated images.</long>
background), 4 (gray background), 5 (white background).</long>
</locale> </locale>
</schema> </schema>
<schema> <schema>
<key>/schemas/apps/eog/view/check_size</key> <key>/schemas/apps/eog/view/transparency</key>
<applyto>/apps/eog/view/check_size</applyto> <applyto>/apps/eog/view/transparency</applyto>
<owner>eog</owner> <owner>eog</owner>
<type>int</type> <type>string</type>
<default>1</default> <default>CHECK_PATTERN</default>
<locale name="C"> <locale name="C">
<short>Size of checks</short> <short>Transparency indicator</short>
<long>Size of the checks in the background that will be drawn <long>Determines how transparency should be indicated. Valid values
behind images with transparency. Possible values are: 0 are CHECK_PATTERN and COLOR. If COLOR is choosen, than the trans_color
(small checks), 1 (medium checks), 2 (large checks).</long> key determines the used color value.
</long>
</locale> </locale>
</schema> </schema>
<schema> <schema>
<key>/schemas/apps/eog/view/dither</key> <key>/schemas/apps/eog/view/trans_color</key>
<applyto>/apps/eog/view/dither</applyto> <applyto>/apps/eog/view/trans_color</applyto>
<owner>eog</owner> <owner>eog</owner>
<type>int</type> <type>string</type>
<default>0</default> <default>#000000</default>
<locale name="C"> <locale name="C">
<short>Dither type</short> <short>Transparency color</short>
<long>Dither type to use. Possible values are: 0 (none), 1 <long>If the transparency key has the value COLOR, than this
(normal, for pseudo-color displays), 2 (maximum, for extra key determines the color which is used for indicating transparency.
quality on high color displays).</long> </long>
</locale>
</schema>
<schema>
<key>/schemas/apps/eog/view/scroll</key>
<applyto>/apps/eog/view/scroll</applyto>
<owner>eog</owner>
<type>int</type>
<default>1</default>
<locale name="C">
<short>Scrolling method</short>
<long>Scrolling method to use. Possible values are: 0
(normal), 1 (two-pass scrolling).</long>
</locale>
</schema>
<schema>
<key>/schemas/apps/eog/window/sb_policy</key>
<applyto>/apps/eog/window/sb_policy</applyto>
<owner>eog</owner>
<type>int</type>
<default>1</default>
<locale name="C">
<short>Scrollbar policy for image windows</short>
<long>Whether to display scrollbars on image windows.
Possible values are: 1 (automatic; only display scrollbars if
the image is larger than the window), 2 (never display
scrollbars).</long>
</locale> </locale>
</schema> </schema>

View file

@ -97,6 +97,10 @@ struct _ImageViewPrivate {
/* Check type and size */ /* Check type and size */
CheckType check_type; CheckType check_type;
CheckSize check_size; CheckSize check_size;
/* Transparency indicator */
gboolean use_check_pattern;
guint32 transparency_color;
/* Dither type */ /* Dither type */
GdkRgbDither dither; GdkRgbDither dither;
@ -245,6 +249,8 @@ image_view_instance_init (ImageView *view)
priv->check_type = CHECK_TYPE_MIDTONE; priv->check_type = CHECK_TYPE_MIDTONE;
priv->check_size = CHECK_SIZE_LARGE; priv->check_size = CHECK_SIZE_LARGE;
priv->dither = GDK_RGB_DITHER_MAX; priv->dither = GDK_RGB_DITHER_MAX;
priv->use_check_pattern = TRUE;
priv->transparency_color = CHECK_BLACK;
/* We don't want to be double-buffered as we are SuperSmart(tm) */ /* We don't want to be double-buffered as we are SuperSmart(tm) */
gtk_widget_set_double_buffered (GTK_WIDGET (view), FALSE); gtk_widget_set_double_buffered (GTK_WIDGET (view), FALSE);
@ -545,38 +551,42 @@ paint_rectangle (ImageView *view, ArtIRect *rect, GdkInterpType interp_type)
} }
/* Compute check parameters */ /* Compute check parameters */
if (priv->use_check_pattern) {
switch (priv->check_type) {
case CHECK_TYPE_DARK:
check_1 = CHECK_BLACK;
check_2 = CHECK_DARK;
break;
case CHECK_TYPE_MIDTONE:
check_1 = CHECK_DARK;
check_2 = CHECK_LIGHT;
break;
switch (priv->check_type) { case CHECK_TYPE_LIGHT:
case CHECK_TYPE_DARK: check_1 = CHECK_LIGHT;
check_1 = CHECK_BLACK; check_2 = CHECK_WHITE;
check_2 = CHECK_DARK; break;
break;
case CHECK_TYPE_BLACK:
check_1 = check_2 = CHECK_BLACK;
break;
case CHECK_TYPE_MIDTONE: case CHECK_TYPE_GRAY:
check_1 = CHECK_DARK; check_1 = check_2 = CHECK_GRAY;
check_2 = CHECK_LIGHT; break;
break;
case CHECK_TYPE_LIGHT: case CHECK_TYPE_WHITE:
check_1 = CHECK_LIGHT; check_1 = check_2 = CHECK_WHITE;
check_2 = CHECK_WHITE; break;
break;
case CHECK_TYPE_BLACK: default:
check_1 = check_2 = CHECK_BLACK; g_assert_not_reached ();
break; return;
}
case CHECK_TYPE_GRAY: }
check_1 = check_2 = CHECK_GRAY; else {
break; check_1 = check_2 = priv->transparency_color;
case CHECK_TYPE_WHITE:
check_1 = check_2 = CHECK_WHITE;
break;
default:
g_assert_not_reached ();
return;
} }
switch (priv->check_size) { switch (priv->check_size) {
@ -1689,10 +1699,12 @@ image_view_set_check_type (ImageView *view, CheckType check_type)
priv = view->priv; priv = view->priv;
if (priv->check_type == check_type) if (priv->check_type == check_type &&
priv->use_check_pattern)
return; return;
priv->check_type = check_type; priv->check_type = check_type;
priv->use_check_pattern = TRUE;
gtk_widget_queue_draw (GTK_WIDGET (view)); gtk_widget_queue_draw (GTK_WIDGET (view));
} }
@ -1734,10 +1746,12 @@ image_view_set_check_size (ImageView *view, CheckSize check_size)
priv = view->priv; priv = view->priv;
if (priv->check_size == check_size) if (priv->check_size == check_size &&
priv->use_check_pattern)
return; return;
priv->check_size = check_size; priv->check_size = check_size;
priv->use_check_pattern = TRUE;
gtk_widget_queue_draw (GTK_WIDGET (view)); gtk_widget_queue_draw (GTK_WIDGET (view));
} }
@ -1787,6 +1801,32 @@ image_view_set_dither (ImageView *view, GdkRgbDither dither)
gtk_widget_queue_draw (GTK_WIDGET (view)); gtk_widget_queue_draw (GTK_WIDGET (view));
} }
void
image_view_set_transparent_color (ImageView *view, const GdkColor *color)
{
ImageViewPrivate *priv;
guint32 col = 0;
guint32 red_part;
guint32 green_part;
guint32 blue_part;
g_return_if_fail (view != NULL);
g_return_if_fail (IS_IMAGE_VIEW (view));
priv = view->priv;
red_part = (color->red / 256) << 16;
green_part = (color->green / 256) << 8;
blue_part = (color->blue / 256);
col = red_part + green_part + blue_part;
priv->use_check_pattern = FALSE;
priv->transparency_color = col;
gtk_widget_queue_draw (GTK_WIDGET (view));
}
/** /**
* image_view_get_dither: * image_view_get_dither:
* @view: An image view. * @view: An image view.
@ -1929,3 +1969,4 @@ image_view_class_init (ImageViewClass *class)
widget_class->focus_in_event = image_view_focus_in_event; widget_class->focus_in_event = image_view_focus_in_event;
widget_class->focus_out_event = image_view_focus_out_event; widget_class->focus_out_event = image_view_focus_out_event;
} }

View file

@ -112,6 +112,8 @@ GdkRgbDither image_view_get_dither (ImageView *view);
void image_view_get_scaled_size (ImageView *view, gint *width, gint *height); void image_view_get_scaled_size (ImageView *view, gint *width, gint *height);
void image_view_set_transparent_color (ImageView *view, const GdkColor *color);
G_END_DECLS G_END_DECLS
#endif #endif

View file

@ -18,6 +18,8 @@ bin_PROGRAMS = eog
eog_SOURCES = \ eog_SOURCES = \
eog-window.h \ eog-window.h \
eog-window.c \ eog-window.c \
eog-preferences.h \
eog-preferences.c \
main.c \ main.c \
session.c \ session.c \
session.h \ session.h \

144
shell/eog-preferences.c Normal file
View file

@ -0,0 +1,144 @@
#include <gtk/gtk.h>
#include <glade/glade.h>
#include <libgnomeui/libgnomeui.h>
#include "eog-preferences.h"
#define EOG_VIEW_INTERPOLATE_IMAGE "/apps/eog/view/interpolate"
#define EOG_VIEW_TRANSPARENCY "/apps/eog/view/transparency"
#define EOG_VIEW_TRANS_COLOR "/apps/eog/view/trans_color"
#define GCONF_OBJECT_KEY "GCONF_KEY"
#define GCONF_OBJECT_VALUE "GCONF_VALUE"
static void
check_toggle_cb (GtkWidget *widget, gpointer data)
{
char *key = NULL;
key = g_object_get_data (G_OBJECT (widget), GCONF_OBJECT_KEY);
if (key == NULL) return;
gconf_client_set_bool (GCONF_CLIENT (data),
key,
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)),
NULL);
}
static void
color_change_cb (GtkWidget *widget, guint red, guint green, guint blue, guint a, gpointer data)
{
char *key = NULL;
char *value = NULL;
char *ptr;
value = g_strdup_printf ("#%2X%2X%2X",
red / 256,
green / 256,
blue / 256);
for (ptr = value; *ptr; ptr++)
if (*ptr == ' ')
*ptr = '0';
key = g_object_get_data (G_OBJECT (widget), GCONF_OBJECT_KEY);
if (key == NULL || value == NULL)
return;
gconf_client_set_string (GCONF_CLIENT (data),
key,
value,
NULL);
}
static void
radio_toggle_cb (GtkWidget *widget, gpointer data)
{
char *key = NULL;
char *value = NULL;
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
return;
key = g_object_get_data (G_OBJECT (widget), GCONF_OBJECT_KEY);
value = g_object_get_data (G_OBJECT (widget), GCONF_OBJECT_VALUE);
if (key == NULL || value == NULL)
return;
gconf_client_set_string (GCONF_CLIENT (data),
key,
value,
NULL);
}
void
eog_preferences_show (GConfClient *client)
{
GtkWidget *dlg;
GladeXML *xml;
GtkWidget *widget;
char *value;
GdkColor color;
xml = glade_xml_new (DATADIR "/eog/glade/eog.glade", "Preferences Dialog", "eog");
g_assert (xml != NULL);
dlg = glade_xml_get_widget (xml, "Preferences Dialog");
widget = glade_xml_get_widget (xml, "close_button");
g_signal_connect_swapped (G_OBJECT (widget), "clicked",
G_CALLBACK (gtk_widget_destroy), dlg);
/* interpolate flag */
widget = glade_xml_get_widget (xml, "interpolate_check");
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget),
gconf_client_get_bool (client, EOG_VIEW_INTERPOLATE_IMAGE, NULL));
g_object_set_data (G_OBJECT (widget), GCONF_OBJECT_KEY, EOG_VIEW_INTERPOLATE_IMAGE);
g_signal_connect (G_OBJECT (widget),
"toggled",
G_CALLBACK (check_toggle_cb),
client);
/* Transparency radio group */
widget = glade_xml_get_widget (xml, "color_radio");
g_object_set_data (G_OBJECT (widget), GCONF_OBJECT_KEY, EOG_VIEW_TRANSPARENCY);
g_object_set_data (G_OBJECT (widget), GCONF_OBJECT_VALUE, "COLOR");
g_signal_connect (G_OBJECT (widget),
"toggled",
G_CALLBACK (radio_toggle_cb),
client);
widget = glade_xml_get_widget (xml, "checkpattern_radio");
g_object_set_data (G_OBJECT (widget), GCONF_OBJECT_KEY, EOG_VIEW_TRANSPARENCY);
g_object_set_data (G_OBJECT (widget), GCONF_OBJECT_VALUE, "CHECK_PATTERN");
g_signal_connect (G_OBJECT (widget),
"toggled",
G_CALLBACK (radio_toggle_cb),
client);
value = gconf_client_get_string (client, EOG_VIEW_TRANSPARENCY, NULL);
if (g_strncasecmp (value, "COLOR") == 0) {
widget = glade_xml_get_widget (xml, "color_radio");
}
else {
widget = glade_xml_get_widget (xml, "checkpattern_radio");
}
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
/* color picker */
value = gconf_client_get_string (client, EOG_VIEW_TRANS_COLOR, NULL);
widget = glade_xml_get_widget (xml, "colorpicker");
if (gdk_color_parse (value, &color)) {
gnome_color_picker_set_i16 (GNOME_COLOR_PICKER (widget),
color.red,
color.green,
color.blue,
255);
}
g_object_set_data (G_OBJECT (widget), GCONF_OBJECT_KEY, EOG_VIEW_TRANS_COLOR);
g_signal_connect (G_OBJECT (widget),
"color-set",
G_CALLBACK (color_change_cb),
client);
}

3
shell/eog-preferences.h Normal file
View file

@ -0,0 +1,3 @@
#include <gconf/gconf-client.h>
void eog_preferences_show (GConfClient *client);

View file

@ -12,7 +12,10 @@
<cmd name="FileExit" _label="_Quit" _tip="Quit the program" <cmd name="FileExit" _label="_Quit" _tip="Quit the program"
pixtype="stock" pixname="gtk-quit" accel="*Control*q"/> pixtype="stock" pixname="gtk-quit" accel="*Control*q"/>
<cmd name="EditPreferences" _label="Prefere_nces" _tip="Preferences for EoG components"
pixtype="stock" pixname="gtk-preferences"/>
<cmd name="HelpAbout" _label="_About" _tip="About this application" <cmd name="HelpAbout" _label="_About" _tip="About this application"
pixtype="stock" pixname="About"/> pixtype="stock" pixname="About"/>
<cmd name="Help" _label="_Contents" _tip="Help On this application" <cmd name="Help" _label="_Contents" _tip="Help On this application"
@ -44,13 +47,14 @@
</submenu> </submenu>
<placeholder name="Edit"> <submenu name="Edit" _label="_Edit">
<placeholder name="Edit Items Placeholder"/> <placeholder name="Edit Items Placeholder"/>
</placeholder> <separator/>
<menuitem name="EditPreferences" verb=""/>
</submenu>
<placeholder name="View"> <placeholder name="View">
<placeholder name="View Preferences Placeholder"/> <placeholder name="View Items Placeholder"/>
<placeholder name="View Items Placeholder" delimit="top"/>
</placeholder> </placeholder>
<submenu name="Help" _label="_Help"> <submenu name="Help" _label="_Help">

View file

@ -172,6 +172,16 @@ verb_FileExit_cb (BonoboUIComponent *uic, gpointer user_data, const char *cname)
eog_window_close_all (); eog_window_close_all ();
} }
static void
verb_EditPreferences_cb (BonoboUIComponent *uic, gpointer user_data, const char *cname)
{
GConfClient *client;
client = EOG_WINDOW (user_data)->priv->client;
eog_preferences_show (client);
}
static void static void
verb_HelpAbout_cb (BonoboUIComponent *uic, gpointer user_data, const char *cname) verb_HelpAbout_cb (BonoboUIComponent *uic, gpointer user_data, const char *cname)
{ {
@ -613,6 +623,7 @@ static BonoboUIVerb eog_app_verbs[] = {
BONOBO_UI_VERB ("FileOpen", verb_FileOpen_cb), BONOBO_UI_VERB ("FileOpen", verb_FileOpen_cb),
BONOBO_UI_VERB ("FileCloseWindow", verb_FileCloseWindow_cb), BONOBO_UI_VERB ("FileCloseWindow", verb_FileCloseWindow_cb),
BONOBO_UI_VERB ("FileExit", verb_FileExit_cb), BONOBO_UI_VERB ("FileExit", verb_FileExit_cb),
BONOBO_UI_VERB ("EditPreferences", verb_EditPreferences_cb),
BONOBO_UI_VERB ("HelpAbout", verb_HelpAbout_cb), BONOBO_UI_VERB ("HelpAbout", verb_HelpAbout_cb),
BONOBO_UI_VERB ("Help", verb_HelpContent_cb), BONOBO_UI_VERB ("Help", verb_HelpContent_cb),
BONOBO_UI_VERB ("DnDNewWindow", verb_DnDNewWindow_cb), BONOBO_UI_VERB ("DnDNewWindow", verb_DnDNewWindow_cb),

View file

@ -14,39 +14,6 @@
<cmd name="SaveAs" _label="Save _As..." <cmd name="SaveAs" _label="Save _As..."
pixtype="stock" pixname="Save As" accel="*Control**Shift*S"/> pixtype="stock" pixname="Save As" accel="*Control**Shift*S"/>
<cmd name="InterpolationNearest" _label="Nea_rest Neighbour"
type="radio" group="Interpolation"/>
<cmd name="InterpolationBilinear" _label="_Bilinear"
type="radio" group="Interpolation"/>
<cmd name="InterpolationHyperbolic" _label="_Hyperbolic"
type="radio" group="Interpolation"/>
<cmd name="DitherNone" _label="_None" type="radio" group="Dither"/>
<cmd name="DitherNormal" _label="Normal (_pseudocolor)"
type="radio" group="Dither"/>
<cmd name="DitherMaximum" _label="_Maximum (high color)"
type="radio" group="Dither"/>
<cmd name="CheckTypeDark" _label="_Dark"
type="radio" group="CheckType"/>
<cmd name="CheckTypeMidtone" _label="_Midtone"
type="radio" group="CheckType"/>
<cmd name="CheckTypeLight" _label="_Light"
type="radio" group="CheckType"/>
<cmd name="CheckTypeBlack" _label="_Black"
type="radio" group="CheckType"/>
<cmd name="CheckTypeGray" _label="_Gray"
type="radio" group="CheckType"/>
<cmd name="CheckTypeWhite" _label="_White"
type="radio" group="CheckType"/>
<cmd name="CheckSizeSmall" _label="Small"
type="radio" group="CheckSize"/>
<cmd name="CheckSizeMedium" _label="Medium"
type="radio" group="CheckSize"/>
<cmd name="CheckSizeLarge" _label="Large"
type="radio" group="CheckSize"/>
<cmd name="FullScreen" _label="Full Screen" accel="F11"/> <cmd name="FullScreen" _label="Full Screen" accel="F11"/>
<cmd name="FlipHorizontal" _label="Flip Horizontal"/> <cmd name="FlipHorizontal" _label="Flip Horizontal"/>
<cmd name="FlipVertical" _label="Flip Vertical"/> <cmd name="FlipVertical" _label="Flip Vertical"/>
@ -85,36 +52,6 @@
<submenu name="View" _label="_View"> <submenu name="View" _label="_View">
<placeholder name="View Preferences Placeholder">
<submenu name="Interpolation" _label="_Interpolation">
<menuitem name="InterpolationNearest" verb=""/>
<menuitem name="InterpolationBilinear" verb=""/>
<menuitem name="InterpolationHyperbolic" verb=""/>
</submenu>
<submenu name="Dither" _label="_Dither">
<menuitem name="DitherNone" verb=""/>
<menuitem name="DitherNormal" verb=""/>
<menuitem name="DitherMaximum" verb=""/>
</submenu>
<submenu name="CheckType" _label="Check _type">
<menuitem name="CheckTypeDark" verb=""/>
<menuitem name="CheckTypeMidtone" verb=""/>
<menuitem name="CheckTypeLight" verb=""/>
<menuitem name="CheckTypeBlack" verb=""/>
<menuitem name="CheckTypeGray" verb=""/>
<menuitem name="CheckTypeWhite" verb=""/>
</submenu>
<submenu name="CheckSize" _label="Check _size">
<menuitem name="CheckSizeSmall" verb=""/>
<menuitem name="CheckSizeMedium" verb=""/>
<menuitem name="CheckSizeLarge" verb=""/>
</submenu>
</placeholder>
<placeholder name="View Items Placeholder"> <placeholder name="View Items Placeholder">
<menuitem name="FullScreen" verb=""/> <menuitem name="FullScreen" verb=""/>
</placeholder> </placeholder>

View file

@ -63,9 +63,8 @@ struct _EogImageViewPrivate {
GConfClient *client; GConfClient *client;
guint interp_type_notify_id; guint interp_type_notify_id;
guint dither_notify_id; guint transparency_notify_id;
guint check_type_notify_id; guint trans_color_notify_id;
guint check_size_notify_id;
GtkWidget *ui_image; GtkWidget *ui_image;
ImageView *image_view; ImageView *image_view;
@ -211,126 +210,6 @@ image_view_popup_menu_cb (GtkWidget *widget, gpointer data)
return TRUE; return TRUE;
} }
static void
listener_Interpolation_cb (BonoboUIComponent *uic,
const char *path,
Bonobo_UIComponent_EventType type,
const char *state,
gpointer user_data)
{
EogImageView *image_view;
GdkInterpType interpolation;
g_return_if_fail (user_data != NULL);
g_return_if_fail (EOG_IS_IMAGE_VIEW (user_data));
if (type != Bonobo_UIComponent_STATE_CHANGED)
return;
if (!state || !atoi (state))
return;
image_view = EOG_IMAGE_VIEW (user_data);
if (!strcmp (path, "InterpolationNearest")) {
interpolation = GDK_INTERP_NEAREST;
}
else if (!strcmp (path, "InterpolationBilinear")) {
interpolation = GDK_INTERP_BILINEAR;
}
else if (!strcmp (path, "InterpolationHyperbolic")) {
interpolation = GDK_INTERP_HYPER;
}
else {
g_warning ("Unknown interpolation type `%s'", path);
return;
}
gconf_client_set_int (image_view->priv->client,
GCONF_EOG_VIEW_INTERP_TYPE,
(int) interpolation, NULL);
}
static void
listener_Dither_cb (BonoboUIComponent *uic,
const char *path,
Bonobo_UIComponent_EventType type,
const char *state,
gpointer user_data)
{
EogImageView *image_view;
GNOME_EOG_Dither dither;
g_return_if_fail (user_data != NULL);
g_return_if_fail (EOG_IS_IMAGE_VIEW (user_data));
if (type != Bonobo_UIComponent_STATE_CHANGED)
return;
if (!state || !atoi (state))
return;
image_view = EOG_IMAGE_VIEW (user_data);
if (!strcmp (path, "DitherNone"))
dither = GNOME_EOG_DITHER_NONE;
else if (!strcmp (path, "DitherNormal"))
dither = GNOME_EOG_DITHER_NORMAL;
else if (!strcmp (path, "DitherMaximum"))
dither = GNOME_EOG_DITHER_MAXIMUM;
else {
g_warning ("Unknown dither type `%s'", path);
return;
}
gconf_client_set_int (image_view->priv->client,
GCONF_EOG_VIEW_DITHER,
(int) dither, NULL);
}
static void
listener_CheckType_cb (BonoboUIComponent *uic,
const char *path,
Bonobo_UIComponent_EventType type,
const char *state,
gpointer user_data)
{
EogImageView *image_view;
GNOME_EOG_CheckType check_type;
g_return_if_fail (user_data != NULL);
g_return_if_fail (EOG_IS_IMAGE_VIEW (user_data));
if (type != Bonobo_UIComponent_STATE_CHANGED)
return;
if (!state || !atoi (state))
return;
image_view = EOG_IMAGE_VIEW (user_data);
if (!strcmp (path, "CheckTypeDark"))
check_type = GNOME_EOG_CHECK_TYPE_DARK;
else if (!strcmp (path, "CheckTypeMidtone"))
check_type = GNOME_EOG_CHECK_TYPE_MIDTONE;
else if (!strcmp (path, "CheckTypeLight"))
check_type = GNOME_EOG_CHECK_TYPE_LIGHT;
else if (!strcmp (path, "CheckTypeBlack"))
check_type = GNOME_EOG_CHECK_TYPE_BLACK;
else if (!strcmp (path, "CheckTypeGray"))
check_type = GNOME_EOG_CHECK_TYPE_GRAY;
else if (!strcmp (path, "CheckTypeWhite"))
check_type = GNOME_EOG_CHECK_TYPE_WHITE;
else {
g_warning ("Unknown check type `%s'", path);
return;
}
gconf_client_set_int (image_view->priv->client,
GCONF_EOG_VIEW_CHECK_TYPE,
(int) check_type, NULL);
}
static void static void
save_image_as_file (EogImageView *image_view, gchar *filename) save_image_as_file (EogImageView *image_view, gchar *filename)
{ {
@ -1251,113 +1130,6 @@ verb_PrintSetup_cb (BonoboUIComponent *uic, gpointer user_data,
gtk_widget_show (print_setup); gtk_widget_show (print_setup);
} }
static void
listener_CheckSize_cb (BonoboUIComponent *uic,
const char *path,
Bonobo_UIComponent_EventType type,
const char *state,
gpointer user_data)
{
EogImageView *image_view;
GNOME_EOG_CheckSize check_size;
g_return_if_fail (user_data != NULL);
g_return_if_fail (EOG_IS_IMAGE_VIEW (user_data));
if (type != Bonobo_UIComponent_STATE_CHANGED)
return;
if (!state || !atoi (state))
return;
image_view = EOG_IMAGE_VIEW (user_data);
if (!strcmp (path, "CheckSizeSmall"))
check_size = GNOME_EOG_CHECK_SIZE_SMALL;
else if (!strcmp (path, "CheckSizeMedium"))
check_size = GNOME_EOG_CHECK_SIZE_MEDIUM;
else if (!strcmp (path, "CheckSizeLarge"))
check_size = GNOME_EOG_CHECK_SIZE_LARGE;
else {
g_warning ("Unknown check size `%s'", path);
return;
}
gconf_client_set_int (image_view->priv->client,
GCONF_EOG_VIEW_CHECK_SIZE,
(int) check_size, NULL);
}
/* Keep this in sync with interp_menu_index_from_value() below */
static const gchar* ui_id_strings_interp_type [] = {
"InterpolationNearest",
"InterpolationBilinear",
"InterpolationHyperbolic"
};
static const int n_ui_id_strings_interp_type = (sizeof (ui_id_strings_interp_type) /
sizeof (ui_id_strings_interp_type[0]));
/* Converts an enum value to the corresponding menu index for interpolation */
static int
interp_menu_index_from_value (int value)
{
switch (value) {
case GDK_INTERP_NEAREST:
return 0;
case GDK_INTERP_BILINEAR:
return 1;
case GDK_INTERP_HYPER:
return 2;
default:
return 0;
}
}
static const gchar* ui_id_strings_dither [] = {
"DitherNone",
"DitherNormal",
"DitherMaximum"
};
static const gchar* ui_id_strings_check_type [] = {
"CheckTypeDark",
"CheckTypeMidtone",
"CheckTypeLight",
"CheckTypeBlack",
"CheckTypeGray",
"CheckTypeWhite"
};
static const gchar* ui_id_strings_check_size [] = {
"CheckSizeSmall",
"CheckSizeMedium",
"CheckSizeLarge"
};
static void
set_ui_group_item (EogImageView *image_view, const gchar *group_cmd)
{
gchar *path;
gchar *value;
path = g_strconcat ("/commands/", group_cmd, NULL);
value = bonobo_ui_component_get_prop (image_view->priv->uic,
path, "state", NULL);
if (value == NULL || !g_ascii_strcasecmp (value, "0")) {
bonobo_ui_component_set_prop (image_view->priv->uic,
path, "state", "1", NULL);
}
g_free (value);
g_free (path);
}
#define EVOLUTION_MENU "<menuitem name=\"Send\" _label=\"Send\" pixtype=\"stock\" pixname=\"New Mail\" verb=\"\"/>" #define EVOLUTION_MENU "<menuitem name=\"Send\" _label=\"Send\" pixtype=\"stock\" pixname=\"New Mail\" verb=\"\"/>"
#define GNOCAM_MENU "<menuitem name=\"AcquireFromCamera\" _label=\"Acquire from camera\" verb=\"\"/>" #define GNOCAM_MENU "<menuitem name=\"AcquireFromCamera\" _label=\"Acquire from camera\" verb=\"\"/>"
@ -1386,50 +1158,6 @@ eog_image_view_create_ui (EogImageView *image_view)
GNOCAM_MENU, NULL); GNOCAM_MENU, NULL);
#endif #endif
value = gconf_client_get_int (image_view->priv->client,
GCONF_EOG_VIEW_INTERP_TYPE,
NULL);
value = interp_menu_index_from_value (value);
set_ui_group_item (image_view, ui_id_strings_interp_type [value]);
for (i = 0; i < n_ui_id_strings_interp_type; i++) {
bonobo_ui_component_add_listener (image_view->priv->uic, ui_id_strings_interp_type [i],
listener_Interpolation_cb, image_view);
}
value = gconf_client_get_int (image_view->priv->client,
GCONF_EOG_VIEW_DITHER,
NULL);
set_ui_group_item (image_view, ui_id_strings_dither [value]);
for (i = 0; i < 3; i++) {
bonobo_ui_component_add_listener (image_view->priv->uic, ui_id_strings_dither [i],
listener_Dither_cb, image_view);
}
value = gconf_client_get_int (image_view->priv->client,
GCONF_EOG_VIEW_CHECK_TYPE,
NULL);
set_ui_group_item (image_view, ui_id_strings_check_type [value]);
for (i = 0; i < 6; i++) {
bonobo_ui_component_add_listener (image_view->priv->uic, ui_id_strings_check_type [i],
listener_CheckType_cb, image_view);
}
value = gconf_client_get_int (image_view->priv->client,
GCONF_EOG_VIEW_CHECK_SIZE,
NULL);
set_ui_group_item (image_view, ui_id_strings_check_size [value]);
for (i = 0; i < 3; i++) {
bonobo_ui_component_add_listener (image_view->priv->uic, ui_id_strings_check_size [i],
listener_CheckSize_cb, image_view);
}
bonobo_ui_component_add_listener (image_view->priv->uic, "CheckSizeSmall",
listener_CheckSize_cb, image_view);
bonobo_ui_component_add_listener (image_view->priv->uic, "CheckSizeMedium",
listener_CheckSize_cb, image_view);
bonobo_ui_component_add_listener (image_view->priv->uic, "CheckSizeLarge",
listener_CheckSize_cb, image_view);
bonobo_ui_component_add_verb (image_view->priv->uic, "SaveAs", bonobo_ui_component_add_verb (image_view->priv->uic, "SaveAs",
verb_SaveAs_cb, image_view); verb_SaveAs_cb, image_view);
bonobo_ui_component_add_verb (image_view->priv->uic, "FullScreen", bonobo_ui_component_add_verb (image_view->priv->uic, "FullScreen",
@ -1487,8 +1215,8 @@ eog_image_view_get_prop (BonoboPropertyBag *bag,
g_assert (arg->_type == TC_GNOME_EOG_Interpolation); g_assert (arg->_type == TC_GNOME_EOG_Interpolation);
interp_type = (GdkInterpType) gconf_client_get_int (priv->client, interp_type = (GdkInterpType) gconf_client_get_bool (priv->client,
GCONF_EOG_VIEW_INTERP_TYPE, GCONF_EOG_VIEW_INTERP_TYPE,
NULL); NULL);
switch (interp_type) { switch (interp_type) {
case GDK_INTERP_NEAREST: case GDK_INTERP_NEAREST:
@ -1930,9 +1658,8 @@ eog_image_view_destroy (BonoboObject *object)
priv = image_view->priv; priv = image_view->priv;
gconf_client_notify_remove (priv->client, priv->interp_type_notify_id); gconf_client_notify_remove (priv->client, priv->interp_type_notify_id);
gconf_client_notify_remove (priv->client, priv->dither_notify_id); gconf_client_notify_remove (priv->client, priv->transparency_notify_id);
gconf_client_notify_remove (priv->client, priv->check_type_notify_id); gconf_client_notify_remove (priv->client, priv->trans_color_notify_id);
gconf_client_notify_remove (priv->client, priv->check_size_notify_id);
g_object_unref (G_OBJECT (priv->client)); g_object_unref (G_OBJECT (priv->client));
bonobo_object_unref (BONOBO_OBJECT (priv->property_bag)); bonobo_object_unref (BONOBO_OBJECT (priv->property_bag));
@ -2016,96 +1743,79 @@ interp_type_changed_cb (GConfClient *client,
gpointer user_data) gpointer user_data)
{ {
EogImageView *view; EogImageView *view;
GdkInterpType interpolation; gboolean interpolate = TRUE;
int i;
view = EOG_IMAGE_VIEW (user_data); view = EOG_IMAGE_VIEW (user_data);
if (entry->value != NULL && entry->value->type == GCONF_VALUE_INT) { if (entry->value != NULL && entry->value->type == GCONF_VALUE_BOOL) {
interpolation = (GdkInterpType) gconf_value_get_int (entry->value); interpolate = gconf_value_get_bool (entry->value);
}
if (interpolate) {
image_view_set_interp_type (view->priv->image_view,
GDK_INTERP_BILINEAR);
} }
else { else {
interpolation = GDK_INTERP_BILINEAR; image_view_set_interp_type (view->priv->image_view,
GDK_INTERP_NEAREST);
} }
image_view_set_interp_type (view->priv->image_view, interpolation);
bonobo_event_source_notify_listeners (view->priv->property_bag->es,
"interpolation", NULL, NULL);
i = interp_menu_index_from_value (interpolation);
set_ui_group_item (view, ui_id_strings_interp_type [i]);
} }
static void static void
dither_changed_cb (GConfClient *client, transparency_changed_cb (GConfClient *client,
guint cnxn_id, guint cnxn_id,
GConfEntry *entry, GConfEntry *entry,
gpointer user_data) gpointer user_data)
{ {
EogImageView *view; EogImageView *view;
GdkRgbDither dither; const char *value = NULL;
view = EOG_IMAGE_VIEW (user_data); view = EOG_IMAGE_VIEW (user_data);
if (entry->value != NULL && entry->value->type == GCONF_VALUE_INT) { if (entry->value != NULL && entry->value->type == GCONF_VALUE_STRING) {
dither = (GdkRgbDither) gconf_value_get_int (entry->value); value = gconf_value_get_string (entry->value);
}
else {
dither = GDK_RGB_DITHER_NONE;
} }
if (g_strcasecmp (value, "COLOR") == 0) {
GdkColor color;
char *color_str;
image_view_set_dither (view->priv->image_view, dither); color_str = gconf_client_get_string (view->priv->client,
bonobo_event_source_notify_listeners (view->priv->property_bag->es, GCONF_EOG_VIEW_TRANS_COLOR, NULL);
"dither", NULL, NULL); if (gdk_color_parse (color_str, &color)) {
set_ui_group_item (view, ui_id_strings_dither [dither]); image_view_set_transparent_color (view->priv->image_view, &color);
}
}
else {
image_view_set_check_type (view->priv->image_view, CHECK_TYPE_MIDTONE);
image_view_set_check_size (view->priv->image_view, CHECK_SIZE_LARGE);
}
} }
static void static void
check_type_changed_cb (GConfClient *client, trans_color_changed_cb (GConfClient *client,
guint cnxn_id, guint cnxn_id,
GConfEntry *entry, GConfEntry *entry,
gpointer user_data) gpointer user_data)
{ {
EogImageView *view; EogImageView *view;
CheckType check_type; GdkColor color;
char *value;
const char *color_str;
view = EOG_IMAGE_VIEW (user_data); view = EOG_IMAGE_VIEW (user_data);
if (entry->value != NULL && entry->value->type == GCONF_VALUE_INT) { value = gconf_client_get_string (view->priv->client, GCONF_EOG_VIEW_TRANSPARENCY, NULL);
check_type = (CheckType) gconf_value_get_int (entry->value);
}
else {
check_type = CHECK_TYPE_MIDTONE;
}
image_view_set_check_type (view->priv->image_view, check_type); if (g_strcasecmp (value, "COLOR") != 0) return;
bonobo_event_source_notify_listeners (view->priv->property_bag->es,
"check_type", NULL, NULL);
set_ui_group_item (view, ui_id_strings_check_type [check_type]);
}
static void if (entry->value != NULL && entry->value->type == GCONF_VALUE_STRING) {
check_size_changed_cb (GConfClient *client, color_str = gconf_value_get_string (entry->value);
guint cnxn_id,
GConfEntry *entry,
gpointer user_data)
{
EogImageView *view;
CheckSize check_size;
view = EOG_IMAGE_VIEW (user_data); if (gdk_color_parse (color_str, &color)) {
image_view_set_transparent_color (view->priv->image_view, &color);
if (entry->value != NULL && entry->value->type == GCONF_VALUE_INT) { }
check_size = (CheckSize) gconf_value_get_int (entry->value);
} }
else {
check_size = CHECK_SIZE_MEDIUM;
}
image_view_set_check_size (view->priv->image_view, check_size);
bonobo_event_source_notify_listeners (view->priv->property_bag->es,
"check_size", NULL, NULL);
set_ui_group_item (view, ui_id_strings_check_size [check_size]);
} }
/* Callback for the item factory's popup menu */ /* Callback for the item factory's popup menu */
@ -2198,6 +1908,8 @@ EogImageView *
eog_image_view_construct (EogImageView *image_view, EogImage *image, eog_image_view_construct (EogImageView *image_view, EogImage *image,
gboolean zoom_fit, gboolean need_close_item) gboolean zoom_fit, gboolean need_close_item)
{ {
char *transp_str;
g_return_val_if_fail (image_view != NULL, NULL); g_return_val_if_fail (image_view != NULL, NULL);
g_return_val_if_fail (EOG_IS_IMAGE_VIEW (image_view), NULL); g_return_val_if_fail (EOG_IS_IMAGE_VIEW (image_view), NULL);
g_return_val_if_fail (image != NULL, NULL); g_return_val_if_fail (image != NULL, NULL);
@ -2240,61 +1952,53 @@ eog_image_view_construct (EogImageView *image_view, EogImage *image,
G_CALLBACK (image_view_popup_menu_cb), image_view); G_CALLBACK (image_view_popup_menu_cb), image_view);
/* get preference values from gconf and add listeners */ /* get preference values from gconf and add listeners */
if (gconf_client_get_bool (image_view->priv->client, GCONF_EOG_VIEW_INTERP_TYPE, NULL)) {
image_view_set_interp_type (image_view->priv->image_view, GDK_INTERP_BILINEAR);
}
else {
image_view_set_interp_type (image_view->priv->image_view, GDK_INTERP_NEAREST);
}
image_view_set_interp_type (image_view->priv->image_view, image_view_set_dither (image_view->priv->image_view, GDK_RGB_DITHER_NONE);
(GdkInterpType) gconf_client_get_int (image_view->priv->client,
GCONF_EOG_VIEW_INTERP_TYPE, transp_str = gconf_client_get_string (image_view->priv->client,
NULL)); GCONF_EOG_VIEW_TRANSPARENCY, NULL);
image_view_set_dither (image_view->priv->image_view, if (g_strcasecmp (transp_str, "COLOR") == 0) {
(GdkRgbDither) gconf_client_get_int (image_view->priv->client, GdkColor color;
GCONF_EOG_VIEW_DITHER, char *color_str;
NULL));
image_view_set_check_type (image_view->priv->image_view, color_str = gconf_client_get_string (image_view->priv->client,
(CheckType) gconf_client_get_int (image_view->priv->client, GCONF_EOG_VIEW_TRANS_COLOR, NULL);
GCONF_EOG_VIEW_CHECK_TYPE, if (gdk_color_parse (color_str, &color)) {
NULL)); image_view_set_transparent_color (image_view->priv->image_view, &color);
image_view_set_check_size (image_view->priv->image_view, }
(CheckSize) gconf_client_get_int (image_view->priv->client, }
GCONF_EOG_VIEW_CHECK_SIZE, else {
NULL)); image_view_set_check_type (image_view->priv->image_view, CHECK_TYPE_MIDTONE);
image_view_set_check_size (image_view->priv->image_view, CHECK_SIZE_LARGE);
}
/* add gconf listeners */
image_view->priv->interp_type_notify_id = image_view->priv->interp_type_notify_id =
gconf_client_notify_add (image_view->priv->client, gconf_client_notify_add (image_view->priv->client,
GCONF_EOG_VIEW_INTERP_TYPE, GCONF_EOG_VIEW_INTERP_TYPE,
interp_type_changed_cb, interp_type_changed_cb,
image_view, NULL, NULL); image_view, NULL, NULL);
image_view->priv->dither_notify_id = image_view->priv->transparency_notify_id =
gconf_client_notify_add (image_view->priv->client, gconf_client_notify_add (image_view->priv->client,
GCONF_EOG_VIEW_DITHER, GCONF_EOG_VIEW_TRANSPARENCY,
dither_changed_cb, transparency_changed_cb,
image_view, NULL, NULL); image_view, NULL, NULL);
image_view->priv->check_type_notify_id = image_view->priv->trans_color_notify_id =
gconf_client_notify_add (image_view->priv->client, gconf_client_notify_add (image_view->priv->client,
GCONF_EOG_VIEW_CHECK_TYPE, GCONF_EOG_VIEW_TRANS_COLOR,
check_type_changed_cb, trans_color_changed_cb,
image_view, NULL, NULL);
image_view->priv->check_size_notify_id =
gconf_client_notify_add (image_view->priv->client,
GCONF_EOG_VIEW_CHECK_SIZE,
check_size_changed_cb,
image_view, NULL, NULL); image_view, NULL, NULL);
/* Property Bag */ /* Property Bag */
image_view->priv->property_bag = bonobo_property_bag_new (eog_image_view_get_prop, image_view->priv->property_bag = bonobo_property_bag_new (eog_image_view_get_prop,
eog_image_view_set_prop, eog_image_view_set_prop,
image_view); image_view);
bonobo_property_bag_add (image_view->priv->property_bag, "interpolation", PROP_INTERPOLATION,
TC_GNOME_EOG_Interpolation, NULL, _("Interpolation"),
BONOBO_PROPERTY_READABLE | BONOBO_PROPERTY_WRITEABLE);
bonobo_property_bag_add (image_view->priv->property_bag, "dither", PROP_DITHER,
TC_GNOME_EOG_Dither, NULL, _("Dither"),
BONOBO_PROPERTY_READABLE | BONOBO_PROPERTY_WRITEABLE);
bonobo_property_bag_add (image_view->priv->property_bag, "check_type", PROP_CHECK_TYPE,
TC_GNOME_EOG_CheckType, NULL, _("Check Type"),
BONOBO_PROPERTY_READABLE | BONOBO_PROPERTY_WRITEABLE);
bonobo_property_bag_add (image_view->priv->property_bag, "check_size", PROP_CHECK_SIZE,
TC_GNOME_EOG_CheckSize, NULL, _("Check Size"),
BONOBO_PROPERTY_READABLE | BONOBO_PROPERTY_WRITEABLE);
bonobo_property_bag_add (image_view->priv->property_bag, "image/width", PROP_IMAGE_WIDTH, bonobo_property_bag_add (image_view->priv->property_bag, "image/width", PROP_IMAGE_WIDTH,
BONOBO_ARG_INT, NULL, _("Image Width"), BONOBO_ARG_INT, NULL, _("Image Width"),
BONOBO_PROPERTY_READABLE); BONOBO_PROPERTY_READABLE);

View file

@ -25,7 +25,10 @@ G_BEGIN_DECLS
#define EOG_IMAGE_VIEW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EOG_IMAGE_VIEW_TYPE, EogImageViewClass)) #define EOG_IMAGE_VIEW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EOG_IMAGE_VIEW_TYPE, EogImageViewClass))
#define GCONF_EOG_VIEW_DIR "/apps/eog/view" #define GCONF_EOG_VIEW_DIR "/apps/eog/view"
#define GCONF_EOG_VIEW_INTERP_TYPE "/apps/eog/view/interp_type" #define GCONF_EOG_VIEW_INTERP_TYPE "/apps/eog/view/interpolate"
#define GCONF_EOG_VIEW_TRANSPARENCY "/apps/eog/view/transparency"
#define GCONF_EOG_VIEW_TRANS_COLOR "/apps/eog/view/trans_color"
#define GCONF_EOG_VIEW_CHECK_TYPE "/apps/eog/view/check_type" #define GCONF_EOG_VIEW_CHECK_TYPE "/apps/eog/view/check_type"
#define GCONF_EOG_VIEW_CHECK_SIZE "/apps/eog/view/check_size" #define GCONF_EOG_VIEW_CHECK_SIZE "/apps/eog/view/check_size"
#define GCONF_EOG_VIEW_DITHER "/apps/eog/view/dither" #define GCONF_EOG_VIEW_DITHER "/apps/eog/view/dither"