File indexing completed on 2024-05-05 04:38:47
0001 /* 0002 SPDX-FileCopyrightText: 2016 Igor Kushnir <igorkuo@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #ifndef KDEVPLATFORM_ZOOMCONTROLLER_H 0008 #define KDEVPLATFORM_ZOOMCONTROLLER_H 0009 0010 #include "utilexport.h" 0011 0012 #include <QObject> 0013 #include <QScopedPointer> 0014 0015 class KConfigGroup; 0016 class QKeyEvent; 0017 class QWheelEvent; 0018 0019 namespace KDevelop { 0020 0021 class ZoomControllerPrivate; 0022 0023 /** 0024 * @brief Stores zoom factor; provides common zoom operations and notifications 0025 */ 0026 class KDEVPLATFORMUTIL_EXPORT ZoomController : public QObject 0027 { 0028 Q_OBJECT 0029 0030 public: 0031 /** 0032 * @param configGroup A place to store zoom factor in 0033 */ 0034 explicit ZoomController(const KConfigGroup& configGroup, 0035 QObject* parent = nullptr); 0036 0037 ~ZoomController() override; 0038 0039 /** 0040 * @return Current zoom factor 0041 */ 0042 double factor() const; 0043 0044 /** 0045 * @brief Sets current zoom factor to @p factor 0046 */ 0047 void setFactor(double factor); 0048 0049 /** 0050 * @brief Changes current zoom factor according to @p scale 0051 * 0052 * @param scale If equal to 0, factor remains the same; 0053 * otherwise, larger scale leads to larger factor. 0054 * Can be both positive (zoom in) and negative (zoom out). 0055 */ 0056 void zoomBy(double scale); 0057 0058 /** 0059 * @brief Changes current zoom factor in response to designated shortcuts 0060 * 0061 * @param event Event to be analyzed and possibly accepted 0062 * 0063 * @return true If the event was accepted as a zoom shortcut 0064 */ 0065 bool handleKeyPressEvent(QKeyEvent* event); 0066 0067 /** 0068 * @brief Changes current zoom factor in response to Ctrl+mouse_scroll 0069 * 0070 * @param event Event to be analyzed and possibly accepted 0071 * 0072 * @return true If the event was accepted as a zoom scroll 0073 */ 0074 bool handleWheelEvent(QWheelEvent* event); 0075 0076 public Q_SLOTS: 0077 /** 0078 * @brief Increases current zoom factor by the default multiplier 0079 */ 0080 void zoomIn(); 0081 0082 /** 0083 * @brief Decreases current zoom factor by the default multiplier 0084 */ 0085 void zoomOut(); 0086 0087 /** 0088 * @brief Sets current zoom factor to the default value (1.0) 0089 */ 0090 void resetZoom(); 0091 0092 Q_SIGNALS: 0093 /** 0094 * @brief Notifies when current zoom factor is changed 0095 * 0096 * @param factor Current zoom factor 0097 */ 0098 void factorChanged(double factor); 0099 0100 private: 0101 const QScopedPointer<class ZoomControllerPrivate> d_ptr; 0102 Q_DECLARE_PRIVATE(ZoomController) 0103 }; 0104 0105 } 0106 0107 #endif // KDEVPLATFORM_ZOOMCONTROLLER_H