aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGerd Moellmann2001-01-12 15:09:21 +0000
committerGerd Moellmann2001-01-12 15:09:21 +0000
commit3ed61e75f4cd3577b58c225cc882500465053465 (patch)
tree95556aed9bcce2b0083f17f8579d20b5042d5ee3 /src
parentf82159939775b2d15ddb07f4b98555599b070dab (diff)
downloademacs-3ed61e75f4cd3577b58c225cc882500465053465.tar.gz
emacs-3ed61e75f4cd3577b58c225cc882500465053465.zip
(Fimage_size, image_ascent): Adapt to the change of image
margins. (lookup_image): If `:margin MARGIN' is specified, and MARGIN is a pair of integers `(X . Y)', use X for the horizontal and Y for the vertical margin. (IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR): New enumerator. (parse_image_spec): Check it. (xbm_format, xpm_format, pbm_format, png_format, jpeg_format) (tiff_format, gif_format, gs_format): Use IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR for :margin.
Diffstat (limited to 'src')
-rw-r--r--src/xfns.c45
1 files changed, 32 insertions, 13 deletions
diff --git a/src/xfns.c b/src/xfns.c
index 4c0ac3fcc5a..1f9ece75d5e 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -5304,6 +5304,7 @@ enum image_value_type
5304 IMAGE_STRING_VALUE, 5304 IMAGE_STRING_VALUE,
5305 IMAGE_SYMBOL_VALUE, 5305 IMAGE_SYMBOL_VALUE,
5306 IMAGE_POSITIVE_INTEGER_VALUE, 5306 IMAGE_POSITIVE_INTEGER_VALUE,
5307 IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR,
5307 IMAGE_NON_NEGATIVE_INTEGER_VALUE, 5308 IMAGE_NON_NEGATIVE_INTEGER_VALUE,
5308 IMAGE_ASCENT_VALUE, 5309 IMAGE_ASCENT_VALUE,
5309 IMAGE_INTEGER_VALUE, 5310 IMAGE_INTEGER_VALUE,
@@ -5408,6 +5409,15 @@ parse_image_spec (spec, keywords, nkeywords, type)
5408 return 0; 5409 return 0;
5409 break; 5410 break;
5410 5411
5412 case IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR:
5413 if (INTEGERP (value) && XINT (value) >= 0)
5414 break;
5415 if (CONSP (value)
5416 && INTEGERP (XCAR (value)) && INTEGERP (XCDR (value))
5417 && XINT (XCAR (value)) >= 0 && XINT (XCDR (value)) >= 0)
5418 break;
5419 return 0;
5420
5411 case IMAGE_ASCENT_VALUE: 5421 case IMAGE_ASCENT_VALUE:
5412 if (SYMBOLP (value) && EQ (value, Qcenter)) 5422 if (SYMBOLP (value) && EQ (value, Qcenter))
5413 break; 5423 break;
@@ -5514,8 +5524,8 @@ or omitted means use the selected frame.")
5514 struct frame *f = check_x_frame (frame); 5524 struct frame *f = check_x_frame (frame);
5515 int id = lookup_image (f, spec); 5525 int id = lookup_image (f, spec);
5516 struct image *img = IMAGE_FROM_ID (f, id); 5526 struct image *img = IMAGE_FROM_ID (f, id);
5517 int width = img->width + 2 * img->margin; 5527 int width = img->width + 2 * img->hmargin;
5518 int height = img->height + 2 * img->margin; 5528 int height = img->height + 2 * img->vmargin;
5519 5529
5520 if (NILP (pixels)) 5530 if (NILP (pixels))
5521 size = Fcons (make_float ((double) width / CANON_X_UNIT (f)), 5531 size = Fcons (make_float ((double) width / CANON_X_UNIT (f)),
@@ -5644,7 +5654,7 @@ image_ascent (img, face)
5644 struct image *img; 5654 struct image *img;
5645 struct face *face; 5655 struct face *face;
5646{ 5656{
5647 int height = img->height + img->margin; 5657 int height = img->height + img->vmargin;
5648 int ascent; 5658 int ascent;
5649 5659
5650 if (img->ascent == CENTERED_IMAGE_ASCENT) 5660 if (img->ascent == CENTERED_IMAGE_ASCENT)
@@ -5963,13 +5973,22 @@ lookup_image (f, spec)
5963 5973
5964 margin = image_spec_value (spec, QCmargin, NULL); 5974 margin = image_spec_value (spec, QCmargin, NULL);
5965 if (INTEGERP (margin) && XINT (margin) >= 0) 5975 if (INTEGERP (margin) && XINT (margin) >= 0)
5966 img->margin = XFASTINT (margin); 5976 img->vmargin = img->hmargin = XFASTINT (margin);
5977 else if (CONSP (margin) && INTEGERP (XCAR (margin))
5978 && INTEGERP (XCDR (margin)))
5979 {
5980 if (XINT (XCAR (margin)) > 0)
5981 img->hmargin = XFASTINT (XCAR (margin));
5982 if (XINT (XCDR (margin)) > 0)
5983 img->vmargin = XFASTINT (XCDR (margin));
5984 }
5967 5985
5968 relief = image_spec_value (spec, QCrelief, NULL); 5986 relief = image_spec_value (spec, QCrelief, NULL);
5969 if (INTEGERP (relief)) 5987 if (INTEGERP (relief))
5970 { 5988 {
5971 img->relief = XINT (relief); 5989 img->relief = XINT (relief);
5972 img->margin += abs (img->relief); 5990 img->hmargin += abs (img->relief);
5991 img->vmargin += abs (img->relief);
5973 } 5992 }
5974 5993
5975 /* Manipulation of the image's mask. */ 5994 /* Manipulation of the image's mask. */
@@ -6329,7 +6348,7 @@ static struct image_keyword xbm_format[XBM_LAST] =
6329 {":foreground", IMAGE_STRING_VALUE, 0}, 6348 {":foreground", IMAGE_STRING_VALUE, 0},
6330 {":background", IMAGE_STRING_VALUE, 0}, 6349 {":background", IMAGE_STRING_VALUE, 0},
6331 {":ascent", IMAGE_ASCENT_VALUE, 0}, 6350 {":ascent", IMAGE_ASCENT_VALUE, 0},
6332 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, 6351 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
6333 {":relief", IMAGE_INTEGER_VALUE, 0}, 6352 {":relief", IMAGE_INTEGER_VALUE, 0},
6334 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 6353 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
6335 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 6354 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
@@ -6962,7 +6981,7 @@ static struct image_keyword xpm_format[XPM_LAST] =
6962 {":file", IMAGE_STRING_VALUE, 0}, 6981 {":file", IMAGE_STRING_VALUE, 0},
6963 {":data", IMAGE_STRING_VALUE, 0}, 6982 {":data", IMAGE_STRING_VALUE, 0},
6964 {":ascent", IMAGE_ASCENT_VALUE, 0}, 6983 {":ascent", IMAGE_ASCENT_VALUE, 0},
6965 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, 6984 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
6966 {":relief", IMAGE_INTEGER_VALUE, 0}, 6985 {":relief", IMAGE_INTEGER_VALUE, 0},
6967 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 6986 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
6968 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 6987 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
@@ -8047,7 +8066,7 @@ static struct image_keyword pbm_format[PBM_LAST] =
8047 {":file", IMAGE_STRING_VALUE, 0}, 8066 {":file", IMAGE_STRING_VALUE, 0},
8048 {":data", IMAGE_STRING_VALUE, 0}, 8067 {":data", IMAGE_STRING_VALUE, 0},
8049 {":ascent", IMAGE_ASCENT_VALUE, 0}, 8068 {":ascent", IMAGE_ASCENT_VALUE, 0},
8050 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, 8069 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
8051 {":relief", IMAGE_INTEGER_VALUE, 0}, 8070 {":relief", IMAGE_INTEGER_VALUE, 0},
8052 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 8071 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
8053 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 8072 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
@@ -8374,7 +8393,7 @@ static struct image_keyword png_format[PNG_LAST] =
8374 {":data", IMAGE_STRING_VALUE, 0}, 8393 {":data", IMAGE_STRING_VALUE, 0},
8375 {":file", IMAGE_STRING_VALUE, 0}, 8394 {":file", IMAGE_STRING_VALUE, 0},
8376 {":ascent", IMAGE_ASCENT_VALUE, 0}, 8395 {":ascent", IMAGE_ASCENT_VALUE, 0},
8377 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, 8396 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
8378 {":relief", IMAGE_INTEGER_VALUE, 0}, 8397 {":relief", IMAGE_INTEGER_VALUE, 0},
8379 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 8398 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
8380 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 8399 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
@@ -8851,7 +8870,7 @@ static struct image_keyword jpeg_format[JPEG_LAST] =
8851 {":data", IMAGE_STRING_VALUE, 0}, 8870 {":data", IMAGE_STRING_VALUE, 0},
8852 {":file", IMAGE_STRING_VALUE, 0}, 8871 {":file", IMAGE_STRING_VALUE, 0},
8853 {":ascent", IMAGE_ASCENT_VALUE, 0}, 8872 {":ascent", IMAGE_ASCENT_VALUE, 0},
8854 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, 8873 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
8855 {":relief", IMAGE_INTEGER_VALUE, 0}, 8874 {":relief", IMAGE_INTEGER_VALUE, 0},
8856 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 8875 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
8857 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 8876 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
@@ -9206,7 +9225,7 @@ static struct image_keyword tiff_format[TIFF_LAST] =
9206 {":data", IMAGE_STRING_VALUE, 0}, 9225 {":data", IMAGE_STRING_VALUE, 0},
9207 {":file", IMAGE_STRING_VALUE, 0}, 9226 {":file", IMAGE_STRING_VALUE, 0},
9208 {":ascent", IMAGE_ASCENT_VALUE, 0}, 9227 {":ascent", IMAGE_ASCENT_VALUE, 0},
9209 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, 9228 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
9210 {":relief", IMAGE_INTEGER_VALUE, 0}, 9229 {":relief", IMAGE_INTEGER_VALUE, 0},
9211 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 9230 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
9212 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 9231 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
@@ -9529,7 +9548,7 @@ static struct image_keyword gif_format[GIF_LAST] =
9529 {":data", IMAGE_STRING_VALUE, 0}, 9548 {":data", IMAGE_STRING_VALUE, 0},
9530 {":file", IMAGE_STRING_VALUE, 0}, 9549 {":file", IMAGE_STRING_VALUE, 0},
9531 {":ascent", IMAGE_ASCENT_VALUE, 0}, 9550 {":ascent", IMAGE_ASCENT_VALUE, 0},
9532 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, 9551 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
9533 {":relief", IMAGE_INTEGER_VALUE, 0}, 9552 {":relief", IMAGE_INTEGER_VALUE, 0},
9534 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 9553 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
9535 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 9554 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
@@ -9842,7 +9861,7 @@ static struct image_keyword gs_format[GS_LAST] =
9842 {":loader", IMAGE_FUNCTION_VALUE, 0}, 9861 {":loader", IMAGE_FUNCTION_VALUE, 0},
9843 {":bounding-box", IMAGE_DONT_CHECK_VALUE_TYPE, 1}, 9862 {":bounding-box", IMAGE_DONT_CHECK_VALUE_TYPE, 1},
9844 {":ascent", IMAGE_ASCENT_VALUE, 0}, 9863 {":ascent", IMAGE_ASCENT_VALUE, 0},
9845 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, 9864 {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
9846 {":relief", IMAGE_INTEGER_VALUE, 0}, 9865 {":relief", IMAGE_INTEGER_VALUE, 0},
9847 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 9866 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
9848 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 9867 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},