1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-11 09:20:51 +00:00

(buffer_posn_from_coords): Return full image width

and height even for image slices (posn is relative to full image).
(marginal_area_string): Adjust x0,y0 for image slice.
This commit is contained in:
Kim F. Storm 2004-04-20 22:16:19 +00:00
parent 0633d52c3e
commit cedd7cd9f1

View File

@ -5730,6 +5730,9 @@ buffer_posn_from_coords (w, x, y, pos, object, dx, dy, width, height)
struct text_pos startp;
Lisp_Object string;
struct glyph_row *row;
#ifdef HAVE_WINDOW_SYSTEM
struct image *img = 0;
#endif
int x0, x1;
current_buffer = XBUFFER (w->buffer);
@ -5755,7 +5758,6 @@ buffer_posn_from_coords (w, x, y, pos, object, dx, dy, width, height)
#ifdef HAVE_WINDOW_SYSTEM
if (it.what == IT_IMAGE)
{
struct image *img;
if ((img = IMAGE_FROM_ID (it.f, it.image_id)) != NULL
&& !NILP (img->spec))
*object = img->spec;
@ -5768,12 +5770,22 @@ buffer_posn_from_coords (w, x, y, pos, object, dx, dy, width, height)
if (it.hpos < row->used[TEXT_AREA])
{
struct glyph *glyph = row->glyphs[TEXT_AREA] + it.hpos;
*width = glyph->pixel_width;
*height = glyph->ascent + glyph->descent;
#ifdef HAVE_WINDOW_SYSTEM
if (glyph->type == IMAGE_GLYPH)
*dy -= row->ascent - glyph->ascent;
if (img)
{
*dy -= row->ascent - glyph->ascent;
*dx += glyph->slice.x;
*dy += glyph->slice.y;
/* Image slices positions are still relative to the entire image */
*width = img->width;
*height = img->height;
}
else
#endif
{
*width = glyph->pixel_width;
*height = glyph->ascent + glyph->descent;
}
}
else
{
@ -5939,6 +5951,8 @@ marginal_area_string (w, part, x, y, charpos, object, dx, dy, width, height)
if (img != NULL)
*object = img->spec;
y0 -= row->ascent - glyph->ascent;
x0 += glyph->slice.x;
y0 += glyph->slice.y;
}
#endif
}