diff --git a/mousepad/mousepad-settings.h b/mousepad/mousepad-settings.h
index 4993045..60ba4c4 100644
--- a/mousepad/mousepad-settings.h
+++ b/mousepad/mousepad-settings.h
@@ -24,6 +24,7 @@ G_BEGIN_DECLS
/* Setting names */
#define MOUSEPAD_SETTING_AUTO_INDENT "/preferences/view/auto-indent"
#define MOUSEPAD_SETTING_FONT_NAME "/preferences/view/font-name"
+#define MOUSEPAD_SETTING_ZOOM_LEVEL "/preferences/view/zoom-level"
#define MOUSEPAD_SETTING_USE_DEFAULT_FONT "/preferences/view/use-default-monospace-font"
#define MOUSEPAD_SETTING_SHOW_WHITESPACE "/preferences/view/show-whitespace"
#define MOUSEPAD_SETTING_SHOW_LINE_ENDINGS "/preferences/view/show-line-endings"
diff --git a/mousepad/mousepad-view.c b/mousepad/mousepad-view.c
index 802f116..3c3cd87 100644
--- a/mousepad/mousepad-view.c
+++ b/mousepad/mousepad-view.c
@@ -142,6 +142,7 @@ struct _MousepadView
/* the font used in the view */
gchar *font_name;
PangoFontDescription *font_desc;
+ gint zoom_level;
/* whitespace visualization */
gboolean show_whitespace;
@@ -158,6 +159,7 @@ enum
{
PROP_0,
PROP_FONT_NAME,
+ PROP_ZOOM_LEVEL,
PROP_SHOW_WHITESPACE,
PROP_SHOW_LINE_ENDINGS,
PROP_COLOR_SCHEME,
@@ -201,6 +203,17 @@ mousepad_view_class_init (MousepadViewClass *klass)
MOUSEPAD_VIEW_DEFAULT_FONT,
G_PARAM_READWRITE));
+ g_object_class_install_property (
+ gobject_class,
+ PROP_ZOOM_LEVEL,
+ g_param_spec_int ("zoom-level",
+ "ZoomLevel",
+ "The level of zoom to use in the view",
+ 6,
+ 72,
+ 10,
+ G_PARAM_READWRITE));
+
g_object_class_install_property (
gobject_class,
PROP_SHOW_WHITESPACE,
@@ -307,6 +320,7 @@ mousepad_view_init (MousepadView *view)
view->color_scheme = g_strdup ("none");
view->font_name = NULL;
view->font_desc = NULL;
+ view->zoom_level = 0;
view->match_braces = FALSE;
/* make sure any buffers set on the view get the color scheme applied to them */
@@ -330,6 +344,7 @@ mousepad_view_init (MousepadView *view)
BIND_ (AUTO_INDENT, "auto-indent");
BIND_ (FONT_NAME, "font-name");
+ BIND_ (ZOOM_LEVEL, "zoom-level");
BIND_ (SHOW_WHITESPACE, "show-whitespace");
BIND_ (SHOW_LINE_ENDINGS, "show-line-endings");
BIND_ (HIGHLIGHT_CURRENT_LINE, "highlight-current-line");
@@ -391,6 +406,9 @@ mousepad_view_set_property (GObject *object,
case PROP_FONT_NAME:
mousepad_view_set_font_name (view, g_value_get_string (value));
break;
+ case PROP_ZOOM_LEVEL:
+ mousepad_view_set_zoom_level (view, g_value_get_int (value));
+ break;
case PROP_SHOW_WHITESPACE:
mousepad_view_set_show_whitespace (view, g_value_get_boolean (value));
break;
@@ -427,6 +445,9 @@ mousepad_view_get_property (GObject *object,
case PROP_FONT_NAME:
g_value_set_string (value, mousepad_view_get_font_name (view));
break;
+ case PROP_ZOOM_LEVEL:
+ g_value_set_int (value, mousepad_view_get_zoom_level (view));
+ break;
case PROP_SHOW_WHITESPACE:
g_value_set_boolean (value, mousepad_view_get_show_whitespace (view));
break;
@@ -2639,19 +2660,16 @@ mousepad_view_set_font_name (MousepadView *view,
font_desc = pango_font_description_from_string (font_name);
if (G_LIKELY (font_desc != NULL))
{
- /* Save the normalized representation of the font as a string */
+ /* remove previous stored values */
g_free (view->font_name);
- view->font_name = pango_font_description_to_string (font_desc);
-
- /* save the font description for later updating */
pango_font_description_free (view->font_desc);
+
view->font_desc = font_desc;
+ view->font_name = pango_font_description_to_string (font_desc);
+ view->zoom_level = pango_font_description_get_size(font_desc) / PANGO_SCALE;
/* apply either the default or this font depending on settings */
mousepad_view_update_font (view);
-
- /* Notify interested parties that the property has changed */
- g_object_notify (G_OBJECT (view), "font-name");
}
else
g_critical ("Invalid font-name given: %s", font_name);
@@ -2717,10 +2735,18 @@ mousepad_view_update_font (MousepadView *view)
font_desc = pango_font_description_from_string (MOUSEPAD_VIEW_DEFAULT_FONT);
mousepad_view_override_font (view, font_desc);
- pango_font_description_free (font_desc);
+ view->font_name = pango_font_description_to_string(font_desc);
}
else
- mousepad_view_override_font (view, view->font_desc);
+ {
+ pango_font_description_set_size(view->font_desc, view->zoom_level * PANGO_SCALE);
+ mousepad_view_override_font (view, view->font_desc);
+ view->font_name = pango_font_description_to_string(view->font_desc);
+ }
+
+ /* Notify interested parties that the property has changed */
+ g_object_notify (G_OBJECT (view), "font-name");
+ g_object_notify (G_OBJECT (view), "zoom-level");
}
@@ -2733,6 +2759,40 @@ mousepad_view_get_font_name (MousepadView *view)
return view->font_name;
}
+void mousepad_view_set_zoom_level(MousepadView *view,
+ gint zoom_level)
+{
+ g_return_if_fail (MOUSEPAD_IS_VIEW (view));
+
+ view->zoom_level = zoom_level;
+ mousepad_view_update_font(view);
+}
+
+gint
+mousepad_view_get_zoom_level(MousepadView *view)
+{
+ g_return_val_if_fail (MOUSEPAD_IS_VIEW (view), -1);
+
+ return view->zoom_level;
+}
+
+gint
+mousepad_view_get_default_zoom_level(MousepadView *view)
+{
+ PangoFontDescription* font_desc;
+ gint zoom_level;
+
+ g_return_val_if_fail (MOUSEPAD_IS_VIEW (view), -1);
+
+ /* extract default zoom value and set it as view's zoom level */
+ font_desc = pango_font_description_from_string(MOUSEPAD_VIEW_DEFAULT_FONT);
+ zoom_level = pango_font_description_get_size(font_desc) / PANGO_SCALE;
+
+ /* cleanup */
+ pango_font_description_free(font_desc);
+
+ return zoom_level;
+}
void
diff --git a/mousepad/mousepad-view.h b/mousepad/mousepad-view.h
index 14c5fce..2fa00ef 100644
--- a/mousepad/mousepad-view.h
+++ b/mousepad/mousepad-view.h
@@ -99,6 +99,13 @@ void mousepad_view_set_font_name (MousepadView *view
const gchar *mousepad_view_get_font_name (MousepadView *view);
+void mousepad_view_set_zoom_level (MousepadView *view,
+ gint zoom_level);
+
+gint mousepad_view_get_zoom_level (MousepadView *view);
+
+gint mousepad_view_get_default_zoom_level (MousepadView *view);
+
void mousepad_view_set_show_whitespace (MousepadView *view,
gboolean show);
diff --git a/mousepad/mousepad-window-ui.xml b/mousepad/mousepad-window-ui.xml
index 4eef0b3..7e13b2a 100644
--- a/mousepad/mousepad-window-ui.xml
+++ b/mousepad/mousepad-window-ui.xml
@@ -104,6 +104,10 @@