freetype-commit
[Top][All Lists]
Advanced

[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);
 };
 
 



reply via email to

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