]> git.lyx.org Git - lyx.git/blobdiff - src/FontLoader.C
Fix deleting of paragraphs after undo (fix #236).
[lyx.git] / src / FontLoader.C
index bdc47763ff3ecce4e156e5027ea78c61dfb8a6fc..b75d165e914871833756749a7fcd2330ac5b846c 100644 (file)
@@ -60,7 +60,7 @@ void FontLoader::update()
 void FontLoader::reset()
 {
        // Clear font infos, font structs and font metrics
-       for (int i1 = 0; i1 < 4; ++i1)
+       for (int i1 = 0; i1 < LyXFont::NUM_FAMILIES; ++i1)
                for (int i2 = 0; i2 < 2; ++i2)
                        for (int i3 = 0; i3 < 4; ++i3) {
                                fontinfo[i1][i2][i3] = 0;
@@ -75,7 +75,7 @@ void FontLoader::reset()
 void FontLoader::unload() 
 {
        // Unload all fonts
-       for (int i1 = 0; i1 < 4; ++i1)
+       for (int i1 = 0; i1 < LyXFont::NUM_FAMILIES; ++i1)
                for (int i2 = 0; i2 < 2; ++i2)
                        for (int i3 = 0; i3 < 4; ++i3) {
                                if (fontinfo[i1][i2][i3]) {
@@ -103,11 +103,53 @@ void FontLoader::getFontinfo(LyXFont::FONT_FAMILY family,
        if (fontinfo[family][series][shape] != 0)
                return;
 
-       // Special code for the symbol family
-       if (family == LyXFont::SYMBOL_FAMILY){
-               fontinfo[family][series][shape] = new FontInfo("-*-symbol-*");
-               return;
+       // Special fonts
+       switch (family) 
+       {
+               case LyXFont::SYMBOL_FAMILY:
+                       fontinfo[family][series][shape] =
+                               new FontInfo("-*-symbol-*-*-*-*-*-*-*-*-*-*-adobe-fontspecific");
+                       return;
+
+               case LyXFont::CMR_FAMILY:
+                       fontinfo[family][series][shape] =
+                               new FontInfo("-*-cmr10-medium-*-*-*-*-*-*-*-*-*-*-*");
+                       return;
+
+               case LyXFont::CMSY_FAMILY:
+                       fontinfo[family][series][shape] =
+                               new FontInfo("-*-cmsy10-*-*-*-*-*-*-*-*-*-*-*-*");
+                       return;
+
+               case LyXFont::CMM_FAMILY:
+                       fontinfo[family][series][shape] =
+                               new FontInfo("-*-cmmi10-medium-*-*-*-*-*-*-*-*-*-*-*");
+                       return;
+
+               case LyXFont::CMEX_FAMILY:
+                       fontinfo[family][series][shape] =
+                               new FontInfo("-*-cmex10-*-*-*-*-*-*-*-*-*-*-*-*");
+                       return;
+
+               case LyXFont::MSA_FAMILY:
+                       fontinfo[family][series][shape] =
+                               new FontInfo("-*-msam10-*-*-*-*-*-*-*-*-*-*-*-*");
+                       return;
+
+               case LyXFont::MSB_FAMILY:
+                       fontinfo[family][series][shape] = 
+                               new FontInfo("-*-msbm10-*-*-*-*-*-*-*-*-*-*-*-*");
+                       return;
+
+               case LyXFont::EUFRAK_FAMILY:
+                       fontinfo[family][series][shape] = 
+                               new FontInfo("-*-eufm10-medium-*-*-*-*-*-*-*-*-*-*-*");
+                       return;
+
+               default:
+                       break;
        }
 
        // Normal font. Let's search for an existing name that matches.
        string ffamily;
@@ -237,8 +279,8 @@ XFontStruct * FontLoader::doLoad(LyXFont::FONT_FAMILY family,
        }
 
        getFontinfo(family, series, shape);
-       int fsize = int( (lyxrc.font_sizes[size] * lyxrc.dpi * 
-                         (lyxrc.zoom/100.0) ) / 72.27 + 0.5 );
+       int fsize = int((lyxrc.font_sizes[size] * lyxrc.dpi * 
+                         (lyxrc.zoom/100.0)) / 72.27 + 0.5);
 
        string font = fontinfo[family][series][shape]->getFontname(fsize);
 
@@ -282,3 +324,15 @@ XFontStruct * FontLoader::doLoad(LyXFont::FONT_FAMILY family,
        fontstruct[family][series][shape][size] = fs;
        return fs;
 }
+
+
+bool FontLoader::available(LyXFont const & f)
+{
+       if (!lyxrc.use_gui)
+               return false;
+
+       if (!fontinfo[f.family()][f.series()][f.realShape()])
+               getFontinfo(f.family(), f.series(), f.realShape());
+       return fontinfo[f.family()][f.series()][f.realShape()]
+               ->getFontname(f.size()).size();
+}