comparison src/xfns.c @ 35275:38e58f530a1a

(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.
author Gerd Moellmann <gerd@gnu.org>
date Fri, 12 Jan 2001 15:09:21 +0000
parents ba1f849f9381
children ba490eed8f66
comparison
equal deleted inserted replaced
35274:bc2b88ed2fa1 35275:38e58f530a1a
5302 { 5302 {
5303 IMAGE_DONT_CHECK_VALUE_TYPE, 5303 IMAGE_DONT_CHECK_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,
5310 IMAGE_FUNCTION_VALUE, 5311 IMAGE_FUNCTION_VALUE,
5311 IMAGE_NUMBER_VALUE, 5312 IMAGE_NUMBER_VALUE,
5405 5406
5406 case IMAGE_POSITIVE_INTEGER_VALUE: 5407 case IMAGE_POSITIVE_INTEGER_VALUE:
5407 if (!INTEGERP (value) || XINT (value) <= 0) 5408 if (!INTEGERP (value) || XINT (value) <= 0)
5408 return 0; 5409 return 0;
5409 break; 5410 break;
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;
5410 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;
5414 else if (INTEGERP (value) 5424 else if (INTEGERP (value)
5512 if (valid_image_p (spec)) 5522 if (valid_image_p (spec))
5513 { 5523 {
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)),
5522 make_float ((double) height / CANON_Y_UNIT (f))); 5532 make_float ((double) height / CANON_Y_UNIT (f)));
5523 else 5533 else
5642 int 5652 int
5643 image_ascent (img, face) 5653 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)
5651 { 5661 {
5652 if (face->font) 5662 if (face->font)
5961 else if (EQ (ascent, Qcenter)) 5971 else if (EQ (ascent, Qcenter))
5962 img->ascent = CENTERED_IMAGE_ASCENT; 5972 img->ascent = CENTERED_IMAGE_ASCENT;
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. */
5976 if (img->pixmap) 5995 if (img->pixmap)
5977 { 5996 {
6327 {":height", IMAGE_POSITIVE_INTEGER_VALUE, 0}, 6346 {":height", IMAGE_POSITIVE_INTEGER_VALUE, 0},
6328 {":data", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 6347 {":data", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
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},
6336 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0} 6355 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}
6337 }; 6356 };
6960 { 6979 {
6961 {":type", IMAGE_SYMBOL_VALUE, 1}, 6980 {":type", IMAGE_SYMBOL_VALUE, 1},
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},
6969 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 6988 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
6970 {":color-symbols", IMAGE_DONT_CHECK_VALUE_TYPE, 0} 6989 {":color-symbols", IMAGE_DONT_CHECK_VALUE_TYPE, 0}
8045 { 8064 {
8046 {":type", IMAGE_SYMBOL_VALUE, 1}, 8065 {":type", IMAGE_SYMBOL_VALUE, 1},
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},
8054 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 8073 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
8055 {":foreground", IMAGE_STRING_VALUE, 0}, 8074 {":foreground", IMAGE_STRING_VALUE, 0},
8372 { 8391 {
8373 {":type", IMAGE_SYMBOL_VALUE, 1}, 8392 {":type", IMAGE_SYMBOL_VALUE, 1},
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},
8381 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0} 8400 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}
8382 }; 8401 };
8849 { 8868 {
8850 {":type", IMAGE_SYMBOL_VALUE, 1}, 8869 {":type", IMAGE_SYMBOL_VALUE, 1},
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},
8858 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0} 8877 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}
8859 }; 8878 };
9204 { 9223 {
9205 {":type", IMAGE_SYMBOL_VALUE, 1}, 9224 {":type", IMAGE_SYMBOL_VALUE, 1},
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},
9213 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0} 9232 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}
9214 }; 9233 };
9527 { 9546 {
9528 {":type", IMAGE_SYMBOL_VALUE, 1}, 9547 {":type", IMAGE_SYMBOL_VALUE, 1},
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},
9536 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, 9555 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
9537 {":image", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0} 9556 {":image", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0}
9840 {":pt-height", IMAGE_POSITIVE_INTEGER_VALUE, 1}, 9859 {":pt-height", IMAGE_POSITIVE_INTEGER_VALUE, 1},
9841 {":file", IMAGE_STRING_VALUE, 1}, 9860 {":file", IMAGE_STRING_VALUE, 1},
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},
9849 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0} 9868 {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}
9850 }; 9869 };