ScreenTools.h 5.63 KB
Newer Older
Don Gagne's avatar
Don Gagne committed
1
/*=====================================================================
2

Don Gagne's avatar
Don Gagne committed
3
 QGroundControl Open Source Ground Control Station
4

Don Gagne's avatar
Don Gagne committed
5
 (c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
6

Don Gagne's avatar
Don Gagne committed
7
 This file is part of the QGROUNDCONTROL project
8

Don Gagne's avatar
Don Gagne committed
9 10 11 12
 QGROUNDCONTROL is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.
13

Don Gagne's avatar
Don Gagne committed
14 15 16 17
 QGROUNDCONTROL is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
18

Don Gagne's avatar
Don Gagne committed
19 20
 You should have received a copy of the GNU General Public License
 along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
21

Don Gagne's avatar
Don Gagne committed
22 23 24
 ======================================================================*/

/// @file
25
///     @author Gus Grubba <mavlink@grubba.com>
Don Gagne's avatar
Don Gagne committed
26

27 28
#ifndef SCREENTOOLS_H
#define SCREENTOOLS_H
Don Gagne's avatar
Don Gagne committed
29 30 31 32

#include <QObject>
#include <QCursor>

33 34 35 36 37 38 39 40
/*!
    @brief Screen helper tools for QML widgets
    To use its functions, you need to import the module with the following line:
    @code
    import QGroundControl.ScreenTools 1.0
    @endcode
*/

41 42
/// This Qml control is used to return screen parameters
class ScreenTools : public QObject
Don Gagne's avatar
Don Gagne committed
43 44 45
{
    Q_OBJECT
public:
46 47
    ScreenTools();

48 49 50 51
    Q_PROPERTY(bool     isAndroid           READ isAndroid  CONSTANT)
    Q_PROPERTY(bool     isiOS               READ isiOS      CONSTANT)
    Q_PROPERTY(bool     isMobile            READ isMobile   CONSTANT)

52
    //! Returns the global mouse X position
53
    Q_PROPERTY(int      mouseX              READ mouseX)
54
    //! Returns the global mouse Y position
55
    Q_PROPERTY(int      mouseY              READ mouseY)
56 57 58 59 60
    //! Used to trigger a \c Canvas element repaint.
    /*!
      There is a bug as of Qt 5.4 where a Canvas element defined within a QQuickWidget does not receive
      repaint events. QGC's main window will emit these signals when a \c Canvas element needs to be
      repainted.
dogmaphobic's avatar
dogmaphobic committed
61
      If you use a \c Canvas element inside some QML widget, you can use this code to handle repaint:
62 63 64 65 66 67 68 69
      @code
      import QGroundControl.ScreenTools 1.0
      ...
        Canvas {
            id: myCanvas
            height: 40
            width:  40
            Connections {
70
                target: ScreenTools
71 72 73 74 75 76 77 78 79 80 81
                onRepaintRequestedChanged: {
                    myCanvas.requestPaint();
                }
            }
            onPaint: {
                var context = getContext("2d");
                ...
            }
        }
      @endcode
     */
82

83 84 85 86 87
    Q_PROPERTY(bool     repaintRequested     READ repaintRequested     NOTIFY repaintRequestedChanged)
    //! Returns the font point size factor
    Q_PROPERTY(double   fontPointFactor      READ fontPointFactor      NOTIFY fontPointFactorChanged)
    //! Returns the pixel size factor
    Q_PROPERTY(double   pixelSizeFactor      READ pixelSizeFactor      NOTIFY pixelSizeFactorChanged)
88
    
89
    //! Returns the system wide default font point size (properly scaled)
90 91 92 93 94
    Q_PROPERTY(double   defaultFontPointSize READ defaultFontPointSize NOTIFY fontSizesChanged)
    //! Returns the system wide default font point size (properly scaled)
    Q_PROPERTY(double   mediumFontPointSize READ mediumFontPointSize NOTIFY fontSizesChanged)
    //! Returns the system wide default font point size (properly scaled)
    Q_PROPERTY(double   largeFontPointSize READ largeFontPointSize NOTIFY fontSizesChanged)
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113

    //! Utility for adjusting font point size. Not dynamic (no signals)
    Q_INVOKABLE qreal   adjustFontPointSize(qreal pointSize);
    //! Utility for adjusting pixel size. Not dynamic (no signals)
    Q_INVOKABLE qreal   adjustPixelSize(qreal pixelSize);

    //! Utility for increasing pixel size.
    Q_INVOKABLE void    increasePixelSize();
    //! Utility for decreasing pixel size.
    Q_INVOKABLE void    decreasePixelSize();
    //! Utility for increasing font size.
    Q_INVOKABLE void    increaseFontSize();
    //! Utility for decreasing font size.
    Q_INVOKABLE void    decreaseFontSize();

    /// Static version of adjustFontPointSize of use in C++ code
    static qreal adjustFontPointSize_s(qreal pointSize);
    /// Static version of adjustPixelSize of use in C++ code
    static qreal adjustPixelSize_s(qreal pixelSize);
114

115 116 117
    int     mouseX              () { return QCursor::pos().x(); }
    int     mouseY              () { return QCursor::pos().y(); }
    bool    repaintRequested    () { return true; }
118 119 120
    double  fontPointFactor     ();
    double  pixelSizeFactor     ();
    double  defaultFontPointSize(void);
121 122
    double  mediumFontPointSize(void);
    double  largeFontPointSize(void);
123

124 125 126 127
#if defined (__android__)
    bool    isAndroid           () { return true;  }
    bool    isiOS               () { return false; }
    bool    isMobile            () { return true;  }
dogmaphobic's avatar
dogmaphobic committed
128 129 130 131
#elif defined(__ios__)
    bool    isAndroid           () { return false; }
    bool    isiOS               () { return true; }
    bool    isMobile            () { return true; }
132 133 134 135 136 137
#else
    bool    isAndroid           () { return false; }
    bool    isiOS               () { return false; }
    bool    isMobile            () { return false; }
#endif

138 139
signals:
    void repaintRequestedChanged();
140 141
    void pixelSizeFactorChanged();
    void fontPointFactorChanged();
142
    void fontSizesChanged();
143 144 145

private slots:
    void _updateCanvas();
146 147
    void _updatePixelSize();
    void _updateFontSize();
148 149

private:
150
    static const double _defaultFontPointSize;
151 152
    static const double _mediumFontPointSize;
    static const double _largeFontPointSize;
Don Gagne's avatar
Don Gagne committed
153 154 155
};

#endif