From 5d98ec36d66db8897f7e3e5120b43c50f379baea Mon Sep 17 00:00:00 2001 From: zheng_wenlong Date: Wed, 14 Nov 2018 12:50:56 +0900 Subject: Add tbtnavi for vertical mode Add tbtnavi for vertical mode. This application use waltham transmitter send video to horizontal mode. Change-Id: Icc8bb14f9c83439d90f28d0960e435a43a5e5245 Signed-off-by: zheng_wenlong --- demo3/vertical/tbtnavi_demo/app/main.cpp | 119 +++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 demo3/vertical/tbtnavi_demo/app/main.cpp (limited to 'demo3/vertical/tbtnavi_demo/app/main.cpp') diff --git a/demo3/vertical/tbtnavi_demo/app/main.cpp b/demo3/vertical/tbtnavi_demo/app/main.cpp new file mode 100644 index 0000000..779af3f --- /dev/null +++ b/demo3/vertical/tbtnavi_demo/app/main.cpp @@ -0,0 +1,119 @@ +#include + +#include +#include +#include +#include +#include +#include + +#include "qcheapruler.hpp" + +#ifdef HAVE_LIBHOMESCREEN +#include +#endif +#ifdef HAVE_QLIBWINDOWMANAGER +#include +#endif + +int main(int argc, char *argv[]) +{ + QString myname = QString("tbtnavi"); + + QGuiApplication app(argc, argv); + app.setApplicationName(myname); + app.setApplicationVersion(QStringLiteral("0.1.0")); + app.setOrganizationDomain(QStringLiteral("automotivelinux.org")); + app.setOrganizationName(QStringLiteral("AutomotiveGradeLinux")); + + QCommandLineParser parser; + parser.addPositionalArgument("port", app.translate("main", "port for binding")); + parser.addPositionalArgument("secret", app.translate("main", "secret for binding")); + parser.addHelpOption(); + parser.addVersionOption(); + parser.process(app); + QStringList positionalArguments = parser.positionalArguments(); + + QQmlApplicationEngine engine; + QQmlContext *context = engine.rootContext(); + QUrl bindingAddress; + int port = 0; + QString secret; + if (positionalArguments.length() == 2) { + port = positionalArguments.takeFirst().toInt(); + secret = positionalArguments.takeFirst(); + bindingAddress.setScheme(QStringLiteral("ws")); + bindingAddress.setHost(QStringLiteral("localhost")); + bindingAddress.setPort(port); + bindingAddress.setPath(QStringLiteral("/api")); + QUrlQuery query; + query.addQueryItem(QStringLiteral("token"), secret); + bindingAddress.setQuery(query); + context->setContextProperty(QStringLiteral("bindingAddress"), bindingAddress); + } else { + context->setContextProperty(QStringLiteral("bindingAddress"), bindingAddress); + } + +#ifdef HAVE_QLIBWINDOWMANAGER + // WindowManager + QLibWindowmanager* qwm = new QLibWindowmanager(); + if(qwm->init(port,secret) != 0){ + exit(EXIT_FAILURE); + } + // Request a surface as described in layers.json windowmanager’s file + if(qwm->requestSurface(myname) != 0){ + exit(EXIT_FAILURE); + } +#endif + +#ifdef HAVE_LIBHOMESCREEN + // HomeScreen + LibHomeScreen* hs = new LibHomeScreen(); + std::string token = secret.toStdString(); + hs->init(port, token.c_str()); + // Set the event handler for Event_TapShortcut which will activate the surface for windowmanager + hs->set_event_handler(LibHomeScreen::Event_TapShortcut, [qwm, myname](json_object *object){ + + json_object *appnameJ = nullptr; + if(json_object_object_get_ex(object, "application_name", &appnameJ)) + { + const char *appname = json_object_get_string(appnameJ); + if(QString::compare(myname, appname, Qt::CaseInsensitive) == 0) + { + qDebug("Surface %s got tapShortcut\n", appname); + json_object *para, *area; + json_object_object_get_ex(object, "parameter", ¶); + json_object_object_get_ex(para, "area", &area); + const char *displayArea = json_object_get_string(area); + qDebug("Surface %s got tapShortcut area\n", displayArea); +// qwm->activateWindow(myname, QString(QLatin1String(displayArea))); + qwm->activateWindow(myname, "master.split.sub"); + } + } + }); +#endif + qmlRegisterType("com.mapbox.cheap_ruler", 1, 0, "CheapRuler"); + + engine.load(QUrl(QStringLiteral("qrc:qml/Main.qml"))); + + QObject *root = engine.rootObjects().first(); + QQuickWindow *window = qobject_cast(root); +#ifdef HAVE_QLIBWINDOWMANAGER +// QObject::connect(window, SIGNAL(frameSwapped()), qwm, SLOT(slotActivateSurface())); + // Create an event callback against an event type. Here a lambda is called when SyncDraw event occurs + qwm->set_event_handler(QLibWindowmanager::Event_SyncDraw, [root, qwm, myname](json_object *object) { + fprintf(stderr, "Surface got syncDraw!\n"); + qwm->endDraw(myname); + QMetaObject::invokeMethod(root, "startDemo", Q_ARG(QVariant, true)); + }); + // Create an event callback against an event type. Here a lambda is called when SyncDraw event occurs + qwm->set_event_handler(QLibWindowmanager::Event_Active, [root](json_object *object) { + fprintf(stderr, "Surface got Event_Active!\n"); + }); +#else + window->resize(1024, 768); + window->setVisible(true); +#endif + + return app.exec(); +} -- cgit 1.2.3-korg