freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2-demos] master f72993a 3/4: [ftinspect] Add methods to get num


From: Werner LEMBERG
Subject: [freetype2-demos] master f72993a 3/4: [ftinspect] Add methods to get number of faces and instances.
Date: Thu, 05 May 2016 08:29:35 +0000

branch: master
commit f72993a7a3f6561f14f26e5c7afc37538041e4ea
Author: Werner Lemberg <address@hidden>
Commit: Werner Lemberg <address@hidden>

    [ftinspect] Add methods to get number of faces and instances.
    
    * src/ftinspect.cpp (Engine::numFaces, Engine::numInstances): New
    methods.
    
    * src/ftinspect.h (Engine): Updated.
---
 ChangeLog         |    9 +++++++
 src/ftinspect.cpp |   72 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/ftinspect.h   |    2 ++
 3 files changed, 83 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index 647345a..efb8238 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2016-05-05  Werner Lemberg  <address@hidden>
 
+       [ftinspect] Add methods to get number of faces and instances.
+
+       * src/ftinspect.cpp (Engine::numFaces, Engine::numInstances): New
+       methods.
+
+       * src/ftinspect.h (Engine): Updated.
+
+2016-05-05  Werner Lemberg  <address@hidden>
+
        [ftinspect] Minor.
 
        * src/ftinspect.cpp (faceRequester): Use reference.
diff --git a/src/ftinspect.cpp b/src/ftinspect.cpp
index 22ffb82..ec2b157 100644
--- a/src/ftinspect.cpp
+++ b/src/ftinspect.cpp
@@ -78,6 +78,78 @@ Engine::~Engine()
 }
 
 
+int
+Engine::numFaces(int fontIndex)
+{
+  if (fontIndex >= gui->fonts.size())
+    return -1;
+
+  Font& font = gui->fonts[fontIndex];
+
+  // value already available?
+  if (!font.numInstancesList.isEmpty())
+    return font.numInstancesList.size();
+
+  FT_Error error;
+  FT_Face face;
+
+  error = FT_New_Face(library,
+                      qPrintable(font.filePathname),
+                      -1,
+                      &face);
+  if (error)
+  {
+    // XXX error handling
+    return -1;
+  }
+
+  int result = face->num_faces;
+
+  FT_Done_Face(face);
+
+  return result;
+}
+
+
+int
+Engine::numInstances(int fontIndex,
+                     int faceIndex)
+{
+  if (fontIndex >= gui->fonts.size())
+    return -1;
+
+  Font& font = gui->fonts[fontIndex];
+
+  if (faceIndex >= font.numInstancesList.size())
+    return -1;
+
+  // value already available?
+  if (font.numInstancesList[faceIndex] >= 0)
+    return font.numInstancesList[faceIndex];
+
+  FT_Error error;
+  FT_Face face;
+
+  error = FT_New_Face(library,
+                      qPrintable(font.filePathname),
+                      -(faceIndex + 1),
+                      &face);
+  if (error)
+  {
+    // XXX error handling
+    return -1;
+  }
+
+  // we return `n' instances plus one,
+  // the latter representing a face without an instance selected
+  int result = (face->style_flags >> 16) + 1;
+
+  FT_Done_Face(face);
+
+  return result;
+}
+
+
 void
 Engine::update()
 {
diff --git a/src/ftinspect.h b/src/ftinspect.h
index 216b0bb..eacc196 100644
--- a/src/ftinspect.h
+++ b/src/ftinspect.h
@@ -66,6 +66,8 @@ public:
   ~Engine();
 
   void update();
+  int numFaces(int);
+  int numInstances(int, int);
 
   friend class MainGUI;
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]