Mercurial > emacs
diff src/macterm.c @ 50247:f9447a2e045c
* xdisp.c (pixel_to_glyph_coords, glyph_to_pixel_coords):
Add generic versions here. Remove system specific versions
defined elsewhere.
| author | Kim F. Storm <storm@cua.dk> |
|---|---|
| date | Fri, 21 Mar 2003 22:56:52 +0000 |
| parents | 3fb54e5a7201 |
| children | 31cf5b909af7 |
line wrap: on
line diff
--- a/src/macterm.c Fri Mar 21 22:55:56 2003 +0000 +++ b/src/macterm.c Fri Mar 21 22:56:52 2003 +0000 @@ -3464,107 +3464,6 @@ /* Mouse clicks and mouse movement. Rah. */ -/* Given a pixel position (PIX_X, PIX_Y) on frame F, return glyph - co-ordinates in (*X, *Y). Set *BOUNDS to the rectangle that the - glyph at X, Y occupies, if BOUNDS != 0. If NOCLIP is non-zero, do - not force the value into range. */ - -void -pixel_to_glyph_coords (f, pix_x, pix_y, x, y, bounds, noclip) - FRAME_PTR f; - register int pix_x, pix_y; - register int *x, *y; - Rect *bounds; - int noclip; -{ - /* Support tty mode: if Vwindow_system is nil, behave correctly. */ - if (NILP (Vwindow_system)) - { - *x = pix_x; - *y = pix_y; - return; - } - - /* Arrange for the division in PIXEL_TO_CHAR_COL etc. to round down - even for negative values. */ - if (pix_x < 0) - pix_x -= FONT_WIDTH (FRAME_FONT (f)) - 1; - if (pix_y < 0) - pix_y -= (f)->output_data.mac->line_height - 1; - - pix_x = PIXEL_TO_CHAR_COL (f, pix_x); - pix_y = PIXEL_TO_CHAR_ROW (f, pix_y); - - if (bounds) - { - bounds->left = CHAR_TO_PIXEL_COL (f, pix_x); - bounds->top = CHAR_TO_PIXEL_ROW (f, pix_y); - bounds->right = bounds->left + FONT_WIDTH (FRAME_FONT (f)) - 1; - bounds->bottom = bounds->top + f->output_data.mac->line_height - 1; - } - - if (!noclip) - { - if (pix_x < 0) - pix_x = 0; - else if (pix_x > FRAME_WINDOW_WIDTH (f)) - pix_x = FRAME_WINDOW_WIDTH (f); - - if (pix_y < 0) - pix_y = 0; - else if (pix_y > f->height) - pix_y = f->height; - } - - *x = pix_x; - *y = pix_y; -} - - -/* Given HPOS/VPOS in the current matrix of W, return corresponding - frame-relative pixel positions in *FRAME_X and *FRAME_Y. If we - can't tell the positions because W's display is not up to date, - return 0. */ - -int -glyph_to_pixel_coords (w, hpos, vpos, frame_x, frame_y) - struct window *w; - int hpos, vpos; - int *frame_x, *frame_y; -{ - int success_p; - - xassert (hpos >= 0 && hpos < w->current_matrix->matrix_w); - xassert (vpos >= 0 && vpos < w->current_matrix->matrix_h); - - if (display_completed) - { - struct glyph_row *row = MATRIX_ROW (w->current_matrix, vpos); - struct glyph *glyph = row->glyphs[TEXT_AREA]; - struct glyph *end = glyph + min (hpos, row->used[TEXT_AREA]); - - *frame_y = row->y; - *frame_x = row->x; - while (glyph < end) - { - *frame_x += glyph->pixel_width; - ++glyph; - } - - success_p = 1; - } - else - { - *frame_y = *frame_x = 0; - success_p = 0; - } - - *frame_y = WINDOW_TO_FRAME_PIXEL_Y (w, *frame_y); - *frame_x = WINDOW_TO_FRAME_PIXEL_X (w, *frame_x); - return success_p; -} - - /* Prepare a mouse-event in *RESULT for placement in the input queue. If the event is a button press, then note that we have grabbed
