diff --git a/src/nsterm.m b/src/nsterm.m index aeeae4b20da..a76b7e70bc9 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -2808,6 +2808,7 @@ Function modeled after x_draw_glyph_string_box (). int th; char raised_p; NSRect br; + struct face *face; NSTRACE (ns_dumpglyphs_image); @@ -2827,8 +2828,17 @@ Function modeled after x_draw_glyph_string_box (). /* Draw BG: if we need larger area than image itself cleared, do that, otherwise, since we composite the image under NS (instead of mucking with its background color), we must clear just the image area. */ - [ns_lookup_indexed_color (NS_FACE_BACKGROUND - (FACE_FROM_ID (s->f, s->first_glyph->face_id)), s->f) set]; + if (s->hl == DRAW_MOUSE_FACE) + { + face = FACE_FROM_ID + (s->f, FRAME_NS_DISPLAY_INFO (s->f)->mouse_face_face_id); + if (!face) + face = FACE_FROM_ID (s->f, MOUSE_FACE_ID); + } + else + face = FACE_FROM_ID (s->f, s->first_glyph->face_id); + + [ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f) set]; if (bg_height > s->slice.height || s->img->hmargin || s->img->vmargin || s->img->mask || s->img->pixmap == 0 || s->width != s->background_width) @@ -2899,6 +2909,7 @@ Function modeled after x_draw_glyph_string_box (). { NSRect r[2]; int n, i; + struct face *face; if (!s->background_filled_p) { @@ -2940,8 +2951,19 @@ overwriting cursor (usually when cursor on a tab) */ } ns_focus (s->f, r, n); - [ns_lookup_indexed_color (NS_FACE_BACKGROUND - (FACE_FROM_ID (s->f, s->first_glyph->face_id)), s->f) set]; + + if (s->hl == DRAW_MOUSE_FACE) + { + face = FACE_FROM_ID + (s->f, FRAME_NS_DISPLAY_INFO (s->f)->mouse_face_face_id); + if (!face) + face = FACE_FROM_ID (s->f, MOUSE_FACE_ID); + } + else + face = FACE_FROM_ID (s->f, s->first_glyph->face_id); + + [ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f) set]; + NSRectFill (r[0]); NSRectFill (r[1]); ns_unfocus (s->f);