[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/w32term.c
From: |
Kim F . Storm |
Subject: |
[Emacs-diffs] Changes to emacs/src/w32term.c |
Date: |
Tue, 11 Oct 2005 18:36:36 -0400 |
Index: emacs/src/w32term.c
diff -c emacs/src/w32term.c:1.232 emacs/src/w32term.c:1.233
*** emacs/src/w32term.c:1.232 Fri Oct 7 07:40:06 2005
--- emacs/src/w32term.c Tue Oct 11 22:36:35 2005
***************
*** 3204,3211 ****
static MSG last_mouse_motion_event;
static Lisp_Object last_mouse_motion_frame;
- static void remember_mouse_glyph P_ ((struct frame *, int, int));
-
static void
note_mouse_movement (frame, msg)
FRAME_PTR frame;
--- 3204,3209 ----
***************
*** 3227,3235 ****
/* Has the mouse moved off the glyph it was on at the last sighting? */
else if (mouse_x < last_mouse_glyph.left
! || mouse_x > last_mouse_glyph.right
|| mouse_y < last_mouse_glyph.top
! || mouse_y > last_mouse_glyph.bottom)
{
frame->mouse_moved = 1;
last_mouse_scroll_bar = Qnil;
--- 3225,3233 ----
/* Has the mouse moved off the glyph it was on at the last sighting? */
else if (mouse_x < last_mouse_glyph.left
! || mouse_x >= last_mouse_glyph.right
|| mouse_y < last_mouse_glyph.top
! || mouse_y >= last_mouse_glyph.bottom)
{
frame->mouse_moved = 1;
last_mouse_scroll_bar = Qnil;
***************
*** 3238,3244 ****
gets called when mouse tracking is enabled but we also need
to keep track of the mouse for help_echo and highlighting at
other times. */
! remember_mouse_glyph (frame, mouse_x, mouse_y);
}
}
--- 3236,3242 ----
gets called when mouse tracking is enabled but we also need
to keep track of the mouse for help_echo and highlighting at
other times. */
! remember_mouse_glyph (frame, mouse_x, mouse_y, &last_mouse_glyph);
}
}
***************
*** 3250,3257 ****
static struct scroll_bar *x_window_to_scroll_bar ();
static void x_scroll_bar_report_motion ();
static void x_check_fullscreen P_ ((struct frame *));
- static int glyph_rect P_ ((struct frame *f, int, int, RECT *));
-
static void
redo_mouse_highlight ()
--- 3248,3253 ----
***************
*** 3270,3377 ****
{
PostMessage (window, WM_EMACS_SETCURSOR, (WPARAM) cursor, 0);
}
-
- /* Try to determine frame pixel position and size of the glyph under
- frame pixel coordinates X/Y on frame F . Return the position and
- size in *RECT. Value is non-zero if we could compute these
- values. */
-
- static int
- glyph_rect (f, x, y, rect)
- struct frame *f;
- int x, y;
- RECT *rect;
- {
- Lisp_Object window;
-
- window = window_from_coordinates (f, x, y, 0, &x, &y, 0);
-
- if (!NILP (window))
- {
- struct window *w = XWINDOW (window);
- struct glyph_row *r = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
- struct glyph_row *end = r + w->current_matrix->nrows - 1;
-
- for (; r < end && r->enabled_p; ++r)
- if (r->y <= y && r->y + r->height > y)
- {
- /* Found the row at y. */
- struct glyph *g = r->glyphs[TEXT_AREA];
- struct glyph *end = g + r->used[TEXT_AREA];
- int gx;
-
- rect->top = WINDOW_TO_FRAME_PIXEL_Y (w, r->y);
- rect->bottom = rect->top + r->height;
-
- if (x < r->x)
- {
- /* x is to the left of the first glyph in the row. */
- /* Shouldn't this be a pixel value?
- WINDOW_LEFT_EDGE_X (w) seems to be the right value.
- ++KFS */
- rect->left = WINDOW_LEFT_EDGE_COL (w);
- rect->right = WINDOW_TO_FRAME_PIXEL_X (w, r->x);
- return 1;
- }
-
- for (gx = r->x; g < end; gx += g->pixel_width, ++g)
- if (gx <= x && gx + g->pixel_width > x)
- {
- /* x is on a glyph. */
- rect->left = WINDOW_TO_FRAME_PIXEL_X (w, gx);
- rect->right = rect->left + g->pixel_width;
- return 1;
- }
-
- /* x is to the right of the last glyph in the row. */
- rect->left = WINDOW_TO_FRAME_PIXEL_X (w, gx);
- /* Shouldn't this be a pixel value?
- WINDOW_RIGHT_EDGE_X (w) seems to be the right value.
- ++KFS */
- rect->right = WINDOW_RIGHT_EDGE_COL (w);
- return 1;
- }
- }
-
- /* The y is not on any row. */
- return 0;
- }
-
- /* Record the position of the mouse in last_mouse_glyph. */
- static void
- remember_mouse_glyph (f1, gx, gy)
- struct frame * f1;
- int gx, gy;
- {
- if (!glyph_rect (f1, gx, gy, &last_mouse_glyph))
- {
- int width = FRAME_SMALLEST_CHAR_WIDTH (f1);
- int height = FRAME_SMALLEST_FONT_HEIGHT (f1);
-
- /* Arrange for the division in FRAME_PIXEL_X_TO_COL etc. to
- round down even for negative values. */
- if (gx < 0)
- gx -= width - 1;
- if (gy < 0)
- gy -= height - 1;
- #if 0
- /* This was the original code from XTmouse_position, but it seems
- to give the position of the glyph diagonally next to the one
- the mouse is over. */
- gx = (gx + width - 1) / width * width;
- gy = (gy + height - 1) / height * height;
- #else
- gx = gx / width * width;
- gy = gy / height * height;
- #endif
-
- last_mouse_glyph.left = gx;
- last_mouse_glyph.top = gy;
- last_mouse_glyph.right = gx + width;
- last_mouse_glyph.bottom = gy + height;
- }
- }
-
/* Return the current position of the mouse.
*fp should be a frame which indicates which display to ask about.
--- 3266,3271 ----
***************
*** 3474,3480 ****
|| insist);
#else
ScreenToClient (FRAME_W32_WINDOW (f1), &pt);
! remember_mouse_glyph (f1, pt.x, pt.y);
#endif
*bar_window = Qnil;
--- 3368,3374 ----
|| insist);
#else
ScreenToClient (FRAME_W32_WINDOW (f1), &pt);
! remember_mouse_glyph (f1, pt.x, pt.y, &last_mouse_glyph);
#endif
*bar_window = Qnil;