Mercurial > pidgin
diff src/gtkimhtml.c @ 7740:ddc450689c05
[gaim-migrate @ 8385]
Font sizes wysiwyg. Which is cool.
Now we just need to make POINT_SIZE center around the GTK+ theme font size.
Also, it would be cool if we could handle the ol' point size/font size problem
here.
committer: Tailor Script <tailor@pidgin.im>
| author | Sean Egan <seanegan@gmail.com> |
|---|---|
| date | Thu, 04 Dec 2003 07:53:42 +0000 |
| parents | 662a33ce4343 |
| children | 6cd69aa58253 |
line wrap: on
line diff
--- a/src/gtkimhtml.c Thu Dec 04 06:33:10 2003 +0000 +++ b/src/gtkimhtml.c Thu Dec 04 07:53:42 2003 +0000 @@ -523,6 +523,8 @@ imhtml->edit.forecolor = NULL; imhtml->edit.backcolor = NULL; imhtml->edit.fontface = NULL; + imhtml->edit.sizespan = NULL; + imhtml->edit.fontsize = 3; imhtml->format_spans = NULL; @@ -1640,6 +1642,8 @@ imhtml->edit.fontface = NULL; imhtml->edit.forecolor = NULL; imhtml->edit.backcolor = NULL; + imhtml->edit.sizespan = NULL; + imhtml->edit.fontsize = 3; } void gtk_imhtml_page_up (GtkIMHtml *imhtml) @@ -2013,6 +2017,20 @@ gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &face, span->start); gtk_text_buffer_apply_tag(imhtml->text_buffer, span->tag, &face, iter); } + + if ((span = imhtml->edit.sizespan)) { + GtkTextIter size; + /* We create the tags here so that one can grow font or shrink font several times + * in a row without creating unnecessary tags */ + if (span->tag == NULL) { + span->tag = gtk_text_buffer_create_tag + (imhtml->text_buffer, NULL, "size-points", (double)_point_sizes [imhtml->edit.fontsize-1], NULL); + span->start_tag = g_strdup_printf("<font size='%d'>", imhtml->edit.fontsize); + span->end_tag = g_strdup("</font>"); + } + gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &size, span->start); + gtk_text_buffer_apply_tag(imhtml->text_buffer, span->tag, &size, iter); + } } void gtk_imhtml_set_editable(GtkIMHtml *imhtml, gboolean editable) @@ -2099,6 +2117,64 @@ return imhtml->edit.underline != NULL; } +void gtk_imhtml_font_shrink(GtkIMHtml *imhtml) +{ + GtkIMHtmlFormatSpan *span; + GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer); + GtkTextIter iter; + gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins); + if (imhtml->edit.fontsize == 1) + return; + + imhtml->edit.fontsize--; + + if (imhtml->edit.sizespan) { + GtkTextIter iter2; + gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter2, imhtml->edit.sizespan->start); + if (gtk_text_iter_equal(&iter2, &iter)) + return; + span = imhtml->edit.sizespan; + span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE); + } + + span = g_malloc(sizeof(GtkIMHtmlFormatSpan)); + span->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE); + span->end = NULL; + span->buffer = imhtml->text_buffer; + span->tag = NULL; + imhtml->edit.sizespan = span; + imhtml->format_spans = g_list_append(imhtml->format_spans, span); +} + +void gtk_imhtml_font_grow(GtkIMHtml *imhtml) +{ + GtkIMHtmlFormatSpan *span; + GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer); + GtkTextIter iter; + gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins); + if (imhtml->edit.fontsize == MAX_FONT_SIZE) + return; + + imhtml->edit.fontsize++; + + if (imhtml->edit.sizespan) { + GtkTextIter iter2; + gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter2, imhtml->edit.sizespan->start); + if (gtk_text_iter_equal(&iter2, &iter)) + return; + span = imhtml->edit.sizespan; + span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE); + } + + span = g_malloc(sizeof(GtkIMHtmlFormatSpan)); + span->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE); + span->end = NULL; + span->tag = NULL; + span->buffer = imhtml->text_buffer; + imhtml->edit.sizespan = span; + imhtml->format_spans = g_list_append(imhtml->format_spans, span); +} + gboolean gtk_imhtml_toggle_forecolor(GtkIMHtml *imhtml, const char *color) { GtkIMHtmlFormatSpan *span;
