freetype-commit
[Top][All Lists]
Advanced

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

[freetype2-demos] master 2186a04: [ftinspect] Fix the glyph index select


From: Werner Lemberg
Subject: [freetype2-demos] master 2186a04: [ftinspect] Fix the glyph index selector layout when the window resizes.
Date: Wed, 26 Jul 2023 08:45:31 -0400 (EDT)

branch: master
commit 2186a044f0b232a3c9fbe6f021b52bbb7ced0892
Author: Charlie Jiang <w@chariri.moe>
Commit: Charlie Jiang <w@chariri.moe>

    [ftinspect] Fix the glyph index selector layout when the window resizes.
    
    Fixes #26. When the window resizes, the invisible tabs don't get notified.
    Therefore, when the active tab changes, we need to trigger a manual
    relayouting of invisible tabs.
    
    * src/ftinspect/widgets/glyphindexselector.hpp,
      src/ftinspect/widgets/glyphindexselector.cpp:
      Extract public method `relayoutNavigation` from `resizeEvent`.
    
    * src/ftinspect/panels/abstracttab.hpp: Add `relayout` virtual method.
    
    * src/ftinspect/maingui.cpp: Call `AbstractTab::relayout` on the new tab
      when the active tab changes.
    
    * src/ftinspect/panels/singular.cpp, src/ftinspect/panels/singular.hpp,
      src/ftinspect/panels/continuous.cpp, src/ftinspect/panels/continuous.hpp:
      Implement `relayout` method and call `relayoutNavigation` of the glyph
      index selector in `relayout`.
---
 src/ftinspect/maingui.cpp                    |  2 ++
 src/ftinspect/panels/abstracttab.hpp         |  1 +
 src/ftinspect/panels/continuous.cpp          |  7 +++++++
 src/ftinspect/panels/continuous.hpp          |  1 +
 src/ftinspect/panels/singular.cpp            |  7 +++++++
 src/ftinspect/panels/singular.hpp            |  1 +
 src/ftinspect/widgets/glyphindexselector.cpp | 24 +++++++++++++++---------
 src/ftinspect/widgets/glyphindexselector.hpp |  2 ++
 8 files changed, 36 insertions(+), 9 deletions(-)

diff --git a/src/ftinspect/maingui.cpp b/src/ftinspect/maingui.cpp
index 9fc21e1..4a15e41 100644
--- a/src/ftinspect/maingui.cpp
+++ b/src/ftinspect/maingui.cpp
@@ -198,6 +198,8 @@ MainGUI::switchTab()
   else
     leftWidget_->setVisible(!isComparator);
 
+  tabs_[tabWidget_->currentIndex()]->relayout();
+
   reloadCurrentTabFont();
 
   if (current == continuousTab_
diff --git a/src/ftinspect/panels/abstracttab.hpp 
b/src/ftinspect/panels/abstracttab.hpp
index 96c618c..da89ca9 100644
--- a/src/ftinspect/panels/abstracttab.hpp
+++ b/src/ftinspect/panels/abstracttab.hpp
@@ -16,6 +16,7 @@ public:
 
   virtual void repaintGlyph() = 0;
   virtual void reloadFont() = 0;
+  virtual void relayout() {}
 };
 
 
diff --git a/src/ftinspect/panels/continuous.cpp 
b/src/ftinspect/panels/continuous.cpp
index 5746ec1..0ec2b7b 100644
--- a/src/ftinspect/panels/continuous.cpp
+++ b/src/ftinspect/panels/continuous.cpp
@@ -65,6 +65,13 @@ ContinuousTab::reloadFont()
 }
 
 
+void
+ContinuousTab::relayout()
+{
+  indexSelector_->relayoutNavigation();
+}
+
+
 void
 ContinuousTab::applySettings()
 {
diff --git a/src/ftinspect/panels/continuous.hpp 
b/src/ftinspect/panels/continuous.hpp
index 09f0e39..5e4dcd7 100644
--- a/src/ftinspect/panels/continuous.hpp
+++ b/src/ftinspect/panels/continuous.hpp
@@ -46,6 +46,7 @@ public:
 
   void repaintGlyph() override;
   void reloadFont() override;
+  void relayout() override;
   void highlightGlyph(int index);
   void applySettings();
 
diff --git a/src/ftinspect/panels/singular.cpp 
b/src/ftinspect/panels/singular.cpp
index ce7d04f..ec27c20 100644
--- a/src/ftinspect/panels/singular.cpp
+++ b/src/ftinspect/panels/singular.cpp
@@ -459,6 +459,13 @@ SingularTab::reloadFont()
 }
 
 
+void
+SingularTab::relayout()
+{
+  indexSelector_->relayoutNavigation();
+}
+
+
 void
 SingularTab::setCurrentGlyphAndSize(int glyphIndex,
                                     double sizePoint)
diff --git a/src/ftinspect/panels/singular.hpp 
b/src/ftinspect/panels/singular.hpp
index 40ecaa4..41af5b6 100644
--- a/src/ftinspect/panels/singular.hpp
+++ b/src/ftinspect/panels/singular.hpp
@@ -46,6 +46,7 @@ public:
 
   void repaintGlyph() override;
   void reloadFont() override;
+  void relayout() override;
   // The size remains unchanged if `sizePoint` <= 0.
   void setCurrentGlyphAndSize(int glyphIndex,
                               double sizePoint);
diff --git a/src/ftinspect/widgets/glyphindexselector.cpp 
b/src/ftinspect/widgets/glyphindexselector.cpp
index 6ec2015..b6e5c1f 100644
--- a/src/ftinspect/widgets/glyphindexselector.cpp
+++ b/src/ftinspect/widgets/glyphindexselector.cpp
@@ -20,6 +20,20 @@ GlyphIndexSelector::GlyphIndexSelector(QWidget* parent)
 }
 
 
+void
+GlyphIndexSelector::relayoutNavigation()
+{
+  auto minimumWidth = minimumSizeHint().width();
+  if (toEndButton_->isVisible())
+  {
+    if (width() < minimumWidth)
+      navigationWidget_->setVisible(false);
+  }
+  else if (navigationWidget_->minimumSizeHint().width() + minimumWidth <= 
width())
+    navigationWidget_->setVisible(true);
+}
+
+
 void
 GlyphIndexSelector::setMinMax(int min,
                               int max)
@@ -87,15 +101,7 @@ void
 GlyphIndexSelector::resizeEvent(QResizeEvent* event)
 {
   QWidget::resizeEvent(event);
-  auto minimumWidth = minimumSizeHint().width();
-  if (toEndButton_->isVisible())
-  {
-    if (width() < minimumWidth)
-      navigationWidget_->setVisible(false);
-  }
-  else if (navigationWidget_->minimumSizeHint().width() + minimumWidth
-           <= width())
-    navigationWidget_->setVisible(true);
+  relayoutNavigation();
 }
 
 
diff --git a/src/ftinspect/widgets/glyphindexselector.hpp 
b/src/ftinspect/widgets/glyphindexselector.hpp
index 1ca1d78..b375785 100644
--- a/src/ftinspect/widgets/glyphindexselector.hpp
+++ b/src/ftinspect/widgets/glyphindexselector.hpp
@@ -24,6 +24,8 @@ public:
   GlyphIndexSelector(QWidget* parent);
   ~GlyphIndexSelector() override = default;
 
+  void relayoutNavigation();
+
   // Never triggers repaint!
   void setMinMax(int min,
                  int max);



reply via email to

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