# HG changeset patch # User Todd Kulesza # Date 968565195 0 # Node ID 6cca24db6137a66e43bb593aa4b680477d912ac3 # Parent d828bdc3854b38c22627612c9a97b62f661f71b7 [gaim-migrate @ 879] better bgcolor handling committer: Tailor Script diff -r d828bdc3854b -r 6cca24db6137 src/gtkhtml.c --- a/src/gtkhtml.c Fri Sep 08 17:38:40 2000 +0000 +++ b/src/gtkhtml.c Sun Sep 10 05:53:15 2000 +0000 @@ -169,6 +169,8 @@ static void draw_cursor(GtkHtml * html); static void undraw_cursor(GtkHtml * html); +static int get_line_height(GtkHtml *, GtkHtmlBit *); + static GtkWidgetClass *parent_class = NULL; GtkType gtk_html_get_type(void) @@ -1822,21 +1824,27 @@ return TRUE; } - static void gtk_html_draw_bit(GtkHtml * html, GtkHtmlBit * hb, int redraw) { int mypos, epos, - spos; + spos, + max_height; GdkGC *gc = html->gc; int shift; GtkStateType selected_state; GtkWidget *widget = GTK_WIDGET(html); GdkRectangle area; + GList *hbits; + GtkHtmlBit *hbit; if (html->frozen > 0) return; + hbits = html->html_bits; + + hbits = g_list_find(hbits, hb); + if (hb->type == HTML_BIT_TEXT) { @@ -2048,9 +2056,19 @@ /*end my stuff*/ - if (hb->text && hb->back != NULL && selected_state != GTK_STATE_SELECTED) { - int hwidth, hheight; - int hei = gdk_text_height(hb->font, "C", 1); + + + if (hb->text && hb->back != NULL && selected_state != GTK_STATE_SELECTED) + { + int hwidth, hheight, hei; + if (hbits->prev) + { + hbit = hbits->prev->data; + if (hbit->newline) + hei = get_line_height(html, hb); + } + else + hei = get_line_height(html, hb); gdk_window_get_size(html->html_area, &hwidth, &hheight); gdk_gc_set_foreground(gc, hb->back); gdk_draw_rectangle(html->html_area, gc, TRUE /* filled */, @@ -2089,7 +2107,6 @@ } else if (hb->type == HTML_BIT_SEP) { - gdk_draw_line(html->html_area, gc, hb->x + 2, hb->y - html->yoffset - (hb->height / 2 - 1), hb->x + hb->width, @@ -4329,3 +4346,27 @@ } } } + +static int get_line_height(GtkHtml *html, GtkHtmlBit *start) +{ + int height, max_height = 0; + GList *hbits = html->html_bits; + GtkHtmlBit *hbit; + + hbits = g_list_find(hbits, start); + + while (TRUE) + { + hbit = hbits->data; + if (hbit->font) + height = gdk_text_height(hbit->font, "C", 1); + + if (max_height < height) + max_height = height; + if (hbit->newline) + break; + hbits = hbits->next; + } + + return max_height; +} \ No newline at end of file