ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvtfont.C
(Generate patch)

Comparing rxvt-unicode/src/rxvtfont.C (file contents):
Revision 1.96 by root, Sat Feb 18 15:24:39 2006 UTC vs.
Revision 1.103 by root, Sun Aug 27 10:10:25 2006 UTC

1/*--------------------------------*-C-*---------------------------------* 1/*----------------------------------------------------------------------*
2 * File: rxvtfont.C 2 * File: rxvtfont.C
3 *----------------------------------------------------------------------* 3 *----------------------------------------------------------------------*
4 * Copyright (c) 2003-2006 Marc Lehmann <pcg@goof.com> 4 * Copyright (c) 2003-2006 Marc Lehmann <pcg@goof.com>
5 * - original version. 5 * - original version.
6 * 6 *
270 p.slant = rxvt_fontprop::roman; 270 p.slant = rxvt_fontprop::roman;
271 271
272 return p; 272 return p;
273 } 273 }
274 274
275 bool load (const rxvt_fontprop &prop) 275 bool load (const rxvt_fontprop &prop, bool force_prop)
276 { 276 {
277 width = 1; height = 1; 277 width = 1; height = 1;
278 ascent = 1; descent = 0; 278 ascent = 1; descent = 0;
279 279
280 set_name (strdup ("built-in support font")); 280 set_name (strdup ("built-in support font"));
471 471
472 void clear (); 472 void clear ();
473 473
474 rxvt_fontprop properties (); 474 rxvt_fontprop properties ();
475 475
476 bool load (const rxvt_fontprop &prop); 476 bool load (const rxvt_fontprop &prop, bool force_prop);
477 477
478 bool has_char (unicode_t unicode, const rxvt_fontprop *prop, bool &careful) const; 478 bool has_char (unicode_t unicode, const rxvt_fontprop *prop, bool &careful) const;
479 479
480 void draw (rxvt_drawable &d, int x, int y, 480 void draw (rxvt_drawable &d, int x, int y,
481 const text_t *text, int len, 481 const text_t *text, int len,
627 return false; 627 return false;
628 } 628 }
629} 629}
630 630
631bool 631bool
632rxvt_font_x11::load (const rxvt_fontprop &prop) 632rxvt_font_x11::load (const rxvt_fontprop &prop, bool force_prop)
633{ 633{
634 dTermDisplay; 634 dTermDisplay;
635 635
636 clear (); 636 clear ();
637 637
638 char field_str[64]; // enough for 128 bits 638 char field_str[64]; // enough for 128 bits
639 639
640 // first morph the font if required 640 // first morph the font if required
641 if (prop.weight != rxvt_fontprop::unset 641 if (force_prop)
642 || prop.slant != rxvt_fontprop::unset)
643 { 642 {
644 char fname[1024]; 643 char fname[1024];
645 644
646 if (name[0] != '-') 645 if (name[0] != '-')
647 { 646 {
1039 1038
1040 void clear (); 1039 void clear ();
1041 1040
1042 rxvt_fontprop properties (); 1041 rxvt_fontprop properties ();
1043 1042
1044 bool load (const rxvt_fontprop &prop); 1043 bool load (const rxvt_fontprop &prop, bool force_prop);
1045 1044
1046 void draw (rxvt_drawable &d, int x, int y, 1045 void draw (rxvt_drawable &d, int x, int y,
1047 const text_t *text, int len, 1046 const text_t *text, int len,
1048 int fg, int bg); 1047 int fg, int bg);
1049 1048
1082 1081
1083 return p; 1082 return p;
1084} 1083}
1085 1084
1086bool 1085bool
1087rxvt_font_xft::load (const rxvt_fontprop &prop) 1086rxvt_font_xft::load (const rxvt_fontprop &prop, bool force_prop)
1088{ 1087{
1089 dTermDisplay; 1088 dTermDisplay;
1090 1089
1091 clear (); 1090 clear ();
1092 1091
1101 && (FcPatternGet (p, FC_PIXEL_SIZE, 0, &v) != FcResultMatch 1100 && (FcPatternGet (p, FC_PIXEL_SIZE, 0, &v) != FcResultMatch
1102 && FcPatternGet (p, FC_SIZE, 0, &v) != FcResultMatch)) 1101 && FcPatternGet (p, FC_SIZE, 0, &v) != FcResultMatch))
1103 FcPatternAddInteger (p, FC_PIXEL_SIZE, prop.height); 1102 FcPatternAddInteger (p, FC_PIXEL_SIZE, prop.height);
1104 1103
1105 if (prop.weight != rxvt_fontprop::unset 1104 if (prop.weight != rxvt_fontprop::unset
1106 && FcPatternGet (p, FC_WEIGHT, 0, &v) != FcResultMatch) 1105 && (force_prop || FcPatternGet (p, FC_WEIGHT, 0, &v) != FcResultMatch))
1107 FcPatternAddInteger (p, FC_WEIGHT, prop.weight); 1106 FcPatternAddInteger (p, FC_WEIGHT, prop.weight);
1108 1107
1109 if (prop.slant != rxvt_fontprop::unset 1108 if (prop.slant != rxvt_fontprop::unset
1110 && FcPatternGet (p, FC_SLANT, 0, &v) != FcResultMatch) 1109 && (force_prop || FcPatternGet (p, FC_SLANT, 0, &v) != FcResultMatch))
1111 FcPatternAddInteger (p, FC_SLANT, prop.slant); 1110 FcPatternAddInteger (p, FC_SLANT, prop.slant);
1112 1111
1113#if 0 // clipping unfortunately destroys our precious double-width-characters 1112#if 0 // clipping unfortunately destroys our precious double-width-characters
1114 // clip width, we can't do better, or can we? 1113 // clip width, we can't do better, or can we?
1115 if (FcPatternGet (p, FC_CHAR_WIDTH, 0, &v) != FcResultMatch) 1114 if (FcPatternGet (p, FC_CHAR_WIDTH, 0, &v) != FcResultMatch)
1274 dTermGC; 1273 dTermGC;
1275 1274
1276 int w = term->fwidth * len; 1275 int w = term->fwidth * len;
1277 int h = term->fheight; 1276 int h = term->fheight;
1278 1277
1278 bool buffered = bg >= 0 // we don't use a transparent bg
1279#ifndef FORCE_UNBUFFERED_XFT
1280# if defined(XPM_BACKGROUND) || defined(TRANSPARENT)
1279 bool buffered = !term->am_transparent // we aren't transparent 1281 || !term->am_transparent // we aren't transparent
1280 || term->am_pixmap_trans // we have a pixmap 1282 || term->am_pixmap_trans // we have a pixmap
1281 || bg >= 0; // we don't use a transparent bg 1283# endif
1284#endif
1285 ;
1282 1286
1283 // cut trailing spaces 1287 // cut trailing spaces
1284 while (len && text [len - 1] == ' ') 1288 while (len && text [len - 1] == ' ')
1285 len--; 1289 len--;
1286 1290
1317 { 1321 {
1318 if (ep != enc) 1322 if (ep != enc)
1319 { 1323 {
1320 rxvt_drawable &d2 = d.screen->scratch_drawable (w, h); 1324 rxvt_drawable &d2 = d.screen->scratch_drawable (w, h);
1321 1325
1326 if (0)
1327 ;
1328#ifdef TRANSPARENT
1322 if (bg < 0 && term->am_pixmap_trans) 1329 else if (bg < 0 && term->am_pixmap_trans)
1323 XCopyArea (disp, term->pixmap, d2, gc, x, y, w, h, 0, 0); 1330 XCopyArea (disp, term->pixmap, d2, gc,
1331 x + term->window_vt_x, y + term->window_vt_y,
1332 w, h, 0, 0);
1333#endif
1334#ifdef XPM_BACKGROUND
1324 else if (bg < 0 && term->bgPixmap.pixmap) 1335 else if (bg < 0 && term->bgPixmap.pixmap)
1325 { 1336 {
1326 XGCValues gcv; 1337 XGCValues gcv;
1327 1338
1328 gcv.fill_style = FillTiled; 1339 gcv.fill_style = FillTiled;
1336 1347
1337 XFillRectangle (disp, d2, gc2, 0, 0, w, h); 1348 XFillRectangle (disp, d2, gc2, 0, 0, w, h);
1338 1349
1339 XFreeGC (disp, gc2); 1350 XFreeGC (disp, gc2);
1340 } 1351 }
1352#endif
1341 else 1353 else
1342 XftDrawRect (d2, &term->pix_colors[bg].c, 0, 0, w, h); 1354 XftDrawRect (d2, &term->pix_colors[bg].c, 0, 0, w, h);
1343 1355
1344 XftDrawGlyphSpec (d2, &term->pix_colors[fg].c, f, enc, ep - enc); 1356 XftDrawGlyphSpec (d2, &term->pix_colors[fg].c, f, enc, ep - enc);
1345 XCopyArea (disp, d2, d, gc, 0, 0, w, h, x, y); 1357 XCopyArea (disp, d2, d, gc, 0, 0, w, h, x, y);
1372void 1384void
1373rxvt_fontset::clear () 1385rxvt_fontset::clear ()
1374{ 1386{
1375 prop.width = prop.height = prop.ascent = prop.weight = prop.slant 1387 prop.width = prop.height = prop.ascent = prop.weight = prop.slant
1376 = rxvt_fontprop::unset; 1388 = rxvt_fontprop::unset;
1389 force_prop = false;
1377 1390
1378 for (rxvt_font **i = fonts.begin (); i != fonts.end (); i++) 1391 for (rxvt_font **i = fonts.begin (); i != fonts.end (); i++)
1379 FONT_UNREF (*i); 1392 FONT_UNREF (*i);
1380 1393
1381 for (pagemap **p = fmap.begin (); p != fmap.end (); p++) 1394 for (pagemap **p = fmap.begin (); p != fmap.end (); p++)
1493 if (fonts[i]->loaded) 1506 if (fonts[i]->loaded)
1494 return true; 1507 return true;
1495 1508
1496 fonts[i]->loaded = true; 1509 fonts[i]->loaded = true;
1497 1510
1498 if (!fonts[i]->load (prop)) 1511 if (!fonts[i]->load (prop, force_prop))
1499 { 1512 {
1500 fonts[i]->cs = CS_UNKNOWN; 1513 fonts[i]->cs = CS_UNKNOWN;
1501 return false; 1514 return false;
1502 } 1515 }
1503 1516

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines