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;