Mercurial > emacs
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 }; |