# HG changeset patch # User Jason Rumney # Date 1010189217 0 # Node ID 2b4179d13ed7a0f58c79b44e8c86b6137ad53822 # Parent f0e15bcba768c40983eaf5d96842609be571bad6 (x_setup_relief_colors): Don't compute an image's background color if it doesn't have a Pixmap. (notice_overwritten_cursor): Don't depend on output_cursor and updated_area. Compare pixel coordinates with window's cursor pixel coordinates. (x_draw_glyphs, x_clear_end_of_line, show_mouse_face): Call notice_overwritten_cursor with new arg list. (show_mouse_face): Fix bug setting a row's mouse_face_p flag unconditionally. (x_draw_image_relief): Use predefined macro instead of constant when the value of `tool_bar_button_relief' is negative. (x_display_and_set_cursor): Fix PostMessage arg types. diff -r f0e15bcba768 -r 2b4179d13ed7 src/w32term.c --- a/src/w32term.c Sat Jan 05 00:05:14 2002 +0000 +++ b/src/w32term.c Sat Jan 05 00:06:57 2002 +0000 @@ -407,13 +407,17 @@ static void x_erase_phys_cursor P_ ((struct window *)); void x_display_cursor P_ ((struct window *w, int, int, int, int, int)); void x_display_and_set_cursor P_ ((struct window *, int, int, int, int, int)); -static void w32_draw_fringe_bitmap P_ ((struct window *, HDC hdc, struct glyph_row *, +static void w32_draw_fringe_bitmap P_ ((struct window *, HDC hdc, + struct glyph_row *, enum fringe_bitmap_type, int left_p)); static void w32_clip_to_row P_ ((struct window *, struct glyph_row *, HDC, int)); static int x_phys_cursor_in_rect_p P_ ((struct window *, RECT *)); -static void x_draw_row_fringe_bitmaps P_ ((struct window *, struct glyph_row *)); -static void notice_overwritten_cursor P_ ((struct window *, int, int)); +static void x_draw_row_fringe_bitmaps P_ ((struct window *, + struct glyph_row *)); +static void notice_overwritten_cursor P_ ((struct window *, + enum glyph_row_area, + int, int, int, int)); static Lisp_Object Qvendor_specific_keysyms; @@ -3646,6 +3650,7 @@ if (s->face->use_box_color_for_shadows_p) color = s->face->box_color; else if (s->first_glyph->type == IMAGE_GLYPH + && s->img->pixmap && !IMAGE_BACKGROUND_TRANSPARENT (s->img, s->f, 0)) color = IMAGE_BACKGROUND (s->img, s->f, 0); else @@ -3952,7 +3957,7 @@ if (s->hl == DRAW_IMAGE_SUNKEN || s->hl == DRAW_IMAGE_RAISED) { - thick = tool_bar_button_relief >= 0 ? tool_bar_button_relief : 3; + thick = tool_bar_button_relief >= 0 ? tool_bar_button_relief : DEFAULT_TOOL_BAR_BUTTON_RELIEF; raised_p = s->hl == DRAW_IMAGE_RAISED; } else @@ -5050,7 +5055,8 @@ x1 -= left_area_width; } - notice_overwritten_cursor (w, x0, x1); + notice_overwritten_cursor (w, area, x0, x1, + row->y, MATRIX_ROW_BOTTOM_Y (row)); } /* Value is the x-position up to which drawn, relative to AREA of W. @@ -5270,10 +5276,13 @@ /* Notice if the cursor will be cleared by this operation. */ if (!updated_row->full_width_p) - notice_overwritten_cursor (w, output_cursor.x, -1); + notice_overwritten_cursor (w, updated_area, + output_cursor.x, -1, + updated_row->y, + MATRIX_ROW_BOTTOM_Y (updated_row)); from_x = output_cursor.x; - + /* Translate to frame coordinates. */ if (updated_row->full_width_p) { @@ -7403,7 +7412,8 @@ x_draw_glyphs (w, start_x, row, TEXT_AREA, start_hpos, end_hpos, draw, 0); - row->mouse_face_p = draw == DRAW_MOUSE_FACE || DRAW_IMAGE_RAISED; + row->mouse_face_p + = draw == DRAW_MOUSE_FACE || draw == DRAW_IMAGE_RAISED; } } @@ -9187,15 +9197,17 @@ of the line after START_X has been written. */ static void -notice_overwritten_cursor (w, start_x, end_x) +notice_overwritten_cursor (w, area, x0, x1, y0, y1) struct window *w; - int start_x, end_x; -{ - if (updated_area == TEXT_AREA + enum glyph_row_area area; + int x0, x1, y0, y1; +{ + if (area == TEXT_AREA && w->phys_cursor_on_p - && output_cursor.vpos == w->phys_cursor.vpos - && start_x <= w->phys_cursor.x - && (end_x < 0 || end_x > w->phys_cursor.x)) + && y0 <= w->phys_cursor.y + && y1 >= w->phys_cursor.y + w->phys_cursor_height + && x0 <= w->phys_cursor.x + && (x1 < 0 || x1 > w->phys_cursor.x)) w->phys_cursor_on_p = 0; } @@ -9664,7 +9676,7 @@ if (w32_system_caret_hwnd && (w32_system_caret_height != w->phys_cursor_height || w32_system_caret_width != caret_width)) - PostMessage (hwnd, WM_EMACS_DESTROY_CARET, NULL, NULL); + PostMessage (hwnd, WM_EMACS_DESTROY_CARET, 0, 0); if (!w32_system_caret_hwnd) { @@ -9673,7 +9685,7 @@ } /* Move the system caret. */ - PostMessage (hwnd, WM_EMACS_TRACK_CARET, NULL, NULL); + PostMessage (hwnd, WM_EMACS_TRACK_CARET, 0, 0); } }