comparison 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
comparison
equal deleted inserted replaced
7739:2850079ad35f 7740:ddc450689c05
521 imhtml->edit.italic = NULL; 521 imhtml->edit.italic = NULL;
522 imhtml->edit.underline = NULL; 522 imhtml->edit.underline = NULL;
523 imhtml->edit.forecolor = NULL; 523 imhtml->edit.forecolor = NULL;
524 imhtml->edit.backcolor = NULL; 524 imhtml->edit.backcolor = NULL;
525 imhtml->edit.fontface = NULL; 525 imhtml->edit.fontface = NULL;
526 imhtml->edit.sizespan = NULL;
527 imhtml->edit.fontsize = 3;
526 528
527 imhtml->format_spans = NULL; 529 imhtml->format_spans = NULL;
528 530
529 imhtml->scalables = NULL; 531 imhtml->scalables = NULL;
530 #if GTK_CHECK_VERSION(2,2,0) 532 #if GTK_CHECK_VERSION(2,2,0)
1638 imhtml->edit.italic = NULL; 1640 imhtml->edit.italic = NULL;
1639 imhtml->edit.underline = NULL; 1641 imhtml->edit.underline = NULL;
1640 imhtml->edit.fontface = NULL; 1642 imhtml->edit.fontface = NULL;
1641 imhtml->edit.forecolor = NULL; 1643 imhtml->edit.forecolor = NULL;
1642 imhtml->edit.backcolor = NULL; 1644 imhtml->edit.backcolor = NULL;
1645 imhtml->edit.sizespan = NULL;
1646 imhtml->edit.fontsize = 3;
1643 } 1647 }
1644 1648
1645 void gtk_imhtml_page_up (GtkIMHtml *imhtml) 1649 void gtk_imhtml_page_up (GtkIMHtml *imhtml)
1646 { 1650 {
1647 GdkRectangle rect; 1651 GdkRectangle rect;
2010 2014
2011 if ((span = imhtml->edit.fontface)) { 2015 if ((span = imhtml->edit.fontface)) {
2012 GtkTextIter face; 2016 GtkTextIter face;
2013 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &face, span->start); 2017 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &face, span->start);
2014 gtk_text_buffer_apply_tag(imhtml->text_buffer, span->tag, &face, iter); 2018 gtk_text_buffer_apply_tag(imhtml->text_buffer, span->tag, &face, iter);
2019 }
2020
2021 if ((span = imhtml->edit.sizespan)) {
2022 GtkTextIter size;
2023 /* We create the tags here so that one can grow font or shrink font several times
2024 * in a row without creating unnecessary tags */
2025 if (span->tag == NULL) {
2026 span->tag = gtk_text_buffer_create_tag
2027 (imhtml->text_buffer, NULL, "size-points", (double)_point_sizes [imhtml->edit.fontsize-1], NULL);
2028 span->start_tag = g_strdup_printf("<font size='%d'>", imhtml->edit.fontsize);
2029 span->end_tag = g_strdup("</font>");
2030 }
2031 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &size, span->start);
2032 gtk_text_buffer_apply_tag(imhtml->text_buffer, span->tag, &size, iter);
2015 } 2033 }
2016 } 2034 }
2017 2035
2018 void gtk_imhtml_set_editable(GtkIMHtml *imhtml, gboolean editable) 2036 void gtk_imhtml_set_editable(GtkIMHtml *imhtml, gboolean editable)
2019 { 2037 {
2095 span = imhtml->edit.underline; 2113 span = imhtml->edit.underline;
2096 span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE); 2114 span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
2097 imhtml->edit.underline = NULL; 2115 imhtml->edit.underline = NULL;
2098 } 2116 }
2099 return imhtml->edit.underline != NULL; 2117 return imhtml->edit.underline != NULL;
2118 }
2119
2120 void gtk_imhtml_font_shrink(GtkIMHtml *imhtml)
2121 {
2122 GtkIMHtmlFormatSpan *span;
2123 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
2124 GtkTextIter iter;
2125 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
2126 if (imhtml->edit.fontsize == 1)
2127 return;
2128
2129 imhtml->edit.fontsize--;
2130
2131 if (imhtml->edit.sizespan) {
2132 GtkTextIter iter2;
2133 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter2, imhtml->edit.sizespan->start);
2134 if (gtk_text_iter_equal(&iter2, &iter))
2135 return;
2136 span = imhtml->edit.sizespan;
2137 span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
2138 }
2139
2140 span = g_malloc(sizeof(GtkIMHtmlFormatSpan));
2141 span->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
2142 span->end = NULL;
2143 span->buffer = imhtml->text_buffer;
2144 span->tag = NULL;
2145 imhtml->edit.sizespan = span;
2146 imhtml->format_spans = g_list_append(imhtml->format_spans, span);
2147 }
2148
2149 void gtk_imhtml_font_grow(GtkIMHtml *imhtml)
2150 {
2151 GtkIMHtmlFormatSpan *span;
2152 GtkTextMark *ins = gtk_text_buffer_get_insert(imhtml->text_buffer);
2153 GtkTextIter iter;
2154 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, ins);
2155 if (imhtml->edit.fontsize == MAX_FONT_SIZE)
2156 return;
2157
2158 imhtml->edit.fontsize++;
2159
2160 if (imhtml->edit.sizespan) {
2161 GtkTextIter iter2;
2162 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter2, imhtml->edit.sizespan->start);
2163 if (gtk_text_iter_equal(&iter2, &iter))
2164 return;
2165 span = imhtml->edit.sizespan;
2166 span->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
2167 }
2168
2169 span = g_malloc(sizeof(GtkIMHtmlFormatSpan));
2170 span->start = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE);
2171 span->end = NULL;
2172 span->tag = NULL;
2173 span->buffer = imhtml->text_buffer;
2174 imhtml->edit.sizespan = span;
2175 imhtml->format_spans = g_list_append(imhtml->format_spans, span);
2100 } 2176 }
2101 2177
2102 gboolean gtk_imhtml_toggle_forecolor(GtkIMHtml *imhtml, const char *color) 2178 gboolean gtk_imhtml_toggle_forecolor(GtkIMHtml *imhtml, const char *color)
2103 { 2179 {
2104 GtkIMHtmlFormatSpan *span; 2180 GtkIMHtmlFormatSpan *span;