diff --git a/ScreenPlay/ScreenPlay.pro b/ScreenPlay/ScreenPlay.pro index 07f92fa1..a1b65c8d 100644 --- a/ScreenPlay/ScreenPlay.pro +++ b/ScreenPlay/ScreenPlay.pro @@ -70,18 +70,22 @@ INCLUDEPATH += \ $$PWD/src/\ +CONFIG(debug, debug|release) { + install_assets.path = $${OUT_PWD}/assets/fonts +} else { + install_assets.path = $${OUT_PWD}/assets/fonts +} + +install_assets.files += $$PWD/assets/fonts/NotoSansCJKkr-Regular.otf + win32 { RC_ICONS += favicon.ico - - CONFIG(debug, debug|release) { install_it.path = $${OUT_PWD}/debug/ } else { install_it.path = $${OUT_PWD}/release/ } - - INCLUDEPATH += $$PWD/../Common/vcpkg/installed/x64-windows/include DEPENDPATH += $$PWD/../Common/vcpkg/installed/x64-windows/include @@ -154,5 +158,5 @@ unix { } -INSTALLS += install_it +INSTALLS += install_it install_assets diff --git a/ScreenPlay/app.cpp b/ScreenPlay/app.cpp index 598bfb12..ac9088e0 100644 --- a/ScreenPlay/app.cpp +++ b/ScreenPlay/app.cpp @@ -49,7 +49,7 @@ App::App() QGuiApplication::setOrganizationName("ScreenPlay"); QGuiApplication::setOrganizationDomain("screen-play.app"); QGuiApplication::setApplicationName("ScreenPlay"); - QGuiApplication::setApplicationVersion("0.9.0"); + QGuiApplication::setApplicationVersion("0.10.0"); QGuiApplication::setQuitOnLastWindowClosed(false); QtBreakpad::init(QDir::current().absolutePath()); diff --git a/ScreenPlay/main.qml b/ScreenPlay/main.qml index 26090d6e..10d8b2e5 100644 --- a/ScreenPlay/main.qml +++ b/ScreenPlay/main.qml @@ -30,7 +30,7 @@ ApplicationWindow { visible: false width: 1400 height: 788 - title: "ScreenPlay Alpha - V0.9.0" + title: "ScreenPlay Alpha - V0.10.0" minimumHeight: 450 minimumWidth: 1050 diff --git a/ScreenPlay/qml/Create/Wizards/CreateEmptyWidget/CreateEmptyWidget.qml b/ScreenPlay/qml/Create/Wizards/CreateEmptyWidget/CreateEmptyWidget.qml index 1a63dd87..b3349825 100644 --- a/ScreenPlay/qml/Create/Wizards/CreateEmptyWidget/CreateEmptyWidget.qml +++ b/ScreenPlay/qml/Create/Wizards/CreateEmptyWidget/CreateEmptyWidget.qml @@ -4,6 +4,7 @@ import QtQuick.Controls 2.14 import QtQuick.Layouts 1.14 import QtQuick.Dialogs 1.2 import ScreenPlay 1.0 +import Settings 1.0 import "../../../Common" @@ -159,7 +160,6 @@ Item { TagSelector { id: tagSelector Layout.fillWidth: true - font.family: ScreenPlay.settings.font } Item { diff --git a/ScreenPlay/qml/Installed/Installed.qml b/ScreenPlay/qml/Installed/Installed.qml index 2d274b00..86e5bdf4 100644 --- a/ScreenPlay/qml/Installed/Installed.qml +++ b/ScreenPlay/qml/Installed/Installed.qml @@ -222,6 +222,9 @@ Item { right: parent.right left: parent.left } + MouseArea { + anchors.fill: parent + } TabBar { height: parent.height background: Item {} diff --git a/ScreenPlay/qml/Monitors/Monitors.qml b/ScreenPlay/qml/Monitors/Monitors.qml index 511fea70..3fcdba06 100644 --- a/ScreenPlay/qml/Monitors/Monitors.qml +++ b/ScreenPlay/qml/Monitors/Monitors.qml @@ -177,6 +177,7 @@ Item { } } + GridView { id: customPropertiesGridView boundsBehavior: Flickable.DragOverBounds @@ -191,18 +192,21 @@ Item { top: parent.top topMargin: 60 right: parent.right + rightMargin: 40 bottom: parent.bottom - margins: 30 + bottomMargin: 30 left: itmLeftWrapper.right } delegate: MonitorsProjectSettingItem { id: delegate + width: parent.width - 40 selectedMonitor: monitors.activeMonitorIndex } ScrollBar.vertical: ScrollBar { snapMode: ScrollBar.SnapOnRelease + policy: ScrollBar.AlwaysOn } states: [ @@ -337,3 +341,9 @@ Item { } ] } + +/*##^## +Designer { + D{i:0;autoSize:true;height:768;width:1366} +} +##^##*/ diff --git a/ScreenPlay/qml/Monitors/MonitorsProjectSettingItem.qml b/ScreenPlay/qml/Monitors/MonitorsProjectSettingItem.qml index 6b0fdbd6..16466041 100644 --- a/ScreenPlay/qml/Monitors/MonitorsProjectSettingItem.qml +++ b/ScreenPlay/qml/Monitors/MonitorsProjectSettingItem.qml @@ -1,34 +1,32 @@ import QtQuick 2.12 import QtQuick.Controls 2.3 import QtGraphicalEffects 1.0 +import QtQuick.Dialogs 1.2 import QtQuick.Controls.Material 2.2 import QtQuick.Layouts 1.3 + +import Settings 1.0 import ScreenPlay 1.0 -Item { +Rectangle { id: delegate focus: true height: isHeadline ? 50 : 30 - width: 300 - property int selectedMonitor - anchors { - left: parent.left - leftMargin: isHeadline ? 0 : 25 - } - Text { id: txtDescription text: name width: 100 - font.pointSize: isHeadline ? 21 : 14 + font.pointSize: isHeadline ? 18 : 12 anchors.verticalCenter: parent.verticalCenter font.family: ScreenPlay.settings.font font.weight: Font.Normal - + color: isHeadline ? Qt.darker(Material.foreground) : Material.foreground + anchors { left: parent.left + leftMargin: isHeadline ? 0 : 25 } } @@ -48,19 +46,102 @@ Item { var obj = JSON.parse(value.toString()) - if (obj["type"] === "slider") { + if (obj["text"]) { + txtDescription.text = obj["text"] + } + + switch (obj["type"]) { + case "slider": loader.sourceComponent = compSlider loader.item.from = obj["from"] loader.item.to = obj["to"] loader.item.value = obj["value"] loader.item.stepSize = obj["stepSize"] + break + case "bool": + loader.sourceComponent = compCheckbox + loader.item.value = obj["value"] + break + case "color": + loader.sourceComponent = compColorpicker + loader.item.value = obj["value"] + break } } + + Component { + id: compCheckbox + + Item { + id: root + anchors.fill: parent + property bool value + + CheckBox { + id: checkbox + checkable: true + checked: root.value + anchors { + right: parent.right + verticalCenter: parent.verticalCenter + } + onCheckedChanged: { + ScreenPlay.screenPlayManager.setWallpaperValue( + selectedMonitor, name, checkbox.checked) + } + } + } + } + + Component { + id: compColorpicker + + Item { + id: root + anchors.fill: parent + property color value + + Button { + id: btnSetColor + text: qsTr("Set color") + onClicked: colorDialog.open() + anchors { + right: parent.right + verticalCenter: parent.verticalCenter + } + } + Rectangle { + id: rctPreviewColor + radius: 3 + color: root.value + border.width: 1 + border.color: "gray" + width: parent.height + height: parent.height + anchors { + right: btnSetColor.left + rightMargin: 20 + verticalCenter: parent.verticalCenter + } + } + ColorDialog { + id: colorDialog + title: qsTr("Please choose a color") + onAccepted: { + rctPreviewColor.color = colorDialog.color + let tmpColor = "'" + colorDialog.color.toString() + "'" + ScreenPlay.screenPlayManager.setWallpaperValue( + selectedMonitor, name, tmpColor) + } + } + } + } + Component { id: compSlider Item { - id:root + id: root anchors.fill: parent property int from property int to @@ -68,24 +149,35 @@ Item { property int stepSize Slider { - id:slider + id: slider from: root.from to: root.to value: root.value stepSize: root.stepSize live: false - width: parent.width + + anchors { + verticalCenter: parent.verticalCenter + right:txtSliderValue.left + rightMargin: 20 + left:parent.left + leftMargin: 20 + } onValueChanged: { - var value = Math.round(slider.value * 100) / 100; - txtSliderValue.text = value; - ScreenPlay.screenPlayManager.setWallpaperValue(selectedMonitor,txtDescription.text,value) + var value = Math.round(slider.value * 100) / 100 + txtSliderValue.text = value + ScreenPlay.screenPlayManager.setWallpaperValue( + selectedMonitor, name, value) } } Text { id: txtSliderValue - anchors{ - right:parent.right + color: Material.foreground + horizontalAlignment: Text.AlignRight + font.family: ScreenPlay.settings.font + anchors { + right: parent.right verticalCenter: parent.verticalCenter } } @@ -95,6 +187,14 @@ Item { Loader { id: loader anchors.fill: parent + anchors.rightMargin: 10 } } } + +/*##^## +Designer { + D{i:0;height:50;width:400} +} +##^##*/ + diff --git a/ScreenPlay/qml/Navigation/Navigation.qml b/ScreenPlay/qml/Navigation/Navigation.qml index 1f2949d4..7ab82eb3 100644 --- a/ScreenPlay/qml/Navigation/Navigation.qml +++ b/ScreenPlay/qml/Navigation/Navigation.qml @@ -15,6 +15,10 @@ Rectangle { width: 1366 color: Material.background + MouseArea { + anchors.fill: parent + } + signal changePage(string name) property var navArray: [navCreate, navWorkshop, navInstalled, navSettings, navCommunity] diff --git a/ScreenPlay/src/screenplaymanager.cpp b/ScreenPlay/src/screenplaymanager.cpp index f99dbb07..d6611d0d 100644 --- a/ScreenPlay/src/screenplaymanager.cpp +++ b/ScreenPlay/src/screenplaymanager.cpp @@ -101,7 +101,18 @@ void ScreenPlayManager::createWallpaper( settings.insert("absolutePath", path); saveWallpaperProfile("default", settings); + return; } + if (saveToProfilesConfigFile && type == "qmlWallpaper") { + QJsonObject settings; + settings.insert("monitors", monitors); + settings.insert("type", type); + settings.insert("previewImage", previewImage); + settings.insert("absolutePath", path); + + saveWallpaperProfile("default", settings); + } + } /*! @@ -138,7 +149,7 @@ void ScreenPlayManager::removeAllWallpapers() m_screenPlayWallpapers.clear(); m_monitorListModel->clearActiveWallpaper(); - QString absoluteProfilesFilePath = m_globalVariables->localSettingsPath().toLocalFile() + "/profiles.json"; + QString absoluteProfilesFilePath = m_globalVariables->localSettingsPath().toString() + "/profiles.json"; auto configOptional = Util::openJsonFileToObject(absoluteProfilesFilePath); if (!configOptional) { @@ -164,6 +175,8 @@ void ScreenPlayManager::removeAllWallpapers() Util::writeJsonObjectToFile(absoluteProfilesFilePath, newConfig); setActiveWallpaperCounter(0); + } else { + qWarning() << "Trying to remove all wallpapers while m_screenPlayWallpapers is not empty. Count: "<< m_screenPlayWallpapers.size(); } } @@ -261,7 +274,7 @@ bool ScreenPlayManager::saveWallpaperProfile(const QString& profileName, const Q // Remove when implementing profiles Q_UNUSED(profileName) - QString absoluteProfilesFilePath = m_globalVariables->localSettingsPath().toLocalFile() + "/profiles.json"; + QString absoluteProfilesFilePath = m_globalVariables->localSettingsPath().toString() + "/profiles.json"; auto configOptional = Util::openJsonFileToObject(absoluteProfilesFilePath); if (!configOptional) { @@ -313,10 +326,10 @@ bool ScreenPlayManager::saveWallpaperProfile(const QString& profileName, const Q void ScreenPlayManager::loadWallpaperProfiles() { - auto configObj = Util::openJsonFileToObject(m_globalVariables->localSettingsPath().toLocalFile() + "/profiles.json"); + auto configObj = Util::openJsonFileToObject(m_globalVariables->localSettingsPath().toString() + "/profiles.json"); if (!configObj) { - qWarning() << "Could not load active profiles at path: " << m_globalVariables->localSettingsPath().toLocalFile() + "/profiles.json"; + qWarning() << "Could not load active profiles at path: " << m_globalVariables->localSettingsPath().toString() + "/profiles.json"; return; } diff --git a/ScreenPlay/src/settings.cpp b/ScreenPlay/src/settings.cpp index 9af55046..f40cb007 100644 --- a/ScreenPlay/src/settings.cpp +++ b/ScreenPlay/src/settings.cpp @@ -77,7 +77,7 @@ Settings::Settings(const shared_ptr& globalVariables, setAnonymousTelemetry(m_qSettings.value("AnonymousTelemetry", true).toBool()); // Wallpaper and Widgets config - QFile profilesFile(m_globalVariables->localSettingsPath().toLocalFile() + "/profiles.json"); + QFile profilesFile(m_globalVariables->localSettingsPath().toString() + "/profiles.json"); if (!profilesFile.exists()) { qInfo("No profiles.json found, creating default profiles.json"); qDebug() << profilesFile; @@ -130,7 +130,7 @@ Settings::Settings(const shared_ptr& globalVariables, */ void Settings::writeJsonFileFromResource(const QString& filename) { - QFile file(m_globalVariables->localSettingsPath().toLocalFile() + "/" + filename + ".json"); + QFile file(m_globalVariables->localSettingsPath().toString() + "/" + filename + ".json"); QFile defaultSettings(":/" + filename + ".json"); file.open(QIODevice::WriteOnly | QIODevice::Text); diff --git a/ScreenPlayWallpaper/WebView.qml b/ScreenPlayWallpaper/WebView.qml index eff963fb..336793dc 100644 --- a/ScreenPlayWallpaper/WebView.qml +++ b/ScreenPlayWallpaper/WebView.qml @@ -121,7 +121,7 @@ Item { onVisualsPausedChanged:{ if(window.checkWallpaperVisible){ - webView.visible = visualsPaused + webView.visible = !visualsPaused } } diff --git a/ScreenPlayWallpaper/src/winwindow.cpp b/ScreenPlayWallpaper/src/winwindow.cpp index bb25b646..3bbab13d 100644 --- a/ScreenPlayWallpaper/src/winwindow.cpp +++ b/ScreenPlayWallpaper/src/winwindow.cpp @@ -17,7 +17,6 @@ HHOOK mouseHook; QQuickView* winGlobalHook = nullptr; - LRESULT __stdcall MouseHookCallback(int nCode, WPARAM wParam, LPARAM lParam) { Qt::MouseButton mouseButton {}; @@ -68,8 +67,6 @@ LRESULT __stdcall MouseHookCallback(int nCode, WPARAM wParam, LPARAM lParam) auto* app = QApplication::instance(); app->sendEvent(winGlobalHook, &eventRelease); - - qDebug() << mouseButton << mouseButtons; }); } @@ -144,7 +141,9 @@ WinWindow::WinWindow( m_checkForFullScreenWindowTimer.start(10); } - setupWindowMouseHook(); + QTimer::singleShot(1000, [this]() { + setupWindowMouseHook(); + }); } void WinWindow::setVisible(bool show) @@ -303,50 +302,31 @@ int GetMonitorIndex(HMONITOR hMonitor) void WinWindow::checkForFullScreenWindow() { - // If one screen: - { - auto hWnd = GetForegroundWindow(); - DWORD dwStyle = (DWORD)GetWindowLong(hWnd, GWL_STYLE); - int screensCount = QGuiApplication::screens().length(); - if (screensCount == 1) { + HWND hFoundWnd = nullptr; + EnumWindows(&FindTheDesiredWnd, reinterpret_cast(&hFoundWnd)); + // True if one window has WS_MAXIMIZE + if (hFoundWnd != nullptr) { + DWORD dwFlags = 0; + HMONITOR monitor = MonitorFromWindow(hFoundWnd, dwFlags); + HMONITOR wallpaper = MonitorFromWindow(m_windowHandle, dwFlags); + int monitorIndex = GetMonitorIndex(monitor); + int wallpaperIndex = GetMonitorIndex(wallpaper); + // qDebug() << "Window found " << printWindowNameByhWnd(hFoundWnd) << monitorIndex << activeScreensList().at(0) << wallpaperIndex; - if ((dwStyle & WS_MAXIMIZE) != 0) { - // do stuff - setVisualsPaused(false); - } else { + // We do not support autopause for multi monitor wallpaper + if (activeScreensList().length() == 1) { + // If the window that has WS_MAXIMIZE is at the same monitor as this wallpaper + if (monitorIndex == wallpaperIndex) { + //qDebug() << "monitorIndex" << monitorIndex; setVisualsPaused(true); + } else { + setVisualsPaused(false); } - - return; } - } - // If multiple screens: - { - HWND hFoundWnd = nullptr; - EnumWindows(&FindTheDesiredWnd, reinterpret_cast(&hFoundWnd)); - // True if one window has WS_MAXIMIZE - if (hFoundWnd != nullptr) { - DWORD dwFlags = 0; - HMONITOR monitor = MonitorFromWindow(hFoundWnd, dwFlags); - int monitorIndex = GetMonitorIndex(monitor); - // qDebug() << "Window found " << printWindowNameByhWnd(hFoundWnd) << monitorIndex << activeScreensList().at(0); - - // We do not support autopause for multi monitor wallpaper - if (activeScreensList().length() == 1) { - // If the window that has WS_MAXIMIZE is at the same monitor as this wallpaper - if (monitorIndex == activeScreensList().at(0)) { - // qDebug() << "monitorIndex" << monitorIndex; - setVisualsPaused(false); - } else { - setVisualsPaused(true); - } - } - - } else { - setVisualsPaused(true); - } + } else { + setVisualsPaused(false); } }