From 42677916be338854ccbc08b16184e808786d2eb2 Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Mon, 26 Jun 2000 13:11:38 +0000 Subject: [PATCH] (Fimage_size): New function. (syms_of_xfns): Defsubr it. --- src/xfns.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/xfns.c b/src/xfns.c index 435de7e658f..8e66abbfa7f 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -1,5 +1,5 @@ /* Functions for the X window system. - Copyright (C) 1989, 92, 93, 94, 95, 96, 1997, 1998, 1999 + Copyright (C) 1989, 92, 93, 94, 95, 96, 1997, 1998, 1999, 2000 Free Software Foundation. This file is part of GNU Emacs. @@ -5214,6 +5214,38 @@ image_spec_value (spec, key, found) } +DEFUN ("image-size", Fimage_size, Simage_size, 1, 3, 0, + "Return the size of image SPEC as pair (WIDTH . HEIGHT).\n\ +PIXELS non-nil means return the size in pixels, otherwise return the\n\ +size in canonical character units.\n\ +FRAME is the frame on which the image will be displayed. FRAME nil\n\ +or omitted means use the selected frame.") + (spec, pixels, frame) + Lisp_Object spec, pixels, frame; +{ + Lisp_Object size; + + size = Qnil; + if (valid_image_p (spec)) + { + struct frame *f = check_x_frame (frame); + int id = lookup_image (f, spec); + struct image *img = IMAGE_FROM_ID (f, id); + int width = img->width + 2 * img->margin; + int height = img->height + 2 * img->margin; + + if (NILP (pixels)) + size = Fcons (make_float ((double) width / CANON_X_UNIT (f)), + make_float ((double) height / CANON_Y_UNIT (f))); + else + size = Fcons (make_number (width), make_number (height)); + } + else + error ("Invalid image specification"); + + return size; +} + /*********************************************************************** @@ -10457,6 +10489,7 @@ meaning don't clear the cache."); #endif defsubr (&Sclear_image_cache); + defsubr (&Simage_size); busy_cursor_atimer = NULL; busy_cursor_shown_p = 0; -- 2.39.2