X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=libchimara%2Fstyle.c;h=406a8848969f6d4cce70a9533694bac5401b374e;hb=fd95bbfc8f01fe812d9f24d1d377079df5f968d5;hp=36d6d2644dce293390f019981420f3a0c8ac0001;hpb=dc9213af8972055ee54bdee4cced6103e1432010;p=projects%2Fchimara%2Fchimara.git diff --git a/libchimara/style.c b/libchimara/style.c index 36d6d26..406a884 100644 --- a/libchimara/style.c +++ b/libchimara/style.c @@ -53,7 +53,6 @@ static const gchar* TAG_NAMES[] = { "user1", "user2", "hyperlink", - "pager", "default" }; @@ -123,16 +122,6 @@ glk_set_style_stream(strid_t str, glui32 styl) { str->glk_style = (gchar*) get_glk_tag_name(styl); } -/* Internal function: call this to initialize the layout of the 'more' prompt. */ -void -style_init_more_prompt(winid_t win) -{ - ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key); - - win->pager_layout = gtk_widget_create_pango_layout(win->widget, "More"); - pango_layout_set_attributes(win->pager_layout, glk_data->pager_attr_list); -} - /* Internal function: call this to initialize the default styles to a textbuffer. */ void style_init_textbuffer(GtkTextBuffer *buffer) @@ -343,15 +332,9 @@ style_init(ChimaraGlk *glk) g_object_set(tag, "foreground", "#0000ff", "foreground-set", TRUE, "underline", PANGO_UNDERLINE_SINGLE, "underline-set", TRUE, NULL); g_hash_table_insert(default_text_buffer_styles, "hyperlink", tag); - GtkTextTag *pager_tag = gtk_text_tag_new("pager"); - g_object_set(pager_tag, "family", "Monospace", "family-set", TRUE, "foreground", "#ffffff", "foreground-set", TRUE, "background", "#000000", "background-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); - priv->styles->text_grid = default_text_grid_styles; priv->styles->text_buffer = default_text_buffer_styles; - /* Initialize the GLK styles to empty tags */ int i; for(i=0; istyles->text_buffer, "pager") ); - text_tag_to_attr_list(pager_tag, priv->pager_attr_list); -} - /* Determine the current colors used to render the text for a given stream. * This can be set in a number of places */ static void @@ -1279,3 +1249,45 @@ style_stream_colors(strid_t str, GdkColor **foreground, GdkColor **background) g_object_get(str->window->zcolor, "background-gdk", background, NULL); } } + +/* Apply styles to a segment of text in a GtkTextBuffer, combining multiple + * GtkTextTags. + */ +void +style_apply(winid_t win, GtkTextIter *start, GtkTextIter *end) +{ + GtkTextBuffer *buffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW(win->widget) ); + GtkTextTagTable *tags = gtk_text_buffer_get_tag_table(buffer); + + GtkTextTag *default_tag = gtk_text_tag_table_lookup(tags, "default"); + GtkTextTag *style_tag = gtk_text_tag_table_lookup(tags, win->window_stream->style); + GtkTextTag *glk_style_tag = gtk_text_tag_table_lookup(tags, win->window_stream->glk_style); + + // Player's style overrides + gtk_text_buffer_apply_tag(buffer, style_tag, start, end); + + // GLK Program's style overrides + gtk_text_buffer_apply_tag(buffer, glk_style_tag, start, end); + + // Default style + gtk_text_buffer_apply_tag(buffer, default_tag, start, end); + + // Link style overrides + if(win->window_stream->hyperlink_mode) { + GtkTextTag *link_style_tag = gtk_text_tag_table_lookup(tags, "hyperlink"); + GtkTextTag *link_tag = win->current_hyperlink->tag; + gtk_text_buffer_apply_tag(buffer, link_style_tag, start, end); + gtk_text_buffer_apply_tag(buffer, link_tag, start, end); + } + + // GLK Program's style overrides using garglk_set_zcolors() + if(win->zcolor != NULL) { + gtk_text_buffer_apply_tag(buffer, win->zcolor, start, end); + } + + // GLK Program's style overrides using garglk_set_reversevideo() + if(win->zcolor_reversed != NULL) { + gtk_text_buffer_apply_tag(buffer, win->zcolor_reversed, start, end); + } +} +