[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/macterm.c
From: |
Kim F . Storm |
Subject: |
[Emacs-diffs] Changes to emacs/src/macterm.c |
Date: |
Tue, 11 Oct 2005 18:35:41 -0400 |
Index: emacs/src/macterm.c
diff -c emacs/src/macterm.c:1.134 emacs/src/macterm.c:1.135
*** emacs/src/macterm.c:1.134 Tue Oct 11 03:35:36 2005
--- emacs/src/macterm.c Tue Oct 11 22:35:40 2005
***************
*** 4190,4195 ****
--- 4190,4197 ----
frame->mouse_moved = 1;
last_mouse_scroll_bar = Qnil;
note_mouse_highlight (frame, pos->h, pos->v);
+ /* Remember which glyph we're now on. */
+ remember_mouse_glyph (frame, pos->h, pos->v, &last_mouse_glyph);
}
}
***************
*** 4198,4206 ****
Mouse Face
************************************************************************/
- static int glyph_rect P_ ((struct frame *f, int, int, Rect *));
-
-
/* MAC TODO: This should be called from somewhere (or removed) ++KFS */
static void
--- 4200,4205 ----
***************
*** 4214,4323 ****
}
- /* 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;
- }
-
- /* MAC TODO: This should be called from somewhere (or removed) ++KFS */
-
- /* 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;
- }
- }
-
-
static struct frame *
mac_focus_frame (dpyinfo)
struct mac_display_info *dpyinfo;
--- 4213,4218 ----
***************
*** 4333,4350 ****
/* Return the current position of the mouse.
! *fp should be a frame which indicates which display to ask about.
! If the mouse movement started in a scroll bar, set *fp, *bar_window,
! and *part to the frame, window, and scroll bar part that the mouse
! is over. Set *x and *y to the portion and whole of the mouse's
position on the scroll bar.
! If the mouse movement started elsewhere, set *fp to the frame the
! mouse is on, *bar_window to nil, and *x and *y to the character cell
the mouse is over.
! Set *time to the server time-stamp for the time at which the mouse
was at this position.
Don't store anything if we don't have a valid set of values to report.
--- 4228,4245 ----
/* Return the current position of the mouse.
! *FP should be a frame which indicates which display to ask about.
! If the mouse movement started in a scroll bar, set *FP, *BAR_WINDOW,
! and *PART to the frame, window, and scroll bar part that the mouse
! is over. Set *X and *Y to the portion and whole of the mouse's
position on the scroll bar.
! If the mouse movement started elsewhere, set *FP to the frame the
! mouse is on, *BAR_WINDOW to nil, and *X and *Y to the character cell
the mouse is over.
! Set *TIME to the server time-stamp for the time at which the mouse
was at this position.
Don't store anything if we don't have a valid set of values to report.
***************
*** 4361,4371 ****
Lisp_Object *x, *y;
unsigned long *time;
{
! Point mouse_pos;
! int ignore1, ignore2;
! struct frame *f = mac_focus_frame (FRAME_MAC_DISPLAY_INFO (*fp));
! WindowPtr wp = FRAME_MAC_WINDOW (f);
! Lisp_Object frame, tail;
BLOCK_INPUT;
--- 4256,4262 ----
Lisp_Object *x, *y;
unsigned long *time;
{
! FRAME_PTR f1;
BLOCK_INPUT;
***************
*** 4373,4397 ****
x_scroll_bar_report_motion (fp, bar_window, part, x, y, time);
else
{
/* Clear the mouse-moved flag for every frame on this display. */
FOR_EACH_FRAME (tail, frame)
! XFRAME (frame)->mouse_moved = 0;
last_mouse_scroll_bar = Qnil;
! SetPortWindowPort (wp);
!
! GetMouse (&mouse_pos);
!
! pixel_to_glyph_coords (f, mouse_pos.h, mouse_pos.v, &ignore1, &ignore2,
! &last_mouse_glyph, insist);
!
! *bar_window = Qnil;
! *part = scroll_bar_handle;
! *fp = f;
! XSETINT (*x, mouse_pos.h);
! XSETINT (*y, mouse_pos.v);
! *time = last_mouse_movement_time;
}
UNBLOCK_INPUT;
--- 4264,4306 ----
x_scroll_bar_report_motion (fp, bar_window, part, x, y, time);
else
{
+ Lisp_Object frame, tail;
+
/* Clear the mouse-moved flag for every frame on this display. */
FOR_EACH_FRAME (tail, frame)
! XFRAME (frame)->mouse_moved = 0;
last_mouse_scroll_bar = Qnil;
! if (FRAME_MAC_DISPLAY_INFO (*fp)->grabbed && last_mouse_frame
! && FRAME_LIVE_P (last_mouse_frame))
! f1 = last_mouse_frame;
! else
! f1 = mac_focus_frame (FRAME_MAC_DISPLAY_INFO (*fp));
!
! if (f1)
! {
! /* Ok, we found a frame. Store all the values.
! last_mouse_glyph is a rectangle used to reduce the
! generation of mouse events. To not miss any motion
! events, we must divide the frame into rectangles of the
! size of the smallest character that could be displayed
! on it, i.e. into the same rectangles that matrices on
! the frame are divided into. */
! Point mouse_pos;
!
! SetPortWindowPort (FRAME_MAC_WINDOW (f1));
! GetMouse (&mouse_pos);
! remember_mouse_glyph (f1, mouse_pos.h, mouse_pos.v,
! &last_mouse_glyph);
!
! *bar_window = Qnil;
! *part = 0;
! *fp = f1;
! XSETINT (*x, mouse_pos.h);
! XSETINT (*y, mouse_pos.v);
! *time = last_mouse_movement_time;
! }
}
UNBLOCK_INPUT;
- [Emacs-diffs] Changes to emacs/src/macterm.c, YAMAMOTO Mitsuharu, 2005/10/01
- [Emacs-diffs] Changes to emacs/src/macterm.c, YAMAMOTO Mitsuharu, 2005/10/04
- [Emacs-diffs] Changes to emacs/src/macterm.c, YAMAMOTO Mitsuharu, 2005/10/07
- [Emacs-diffs] Changes to emacs/src/macterm.c, YAMAMOTO Mitsuharu, 2005/10/07
- [Emacs-diffs] Changes to emacs/src/macterm.c, YAMAMOTO Mitsuharu, 2005/10/10
- [Emacs-diffs] Changes to emacs/src/macterm.c,
Kim F . Storm <=
- [Emacs-diffs] Changes to emacs/src/macterm.c, YAMAMOTO Mitsuharu, 2005/10/12
- [Emacs-diffs] Changes to emacs/src/macterm.c, YAMAMOTO Mitsuharu, 2005/10/12
- [Emacs-diffs] Changes to emacs/src/macterm.c, YAMAMOTO Mitsuharu, 2005/10/14
- [Emacs-diffs] Changes to emacs/src/macterm.c, YAMAMOTO Mitsuharu, 2005/10/15
- [Emacs-diffs] Changes to emacs/src/macterm.c, YAMAMOTO Mitsuharu, 2005/10/18
- [Emacs-diffs] Changes to emacs/src/macterm.c, YAMAMOTO Mitsuharu, 2005/10/25