From 359f7342ad88383a8f4cd193781cff4c43c68700 Mon Sep 17 00:00:00 2001 From: eknauel Date: Sun, 26 Oct 2003 16:42:31 +0000 Subject: [PATCH] + functions for accessing values inside a XftFont --- c/libs/xft.c | 35 +++++++++++++++++++++++++++-- scheme/libs/libs-interfaces.scm | 1 + scheme/libs/xft.scm | 40 +++++++++++++++++++++++---------- 3 files changed, 62 insertions(+), 14 deletions(-) diff --git a/c/libs/xft.c b/c/libs/xft.c index f5046f7..3da4659 100644 --- a/c/libs/xft.c +++ b/c/libs/xft.c @@ -2,8 +2,6 @@ XFT_REC_ACCESSOR_MAKER(scx_enter_xftpattern, XftPattern, scx_xftpattern_record_type); -XFT_REC_ACCESSOR_MAKER(scx_enter_xftfont, XftFont, scx_xftfont_record_type); - XFT_REC_ACCESSOR_MAKER(scx_enter_xftdraw, XftDraw, scx_xftdraw_record_type); XFT_REC_ACCESSOR_MAKER(scx_enter_xftcolor, XftColor, scx_xftcolor_record_type); @@ -12,6 +10,19 @@ XFT_REC_ACCESSOR_MAKER(scx_enter_xftobjectset, XftObjectSet, scx_xftobjectset_re XFT_REC_ACCESSOR_MAKER(scx_enter_xftfontset, XftFontSet, scx_xftfontset_record_type); +s48_value scx_enter_xftfont(XftFont *xf) +{ + s48_value rec = S48_FALSE; + S48_DECLARE_GC_PROTECT(1); + + S48_GC_PROTECT_1(rec); + rec = s48_make_record(scx_xftfont_record_type); + S48_RECORD_SET(rec, 0, s48_enter_integer((long) xf)); + S48_RECORD_SET(rec, 1, scx_enter_xftpattern(xf->pattern)); + S48_GC_UNPROTECT(); + return rec; +} + s48_value scx_XftPatternCreate(void) { return scx_enter_xftpattern(XftPatternCreate()); @@ -467,6 +478,20 @@ s48_value scx_XftDefaultHasRender(s48_value sdpy) return XftDefaultHasRender(scx_extract_display(sdpy)) ? S48_TRUE : S48_FALSE; } +#define XFTFONT_GET(FUN, FN) \ + s48_value FUN(s48_value sxf) { \ + return s48_enter_integer(scx_extract_xftfont(sxf)->FN); \ + } + +XFTFONT_GET(scx_xftfont_ascent_get, ascent); +XFTFONT_GET(scx_xftfont_descent_get, descent); +XFTFONT_GET(scx_xftfont_height_get, height); +XFTFONT_GET(scx_xftfont_max_advance_width_get, max_advance_width); + +s48_value scx_xftfont_pattern_get_internal(s48_value sxf) +{ + return scx_enter_xftpattern(scx_extract_xftfont(sxf)->pattern); +} void scx_xft_init(void) { @@ -617,4 +642,10 @@ void scx_xft_init(void) S48_EXPORT_FUNCTION(scx_XftFontSetPrint); S48_EXPORT_FUNCTION(scx_XftDefaultHasRender); + + S48_EXPORT_FUNCTION(scx_xftfont_ascent_get); + S48_EXPORT_FUNCTION(scx_xftfont_descent_get); + S48_EXPORT_FUNCTION(scx_xftfont_height_get); + S48_EXPORT_FUNCTION(scx_xftfont_max_advance_width_get); + S48_EXPORT_FUNCTION(scx_xftfont_pattern_get_internal); } diff --git a/scheme/libs/libs-interfaces.scm b/scheme/libs/libs-interfaces.scm index b95155b..66310c5 100644 --- a/scheme/libs/libs-interfaces.scm +++ b/scheme/libs/libs-interfaces.scm @@ -7,6 +7,7 @@ (export xft-pattern? xft-font? + xft-font-pattern xft-color? xft-objectset? xft-fontset? diff --git a/scheme/libs/xft.scm b/scheme/libs/xft.scm index 5a02c9a..a6b34ac 100644 --- a/scheme/libs/xft.scm +++ b/scheme/libs/xft.scm @@ -7,9 +7,10 @@ (define-exported-binding "xft-pattern" :xft-pattern) (define-record-type xft-font :xft-font - (make-xft-font x-pointer) + (make-xft-font c-pointer pattern) xft-font? - (x-pointer xft-font-x-pointer)) + (c-pointer xft-font-c-pointer) + (pattern xft-font-pattern)) (define-exported-binding "xft-font" :xft-font) @@ -230,22 +231,22 @@ (add-finalizer! xft-pattern scx-xft-pattern-destroy) (values result xft-pattern)))) -(define (scx-xft-font-open-pattern display xft-pattern) - (let ((xft-font (scx-xft-font-open-pattern-internal display xft-pattern))) - (add-finalizer! xft-font scx-xft-font-close) - xft-font)) +(define (scx-xft-font-open-pattern display pattern) + (let ((font (scx-xft-font-open-pattern-internal display pattern))) + (add-finalizer! font scx-xft-font-close) + font)) (define (scx-xft-font-open-name display screen name) (let* ((screen-number (screen:number screen)) - (xft-font (scx-xft-font-open-name-internal display screen-number name))) - (add-finalizer! xft-font scx-xft-font-close) - xft-font)) + (font (scx-xft-font-open-name-internal display screen-number name))) + (add-finalizer! font scx-xft-font-close) + font)) (define (scx-xft-font-open-xlfd display screen name) (let* ((screen-numer (screen:number screen)) - (xft-font (scx-xft-font-open-xlfd-internal display screen-numer name))) - (add-finalizer! xft-font scx-xft-font-close) - xft-font)) + (font (scx-xft-font-open-xlfd-internal display screen-numer name))) + (add-finalizer! font scx-xft-font-close) + font)) (define (scx-xft-draw-create display drawable visual colormap) (let ((xft-draw (scx-xft-draw-create-internal display drawable visual colormap))) @@ -517,3 +518,18 @@ (display) "scx_XftDefaultHasRender") +(import-lambda-definition scx-xft-xft-font-ascent + (xft-font) + "scx_xftfont_ascent_get") + +(import-lambda-definition scx-xft-xft-font-descent + (xft-font) + "scx_xftfont_descent_get") + +(import-lambda-definition scx-xft-xft-font-height + (xft-font) + "scx_xftfont_height_get") + +(import-lambda-definition scx-xft-xft-font-max-advance-width + (xft-font) + "scx_xftfont_max_advance_width_get")