diff --git a/mousepad/mousepad-window-ui.xml b/mousepad/mousepad-window-ui.xml index 4eef0b3..28e5413 100644 --- a/mousepad/mousepad-window-ui.xml +++ b/mousepad/mousepad-window-ui.xml @@ -93,6 +93,8 @@ + + diff --git a/mousepad/mousepad-window.c b/mousepad/mousepad-window.c index 9f33844..02ff348 100644 --- a/mousepad/mousepad-window.c +++ b/mousepad/mousepad-window.c @@ -31,6 +31,7 @@ #include #include +#include #if GTK_CHECK_VERSION(3, 0, 0) #include @@ -325,6 +326,10 @@ static void mousepad_window_action_go_to_position (GtkAction MousepadWindow *window); static void mousepad_window_action_select_font (GtkAction *action, MousepadWindow *window); +static void mousepad_window_action_zoom_in (GtkAction *action, + MousepadWindow *window); +static void mousepad_window_action_zoom_out (GtkAction *action, + MousepadWindow *window); static void mousepad_window_action_line_numbers (GtkToggleAction *action, MousepadWindow *window); static void mousepad_window_action_menubar (GtkToggleAction *action, @@ -465,6 +470,8 @@ static const GtkActionEntry action_entries[] = { "view-menu", NULL, N_("_View"), NULL, NULL, NULL, }, { "font", GTK_STOCK_SELECT_FONT, N_("Select F_ont..."), NULL, N_("Change the editor font"), G_CALLBACK (mousepad_window_action_select_font), }, + { "zoom-in", GTK_STOCK_ZOOM_IN, N_("Zoom in"), "plus", N_("Increase font size"), G_CALLBACK (mousepad_window_action_zoom_in), }, + { "zoom-out", GTK_STOCK_ZOOM_OUT, N_("Zoom out"), "minus", N_("Decrease font size"), G_CALLBACK (mousepad_window_action_zoom_out), }, { "color-scheme-menu", NULL, N_("_Color Scheme"), NULL, NULL, NULL, }, { "document-menu", NULL, N_("_Document"), NULL, NULL, NULL, }, @@ -5016,6 +5023,83 @@ mousepad_window_action_select_font (GtkAction *action, gtk_widget_destroy (dialog); } +static void +mousepad_window_action_zoom_in (GtkAction *action, + MousepadWindow *window) +{ + gchar *font_name, *new_font_name; + int font_size; + PangoFontDescription *font_desc; + + g_return_if_fail (MOUSEPAD_IS_WINDOW (window)); + g_return_if_fail (MOUSEPAD_IS_DOCUMENT (window->active)); + + /* set the current font name */ + font_name = MOUSEPAD_SETTING_GET_STRING (FONT_NAME); + font_desc = pango_font_description_from_string(font_name); + + /* extract font size from font description */ + font_size = pango_font_description_get_size(font_desc) / PANGO_SCALE; + + /* set 72 as maximum size */ + if (font_size + 2 > 72) { + g_free (font_name); + return; + } + + /* increase font size by 2 */ + pango_font_description_set_size(font_desc, (font_size + 2) * PANGO_SCALE); + new_font_name = pango_font_description_to_string(font_desc); + + /* store the font in the preferences */ + MOUSEPAD_SETTING_SET_STRING (FONT_NAME, new_font_name); + /* stop using default font */ + MOUSEPAD_SETTING_SET_BOOLEAN (USE_DEFAULT_FONT, FALSE); + + /* cleanup */ + g_free (font_name); + g_free (new_font_name); + pango_font_description_free(font_desc); +} + +static void +mousepad_window_action_zoom_out (GtkAction *action, + MousepadWindow *window) +{ + gchar *font_name, *new_font_name; + int font_size; + PangoFontDescription *font_desc; + + g_return_if_fail (MOUSEPAD_IS_WINDOW (window)); + g_return_if_fail (MOUSEPAD_IS_DOCUMENT (window->active)); + + /* set the current font name */ + font_name = MOUSEPAD_SETTING_GET_STRING (FONT_NAME); + font_desc = pango_font_description_from_string(font_name); + + /* extract font size from font description */ + font_size = pango_font_description_get_size(font_desc) / PANGO_SCALE; + + /* set 72 as maximum size */ + if (font_size - 2 < 6) { + g_free (font_name); + return; + } + + /* increase font size by 2 */ + pango_font_description_set_size(font_desc, (font_size - 2) * PANGO_SCALE); + new_font_name = pango_font_description_to_string(font_desc); + + /* store the font in the preferences */ + MOUSEPAD_SETTING_SET_STRING (FONT_NAME, new_font_name); + /* stop using default font */ + MOUSEPAD_SETTING_SET_BOOLEAN (USE_DEFAULT_FONT, FALSE); + + /* cleanup */ + g_free (font_name); + g_free (new_font_name); + pango_font_description_free(font_desc); +} static void