[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freetype2-demos] gsoc-2022-chariri-3 4155093 29/36: [ftinspect] Support
From: |
Werner Lemberg |
Subject: |
[freetype2-demos] gsoc-2022-chariri-3 4155093 29/36: [ftinspect] Support `Shift-[+-0]` to adjust font size. |
Date: |
Wed, 27 Jul 2022 06:32:46 -0400 (EDT) |
branch: gsoc-2022-chariri-3
commit 415509389011aa394ab79d5b51cefb407fa920f8
Author: Charlie Jiang <w@chariri.moe>
Commit: Charlie Jiang <w@chariri.moe>
[ftinspect] Support `Shift-[+-0]` to adjust font size.
Make `Shift+[+-]` adjust Font Size Up/Down, and `Shift-0` will reset size
to the default size. However, numpad 0 is not support due to Qt's handling
of numpad 0.
* src/ftinspect/widgets/fontsizeselector.cpp,
src/ftinspect/widgets/fontsizeselector.hpp: Add event filter functions
to capture the releted keyboard events.
* src/ftinspect/panels/singular.cpp, src/ftinspect/panels/singular.hpp,
src/ftinspect/panels/continuous.cpp,
src/ftinspect/panels/continuous.hpp:
Add `eventFilter` func to handle the delegated key event, pass further
down to `FontSizeSelector`.
Append to the tooltip.
* src/ftinspect/maingui.cpp, src/ftinspect/maingui.hpp: Delegate key event
to the tabs.
---
src/ftinspect/maingui.cpp | 9 +++++
src/ftinspect/maingui.hpp | 1 +
src/ftinspect/panels/continuous.cpp | 17 +++++++++
src/ftinspect/panels/continuous.hpp | 3 ++
src/ftinspect/panels/singular.cpp | 21 ++++++++++-
src/ftinspect/panels/singular.hpp | 3 ++
src/ftinspect/widgets/fontsizeselector.cpp | 56 ++++++++++++++++++++++++++++--
src/ftinspect/widgets/fontsizeselector.hpp | 7 +++-
8 files changed, 113 insertions(+), 4 deletions(-)
diff --git a/src/ftinspect/maingui.cpp b/src/ftinspect/maingui.cpp
index 1fc93a7..add58e4 100644
--- a/src/ftinspect/maingui.cpp
+++ b/src/ftinspect/maingui.cpp
@@ -80,6 +80,15 @@ MainGUI::dropEvent(QDropEvent* event)
}
+void
+MainGUI::keyPressEvent(QKeyEvent* event)
+{
+ // Delegate key events to tabs
+ if (!tabWidget_->currentWidget()->eventFilter(this, event))
+ QMainWindow::keyPressEvent(event);
+}
+
+
void
MainGUI::about()
{
diff --git a/src/ftinspect/maingui.hpp b/src/ftinspect/maingui.hpp
index 2d95332..71885b6 100644
--- a/src/ftinspect/maingui.hpp
+++ b/src/ftinspect/maingui.hpp
@@ -61,6 +61,7 @@ protected:
void closeEvent(QCloseEvent*) override;
void dragEnterEvent(QDragEnterEvent* event) override;
void dropEvent(QDropEvent* event) override;
+ void keyPressEvent(QKeyEvent* event) override;
private slots:
void about();
diff --git a/src/ftinspect/panels/continuous.cpp
b/src/ftinspect/panels/continuous.cpp
index a0815ed..6762321 100644
--- a/src/ftinspect/panels/continuous.cpp
+++ b/src/ftinspect/panels/continuous.cpp
@@ -250,6 +250,20 @@ ContinuousTab::reloadGlyphsAndRepaint()
}
+bool
+ContinuousTab::eventFilter(QObject* watched,
+ QEvent* event)
+{
+ if (event->type() == QEvent::KeyPress)
+ {
+ auto keyEvent = dynamic_cast<QKeyEvent*>(event);
+ if (sizeSelector_->handleKeyEvent(keyEvent))
+ return true;
+ }
+ return false;
+}
+
+
void
ContinuousTab::wheelNavigate(int steps)
{
@@ -431,6 +445,9 @@ ContinuousTab::createConnections()
connect(positionSlider_, &QSlider::valueChanged,
this, &ContinuousTab::repaintGlyph);
+
+ sizeSelector_->installEventFilterForWidget(canvas_);
+ sizeSelector_->installEventFilterForWidget(this);
}
diff --git a/src/ftinspect/panels/continuous.hpp
b/src/ftinspect/panels/continuous.hpp
index 85a154b..a11753b 100644
--- a/src/ftinspect/panels/continuous.hpp
+++ b/src/ftinspect/panels/continuous.hpp
@@ -49,6 +49,9 @@ public:
void sourceTextChanged();
void reloadGlyphsAndRepaint();
+protected:
+ bool eventFilter(QObject* watched, QEvent* event) override;
+
private slots:
void wheelNavigate(int steps);
void wheelResize(int steps);
diff --git a/src/ftinspect/panels/singular.cpp
b/src/ftinspect/panels/singular.cpp
index 1df0db7..69da230 100644
--- a/src/ftinspect/panels/singular.cpp
+++ b/src/ftinspect/panels/singular.cpp
@@ -212,11 +212,27 @@ SingularTab::showToolTip()
tr("Scroll: Grid Up/Down\n"
"Alt + Scroll: Grid Left/Right\n"
"Ctrl + Scroll: Adjust Zoom (Relative to cursor)\n"
- "Shift + Scroll: Adjust Font Size"),
+ "Shift + Scroll: Adjust Font Size\n"
+ "Shift + Plus/Minus: Adjust Font Size\n"
+ "Shift + 0: Reset Font Size to Default"),
helpButton_);
}
+bool
+SingularTab::eventFilter(QObject* watched,
+ QEvent* event)
+{
+ if (event->type() == QEvent::KeyPress)
+ {
+ auto keyEvent = dynamic_cast<QKeyEvent*>(event);
+ if (sizeSelector_->handleKeyEvent(keyEvent))
+ return true;
+ }
+ return false;
+}
+
+
void
SingularTab::createLayout()
{
@@ -357,6 +373,9 @@ SingularTab::createConnections()
this, &SingularTab::drawGlyph);
connect(showGridCheckBox_, &QCheckBox::clicked,
this, &SingularTab::setGridVisible);
+
+ sizeSelector_->installEventFilterForWidget(glyphView_);
+ sizeSelector_->installEventFilterForWidget(this);
}
diff --git a/src/ftinspect/panels/singular.hpp
b/src/ftinspect/panels/singular.hpp
index ccfc6ae..b4530a2 100644
--- a/src/ftinspect/panels/singular.hpp
+++ b/src/ftinspect/panels/singular.hpp
@@ -55,6 +55,9 @@ private slots:
void setGridVisible();
void showToolTip();
+protected:
+ bool eventFilter(QObject* watched, QEvent* event) override;
+
private:
int currentGlyphIndex_;
int currentGlyphCount_;
diff --git a/src/ftinspect/widgets/fontsizeselector.cpp
b/src/ftinspect/widgets/fontsizeselector.cpp
index ed04970..c4f7a34 100644
--- a/src/ftinspect/widgets/fontsizeselector.cpp
+++ b/src/ftinspect/widgets/fontsizeselector.cpp
@@ -45,7 +45,8 @@ FontSizeSelector::applyToEngine(Engine* engine)
void
FontSizeSelector::handleWheelResizeBySteps(int steps)
{
- double sizeAfter = sizeDoubleSpinBox_->value() + steps * 0.5;
+ double sizeAfter = sizeDoubleSpinBox_->value()
+ + steps * sizeDoubleSpinBox_->singleStep();
sizeAfter = std::max(sizeDoubleSpinBox_->minimum(),
std::min(sizeAfter, sizeDoubleSpinBox_->maximum()));
sizeDoubleSpinBox_->setValue(sizeAfter);
@@ -60,6 +61,55 @@ FontSizeSelector::handleWheelResizeFromGrid(QWheelEvent*
event)
}
+bool
+FontSizeSelector::handleKeyEvent(QKeyEvent const* keyEvent)
+{
+ if (!keyEvent)
+ return false;
+ auto modifiers = keyEvent->modifiers();
+ auto key = keyEvent->key();
+ if ((modifiers == Qt::ShiftModifier
+ || modifiers == (Qt::ShiftModifier | Qt::KeypadModifier))
+ && (key == Qt::Key_Plus
+ || key == Qt::Key_Minus
+ || key == Qt::Key_Underscore
+ || key == Qt::Key_Equal
+ || key == Qt::Key_ParenRight))
+ {
+ if (key == Qt::Key_Plus || key == Qt::Key_Equal)
+ handleWheelResizeBySteps(1);
+ else if (key == Qt::Key_Minus
+ || key == Qt::Key_Underscore)
+ handleWheelResizeBySteps(-1);
+ else if (key == Qt::Key_ParenRight)
+ setDefaults(true);
+ return true;
+ }
+ return false;
+}
+
+
+void
+FontSizeSelector::installEventFilterForWidget(QWidget* widget)
+{
+ widget->installEventFilter(this);
+}
+
+
+bool
+FontSizeSelector::eventFilter(QObject* watched,
+ QEvent* event)
+{
+ if (event->type() == QEvent::KeyPress)
+ {
+ auto keyEvent = dynamic_cast<QKeyEvent*>(event);
+ if (handleKeyEvent(keyEvent))
+ return true;
+ }
+ return QWidget::eventFilter(watched, event);
+}
+
+
void
FontSizeSelector::checkUnits()
{
@@ -136,9 +186,11 @@ FontSizeSelector::createConnections()
void
-FontSizeSelector::setDefaults()
+FontSizeSelector::setDefaults(bool sizeOnly)
{
sizeDoubleSpinBox_->setValue(20);
+ if (sizeOnly)
+ return;
dpiSpinBox_->setValue(96);
checkUnits();
}
diff --git a/src/ftinspect/widgets/fontsizeselector.hpp
b/src/ftinspect/widgets/fontsizeselector.hpp
index 581c860..82bc258 100644
--- a/src/ftinspect/widgets/fontsizeselector.hpp
+++ b/src/ftinspect/widgets/fontsizeselector.hpp
@@ -32,6 +32,11 @@ public:
void applyToEngine(Engine* engine);
void handleWheelResizeBySteps(int steps);
void handleWheelResizeFromGrid(QWheelEvent* event);
+ bool handleKeyEvent(QKeyEvent const* keyEvent);
+ void installEventFilterForWidget(QWidget* widget);
+
+protected:
+ bool eventFilter(QObject* watched, QEvent* event) override;
signals:
void valueChanged();
@@ -51,7 +56,7 @@ private:
void createLayout();
void createConnections();
- void setDefaults();
+ void setDefaults(bool sizeOnly = false);
};
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2-demos] gsoc-2022-chariri-3 4155093 29/36: [ftinspect] Support `Shift-[+-0]` to adjust font size.,
Werner Lemberg <=