瀏覽代碼

add glyph names

David Rose 24 年之前
父節點
當前提交
c73b890315
共有 1 個文件被更改,包括 19 次插入15 次删除
  1. 19 15
      panda/src/text/dynamicTextFont.cxx

+ 19 - 15
panda/src/text/dynamicTextFont.cxx

@@ -98,21 +98,10 @@ DynamicTextFont(const Filename &font_filename, int face_index) {
       }
       }
       set_name(name);
       set_name(name);
 
 
-      /*
-      if (!FT_IS_SCALABLE(_face)) {
-        text_cat.error()
-          << "Unable to read font " << get_name()
-          << ": non-scalable fonts not supported.\n";
-        // Although we could support these if we wanted to, just
-        // haven't bothered to write the few lines of glue code that
-        // would do it.
-
-        } else */ {
-        text_cat.info()
-          << "Loaded font " << get_name() << "\n";
-        _is_valid = true;
-        reset_scale();
-      }
+      text_cat.info()
+        << "Loaded font " << get_name() << "\n";
+      _is_valid = true;
+      reset_scale();
     }
     }
   }
   }
 }
 }
@@ -233,6 +222,9 @@ clear() {
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 void DynamicTextFont::
 void DynamicTextFont::
 write(ostream &out, int indent_level) const {
 write(ostream &out, int indent_level) const {
+  static const int max_glyph_name = 1024;
+  char glyph_name[max_glyph_name];
+
   indent(out, indent_level)
   indent(out, indent_level)
     << "DynamicTextFont " << get_name() << ", " 
     << "DynamicTextFont " << get_name() << ", " 
     << get_num_pages() << " pages, "
     << get_num_pages() << " pages, "
@@ -243,6 +235,18 @@ write(ostream &out, int indent_level) const {
     DynamicTextGlyph *glyph = (*ci).second;
     DynamicTextGlyph *glyph = (*ci).second;
     indent(out, indent_level + 2) 
     indent(out, indent_level + 2) 
       << glyph_index;
       << glyph_index;
+
+    if (FT_HAS_GLYPH_NAMES(_face)) {
+      int error = FT_Get_Glyph_Name(_face, glyph_index, 
+                                    glyph_name, max_glyph_name);
+
+      // Some fonts, notably MS Mincho, claim to have glyph names but
+      // only report ".notdef" as the name of each glyph.  Thanks.
+      if (!error && strcmp(glyph_name, ".notdef") != 0) {
+        out << " (" << glyph_name << ")";
+      }
+    }
+
     out << ", count = " << glyph->_geom_count << "\n";
     out << ", count = " << glyph->_geom_count << "\n";
   }
   }
 }
 }