Mercurial > emacs
comparison src/xfaces.c @ 46370:40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
SCHARS, SBYTES, STRING_INTERVALS, SREF, SDATA; explicit size_byte references
left unchanged for now.
author | Ken Raeburn <raeburn@raeburn.org> |
---|---|
date | Mon, 15 Jul 2002 00:00:41 +0000 |
parents | 1fb8f75062c6 |
children | d6b51ec01987 |
comparison
equal
deleted
inserted
replaced
46369:dd1d3b1d0053 | 46370:40db0673e6f0 |
---|---|
288 #define STRDUPA(S) strcpy ((char *) alloca (strlen ((S)) + 1), (S)) | 288 #define STRDUPA(S) strcpy ((char *) alloca (strlen ((S)) + 1), (S)) |
289 | 289 |
290 /* Make a copy of the contents of Lisp string S on the stack using | 290 /* Make a copy of the contents of Lisp string S on the stack using |
291 alloca. Value is a pointer to the copy. */ | 291 alloca. Value is a pointer to the copy. */ |
292 | 292 |
293 #define LSTRDUPA(S) STRDUPA (XSTRING ((S))->data) | 293 #define LSTRDUPA(S) STRDUPA (SDATA ((S))) |
294 | 294 |
295 /* Size of hash table of realized faces in face caches (should be a | 295 /* Size of hash table of realized faces in face caches (should be a |
296 prime number). */ | 296 prime number). */ |
297 | 297 |
298 #define FACE_CACHE_BUCKETS_SIZE 1001 | 298 #define FACE_CACHE_BUCKETS_SIZE 1001 |
1144 | 1144 |
1145 if (NATNUMP (width) && NATNUMP (height) && STRINGP (data)) | 1145 if (NATNUMP (width) && NATNUMP (height) && STRINGP (data)) |
1146 { | 1146 { |
1147 int bytes_per_row = ((XFASTINT (width) + BITS_PER_CHAR - 1) | 1147 int bytes_per_row = ((XFASTINT (width) + BITS_PER_CHAR - 1) |
1148 / BITS_PER_CHAR); | 1148 / BITS_PER_CHAR); |
1149 if (STRING_BYTES (XSTRING (data)) >= bytes_per_row * XINT (height)) | 1149 if (SBYTES (data) >= bytes_per_row * XINT (height)) |
1150 pixmap_p = 1; | 1150 pixmap_p = 1; |
1151 } | 1151 } |
1152 } | 1152 } |
1153 | 1153 |
1154 return pixmap_p ? Qt : Qnil; | 1154 return pixmap_p ? Qt : Qnil; |
1188 | 1188 |
1189 w = XINT (Fcar (name)); | 1189 w = XINT (Fcar (name)); |
1190 h = XINT (Fcar (Fcdr (name))); | 1190 h = XINT (Fcar (Fcdr (name))); |
1191 bits = Fcar (Fcdr (Fcdr (name))); | 1191 bits = Fcar (Fcdr (Fcdr (name))); |
1192 | 1192 |
1193 bitmap_id = x_create_bitmap_from_data (f, XSTRING (bits)->data, | 1193 bitmap_id = x_create_bitmap_from_data (f, SDATA (bits), |
1194 w, h); | 1194 w, h); |
1195 } | 1195 } |
1196 else | 1196 else |
1197 { | 1197 { |
1198 /* It must be a string -- a file name. */ | 1198 /* It must be a string -- a file name. */ |
1567 struct frame *f; | 1567 struct frame *f; |
1568 | 1568 |
1569 CHECK_FRAME (frame); | 1569 CHECK_FRAME (frame); |
1570 CHECK_STRING (color); | 1570 CHECK_STRING (color); |
1571 f = XFRAME (frame); | 1571 f = XFRAME (frame); |
1572 return face_color_gray_p (f, XSTRING (color)->data) ? Qt : Qnil; | 1572 return face_color_gray_p (f, SDATA (color)) ? Qt : Qnil; |
1573 } | 1573 } |
1574 | 1574 |
1575 | 1575 |
1576 DEFUN ("color-supported-p", Fcolor_supported_p, | 1576 DEFUN ("color-supported-p", Fcolor_supported_p, |
1577 Scolor_supported_p, 2, 3, 0, | 1577 Scolor_supported_p, 2, 3, 0, |
1585 struct frame *f; | 1585 struct frame *f; |
1586 | 1586 |
1587 CHECK_FRAME (frame); | 1587 CHECK_FRAME (frame); |
1588 CHECK_STRING (color); | 1588 CHECK_STRING (color); |
1589 f = XFRAME (frame); | 1589 f = XFRAME (frame); |
1590 if (face_color_supported_p (f, XSTRING (color)->data, !NILP (background_p))) | 1590 if (face_color_supported_p (f, SDATA (color), !NILP (background_p))) |
1591 return Qt; | 1591 return Qt; |
1592 return Qnil; | 1592 return Qnil; |
1593 } | 1593 } |
1594 | 1594 |
1595 | 1595 |
1619 || target_index == LFACE_STRIKE_THROUGH_INDEX | 1619 || target_index == LFACE_STRIKE_THROUGH_INDEX |
1620 || target_index == LFACE_BOX_INDEX); | 1620 || target_index == LFACE_BOX_INDEX); |
1621 | 1621 |
1622 /* if the color map is full, defined_color will return a best match | 1622 /* if the color map is full, defined_color will return a best match |
1623 to the values in an existing cell. */ | 1623 to the values in an existing cell. */ |
1624 if (!defined_color (f, XSTRING (name)->data, &color, 1)) | 1624 if (!defined_color (f, SDATA (name), &color, 1)) |
1625 { | 1625 { |
1626 add_to_log ("Unable to load color \"%s\"", name, Qnil); | 1626 add_to_log ("Unable to load color \"%s\"", name, Qnil); |
1627 | 1627 |
1628 switch (target_index) | 1628 switch (target_index) |
1629 { | 1629 { |
1699 | 1699 |
1700 /* Check for support for foreground, not for background because | 1700 /* Check for support for foreground, not for background because |
1701 face_color_supported_p is smart enough to know that grays are | 1701 face_color_supported_p is smart enough to know that grays are |
1702 "supported" as background because we are supposed to use stipple | 1702 "supported" as background because we are supposed to use stipple |
1703 for them. */ | 1703 for them. */ |
1704 if (!face_color_supported_p (f, XSTRING (bg)->data, 0) | 1704 if (!face_color_supported_p (f, SDATA (bg), 0) |
1705 && !NILP (Fbitmap_spec_p (Vface_default_stipple))) | 1705 && !NILP (Fbitmap_spec_p (Vface_default_stipple))) |
1706 { | 1706 { |
1707 x_destroy_bitmap (f, face->stipple); | 1707 x_destroy_bitmap (f, face->stipple); |
1708 face->stipple = load_pixmap (f, Vface_default_stipple, | 1708 face->stipple = load_pixmap (f, Vface_default_stipple, |
1709 &face->pixmap_w, &face->pixmap_h); | 1709 &face->pixmap_w, &face->pixmap_h); |
2474 split them into fields. */ | 2474 split them into fields. */ |
2475 n = nignored = 0; | 2475 n = nignored = 0; |
2476 for (tem = lfonts; CONSP (tem) && n < nfonts; tem = XCDR (tem)) | 2476 for (tem = lfonts; CONSP (tem) && n < nfonts; tem = XCDR (tem)) |
2477 { | 2477 { |
2478 Lisp_Object elt, tail; | 2478 Lisp_Object elt, tail; |
2479 char *name = XSTRING (XCAR (tem))->data; | 2479 char *name = SDATA (XCAR (tem)); |
2480 | 2480 |
2481 /* Ignore fonts matching a pattern from face-ignored-fonts. */ | 2481 /* Ignore fonts matching a pattern from face-ignored-fonts. */ |
2482 for (tail = Vface_ignored_fonts; CONSP (tail); tail = XCDR (tail)) | 2482 for (tail = Vface_ignored_fonts; CONSP (tail); tail = XCDR (tail)) |
2483 { | 2483 { |
2484 elt = XCAR (tail); | 2484 elt = XCAR (tail); |
2518 while (CONSP (list)) | 2518 while (CONSP (list)) |
2519 { | 2519 { |
2520 Lisp_Object entry = XCAR (list); | 2520 Lisp_Object entry = XCAR (list); |
2521 if (CONSP (entry) | 2521 if (CONSP (entry) |
2522 && STRINGP (XCAR (entry)) | 2522 && STRINGP (XCAR (entry)) |
2523 && strcmp (XSTRING (XCAR (entry))->data, pattern) == 0) | 2523 && strcmp (SDATA (XCAR (entry)), pattern) == 0) |
2524 break; | 2524 break; |
2525 list = XCDR (list); | 2525 list = XCDR (list); |
2526 } | 2526 } |
2527 | 2527 |
2528 if (CONSP (list)) | 2528 if (CONSP (list)) |
2534 /* If list is screwed up, give up. */ | 2534 /* If list is screwed up, give up. */ |
2535 && (name = XCAR (patterns), | 2535 && (name = XCAR (patterns), |
2536 STRINGP (name)) | 2536 STRINGP (name)) |
2537 /* Ignore patterns equal to PATTERN because we tried that | 2537 /* Ignore patterns equal to PATTERN because we tried that |
2538 already with no success. */ | 2538 already with no success. */ |
2539 && (strcmp (XSTRING (name)->data, pattern) == 0 | 2539 && (strcmp (SDATA (name), pattern) == 0 |
2540 || (n = x_face_list_fonts (f, XSTRING (name)->data, | 2540 || (n = x_face_list_fonts (f, SDATA (name), |
2541 fonts, nfonts, 0), | 2541 fonts, nfonts, 0), |
2542 n == 0))) | 2542 n == 0))) |
2543 patterns = XCDR (patterns); | 2543 patterns = XCDR (patterns); |
2544 } | 2544 } |
2545 } | 2545 } |
2645 { | 2645 { |
2646 char *pattern_str, *family_str, *registry_str; | 2646 char *pattern_str, *family_str, *registry_str; |
2647 | 2647 |
2648 if (NILP (pattern)) | 2648 if (NILP (pattern)) |
2649 { | 2649 { |
2650 family_str = (NILP (family) ? "*" : (char *) XSTRING (family)->data); | 2650 family_str = (NILP (family) ? "*" : (char *) SDATA (family)); |
2651 registry_str = (NILP (registry) ? "*" : (char *) XSTRING (registry)->data); | 2651 registry_str = (NILP (registry) ? "*" : (char *) SDATA (registry)); |
2652 | 2652 |
2653 pattern_str = (char *) alloca (strlen (family_str) | 2653 pattern_str = (char *) alloca (strlen (family_str) |
2654 + strlen (registry_str) | 2654 + strlen (registry_str) |
2655 + 10); | 2655 + 10); |
2656 strcpy (pattern_str, index (family_str, '-') ? "-" : "-*-"); | 2656 strcpy (pattern_str, index (family_str, '-') ? "-" : "-*-"); |
2664 else | 2664 else |
2665 strcat (pattern_str, "*-*"); | 2665 strcat (pattern_str, "*-*"); |
2666 } | 2666 } |
2667 } | 2667 } |
2668 else | 2668 else |
2669 pattern_str = (char *) XSTRING (pattern)->data; | 2669 pattern_str = (char *) SDATA (pattern); |
2670 | 2670 |
2671 return sorted_font_list (f, pattern_str, cmp_font_names, fonts); | 2671 return sorted_font_list (f, pattern_str, cmp_font_names, fonts); |
2672 } | 2672 } |
2673 | 2673 |
2674 | 2674 |
3085 Lisp_Object face_name; | 3085 Lisp_Object face_name; |
3086 { | 3086 { |
3087 Lisp_Object aliased; | 3087 Lisp_Object aliased; |
3088 | 3088 |
3089 if (STRINGP (face_name)) | 3089 if (STRINGP (face_name)) |
3090 face_name = intern (XSTRING (face_name)->data); | 3090 face_name = intern (SDATA (face_name)); |
3091 | 3091 |
3092 while (SYMBOLP (face_name)) | 3092 while (SYMBOLP (face_name)) |
3093 { | 3093 { |
3094 aliased = Fget (face_name, Qface_alias); | 3094 aliased = Fget (face_name, Qface_alias); |
3095 if (NILP (aliased)) | 3095 if (NILP (aliased)) |
3208 struct font_name font; | 3208 struct font_name font; |
3209 char *buffer; | 3209 char *buffer; |
3210 int pt; | 3210 int pt; |
3211 int have_xlfd_p; | 3211 int have_xlfd_p; |
3212 int fontset; | 3212 int fontset; |
3213 char *font_name = XSTRING (fontname)->data; | 3213 char *font_name = SDATA (fontname); |
3214 struct font_info *font_info; | 3214 struct font_info *font_info; |
3215 | 3215 |
3216 /* If FONTNAME is actually a fontset name, get ASCII font name of it. */ | 3216 /* If FONTNAME is actually a fontset name, get ASCII font name of it. */ |
3217 fontset = fs_query_fontset (fontname, 0); | 3217 fontset = fs_query_fontset (fontname, 0); |
3218 if (fontset >= 0) | 3218 if (fontset >= 0) |
3219 font_name = XSTRING (fontset_ascii (fontset))->data; | 3219 font_name = SDATA (fontset_ascii (fontset)); |
3220 | 3220 |
3221 /* Check if FONT_NAME is surely available on the system. Usually | 3221 /* Check if FONT_NAME is surely available on the system. Usually |
3222 FONT_NAME is already cached for the frame F and FS_LOAD_FONT | 3222 FONT_NAME is already cached for the frame F and FS_LOAD_FONT |
3223 returns quickly. But, even if FONT_NAME is not yet cached, | 3223 returns quickly. But, even if FONT_NAME is not yet cached, |
3224 caching it now is not futail because we anyway load the font | 3224 caching it now is not futail because we anyway load the font |
3520 } | 3520 } |
3521 else | 3521 else |
3522 add_to_log ("Invalid face color", color_name, Qnil); | 3522 add_to_log ("Invalid face color", color_name, Qnil); |
3523 } | 3523 } |
3524 else if (SYMBOLP (first) | 3524 else if (SYMBOLP (first) |
3525 && *XSTRING (SYMBOL_NAME (first))->data == ':') | 3525 && *SDATA (SYMBOL_NAME (first)) == ':') |
3526 { | 3526 { |
3527 /* Assume this is the property list form. */ | 3527 /* Assume this is the property list form. */ |
3528 while (CONSP (prop) && CONSP (XCDR (prop))) | 3528 while (CONSP (prop) && CONSP (XCDR (prop))) |
3529 { | 3529 { |
3530 Lisp_Object keyword = XCAR (prop); | 3530 Lisp_Object keyword = XCAR (prop); |
3902 if (EQ (attr, QCfamily)) | 3902 if (EQ (attr, QCfamily)) |
3903 { | 3903 { |
3904 if (!UNSPECIFIEDP (value)) | 3904 if (!UNSPECIFIEDP (value)) |
3905 { | 3905 { |
3906 CHECK_STRING (value); | 3906 CHECK_STRING (value); |
3907 if (XSTRING (value)->size == 0) | 3907 if (SCHARS (value) == 0) |
3908 signal_error ("Invalid face family", value); | 3908 signal_error ("Invalid face family", value); |
3909 } | 3909 } |
3910 old_value = LFACE_FAMILY (lface); | 3910 old_value = LFACE_FAMILY (lface); |
3911 LFACE_FAMILY (lface) = value; | 3911 LFACE_FAMILY (lface) = value; |
3912 font_related_attr_p = 1; | 3912 font_related_attr_p = 1; |
3962 if ((SYMBOLP (value) | 3962 if ((SYMBOLP (value) |
3963 && !EQ (value, Qt) | 3963 && !EQ (value, Qt) |
3964 && !EQ (value, Qnil)) | 3964 && !EQ (value, Qnil)) |
3965 /* Underline color. */ | 3965 /* Underline color. */ |
3966 || (STRINGP (value) | 3966 || (STRINGP (value) |
3967 && XSTRING (value)->size == 0)) | 3967 && SCHARS (value) == 0)) |
3968 signal_error ("Invalid face underline", value); | 3968 signal_error ("Invalid face underline", value); |
3969 | 3969 |
3970 old_value = LFACE_UNDERLINE (lface); | 3970 old_value = LFACE_UNDERLINE (lface); |
3971 LFACE_UNDERLINE (lface) = value; | 3971 LFACE_UNDERLINE (lface) = value; |
3972 } | 3972 } |
3976 if ((SYMBOLP (value) | 3976 if ((SYMBOLP (value) |
3977 && !EQ (value, Qt) | 3977 && !EQ (value, Qt) |
3978 && !EQ (value, Qnil)) | 3978 && !EQ (value, Qnil)) |
3979 /* Overline color. */ | 3979 /* Overline color. */ |
3980 || (STRINGP (value) | 3980 || (STRINGP (value) |
3981 && XSTRING (value)->size == 0)) | 3981 && SCHARS (value) == 0)) |
3982 signal_error ("Invalid face overline", value); | 3982 signal_error ("Invalid face overline", value); |
3983 | 3983 |
3984 old_value = LFACE_OVERLINE (lface); | 3984 old_value = LFACE_OVERLINE (lface); |
3985 LFACE_OVERLINE (lface) = value; | 3985 LFACE_OVERLINE (lface) = value; |
3986 } | 3986 } |
3990 if ((SYMBOLP (value) | 3990 if ((SYMBOLP (value) |
3991 && !EQ (value, Qt) | 3991 && !EQ (value, Qt) |
3992 && !EQ (value, Qnil)) | 3992 && !EQ (value, Qnil)) |
3993 /* Strike-through color. */ | 3993 /* Strike-through color. */ |
3994 || (STRINGP (value) | 3994 || (STRINGP (value) |
3995 && XSTRING (value)->size == 0)) | 3995 && SCHARS (value) == 0)) |
3996 signal_error ("Invalid face strike-through", value); | 3996 signal_error ("Invalid face strike-through", value); |
3997 | 3997 |
3998 old_value = LFACE_STRIKE_THROUGH (lface); | 3998 old_value = LFACE_STRIKE_THROUGH (lface); |
3999 LFACE_STRIKE_THROUGH (lface) = value; | 3999 LFACE_STRIKE_THROUGH (lface) = value; |
4000 } | 4000 } |
4012 else if (NILP (value)) | 4012 else if (NILP (value)) |
4013 valid_p = 1; | 4013 valid_p = 1; |
4014 else if (INTEGERP (value)) | 4014 else if (INTEGERP (value)) |
4015 valid_p = XINT (value) != 0; | 4015 valid_p = XINT (value) != 0; |
4016 else if (STRINGP (value)) | 4016 else if (STRINGP (value)) |
4017 valid_p = XSTRING (value)->size > 0; | 4017 valid_p = SCHARS (value) > 0; |
4018 else if (CONSP (value)) | 4018 else if (CONSP (value)) |
4019 { | 4019 { |
4020 Lisp_Object tem; | 4020 Lisp_Object tem; |
4021 | 4021 |
4022 tem = value; | 4022 tem = value; |
4036 if (!INTEGERP (v) || XINT (v) == 0) | 4036 if (!INTEGERP (v) || XINT (v) == 0) |
4037 break; | 4037 break; |
4038 } | 4038 } |
4039 else if (EQ (k, QCcolor)) | 4039 else if (EQ (k, QCcolor)) |
4040 { | 4040 { |
4041 if (!STRINGP (v) || XSTRING (v)->size == 0) | 4041 if (!STRINGP (v) || SCHARS (v) == 0) |
4042 break; | 4042 break; |
4043 } | 4043 } |
4044 else if (EQ (k, QCstyle)) | 4044 else if (EQ (k, QCstyle)) |
4045 { | 4045 { |
4046 if (!EQ (v, Qpressed_button) && !EQ (v, Qreleased_button)) | 4046 if (!EQ (v, Qpressed_button) && !EQ (v, Qreleased_button)) |
4079 { | 4079 { |
4080 /* Don't check for valid color names here because it depends | 4080 /* Don't check for valid color names here because it depends |
4081 on the frame (display) whether the color will be valid | 4081 on the frame (display) whether the color will be valid |
4082 when the face is realized. */ | 4082 when the face is realized. */ |
4083 CHECK_STRING (value); | 4083 CHECK_STRING (value); |
4084 if (XSTRING (value)->size == 0) | 4084 if (SCHARS (value) == 0) |
4085 signal_error ("Empty foreground color value", value); | 4085 signal_error ("Empty foreground color value", value); |
4086 } | 4086 } |
4087 old_value = LFACE_FOREGROUND (lface); | 4087 old_value = LFACE_FOREGROUND (lface); |
4088 LFACE_FOREGROUND (lface) = value; | 4088 LFACE_FOREGROUND (lface) = value; |
4089 } | 4089 } |
4093 { | 4093 { |
4094 /* Don't check for valid color names here because it depends | 4094 /* Don't check for valid color names here because it depends |
4095 on the frame (display) whether the color will be valid | 4095 on the frame (display) whether the color will be valid |
4096 when the face is realized. */ | 4096 when the face is realized. */ |
4097 CHECK_STRING (value); | 4097 CHECK_STRING (value); |
4098 if (XSTRING (value)->size == 0) | 4098 if (SCHARS (value) == 0) |
4099 signal_error ("Empty background color value", value); | 4099 signal_error ("Empty background color value", value); |
4100 } | 4100 } |
4101 old_value = LFACE_BACKGROUND (lface); | 4101 old_value = LFACE_BACKGROUND (lface); |
4102 LFACE_BACKGROUND (lface) = value; | 4102 LFACE_BACKGROUND (lface) = value; |
4103 } | 4103 } |
4443 { | 4443 { |
4444 Lisp_Object result = make_number (0); | 4444 Lisp_Object result = make_number (0); |
4445 | 4445 |
4446 xassert (STRINGP (value)); | 4446 xassert (STRINGP (value)); |
4447 | 4447 |
4448 if (xstricmp (XSTRING (value)->data, "on") == 0 | 4448 if (xstricmp (SDATA (value), "on") == 0 |
4449 || xstricmp (XSTRING (value)->data, "true") == 0) | 4449 || xstricmp (SDATA (value), "true") == 0) |
4450 result = Qt; | 4450 result = Qt; |
4451 else if (xstricmp (XSTRING (value)->data, "off") == 0 | 4451 else if (xstricmp (SDATA (value), "off") == 0 |
4452 || xstricmp (XSTRING (value)->data, "false") == 0) | 4452 || xstricmp (SDATA (value), "false") == 0) |
4453 result = Qnil; | 4453 result = Qnil; |
4454 else if (xstricmp (XSTRING (value)->data, "unspecified") == 0) | 4454 else if (xstricmp (SDATA (value), "unspecified") == 0) |
4455 result = Qunspecified; | 4455 result = Qunspecified; |
4456 else if (signal_p) | 4456 else if (signal_p) |
4457 signal_error ("Invalid face attribute value from X resource", value); | 4457 signal_error ("Invalid face attribute value from X resource", value); |
4458 | 4458 |
4459 return result; | 4459 return result; |
4469 { | 4469 { |
4470 CHECK_SYMBOL (face); | 4470 CHECK_SYMBOL (face); |
4471 CHECK_SYMBOL (attr); | 4471 CHECK_SYMBOL (attr); |
4472 CHECK_STRING (value); | 4472 CHECK_STRING (value); |
4473 | 4473 |
4474 if (xstricmp (XSTRING (value)->data, "unspecified") == 0) | 4474 if (xstricmp (SDATA (value), "unspecified") == 0) |
4475 value = Qunspecified; | 4475 value = Qunspecified; |
4476 else if (EQ (attr, QCheight)) | 4476 else if (EQ (attr, QCheight)) |
4477 { | 4477 { |
4478 value = Fstring_to_number (value, make_number (10)); | 4478 value = Fstring_to_number (value, make_number (10)); |
4479 if (XINT (value) <= 0) | 4479 if (XINT (value) <= 0) |
4480 signal_error ("Invalid face height from X resource", value); | 4480 signal_error ("Invalid face height from X resource", value); |
4481 } | 4481 } |
4482 else if (EQ (attr, QCbold) || EQ (attr, QCitalic)) | 4482 else if (EQ (attr, QCbold) || EQ (attr, QCitalic)) |
4483 value = face_boolean_x_resource_value (value, 1); | 4483 value = face_boolean_x_resource_value (value, 1); |
4484 else if (EQ (attr, QCweight) || EQ (attr, QCslant) || EQ (attr, QCwidth)) | 4484 else if (EQ (attr, QCweight) || EQ (attr, QCslant) || EQ (attr, QCwidth)) |
4485 value = intern (XSTRING (value)->data); | 4485 value = intern (SDATA (value)); |
4486 else if (EQ (attr, QCreverse_video) || EQ (attr, QCinverse_video)) | 4486 else if (EQ (attr, QCreverse_video) || EQ (attr, QCinverse_video)) |
4487 value = face_boolean_x_resource_value (value, 1); | 4487 value = face_boolean_x_resource_value (value, 1); |
4488 else if (EQ (attr, QCunderline) | 4488 else if (EQ (attr, QCunderline) |
4489 || EQ (attr, QCoverline) | 4489 || EQ (attr, QCoverline) |
4490 || EQ (attr, QCstrike_through)) | 4490 || EQ (attr, QCstrike_through)) |
4526 rdb != NULL)) | 4526 rdb != NULL)) |
4527 { | 4527 { |
4528 char line[512]; | 4528 char line[512]; |
4529 Lisp_Object lface = lface_from_face_name (f, Qmenu, 1); | 4529 Lisp_Object lface = lface_from_face_name (f, Qmenu, 1); |
4530 struct face *face = FACE_FROM_ID (f, MENU_FACE_ID); | 4530 struct face *face = FACE_FROM_ID (f, MENU_FACE_ID); |
4531 char *myname = XSTRING (Vx_resource_name)->data; | 4531 char *myname = SDATA (Vx_resource_name); |
4532 int changed_p = 0; | 4532 int changed_p = 0; |
4533 #ifdef USE_MOTIF | 4533 #ifdef USE_MOTIF |
4534 const char *popup_path = "popup_menu"; | 4534 const char *popup_path = "popup_menu"; |
4535 #else | 4535 #else |
4536 const char *popup_path = "menu.popup"; | 4536 const char *popup_path = "menu.popup"; |
4538 | 4538 |
4539 if (STRINGP (LFACE_FOREGROUND (lface))) | 4539 if (STRINGP (LFACE_FOREGROUND (lface))) |
4540 { | 4540 { |
4541 sprintf (line, "%s.%s*foreground: %s", | 4541 sprintf (line, "%s.%s*foreground: %s", |
4542 myname, popup_path, | 4542 myname, popup_path, |
4543 XSTRING (LFACE_FOREGROUND (lface))->data); | 4543 SDATA (LFACE_FOREGROUND (lface))); |
4544 XrmPutLineResource (&rdb, line); | 4544 XrmPutLineResource (&rdb, line); |
4545 sprintf (line, "%s.pane.menubar*foreground: %s", | 4545 sprintf (line, "%s.pane.menubar*foreground: %s", |
4546 myname, XSTRING (LFACE_FOREGROUND (lface))->data); | 4546 myname, SDATA (LFACE_FOREGROUND (lface))); |
4547 XrmPutLineResource (&rdb, line); | 4547 XrmPutLineResource (&rdb, line); |
4548 changed_p = 1; | 4548 changed_p = 1; |
4549 } | 4549 } |
4550 | 4550 |
4551 if (STRINGP (LFACE_BACKGROUND (lface))) | 4551 if (STRINGP (LFACE_BACKGROUND (lface))) |
4552 { | 4552 { |
4553 sprintf (line, "%s.%s*background: %s", | 4553 sprintf (line, "%s.%s*background: %s", |
4554 myname, popup_path, | 4554 myname, popup_path, |
4555 XSTRING (LFACE_BACKGROUND (lface))->data); | 4555 SDATA (LFACE_BACKGROUND (lface))); |
4556 XrmPutLineResource (&rdb, line); | 4556 XrmPutLineResource (&rdb, line); |
4557 sprintf (line, "%s.pane.menubar*background: %s", | 4557 sprintf (line, "%s.pane.menubar*background: %s", |
4558 myname, XSTRING (LFACE_BACKGROUND (lface))->data); | 4558 myname, SDATA (LFACE_BACKGROUND (lface))); |
4559 XrmPutLineResource (&rdb, line); | 4559 XrmPutLineResource (&rdb, line); |
4560 changed_p = 1; | 4560 changed_p = 1; |
4561 } | 4561 } |
4562 | 4562 |
4563 if (face->font_name | 4563 if (face->font_name |
4835 if (!EQ (a, b)) | 4835 if (!EQ (a, b)) |
4836 { | 4836 { |
4837 switch (XTYPE (a)) | 4837 switch (XTYPE (a)) |
4838 { | 4838 { |
4839 case Lisp_String: | 4839 case Lisp_String: |
4840 equal_p = ((STRING_BYTES (XSTRING (a)) | 4840 equal_p = ((SBYTES (a) |
4841 == STRING_BYTES (XSTRING (b))) | 4841 == SBYTES (b)) |
4842 && bcmp (XSTRING (a)->data, XSTRING (b)->data, | 4842 && bcmp (SDATA (a), SDATA (b), |
4843 STRING_BYTES (XSTRING (a))) == 0); | 4843 SBYTES (a)) == 0); |
4844 break; | 4844 break; |
4845 | 4845 |
4846 case Lisp_Int: | 4846 case Lisp_Int: |
4847 case Lisp_Symbol: | 4847 case Lisp_Symbol: |
4848 equal_p = 0; | 4848 equal_p = 0; |
4940 Lisp_Object string; | 4940 Lisp_Object string; |
4941 { | 4941 { |
4942 unsigned char *s; | 4942 unsigned char *s; |
4943 unsigned hash = 0; | 4943 unsigned hash = 0; |
4944 xassert (STRINGP (string)); | 4944 xassert (STRINGP (string)); |
4945 for (s = XSTRING (string)->data; *s; ++s) | 4945 for (s = SDATA (string); *s; ++s) |
4946 hash = (hash << 1) ^ tolower (*s); | 4946 hash = (hash << 1) ^ tolower (*s); |
4947 return hash; | 4947 return hash; |
4948 } | 4948 } |
4949 | 4949 |
4950 | 4950 |
4973 lface_same_font_attributes_p (lface1, lface2) | 4973 lface_same_font_attributes_p (lface1, lface2) |
4974 Lisp_Object *lface1, *lface2; | 4974 Lisp_Object *lface1, *lface2; |
4975 { | 4975 { |
4976 xassert (lface_fully_specified_p (lface1) | 4976 xassert (lface_fully_specified_p (lface1) |
4977 && lface_fully_specified_p (lface2)); | 4977 && lface_fully_specified_p (lface2)); |
4978 return (xstricmp (XSTRING (lface1[LFACE_FAMILY_INDEX])->data, | 4978 return (xstricmp (SDATA (lface1[LFACE_FAMILY_INDEX]), |
4979 XSTRING (lface2[LFACE_FAMILY_INDEX])->data) == 0 | 4979 SDATA (lface2[LFACE_FAMILY_INDEX])) == 0 |
4980 && EQ (lface1[LFACE_HEIGHT_INDEX], lface2[LFACE_HEIGHT_INDEX]) | 4980 && EQ (lface1[LFACE_HEIGHT_INDEX], lface2[LFACE_HEIGHT_INDEX]) |
4981 && EQ (lface1[LFACE_SWIDTH_INDEX], lface2[LFACE_SWIDTH_INDEX]) | 4981 && EQ (lface1[LFACE_SWIDTH_INDEX], lface2[LFACE_SWIDTH_INDEX]) |
4982 && EQ (lface1[LFACE_AVGWIDTH_INDEX], lface2[LFACE_AVGWIDTH_INDEX]) | 4982 && EQ (lface1[LFACE_AVGWIDTH_INDEX], lface2[LFACE_AVGWIDTH_INDEX]) |
4983 && EQ (lface1[LFACE_WEIGHT_INDEX], lface2[LFACE_WEIGHT_INDEX]) | 4983 && EQ (lface1[LFACE_WEIGHT_INDEX], lface2[LFACE_WEIGHT_INDEX]) |
4984 && EQ (lface1[LFACE_SLANT_INDEX], lface2[LFACE_SLANT_INDEX]) | 4984 && EQ (lface1[LFACE_SLANT_INDEX], lface2[LFACE_SLANT_INDEX]) |
4985 && (EQ (lface1[LFACE_FONT_INDEX], lface2[LFACE_FONT_INDEX]) | 4985 && (EQ (lface1[LFACE_FONT_INDEX], lface2[LFACE_FONT_INDEX]) |
4986 || (STRINGP (lface1[LFACE_FONT_INDEX]) | 4986 || (STRINGP (lface1[LFACE_FONT_INDEX]) |
4987 && STRINGP (lface2[LFACE_FONT_INDEX]) | 4987 && STRINGP (lface2[LFACE_FONT_INDEX]) |
4988 && xstricmp (XSTRING (lface1[LFACE_FONT_INDEX])->data, | 4988 && xstricmp (SDATA (lface1[LFACE_FONT_INDEX]), |
4989 XSTRING (lface2[LFACE_FONT_INDEX])->data)))); | 4989 SDATA (lface2[LFACE_FONT_INDEX]))))); |
4990 } | 4990 } |
4991 | 4991 |
4992 | 4992 |
4993 | 4993 |
4994 /*********************************************************************** | 4994 /*********************************************************************** |
5139 CHECK_LIVE_FRAME (frame); | 5139 CHECK_LIVE_FRAME (frame); |
5140 f = XFRAME (frame); | 5140 f = XFRAME (frame); |
5141 | 5141 |
5142 if ((CONSP (color1) && !parse_rgb_list (color1, &cdef1)) | 5142 if ((CONSP (color1) && !parse_rgb_list (color1, &cdef1)) |
5143 || !STRINGP (color1) | 5143 || !STRINGP (color1) |
5144 || !defined_color (f, XSTRING (color1)->data, &cdef1, 0)) | 5144 || !defined_color (f, SDATA (color1), &cdef1, 0)) |
5145 signal_error ("Invalid color", color1); | 5145 signal_error ("Invalid color", color1); |
5146 if ((CONSP (color2) && !parse_rgb_list (color2, &cdef2)) | 5146 if ((CONSP (color2) && !parse_rgb_list (color2, &cdef2)) |
5147 || !STRINGP (color2) | 5147 || !STRINGP (color2) |
5148 || !defined_color (f, XSTRING (color2)->data, &cdef2, 0)) | 5148 || !defined_color (f, SDATA (color2), &cdef2, 0)) |
5149 signal_error ("Invalid color", color2); | 5149 signal_error ("Invalid color", color2); |
5150 | 5150 |
5151 return make_number (color_distance (&cdef1, &cdef2)); | 5151 return make_number (color_distance (&cdef1, &cdef2)); |
5152 } | 5152 } |
5153 | 5153 |
6345 exactly, Emacs looks for ones with the same registry as the | 6345 exactly, Emacs looks for ones with the same registry as the |
6346 default font. On the Mac, this is mac-roman, which does not work | 6346 default font. On the Mac, this is mac-roman, which does not work |
6347 if the family is -etl-fixed, e.g. The following widens the | 6347 if the family is -etl-fixed, e.g. The following widens the |
6348 choices and fixes that problem. */ | 6348 choices and fixes that problem. */ |
6349 if (nfonts == 0 && STRINGP (face_family) && STRINGP (registry) | 6349 if (nfonts == 0 && STRINGP (face_family) && STRINGP (registry) |
6350 && xstricmp (XSTRING (registry)->data, "mac-roman") == 0) | 6350 && xstricmp (SDATA (registry), "mac-roman") == 0) |
6351 nfonts = try_alternative_families (f, face_family, Qnil, fonts); | 6351 nfonts = try_alternative_families (f, face_family, Qnil, fonts); |
6352 #endif | 6352 #endif |
6353 | 6353 |
6354 if (nfonts == 0 && !NILP (family)) | 6354 if (nfonts == 0 && !NILP (family)) |
6355 nfonts = try_alternative_families (f, family, registry, fonts); | 6355 nfonts = try_alternative_families (f, family, registry, fonts); |
6419 return NULL; | 6419 return NULL; |
6420 } | 6420 } |
6421 | 6421 |
6422 /* If what we got is a name pattern, return it. */ | 6422 /* If what we got is a name pattern, return it. */ |
6423 if (STRINGP (pattern)) | 6423 if (STRINGP (pattern)) |
6424 return xstrdup (XSTRING (pattern)->data); | 6424 return xstrdup (SDATA (pattern)); |
6425 | 6425 |
6426 /* Get a list of fonts matching that pattern and choose the | 6426 /* Get a list of fonts matching that pattern and choose the |
6427 best match for the specified face attributes from it. */ | 6427 best match for the specified face attributes from it. */ |
6428 nfonts = try_font_list (f, attrs, XCAR (pattern), XCDR (pattern), &fonts); | 6428 nfonts = try_font_list (f, attrs, XCAR (pattern), XCDR (pattern), &fonts); |
6429 width_ratio = (SINGLE_BYTE_CHAR_P (c) | 6429 width_ratio = (SINGLE_BYTE_CHAR_P (c) |
6925 | 6925 |
6926 XSETFRAME (frame, f); | 6926 XSETFRAME (frame, f); |
6927 color = face->lface[idx]; | 6927 color = face->lface[idx]; |
6928 | 6928 |
6929 if (STRINGP (color) | 6929 if (STRINGP (color) |
6930 && XSTRING (color)->size | 6930 && SCHARS (color) |
6931 && CONSP (Vtty_defined_color_alist) | 6931 && CONSP (Vtty_defined_color_alist) |
6932 && (def = assq_no_quit (color, call1 (Qtty_color_alist, frame)), | 6932 && (def = assq_no_quit (color, call1 (Qtty_color_alist, frame)), |
6933 CONSP (def))) | 6933 CONSP (def))) |
6934 { | 6934 { |
6935 /* Associations in tty-defined-color-alist are of the form | 6935 /* Associations in tty-defined-color-alist are of the form |
7275 is nil if face is constant all the way to the end of the string. | 7275 is nil if face is constant all the way to the end of the string. |
7276 Otherwise it is a string position where to check faces next. | 7276 Otherwise it is a string position where to check faces next. |
7277 Limit is the maximum position up to which to check for property | 7277 Limit is the maximum position up to which to check for property |
7278 changes in Fnext_single_property_change. Strings are usually | 7278 changes in Fnext_single_property_change. Strings are usually |
7279 short, so set the limit to the end of the string. */ | 7279 short, so set the limit to the end of the string. */ |
7280 XSETFASTINT (limit, XSTRING (string)->size); | 7280 XSETFASTINT (limit, SCHARS (string)); |
7281 end = Fnext_single_property_change (position, prop_name, string, limit); | 7281 end = Fnext_single_property_change (position, prop_name, string, limit); |
7282 if (INTEGERP (end)) | 7282 if (INTEGERP (end)) |
7283 *endptr = XFASTINT (end); | 7283 *endptr = XFASTINT (end); |
7284 else | 7284 else |
7285 *endptr = -1; | 7285 *endptr = -1; |
7343 #ifdef HAVE_X_WINDOWS | 7343 #ifdef HAVE_X_WINDOWS |
7344 fprintf (stderr, "gc: %d\n", (int) face->gc); | 7344 fprintf (stderr, "gc: %d\n", (int) face->gc); |
7345 #endif | 7345 #endif |
7346 fprintf (stderr, "foreground: 0x%lx (%s)\n", | 7346 fprintf (stderr, "foreground: 0x%lx (%s)\n", |
7347 face->foreground, | 7347 face->foreground, |
7348 XSTRING (face->lface[LFACE_FOREGROUND_INDEX])->data); | 7348 SDATA (face->lface[LFACE_FOREGROUND_INDEX])); |
7349 fprintf (stderr, "background: 0x%lx (%s)\n", | 7349 fprintf (stderr, "background: 0x%lx (%s)\n", |
7350 face->background, | 7350 face->background, |
7351 XSTRING (face->lface[LFACE_BACKGROUND_INDEX])->data); | 7351 SDATA (face->lface[LFACE_BACKGROUND_INDEX])); |
7352 fprintf (stderr, "font_name: %s (%s)\n", | 7352 fprintf (stderr, "font_name: %s (%s)\n", |
7353 face->font_name, | 7353 face->font_name, |
7354 XSTRING (face->lface[LFACE_FAMILY_INDEX])->data); | 7354 SDATA (face->lface[LFACE_FAMILY_INDEX])); |
7355 #ifdef HAVE_X_WINDOWS | 7355 #ifdef HAVE_X_WINDOWS |
7356 fprintf (stderr, "font = %p\n", face->font); | 7356 fprintf (stderr, "font = %p\n", face->font); |
7357 #endif | 7357 #endif |
7358 fprintf (stderr, "font_info_id = %d\n", face->font_info_id); | 7358 fprintf (stderr, "font_info_id = %d\n", face->font_info_id); |
7359 fprintf (stderr, "fontset: %d\n", face->fontset); | 7359 fprintf (stderr, "fontset: %d\n", face->fontset); |
7360 fprintf (stderr, "underline: %d (%s)\n", | 7360 fprintf (stderr, "underline: %d (%s)\n", |
7361 face->underline_p, | 7361 face->underline_p, |
7362 XSTRING (Fsymbol_name (face->lface[LFACE_UNDERLINE_INDEX]))->data); | 7362 SDATA (Fsymbol_name (face->lface[LFACE_UNDERLINE_INDEX]))); |
7363 fprintf (stderr, "hash: %d\n", face->hash); | 7363 fprintf (stderr, "hash: %d\n", face->hash); |
7364 fprintf (stderr, "charset: %d\n", face->charset); | 7364 fprintf (stderr, "charset: %d\n", face->charset); |
7365 } | 7365 } |
7366 | 7366 |
7367 | 7367 |