>
> Some comments.
>
> * I think it would be best if all the information is present in a
>   single window.  If necessary, there could be tabs to split the
>   contents into smaller chunks.
>

I have attached the new patch as per above suggestion, please
have a look and suggest further changes :)



> * For the charmap info it would be nice if the meaning of the numbers
>   could be shown also, e.g. PID 3 = MS Windows, EID 1 = Unicode BMP,
>   etc., etc.
>

I corrected it for PID. Left others fields, as I am not sure to print what
( means
internal keyword used in FreeType or something else). I tried to replicate
the
`ftdump.c' as that produces result in numerical form. Should I send a
patch for `ftdump.c' regarding the same?

Regards,
Ankit
diff --git a/src/ftinspect/engine/engine.cpp b/src/ftinspect/engine/engine.cpp
index 6856beb..43ce423 100644
--- a/src/ftinspect/engine/engine.cpp
+++ b/src/ftinspect/engine/engine.cpp
@@ -401,12 +401,20 @@ Engine::loadFont(int fontIndex,
     ftSize = NULL;
     curFamilyName = QString();
     curStyleName = QString();
+    postscriptName = QString();
+    driverName = QString();
+    issfnt = QString();
+
   }
   else
   {
     curFamilyName = QString(ftSize->face->family_name);
     curStyleName = QString(ftSize->face->style_name);
 
+    postscriptName = FT_Get_Postscript_Name(ftSize->face);
+    if( postscriptName == NULL )
+        postscriptName = "UNAVAILABLE";
+
     FT_Module module = &ftSize->face->driver->root;
     const char* moduleName = module->clazz->module_name;
 
@@ -415,6 +423,9 @@ Engine::loadFont(int fontIndex,
       fontType = FontType_CFF;
     else if (!strcmp(moduleName, "truetype"))
       fontType = FontType_TrueType;
+
+    driverName = moduleName;
+    issfnt = FT_IS_SFNT( ftSize->face ) ? QString("yes") : QString("no");
   }
 
   return numGlyphs;
@@ -459,6 +470,29 @@ Engine::currentStyleName()
   return curStyleName;
 }
 
+const QString&
+Engine::currentPostscriptName()
+{
+    return postscriptName;
+}
+
+const QString&
+Engine::DriverName()
+{
+    return driverName;
+}
+
+const QString&
+Engine::issfntwrapped()
+{
+   return issfnt;
+}
+
+FT_Size
+Engine::getftSize()
+{
+    return ftSize;
+}
 
 QString
 Engine::glyphName(int index)
diff --git a/src/ftinspect/engine/engine.hpp b/src/ftinspect/engine/engine.hpp
index 175e8db..efe8f0e 100644
--- a/src/ftinspect/engine/engine.hpp
+++ b/src/ftinspect/engine/engine.hpp
@@ -46,6 +46,12 @@ public:
 
   const QString& currentFamilyName();
   const QString& currentStyleName();
+  const QString& currentPostscriptName();
+  const QString& DriverName();
+  const QString& issfntwrapped();
+  FT_Size getftSize();
+  FT_Size ftSize;
+
   QString glyphName(int glyphIndex);
   long numberOfFaces(int fontIndex);
   int numberOfNamedInstances(int fontIndex,
@@ -81,6 +87,9 @@ private:
 
   QString curFamilyName;
   QString curStyleName;
+  QString postscriptName;
+  QString driverName;
+  QString issfnt;
 
   FT_Library library;
   FTC_Manager cacheManager;
@@ -88,7 +97,6 @@ private:
   FTC_SBitCache sbitsCache;
 
   FTC_ScalerRec scaler;
-  FT_Size ftSize;
 
   int cffHintingEngineDefault;
   int cffHintingEngineOther;
diff --git a/src/ftinspect/ftdump.cpp b/src/ftinspect/ftdump.cpp
index 6a13d76..9b1b317 100644
--- a/src/ftinspect/ftdump.cpp
+++ b/src/ftinspect/ftdump.cpp
@@ -1,14 +1,194 @@
-#include "ftdump.h"
-#include "ui_ftdump.h"
+#include "ftdump.hpp"
 
-ftdump::ftdump(QWidget *parent) :
-    QDialog(parent),
-    ui(new Ui::ftdump)
+#include <QApplication>
+#include <QDir>
+#include <QFileDialog>
+#include <QMessageBox>
+#include <QSettings>
+#include <QtGui>
+#include <QWidget>
+#include <QHBoxLayout>
+
+#include FT_FREETYPE_H
+#include FT_DRIVER_H
+#include FT_TRUETYPE_TABLES_H
+#include FT_TRUETYPE_IDS_H
+
+ftdump::ftdump()
 {
-    ui->setupUi(this);
+
 }
 
+QString
+ftdump::platform_id( int  id )
+ {
+   switch ( id )
+   {
+   case TT_PLATFORM_APPLE_UNICODE:
+     return "Apple (Unicode)";
+   case TT_PLATFORM_MACINTOSH:
+     return "Macintosh";
+   case TT_PLATFORM_ISO:
+     return "ISO (deprecated)";
+   case TT_PLATFORM_MICROSOFT:
+     return "Microsoft";
+   case TT_PLATFORM_CUSTOM:
+     return "custom";
+   case TT_PLATFORM_ADOBE:
+     return "Adobe";
+
+   default:
+     return "UNKNOWN";
+   }
+ }
+
 ftdump::~ftdump()
 {
-    delete ui;
+   //
+}
+
+void ftdump::createLayout(Engine* engine)
+{
+    familyNameLabel = new QLabel(tr("<b>Family </b>: %1")
+                                 .arg(engine->currentFamilyName()));
+    styleLabel = new QLabel(tr("<b>Style </b>: %1")
+                            .arg(engine->currentStyleName()));
+    postScriptLabel = new QLabel(tr("<b>postscript</b>: %1")
+                                 .arg(engine->currentPostscriptName()));
+
+    infoLeftLayout = new QHBoxLayout;
+
+    fontNameTabLayout = new QVBoxLayout;
+    fontNameTabLayout->addWidget(familyNameLabel);
+    fontNameTabLayout->addWidget(styleLabel);
+    fontNameTabLayout->addWidget(postScriptLabel);
+
+    fontNameTabWidget = new QWidget;
+    fontNameTabWidget->setLayout(fontNameTabLayout);
+
+
+    FT_Face face = engine->ftSize->face;
+    const char* fontType;
+    if(FT_IS_SCALABLE( face ) != 0 )
+    {
+        if(FT_HAS_MULTIPLE_MASTERS( face ) != 0 )
+        {
+            fontType = "scalable, multiple masters";
+        }
+        else
+        {
+            fontType = "scalable";
+        }
+    }
+    else if(FT_HAS_FIXED_SIZES( face ) != 0)
+    {
+        fontType = "fixed size";
+    }
+    const char* direction = "";
+    if(FT_HAS_HORIZONTAL( face ))
+    {
+        if(FT_HAS_VERTICAL( face ) )
+            direction = " horizontal vertical";
+        else
+            direction = "horizontal";
+    }
+    else
+    {
+        if( FT_HAS_VERTICAL( face ) )
+            direction = " vertical";
+    }
+
+    ftDriverLabel = new QLabel(tr("<b> FreeType driver </b>: %1")
+                          .arg(engine->DriverName()));
+    issfntwrappedLabel = new QLabel(tr("<b> sfnt wrapped</b> : %1")
+                               .arg(FT_IS_SFNT( face ) ? QString("yes") : QString("no")));
+    fontTypeLabel = new QLabel(tr("<b>Type </b>: %1")
+                          .arg(fontType));
+    directionLabel = new QLabel(tr("<b>Direction </b>: %1")
+                                .arg(direction));
+    fixedWidthLabel = new QLabel(tr("<b>Fixed width </b>: %1")
+                                 .arg(FT_IS_FIXED_WIDTH(face) ? QString("yes") : QString("no")));
+    glyphNameLabel = new QLabel(tr("<b>Glyph names </b>: %1")
+                                .arg(FT_HAS_GLYPH_NAMES( face ) ? QString("yes") : QString("no")));
+
+    fontTypeInfoTabLayout = new QVBoxLayout;
+    fontTypeInfoTabLayout->addWidget(ftDriverLabel);
+    fontTypeInfoTabLayout->addWidget(issfntwrappedLabel);
+    fontTypeInfoTabLayout->addWidget(fontTypeLabel);
+    fontTypeInfoTabLayout->addWidget(directionLabel);
+    fontTypeInfoTabLayout->addWidget(glyphNameLabel);
+
+    if( FT_IS_SCALABLE( face ))
+    {
+        EMsizeLabel = new QLabel(tr("<b>EM size </b>: %1")
+                                    .arg(face->units_per_EM));
+        BBoxLabel = new QLabel(tr("<b>Global BBox </b>: (%2, %3):(%4, %5)")
+                               .arg(face->bbox.xMin)
+                               .arg(face->bbox.yMin)
+                               .arg(face->bbox.xMax)
+                               .arg(face->bbox.yMax));
+        ascentLabel = new QLabel(tr("<b>Ascent </b>: %1")
+                                   .arg(face->ascender));
+        descentLabel = new QLabel(tr("<b>Descent </b>: %1")
+                                   .arg(face->descender));
+        heightLabel = new QLabel(tr("<b>Height </b>: %1")
+                                   .arg(face->height));
+
+        fontTypeInfoTabLayout->addWidget(EMsizeLabel);
+        fontTypeInfoTabLayout->addWidget(BBoxLabel);
+        fontTypeInfoTabLayout->addWidget(ascentLabel);
+        fontTypeInfoTabLayout->addWidget(descentLabel);
+        fontTypeInfoTabLayout->addWidget(heightLabel);
+    }
+
+    fontTypeTabWidget = new QWidget;
+    fontTypeTabWidget->setLayout(fontTypeInfoTabLayout);
+
+    charmapsInfoTabLayout = new QVBoxLayout;
+
+    for( int i=0; i < face->num_charmaps; i++)
+    {
+    formatLabel = new QLabel(tr("<b>Format </b>: %1")
+                             .arg(FT_Get_CMap_Format( face->charmaps[i] )));
+    platformLabel = new QLabel(tr("<b> Platform </b>: %1")
+                               .arg(platform_id(face->charmaps[i]->platform_id)));
+    encodingLabel = new QLabel(tr("<b>Encoding </b>: %1")
+                               .arg(face->charmaps[i]->platform_id));
+    languageLabel = new QLabel(tr("<b>Language </b>: %1")
+                               .arg(FT_Get_CMap_Language_ID(face->charmaps[i])));
+
+    charmapsInfoTabLayout->addWidget(formatLabel);
+    charmapsInfoTabLayout->addWidget(platformLabel);
+    charmapsInfoTabLayout->addWidget(encodingLabel);
+    charmapsInfoTabLayout->addWidget(languageLabel);
+    }
+
+    charmapsInfoTabWidget = new QWidget;
+    charmapsInfoTabWidget->setLayout(charmapsInfoTabLayout);
+
+    tabWidget = new QTabWidget;
+    tabWidget->addTab(fontNameTabWidget, tr("Font Name"));
+    tabWidget->addTab(fontTypeTabWidget, tr("Font Type"));
+    tabWidget->addTab(charmapsInfoTabWidget, tr("Charmaps Info"));
+
+    leftLayout = new QVBoxLayout;
+    leftLayout->addLayout(infoLeftLayout);
+    leftLayout->addWidget(tabWidget);
+
+    leftWidget = new QWidget;
+    leftWidget->setLayout(leftLayout);
+
+    QSizePolicy leftWidgetPolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+    leftWidgetPolicy.setHorizontalStretch(0);
+    leftWidgetPolicy.setVerticalPolicy(leftWidget->sizePolicy().verticalPolicy());
+    leftWidgetPolicy.setHeightForWidth(leftWidget->sizePolicy().hasHeightForWidth());
+
+    leftWidget->setSizePolicy(leftWidgetPolicy);
+    leftWidget->setMinimumSize(500, 200);
+
+    ftinspectLayout = new QHBoxLayout;
+    ftinspectLayout->addWidget(leftWidget);
+
+    this->setLayout(ftinspectLayout);
+    setWindowTitle("FTdump");
 }
diff --git a/src/ftinspect/ftdump.hpp b/src/ftinspect/ftdump.hpp
index 34d9b0f..bf700a2 100644
--- a/src/ftinspect/ftdump.hpp
+++ b/src/ftinspect/ftdump.hpp
@@ -1,22 +1,110 @@
 #ifndef FTDUMP_H
 #define FTDUMP_H
 
+#include <QAction>
+#include <QCheckBox>
+#include <QCloseEvent>
+#include <QComboBox>
+#include <QDoubleSpinBox>
 #include <QDialog>
+#include <QFileSystemWatcher>
+#include <QGridLayout>
+#include <QHash>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QList>
+#include <QMainWindow>
+#include <QMap>
+#include <QMenu>
+#include <QMenuBar>
+#include <QPen>
+#include <QPushButton>
+#include <QScrollBar>
+#include <QSignalMapper>
+#include <QSlider>
+#include <QSpinBox>
+#include <QStatusBar>
+#include <QTabWidget>
+#include <QTimer>
+#include <QVariant>
+#include <QVBoxLayout>
 
-namespace Ui {
-class ftdump;
-}
+////////////////////////////
+/// \brief The ftdump class
+///
+
+#include "engine/engine.hpp"
+
+#include <ft2build.h>
+#include FT_LCD_FILTER_H
 
 class ftdump : public QDialog
 {
-    Q_OBJECT
+  Q_OBJECT
 
 public:
-    explicit ftdump(QWidget *parent = nullptr);
-    ~ftdump();
+  ftdump();
+  ~ftdump();
+  void createLayout(Engine* engine);
+  QString platform_id(int);
 
 private:
-    Ui::ftdump *ui;
+
+  QLabel *familyNameLabel;
+  QLabel *fontTypeLabel;
+  QLabel *issfntwrappedLabel;
+  QLabel *styleLabel;
+  QLabel *postScriptLabel;
+  QLabel *ftDriverLabel;
+  QLabel *directionLabel;
+  QLabel *fixedWidthLabel;
+  QLabel *glyphNameLabel;
+  QLabel *EMsizeLabel;
+  QLabel *BBoxLabel;
+  QLabel *ascentLabel;
+  QLabel *descentLabel;
+  QLabel *heightLabel;
+  QLabel *platformLabel;
+  QLabel *formatLabel;
+  QLabel *encodingLabel;
+  QLabel *languageLabel;
+
+  QTabWidget *tabWidget;
+
+  QVBoxLayout *fontNameInfoTabLayout;
+  QVBoxLayout *fontTypeInfoTabLayout;
+  QVBoxLayout *charmapsInfoTabLayout;
+
+  QWidget *fontNameInfoTabWidget;
+
+  //////////////////////////////////////////////
+
+  QHBoxLayout *ftinspectLayout;
+  QHBoxLayout *hintingModeLayout;
+  QHBoxLayout *horizontalHintingLayout;
+  QHBoxLayout *infoLeftLayout;
+  QHBoxLayout *navigationLayout;
+
+
+
+
+
+
+
+
+
+  QVBoxLayout *fontNameTabLayout;
+  QVBoxLayout *leftLayout;
+  QVBoxLayout *rightLayout;
+
+
+  QWidget *charmapsInfoTabWidget;
+  QWidget *ftinspectWidget;
+  QWidget *fontNameTabWidget;
+  QWidget *leftWidget;
+  QWidget *rightWidget;
+  QWidget *fontTypeTabWidget;
+
 };
 
 #endif // FTDUMP_H
diff --git a/src/ftinspect/ftinspect.pro b/src/ftinspect/ftinspect.pro
index 6538438..f2aec35 100644
--- a/src/ftinspect/ftinspect.pro
+++ b/src/ftinspect/ftinspect.pro
@@ -34,7 +34,8 @@ SOURCES += \
   widgets/qpushbuttonx.cpp \
   widgets/qspinboxx.cpp \
   ftinspect.cpp \
-  maingui.cpp
+  maingui.cpp \
+    ftdump.cpp
 
 HEADERS += \
   engine/engine.hpp \
@@ -47,7 +48,8 @@ HEADERS += \
   widgets/qgraphicsviewx.hpp \
   widgets/qpushbuttonx.hpp \
   widgets/qspinboxx.hpp \
-  maingui.hpp
+  maingui.hpp \
+    ftdump.hpp
 
 TARGET = ftinspect
 
@@ -55,3 +57,5 @@ QT += widgets
 
 
 # end of ftinpect.pro
+
+FORMS +=
diff --git a/src/ftinspect/maingui.cpp b/src/ftinspect/maingui.cpp
index 7fd185f..fef4ae0 100644
--- a/src/ftinspect/maingui.cpp
+++ b/src/ftinspect/maingui.cpp
@@ -5,6 +5,7 @@
 
 #include "maingui.hpp"
 #include "rendering/grid.hpp"
+#include "ftdump.hpp"
 
 #include <QApplication>
 #include <QDir>
@@ -13,6 +14,7 @@
 #include <QSettings>
 
 #include FT_DRIVER_H
+#include FT_TRUETYPE_TABLES_H
 
 
 MainGUI::MainGUI()
@@ -59,6 +61,23 @@ MainGUI::closeEvent(QCloseEvent* event)
   event->accept();
 }
 
+void
+MainGUI::showFontInfo()
+{
+
+    if(engine->ftSize != NULL)
+    {
+        fontInfo = new ftdump();
+        fontInfo->createLayout(engine);
+        fontInfo->show();
+    }
+    else
+        QMessageBox::warning(
+                    this,
+                    tr("Font File not loaded"),
+                    tr("To use this function first load a <br>"
+                      "valid font file."));
+}
 
 void
 MainGUI::about()
@@ -1130,10 +1149,13 @@ MainGUI::createActions()
   closeFontAct->setShortcuts(QKeySequence::Close);
   connect(closeFontAct, SIGNAL(triggered()), SLOT(closeFont()));
 
-  exitAct = new QAction(tr("E&xit"), this);
+  exitAct = new QAction(tr("&Exit"), this);
   exitAct->setShortcuts(QKeySequence::Quit);
   connect(exitAct, SIGNAL(triggered()), SLOT(close()));
 
+  showFontInfoAct = new QAction(tr("&ftdump"));
+  connect(showFontInfoAct, SIGNAL(triggered()), SLOT(showFontInfo()));
+
   aboutAct = new QAction(tr("&About"), this);
   connect(aboutAct, SIGNAL(triggered()), SLOT(about()));
 
@@ -1150,6 +1172,9 @@ MainGUI::createMenus()
   menuFile->addAction(closeFontAct);
   menuFile->addAction(exitAct);
 
+  menuInfo = menuBar()->addMenu(tr("&Font Info"));
+  menuInfo->addAction(showFontInfoAct);
+
   menuHelp = menuBar()->addMenu(tr("&Help"));
   menuHelp->addAction(aboutAct);
   menuHelp->addAction(aboutQtAct);
diff --git a/src/ftinspect/maingui.hpp b/src/ftinspect/maingui.hpp
index 8ad6c30..24e5d10 100644
--- a/src/ftinspect/maingui.hpp
+++ b/src/ftinspect/maingui.hpp
@@ -6,6 +6,7 @@
 #pragma once
 
 #include "engine/engine.hpp"
+#include "ftdump.hpp"
 #include "rendering/glyphbitmap.hpp"
 #include "rendering/glyphoutline.hpp"
 #include "rendering/glyphpointnumbers.hpp"
@@ -64,12 +65,17 @@ public:
                                 FT_Pointer,
                                 FT_Face*);
 
+  Engine* engine;
 protected:
   void closeEvent(QCloseEvent*);
 
 private slots:
   void about();
   void aboutQt();
+//  void showCharmapsInfo();
+//  void showFontType();
+//  void showFontName();
+  void showFontInfo();
   void adjustGlyphIndex(int);
   void checkAntiAliasing();
   void checkAutoHinting();
@@ -94,7 +100,7 @@ private slots:
   void zoom();
 
 private:
-  Engine* engine;
+  ftdump* fontInfo;
 
   QStringList fontList;
   int currentFontIndex;
@@ -119,6 +125,9 @@ private:
 
   QAction *aboutAct;
   QAction *aboutQtAct;
+//  QAction *showCharmapsInfoAct;
+  QAction *showFontInfoAct;
+//  QAction *showFontNameAct;
   QAction *closeFontAct;
   QAction *exitAct;
   QAction *loadFontsAct;
@@ -186,6 +195,7 @@ private:
   QLocale *locale;
 
   QMenu *menuFile;
+  QMenu *menuInfo;
   QMenu *menuHelp;
 
   QPen axisPen;
_______________________________________________
Freetype-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/freetype-devel

Reply via email to