mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-01 11:14:55 +00:00
(Qcenter): New variable.
(enum image_value_type): Add IMAGE_ASCENT_VALUE. (parse_image_spec): Handle IMAGE_ASCENT_VALUE. (image_ascent): New function. (lookup_image): Recognize `:ascent center'. (xbm_format, xpm_format, pbm_format, png_format, jpeg_format) (tiff_format, gif_format, gs_format): Use IMAGE_ASCENT_VALUE. (xbm_load): Don't set image's ascent here. (xbm_image_p, xpm_image_p, pbm_image_p, png_image_p) (jpeg_image_p, tiff_image_p, gif_image_p, gs_image_p): Don't check ascent values here. (Fimagep, Flookup_image [GLYPH_DEBUG]: Removed. (syms_of_xfns) [GLYPH_DEBUG]: Don't defsubr removed functions. (syms_of_xfns): Initialize Qcenter.
This commit is contained in:
parent
bdda7eb033
commit
7c7ff7f5d1
131
src/xfns.c
131
src/xfns.c
@ -236,7 +236,7 @@ Lisp_Object Quser_position;
|
||||
Lisp_Object Quser_size;
|
||||
extern Lisp_Object Qdisplay;
|
||||
Lisp_Object Qscroll_bar_foreground, Qscroll_bar_background;
|
||||
Lisp_Object Qscreen_gamma, Qline_spacing;
|
||||
Lisp_Object Qscreen_gamma, Qline_spacing, Qcenter;
|
||||
|
||||
/* The below are defined in frame.c. */
|
||||
|
||||
@ -5024,6 +5024,7 @@ enum image_value_type
|
||||
IMAGE_SYMBOL_VALUE,
|
||||
IMAGE_POSITIVE_INTEGER_VALUE,
|
||||
IMAGE_NON_NEGATIVE_INTEGER_VALUE,
|
||||
IMAGE_ASCENT_VALUE,
|
||||
IMAGE_INTEGER_VALUE,
|
||||
IMAGE_FUNCTION_VALUE,
|
||||
IMAGE_NUMBER_VALUE,
|
||||
@ -5126,6 +5127,15 @@ parse_image_spec (spec, keywords, nkeywords, type)
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case IMAGE_ASCENT_VALUE:
|
||||
if (SYMBOLP (value) && EQ (value, Qcenter))
|
||||
break;
|
||||
else if (INTEGERP (value)
|
||||
&& XINT (value) >= 0
|
||||
&& XINT (value) <= 100)
|
||||
break;
|
||||
return 0;
|
||||
|
||||
case IMAGE_NON_NEGATIVE_INTEGER_VALUE:
|
||||
if (!INTEGERP (value) || XINT (value) < 0)
|
||||
return 0;
|
||||
@ -5288,6 +5298,31 @@ prepare_image_for_display (f, img)
|
||||
}
|
||||
|
||||
|
||||
/* Value is the number of pixels for the ascent of image IMG when
|
||||
drawn in face FACE. */
|
||||
|
||||
int
|
||||
image_ascent (img, face)
|
||||
struct image *img;
|
||||
struct face *face;
|
||||
{
|
||||
int height = img->height + img->margin;
|
||||
int ascent;
|
||||
|
||||
if (img->ascent == CENTERED_IMAGE_ASCENT)
|
||||
{
|
||||
if (face->font)
|
||||
ascent = height / 2 - (face->font->descent - face->font->ascent) / 2;
|
||||
else
|
||||
ascent = height / 2;
|
||||
}
|
||||
else
|
||||
ascent = height * img->ascent / 100.0;
|
||||
|
||||
return ascent;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
Helper functions for X image types
|
||||
@ -5540,13 +5575,15 @@ lookup_image (f, spec)
|
||||
else
|
||||
{
|
||||
/* Handle image type independent image attributes
|
||||
`:ascent PERCENT', `:margin MARGIN', `:relief RELIEF'. */
|
||||
`:ascent ASCENT', `:margin MARGIN', `:relief RELIEF'. */
|
||||
Lisp_Object ascent, margin, relief, algorithm, heuristic_mask;
|
||||
Lisp_Object file;
|
||||
|
||||
ascent = image_spec_value (spec, QCascent, NULL);
|
||||
if (INTEGERP (ascent))
|
||||
img->ascent = XFASTINT (ascent);
|
||||
else if (EQ (ascent, Qcenter))
|
||||
img->ascent = CENTERED_IMAGE_ASCENT;
|
||||
|
||||
margin = image_spec_value (spec, QCmargin, NULL);
|
||||
if (INTEGERP (margin) && XINT (margin) >= 0)
|
||||
@ -5855,7 +5892,7 @@ static struct image_keyword xbm_format[XBM_LAST] =
|
||||
{":data", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
|
||||
{":foreground", IMAGE_STRING_VALUE, 0},
|
||||
{":background", IMAGE_STRING_VALUE, 0},
|
||||
{":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0},
|
||||
{":ascent", IMAGE_ASCENT_VALUE, 0},
|
||||
{":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
|
||||
{":relief", IMAGE_INTEGER_VALUE, 0},
|
||||
{":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
|
||||
@ -5995,11 +6032,6 @@ xbm_image_p (object)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Baseline must be a value between 0 and 100 (a percentage). */
|
||||
if (kw[XBM_ASCENT].count
|
||||
&& XFASTINT (kw[XBM_ASCENT].value) > 100)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -6383,9 +6415,6 @@ xbm_load (f, img)
|
||||
|
||||
BLOCK_INPUT;
|
||||
|
||||
if (fmt[XBM_ASCENT].count)
|
||||
img->ascent = XFASTINT (fmt[XBM_ASCENT].value);
|
||||
|
||||
/* Get foreground and background colors, maybe allocate colors. */
|
||||
if (fmt[XBM_FOREGROUND].count)
|
||||
foreground = x_alloc_image_color (f, img, fmt[XBM_FOREGROUND].value,
|
||||
@ -6488,7 +6517,7 @@ static struct image_keyword xpm_format[XPM_LAST] =
|
||||
{":type", IMAGE_SYMBOL_VALUE, 1},
|
||||
{":file", IMAGE_STRING_VALUE, 0},
|
||||
{":data", IMAGE_STRING_VALUE, 0},
|
||||
{":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0},
|
||||
{":ascent", IMAGE_ASCENT_VALUE, 0},
|
||||
{":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
|
||||
{":relief", IMAGE_INTEGER_VALUE, 0},
|
||||
{":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
|
||||
@ -6544,9 +6573,7 @@ xpm_image_p (object)
|
||||
/* Either no `:color-symbols' or it's a list of conses
|
||||
whose car and cdr are strings. */
|
||||
&& (fmt[XPM_COLOR_SYMBOLS].count == 0
|
||||
|| xpm_valid_color_symbols_p (fmt[XPM_COLOR_SYMBOLS].value))
|
||||
&& (fmt[XPM_ASCENT].count == 0
|
||||
|| XFASTINT (fmt[XPM_ASCENT].value) < 100));
|
||||
|| xpm_valid_color_symbols_p (fmt[XPM_COLOR_SYMBOLS].value)));
|
||||
}
|
||||
|
||||
|
||||
@ -7187,7 +7214,7 @@ static struct image_keyword pbm_format[PBM_LAST] =
|
||||
{":type", IMAGE_SYMBOL_VALUE, 1},
|
||||
{":file", IMAGE_STRING_VALUE, 0},
|
||||
{":data", IMAGE_STRING_VALUE, 0},
|
||||
{":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0},
|
||||
{":ascent", IMAGE_ASCENT_VALUE, 0},
|
||||
{":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
|
||||
{":relief", IMAGE_INTEGER_VALUE, 0},
|
||||
{":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
|
||||
@ -7216,9 +7243,7 @@ pbm_image_p (object)
|
||||
|
||||
bcopy (pbm_format, fmt, sizeof fmt);
|
||||
|
||||
if (!parse_image_spec (object, fmt, PBM_LAST, Qpbm)
|
||||
|| (fmt[PBM_ASCENT].count
|
||||
&& XFASTINT (fmt[PBM_ASCENT].value) > 100))
|
||||
if (!parse_image_spec (object, fmt, PBM_LAST, Qpbm))
|
||||
return 0;
|
||||
|
||||
/* Must specify either :data or :file. */
|
||||
@ -7507,7 +7532,7 @@ static struct image_keyword png_format[PNG_LAST] =
|
||||
{":type", IMAGE_SYMBOL_VALUE, 1},
|
||||
{":data", IMAGE_STRING_VALUE, 0},
|
||||
{":file", IMAGE_STRING_VALUE, 0},
|
||||
{":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0},
|
||||
{":ascent", IMAGE_ASCENT_VALUE, 0},
|
||||
{":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
|
||||
{":relief", IMAGE_INTEGER_VALUE, 0},
|
||||
{":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
|
||||
@ -7535,9 +7560,7 @@ png_image_p (object)
|
||||
struct image_keyword fmt[PNG_LAST];
|
||||
bcopy (png_format, fmt, sizeof fmt);
|
||||
|
||||
if (!parse_image_spec (object, fmt, PNG_LAST, Qpng)
|
||||
|| (fmt[PNG_ASCENT].count
|
||||
&& XFASTINT (fmt[PNG_ASCENT].value) > 100))
|
||||
if (!parse_image_spec (object, fmt, PNG_LAST, Qpng))
|
||||
return 0;
|
||||
|
||||
/* Must specify either the :data or :file keyword. */
|
||||
@ -7993,7 +8016,7 @@ static struct image_keyword jpeg_format[JPEG_LAST] =
|
||||
{":type", IMAGE_SYMBOL_VALUE, 1},
|
||||
{":data", IMAGE_STRING_VALUE, 0},
|
||||
{":file", IMAGE_STRING_VALUE, 0},
|
||||
{":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0},
|
||||
{":ascent", IMAGE_ASCENT_VALUE, 0},
|
||||
{":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
|
||||
{":relief", IMAGE_INTEGER_VALUE, 0},
|
||||
{":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
|
||||
@ -8022,9 +8045,7 @@ jpeg_image_p (object)
|
||||
|
||||
bcopy (jpeg_format, fmt, sizeof fmt);
|
||||
|
||||
if (!parse_image_spec (object, fmt, JPEG_LAST, Qjpeg)
|
||||
|| (fmt[JPEG_ASCENT].count
|
||||
&& XFASTINT (fmt[JPEG_ASCENT].value) > 100))
|
||||
if (!parse_image_spec (object, fmt, JPEG_LAST, Qjpeg))
|
||||
return 0;
|
||||
|
||||
/* Must specify either the :data or :file keyword. */
|
||||
@ -8357,7 +8378,7 @@ static struct image_keyword tiff_format[TIFF_LAST] =
|
||||
{":type", IMAGE_SYMBOL_VALUE, 1},
|
||||
{":data", IMAGE_STRING_VALUE, 0},
|
||||
{":file", IMAGE_STRING_VALUE, 0},
|
||||
{":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0},
|
||||
{":ascent", IMAGE_ASCENT_VALUE, 0},
|
||||
{":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
|
||||
{":relief", IMAGE_INTEGER_VALUE, 0},
|
||||
{":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
|
||||
@ -8385,9 +8406,7 @@ tiff_image_p (object)
|
||||
struct image_keyword fmt[TIFF_LAST];
|
||||
bcopy (tiff_format, fmt, sizeof fmt);
|
||||
|
||||
if (!parse_image_spec (object, fmt, TIFF_LAST, Qtiff)
|
||||
|| (fmt[TIFF_ASCENT].count
|
||||
&& XFASTINT (fmt[TIFF_ASCENT].value) > 100))
|
||||
if (!parse_image_spec (object, fmt, TIFF_LAST, Qtiff))
|
||||
return 0;
|
||||
|
||||
/* Must specify either the :data or :file keyword. */
|
||||
@ -8684,7 +8703,7 @@ static struct image_keyword gif_format[GIF_LAST] =
|
||||
{":type", IMAGE_SYMBOL_VALUE, 1},
|
||||
{":data", IMAGE_STRING_VALUE, 0},
|
||||
{":file", IMAGE_STRING_VALUE, 0},
|
||||
{":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0},
|
||||
{":ascent", IMAGE_ASCENT_VALUE, 0},
|
||||
{":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
|
||||
{":relief", IMAGE_INTEGER_VALUE, 0},
|
||||
{":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
|
||||
@ -8713,9 +8732,7 @@ gif_image_p (object)
|
||||
struct image_keyword fmt[GIF_LAST];
|
||||
bcopy (gif_format, fmt, sizeof fmt);
|
||||
|
||||
if (!parse_image_spec (object, fmt, GIF_LAST, Qgif)
|
||||
|| (fmt[GIF_ASCENT].count
|
||||
&& XFASTINT (fmt[GIF_ASCENT].value) > 100))
|
||||
if (!parse_image_spec (object, fmt, GIF_LAST, Qgif))
|
||||
return 0;
|
||||
|
||||
/* Must specify either the :data or :file keyword. */
|
||||
@ -9001,7 +9018,7 @@ static struct image_keyword gs_format[GS_LAST] =
|
||||
{":file", IMAGE_STRING_VALUE, 1},
|
||||
{":loader", IMAGE_FUNCTION_VALUE, 0},
|
||||
{":bounding-box", IMAGE_DONT_CHECK_VALUE_TYPE, 1},
|
||||
{":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0},
|
||||
{":ascent", IMAGE_ASCENT_VALUE, 0},
|
||||
{":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0},
|
||||
{":relief", IMAGE_INTEGER_VALUE, 0},
|
||||
{":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
|
||||
@ -9046,9 +9063,7 @@ gs_image_p (object)
|
||||
|
||||
bcopy (gs_format, fmt, sizeof fmt);
|
||||
|
||||
if (!parse_image_spec (object, fmt, GS_LAST, Qpostscript)
|
||||
|| (fmt[GS_ASCENT].count
|
||||
&& XFASTINT (fmt[GS_ASCENT].value) > 100))
|
||||
if (!parse_image_spec (object, fmt, GS_LAST, Qpostscript))
|
||||
return 0;
|
||||
|
||||
/* Bounding box must be a list or vector containing 4 integers. */
|
||||
@ -10092,37 +10107,6 @@ selection dialog's entry field, if MUSTMATCH is non-nil.")
|
||||
|
||||
#endif /* USE_MOTIF */
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
Tests
|
||||
***********************************************************************/
|
||||
|
||||
#if GLYPH_DEBUG
|
||||
|
||||
DEFUN ("imagep", Fimagep, Simagep, 1, 1, 0,
|
||||
"Value is non-nil if SPEC is a valid image specification.")
|
||||
(spec)
|
||||
Lisp_Object spec;
|
||||
{
|
||||
return valid_image_p (spec) ? Qt : Qnil;
|
||||
}
|
||||
|
||||
|
||||
DEFUN ("lookup-image", Flookup_image, Slookup_image, 1, 1, 0, "")
|
||||
(spec)
|
||||
Lisp_Object spec;
|
||||
{
|
||||
int id = -1;
|
||||
|
||||
if (valid_image_p (spec))
|
||||
id = lookup_image (SELECTED_FRAME (), spec);
|
||||
|
||||
debug_print (spec);
|
||||
return make_number (id);
|
||||
}
|
||||
|
||||
#endif /* GLYPH_DEBUG != 0 */
|
||||
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
@ -10206,6 +10190,8 @@ syms_of_xfns ()
|
||||
staticpro (&Qscreen_gamma);
|
||||
Qline_spacing = intern ("line-spacing");
|
||||
staticpro (&Qline_spacing);
|
||||
Qcenter = intern ("center");
|
||||
staticpro (&Qcenter);
|
||||
/* This is the end of symbol initialization. */
|
||||
|
||||
/* Text property `display' should be nonsticky by default. */
|
||||
@ -10443,11 +10429,6 @@ Each element of the list is a symbol for a supported image type.");
|
||||
|
||||
defsubr (&Sclear_image_cache);
|
||||
|
||||
#if GLYPH_DEBUG
|
||||
defsubr (&Simagep);
|
||||
defsubr (&Slookup_image);
|
||||
#endif
|
||||
|
||||
busy_cursor_atimer = NULL;
|
||||
busy_cursor_shown_p = 0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user