| 529 { |
529 { |
| 530 GtkTextIter start, end, cur; |
530 GtkTextIter start, end, cur; |
| 531 int buf_x, buf_y; |
531 int buf_x, buf_y; |
| 532 GSList *tags, *l; |
532 GSList *tags, *l; |
| 533 GdkRectangle visible_rect; |
533 GdkRectangle visible_rect; |
| 534 |
534 GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(event->window)); |
| |
535 GdkColor gcolor; |
| |
536 |
| 535 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(widget), &visible_rect); |
537 gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(widget), &visible_rect); |
| 536 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget), |
538 gtk_text_view_buffer_to_window_coords(GTK_TEXT_VIEW(widget), |
| 537 GTK_TEXT_WINDOW_TEXT, |
539 GTK_TEXT_WINDOW_TEXT, |
| 538 visible_rect.x, |
540 visible_rect.x, |
| 539 visible_rect.y, |
541 visible_rect.y, |
| 541 &visible_rect.y); |
543 &visible_rect.y); |
| 542 |
544 |
| 543 gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(widget), GTK_TEXT_WINDOW_TEXT, |
545 gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(widget), GTK_TEXT_WINDOW_TEXT, |
| 544 event->area.x, event->area.y, &buf_x, &buf_y); |
546 event->area.x, event->area.y, &buf_x, &buf_y); |
| 545 |
547 |
| |
548 if (GTK_IMHTML(widget)->editable || GTK_IMHTML(widget)->wbfo) { |
| |
549 |
| |
550 if (GTK_IMHTML(widget)->edit.background) { |
| |
551 gdk_color_parse(GTK_IMHTML(widget)->edit.background, &gcolor); |
| |
552 gdk_gc_set_rgb_fg_color(gc, &gcolor); |
| |
553 } else { |
| |
554 gdk_gc_set_rgb_fg_color(gc, &(widget->style->base[GTK_WIDGET_STATE(widget)])); |
| |
555 } |
| |
556 |
| |
557 gdk_draw_rectangle(event->window, |
| |
558 gc, |
| |
559 TRUE, |
| |
560 visible_rect.x, visible_rect.y, visible_rect.width, visible_rect.height); |
| |
561 gdk_gc_unref(gc); |
| |
562 |
| |
563 if (GTK_WIDGET_CLASS (parent_class)->expose_event) |
| |
564 return (* GTK_WIDGET_CLASS (parent_class)->expose_event) |
| |
565 (widget, event); |
| |
566 |
| |
567 return FALSE; |
| |
568 |
| |
569 } |
| |
570 |
| 546 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &start, buf_x, buf_y); |
571 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &start, buf_x, buf_y); |
| 547 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &end, |
572 gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &end, |
| 548 buf_x + event->area.width, buf_y + event->area.height); |
573 buf_x + event->area.width, buf_y + event->area.height); |
| 549 |
574 |
| 550 |
575 |
| 551 |
576 |
| 552 cur = start; |
577 cur = start; |
| 553 |
578 |
| 554 while (gtk_text_iter_in_range(&cur, &start, &end)) { |
579 while (gtk_text_iter_in_range(&cur, &start, &end)) { |
| 555 GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(event->window)); |
|
| 556 tags = gtk_text_iter_get_tags(&cur); |
580 tags = gtk_text_iter_get_tags(&cur); |
| 557 |
581 |
| 558 for (l = tags; l; l = l->next) { |
582 for (l = tags; l; l = l->next) { |
| 559 GtkTextTag *tag = l->data; |
583 GtkTextTag *tag = l->data; |
| 560 GdkRectangle rect; |
584 GdkRectangle rect; |
| 561 GdkRectangle tag_area; |
585 GdkRectangle tag_area; |
| 562 const char *color; |
586 const char *color; |
| 563 GdkColor gcolor; |
587 |
| 564 |
|
| 565 if (strncmp(tag->name, "BACKGROUND ", 11)) |
588 if (strncmp(tag->name, "BACKGROUND ", 11)) |
| 566 continue; |
589 continue; |
| 567 |
590 |
| 568 if (gtk_text_iter_ends_tag(&cur, tag)) |
591 if (gtk_text_iter_ends_tag(&cur, tag)) |
| 569 continue; |
592 continue; |