From d6e4a787d59298dcf8c139ec4891fc0208d48a09 Mon Sep 17 00:00:00 2001
From: mae <qt-info@nokia.com>
Date: Mon, 30 Nov 2009 19:00:36 +0100
Subject: [PATCH] separate font zoom from font size

Introduce "Reset Font Size" action, bound to Ctrl+0
---
 src/plugins/help/helpplugin.cpp               |  2 +-
 src/plugins/texteditor/basetexteditor.cpp     | 15 +++---
 src/plugins/texteditor/basetexteditor.h       |  4 +-
 src/plugins/texteditor/fontsettings.cpp       | 23 +++++++++-
 src/plugins/texteditor/fontsettings.h         |  4 ++
 src/plugins/texteditor/fontsettingspage.cpp   |  8 ++++
 src/plugins/texteditor/fontsettingspage.h     |  1 +
 src/plugins/texteditor/fontsettingspage.ui    | 46 ++++++++++++++++++-
 .../texteditor/texteditoractionhandler.cpp    |  8 ++++
 .../texteditor/texteditoractionhandler.h      |  2 +
 src/plugins/texteditor/texteditorconstants.h  |  1 +
 src/plugins/texteditor/texteditorsettings.cpp | 17 +++++--
 src/plugins/texteditor/texteditorsettings.h   |  3 +-
 13 files changed, 116 insertions(+), 18 deletions(-)

diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index 9e5fd1a8054..625be439674 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -427,7 +427,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
         advancedMenu->addAction(cmd, Core::Constants::G_EDIT_FONT);
 
         a = new QAction(tr("Reset Font Size"), this);
-        cmd = am->registerAction(a, QLatin1String("Help.ResetFontSize"),
+        cmd = am->registerAction(a,  TextEditor::Constants::DECREASE_FONT_SIZE,
             modecontext);
         cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+0")));
         connect(a, SIGNAL(triggered()), m_centralWidget, SLOT(resetZoom()));
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 501ef46377d..2e30a1487e8 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -3411,14 +3411,8 @@ void BaseTextEditor::wheelEvent(QWheelEvent *e)
 
 void BaseTextEditor::zoomIn(int range)
 {
-  d->clearVisibleCollapsedBlock();
-    QFont f = font();
-    const int newSize = f.pointSize() + range;
-    if (newSize <= 0)
-        return;
-    emit requestFontSize(newSize);
-//    f.setPointSize(newSize);
-//    setFont(f);
+    d->clearVisibleCollapsedBlock();
+    emit requestFontZoom(range*10);
 }
 
 void BaseTextEditor::zoomOut(int range)
@@ -3426,6 +3420,11 @@ void BaseTextEditor::zoomOut(int range)
     zoomIn(-range);
 }
 
+void BaseTextEditor::zoomReset()
+{
+    emit requestZoomReset();
+}
+
 bool BaseTextEditor::isElectricCharacter(const QChar &) const
 {
     return false;
diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h
index 0dc8eb005cd..092d6c7f4b8 100644
--- a/src/plugins/texteditor/basetexteditor.h
+++ b/src/plugins/texteditor/basetexteditor.h
@@ -382,6 +382,7 @@ public slots:
 
     void zoomIn(int range = 1);
     void zoomOut(int range = 1);
+    void zoomReset();
 
     void cutLine();
     void deleteLine();
@@ -579,7 +580,8 @@ protected slots:
     virtual void slotUpdateBlockNotify(const QTextBlock &);
 
 signals:
-    void requestFontSize(int pointSize);
+    void requestFontZoom(int zoom);
+    void requestZoomReset();
     void requestBlockUpdate(const QTextBlock &);
     void requestAutoCompletion(TextEditor::ITextEditable *editor, bool forced);
     void requestQuickFix(TextEditor::ITextEditable *editor);
diff --git a/src/plugins/texteditor/fontsettings.cpp b/src/plugins/texteditor/fontsettings.cpp
index 8631645a485..cf14545c8f7 100644
--- a/src/plugins/texteditor/fontsettings.cpp
+++ b/src/plugins/texteditor/fontsettings.cpp
@@ -39,6 +39,7 @@
 
 static const char *fontFamilyKey = "FontFamily";
 static const char *fontSizeKey = "FontSize";
+static const char *fontZoomKey= "FontZoom";
 static const char *antialiasKey = "FontAntialias";
 static const char *schemeFileNameKey = "ColorScheme";
 
@@ -65,6 +66,7 @@ namespace TextEditor {
 FontSettings::FontSettings() :
     m_family(defaultFixedFontFamily()),
     m_fontSize(DEFAULT_FONT_SIZE),
+    m_fontZoom(100),
     m_antialias(DEFAULT_ANTIALIAS)
 {
 }
@@ -73,6 +75,7 @@ void FontSettings::clear()
 {
     m_family = defaultFixedFontFamily();
     m_fontSize = DEFAULT_FONT_SIZE;
+    m_fontZoom = 100;
     m_antialias = DEFAULT_ANTIALIAS;
     m_scheme.clear();
 }
@@ -87,6 +90,9 @@ void FontSettings::toSettings(const QString &category,
     if (m_fontSize != DEFAULT_FONT_SIZE || s->contains(QLatin1String(fontSizeKey)))
         s->setValue(QLatin1String(fontSizeKey), m_fontSize);
 
+    if (m_fontZoom!= 100 || s->contains(QLatin1String(fontZoomKey)))
+        s->setValue(QLatin1String(fontZoomKey), m_fontZoom);
+
     if (m_antialias != DEFAULT_ANTIALIAS || s->contains(QLatin1String(antialiasKey)))
         s->setValue(QLatin1String(antialiasKey), m_antialias);
 
@@ -110,6 +116,7 @@ bool FontSettings::fromSettings(const QString &category,
 
     m_family = s->value(group + QLatin1String(fontFamilyKey), defaultFixedFontFamily()).toString();
     m_fontSize = s->value(group + QLatin1String(fontSizeKey), m_fontSize).toInt();
+    m_fontZoom= s->value(group + QLatin1String(fontZoomKey), m_fontZoom).toInt();
     m_antialias = s->value(group + QLatin1String(antialiasKey), DEFAULT_ANTIALIAS).toBool();
 
     if (s->contains(group + QLatin1String(schemeFileNameKey))) {
@@ -144,6 +151,7 @@ bool FontSettings::equals(const FontSettings &f) const
     return m_family == f.m_family
             && m_schemeFileName == f.m_schemeFileName
             && m_fontSize == f.m_fontSize
+            && m_fontZoom == f.m_fontZoom
             && m_antialias == f.m_antialias
             && m_scheme == f.m_scheme;
 }
@@ -160,7 +168,7 @@ QTextCharFormat FontSettings::toTextCharFormat(const QString &category) const
 
     if (category == textCategory) {
         tf.setFontFamily(m_family);
-        tf.setFontPointSize(m_fontSize);
+        tf.setFontPointSize(m_fontSize * m_fontZoom / 100);
         tf.setFontStyleStrategy(m_antialias ? QFont::PreferAntialias : QFont::NoAntialias);
     }
 
@@ -213,6 +221,19 @@ void FontSettings::setFontSize(int size)
     m_fontSize = size;
 }
 
+/**
+ * Returns the configured font zoom factor in percent.
+ */
+int FontSettings::fontZoom() const
+{
+    return m_fontZoom;
+}
+
+void FontSettings::setFontZoom(int zoom)
+{
+    m_fontZoom = zoom;
+}
+
 /**
  * Returns the configured antialiasing behavior.
  */
diff --git a/src/plugins/texteditor/fontsettings.h b/src/plugins/texteditor/fontsettings.h
index 38ffa2d66e2..88f27883296 100644
--- a/src/plugins/texteditor/fontsettings.h
+++ b/src/plugins/texteditor/fontsettings.h
@@ -78,6 +78,9 @@ public:
     int fontSize() const;
     void setFontSize(int size);
 
+    int fontZoom() const;
+    void setFontZoom(int zoom);
+
     QFont font() const
     { return QFont(family(), fontSize()); }
 
@@ -105,6 +108,7 @@ private:
     QString m_family;
     QString m_schemeFileName;
     int m_fontSize;
+    int m_fontZoom;
     bool m_antialias;
     ColorScheme m_scheme;
 };
diff --git a/src/plugins/texteditor/fontsettingspage.cpp b/src/plugins/texteditor/fontsettingspage.cpp
index 0fb51ebd17f..1795158a6eb 100644
--- a/src/plugins/texteditor/fontsettingspage.cpp
+++ b/src/plugins/texteditor/fontsettingspage.cpp
@@ -360,6 +360,7 @@ QWidget *FontSettingsPage::createPage(QWidget *parent)
     d_ptr->ui.familyComboBox->setCurrentIndex(idx);
 
     d_ptr->ui.antialias->setChecked(d_ptr->m_value.antialias());
+    d_ptr->ui.zoomSpinBox->setValue(d_ptr->m_value.fontZoom());
 
     d_ptr->ui.schemeEdit->setFormatDescriptions(d_ptr->m_descriptions);
     d_ptr->ui.schemeEdit->setBaseFont(d_ptr->m_value.font());
@@ -367,10 +368,12 @@ QWidget *FontSettingsPage::createPage(QWidget *parent)
 
     connect(d_ptr->ui.familyComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(fontFamilySelected(QString)));
     connect(d_ptr->ui.sizeComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(fontSizeSelected(QString)));
+    connect(d_ptr->ui.zoomSpinBox, SIGNAL(valueChanged(int)), this, SLOT(fontZoomChanged()));
     connect(d_ptr->ui.schemeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(colorSchemeSelected(int)));
     connect(d_ptr->ui.copyButton, SIGNAL(clicked()), this, SLOT(copyColorScheme()));
     connect(d_ptr->ui.deleteButton, SIGNAL(clicked()), this, SLOT(confirmDeleteColorScheme()));
 
+
     updatePointSizes();
     refreshColorSchemeList();
     d_ptr->m_lastValue = d_ptr->m_value;
@@ -421,6 +424,11 @@ void FontSettingsPage::fontSizeSelected(const QString &sizeString)
     }
 }
 
+void FontSettingsPage::fontZoomChanged()
+{
+    d_ptr->m_value.setFontZoom(d_ptr->ui.zoomSpinBox->value());
+}
+
 void FontSettingsPage::colorSchemeSelected(int index)
 {
     bool readOnly = true;
diff --git a/src/plugins/texteditor/fontsettingspage.h b/src/plugins/texteditor/fontsettingspage.h
index 89f4522fbdb..4e555c263be 100644
--- a/src/plugins/texteditor/fontsettingspage.h
+++ b/src/plugins/texteditor/fontsettingspage.h
@@ -111,6 +111,7 @@ private slots:
     void delayedChange();
     void fontFamilySelected(const QString &family);
     void fontSizeSelected(const QString &sizeString);
+    void fontZoomChanged();
     void colorSchemeSelected(int index);
     void copyColorScheme();
     void copyColorScheme(const QString &name);
diff --git a/src/plugins/texteditor/fontsettingspage.ui b/src/plugins/texteditor/fontsettingspage.ui
index cb7f5d1fb6a..bef6cc789a9 100644
--- a/src/plugins/texteditor/fontsettingspage.ui
+++ b/src/plugins/texteditor/fontsettingspage.ui
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>344</width>
+    <width>402</width>
     <height>306</height>
    </rect>
   </property>
@@ -84,9 +84,12 @@
         <property name="orientation">
          <enum>Qt::Horizontal</enum>
         </property>
+        <property name="sizeType">
+         <enum>QSizePolicy::Preferred</enum>
+        </property>
         <property name="sizeHint" stdset="0">
          <size>
-          <width>40</width>
+          <width>20</width>
           <height>20</height>
          </size>
         </property>
@@ -99,6 +102,45 @@
         </property>
        </widget>
       </item>
+      <item row="0" column="7">
+       <widget class="QSpinBox" name="zoomSpinBox">
+        <property name="suffix">
+         <string>%</string>
+        </property>
+        <property name="minimum">
+         <number>10</number>
+        </property>
+        <property name="maximum">
+         <number>300</number>
+        </property>
+        <property name="singleStep">
+         <number>10</number>
+        </property>
+        <property name="value">
+         <number>100</number>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="8">
+       <spacer name="horizontalSpacer">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="0" column="6">
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>Zoom:</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp
index 9da54ddc10c..e586a54cb3f 100644
--- a/src/plugins/texteditor/texteditoractionhandler.cpp
+++ b/src/plugins/texteditor/texteditoractionhandler.cpp
@@ -73,6 +73,7 @@ TextEditorActionHandler::TextEditorActionHandler(const QString &context,
     m_selectEncodingAction(0),
     m_increaseFontSizeAction(0),
     m_decreaseFontSizeAction(0),
+    m_resetFontSizeAction(0),
     m_gotoBlockStartAction(0),
     m_gotoBlockEndAction(0),
     m_gotoBlockStartWithSelectionAction(0),
@@ -221,6 +222,12 @@ void TextEditorActionHandler::createActions()
     connect(m_decreaseFontSizeAction, SIGNAL(triggered()), this, SLOT(decreaseFontSize()));
     advancedMenu->addAction(command, Core::Constants::G_EDIT_FONT);
 
+    m_resetFontSizeAction = new QAction(tr("Reset Font Size"), this);
+    command = am->registerAction(m_resetFontSizeAction, Constants::RESET_FONT_SIZE, m_contextId);
+    command->setDefaultKeySequence(QKeySequence(tr("Ctrl+0")));
+    connect(m_resetFontSizeAction, SIGNAL(triggered()), this, SLOT(resetFontSize()));
+    advancedMenu->addAction(command, Core::Constants::G_EDIT_FONT);
+
     m_gotoBlockStartAction = new QAction(tr("Goto Block Start"), this);
     command = am->registerAction(m_gotoBlockStartAction, Constants::GOTO_BLOCK_START, m_contextId);
     command->setDefaultKeySequence(QKeySequence(tr("Ctrl+[")));
@@ -422,6 +429,7 @@ FUNCTION(collapse)
 FUNCTION(expand)
 FUNCTION2(increaseFontSize, zoomIn)
 FUNCTION2(decreaseFontSize, zoomOut)
+FUNCTION2(resetFontSize, zoomReset)
 FUNCTION(selectEncoding)
 FUNCTION(gotoBlockStart)
 FUNCTION(gotoBlockEnd)
diff --git a/src/plugins/texteditor/texteditoractionhandler.h b/src/plugins/texteditor/texteditoractionhandler.h
index ca9a878ca1e..661932e98d2 100644
--- a/src/plugins/texteditor/texteditoractionhandler.h
+++ b/src/plugins/texteditor/texteditoractionhandler.h
@@ -104,6 +104,7 @@ private slots:
     void selectEncoding();
     void increaseFontSize();
     void decreaseFontSize();
+    void resetFontSize();
     void gotoBlockStart();
     void gotoBlockEnd();
     void gotoBlockStartWithSelection();
@@ -139,6 +140,7 @@ private:
     QAction *m_selectEncodingAction;
     QAction *m_increaseFontSizeAction;
     QAction *m_decreaseFontSizeAction;
+    QAction *m_resetFontSizeAction;
     QAction *m_gotoBlockStartAction;
     QAction *m_gotoBlockEndAction;
     QAction *m_gotoBlockStartWithSelectionAction;
diff --git a/src/plugins/texteditor/texteditorconstants.h b/src/plugins/texteditor/texteditorconstants.h
index c2818dd21f9..d21b4f8c2e1 100644
--- a/src/plugins/texteditor/texteditorconstants.h
+++ b/src/plugins/texteditor/texteditorconstants.h
@@ -49,6 +49,7 @@ const char * const UN_COLLAPSE_ALL       = "TextEditor.UnCollapseAll";
 const char * const AUTO_INDENT_SELECTION = "TextEditor.AutoIndentSelection";
 const char * const INCREASE_FONT_SIZE    = "TextEditor.IncreaseFontSize";
 const char * const DECREASE_FONT_SIZE    = "TextEditor.DecreaseFontSize";
+const char * const RESET_FONT_SIZE    = "TextEditor.ResetFontSize";
 const char * const GOTO_BLOCK_START      = "TextEditor.GotoBlockStart";
 const char * const GOTO_BLOCK_START_WITH_SELECTION = "TextEditor.GotoBlockStartWithSelection";
 const char * const GOTO_BLOCK_END        = "TextEditor.GotoBlockEnd";
diff --git a/src/plugins/texteditor/texteditorsettings.cpp b/src/plugins/texteditor/texteditorsettings.cpp
index 66e71706a7a..52ab3bb24ad 100644
--- a/src/plugins/texteditor/texteditorsettings.cpp
+++ b/src/plugins/texteditor/texteditorsettings.cpp
@@ -170,8 +170,10 @@ void TextEditorSettings::initializeEditor(BaseTextEditor *editor)
     connect(this, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)),
             editor, SLOT(setDisplaySettings(TextEditor::DisplaySettings)));
 
-    connect(editor, SIGNAL(requestFontSize(int)),
-            this, SLOT(fontSizeRequested(int)));
+    connect(editor, SIGNAL(requestFontZoom(int)),
+            this, SLOT(fontZoomRequested(int)));
+    connect(editor, SIGNAL(requestZoomReset()),
+            this, SLOT(zoomResetRequested()));
 
     // Apply current settings (tab settings depend on font settings)
     editor->setFontSettings(fontSettings());
@@ -181,10 +183,17 @@ void TextEditorSettings::initializeEditor(BaseTextEditor *editor)
 }
 
 
-void TextEditorSettings::fontSizeRequested(int pointSize)
+void TextEditorSettings::fontZoomRequested(int zoom)
 {
     FontSettings &fs = const_cast<FontSettings&>(m_fontSettingsPage->fontSettings());
-    fs.setFontSize(pointSize);
+    fs.setFontZoom(qMax(10, fs.fontZoom() + zoom));
+    m_fontSettingsPage->saveSettings();
+}
+
+void TextEditorSettings::zoomResetRequested()
+{
+    FontSettings &fs = const_cast<FontSettings&>(m_fontSettingsPage->fontSettings());
+    fs.setFontZoom(100);
     m_fontSettingsPage->saveSettings();
 }
 
diff --git a/src/plugins/texteditor/texteditorsettings.h b/src/plugins/texteditor/texteditorsettings.h
index de3ff07bd2b..14912d69562 100644
--- a/src/plugins/texteditor/texteditorsettings.h
+++ b/src/plugins/texteditor/texteditorsettings.h
@@ -74,7 +74,8 @@ signals:
     void displaySettingsChanged(const TextEditor::DisplaySettings &);
 
 private slots:
-    void fontSizeRequested(int pointSize);
+    void fontZoomRequested(int pointSize);
+    void zoomResetRequested();
 
 private:
     FontSettingsPage *m_fontSettingsPage;
-- 
GitLab