+2005-10-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * dispextern.h (struct glyph_string): Rename member for_overlaps_p
+ to for_overlaps. Now occupy 3 bits.
+ (OVERLAPS_PRED, OVERLAPS_SUCC, OVERLAPS_BOTH)
+ (OVERLAPS_ERASED_CURSOR): New defines.
+ (struct redisplay_interface): Add new OVERLAPS arg to member
+ fix_overlapping_area.
+ (x_fix_overlapping_area): Add new OVERLAPS arg.
+ (get_glyph_string_clip_rects): Add extern.
+
+ * dispnew.c (redraw_overlapping_rows): Call
+ rif->fix_overlapping_area with new OVERLAPS arg as redrawn part.
+
+ * xdisp.c: Rename member for_overlaps_p in struct glyph_string to
+ for_overlaps.
+ (get_glyph_string_clip_rects): New function created from
+ get_glyph_string_clip_rect. Set clipping rectangles according to
+ the value of for_overlaps. Enable to store multiple clipping
+ rectangles.
+ (get_glyph_string_clip_rect): Use get_glyph_string_clip_rects.
+ (fill_composite_glyph_string, fill_glyph_string, draw_glyphs):
+ Rename argument OVERLAPS_P to OVERLAPS. All uses in macros changed.
+ (x_fix_overlapping_area): Add OVERLAPS arg. Pass it to draw_glyphs.
+ (draw_phys_cursor_glyph): Set width of erased cursor to use it for
+ calculating clipping rectangles later. Call
+ x_fix_overlapping_area with new OVERLAPS arg to draw only erased
+ cursor area.
+ (expose_overlaps): Call x_fix_overlapping_area with new
+ OVERLAPS arg to draw overlaps in both preceding and succeeding rows.
+
+ * xterm.c, w32term.c, macterm.c: Rename member for_overlaps_p in
+ struct glyph_string to for_overlaps.
+
2005-10-04 Kim F. Storm <storm@cua.dk>
* window.c (window_split_tree): New function.
XDrawImageString is usually faster than XDrawString.) Always
use XDrawImageString when drawing the cursor so that there is
no chance that characters under a box cursor are invisible. */
- if (s->for_overlaps_p
+ if (s->for_overlaps
|| (s->background_filled_p && s->hl != DRAW_CURSOR))
#endif
{
draw a cursor, draw the background of the successor first so that
S can draw into it. This makes S->next use XDrawString instead
of XDrawImageString. */
- if (s->next && s->right_overhang && !s->for_overlaps_p
+ if (s->next && s->right_overhang && !s->for_overlaps
&& s->next->hl != DRAW_CURSOR)
{
xassert (s->next->img == NULL);
/* Draw relief (if any) in advance for char/composition so that the
glyph string can be drawn over it. */
- if (!s->for_overlaps_p
+ if (!s->for_overlaps
&& s->face->box != FACE_NO_BOX
&& (s->first_glyph->type == CHAR_GLYPH
|| s->first_glyph->type == COMPOSITE_GLYPH))
break;
case CHAR_GLYPH:
- if (s->for_overlaps_p)
+ if (s->for_overlaps)
s->background_filled_p = 1;
else
x_draw_glyph_string_background (s, 0);
break;
case COMPOSITE_GLYPH:
- if (s->for_overlaps_p || s->gidx > 0)
+ if (s->for_overlaps || s->gidx > 0)
s->background_filled_p = 1;
else
x_draw_glyph_string_background (s, 1);
abort ();
}
- if (!s->for_overlaps_p)
+ if (!s->for_overlaps)
{
/* Draw underline. */
if (s->face->underline_p)
else
x = s->x;
- if (s->for_overlaps_p || (s->background_filled_p && s->hl != DRAW_CURSOR))
+ if (s->for_overlaps || (s->background_filled_p && s->hl != DRAW_CURSOR))
SetBkMode (s->hdc, TRANSPARENT);
else
SetBkMode (s->hdc, OPAQUE);
/* If S draws into the background of its successor, draw the
background of the successor first so that S can draw into it.
This makes S->next use XDrawString instead of XDrawImageString. */
- if (s->next && s->right_overhang && !s->for_overlaps_p)
+ if (s->next && s->right_overhang && !s->for_overlaps)
{
xassert (s->next->img == NULL);
x_set_glyph_string_gc (s->next);
/* Draw relief (if any) in advance for char/composition so that the
glyph string can be drawn over it. */
- if (!s->for_overlaps_p
+ if (!s->for_overlaps
&& s->face->box != FACE_NO_BOX
&& (s->first_glyph->type == CHAR_GLYPH
|| s->first_glyph->type == COMPOSITE_GLYPH))
break;
case CHAR_GLYPH:
- if (s->for_overlaps_p)
+ if (s->for_overlaps)
s->background_filled_p = 1;
else
x_draw_glyph_string_background (s, 0);
break;
case COMPOSITE_GLYPH:
- if (s->for_overlaps_p || s->gidx > 0)
+ if (s->for_overlaps || s->gidx > 0)
s->background_filled_p = 1;
else
x_draw_glyph_string_background (s, 1);
abort ();
}
- if (!s->for_overlaps_p)
+ if (!s->for_overlaps)
{
/* Draw underline. */
if (s->face->underline_p
XDrawImageString is usually faster than XDrawString.) Always
use XDrawImageString when drawing the cursor so that there is
no chance that characters under a box cursor are invisible. */
- if (s->for_overlaps_p
+ if (s->for_overlaps
|| (s->background_filled_p && s->hl != DRAW_CURSOR))
{
/* Draw characters with 16-bit or 8-bit functions. */
/* If S draws into the background of its successor, draw the
background of the successor first so that S can draw into it.
This makes S->next use XDrawString instead of XDrawImageString. */
- if (s->next && s->right_overhang && !s->for_overlaps_p)
+ if (s->next && s->right_overhang && !s->for_overlaps)
{
xassert (s->next->img == NULL);
x_set_glyph_string_gc (s->next);
/* Draw relief (if any) in advance for char/composition so that the
glyph string can be drawn over it. */
- if (!s->for_overlaps_p
+ if (!s->for_overlaps
&& s->face->box != FACE_NO_BOX
&& (s->first_glyph->type == CHAR_GLYPH
|| s->first_glyph->type == COMPOSITE_GLYPH))
break;
case CHAR_GLYPH:
- if (s->for_overlaps_p)
+ if (s->for_overlaps)
s->background_filled_p = 1;
else
x_draw_glyph_string_background (s, 0);
break;
case COMPOSITE_GLYPH:
- if (s->for_overlaps_p || s->gidx > 0)
+ if (s->for_overlaps || s->gidx > 0)
s->background_filled_p = 1;
else
x_draw_glyph_string_background (s, 1);
abort ();
}
- if (!s->for_overlaps_p)
+ if (!s->for_overlaps)
{
/* Draw underline. */
if (s->face->underline_p)