File indexing completed on 2023-09-24 09:36:15
0001 /* 0002 * SPDX-FileCopyrightText: 2021 Aleix Pol Gonzalez <aleixpol@blue-systems.com> 0003 * 0004 * SPDX-License-Identifier: LGPL-3.0-or-later 0005 */ 0006 0007 #include <QCommandLineParser> 0008 0009 #include <QGuiApplication> 0010 #include <QPainter> 0011 #include <QRasterWindow> 0012 #include <QTimer> 0013 #include <QWindow> 0014 0015 #include <QMetaEnum> 0016 0017 #include <interfaces/shell.h> 0018 #include <interfaces/window.h> 0019 0020 using namespace LayerShellQt; 0021 0022 QStringList enumsToStringList(QMetaEnum metaEnum) 0023 { 0024 QStringList ret; 0025 ret.reserve(metaEnum.keyCount()); 0026 for (int i = 0; i < metaEnum.keyCount(); ++i) { 0027 ret.append(metaEnum.key(i)); 0028 } 0029 return ret; 0030 } 0031 0032 template<typename T> 0033 T stringToEnum(QMetaEnum metaEnum, const QString &str) 0034 { 0035 T ret = {}; 0036 const auto splitted = str.split(QLatin1Char('|')); 0037 for (const auto &value : splitted) { 0038 ret |= T(metaEnum.keyToValue(qPrintable(value))); 0039 } 0040 return ret; 0041 } 0042 0043 class BasicWindow : public QRasterWindow 0044 { 0045 void paintEvent(QPaintEvent *) 0046 { 0047 QPainter p(this); 0048 p.fillRect(QRect(0, 0, width(), height()), Qt::red); 0049 } 0050 }; 0051 0052 int main(int argc, char **argv) 0053 { 0054 Shell::useLayerShell(); 0055 0056 QGuiApplication app(argc, argv); 0057 0058 const auto layerMetaEnum = QMetaEnum::fromType<Window::Layer>(); 0059 const auto anchorMetaEnum = QMetaEnum::fromType<Window::Anchor>(); 0060 0061 QCommandLineParser parser; 0062 QCommandLineOption marginsOption(QStringLiteral("margins"), QStringLiteral("Window margins"), QStringLiteral("pixels"), QStringLiteral("0")); 0063 QCommandLineOption scopeOption(QStringLiteral("scope"), QStringLiteral("Window scope"), QStringLiteral("namespace"), QStringLiteral("normal")); 0064 QCommandLineOption anchorsOption(QStringLiteral("anchors"), 0065 QStringLiteral("Either ") + enumsToStringList(anchorMetaEnum).join(QLatin1String("|")), 0066 QStringLiteral("anchors"), 0067 QStringLiteral("AnchorTop|AnchorBottom|AnchorLeft|AnchorRight")); 0068 QCommandLineOption layerOption(QStringLiteral("layer"), 0069 QStringLiteral("One of ") + enumsToStringList(layerMetaEnum).join(QLatin1String("|")), 0070 QStringLiteral("layer"), 0071 QStringLiteral("LayerTop")); 0072 QCommandLineOption widthOption(QStringLiteral("width"), QStringLiteral("Width of the window"), QStringLiteral("pixels"), QStringLiteral("0")); 0073 QCommandLineOption heightOption(QStringLiteral("height"), QStringLiteral("Height of the window"), QStringLiteral("pixels"), QStringLiteral("0")); 0074 0075 parser.addOptions({marginsOption, scopeOption, anchorsOption, layerOption, widthOption, heightOption}); 0076 parser.addHelpOption(); 0077 parser.process(app); 0078 0079 BasicWindow window; 0080 0081 LayerShellQt::Window *layerShell = LayerShellQt::Window::get(&window); 0082 if (parser.isSet(marginsOption)) { 0083 int margins = parser.value(marginsOption).toInt(); 0084 layerShell->setMargins({margins, margins, margins, margins}); 0085 } 0086 0087 if (parser.isSet(scopeOption)) { 0088 layerShell->setScope(parser.value(scopeOption)); 0089 } 0090 if (parser.isSet(layerOption)) { 0091 layerShell->setLayer(Window::Layer(layerMetaEnum.keyToValue(qPrintable(parser.value(layerOption))))); 0092 } 0093 if (parser.isSet(anchorsOption)) { 0094 layerShell->setAnchors(stringToEnum<Window::Anchors>(anchorMetaEnum, parser.value(anchorsOption))); 0095 } 0096 if (parser.isSet(widthOption)) { 0097 window.setWidth(parser.value(widthOption).toInt()); 0098 } 0099 if (parser.isSet(heightOption)) { 0100 window.setHeight(parser.value(heightOption).toInt()); 0101 } 0102 0103 window.show(); 0104 0105 // just so you don't block yourself out whilst testing 0106 QTimer::singleShot(5000, &app, &QGuiApplication::quit); 0107 return app.exec(); 0108 }