GHashTable *glk_text_buffer_styles = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_object_unref);
GtkTextTag *tag;
- PangoFontDescription *default_font_desc = pango_font_description_from_string("Serif");
- PangoFontDescription *monospace_font_desc = pango_font_description_from_string("Monospace");
-
/* Initialise the default styles for a text grid */
tag = gtk_text_tag_new("default");
g_object_set(tag, "family", "Monospace", "family-set", TRUE, NULL);
g_hash_table_insert(default_text_buffer_styles, "pager", pager_tag);
text_tag_to_attr_list(pager_tag, priv->pager_attr_list);
- pango_font_description_free(default_font_desc);
- pango_font_description_free(monospace_font_desc);
-
priv->styles->text_grid = default_text_grid_styles;
priv->styles->text_buffer = default_text_buffer_styles;
void
scan_css_file(GScanner *scanner, ChimaraGlk *glk)
{
- CHIMARA_GLK_USE_PRIVATE(glk, priv);
-
while( g_scanner_peek_next_token(scanner) != G_TOKEN_EOF) {
if( !style_accept_style_selector(scanner, glk) )
break;
g_scanner_destroy(scanner);
/* Update the pager prompt to the new style */
- GtkTextTag *pager_tag = GTK_TEXT_TAG( g_hash_table_lookup(priv->styles->text_buffer, "pager") );
- text_tag_to_attr_list(pager_tag, priv->pager_attr_list);
+ style_update(glk);
}
/* Internal function: parses a token */
get_current_font(guint32 wintype)
{
ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
- GtkTextTag *tag;
+ GHashTable *styles, *glk_styles;
+ PangoFontDescription *font;
switch(wintype) {
case wintype_TextGrid:
- tag = g_hash_table_lookup(glk_data->styles->text_grid, "default");
+ styles = glk_data->styles->text_grid;
+ glk_styles = glk_data->glk_styles->text_grid;
+ font = pango_font_description_from_string("Monospace");
break;
case wintype_TextBuffer:
- tag = g_hash_table_lookup(glk_data->styles->text_buffer, "default");
+ styles = glk_data->styles->text_buffer;
+ glk_styles = glk_data->glk_styles->text_buffer;
+ font = pango_font_description_from_string("Serif");
break;
default:
return NULL;
}
- PangoFontDescription *font;
- g_object_get( G_OBJECT(tag), "font-desc", &font, NULL );
+ PangoAttrList *list = pango_attr_list_new();
+
+ text_tag_to_attr_list( g_hash_table_lookup(styles, "default"), list );
+ PangoAttrIterator *it = pango_attr_list_get_iterator(list);
+ pango_attr_iterator_get_font(it, font, NULL, NULL);
+ pango_attr_iterator_destroy(it);
+
+ text_tag_to_attr_list( g_hash_table_lookup(styles, "normal"), list );
+ it = pango_attr_list_get_iterator(list);
+ pango_attr_iterator_get_font(it, font, NULL, NULL);
+ pango_attr_iterator_destroy(it);
+
+ text_tag_to_attr_list( g_hash_table_lookup(glk_styles, "glk-normal"), list );
+ it = pango_attr_list_get_iterator(list);
+ pango_attr_iterator_get_font(it, font, NULL, NULL);
+ pango_attr_iterator_destroy(it);
+
+ /* Make a copy of the family, preventing it's destruction at the end of this function. */
+ pango_font_description_set_family( font, pango_font_description_get_family(font) );
+
+ pango_attr_list_unref(list);
return font;
}
}
/* Font description updates the following properties simultaniously:
- * family, style, weight, variant, stretch, size
+ * family, style, weight, variant, stretch, size.
+ * FIXME: Except it doesn't really.
*/
g_object_get(tag, "font-desc", &font_desc, NULL);
pango_attr_list_insert(