+ Xft bindings for scx (not working, yet)
This commit is contained in:
		
							parent
							
								
									7b5dc3c710
								
							
						
					
					
						commit
						e7262771ff
					
				| 
						 | 
				
			
			@ -0,0 +1,370 @@
 | 
			
		|||
#include "xft.h"
 | 
			
		||||
 | 
			
		||||
/* XftPattern */
 | 
			
		||||
XFT_REC_ACCESSOR_MAKER(scx_enter_xftpattern, XftPattern, scx_xftpattern_record_type);
 | 
			
		||||
 | 
			
		||||
#define scx_extract_xftpattern(x) \
 | 
			
		||||
	((XftPattern *) s48_extract_integer(s48_checked_record_ref(x, 0, scx_xftpattern_record_type)))
 | 
			
		||||
 | 
			
		||||
/* XftFont */
 | 
			
		||||
XFT_REC_ACCESSOR_MAKER(scx_enter_xftfont, XftFont, scx_xftfont_record_type);
 | 
			
		||||
 | 
			
		||||
#define scx_extract_xftfont(x) \
 | 
			
		||||
	((XftFont *) s48_extract_integer(s48_checked_record_ref(x, 0, scx_xftfont_record_type)))
 | 
			
		||||
 | 
			
		||||
/* XftDraw */
 | 
			
		||||
XFT_REC_ACCESSOR_MAKER(scx_enter_xftdraw, XftDraw, scx_xftdraw_record_type);
 | 
			
		||||
 | 
			
		||||
#define scx_extract_xftdraw(x) \
 | 
			
		||||
	((XftDraw *) s48_extract_integer(s48_checked_record_ref(x, 0, scx_xftdraw_record_type)))
 | 
			
		||||
 | 
			
		||||
/* XftColor */
 | 
			
		||||
XFT_REC_ACCESSOR_MAKER(scx_enter_xftcolor, XftColor, scx_xftcolor_record_type);
 | 
			
		||||
 | 
			
		||||
#define scx_extract_xftcolor(x) \
 | 
			
		||||
	((XftColor *) s48_extract_integer(s48_checked_record_ref(x, 0, scx_xftcolor_record_type)))
 | 
			
		||||
 | 
			
		||||
/* XftObjectSet */
 | 
			
		||||
XFT_REC_ACCESSOR_MAKER(scx_enter_xftobjectset, XftObjectSet, scx_xftobjectset_record_type);
 | 
			
		||||
 | 
			
		||||
#define scx_extract_xftobjectset(x) \
 | 
			
		||||
	((XftObjectSet *) s48_extract_integer(s48_checked_record_ref(x, 0, scx_xftobjectset_record_type)))
 | 
			
		||||
 | 
			
		||||
/* XftFontSet */
 | 
			
		||||
XFT_REC_ACCESSOR_MAKER(scx_enter_xftfontset, XftFontSet, scx_xftfontset_record_type);
 | 
			
		||||
 | 
			
		||||
#define scx_extract_xftfontset(x) \
 | 
			
		||||
	((XftFontSet *) s48_extract_integer(s48_checked_record_ref(x, 0, scx_xftfontset_record_type)))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftPatternCreate(void) 
 | 
			
		||||
{
 | 
			
		||||
  return s48_enter_xftpattern(XftPatternCreate());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftPatternDestroy(s48_value sxp)
 | 
			
		||||
{
 | 
			
		||||
  XftPatternDestroy((XftPattern *) scx_extract_xftpattern(sxp));
 | 
			
		||||
  return S48_UNSPECIFIC;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftPatternDuplicate(s48_value sxp)
 | 
			
		||||
{
 | 
			
		||||
  XftPattern *p;
 | 
			
		||||
 | 
			
		||||
  p = XftPatternDuplicate(scx_extract_xftpattern(sxp));
 | 
			
		||||
  return scx_enter_xftpattern(p);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct xft_pattern_property* lookup_pattern_property_by_id(int id)
 | 
			
		||||
{
 | 
			
		||||
  struct xft_pattern_property *tbl;
 | 
			
		||||
 | 
			
		||||
  for (tbl = &xft_pattern_property_tbl[0]; 
 | 
			
		||||
       (tbl->scx_id != id) && (tbl->type != SCX_XFT_INVALID); 
 | 
			
		||||
       tbl++)
 | 
			
		||||
    ;
 | 
			
		||||
  return tbl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftPatternGet(s48_value sxp, s48_value sobj, s48_value sid)
 | 
			
		||||
{
 | 
			
		||||
  XftPattern *p;
 | 
			
		||||
  XftResult rc;
 | 
			
		||||
  XftValue v;
 | 
			
		||||
  int obj, i;
 | 
			
		||||
  s48_value rv = S48_UNSPECIFIC;
 | 
			
		||||
  s48_value rl = S48_UNSPECIFIC;
 | 
			
		||||
  struct xft_pattern_property *tbl;
 | 
			
		||||
 | 
			
		||||
  S48_DECLARE_GC_PROTECT(2);
 | 
			
		||||
  S48_GC_PROTECT_2(rl, rv);
 | 
			
		||||
  p = scx_extract_xftpattern(sxp);
 | 
			
		||||
  obj = s48_extract_integer(sobj);
 | 
			
		||||
  i = (int) s48_extract_integer(sid);
 | 
			
		||||
 | 
			
		||||
  tbl = lookup_pattern_property_by_id(obj);
 | 
			
		||||
  rc = XftPatternGet(p, tbl->name, i, &v);
 | 
			
		||||
 | 
			
		||||
  if ((rc != XftResultMatch) || (rc != XftResultNoMatch))
 | 
			
		||||
    {
 | 
			
		||||
      rl = s48_list_2(s48_enter_integer(rc), S48_UNSPECIFIC);
 | 
			
		||||
      S48_GC_UNPROTECT();
 | 
			
		||||
      return rl;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  switch (tbl->type) {
 | 
			
		||||
  case SCX_XFT_STRING:
 | 
			
		||||
    rv = s48_enter_string(v.u.s);
 | 
			
		||||
    break;
 | 
			
		||||
  case SCX_XFT_DOUBLE:
 | 
			
		||||
    rv = s48_enter_double(v.u.d);
 | 
			
		||||
    break;
 | 
			
		||||
  case SCX_XFT_INT:
 | 
			
		||||
    rv = s48_enter_integer(v.u.i);
 | 
			
		||||
    break;
 | 
			
		||||
  case SCX_XFT_BOOL:
 | 
			
		||||
    rv = v.u.b ? S48_TRUE : S48_FALSE;
 | 
			
		||||
    break;
 | 
			
		||||
  case SCX_XFT_UNIMPLEMENTED:
 | 
			
		||||
    rv = S48_UNSPECIFIC;
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  rl = s48_list_2(s48_enter_integer(rc), rv);
 | 
			
		||||
  S48_GC_UNPROTECT();
 | 
			
		||||
  XftValueDestroy(v);
 | 
			
		||||
  return rl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftPatternAdd(s48_value sxp, s48_value sobj, 
 | 
			
		||||
			    s48_value sval, s48_value sappend)
 | 
			
		||||
{
 | 
			
		||||
  XftPattern *p;
 | 
			
		||||
  XftValue v;
 | 
			
		||||
  int obj;
 | 
			
		||||
  Bool append, rv;
 | 
			
		||||
  struct xft_pattern_property *tbl;
 | 
			
		||||
 | 
			
		||||
  p = scx_extract_xftpattern(sxp);
 | 
			
		||||
  obj = s48_extract_integer(sobj);
 | 
			
		||||
  append = S48_TRUE_P(sappend);
 | 
			
		||||
  tbl = lookup_pattern_property_by_id(sobj);
 | 
			
		||||
 | 
			
		||||
  switch (tbl->type) {
 | 
			
		||||
  case SCX_XFT_STRING:
 | 
			
		||||
    v.type = XftTypeString;
 | 
			
		||||
    v.u.s = s48_extract_string(sval);
 | 
			
		||||
    break;
 | 
			
		||||
  case SCX_XFT_DOUBLE:
 | 
			
		||||
    v.type = XftTypeDouble;
 | 
			
		||||
    v.u.d = s48_extract_double(sval);
 | 
			
		||||
    break;
 | 
			
		||||
  case SCX_XFT_INT:
 | 
			
		||||
    v.type = XftTypeInteger;
 | 
			
		||||
    v.u.i = s48_extract_integer(sval);
 | 
			
		||||
    break;
 | 
			
		||||
  case SCX_XFT_BOOL:
 | 
			
		||||
    v.type = XftTypeBool;
 | 
			
		||||
    v.u.b = S48_TRUE_P(sval) ? True : False;
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
  rv = XftPatternAdd(p, tbl->name, v, append);
 | 
			
		||||
 | 
			
		||||
  return rv ? S48_TRUE : S48_FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftFontMatch(s48_value sdpy, s48_value sscreen, s48_value sxp)
 | 
			
		||||
{
 | 
			
		||||
  XftPattern *p;
 | 
			
		||||
  XftResult r;
 | 
			
		||||
 | 
			
		||||
  p = XftFontMatch(scx_extract_display(sdpy),
 | 
			
		||||
		   s48_extract_integer(sscreen),
 | 
			
		||||
		   scx_extract_xftpattern(sxp),
 | 
			
		||||
		   &r);
 | 
			
		||||
 | 
			
		||||
  if (p == NULL)
 | 
			
		||||
  return s48_list_2(S48_FALSE, S48_UNSPECIFIC);
 | 
			
		||||
  else
 | 
			
		||||
  return s48_list_2(s48_enter_integer(r), scx_enter_xftpattern(p));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftFontOpenPattern(s48_value sdpy, s48_value sxp)
 | 
			
		||||
{
 | 
			
		||||
  return scx_enter_xftfont(XftFontOpenPattern(scx_extract_display(sdpy),
 | 
			
		||||
					      scx_extract_xftpattern(sxp)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftFontOpenName(s48_value sdpy, s48_value sscreen, s48_value sname)
 | 
			
		||||
{
 | 
			
		||||
  return scx_enter_xftfont(scx_extract_display(sdpy),
 | 
			
		||||
			   scx_extract_integer(sscreen),
 | 
			
		||||
			   s48_extract_string(sname));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftFontOpenXlfd(s48_value sdpy, s48_value sscreen, s48_value sxlfd)
 | 
			
		||||
{
 | 
			
		||||
  return scx_enter_xftfont(scx_extract_display(sdpy),
 | 
			
		||||
			   s48_extract_integer(sscreen),
 | 
			
		||||
			   s48_extract_string(sxlfd));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftFontClose(s48_value sdpy, s48_value sxf)
 | 
			
		||||
{
 | 
			
		||||
  XftFontClose(scx_extract_display(sdpy),
 | 
			
		||||
	       scx_extract_xftfont(sxf));
 | 
			
		||||
  return S48_UNSPECIFIC;
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
s48_value scx_XftDrawCreate(s48_value sdpy, s48_value sdrawable,
 | 
			
		||||
			    s48_value svisual, s48_value scolormap)
 | 
			
		||||
{
 | 
			
		||||
  XftDraw *d;
 | 
			
		||||
 | 
			
		||||
  d = XftDrawCreate(scx_extract_display(sdpy),
 | 
			
		||||
		    scx_extract_drawable(sdrawable),
 | 
			
		||||
		    scx_extract_visual(svisual),
 | 
			
		||||
		    scx_extract_colormap(scolormap));
 | 
			
		||||
 | 
			
		||||
  return scx_enter_xftdraw(d);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftDrawCreateBitmap(s48_value sdpy, s48_value sdrawable)
 | 
			
		||||
{
 | 
			
		||||
  XftDraw *d;
 | 
			
		||||
  
 | 
			
		||||
  d = XftDrawCreateBitmap(scx_extract_display(sdpy),
 | 
			
		||||
			  scx_extract_drawable(sdrawable));
 | 
			
		||||
 | 
			
		||||
  return scx_enter_xftdraw(d);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftDrawChange(s48_value sxd, s48_value sdrawable)
 | 
			
		||||
{
 | 
			
		||||
  XftDrawChange(scx_extract_xftdraw(sxd), 
 | 
			
		||||
		scx_extract_drawable(sdrawable));
 | 
			
		||||
  return S48_UNSPECIFIC;
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
s48_value scx_XftDrawDisplay(s48_value sxd)
 | 
			
		||||
{
 | 
			
		||||
  return scx_enter_display(XftDrawDisplay(scx_extract_xftdraw(sxd)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftDrawDrawable(s48_value sxd)
 | 
			
		||||
{
 | 
			
		||||
  return scx_enter_drawable(XftDrawDrawabale(scx_extract_xftdraw(sxd)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftDrawColormap(s48_value sxd)
 | 
			
		||||
{
 | 
			
		||||
  return scx_enter_colormap(XftDrawColormap(scx_extract_xftdraw(sxd)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftDrawVisual(s48_value sxd)
 | 
			
		||||
{
 | 
			
		||||
  return scx_enter_visual(XftDrawVisual(scx_extract_xftdraw(sxd)));
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
s48_value scx_XftDrawDestroy(s48_value sxd)
 | 
			
		||||
{
 | 
			
		||||
  XftDrawDestroy(scx_extract_xftdraw(sxd));
 | 
			
		||||
  return S48_UNSPECIFIC;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftTextExtents8(s48_value sdpy, s48_value sxf, s48_value sstr)
 | 
			
		||||
{
 | 
			
		||||
  XGlyphInfo extents;
 | 
			
		||||
 | 
			
		||||
  XftTextExtents8(scx_extract_display(sdpy),
 | 
			
		||||
		  scx_extract_xftfont(sxf),
 | 
			
		||||
		  (XftChar8 *) s48_extract_string(sstr),
 | 
			
		||||
		  S48_STRING_LENGTH(sstr),
 | 
			
		||||
		  &extents);
 | 
			
		||||
 | 
			
		||||
  return scx_enter_glyphinfo(extents);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftDrawString8(s48_value sxd, s48_value sxc,
 | 
			
		||||
			     s48_value sxf, s48_value sx,
 | 
			
		||||
			     s48_value sy, s48_value sstr)
 | 
			
		||||
{
 | 
			
		||||
  XftDrawString8(scx_extract_xftdraw(sxd), scx_extract_xftcolor(sxc),
 | 
			
		||||
		 scx_extract_xftfont(sxf), 
 | 
			
		||||
		 s48_extract_integer(sx), s48_extract_integer(sy), 
 | 
			
		||||
		 (XftChar8 *) s48_extract_string(sstr),
 | 
			
		||||
		 S48_STRING_LENGTH(sstr));
 | 
			
		||||
  return S48_UNSPECIFIC;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftDrawRect(s48_value sxd, s48_value sxc,
 | 
			
		||||
			  s48_value sx, s48_value sy,
 | 
			
		||||
			  s48_value sw, s48_value sh)
 | 
			
		||||
{
 | 
			
		||||
  XftDrawRect(scx_extract_xftdraw(sxd), scx_extract_xftcolor(sxc),
 | 
			
		||||
	      s48_extract_integer(sx), s48_extract_integer(sy),
 | 
			
		||||
	      s48_extract_integer(sw), s48_extract_integer(sh));
 | 
			
		||||
  return S48_UNSPECIFIC;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftDrawSetClip(s48_value sxd, s48_value sreg)
 | 
			
		||||
{
 | 
			
		||||
  return (XftDrawSetClip(scx_extract_draw(sxd), S48_EXTRACT_REGION(sreg))
 | 
			
		||||
	  ? S48_TRUE : S48_FALSE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftObjectSetCreate(void)
 | 
			
		||||
{
 | 
			
		||||
  return scx_enter_xftobjectset(XftObjectSetCreate());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftObjectSetAdd(s48_value sxo, s48_value sobj)
 | 
			
		||||
{
 | 
			
		||||
  struct xft_pattern_property *tbl;
 | 
			
		||||
  Bool b;
 | 
			
		||||
 | 
			
		||||
  tbl = lookup_pattern_property_by_id(s48_extract_integer(sobj));
 | 
			
		||||
  b = XftObjectSetAdd(scx_extract_xftobjectset(sxo), tbl->name);
 | 
			
		||||
  return b ? S48_TRUE : S48_FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
s48_value scx_XftListFontsPatternObjects(s48_value sdpy, s48_value sscreen,
 | 
			
		||||
					 s48_value sxp, s48_value sxo)
 | 
			
		||||
{
 | 
			
		||||
  XftFontSet *fs;
 | 
			
		||||
 | 
			
		||||
  fs = XftListFontsPatternObjects(scx_extract_display(sdpy),
 | 
			
		||||
				  s48_extract_integer(sscreen),
 | 
			
		||||
				  scx_extract_xftpatter(sxp),
 | 
			
		||||
				  scx_extract_objectset(sxo));
 | 
			
		||||
 | 
			
		||||
  return scx_enter_fontset(fs);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void scx_xft_init(void)
 | 
			
		||||
{
 | 
			
		||||
  XFT_GC_PROTECT_IMPORT_BINDING(scx_xftpattern_record_type, "xft-pattern");
 | 
			
		||||
  XFT_GC_PROTECT_IMPORT_BINDING(scx_xftfontset_record_type, "xft-font");
 | 
			
		||||
  XFT_GC_PROTECT_IMPORT_BINDING(scx_xftdraw_record_type, "xft-draw");
 | 
			
		||||
  XFT_GC_PROTECT_IMPORT_BINDING(scx_xftcolor_record_type, "xft-color");
 | 
			
		||||
  XFT_GC_PROTECT_IMPORT_BINDING(scx_xftobjectset_record_type, "xft-objectset");
 | 
			
		||||
  XFT_GC_PROTECT_IMPORT_BINDING(scx_xftfontset_record_type, "xft-fontset");
 | 
			
		||||
 | 
			
		||||
  GC_PROTECT_ENTER_INT(scx_XftResultMatch, XftResultMatch);
 | 
			
		||||
  GC_PROTECT_ENTER_INT(scx_XftResultNoMatch, XftResultNoMatch);
 | 
			
		||||
  GC_PROTECT_ENTER_INT(scx_XftResultTypeMismatch, XftResultTypeMismatch);
 | 
			
		||||
  GC_PROTECT_ENTER_INT(scx_XftResultNoId, XftResultNoId);
 | 
			
		||||
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftPatternCreate);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftPatternDestroy);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftPatternDuplicate);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftPatternGet);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftPatternAdd);
 | 
			
		||||
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftFontMatch);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftFontOpenPattern);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftFontOpenName);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftFontOpenXlfd);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftFontClose);
 | 
			
		||||
  
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftDrawCreate);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftDrawCreateBitmap);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftDrawChange);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftDrawDisplay);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftDrawDrawable);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftDrawColormap);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftDrawVisual);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftDrawDestroy);
 | 
			
		||||
  
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftTextExtents8);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftDrawString8);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftDrawRect);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftDrawSetClip);
 | 
			
		||||
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftObjectSetCreate);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftObjectSetAdd);
 | 
			
		||||
  S48_EXPORT_FUNCTION(scx_XftListFontsPatternObjects);  
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,144 @@
 | 
			
		|||
#include <X11/Xft/Xft.h>
 | 
			
		||||
#include <scheme48.h>
 | 
			
		||||
 | 
			
		||||
#ifndef XFT_VERSION
 | 
			
		||||
#define XFT_VERSION 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define SCX_XFT_FAMILY	    0	/* String */
 | 
			
		||||
#define SCX_XFT_STYLE	    1	/* String */
 | 
			
		||||
#define SCX_XFT_SLANT	    2	/* Int */
 | 
			
		||||
#define SCX_XFT_WEIGHT	    3	/* Int */
 | 
			
		||||
#define SCX_XFT_SIZE	    4	/* Double */
 | 
			
		||||
#define SCX_XFT_PIXEL_SIZE  5	/* Double */
 | 
			
		||||
#define SCX_XFT_ENCODING    6	/* String */
 | 
			
		||||
#define SCX_XFT_SPACING	    7	/* Int */
 | 
			
		||||
#define SCX_XFT_FOUNDRY	    8	/* String */
 | 
			
		||||
#define SCX_XFT_CORE	    9	/* Bool */
 | 
			
		||||
#define SCX_XFT_ANTIALIAS   10	/* Bool */
 | 
			
		||||
#define SCX_XFT_XLFD	    11	/* String */
 | 
			
		||||
#define SCX_XFT_FILE	    12	/* String */
 | 
			
		||||
#define SCX_XFT_INDEX	    13	/* Int */
 | 
			
		||||
#define SCX_XFT_RASTERIZER  14  /* String */
 | 
			
		||||
#define SCX_XFT_OUTLINE	    15	/* Bool */
 | 
			
		||||
#define SCX_XFT_SCALABLE    16	/* Bool */
 | 
			
		||||
#define SCX_XFT_RGBA	    17	/* Int */
 | 
			
		||||
#define SCX_XFT_SCALE	    18	/* double */
 | 
			
		||||
#define SCX_XFT_RENDER	    19	/* Bool */
 | 
			
		||||
#define SCX_XFT_MINSPACE    20	/* Bool use minimum line spacing */
 | 
			
		||||
#define SCX_XFT_DPI	    21 	/* double */
 | 
			
		||||
#define SCX_XFT_CHAR_WIDTH  22	/* Int */
 | 
			
		||||
#define SCX_XFT_CHAR_HEIGHT 23  /* Int */
 | 
			
		||||
 | 
			
		||||
enum xft_pattern_get_return_type {
 | 
			
		||||
  SCX_XFT_INVALID,
 | 
			
		||||
  SCX_XFT_UNIMPLEMENTED,
 | 
			
		||||
  SCX_XFT_STRING,
 | 
			
		||||
  SCX_XFT_DOUBLE,
 | 
			
		||||
  SCX_XFT_INT,
 | 
			
		||||
  SCX_XFT_BOOL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct xft_pattern_property {
 | 
			
		||||
  int scx_id;
 | 
			
		||||
  char *name;
 | 
			
		||||
  enum xft_pattern_get_return_type type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static struct xft_pattern_property xft_pattern_property_tbl [] = {
 | 
			
		||||
  {SCX_XFT_FAMILY,		XFT_FAMILY,		SCX_XFT_STRING},
 | 
			
		||||
  {SCX_XFT_STYLE,		XFT_STYLE,		SCX_XFT_STRING},
 | 
			
		||||
  {SCX_XFT_SLANT,		XFT_SLANT,		SCX_XFT_INT},
 | 
			
		||||
  {SCX_XFT_WEIGHT,		XFT_WEIGHT,		SCX_XFT_INT},
 | 
			
		||||
  {SCX_XFT_SIZE,		XFT_SIZE,		SCX_XFT_DOUBLE},
 | 
			
		||||
  {SCX_XFT_PIXEL_SIZE,		XFT_PIXEL_SIZE,		SCX_XFT_DOUBLE},
 | 
			
		||||
#if XFT_VERSION < 2
 | 
			
		||||
  {SCX_XFT_ENCODING,		XFT_ENCODING,		SCX_XFT_STRING},
 | 
			
		||||
#else
 | 
			
		||||
  {SCX_XFT_ENCODING,		XFT_ENCODING,		SCX_XFT_UNIMPLEMENTED},
 | 
			
		||||
#endif
 | 
			
		||||
  {SCX_XFT_SPACING,		XFT_SPACING,		SCX_XFT_INT},
 | 
			
		||||
  {SCX_XFT_FOUNDRY,		XFT_FOUNDRY,		SCX_XFT_STRING},
 | 
			
		||||
#if XFT_VERSION < 2
 | 
			
		||||
  {SCX_XFT_CORE,		XFT_CORE,		SCX_XFT_BOOL},
 | 
			
		||||
#else
 | 
			
		||||
  {SCX_XFT_CORE,		XFT_CORE,		SCX_XFT_UNIMPLEMENTED},
 | 
			
		||||
#endif
 | 
			
		||||
  {SCX_XFT_ANTIALIAS,		XFT_ANTIALIAS,		SCX_XFT_BOOL},
 | 
			
		||||
  {SCX_XFT_XLFD,		XFT_XLFD,		SCX_XFT_STRING},
 | 
			
		||||
  {SCX_XFT_FILE,		XFT_FILE,		SCX_XFT_STRING},
 | 
			
		||||
  {SCX_XFT_INDEX,		XFT_INDEX,		SCX_XFT_INT},
 | 
			
		||||
  {SCX_XFT_RASTERIZER,		XFT_RASTERIZER,		SCX_XFT_STRING},
 | 
			
		||||
  {SCX_XFT_OUTLINE,		XFT_OUTLINE,		SCX_XFT_STRING},
 | 
			
		||||
  {SCX_XFT_SCALABLE,		XFT_SCALABLE,		SCX_XFT_BOOL},
 | 
			
		||||
  {SCX_XFT_RGBA,		XFT_RGBA,		SCX_XFT_INT},
 | 
			
		||||
  {SCX_XFT_SCALE,		XFT_SCALE,		SCX_XFT_DOUBLE},
 | 
			
		||||
  {SCX_XFT_RENDER,		XFT_RENDER,		SCX_XFT_BOOL},
 | 
			
		||||
  {SCX_XFT_MINSPACE,		XFT_MINSPACE,		SCX_XFT_BOOL},
 | 
			
		||||
  {SCX_XFT_DPI,			XFT_DPI,		SCX_XFT_DOUBLE},
 | 
			
		||||
#if XFT_VERSION < 2
 | 
			
		||||
  {SCX_XFT_CHAR_WIDTH,		XFT_CHAR_WIDTH,		SCX_XFT_INT},
 | 
			
		||||
  {SCX_XFT_CHAR_HEIGHT,		XFT_CHAR_HEIGHT,	SCX_XFT_INT},
 | 
			
		||||
#else
 | 
			
		||||
  {SCX_XFT_CHAR_WIDTH,		XFT_CHAR_WIDTH,		SCX_XFT_UNIMPLEMENTED},
 | 
			
		||||
  {SCX_XFT_CHAR_HEIGHT,		XFT_CHAR_HEIGHT,	SCX_XFT_UNIMPLEMENTED},
 | 
			
		||||
#endif
 | 
			
		||||
  {NULL,			NULL,			SCX_XFT_INVALID}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* scheme record types */
 | 
			
		||||
static s48_value scx_xftpattern_record_type		= S48_UNSPECIFIC;
 | 
			
		||||
static s48_value scx_xftfont_record_type		= S48_UNSPECIFIC;
 | 
			
		||||
static s48_value scx_xftdraw_record_type		= S48_UNSPECIFIC;
 | 
			
		||||
static s48_value scx_xftcolor_record_type		= S48_UNSPECIFIC;
 | 
			
		||||
static s48_value scx_xftobjectset_record_type		= S48_UNSPECIFIC;
 | 
			
		||||
static s48_value scx_xftfontset_record_type		= S48_UNSPECIFIC;
 | 
			
		||||
 | 
			
		||||
#define XFT_GC_PROTECT_IMPORT_BINDING(CN, SN)		\
 | 
			
		||||
	S48_GC_PROTECT_GLOBAL(CN);			\
 | 
			
		||||
	CN = s48_get_imported_binding("SN");
 | 
			
		||||
 | 
			
		||||
/* C values exported to scheme */
 | 
			
		||||
static s48_value scx_XftResultMatch		= S48_UNSPECIFIC;
 | 
			
		||||
static s48_value scx_XftResultNoMatch		= S48_UNSPECIFIC;
 | 
			
		||||
static s48_value scx_XftResultTypeMismatch	= S48_UNSPECIFIC;
 | 
			
		||||
static s48_value scx_XftResultNoId		= S48_UNSPECIFIC;
 | 
			
		||||
 | 
			
		||||
#define XFT_REC_ACCESSOR_MAKER(FN, TN, RN) \
 | 
			
		||||
	s48_value FN(TN *p)				\
 | 
			
		||||
	{						\
 | 
			
		||||
	  s48_value xftrec = S48_UNSPECIFIC;		\
 | 
			
		||||
	  S48_DECLARE_GC_PROTECT(1);			\
 | 
			
		||||
							\
 | 
			
		||||
	  S48_GC_PROTECT_1(xftrec);			\
 | 
			
		||||
	  xftrec = s48_make_record(RN);			\
 | 
			
		||||
	  S48_RECORD_SET(xftrec, 0, s48_enter_integer((long) p)); \
 | 
			
		||||
	  S48_GC_UNPROTECT();				\
 | 
			
		||||
	  return xftrec;				\
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#define GC_PROTECT_ENTER_INT(schemeval, i) \
 | 
			
		||||
	S48_GC_PROTECT_GLOBAL(schemeval); \
 | 
			
		||||
	schemeval = s48_enter_integer(i);
 | 
			
		||||
 | 
			
		||||
/* function prototypes */
 | 
			
		||||
s48_value scx_enter_xftpattern(XftPattern *p);
 | 
			
		||||
s48_value scx_extract_xftpattern(s48_value s);
 | 
			
		||||
 | 
			
		||||
s48_value scx_enter_xftfont(XftFont *f);
 | 
			
		||||
s48_value scx_extract_xftfont(s48_value s);
 | 
			
		||||
 | 
			
		||||
s48_value scx_enter_xftdraw(XftDraw *d);
 | 
			
		||||
s48_value scx_extract_xftdraw(s48_value s);
 | 
			
		||||
 | 
			
		||||
s48_value scx_enter_xftcolor(XftColor *c);
 | 
			
		||||
s48_value scx_extract_xftcolor(s48_value s);
 | 
			
		||||
 | 
			
		||||
s48_value scx_enter_xftobjectset(XftObjectSet *os);
 | 
			
		||||
s48_value scx_extract_xftobjectset(s48_value s);
 | 
			
		||||
 | 
			
		||||
s48_value scx_enter_xftfontset(XftFontSet *fs);
 | 
			
		||||
s48_value scx_extract_xftfontset(s48_value s);
 | 
			
		||||
 | 
			
		||||
struct xft_pattern_property* lookup_pattern_property_by_id(int id);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue