[vte/vte-next] Make 'font' a style property
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vte/vte-next] Make 'font' a style property
- Date: Sun, 22 May 2011 22:20:31 +0000 (UTC)
commit 0b4faca6c95e06039694e1985960b2fdc390ed7f
Author: Christian Persch <chpe gnome org>
Date: Sun May 22 23:32:40 2011 +0200
Make 'font' a style property
Need to think how we're going to handle text size 'zoom' increase/decrease.
Maybe expose a 'font-size' style property? Or have a 'zoom-factor' object
property?
doc/reference/vte-sections.txt | 3 -
src/vte.c | 167 +++++++++++-----------------------------
src/vte.h | 6 --
src/vteapp.c | 20 +++--
4 files changed, 56 insertions(+), 140 deletions(-)
---
diff --git a/doc/reference/vte-sections.txt b/doc/reference/vte-sections.txt
index e383b46..98c8c5a 100644
--- a/doc/reference/vte-sections.txt
+++ b/doc/reference/vte-sections.txt
@@ -28,9 +28,6 @@ vte_terminal_set_scroll_on_keystroke
vte_terminal_get_background_pattern
vte_terminal_set_background_pattern
vte_terminal_set_scrollback_lines
-vte_terminal_set_font
-vte_terminal_set_font_from_string
-vte_terminal_get_font
vte_terminal_get_has_selection
vte_terminal_set_word_chars
vte_terminal_is_word_char
diff --git a/src/vte.c b/src/vte.c
index 63f6c17..6982c26 100644
--- a/src/vte.c
+++ b/src/vte.c
@@ -120,6 +120,7 @@ static void remove_update_timeout (VteTerminal *terminal);
static void reset_update_regions (VteTerminal *terminal);
static void vte_terminal_set_cursor_blinks_internal(VteTerminal *terminal, gboolean blink);
static void _vte_check_cursor_blink(VteTerminal *terminal);
+static void vte_terminal_set_font(VteTerminal *terminal, PangoFontDescription *desc /* adopted */);
static gboolean process_timeout (gpointer data);
static gboolean update_timeout (gpointer data);
@@ -143,7 +144,6 @@ enum {
PROP_DELETE_BINDING,
PROP_EMULATION,
PROP_ENCODING,
- PROP_FONT_DESC,
PROP_ICON_TITLE,
PROP_MOUSE_POINTER_AUTOHIDE,
PROP_PTY_OBJECT,
@@ -4245,8 +4245,8 @@ vte_terminal_update_style(VteTerminal *terminal)
VteTerminalPrivate *pvt = terminal->pvt;
GtkWidget *widget = &terminal->widget;
gboolean allow_bold, scroll_background;
+ PangoFontDescription *font_desc;
- vte_terminal_set_font(terminal, pvt->fontdesc);
vte_terminal_set_padding(terminal);
vte_terminal_update_style_colors(terminal, FALSE);
vte_terminal_update_cursor_style(terminal);
@@ -4254,8 +4254,11 @@ vte_terminal_update_style(VteTerminal *terminal)
gtk_widget_style_get(widget,
"allow-bold", &allow_bold,
"scroll-background", &scroll_background,
+ "font", &font_desc,
NULL);
+ vte_terminal_set_font(terminal, font_desc /* adopted */);
+
if (allow_bold != pvt->allow_bold) {
pvt->allow_bold = allow_bold;
_vte_invalidate_all (terminal);
@@ -7071,11 +7074,6 @@ static void
vte_terminal_ensure_font (VteTerminal *terminal)
{
if (terminal->pvt->draw != NULL) {
- /* Load default fonts, if no fonts have been loaded. */
- if (!terminal->pvt->has_fonts) {
- vte_terminal_set_font(terminal,
- terminal->pvt->fontdesc);
- }
if (terminal->pvt->fontdirty) {
gint width, height, ascent;
terminal->pvt->fontdirty = FALSE;
@@ -7090,8 +7088,8 @@ vte_terminal_ensure_font (VteTerminal *terminal)
}
}
-/**
- * vte_terminal_set_font:
+/*
+ * _vte_terminal_set_font:
* @terminal: a #VteTerminal
* @font_desc: (allow-none): a #PangoFontDescription for the desired font, or %NULL
*
@@ -7101,108 +7099,41 @@ vte_terminal_ensure_font (VteTerminal *terminal)
* metrics, and attempt to resize itself to keep the same number of rows
* and columns.
*/
-void
+static void
vte_terminal_set_font(VteTerminal *terminal,
- const PangoFontDescription *font_desc)
+ PangoFontDescription *desc /* adopted */)
{
- GObject *object;
- GtkStyleContext *context;
- VteTerminalPrivate *pvt;
- const PangoFontDescription *style_font;
- PangoFontDescription *desc;
- gboolean same_desc;
-
- g_return_if_fail(VTE_IS_TERMINAL(terminal));
-
- object = G_OBJECT(terminal);
- pvt = terminal->pvt;
+ VteTerminalPrivate *pvt = terminal->pvt;
/* Create an owned font description. */
- context = gtk_widget_get_style_context(&terminal->widget);
- style_font = gtk_style_context_get_font(context, GTK_STATE_FLAG_NORMAL);
- desc = pango_font_description_copy (style_font);
- pango_font_description_set_family_static (desc, "monospace");
- if (font_desc != NULL) {
- pango_font_description_merge (desc, font_desc, TRUE);
- _VTE_DEBUG_IF(VTE_DEBUG_MISC) {
- if (desc) {
- char *tmp;
- tmp = pango_font_description_to_string(desc);
- g_printerr("Using pango font \"%s\".\n", tmp);
- g_free (tmp);
- }
- }
- } else {
- _vte_debug_print(VTE_DEBUG_MISC,
- "Using default monospace font.\n");
- }
-
- same_desc = pvt->fontdesc && pango_font_description_equal (pvt->fontdesc, desc);
-
- /* Note that we proceed to recreating the font even if the description
- * are the same. This is because maybe screen
- * font options were changed, or new fonts installed. Those will be
- * detected at font creation time and respected.
+ _VTE_DEBUG_IF(VTE_DEBUG_MISC | VTE_DEBUG_STYLE) {
+ char *tmp;
+ tmp = pango_font_description_to_string(desc);
+ g_printerr("Using pango font \"%s\".\n", tmp);
+ g_free (tmp);
+ }
+
+ /* Note that we proceed to recreating the font even if
+ * pango_font_description_equal(@desc, pvt->fontdesc).
+ * This is because maybe screen font options were changed,
+ * or new fonts installed. Those will be
+ * detected at font creation time and respected.
+ *
+ * FIXMEchpe: handle these separately!
*/
- g_object_freeze_notify(object);
-
/* Free the old font description and save the new one. */
- if (terminal->pvt->fontdesc != NULL) {
- pango_font_description_free(terminal->pvt->fontdesc);
- }
- pvt->fontdesc = desc;
+ if (pvt->fontdesc != NULL) {
+ pango_font_description_free(pvt->fontdesc);
+ }
+ pvt->fontdesc = desc /* adopted */;
pvt->fontdirty = TRUE;
pvt->has_fonts = TRUE;
- if (!same_desc)
- g_object_notify(object, "font-desc");
-
/* Set the drawing font. */
if (gtk_widget_get_realized (&terminal->widget)) {
vte_terminal_ensure_font (terminal);
}
-
- g_object_thaw_notify(object);
-}
-
-/**
- * vte_terminal_set_font_from_string:
- * @terminal: a #VteTerminal
- * @name: (type utf8): a pango font description in string form
- *
- * A convenience function which converts @name into a #PangoFontDescription and
- * passes it to vte_terminal_set_font().
- */
-void
-vte_terminal_set_font_from_string(VteTerminal *terminal,
- const char *name)
-{
- PangoFontDescription *font_desc = NULL;
- g_return_if_fail(VTE_IS_TERMINAL(terminal));
- g_return_if_fail(name != NULL);
-
- if (name)
- font_desc = pango_font_description_from_string(name);
- vte_terminal_set_font(terminal, font_desc);
- pango_font_description_free(font_desc);
-}
-
-/**
- * vte_terminal_get_font:
- * @terminal: a #VteTerminal
- *
- * Queries the terminal for information about the fonts which will be
- * used to draw text in the terminal.
- *
- * Returns: (transfer none): a #PangoFontDescription describing the font the terminal is
- * currently using to render text
- */
-const PangoFontDescription *
-vte_terminal_get_font(VteTerminal *terminal)
-{
- g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL);
- return terminal->pvt->fontdesc;
}
/* Read and refresh our perception of the size of the PTY. */
@@ -10585,9 +10516,6 @@ vte_terminal_get_property (GObject *object,
case PROP_ENCODING:
g_value_set_string (value, vte_terminal_get_encoding (terminal));
break;
- case PROP_FONT_DESC:
- g_value_set_boxed (value, vte_terminal_get_font (terminal));
- break;
case PROP_ICON_TITLE:
g_value_set_string (value, vte_terminal_get_icon_title (terminal));
break;
@@ -10665,9 +10593,6 @@ vte_terminal_set_property (GObject *object,
case PROP_ENCODING:
vte_terminal_set_encoding (terminal, g_value_get_string (value));
break;
- case PROP_FONT_DESC:
- vte_terminal_set_font (terminal, g_value_get_boxed (value));
- break;
case PROP_MOUSE_POINTER_AUTOHIDE:
vte_terminal_set_mouse_autohide (terminal, g_value_get_boolean (value));
break;
@@ -11390,25 +11315,7 @@ vte_terminal_class_init(VteTerminalClass *klass)
g_param_spec_string ("encoding", NULL, NULL,
NULL,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- /**
- * VteTerminal:font-desc:
- *
- * Specifies the font used for rendering all text displayed by the terminal,
- * overriding any fonts set using gtk_widget_modify_font(). The terminal
- * will immediately attempt to load the desired font, retrieve its
- * metrics, and attempt to resize itself to keep the same number of rows
- * and columns.
- *
- * Since: 0.20
- */
- g_object_class_install_property
- (gobject_class,
- PROP_FONT_DESC,
- g_param_spec_boxed ("font-desc", NULL, NULL,
- PANGO_TYPE_FONT_DESCRIPTION,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
+
/**
* VteTerminal:icon-title:
*
@@ -11572,7 +11479,6 @@ vte_terminal_class_init(VteTerminalClass *klass)
TRUE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
/**
* VteTerminal:cursor-blink-mode:
*
@@ -11603,6 +11509,20 @@ vte_terminal_class_init(VteTerminalClass *klass)
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
/**
+ * VteTerminal:font:
+ *
+ * Specifies the font used for rendering all text displayed by the terminal.
+ * Must be a monospaced font!
+ *
+ * Since: 0.30
+ */
+ gtk_widget_class_install_style_property
+ (widget_class,
+ g_param_spec_boxed ("font", NULL, NULL,
+ PANGO_TYPE_FONT_DESCRIPTION,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ /**
* VteTerminal:scroll-background:
*
* Controls whether or not the terminal will scroll the background image (if
@@ -11639,6 +11559,7 @@ vte_terminal_class_init(VteTerminalClass *klass)
"-VteTerminal-allow-bold: true;\n"
"-VteTerminal-cursor-blink-mode: system;\n"
"-VteTerminal-cursor-shape: block;\n"
+ "-VteTerminal-font: Monospace 10;\n"
"-VteTerminal-scroll-background: false;\n"
#include "vtepalettecss.h"
"}\n",
diff --git a/src/vte.h b/src/vte.h
index 1adf6f8..5f58d89 100644
--- a/src/vte.h
+++ b/src/vte.h
@@ -238,12 +238,6 @@ void vte_terminal_set_scrollback_lines(VteTerminal *terminal, glong lines);
void vte_terminal_im_append_menuitems(VteTerminal *terminal,
GtkMenuShell *menushell);
-/* Set or retrieve the current font. */
-void vte_terminal_set_font(VteTerminal *terminal,
- const PangoFontDescription *font_desc);
-void vte_terminal_set_font_from_string(VteTerminal *terminal, const char *name);
-const PangoFontDescription *vte_terminal_get_font(VteTerminal *terminal);
-
/* Check if the terminal is the current selection owner. */
gboolean vte_terminal_get_has_selection(VteTerminal *terminal);
diff --git a/src/vteapp.c b/src/vteapp.c
index 7fb3b59..c73d012 100644
--- a/src/vteapp.c
+++ b/src/vteapp.c
@@ -344,6 +344,7 @@ move_window(GtkWidget *widget, guint x, guint y, gpointer data)
}
}
+#if 0
static void
adjust_font_size(GtkWidget *widget, gpointer data, gint howmuch)
{
@@ -366,7 +367,7 @@ adjust_font_size(GtkWidget *widget, gpointer data, gint howmuch)
oheight -= char_height * rows;
/* Calculate the new font size. */
- desired = pango_font_description_copy(vte_terminal_get_font(terminal));
+ gtk_widget_style_get(&terminal->widget, "font", &desired, NULL);
newsize = pango_font_description_get_size(desired) / PANGO_SCALE;
newsize += howmuch;
pango_font_description_set_size(desired,
@@ -374,7 +375,7 @@ adjust_font_size(GtkWidget *widget, gpointer data, gint howmuch)
/* Change the font, then resize the window so that we have the same
* number of rows and columns. */
- vte_terminal_set_font(terminal, desired);
+ // FIXMEchpe
gtk_window_resize(GTK_WINDOW(data),
columns * char_width + owidth,
rows * char_height + oheight);
@@ -393,6 +394,7 @@ decrease_font_size(GtkWidget *widget, gpointer data)
{
adjust_font_size(widget, data, -1);
}
+#endif
static gboolean
read_and_feed(GIOChannel *source, GIOCondition condition, gpointer data)
@@ -551,7 +553,7 @@ main(int argc, char **argv)
char *geometry = NULL;
gint lines = 100;
const char *message = "Launching interactive shell...\r\n";
- const char *font = NULL;
+ char *font = NULL;
const char *termcap = NULL;
const char *command = NULL;
const char *working_directory = NULL;
@@ -808,6 +810,11 @@ main(int argc, char **argv)
cursor_shape_string);
g_free(cursor_shape_string);
}
+ if (font) {
+ g_string_append_printf (css_string, "VteTerminal { -VteTerminal-font: %s; }\n",
+ font);
+ g_free(font);
+ }
if (scroll) {
g_string_append (css_string, "VteTerminal { -VteTerminal-scroll-background: true; }\n");
}
@@ -905,11 +912,13 @@ main(int argc, char **argv)
g_signal_connect(widget, "move-window",
G_CALLBACK(move_window), window);
+#if 0
/* Connect to font tweakage. */
g_signal_connect(widget, "increase-font-size",
G_CALLBACK(increase_font_size), window);
g_signal_connect(widget, "decrease-font-size",
G_CALLBACK(decrease_font_size), window);
+#endif
if (!use_scrolled_window) {
/* Create the scrollbar for the widget. */
@@ -958,11 +967,6 @@ main(int argc, char **argv)
vte_terminal_set_emulation(terminal, termcap);
}
- /* Set the default font. */
- if (font) {
- vte_terminal_set_font_from_string(terminal, font);
- }
-
if (css_string->len > 0) {
GtkCssProvider *provider;
GError *err = NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]