/**************************************************************************** ** ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt 3D Studio Demos. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include <QtGui/QGuiApplication> #include <QtCore/QDir> #include <QtQuick/QQuickView> #include <QtQml/QQmlEngine> #include <QtQml/QQmlContext> #include <QtGui/QScreen> #include <QtQml/QQmlPropertyMap> #include "housemodel.h" #if defined(KNX_BACKEND) #include "qmlknxdemo.h" #endif // Uncomment for 1280x900 window //#define FIXEDWINDOW int applyFontRatio(const int value, const int ratioFont) { return int(value * ratioFont); } int applyRatio(const int value, const int ratio) { return qMax(2, int(value * ratio)); } int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); #if defined(Q_OS_MACOS) QSurfaceFormat openGLFormat; openGLFormat.setRenderableType(QSurfaceFormat::OpenGL); openGLFormat.setProfile(QSurfaceFormat::CoreProfile); openGLFormat.setMajorVersion(4); openGLFormat.setMinorVersion(1); openGLFormat.setStencilBufferSize(8); QSurfaceFormat::setDefaultFormat(openGLFormat); #endif // Define size variants for scaling qreal refDpi = 96.; qreal refWidth = 1280.; qreal refHeight = 900.; QRect rect = QGuiApplication::primaryScreen()->geometry(); qreal width = rect.width(); qreal height = rect.height(); qreal dpi = QGuiApplication::primaryScreen()->logicalDotsPerInch(); qreal widthRatio = width / refWidth; qreal heightRatio = height / refHeight; qreal ratioFont = qMin(height * dpi / (refDpi * refHeight), width * dpi / (refDpi * refWidth)); if (widthRatio < 1.) widthRatio = 1; if (heightRatio < 1.) heightRatio = 1; if (ratioFont < 1.) ratioFont = 1; #ifdef FIXEDWINDOW width = refWidth; height = refHeight; widthRatio = 1; heightRatio = 1; ratioFont = 1; #endif QQmlPropertyMap sizesMap; sizesMap.insert(QStringLiteral("screenHeight"), QVariant(height)); sizesMap.insert(QStringLiteral("screenWidth"), QVariant(width)); sizesMap.insert(QStringLiteral("fontSize"), QVariant(applyFontRatio(26, ratioFont))); sizesMap.insert(QStringLiteral("controlHeight"), QVariant(applyFontRatio(64, ratioFont))); sizesMap.insert(QStringLiteral("labelMouseMargin"), QVariant(applyRatio(20, widthRatio))); sizesMap.insert(QStringLiteral("controlMargin"), QVariant(applyRatio(20, widthRatio))); sizesMap.insert(QStringLiteral("controlBorderWidth"), QVariant(applyRatio(3, widthRatio))); sizesMap.insert(QStringLiteral("sliderMaxWidth"), QVariant(applyRatio(300, widthRatio))); QQuickView viewer; viewer.engine()->addImportPath(QStringLiteral(":/qml/imports")); #ifndef Q_OS_ANDROID // Hack to get self build working. // Also needs the Qt3DStudio\bin directory in run environment path. //viewer.engine()->addImportPath(QStringLiteral("C:/Qt/Tools/Qt3DStudio/qml")); #endif #if defined(KNX_BACKEND) qmlRegisterUncreatableType<QmlKnxDemo>("QmlKnxDemo", 1, 0, "QmlKnxDemo", "Not instantiated from QML"); QmlKnxDemo *m_knxBackend = new QmlKnxDemo; viewer.engine()->rootContext()->setContextProperty(QStringLiteral("knxBackend"), m_knxBackend); #else viewer.engine()->rootContext()->setContextProperty(QStringLiteral("knxBackend"), nullptr); #endif HouseModel *m_houseModel = new HouseModel; viewer.engine()->rootContext()->setContextProperty(QStringLiteral("houseModel"), m_houseModel); viewer.engine()->rootContext()->setContextProperty(QStringLiteral("sizesMap"), &sizesMap); viewer.engine()->rootContext()->setContextProperty(QStringLiteral("heightRatio"), heightRatio); viewer.setSource(QUrl(QStringLiteral("qrc:/main.qml"))); viewer.setTitle(QStringLiteral("Qt 3D Studio Home Automation Demo")); viewer.setResizeMode(QQuickView::SizeViewToRootObject); #ifdef FIXEDWINDOW viewer.setMinimumSize(QSize(width, height)); viewer.setMaximumSize(QSize(width, height)); viewer.show(); #else viewer.showFullScreen(); #endif return app.exec(); }