freetype-commit
[Top][All Lists]
Advanced

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

[freetype2-demos] master d5ce379 13/41: [ftinspect] Support tricky fonts


From: Werner Lemberg
Subject: [freetype2-demos] master d5ce379 13/41: [ftinspect] Support tricky fonts.
Date: Mon, 3 Oct 2022 11:27:01 -0400 (EDT)

branch: master
commit d5ce3790c301915619759d79e876b273fd3498f2
Author: Charlie Jiang <w@chariri.moe>
Commit: Werner Lemberg <wl@gnu.org>

    [ftinspect] Support tricky fonts.
    
    For tricky fonts, we disable auto-hinter and limit the TT interpreter
    version.
    
    * src/ftinspect/engine/engine.cpp, src/ftinspect/engine/engine.hpp:
      Add `currentFontTricky` function and turn off hinting forcibly when the
      user turns it off in the GUI for tricky fonts.
    
    * src/ftinspect/panels/settingpanel.cpp: As described.
---
 src/ftinspect/engine/engine.cpp       | 13 +++++++++++++
 src/ftinspect/engine/engine.hpp       |  1 +
 src/ftinspect/panels/settingpanel.cpp | 17 +++++++++++++----
 3 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/src/ftinspect/engine/engine.cpp b/src/ftinspect/engine/engine.cpp
index 349f930..55114a5 100644
--- a/src/ftinspect/engine/engine.cpp
+++ b/src/ftinspect/engine/engine.cpp
@@ -252,6 +252,15 @@ Engine::namedInstanceName(int fontIndex, long faceIndex, 
int index)
 }
 
 
+bool
+Engine::currentFontTricky()
+{
+  if (!ftFallbackFace_)
+    return false;
+  return FT_IS_TRICKY(ftFallbackFace_);
+}
+
+
 int
 Engine::loadFont(int fontIndex,
                  long faceIndex,
@@ -602,6 +611,10 @@ Engine::update()
   else
   {
     loadFlags_ |= FT_LOAD_NO_HINTING;
+    // When the user disables hinting for tricky fonts,
+    // we assume that they *really* want to disable it.
+    if (currentFontTricky())
+      loadFlags_ |= FT_LOAD_NO_AUTOHINT;
 
     if (!antiAliasingEnabled_)
       loadFlags_ |= FT_LOAD_MONOCHROME;
diff --git a/src/ftinspect/engine/engine.hpp b/src/ftinspect/engine/engine.hpp
index efcc847..70a8193 100644
--- a/src/ftinspect/engine/engine.hpp
+++ b/src/ftinspect/engine/engine.hpp
@@ -115,6 +115,7 @@ public:
                              long faceIndex);
   QString namedInstanceName(int fontIndex, long faceIndex, int index);
 
+  bool currentFontTricky();
   bool currentFontBitmapOnly();
   bool currentFontHasEmbeddedBitmap();
   std::vector<int> currentFontFixedSizes();
diff --git a/src/ftinspect/panels/settingpanel.cpp 
b/src/ftinspect/panels/settingpanel.cpp
index ecf0f14..9ec8a3a 100644
--- a/src/ftinspect/panels/settingpanel.cpp
+++ b/src/ftinspect/panels/settingpanel.cpp
@@ -69,7 +69,14 @@ SettingPanel::checkHinting()
 {
   if (hintingCheckBox_->isChecked())
   {
-    // TODO: tricky: disable auto-hinting
+    engine_->reloadFont();
+    auto tricky = engine_->currentFontTricky();
+    {
+      QSignalBlocker blocker(autoHintingCheckBox_);
+      autoHintingCheckBox_->setEnabled(!tricky);
+      if (tricky)
+        autoHintingCheckBox_->setChecked(false);
+    }
     checkAutoHinting(); // this will emit repaint
   }
   else
@@ -273,10 +280,12 @@ SettingPanel::onFontChanged()
   }
   else if (engine_->currentFontType() == Engine::FontType_TrueType)
   {
-    // TODO: tricky
+    auto tricky = engine_->currentFontTricky();
     hintingModeComboBoxModel_->setCurrentEngineType(
-      HintingModeComboBoxModel::HintingEngineType_TrueType, false);
-    hintingModeComboBox_->setCurrentIndex(currentTTInterpreterVersion_);
+      HintingModeComboBoxModel::HintingEngineType_TrueType, tricky);
+    hintingModeComboBox_->setCurrentIndex(
+      tricky ? HintingModeComboBoxModel::HintingMode::HintingMode_TrueType_v35
+             : currentTTInterpreterVersion_);
   }
   else
   {



reply via email to

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