/[emacs]/emacs/src/fringe.c
ViewVC logotype

Diff of /emacs/src/fringe.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.13 by kfstorm, Wed Sep 29 08:51:40 2004 UTC revision 1.14 by kfstorm, Wed Sep 29 11:57:48 2004 UTC
# Line 450  static unsigned fringe_faces[MAX_FRINGE_ Line 450  static unsigned fringe_faces[MAX_FRINGE_
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.
# Line 501  get_fringe_bitmap_name (bn) Line 507  get_fringe_bitmap_name (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
# Line 1068  compute_fringe_widths (f, redraw) Line 1038  compute_fringe_widths (f, redraw)
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  {  {
# Line 1099  If BITMAP overrides a standard fringe bi Line 1071  If BITMAP overrides a standard fringe bi
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    
# Line 1216  If BITMAP already exists, the existing d Line 1189  If BITMAP already exists, the existing d
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);
# Line 1274  If BITMAP already exists, the existing d Line 1245  If BITMAP already exists, the existing d
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++;
# Line 1289  If BITMAP already exists, the existing d Line 1260  If BITMAP already exists, the existing d
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;
# Line 1318  If BITMAP already exists, the existing d Line 1289  If BITMAP already exists, the existing d
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,
# Line 1328  If FACE is nil, reset face to default fr Line 1299  If FACE is nil, reset face to default fr
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))
# Line 1344  If FACE is nil, reset face to default fr Line 1316  If FACE is nil, reset face to default fr
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  }  }

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.14

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26