450 |
|
|
451 |
static int max_used_fringe_bitmap = MAX_STANDARD_FRINGE_BITMAPS; |
static int max_used_fringe_bitmap = MAX_STANDARD_FRINGE_BITMAPS; |
452 |
|
|
453 |
/* Return 1 if FRINGE_ID is a valid fringe bitmap id. */ |
|
454 |
|
/* Lookup bitmap number for symbol BITMAP. |
455 |
|
Return 0 if not a bitmap. */ |
456 |
|
|
457 |
int |
int |
458 |
valid_fringe_bitmap_p (bitmap) |
lookup_fringe_bitmap (bitmap) |
459 |
Lisp_Object bitmap; |
Lisp_Object bitmap; |
460 |
{ |
{ |
461 |
int bn; |
int bn; |
462 |
|
|
463 |
|
bitmap = Fget (bitmap, Qfringe); |
464 |
if (!INTEGERP (bitmap)) |
if (!INTEGERP (bitmap)) |
465 |
return 0; |
return 0; |
466 |
|
|
467 |
bn = XINT (bitmap); |
bn = XINT (bitmap); |
468 |
return (bn >= NO_FRINGE_BITMAP |
if (bn > NO_FRINGE_BITMAP |
469 |
&& bn < max_used_fringe_bitmap |
&& bn < max_used_fringe_bitmap |
470 |
&& (bn < MAX_STANDARD_FRINGE_BITMAPS |
&& (bn < MAX_STANDARD_FRINGE_BITMAPS |
471 |
|| fringe_bitmaps[bn] != NULL)); |
|| fringe_bitmaps[bn] != NULL)) |
472 |
|
return bn; |
473 |
|
|
474 |
|
return 0; |
475 |
} |
} |
476 |
|
|
477 |
/* Get fringe bitmap name for bitmap number BN. |
/* Get fringe bitmap name for bitmap number BN. |
507 |
} |
} |
508 |
|
|
509 |
|
|
|
/* Resolve a BITMAP parameter. |
|
|
|
|
|
An INTEGER, corresponding to a bitmap number. |
|
|
A STRING which is interned to a symbol. |
|
|
A SYMBOL which has a fringe property which is a bitmap number. |
|
|
*/ |
|
|
|
|
|
static int |
|
|
resolve_fringe_bitmap (bitmap, namep) |
|
|
Lisp_Object bitmap; |
|
|
Lisp_Object *namep; |
|
|
{ |
|
|
if (namep) |
|
|
*namep = Qnil; |
|
|
|
|
|
if (STRINGP (bitmap)) |
|
|
bitmap = intern (SDATA (bitmap)); |
|
|
|
|
|
if (SYMBOLP (bitmap)) |
|
|
{ |
|
|
if (namep) |
|
|
*namep = bitmap; |
|
|
bitmap = Fget (bitmap, Qfringe); |
|
|
} |
|
|
|
|
|
if (valid_fringe_bitmap_p (bitmap)) |
|
|
{ |
|
|
if (namep && NILP (*namep)) |
|
|
*namep = get_fringe_bitmap_name (XINT (bitmap)); |
|
|
return XINT (bitmap); |
|
|
} |
|
|
|
|
|
return -1; |
|
|
} |
|
|
|
|
|
|
|
510 |
/* Draw the bitmap WHICH in one of the left or right fringes of |
/* Draw the bitmap WHICH in one of the left or right fringes of |
511 |
window W. ROW is the glyph row for which to display the bitmap; it |
window W. ROW is the glyph row for which to display the bitmap; it |
512 |
determines the vertical position at which the bitmap has to be |
determines the vertical position at which the bitmap has to be |
1038 |
} |
} |
1039 |
|
|
1040 |
|
|
1041 |
void |
/* Free resources used by a user-defined bitmap. */ |
1042 |
|
|
1043 |
|
int |
1044 |
destroy_fringe_bitmap (n) |
destroy_fringe_bitmap (n) |
1045 |
int n; |
int n; |
1046 |
{ |
{ |
1071 |
Lisp_Object bitmap; |
Lisp_Object bitmap; |
1072 |
{ |
{ |
1073 |
int n; |
int n; |
|
Lisp_Object sym; |
|
1074 |
|
|
1075 |
n = resolve_fringe_bitmap (bitmap, &sym); |
CHECK_SYMBOL (bitmap); |
1076 |
if (n < 0) |
n = lookup_fringe_bitmap (bitmap); |
1077 |
|
if (!n) |
1078 |
return Qnil; |
return Qnil; |
1079 |
|
|
1080 |
destroy_fringe_bitmap (n); |
destroy_fringe_bitmap (n); |
1081 |
|
|
1082 |
if (SYMBOLP (sym)) |
if (n >= MAX_STANDARD_FRINGE_BITMAPS) |
1083 |
{ |
{ |
1084 |
Vfringe_bitmaps = Fdelq (sym, Vfringe_bitmaps); |
Vfringe_bitmaps = Fdelq (bitmap, Vfringe_bitmaps); |
1085 |
/* It would be better to remove the fringe property. */ |
/* It would be better to remove the fringe property. */ |
1086 |
Fput (sym, Qfringe, Qnil); |
Fput (bitmap, Qfringe, Qnil); |
1087 |
} |
} |
1088 |
|
|
1089 |
return Qnil; |
return Qnil; |
1090 |
} |
} |
1091 |
|
|
1189 |
unsigned short *b; |
unsigned short *b; |
1190 |
struct fringe_bitmap fb, *xfb; |
struct fringe_bitmap fb, *xfb; |
1191 |
int fill1 = 0, fill2 = 0; |
int fill1 = 0, fill2 = 0; |
|
Lisp_Object sym; |
|
1192 |
|
|
1193 |
n = resolve_fringe_bitmap (bitmap, &sym); |
CHECK_SYMBOL (bitmap); |
1194 |
|
|
1195 |
if (NILP (sym) || INTEGERP (sym)) |
n = lookup_fringe_bitmap (bitmap); |
|
sym = wrong_type_argument (Qsymbolp, bitmap); |
|
1196 |
|
|
1197 |
if (!STRINGP (bits) && !VECTORP (bits)) |
if (!STRINGP (bits) && !VECTORP (bits)) |
1198 |
bits = wrong_type_argument (Qstringp, bits); |
bits = wrong_type_argument (Qstringp, bits); |
1245 |
else if (!NILP (align) && !EQ (align, Qcenter)) |
else if (!NILP (align) && !EQ (align, Qcenter)) |
1246 |
error ("Bad align argument"); |
error ("Bad align argument"); |
1247 |
|
|
1248 |
if (n < 0) |
if (!n) |
1249 |
{ |
{ |
1250 |
if (max_used_fringe_bitmap < MAX_FRINGE_BITMAPS) |
if (max_used_fringe_bitmap < MAX_FRINGE_BITMAPS) |
1251 |
n = max_used_fringe_bitmap++; |
n = max_used_fringe_bitmap++; |
1260 |
error ("Cannot define more fringe bitmaps"); |
error ("Cannot define more fringe bitmaps"); |
1261 |
} |
} |
1262 |
|
|
1263 |
Vfringe_bitmaps = Fcons (sym, Vfringe_bitmaps); |
Vfringe_bitmaps = Fcons (bitmap, Vfringe_bitmaps); |
1264 |
Fput (sym, Qfringe, make_number (n)); |
Fput (bitmap, Qfringe, make_number (n)); |
1265 |
} |
} |
1266 |
|
|
1267 |
fb.dynamic = 1; |
fb.dynamic = 1; |
1289 |
|
|
1290 |
init_fringe_bitmap (n, xfb, 0); |
init_fringe_bitmap (n, xfb, 0); |
1291 |
|
|
1292 |
return sym; |
return bitmap; |
1293 |
} |
} |
1294 |
|
|
1295 |
DEFUN ("set-fringe-bitmap-face", Fset_fringe_bitmap_face, Sset_fringe_bitmap_face, |
DEFUN ("set-fringe-bitmap-face", Fset_fringe_bitmap_face, Sset_fringe_bitmap_face, |
1299 |
(bitmap, face) |
(bitmap, face) |
1300 |
Lisp_Object bitmap, face; |
Lisp_Object bitmap, face; |
1301 |
{ |
{ |
1302 |
int bn; |
int n; |
1303 |
int face_id; |
int face_id; |
1304 |
|
|
1305 |
bn = resolve_fringe_bitmap (bitmap, 0); |
CHECK_SYMBOL (bitmap); |
1306 |
if (bn < 0) |
n = lookup_fringe_bitmap (bitmap); |
1307 |
|
if (!n) |
1308 |
error ("Undefined fringe bitmap"); |
error ("Undefined fringe bitmap"); |
1309 |
|
|
1310 |
if (!NILP (face)) |
if (!NILP (face)) |
1316 |
else |
else |
1317 |
face_id = FRINGE_FACE_ID; |
face_id = FRINGE_FACE_ID; |
1318 |
|
|
1319 |
fringe_faces [bn] = face_id; |
fringe_faces[n] = face_id; |
1320 |
|
|
1321 |
return Qnil; |
return Qnil; |
1322 |
} |
} |