Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
GNOME
gnome-text-editor
Commits
ed44e9b0
Commit
ed44e9b0
authored
Jul 28, 2021
by
Christian Hergert
Browse files
sourceview: implement zoom in/out/one
Fixes
#96
parent
e117a4d4
Pipeline
#301377
passed with stages
in 4 minutes and 42 seconds
Changes
2
Pipelines
2
Hide whitespace changes
Inline
Side-by-side
src/editor-source-view.c
View file @
ed44e9b0
...
...
@@ -33,6 +33,7 @@ struct _EditorSourceView
PangoFontDescription
*
font_desc
;
GMenuModel
*
spelling_menu
;
char
*
spelling_word
;
int
font_scale
;
};
G_DEFINE_TYPE
(
EditorSourceView
,
editor_source_view
,
GTK_SOURCE_TYPE_VIEW
)
...
...
@@ -45,6 +46,56 @@ enum {
static
GParamSpec
*
properties
[
N_PROPS
];
static
void
editor_source_view_update_css
(
EditorSourceView
*
self
)
{
const
PangoFontDescription
*
font_desc
;
PangoFontDescription
*
scaled
=
NULL
;
g_autoptr
(
GString
)
str
=
NULL
;
g_autofree
char
*
font_css
=
NULL
;
int
size
=
11
;
/* 11pt */
g_assert
(
EDITOR_IS_SOURCE_VIEW
(
self
));
if
(
self
->
font_scale
==
0
&&
self
->
font_desc
==
NULL
)
{
gtk_css_provider_load_from_data
(
self
->
css_provider
,
""
,
-
1
);
return
;
}
if
(
self
->
font_desc
!=
NULL
&&
pango_font_description_get_set_fields
(
self
->
font_desc
)
&
PANGO_FONT_MASK_SIZE
)
size
=
pango_font_description_get_size
(
self
->
font_desc
)
/
PANGO_SCALE
;
size
=
MAX
(
1
,
size
+
self
->
font_scale
);
font_desc
=
self
->
font_desc
;
if
(
size
!=
0
)
{
if
(
font_desc
)
scaled
=
pango_font_description_copy
(
font_desc
);
else
scaled
=
pango_font_description_new
();
pango_font_description_set_size
(
scaled
,
size
*
PANGO_SCALE
);
font_desc
=
scaled
;
}
str
=
g_string_new
(
"textview {
\n
"
);
if
(
font_desc
)
{
font_css
=
_editor_font_description_to_css
(
font_desc
);
g_string_append
(
str
,
font_css
);
g_string_append_c
(
str
,
'\n'
);
}
g_string_append
(
str
,
"}
\n
"
);
gtk_css_provider_load_from_data
(
self
->
css_provider
,
str
->
str
,
-
1
);
g_clear_pointer
(
&
scaled
,
pango_font_description_free
);
}
static
gboolean
on_key_pressed_cb
(
GtkEventControllerKey
*
key
,
guint
keyval
,
...
...
@@ -276,6 +327,27 @@ editor_source_view_action_spelling_correct (GtkWidget *widget,
gtk_text_buffer_end_user_action
(
buffer
);
}
static
void
editor_source_view_action_zoom
(
GtkWidget
*
widget
,
const
char
*
action_name
,
GVariant
*
param
)
{
EditorSourceView
*
self
=
(
EditorSourceView
*
)
widget
;
g_assert
(
EDITOR_IS_SOURCE_VIEW
(
self
));
if
(
g_strcmp0
(
action_name
,
"page.zoom-in"
)
==
0
)
self
->
font_scale
++
;
else
if
(
g_strcmp0
(
action_name
,
"page.zoom-out"
)
==
0
)
self
->
font_scale
--
;
else
if
(
g_strcmp0
(
action_name
,
"page.zoom-one"
)
==
0
)
self
->
font_scale
=
0
;
else
g_assert_not_reached
();
editor_source_view_update_css
(
self
);
}
static
void
editor_source_view_finalize
(
GObject
*
object
)
{
...
...
@@ -345,9 +417,18 @@ editor_source_view_class_init (EditorSourceViewClass *klass)
g_object_class_install_properties
(
object_class
,
N_PROPS
,
properties
);
gtk_widget_class_install_action
(
widget_class
,
"page.zoom-in"
,
NULL
,
editor_source_view_action_zoom
);
gtk_widget_class_install_action
(
widget_class
,
"page.zoom-out"
,
NULL
,
editor_source_view_action_zoom
);
gtk_widget_class_install_action
(
widget_class
,
"page.zoom-one"
,
NULL
,
editor_source_view_action_zoom
);
gtk_widget_class_install_action
(
widget_class
,
"spelling.add"
,
NULL
,
editor_source_view_action_spelling_add
);
gtk_widget_class_install_action
(
widget_class
,
"spelling.ignore"
,
NULL
,
editor_source_view_action_spelling_ignore
);
gtk_widget_class_install_action
(
widget_class
,
"spelling.correct"
,
"s"
,
editor_source_view_action_spelling_correct
);
gtk_widget_class_add_binding_action
(
widget_class
,
GDK_KEY_plus
,
GDK_CONTROL_MASK
,
"page.zoom-in"
,
NULL
);
gtk_widget_class_add_binding_action
(
widget_class
,
GDK_KEY_KP_Add
,
GDK_CONTROL_MASK
,
"page.zoom-in"
,
NULL
);
gtk_widget_class_add_binding_action
(
widget_class
,
GDK_KEY_minus
,
GDK_CONTROL_MASK
,
"page.zoom-out"
,
NULL
);
gtk_widget_class_add_binding_action
(
widget_class
,
GDK_KEY_KP_Subtract
,
GDK_CONTROL_MASK
,
"page.zoom-out"
,
NULL
);
gtk_widget_class_add_binding_action
(
widget_class
,
GDK_KEY_0
,
GDK_CONTROL_MASK
,
"page.zoom-one"
,
NULL
);
}
static
void
...
...
@@ -407,26 +488,6 @@ editor_source_view_init (EditorSourceView *self)
gtk_text_view_set_extra_menu
(
GTK_TEXT_VIEW
(
self
),
G_MENU_MODEL
(
joined
));
}
static
void
editor_source_view_update_css
(
EditorSourceView
*
self
)
{
g_autoptr
(
GString
)
str
=
NULL
;
g_autofree
char
*
font_css
=
NULL
;
g_assert
(
EDITOR_IS_SOURCE_VIEW
(
self
));
str
=
g_string_new
(
"textview {
\n
"
);
if
(
self
->
font_desc
)
{
font_css
=
_editor_font_description_to_css
(
self
->
font_desc
);
g_string_append
(
str
,
font_css
);
g_string_append_c
(
str
,
'\n'
);
}
g_string_append
(
str
,
"}
\n
"
);
gtk_css_provider_load_from_data
(
self
->
css_provider
,
str
->
str
,
-
1
);
}
const
PangoFontDescription
*
editor_source_view_get_font_desc
(
EditorSourceView
*
self
)
{
...
...
@@ -451,6 +512,8 @@ editor_source_view_set_font_desc (EditorSourceView *self,
if
(
font_desc
)
self
->
font_desc
=
pango_font_description_copy
(
font_desc
);
self
->
font_scale
=
0
;
editor_source_view_update_css
(
self
);
g_object_notify_by_pspec
(
G_OBJECT
(
self
),
properties
[
PROP_FONT_DESC
]);
...
...
src/help-overlay.ui
View file @
ed44e9b0
...
...
@@ -47,6 +47,29 @@
</child>
</object>
</child>
<child>
<object
class=
"GtkShortcutsGroup"
>
<property
name=
"title"
translatable=
"yes"
context=
"shortcut window"
>
Zoom
</property>
<child>
<object
class=
"GtkShortcutsShortcut"
>
<property
name=
"accelerator"
>
<
ctrl
>
plus
</property>
<property
name=
"title"
translatable=
"yes"
context=
"shortcut window"
>
Zoom In
</property>
</object>
</child>
<child>
<object
class=
"GtkShortcutsShortcut"
>
<property
name=
"accelerator"
>
<
ctrl
>
minus
</property>
<property
name=
"title"
translatable=
"yes"
context=
"shortcut window"
>
Zoom Out
</property>
</object>
</child>
<child>
<object
class=
"GtkShortcutsShortcut"
>
<property
name=
"accelerator"
>
<
ctrl
>
0
</property>
<property
name=
"title"
translatable=
"yes"
context=
"shortcut window"
>
Reset Zoom
</property>
</object>
</child>
</object>
</child>
<child>
<object
class=
"GtkShortcutsGroup"
>
<property
name=
"title"
translatable=
"yes"
context=
"shortcut window"
>
Documents
</property>
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment