[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2-demos] master 2186a04: [ftinspect] Fix the glyph index selector layout when the window resizes.,
Werner Lemberg <=