From 4fff634d505eb1ed1ca5062cf169456035c69787 Mon Sep 17 00:00:00 2001 From: Dale Glass Date: Fri, 6 Jan 2023 17:30:13 +0100 Subject: [PATCH 1/6] Remove call to non-existing function close() in QML ComboBox This causes the following error: ComboBox.qml:53: ReferenceError: close is not defined And seems to be definitely incorrect. --- interface/resources/qml/controlsUit/ComboBox.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/controlsUit/ComboBox.qml b/interface/resources/qml/controlsUit/ComboBox.qml index 1a904df89d..cd1525657e 100644 --- a/interface/resources/qml/controlsUit/ComboBox.qml +++ b/interface/resources/qml/controlsUit/ComboBox.qml @@ -50,8 +50,8 @@ FocusScope { function previousItem() { root.currentHighLightedIndex = (root.currentHighLightedIndex + comboBox.count - 1) % comboBox.count; } function nextItem() { root.currentHighLightedIndex = (root.currentHighLightedIndex + comboBox.count + 1) % comboBox.count; } - function selectCurrentItem() { root.currentIndex = root.currentHighLightedIndex; close(); /*hideList();*/ } - function selectSpecificItem(index) { root.currentIndex = index; close();/*hideList();*/ } + function selectCurrentItem() { root.currentIndex = root.currentHighLightedIndex; /*hideList();*/ } + function selectSpecificItem(index) { root.currentIndex = index; /*hideList();*/ } Keys.onUpPressed: previousItem(); Keys.onDownPressed: nextItem(); From 8884988336d047992f484ed2d194e881e7b22560 Mon Sep 17 00:00:00 2001 From: Dale Glass Date: Fri, 6 Jan 2023 17:31:34 +0100 Subject: [PATCH 2/6] Add an option to choose which screen to use for full screen mode --- .../dialogs/graphics/GraphicsSettings.qml | 124 ++++++++++++++++-- .../scripting/RenderScriptingInterface.cpp | 46 +++++++ .../src/scripting/RenderScriptingInterface.h | 35 ++++- .../Basic2DWindowOpenGLDisplayPlugin.cpp | 12 +- 4 files changed, 200 insertions(+), 17 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/graphics/GraphicsSettings.qml b/interface/resources/qml/hifi/dialogs/graphics/GraphicsSettings.qml index 6235747a1c..c1901d0d79 100644 --- a/interface/resources/qml/hifi/dialogs/graphics/GraphicsSettings.qml +++ b/interface/resources/qml/hifi/dialogs/graphics/GraphicsSettings.qml @@ -155,7 +155,7 @@ Item { text: "Full World Detail" } } - + HifiControlsUit.ComboBox { id: worldDetailDropdown enabled: performanceCustom.checked @@ -175,7 +175,7 @@ Item { Component.onCompleted: { worldDetailDropdown.refreshWorldDetailDropdown(); } - + onCurrentIndexChanged: { LODManager.worldDetailQuality = currentIndex; worldDetailDropdown.displayText = model.get(currentIndex).text; @@ -337,7 +337,7 @@ Item { refreshRatePreset: 2 // RefreshRateProfile::REALTIME } } - + HifiControlsUit.ComboBox { id: refreshRateDropdown enabled: performanceCustom.checked @@ -363,7 +363,7 @@ Item { Component.onCompleted: { refreshRateDropdown.refreshRefreshRateDropdownDisplay(); } - + onCurrentIndexChanged: { Performance.setRefreshRateProfile(model.get(currentIndex).refreshRatePreset); refreshRateDropdown.displayText = model.get(currentIndex).text; @@ -386,14 +386,14 @@ Item { size: 16 color: "#FFFFFF" } - + HifiControlsUit.Slider { id: resolutionScaleSlider enabled: performanceCustom.checked anchors.left: resolutionHeader.right anchors.leftMargin: 57 anchors.top: parent.top - width: 150 + width: 150 height: parent.height colorScheme: hifi.colorSchemes.dark minimumValue: 0.25 @@ -424,11 +424,11 @@ Item { Layout.topMargin: 20 Layout.preferredWidth: parent.width spacing: 0 - + Item { Layout.preferredWidth: parent.width Layout.preferredHeight: 35 - + HifiStylesUit.RalewayRegular { id: antialiasingHeader text: "Anti-aliasing" @@ -454,7 +454,7 @@ Item { text: "FXAA" } } - + HifiControlsUit.ComboBox { id: antialiasingDropdown anchors.left: antialiasingHeader.right @@ -465,15 +465,15 @@ Item { colorScheme: hifi.colorSchemes.dark model: antialiasingModel currentIndex: -1 - + function refreshAntialiasingDropdown() { antialiasingDropdown.currentIndex = Render.antialiasingMode; } - + Component.onCompleted: { antialiasingDropdown.refreshAntialiasingDropdown(); } - + onCurrentIndexChanged: { Render.antialiasingMode = currentIndex; antialiasingDropdown.displayText = model.get(currentIndex).text; @@ -481,6 +481,106 @@ Item { } } } + + ColumnLayout { + Layout.topMargin: 20 + Layout.preferredWidth: parent.width + spacing: 0 + + Item { + Layout.preferredWidth: parent.width + Layout.preferredHeight: 35 + + HifiStylesUit.RalewayRegular { + id: fullScreenDisplayHeader + text: "Full screen display" + anchors.left: parent.left + anchors.top: parent.top + width: 130 + height: parent.height + size: 16 + color: "#FFFFFF" + } + + ListModel { + id: fullScreenDisplayModel + + ListElement { + text: "Screen 1" + } + + function refreshScreens() { + fullScreenDisplayModel.clear(); + Render.getScreens().forEach(function(screen) { + fullScreenDisplayModel.append({"text" : screen}); + }); + } + + Component.onCompleted: { + fullScreenDisplayModel.refreshScreens(); + } + } + + HifiControlsUit.ComboBox { + id: fullScreenDisplayDropdown + anchors.left: fullScreenDisplayHeader.right + anchors.leftMargin: 20 + anchors.top: parent.top + width: 280 + height: parent.height + colorScheme: hifi.colorSchemes.dark + model: fullScreenDisplayModel + currentIndex: 0 + + function refreshFullScreenDisplayDropdown() { + var screens = Render.getScreens(); + var selected = Render.getFullScreenScreen(); + + for(let idx = 0; idx < screens.length; idx++) { + if (screens[idx] == selected) { + fullScreenDisplayDropdown.currentIndex = idx; + return; + } + } + + console.log("Selected full screen screen", selected, "not found, falling back to primary screen"); + console.log("List of screens is:", screens); + fullScreenDisplayDropdown.currentIndex = 0; + } + + Component.onCompleted: { + model.refreshScreens(); + fullScreenDisplayDropdown.refreshFullScreenDisplayDropdown(); + fullScreenDisplayDropdown.displayText = model.get(currentIndex).text; + } + + onCurrentIndexChanged: { + if (currentIndex >= 0) { + // Somehow, we end up going through here twice on every change of the combo box. + // The first one is with the new selected index, and the second one is with the + // index at -1. + // + // The first one comes from a sensible stack of: + // onCurrentIndexChanged (qrc:/qml/hifi/dialogs/graphics/GraphicsSettings.qml:559) + // refreshScreens (qrc:/qml/hifi/dialogs/graphics/GraphicsSettings.qml:514) + // onCompleted (qrc:/qml/hifi/dialogs/graphics/GraphicsSettings.qml:553) + // load (qrc:/qml/hifi/tablet/WindowRoot.qml:170) + // loadSource (qrc:/qml/hifi/tablet/WindowRoot.qml:63) + // + // The second seems to be called out of nowhere. This likely indicates some sort of bug. + // Might be related to Wayland? + + Render.setFullScreenScreen(model.get(currentIndex).text); + fullScreenDisplayDropdown.displayText = model.get(currentIndex).text; + } else { + console.log("Called with currentIndex =", currentIndex); + console.trace(); + } + } + } + } + } + } } diff --git a/interface/src/scripting/RenderScriptingInterface.cpp b/interface/src/scripting/RenderScriptingInterface.cpp index de56ffb321..515aeb8c29 100644 --- a/interface/src/scripting/RenderScriptingInterface.cpp +++ b/interface/src/scripting/RenderScriptingInterface.cpp @@ -8,6 +8,7 @@ #include "RenderScriptingInterface.h" #include "LightingModel.h" +#include RenderScriptingInterface* RenderScriptingInterface::getInstance() { @@ -31,7 +32,17 @@ void RenderScriptingInterface::loadSettings() { //_antialiasingMode = (_antialiasingModeSetting.get()); _antialiasingMode = static_cast(_antialiasingModeSetting.get()); _viewportResolutionScale = (_viewportResolutionScaleSetting.get()); + _fullScreenScreen = (_fullScreenScreenSetting.get()); }); + + // If full screen screen is not initialized, or set to an invalid value, + // set to the first screen. + auto screens = getScreens(); + if (std::find(screens.begin(), screens.end(), _fullScreenScreen) == screens.end()) { + setFullScreenScreen(screens.first()); + } + + forceRenderMethod((RenderMethod)_renderMethod); forceShadowsEnabled(_shadowsEnabled); forceAmbientOcclusionEnabled(_ambientOcclusionEnabled); @@ -193,6 +204,41 @@ void RenderScriptingInterface::setViewportResolutionScale(float scale) { } } +QStringList RenderScriptingInterface::getScreens() const { + QStringList screens; + + for(QScreen *screen : qApp->screens()) { + screens << screen->model(); + } + + return screens; +} + +bool RenderScriptingInterface::setFullScreenScreen(QString name) { + auto screens = getScreens(); + + if (std::find(screens.begin(), screens.end(), name) == screens.end()) { + // Screens can come and go and don't have a stable opaque ID, so we + // go by model here. For multiple screens with the same model we get names + // that include a serial number, so it works. + return false; + } + + _renderSettingLock.withWriteLock([&] { + _fullScreenScreen = name; + _fullScreenScreenSetting.set(name); + }); + + emit settingsChanged(); + + return true; +} + +QString RenderScriptingInterface::getFullScreenScreen() const { + return _fullScreenScreen; +} + + void RenderScriptingInterface::forceViewportResolutionScale(float scale) { // just not negative values or zero if (scale <= 0.f) { diff --git a/interface/src/scripting/RenderScriptingInterface.h b/interface/src/scripting/RenderScriptingInterface.h index 62c50b10f1..f107ae06d4 100644 --- a/interface/src/scripting/RenderScriptingInterface.h +++ b/interface/src/scripting/RenderScriptingInterface.h @@ -27,7 +27,7 @@ * * @property {Render.RenderMethod} renderMethod - The render method being used. * @property {boolean} shadowsEnabled - true if shadows are enabled, false if they're disabled. - * @property {boolean} ambientOcclusionEnabled - true if ambient occlusion is enabled, false if it's + * @property {boolean} ambientOcclusionEnabled - true if ambient occlusion is enabled, false if it's * disabled. * @property {integer} antialiasingMode - The active anti-aliasing mode. * @property {number} viewportResolutionScale - The view port resolution scale, > 0.0. @@ -52,9 +52,9 @@ public: * ValueNameDescription * * - * 0DEFERREDMore complex rendering pipeline where lighting is applied to the + * 0DEFERREDMore complex rendering pipeline where lighting is applied to the * scene as a whole after all objects have been rendered. - * 1FORWARDSimpler rendering pipeline where each object in the scene, in turn, + * 1FORWARDSimpler rendering pipeline where each object in the scene, in turn, * is rendered and has lighting applied. * * @@ -172,8 +172,32 @@ public slots: */ void setViewportResolutionScale(float resolutionScale); + /*@jsdoc + * Returns the list of screens + * @function Render.getScreens + * @returns {string[]} The names of the available screens + */ + QStringList getScreens() const; + + /*@jsdoc + * Gets the screen used when switching to full screen mode + * @function Render.getFullScreenScreen + * @returns {string} The name of the screen used for full screen mode + */ + QString getFullScreenScreen() const; + + /*@jsdoc + * Sets the screen used when switching to full screen mode + * This function will only succeed if the name passed is one of the entries from Render.getScreens. + * Otherwise, it will return False and have no effect. + * + * @function Render.setFullScreenScreen + * @returns {bool} True if the setting was successful + */ + bool setFullScreenScreen(QString name); + signals: - + /*@jsdoc * Triggered when one of the Render API's properties changes. * @function Render.settingsChanged @@ -196,6 +220,8 @@ private: bool _ambientOcclusionEnabled{ false }; AntialiasingConfig::Mode _antialiasingMode{ AntialiasingConfig::Mode::NONE }; float _viewportResolutionScale{ 1.0f }; + QString _fullScreenScreen; + // Actual settings saved on disk Setting::Handle _renderMethodSetting { "renderMethod", RENDER_FORWARD ? render::Args::RenderMethod::FORWARD : render::Args::RenderMethod::DEFERRED }; @@ -204,6 +230,7 @@ private: //Setting::Handle _antialiasingModeSetting { "antialiasingMode", AntialiasingConfig::Mode::TAA }; Setting::Handle _antialiasingModeSetting { "antialiasingMode", AntialiasingConfig::Mode::NONE }; Setting::Handle _viewportResolutionScaleSetting { "viewportResolutionScale", 1.0f }; + Setting::Handle _fullScreenScreenSetting { "fullScreenScreen", "" }; // Force assign both setting AND runtime value to the parameter value void forceRenderMethod(RenderMethod renderMethod); diff --git a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp index a35496f88e..a278f0cad9 100644 --- a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp @@ -18,6 +18,7 @@ #include #include +#include "SettingHandle.h" const QString Basic2DWindowOpenGLDisplayPlugin::NAME("Desktop"); @@ -165,8 +166,17 @@ bool Basic2DWindowOpenGLDisplayPlugin::isThrottled() const { return _isThrottled; } -// FIXME target the screen the window is currently on QScreen* Basic2DWindowOpenGLDisplayPlugin::getFullscreenTarget() { + Setting::Handle _fullScreenScreenSetting { "fullScreenScreen", "" }; + QString selectedModel = _fullScreenScreenSetting.get(); + + for(QScreen *screen : qApp->screens()) { + if (screen->model() == selectedModel) { + return screen; + } + } + + qWarning() << "Failed to find selected screen" << selectedModel << "for full screen mode, using primary screen"; return qApp->primaryScreen(); } From de36c716c895bc98567a6f4619f2fa7b3a131281 Mon Sep 17 00:00:00 2001 From: Dale Glass Date: Fri, 6 Jan 2023 20:35:57 +0100 Subject: [PATCH 3/6] Try to make screen descriptions include more info --- interface/src/scripting/RenderScriptingInterface.cpp | 2 +- interface/src/scripting/RenderScriptingInterface.h | 6 +++++- .../display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp | 8 +++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/interface/src/scripting/RenderScriptingInterface.cpp b/interface/src/scripting/RenderScriptingInterface.cpp index 515aeb8c29..76375b0eda 100644 --- a/interface/src/scripting/RenderScriptingInterface.cpp +++ b/interface/src/scripting/RenderScriptingInterface.cpp @@ -208,7 +208,7 @@ QStringList RenderScriptingInterface::getScreens() const { QStringList screens; for(QScreen *screen : qApp->screens()) { - screens << screen->model(); + screens << getNameForScreen(screen); } return screens; diff --git a/interface/src/scripting/RenderScriptingInterface.h b/interface/src/scripting/RenderScriptingInterface.h index f107ae06d4..0596213f8d 100644 --- a/interface/src/scripting/RenderScriptingInterface.h +++ b/interface/src/scripting/RenderScriptingInterface.h @@ -14,7 +14,7 @@ #include "RenderForward.h" #include "AntialiasingEffect.h" - +#include /*@jsdoc * The Render API enables you to configure the graphics engine. @@ -74,6 +74,10 @@ public: // Need to be called on start up to re-initialize the runtime to the saved setting states void loadSettings(); + static QString getNameForScreen(QScreen *screen) { + return screen->model() + " (" + screen->name() + ", " + screen->serialNumber() + ")"; + } + public slots: /*@jsdoc * Gets the configuration for a rendering job by name. diff --git a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp index a278f0cad9..49e27966b4 100644 --- a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp @@ -20,6 +20,7 @@ #include #include "SettingHandle.h" + const QString Basic2DWindowOpenGLDisplayPlugin::NAME("Desktop"); static const QString FULLSCREEN = "Fullscreen"; @@ -166,12 +167,17 @@ bool Basic2DWindowOpenGLDisplayPlugin::isThrottled() const { return _isThrottled; } + +static QString getNameForScreen(QScreen *screen) { + return screen->model() + " (" + screen->name() + ", " + screen->serialNumber() + ")"; +} + QScreen* Basic2DWindowOpenGLDisplayPlugin::getFullscreenTarget() { Setting::Handle _fullScreenScreenSetting { "fullScreenScreen", "" }; QString selectedModel = _fullScreenScreenSetting.get(); for(QScreen *screen : qApp->screens()) { - if (screen->model() == selectedModel) { + if (getNameForScreen(screen) == selectedModel) { return screen; } } From 1cf3756c84ed2876ec2c2682b247d910e219c92a Mon Sep 17 00:00:00 2001 From: Dale Glass Date: Sat, 7 Jan 2023 19:35:52 +0100 Subject: [PATCH 4/6] Move screen naming to UI library, and improve naming --- .../scripting/RenderScriptingInterface.cpp | 4 +- .../src/scripting/RenderScriptingInterface.h | 3 -- .../Basic2DWindowOpenGLDisplayPlugin.cpp | 8 +-- libraries/ui/src/ScreenName.cpp | 49 +++++++++++++++++++ libraries/ui/src/ScreenName.h | 32 ++++++++++++ 5 files changed, 86 insertions(+), 10 deletions(-) create mode 100644 libraries/ui/src/ScreenName.cpp create mode 100644 libraries/ui/src/ScreenName.h diff --git a/interface/src/scripting/RenderScriptingInterface.cpp b/interface/src/scripting/RenderScriptingInterface.cpp index 76375b0eda..b4b1b9864e 100644 --- a/interface/src/scripting/RenderScriptingInterface.cpp +++ b/interface/src/scripting/RenderScriptingInterface.cpp @@ -9,6 +9,7 @@ #include "LightingModel.h" #include +#include "ScreenName.h" RenderScriptingInterface* RenderScriptingInterface::getInstance() { @@ -24,6 +25,7 @@ RenderScriptingInterface::RenderScriptingInterface() { }); } + void RenderScriptingInterface::loadSettings() { _renderSettingLock.withReadLock([&] { _renderMethod = (_renderMethodSetting.get()); @@ -208,7 +210,7 @@ QStringList RenderScriptingInterface::getScreens() const { QStringList screens; for(QScreen *screen : qApp->screens()) { - screens << getNameForScreen(screen); + screens << ScreenName::getNameForScreen(screen); } return screens; diff --git a/interface/src/scripting/RenderScriptingInterface.h b/interface/src/scripting/RenderScriptingInterface.h index 0596213f8d..27088daf97 100644 --- a/interface/src/scripting/RenderScriptingInterface.h +++ b/interface/src/scripting/RenderScriptingInterface.h @@ -74,9 +74,6 @@ public: // Need to be called on start up to re-initialize the runtime to the saved setting states void loadSettings(); - static QString getNameForScreen(QScreen *screen) { - return screen->model() + " (" + screen->name() + ", " + screen->serialNumber() + ")"; - } public slots: /*@jsdoc diff --git a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp index 49e27966b4..024d9a0ab6 100644 --- a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp @@ -19,6 +19,7 @@ #include #include #include "SettingHandle.h" +#include "ScreenName.h" const QString Basic2DWindowOpenGLDisplayPlugin::NAME("Desktop"); @@ -167,17 +168,12 @@ bool Basic2DWindowOpenGLDisplayPlugin::isThrottled() const { return _isThrottled; } - -static QString getNameForScreen(QScreen *screen) { - return screen->model() + " (" + screen->name() + ", " + screen->serialNumber() + ")"; -} - QScreen* Basic2DWindowOpenGLDisplayPlugin::getFullscreenTarget() { Setting::Handle _fullScreenScreenSetting { "fullScreenScreen", "" }; QString selectedModel = _fullScreenScreenSetting.get(); for(QScreen *screen : qApp->screens()) { - if (getNameForScreen(screen) == selectedModel) { + if (ScreenName::getNameForScreen(screen) == selectedModel) { return screen; } } diff --git a/libraries/ui/src/ScreenName.cpp b/libraries/ui/src/ScreenName.cpp new file mode 100644 index 0000000000..84fea3d2bb --- /dev/null +++ b/libraries/ui/src/ScreenName.cpp @@ -0,0 +1,49 @@ +// +// Created by Dale Glass on 7/01/2023 +// Copyright 2022 Overte e.V. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "ScreenName.h" + +QString ScreenName::getNameForScreen(QScreen *screen) { + // The data provided by QScreen isn't as convenient as it could be. + // So far testing shows: + // + // Windows: + // model() returns an empty string + // name() returns something like \\.\DISPLAY1 + // + // Linux: + // model() returns a name, like "LG Ultra HD/525000" + // name() returns the output's name, like "HDMI1" + + // So we try to assemble something unique and readable from all the possibilities. + + QString ret; + bool addParens = false; + + ret.append(screen->manufacturer()); + + if (!ret.isEmpty()) { + ret.append(" - "); + } + ret.append(screen->model()); + + addParens = !ret.isEmpty(); + + if(addParens) { + ret.append(" ("); + } + + ret.append(screen->name().replace(QString("\\\\.\\"), QString(""))); + + + if(addParens) { + ret.append(")"); + } + + return ret; +} diff --git a/libraries/ui/src/ScreenName.h b/libraries/ui/src/ScreenName.h new file mode 100644 index 0000000000..e8c08712cb --- /dev/null +++ b/libraries/ui/src/ScreenName.h @@ -0,0 +1,32 @@ +// +// Created by Dale Glass on 7/01/2023 +// Copyright 2022 Overte e.V. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include +#include +#pragma once + +/** + * @brief Screen naming + * + * This class exists because display-plugins and interface need to share the same, + * fairly involved rule for converting QScreen data to user-facing text. + */ +class ScreenName { + public: + /** + * @brief Get a descriptive name for a screen + * + * This is used in the graphics settings, to name monitors. This function tries to generate + * human friendly and unique, even if two identical monitors are present. + * + * @param screen Screen to provide a name for + * @return QString Descriptive name for the screen + */ + static QString getNameForScreen(QScreen *screen); + +}; From 8e7b99811e7296bd13833f8f03f7d7282a27ba4e Mon Sep 17 00:00:00 2001 From: Dale Glass <51060919+daleglass@users.noreply.github.com> Date: Sat, 7 Jan 2023 20:49:30 +0100 Subject: [PATCH 5/6] Update libraries/ui/src/ScreenName.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julian Groß --- libraries/ui/src/ScreenName.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/ui/src/ScreenName.cpp b/libraries/ui/src/ScreenName.cpp index 84fea3d2bb..c76b51894c 100644 --- a/libraries/ui/src/ScreenName.cpp +++ b/libraries/ui/src/ScreenName.cpp @@ -1,6 +1,6 @@ // // Created by Dale Glass on 7/01/2023 -// Copyright 2022 Overte e.V. +// Copyright 2023 Overte e.V. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html From bd1fc19bac0e2cc2c868816ee039fc6e68124d1d Mon Sep 17 00:00:00 2001 From: Dale Glass <51060919+daleglass@users.noreply.github.com> Date: Sat, 7 Jan 2023 20:49:36 +0100 Subject: [PATCH 6/6] Update libraries/ui/src/ScreenName.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julian Groß --- libraries/ui/src/ScreenName.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/ui/src/ScreenName.h b/libraries/ui/src/ScreenName.h index e8c08712cb..6a35b5f1c9 100644 --- a/libraries/ui/src/ScreenName.h +++ b/libraries/ui/src/ScreenName.h @@ -1,6 +1,6 @@ // // Created by Dale Glass on 7/01/2023 -// Copyright 2022 Overte e.V. +// Copyright 2023 Overte e.V. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html