Mercurial > emacs
comparison src/xftfont.c @ 106558:3d091f151696
xftfont.c: Parse symbolic names for constants also.
(QClcdfilter): New variable.
(xftfont_open): Parse constant names for RGBA, HINT_STYLE and LCDFILTER.
(syms_of_xftfont): Initialize QClcdfilter.
author | Jan Djärv <jan.h.d@swipnet.se> |
---|---|
date | Sun, 13 Dec 2009 13:16:17 +0000 |
parents | 500878bee91d |
children | 574dd89b7759 |
comparison
equal
deleted
inserted
replaced
106557:e60ede6c3be3 | 106558:3d091f151696 |
---|---|
37 #include "ftfont.h" | 37 #include "ftfont.h" |
38 | 38 |
39 /* Xft font driver. */ | 39 /* Xft font driver. */ |
40 | 40 |
41 static Lisp_Object Qxft; | 41 static Lisp_Object Qxft; |
42 static Lisp_Object QChinting , QCautohint, QChintstyle, QCrgba, QCembolden; | 42 static Lisp_Object QChinting, QCautohint, QChintstyle, QCrgba, QCembolden, |
43 QClcdfilter; | |
43 | 44 |
44 /* The actual structure for Xft font that can be casted to struct | 45 /* The actual structure for Xft font that can be casted to struct |
45 font. */ | 46 font. */ |
46 | 47 |
47 struct xftfont_info | 48 struct xftfont_info |
250 struct font *font; | 251 struct font *font; |
251 double size = 0; | 252 double size = 0; |
252 XftFont *xftfont = NULL; | 253 XftFont *xftfont = NULL; |
253 int spacing; | 254 int spacing; |
254 char name[256]; | 255 char name[256]; |
255 int len, i; | 256 int len, i, ival; |
256 XGlyphInfo extents; | 257 XGlyphInfo extents; |
257 FT_Face ft_face; | 258 FT_Face ft_face; |
258 FcMatrix *matrix; | 259 FcMatrix *matrix; |
259 | 260 |
260 val = assq_no_quit (QCfont_entity, AREF (entity, FONT_EXTRA_INDEX)); | 261 val = assq_no_quit (QCfont_entity, AREF (entity, FONT_EXTRA_INDEX)); |
309 FcPatternAddBool (pat, FC_AUTOHINT, NILP (val) ? FcFalse : FcTrue); | 310 FcPatternAddBool (pat, FC_AUTOHINT, NILP (val) ? FcFalse : FcTrue); |
310 else if (EQ (key, QChintstyle)) | 311 else if (EQ (key, QChintstyle)) |
311 { | 312 { |
312 if (INTEGERP (val)) | 313 if (INTEGERP (val)) |
313 FcPatternAddInteger (pat, FC_HINT_STYLE, XINT (val)); | 314 FcPatternAddInteger (pat, FC_HINT_STYLE, XINT (val)); |
315 else if (SYMBOLP (val) | |
316 && FcNameConstant (SDATA (SYMBOL_NAME (val)), &ival)) | |
317 FcPatternAddInteger (pat, FC_HINT_STYLE, ival); | |
314 } | 318 } |
315 else if (EQ (key, QCrgba)) | 319 else if (EQ (key, QCrgba)) |
316 { | 320 { |
317 if (INTEGERP (val)) | 321 if (INTEGERP (val)) |
318 FcPatternAddInteger (pat, FC_RGBA, XINT (val)); | 322 FcPatternAddInteger (pat, FC_RGBA, XINT (val)); |
323 else if (SYMBOLP (val) | |
324 && FcNameConstant (SDATA (SYMBOL_NAME (val)), &ival)) | |
325 FcPatternAddInteger (pat, FC_RGBA, ival); | |
326 } | |
327 else if (EQ (key, QClcdfilter)) | |
328 { | |
329 if (INTEGERP (val)) | |
330 FcPatternAddInteger (pat, FC_LCD_FILTER, ival = XINT (val)); | |
331 else if (SYMBOLP (val) | |
332 && FcNameConstant (SDATA (SYMBOL_NAME (val)), &ival)) | |
333 FcPatternAddInteger (pat, FC_LCD_FILTER, ival); | |
319 } | 334 } |
320 #ifdef FC_EMBOLDEN | 335 #ifdef FC_EMBOLDEN |
321 else if (EQ (key, QCembolden)) | 336 else if (EQ (key, QCembolden)) |
322 FcPatternAddBool (pat, FC_EMBOLDEN, NILP (val) ? FcFalse : FcTrue); | 337 FcPatternAddBool (pat, FC_EMBOLDEN, NILP (val) ? FcFalse : FcTrue); |
323 #endif | 338 #endif |
341 | 356 |
342 /* Substitute in values from X resources and XftDefaultSet. */ | 357 /* Substitute in values from X resources and XftDefaultSet. */ |
343 XftDefaultSubstitute (display, FRAME_X_SCREEN_NUMBER (f), pat); | 358 XftDefaultSubstitute (display, FRAME_X_SCREEN_NUMBER (f), pat); |
344 match = XftFontMatch (display, FRAME_X_SCREEN_NUMBER (f), pat, &result); | 359 match = XftFontMatch (display, FRAME_X_SCREEN_NUMBER (f), pat, &result); |
345 xftfont_fix_match (pat, match); | 360 xftfont_fix_match (pat, match); |
346 | 361 |
347 FcPatternDestroy (pat); | 362 FcPatternDestroy (pat); |
348 xftfont = XftFontOpenPattern (display, match); | 363 xftfont = XftFontOpenPattern (display, match); |
349 if (!xftfont) | 364 if (!xftfont) |
350 { | 365 { |
351 UNBLOCK_INPUT; | 366 UNBLOCK_INPUT; |
704 DEFSYM (QChinting, ":hinting"); | 719 DEFSYM (QChinting, ":hinting"); |
705 DEFSYM (QCautohint, ":autohint"); | 720 DEFSYM (QCautohint, ":autohint"); |
706 DEFSYM (QChintstyle, ":hintstyle"); | 721 DEFSYM (QChintstyle, ":hintstyle"); |
707 DEFSYM (QCrgba, ":rgba"); | 722 DEFSYM (QCrgba, ":rgba"); |
708 DEFSYM (QCembolden, ":embolden"); | 723 DEFSYM (QCembolden, ":embolden"); |
724 DEFSYM (QClcdfilter, ":lcdfilter"); | |
709 | 725 |
710 xftfont_driver = ftfont_driver; | 726 xftfont_driver = ftfont_driver; |
711 xftfont_driver.type = Qxft; | 727 xftfont_driver.type = Qxft; |
712 xftfont_driver.get_cache = xfont_driver.get_cache; | 728 xftfont_driver.get_cache = xfont_driver.get_cache; |
713 xftfont_driver.list = xftfont_list; | 729 xftfont_driver.list = xftfont_list; |