File indexing completed on 2024-12-08 12:12:55
0001 // SPDX-License-Identifier: LGPL-2.1-or-later 0002 // 0003 // SPDX-FileCopyrightText: 2014 Adam Dabrowski <adamdbrw@gmail.com> 0004 // 0005 0006 #include <QApplication> 0007 #include <QQuickView> 0008 0009 #include <marble/declarative/MarbleQuickItem.h> 0010 #include <marble/MarbleMap.h> 0011 #include <marble/declarative/MarbleDeclarativePlugin.h> 0012 0013 using namespace Marble; 0014 0015 class MarbleDemoItem : public MarbleQuickItem 0016 { 0017 Q_OBJECT 0018 0019 public: 0020 MarbleDemoItem(QQuickItem *parent = nullptr) : MarbleQuickItem(parent) 0021 { 0022 // nothing to do 0023 } 0024 0025 void componentComplete() override 0026 { 0027 QQuickItem *pinch = findChild<QQuickItem*>(QStringLiteral("pinchArea")); 0028 if (pinch) 0029 { 0030 pinch->installEventFilter(getEventFilter()); 0031 } 0032 } 0033 0034 public Q_SLOTS: 0035 0036 void handlePinchStart(QPointF center) 0037 { 0038 makePinch(center, Qt::GestureStarted); 0039 } 0040 0041 void handlePinchUpdate(QPointF center, qreal scale) 0042 { 0043 makePinch(center, Qt::GestureUpdated, scale); 0044 } 0045 0046 void handlePinchEnd(QPointF center, bool canceled) 0047 { 0048 makePinch(center, canceled ? Qt::GestureCanceled : Qt::GestureFinished); 0049 } 0050 0051 private: 0052 void makePinch(QPointF center, Qt::GestureState state, qreal scale = 1) 0053 { 0054 scale = sqrt(sqrt(scale)); 0055 scale = qBound(static_cast<qreal>(0.5), scale, static_cast<qreal>(2.0)); 0056 pinch(center, scale, state); 0057 } 0058 }; 0059 0060 class MapTestWrap : public QQuickView 0061 { 0062 public: 0063 void start() 0064 { 0065 MarbleDeclarativePlugin plugin; 0066 plugin.registerTypes("org.kde.marble"); 0067 qmlRegisterType<MarbleDemoItem>("org.kde.marble", 0, 20, "MarbleDemoItem"); 0068 setSource(QUrl(QStringLiteral("qrc:/main.qml"))); 0069 0070 if(status()!=QQuickView::Ready) 0071 qDebug("can't initialise view"); 0072 0073 QSurfaceFormat format; 0074 format.setAlphaBufferSize(8); 0075 setFormat(format); 0076 setClearBeforeRendering(true); 0077 setColor(QColor(Qt::transparent)); 0078 setTitle(QStringLiteral("Marble in QML 2.0 demo")); 0079 0080 show(); 0081 } 0082 }; 0083 0084 int main(int argc, char *argv[]) 0085 { 0086 QApplication app(argc, argv); 0087 0088 MapTestWrap test; 0089 test.start(); 0090 0091 return app.exec(); 0092 } 0093 0094 #include "main.moc"