Compare commits
	
		
			27 Commits
		
	
	
		
			1.2.0-beta
			...
			EricKotato
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 69792c063d | ||
| e3c2e024bb | |||
|   | b69610d7f3 | ||
| 92a768d6f1 | |||
|   | 5ecd7d754d | ||
|   | e3161f64f6 | ||
|   | 5b0b091ab6 | ||
|   | 4fdf28fb79 | ||
| 49213a1cf0 | |||
| e30db231f6 | |||
| 6609c4867f | |||
|   | 84c5e8bca6 | ||
| 1a25749315 | |||
|   | 3852f5995d | ||
| 9093b7a16e | |||
| afead1c2c0 | |||
| 1b2572f381 | |||
|   | 27ca6b3f73 | ||
|   | f157648d1e | ||
|   | d4baaeccfc | ||
|   | d412b66c6e | ||
|   | 74ae511f92 | ||
|   | a3fbafe4ae | ||
|   | 8a45fbe9ed | ||
|   | 01c7929ee3 | ||
|   | 2261af17d7 | ||
|   | 41f34c3992 | 
							
								
								
									
										98
									
								
								.github/workflows/appimage.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								.github/workflows/appimage.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,98 @@ | ||||
| name: "ci" | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     tags: "**" | ||||
|   workflow_dispatch: | ||||
|  | ||||
| defaults: | ||||
|   run: | ||||
|     shell: bash | ||||
|  | ||||
| jobs: | ||||
|   appimage: | ||||
|     runs-on: ubuntu-18.04 | ||||
|  | ||||
|     steps: | ||||
|     - name: Checkout repository | ||||
|       uses: actions/checkout@v2 | ||||
|       with: | ||||
|         submodules: true | ||||
|  | ||||
|     - name: Install dependencies | ||||
|       run: | | ||||
|         sudo add-apt-repository -y ppa:beineri/opt-qt-5.15.2-bionic | ||||
|         sudo apt-get update -qq | ||||
|         sudo apt-get install -y \ | ||||
|         build-essential make wget libgl1-mesa-dev \ | ||||
|         qt515declarative qt515graphicaleffects \ | ||||
|         qt515quickcontrols qt515quickcontrols2 | ||||
|  | ||||
|     - name: Download QT appimage builder | ||||
|       run: | | ||||
|         wget -c -O linuxdeployqt.AppImage \ | ||||
|         https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage | ||||
|         chmod a+x linuxdeployqt.AppImage | ||||
|  | ||||
|     - name: Build project | ||||
|       run: | | ||||
|         source /opt/qt*/bin/qt*-env.sh && \ | ||||
|         qmake -v && \ | ||||
|         qmake CONFIG+=release PREFIX=/usr && \ | ||||
|         make -j$(nproc) | ||||
|  | ||||
|     - name: Install to appdir | ||||
|       run: | | ||||
|         source /opt/qt*/bin/qt*-env.sh && \ | ||||
|         make INSTALL_ROOT=appdir -j$(nproc) install | ||||
|  | ||||
|     - name: Extract version number | ||||
|       run: | | ||||
|         # Extract version for linuxdeployqt to name the file. Use the tag as | ||||
|         # release name but remove prefix. | ||||
|         echo "VERSION=$(echo '${{ github.ref }}' | sed 's;.*/;;')" >> $GITHUB_ENV | ||||
|  | ||||
|     - name: Build appimage directory | ||||
|       run: | | ||||
|         mkdir -p \ | ||||
|         appdir/usr/bin \ | ||||
|         appdir/usr/lib \ | ||||
|         appdir/usr/share/applications \ | ||||
|         appdir/usr/share/metainfo \ | ||||
|         appdir/usr/share/icons/hicolor/128x128/apps | ||||
|  | ||||
|         cp cool-retro-term appdir/usr/bin/ | ||||
|         cp cool-retro-term.desktop appdir/usr/share/applications/ | ||||
|         cp packaging/appdata/cool-retro-term.appdata.xml appdir/usr/share/metainfo/ | ||||
|         cp app/icons/128x128/cool-retro-term.png appdir/usr/share/icons/hicolor/128x128/apps/ | ||||
|         cp -r ./app/qml appdir/usr/ | ||||
|         # Workaround for https://github.com/probonopd/linuxdeployqt/issues/78 | ||||
|         cp -r ./qmltermwidget/QMLTermWidget appdir/usr/qml/ | ||||
|  | ||||
|         find appdir | sort | ||||
|  | ||||
|     - name: Build appimage | ||||
|       run: | | ||||
|         source /opt/qt*/bin/qt*-env.sh && \ | ||||
|         ./linuxdeployqt.AppImage appdir/usr/share/applications/cool-retro-term.desktop \ | ||||
|         -verbose=1 -appimage \ | ||||
|         -qmldir=./app/qml/ \ | ||||
|         -qmldir=./qmltermwidget/ | ||||
|       env: | ||||
|         # Unset environment variables | ||||
|         QTDIR: | ||||
|         QT_PLUGIN_PATH: | ||||
|         LD_LIBRARY_PATH: | ||||
|  | ||||
|     - name: Upload release | ||||
|       uses: softprops/action-gh-release@v1 | ||||
|       with: | ||||
|         body: appimage release | ||||
|         files: ./**/Cool_Retro_Term-*-x86_64.AppImage | ||||
|  | ||||
|     - name: Clean up | ||||
|       if: always() | ||||
|       run: | | ||||
|         find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq | ||||
|         make clean | ||||
|         rm -rf appdir | ||||
							
								
								
									
										192
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										192
									
								
								README.md
									
									
									
									
									
								
							| @@ -8,9 +8,9 @@ | ||||
| cool-retro-term is a terminal emulator which mimics the look and feel of the old cathode tube screens. | ||||
| It has been designed to be eye-candy, customizable, and reasonably lightweight. | ||||
|  | ||||
| It uses the QML port of qtermwidget (Konsole) developed by me: https://github.com/Swordfish90/qmltermwidget. | ||||
| It uses the QML port of qtermwidget (Konsole): https://github.com/Swordfish90/qmltermwidget. | ||||
|  | ||||
| This terminal emulator works under Linux and macOS and requires Qt 5.2 or higher. | ||||
| This terminal emulator works under Linux and macOS and requires Qt5. It's suggested that you stick to the latest LTS version. | ||||
|  | ||||
| Settings such as colors, fonts, and effects can be accessed via context menu. | ||||
|  | ||||
| @@ -20,191 +20,11 @@ Settings such as colors, fonts, and effects can be accessed via context menu. | ||||
|  | ||||
|  | ||||
| ## Install | ||||
| Walk the easy way and install cool-retro-term using one of these convenient packages: | ||||
|  | ||||
| Just grab the latest AppImage from the release page and make it executable and run it: | ||||
| If you want to get a hold of the latest version, just go to the Releases page and grab the latest AppImage (Linux) or dmg (macOS). | ||||
|  | ||||
|     wget https://github.com/Swordfish90/cool-retro-term/releases/download/1.1.1/Cool-Retro-Term-1.1.1-x86_64.AppImage | ||||
|     chmod a+x Cool-Retro-Term-1.1.1-x86_64.AppImage | ||||
|     ./Cool-Retro-Term-1.1.1-x86_64.AppImage | ||||
| Alternatively, most distributions such as Ubuntu, Fedora or Arch already package cool-retro-term in their official repositories. | ||||
|  | ||||
| **Fedora** has the `cool-retro-term` in the official repositories. All you have to do is `sudo dnf install cool-retro-term`. | ||||
| ## Building | ||||
|  | ||||
| Users of **openSUSE** can grab a package from [Open Build Service](http://software.opensuse.org/package/cool-retro-term). | ||||
|  | ||||
| **Arch** users can install this [package](https://aur.archlinux.org/packages/cool-retro-term-git/) directly via the [AUR](https://aur.archlinux.org): | ||||
|  | ||||
|     trizen -S aur/cool-retro-term-git | ||||
|  | ||||
| or use: | ||||
|  | ||||
|     pacman -S cool-retro-term | ||||
|  | ||||
| to install precompiled from community repository. | ||||
|  | ||||
| Users of **Ubuntu 14.04 LTS (Trusty) up to 15.10 (Wily)** can use [this PPA](https://launchpad.net/~bugs-launchpad-net-falkensweb). | ||||
|  | ||||
| **Ubuntu 17.10** can use [this PPA](https://launchpad.net/%7Evantuz/+archive/ubuntu/cool-retro-term) | ||||
|  | ||||
| **Solus** users can install using `eopg`: | ||||
| ``` | ||||
| eopkg it cool-retro-term | ||||
| ``` | ||||
|  | ||||
| **macOS** users can grab the latest dmg from the [release page](https://github.com/Swordfish90/cool-retro-term/releases) or install via Homebrew or MacPorts: | ||||
| ``` | ||||
| brew install cool-retro-term --cask | ||||
| ``` | ||||
| or | ||||
| ``` | ||||
| port install cool-retro-term | ||||
| ``` | ||||
|  | ||||
| **FreeBSD** users can install cool-retro-term with `pkg`: | ||||
|  | ||||
|     pkg install cool-retro-term | ||||
|      | ||||
| ## Build instructions (FreeBSD) | ||||
|  | ||||
| Grab a copy of [the FreeBSD Ports Collection](https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ports-using.html), modify [`/usr/ports/x11/cool-retro-term/Makefile`](https://svnweb.freebsd.org/ports/head/x11/cool-retro-term/Makefile?view=markup) as you like, and then run `make install` to build and install the emulator: | ||||
|  | ||||
| ``` | ||||
| cd /usr/ports/x11/cool-retro-term | ||||
| make install | ||||
| ``` | ||||
|  | ||||
| ## Build instructions (Linux) | ||||
|  | ||||
| Build cool-retro-term yourself, you know, the retro way. | ||||
|  | ||||
| ## Dependencies | ||||
| Make sure to install these first. | ||||
|  | ||||
| --- | ||||
|  | ||||
| **Ubuntu 14.04** | ||||
|  | ||||
|     sudo apt-get install build-essential qmlscene qt5-qmake qt5-default qtdeclarative5-dev qtdeclarative5-controls-plugin qtdeclarative5-qtquick2-plugin libqt5qml-graphicaleffects qtdeclarative5-dialogs-plugin qtdeclarative5-localstorage-plugin qtdeclarative5-window-plugin | ||||
|  | ||||
| --- | ||||
|  | ||||
| **Ubuntu 16.10** | ||||
|  | ||||
|     sudo apt-get install build-essential qmlscene qt5-qmake qt5-default qtdeclarative5-dev qml-module-qtquick-controls qtdeclarative5-qtquick2-plugin libqt5qml-graphicaleffects qml-module-qtquick-dialogs qtdeclarative5-localstorage-plugin qtdeclarative5-window-plugin | ||||
|  | ||||
| --- | ||||
|  | ||||
| **Ubuntu 17.04** | ||||
|  | ||||
|     sudo apt install build-essential libqt5qml-graphicaleffects qml-module-qt-labs-folderlistmodel qml-module-qt-labs-settings qml-module-qtquick-controls qml-module-qtquick-dialogs qmlscene qt5-default qt5-qmake qtdeclarative5-dev qtdeclarative5-localstorage-plugin qtdeclarative5-qtquick2-plugin qtdeclarative5-window-plugin | ||||
|  | ||||
| --- | ||||
|  | ||||
| **Ubuntu 17.10** | ||||
|  | ||||
|     sudo apt-get install build-essential qml-module-qtgraphicaleffects qml-module-qt-labs-folderlistmodel qml-module-qt-labs-settings qml-module-qtquick-controls qml-module-qtquick-dialogs qmlscene qt5-default qt5-qmake qtdeclarative5-dev qtdeclarative5-localstorage-plugin qtdeclarative5-qtquick2-plugin qtdeclarative5-window-plugin | ||||
|  | ||||
| --- | ||||
|  | ||||
| **snapcraft (most of distros)** | ||||
|  | ||||
|     sudo snap install cool-retro-term --classic | ||||
|  | ||||
| --- | ||||
|  | ||||
| **Debian Jessie and above** | ||||
|  | ||||
|     sudo apt install build-essential qmlscene qt5-qmake qt5-default qtdeclarative5-dev qml-module-qtquick-controls qml-module-qtgraphicaleffects qml-module-qtquick-dialogs qml-module-qtquick-localstorage qml-module-qtquick-window2 qml-module-qt-labs-settings qml-module-qt-labs-folderlistmodel | ||||
|  | ||||
| --- | ||||
|  | ||||
| **Fedora** | ||||
| This command should install the known fedora dependencies: | ||||
|  | ||||
|     sudo yum -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols redhat-rpm-config | ||||
|  | ||||
| or: | ||||
|  | ||||
|     sudo dnf -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols redhat-rpm-config | ||||
|  | ||||
| --- | ||||
|  | ||||
| **Arch Linux** | ||||
|  | ||||
|     sudo pacman -S qt5-base qt5-declarative qt5-quickcontrols qt5-graphicaleffects | ||||
|      | ||||
| --- | ||||
|  | ||||
| **openSUSE** | ||||
|  | ||||
| Add repository with latest Qt 5 (this is only needed on openSUSE 13.1, Factory already has it): | ||||
|  | ||||
|     sudo zypper ar http://download.opensuse.org/repositories/KDE:/Qt5/openSUSE_13.1/ KDE:Qt5 | ||||
|  | ||||
| Install dependencies: | ||||
|  | ||||
|     sudo zypper install libqt5-qtbase-devel libqt5-qtdeclarative-devel libqt5-qtquickcontrols libqt5-qtgraphicaleffects | ||||
|  | ||||
| --- | ||||
|  | ||||
| **Anyone else** | ||||
|  | ||||
| Install Qt directly from here http://qt-project.org/downloads . Once done export them in you path (replace "_/opt/Qt5.3.1/5.3/gcc_64/bin_" with your correct folder): | ||||
|      | ||||
|     export PATH=/opt/Qt5.3.1/5.3/gcc_64/bin/:$PATH | ||||
| --- | ||||
|  | ||||
| ### Compile | ||||
| Once you installed all dependencies (Qt is installed and in your path) you need to compile and run the application:  | ||||
|  | ||||
| ```bash | ||||
| # Get it from GitHub | ||||
| git clone --recursive https://github.com/Swordfish90/cool-retro-term.git | ||||
|  | ||||
| # Build it | ||||
| cd cool-retro-term | ||||
|  | ||||
| # Compile (Fedora and OpenSUSE user should use qmake-qt5 instead of qmake) | ||||
| qmake && make | ||||
|  | ||||
| # Have fun! | ||||
| ./cool-retro-term | ||||
| ``` | ||||
|  | ||||
| ## Build instructions (macOS) | ||||
|  | ||||
| 1. Install [Xcode](https://developer.apple.com/xcode/) and agree to the licence agreement | ||||
| 2. Enter the following commands into the terminal: | ||||
|  | ||||
| **Brew** | ||||
|  | ||||
| ```sh | ||||
| brew install qt5 | ||||
| git clone --recursive https://github.com/Swordfish90/cool-retro-term.git | ||||
| export CPPFLAGS="-I/usr/local/opt/qt5/include" | ||||
| export LDFLAGS="-L/usr/local/opt/qt5/lib" | ||||
| export PATH=/usr/local/opt/qt5/bin:$PATH | ||||
| cd cool-retro-term | ||||
| qmake && make | ||||
| mkdir cool-retro-term.app/Contents/PlugIns | ||||
| cp -r qmltermwidget/QMLTermWidget cool-retro-term.app/Contents/PlugIns | ||||
| open cool-retro-term.app | ||||
| ``` | ||||
|  | ||||
| **MacPorts** | ||||
|  | ||||
| ```sh | ||||
| sudo port install qt5 | ||||
| git clone --recursive https://github.com/Swordfish90/cool-retro-term.git | ||||
| cd cool-retro-term | ||||
| /opt/local/libexec/qt5/bin/qmake && make | ||||
| mkdir cool-retro-term.app/Contents/PlugIns | ||||
| cp -r qmltermwidget/QMLTermWidget cool-retro-term.app/Contents/PlugIns | ||||
| open cool-retro-term.app | ||||
| ``` | ||||
|  | ||||
| **Homebrew** | ||||
|  | ||||
| ```sh | ||||
| brew install cool-retro-term --cask | ||||
| ``` | ||||
| Check out the wiki and follow the instructions on how to build it on [Linux](https://github.com/Swordfish90/cool-retro-term/wiki/Build-Instructions-(Linux)) and [macOS](https://github.com/Swordfish90/cool-retro-term/wiki/Build-Instructions-(macOS)). | ||||
|   | ||||
| @@ -16,7 +16,7 @@ macx:ICON = icons/crt.icns | ||||
| RESOURCES += qml/resources.qrc | ||||
|  | ||||
| ######################################### | ||||
| ##              INTALLS | ||||
| ##              INSTALLS | ||||
| ######################################### | ||||
|  | ||||
| target.path += /usr/bin/ | ||||
|   | ||||
							
								
								
									
										25
									
								
								app/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								app/main.cpp
									
									
									
									
									
								
							| @@ -47,28 +47,25 @@ int main(int argc, char *argv[]) | ||||
|     setenv("LC_CTYPE", "UTF-8", 1); | ||||
| #endif | ||||
|  | ||||
|     // Force fusion style on every platform | ||||
|     QQuickStyle::setStyle("Fusion"); | ||||
|  | ||||
|     if (argc>1 && (!strcmp(argv[1],"-h") || !strcmp(argv[1],"--help"))) { | ||||
|         QTextStream cout(stdout, QIODevice::WriteOnly); | ||||
|         cout << "Usage: " << argv[0] << " [--default-settings] [--workdir <dir>] [--program <prog>] [-p|--profile <prof>] [--fullscreen] [-h|--help]" << endl; | ||||
|         cout << "  --default-settings  Run cool-retro-term with the default settings" << endl; | ||||
|         cout << "  --workdir <dir>     Change working directory to 'dir'" << endl; | ||||
|         cout << "  -e <cmd>            Command to execute. This option will catch all following arguments, so use it as the last option." << endl; | ||||
|         cout << "  -T <title>          Set window title to 'title'." << endl; | ||||
|         cout << "  --fullscreen        Run cool-retro-term in fullscreen." << endl; | ||||
|         cout << "  -p|--profile <prof> Run cool-retro-term with the given profile." << endl; | ||||
|         cout << "  -h|--help           Print this help." << endl; | ||||
|         cout << "  --verbose           Print additional information such as profiles and settings." << endl; | ||||
|         cout << "Usage: " << argv[0] << " [--default-settings] [--workdir <dir>] [--program <prog>] [-p|--profile <prof>] [--fullscreen] [-h|--help]" << '\n'; | ||||
|         cout << "  --default-settings  Run cool-retro-term with the default settings" << '\n'; | ||||
|         cout << "  --workdir <dir>     Change working directory to 'dir'" << '\n'; | ||||
|         cout << "  -e <cmd>            Command to execute. This option will catch all following arguments, so use it as the last option." << '\n'; | ||||
|         cout << "  -T <title>          Set window title to 'title'." << '\n'; | ||||
|         cout << "  --fullscreen        Run cool-retro-term in fullscreen." << '\n'; | ||||
|         cout << "  -p|--profile <prof> Run cool-retro-term with the given profile." << '\n'; | ||||
|         cout << "  -h|--help           Print this help." << '\n'; | ||||
|         cout << "  --verbose           Print additional information such as profiles and settings." << '\n'; | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     QString appVersion("1.2.0-beta1"); | ||||
|     QString appVersion("1.2.0"); | ||||
|  | ||||
|     if (argc>1 && (!strcmp(argv[1],"-v") || !strcmp(argv[1],"--version"))) { | ||||
|         QTextStream cout(stdout, QIODevice::WriteOnly); | ||||
|         cout << "cool-retro-term " << appVersion << endl; | ||||
|         cout << "cool-retro-term " << appVersion << '\n'; | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -32,7 +32,7 @@ QtObject { | ||||
|     readonly property real maximumFontScaling: 2.50 | ||||
|  | ||||
|     readonly property real minBurnInFadeTime: 160 | ||||
|     readonly property real maxBurnInFadeTime: 1600 | ||||
|     readonly property real maxBurnInFadeTime: 160000 | ||||
|  | ||||
|     property bool isMacOS: Qt.platform.os === "osx" | ||||
|  | ||||
| @@ -71,6 +71,7 @@ QtObject { | ||||
|  | ||||
|     property string _backgroundColor: "#000000" | ||||
|     property string _fontColor: "#ff8100" | ||||
|     property string _frameColor: "#ffffff" | ||||
|     property string saturatedColor: Utils.mix(Utils.strToColor("#FFFFFF"), | ||||
|                                               Utils.strToColor(_fontColor), | ||||
|                                               saturationColor * 0.5) | ||||
| @@ -81,6 +82,7 @@ QtObject { | ||||
|                                                   _backgroundColor), | ||||
|                                               Utils.strToColor(saturatedColor), | ||||
|                                               0.7 + (contrast * 0.3)) | ||||
|     property color frameColor: Utils.strToColor(_frameColor) | ||||
|  | ||||
|     property real staticNoise: 0.12 | ||||
|     property real screenCurvature: 0.3 | ||||
| @@ -90,6 +92,7 @@ QtObject { | ||||
|  | ||||
|     property real chromaColor: 0.25 | ||||
|     property real saturationColor: 0.25 | ||||
|     property real frameGloss: 0 | ||||
|  | ||||
|     property real jitter: 0.2 | ||||
|  | ||||
| @@ -251,11 +254,13 @@ QtObject { | ||||
|         var settings = { | ||||
|             "backgroundColor": _backgroundColor, | ||||
|             "fontColor": _fontColor, | ||||
|             "frameColor": _frameColor, | ||||
|             "flickering": flickering, | ||||
|             "horizontalSync": horizontalSync, | ||||
|             "staticNoise": staticNoise, | ||||
|             "chromaColor": chromaColor, | ||||
|             "saturationColor": saturationColor, | ||||
|             "frameGloss": frameGloss, | ||||
|             "screenCurvature": screenCurvature, | ||||
|             "glowingLine": glowingLine, | ||||
|             "burnIn": burnIn, | ||||
| @@ -345,6 +350,7 @@ QtObject { | ||||
|         _backgroundColor = settings.backgroundColor | ||||
|                 !== undefined ? settings.backgroundColor : _backgroundColor | ||||
|         _fontColor = settings.fontColor !== undefined ? settings.fontColor : _fontColor | ||||
|         _frameColor = settings.frameColor !== undefined ? settings.frameColor : _frameColor | ||||
|  | ||||
|         horizontalSync = settings.horizontalSync | ||||
|                 !== undefined ? settings.horizontalSync : horizontalSync | ||||
| @@ -353,6 +359,7 @@ QtObject { | ||||
|         chromaColor = settings.chromaColor !== undefined ? settings.chromaColor : chromaColor | ||||
|         saturationColor = settings.saturationColor | ||||
|                 !== undefined ? settings.saturationColor : saturationColor | ||||
|         frameGloss = settings.frameGloss !== undefined ? settings.frameGloss : frameGloss | ||||
|         screenCurvature = settings.screenCurvature | ||||
|                 !== undefined ? settings.screenCurvature : screenCurvature | ||||
|         glowingLine = settings.glowingLine !== undefined ? settings.glowingLine : glowingLine | ||||
| @@ -459,6 +466,8 @@ QtObject { | ||||
|                 "rbgShift": 0, | ||||
|                 "saturationColor": 0.2483, | ||||
|                 "screenCurvature": 0.3, | ||||
|                 "frameColor": "#ffffff", | ||||
|                 "frameGloss": 0, | ||||
|                 "staticNoise": 0.1198, | ||||
|                 "windowOpacity": 1, | ||||
|                 "margin": 0.5, | ||||
| @@ -488,6 +497,8 @@ QtObject { | ||||
|                 "rbgShift": 0, | ||||
|                 "saturationColor": 0.0, | ||||
|                 "screenCurvature": 0.3, | ||||
|                 "frameColor": "#ffffff", | ||||
|                 "frameGloss": 0, | ||||
|                 "staticNoise": 0.1198, | ||||
|                 "windowOpacity": 1, | ||||
|                 "margin": 0.5, | ||||
| @@ -517,6 +528,8 @@ QtObject { | ||||
|                 "rbgShift": 0, | ||||
|                 "saturationColor": 0.5, | ||||
|                 "screenCurvature": 0.3, | ||||
|                 "frameColor": "#ffffff", | ||||
|                 "frameGloss": 0, | ||||
|                 "staticNoise": 0.15, | ||||
|                 "windowOpacity": 1, | ||||
|                 "margin": 0.5, | ||||
| @@ -546,6 +559,8 @@ QtObject { | ||||
|                 "rbgShift": 0, | ||||
|                 "saturationColor": 0, | ||||
|                 "screenCurvature": 0, | ||||
|                 "frameColor": "#ffffff", | ||||
|                 "frameGloss": 0, | ||||
|                 "staticNoise": 0.15, | ||||
|                 "windowOpacity": 1, | ||||
|                 "margin": 0.5, | ||||
| @@ -575,6 +590,8 @@ QtObject { | ||||
|                 "rbgShift": 0, | ||||
|                 "saturationColor": 0, | ||||
|                 "screenCurvature": 0.5, | ||||
|                 "frameColor": "#ffffff", | ||||
|                 "frameGloss": 0, | ||||
|                 "staticNoise": 0.099, | ||||
|                 "windowOpacity": 1, | ||||
|                 "margin": 0.5, | ||||
| @@ -604,6 +621,8 @@ QtObject { | ||||
|                 "rbgShift": 0.2969, | ||||
|                 "saturationColor": 0, | ||||
|                 "screenCurvature": 0.5, | ||||
|                 "frameColor": "#ffffff", | ||||
|                 "frameGloss": 0, | ||||
|                 "staticNoise": 0.2969, | ||||
|                 "windowOpacity": 1, | ||||
|                 "margin": 0.5, | ||||
| @@ -613,7 +632,7 @@ QtObject { | ||||
|             builtin: true | ||||
|         } | ||||
|         ListElement { | ||||
|             text: "IBM Dos" | ||||
|             text: "IBM DOS" | ||||
|             obj_string: '{ | ||||
|                 "ambientLight": 0.151, | ||||
|                 "backgroundColor": "#000000", | ||||
| @@ -633,6 +652,8 @@ QtObject { | ||||
|                 "rbgShift": 0.3524, | ||||
|                 "saturationColor": 0, | ||||
|                 "screenCurvature": 0.4, | ||||
|                 "frameColor": "#ffffff", | ||||
|                 "frameGloss": 0, | ||||
|                 "staticNoise": 0.0503, | ||||
|                 "windowOpacity": 1, | ||||
|                 "margin": 0.5, | ||||
| @@ -662,6 +683,8 @@ QtObject { | ||||
|                 "rbgShift": 0, | ||||
|                 "saturationColor": 0, | ||||
|                 "screenCurvature": 0.2, | ||||
|                 "frameColor": "#ffffff", | ||||
|                 "frameGloss": 0, | ||||
|                 "staticNoise": 0, | ||||
|                 "windowOpacity": 1, | ||||
|                 "margin": 0.5, | ||||
| @@ -691,6 +714,8 @@ QtObject { | ||||
|                 "rbgShift": 0, | ||||
|                 "saturationColor": 0.4983, | ||||
|                 "screenCurvature": 0, | ||||
|                 "frameColor": "#ffffff", | ||||
|                 "frameGloss": 0, | ||||
|                 "staticNoise": 0.0955, | ||||
|                 "windowOpacity": 0.7, | ||||
|                 "margin": 0.1, | ||||
|   | ||||
| @@ -29,8 +29,8 @@ Loader { | ||||
|     property real lastUpdate: 0 | ||||
|     property real prevLastUpdate: 0 | ||||
|  | ||||
|     property real burnIn: appSettings.burnIn | ||||
|     property real burnInFadeTime: 1 / Utils.lint(_minBurnInFadeTime, _maxBurnInFadeTime, burnIn) | ||||
|     property real burnIn: appSettings.burnIn; | ||||
|     property real burnInFadeTime: (1 / Utils.lint(_minBurnInFadeTime, _maxBurnInFadeTime, burnIn))*64 | ||||
|     property real _minBurnInFadeTime: appSettings.minBurnInFadeTime | ||||
|     property real _maxBurnInFadeTime: appSettings.maxBurnInFadeTime | ||||
|  | ||||
| @@ -76,7 +76,7 @@ Loader { | ||||
|             Connections { | ||||
|                 target: kterminal | ||||
|  | ||||
|                 function onImagePainted() { | ||||
|                 onImagePainted: { | ||||
|                     completelyUpdate() | ||||
|                 } | ||||
|             } | ||||
| @@ -84,19 +84,19 @@ Loader { | ||||
|             Connections { | ||||
|                 target: appSettings | ||||
|  | ||||
|                 function onBurnInChanged() { | ||||
|                 onBurnInChanged: { | ||||
|                     burnInEffect.restartBlurSource() | ||||
|                 } | ||||
|  | ||||
|                 function onTerminalFontChanged() { | ||||
|                 onTerminalFontChanged: { | ||||
|                     burnInEffect.restartBlurSource() | ||||
|                 } | ||||
|  | ||||
|                 function onRasterizationChanged() { | ||||
|                 onRasterizationChanged: { | ||||
|                     burnInEffect.restartBlurSource() | ||||
|                 } | ||||
|  | ||||
|                 function onBurnInQualityChanged() { | ||||
|                 onBurnInQualityChanged: { | ||||
|                     burnInEffect.restartBlurSource() | ||||
|                 } | ||||
|             } | ||||
| @@ -146,9 +146,8 @@ Loader { | ||||
|                     float prevMask = accColor.a; | ||||
|                     float currMask = rgb2grey(txtColor); | ||||
|  | ||||
|                     highp float blurDecay = clamp((lastUpdate - prevLastUpdate) * burnInTime, 0.0, 1.0); | ||||
|                     blurDecay = max(0.0, blurDecay - prevMask); | ||||
|                     vec3 blurColor = accColor.rgb - vec3(blurDecay); | ||||
|                     highp float blurDecay = clamp(pow(0.5, burnInTime * (lastUpdate - prevLastUpdate)), 0.0, 1.0); | ||||
|                     vec3 blurColor = accColor.rgb * vec3(blurDecay); | ||||
|                     vec3 color = max(blurColor, txtColor); | ||||
|  | ||||
|                     gl_FragColor = vec4(color, currMask); | ||||
|   | ||||
| @@ -47,14 +47,14 @@ Item{ | ||||
|     Connections { | ||||
|         target: copyAction | ||||
|  | ||||
|         function onTriggered() { | ||||
|         onTriggered: { | ||||
|             kterminal.copyClipboard() | ||||
|         } | ||||
|     } | ||||
|     Connections { | ||||
|         target: pasteAction | ||||
|  | ||||
|         function onTriggered() { | ||||
|         onTriggered: { | ||||
|             kterminal.pasteClipboard() | ||||
|         } | ||||
|     } | ||||
| @@ -63,29 +63,29 @@ Item{ | ||||
|     Connections { | ||||
|         target: appSettings | ||||
|  | ||||
|         function onFontScalingChanged() { | ||||
|         onFontScalingChanged: { | ||||
|             terminalContainer.updateSources() | ||||
|         } | ||||
|  | ||||
|         function onFontWidthChanged() { | ||||
|         onFontWidthChanged: { | ||||
|             terminalContainer.updateSources() | ||||
|         } | ||||
|     } | ||||
|     Connections { | ||||
|         target: terminalContainer | ||||
|  | ||||
|         function onWidthChanged() { | ||||
|         onWidthChanged: { | ||||
|             terminalContainer.updateSources() | ||||
|         } | ||||
|  | ||||
|         function onHeightChanged() { | ||||
|         onHeightChanged: { | ||||
|             terminalContainer.updateSources() | ||||
|         } | ||||
|     } | ||||
|     Connections { | ||||
|         target: terminalWindow | ||||
|  | ||||
|         function onActiveChanged() { | ||||
|         onActiveChanged: { | ||||
|             kterminal.forceActiveFocus() | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -89,7 +89,7 @@ ColumnLayout { | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             Label { | ||||
|             SizedLabel { | ||||
|                 text: appSettings.fps !== 0 ? appSettings.fps : qsTr("Max") | ||||
|             } | ||||
|             Label { | ||||
| @@ -109,7 +109,7 @@ ColumnLayout { | ||||
|                     enabled = true | ||||
|                 } | ||||
|             } | ||||
|             Label { | ||||
|             SizedLabel { | ||||
|                 text: Math.round(txtslider.value * 100) + "%" | ||||
|             } | ||||
|  | ||||
| @@ -130,7 +130,7 @@ ColumnLayout { | ||||
|                     enabled = true | ||||
|                 } | ||||
|             } | ||||
|             Label { | ||||
|             SizedLabel { | ||||
|                 text: Math.round(bloomSlider.value * 100) + "%" | ||||
|             } | ||||
|  | ||||
| @@ -151,7 +151,7 @@ ColumnLayout { | ||||
|                     enabled = true | ||||
|                 } | ||||
|             } | ||||
|             Label { | ||||
|             SizedLabel { | ||||
|                 text: Math.round(burnInSlider.value * 100) + "%" | ||||
|             } | ||||
|         } | ||||
|   | ||||
| @@ -69,7 +69,7 @@ ColumnLayout { | ||||
|                 Connections { | ||||
|                     target: appSettings | ||||
|  | ||||
|                     function onTerminalFontChanged() { | ||||
|                     onTerminalFontChanged: { | ||||
|                         fontChanger.updateIndex() | ||||
|                     } | ||||
|                 } | ||||
| @@ -149,6 +149,11 @@ ColumnLayout { | ||||
|                     value: appSettings.saturationColor | ||||
|                     enabled: appSettings.chromaColor !== 0 | ||||
|                 } | ||||
|                 CheckableSlider { | ||||
|                     name: qsTr("Frame Gloss") | ||||
|                     onNewValue: appSettings.frameGloss = newValue | ||||
|                     value: appSettings.frameGloss | ||||
|                 } | ||||
|             } | ||||
|             RowLayout { | ||||
|                 Layout.fillWidth: true | ||||
| @@ -166,6 +171,13 @@ ColumnLayout { | ||||
|                     onColorSelected: appSettings._backgroundColor = color | ||||
|                     color: appSettings._backgroundColor | ||||
|                 } | ||||
|                 ColorButton { | ||||
|                     name: qsTr("Frame") | ||||
|                     height: 50 | ||||
|                     Layout.fillWidth: true | ||||
|                     onColorSelected: appSettings._frameColor = color | ||||
|                     color: appSettings._frameColor | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -27,9 +27,10 @@ import QtQuick.Dialogs 1.1 | ||||
| Window { | ||||
|     id: settings_window | ||||
|     title: qsTr("Settings") | ||||
|     width: 600 | ||||
|     height: 480 | ||||
|     width: 640 | ||||
|     height: 640 | ||||
|  | ||||
|     color: palette.window | ||||
|     property int tabmargins: 15 | ||||
|  | ||||
|     Item { | ||||
|   | ||||
| @@ -37,6 +37,8 @@ Item { | ||||
|  | ||||
|     property real ambientLight: appSettings.ambientLight * 0.2 | ||||
|  | ||||
|     property real frameGloss: appSettings.frameGloss | ||||
|  | ||||
|     property size virtualResolution | ||||
|     property size screenResolution | ||||
|  | ||||
| @@ -59,6 +61,7 @@ Item { | ||||
|          property real screenCurvature: parent.screenCurvature | ||||
|          property real chromaColor: parent.chromaColor | ||||
|          property real ambientLight: parent.ambientLight | ||||
|          property real frameGloss: parent.frameGloss | ||||
|  | ||||
|          property real flickering: appSettings.flickering | ||||
|          property real horizontalSync: appSettings.horizontalSync | ||||
| @@ -172,6 +175,7 @@ Item { | ||||
|              uniform highp vec4 fontColor; | ||||
|              uniform highp vec4 backgroundColor; | ||||
|              uniform lowp float shadowLength; | ||||
|              uniform lowp float frameGloss; | ||||
|  | ||||
|              uniform highp vec2 virtualResolution; | ||||
|              uniform lowp float rasterizationIntensity;\n" + | ||||
| @@ -243,6 +247,17 @@ Item { | ||||
|              "  return outColor; | ||||
|              }" + | ||||
|  | ||||
|              //pseudo-random vector | ||||
|              //https://stackoverflow.com/a/10625698 | ||||
|              "float random( vec2 p ) | ||||
|              { | ||||
|                  vec2 K1 = vec2( | ||||
|                      23.14069263277926, // e^pi (Gelfond's constant) | ||||
|                      2.665144142690225 // 2^sqrt(2) (Gelfond-Schneider constant) | ||||
|                  ); | ||||
|                  return fract( cos( dot(p,K1) ) * 12345.6789 ); | ||||
|              }" + | ||||
|  | ||||
|              "void main() {" + | ||||
|                  "vec2 cc = vec2(0.5) - qt_TexCoord0;" + | ||||
|                  "float distance = length(cc);" + | ||||
| @@ -281,7 +296,11 @@ Item { | ||||
|                  : "") + | ||||
|  | ||||
|                  (jitter !== 0 || staticNoise !== 0 ? | ||||
|                      "vec4 noiseTexel = texture2D(noiseSource, scaleNoiseSize * coords + vec2(fract(time / 51.0), fract(time / 237.0)));" | ||||
|                  "vec4 noiseTexel = texture2D( | ||||
|                      noiseSource, scaleNoiseSize * coords | ||||
|                      + vec2(0.0, random(vec2(fract(time / 237.0), 822.9582))) | ||||
|                      + vec2(fract(time / 31.0), fract(time / 177.0)) | ||||
|                  );" | ||||
|                  : "") + | ||||
|  | ||||
|                  (jitter !== 0 ? " | ||||
| @@ -302,8 +321,8 @@ Item { | ||||
|  | ||||
|                  (burnIn !== 0 ? " | ||||
|                      vec4 txt_blur = texture2D(burnInSource, staticCoords); | ||||
|                      float blurDecay = clamp((time - burnInLastUpdate) * burnInTime, 0.0, 1.0); | ||||
|                      vec3 burnInColor = 0.65 * (txt_blur.rgb - vec3(blurDecay)); | ||||
|                      float blurDecay = clamp(pow(0.5, burnInTime * (time - burnInLastUpdate)), 0.0, 1.0); | ||||
|                      vec3 burnInColor = txt_blur.rgb * vec3(blurDecay); | ||||
|                      txt_color = max(txt_color, convertWithChroma(burnInColor));" | ||||
|                  : "") + | ||||
|  | ||||
| @@ -321,7 +340,7 @@ Item { | ||||
|  | ||||
|                  (displayTerminalFrame ? | ||||
|                     "vec4 frameColor = texture2D(frameSource, qt_TexCoord0); | ||||
|                      finalColor = mix(finalColor, frameColor.rgb, frameColor.a);" | ||||
|                      finalColor = mix(finalColor, frameColor.rgb + (finalColor*frameGloss), frameColor.a);" | ||||
|                  : "") + | ||||
|  | ||||
|                  "gl_FragColor = vec4(finalColor, qt_Opacity);" + | ||||
|   | ||||
| @@ -22,13 +22,13 @@ import QtQuick 2.0 | ||||
| import "utils.js" as Utils | ||||
|  | ||||
| ShaderEffect { | ||||
|     property color _staticFrameColor: "#fff" | ||||
|     property color _frameColor: appSettings.frameColor | ||||
|     property color _backgroundColor: appSettings.backgroundColor | ||||
|     property color _fontColor: appSettings.fontColor | ||||
|     property color _lightColor: Utils.mix(_fontColor, _backgroundColor, 0.2) | ||||
|     property real _ambientLight: Utils.lint(0.2, 0.8, appSettings.ambientLight) | ||||
|  | ||||
|     property color frameColor: Utils.mix(_staticFrameColor, _lightColor, _ambientLight) | ||||
|     property color frameColor: Utils.mix(_frameColor, _lightColor, _ambientLight) | ||||
|     property real screenCurvature: appSettings.screenCurvature * appSettings.screenCurvatureSize | ||||
|  | ||||
|     // Coefficient of the log curve used to approximate shadowing | ||||
| @@ -87,7 +87,7 @@ ShaderEffect { | ||||
|             float alpha = 0.0; | ||||
|  | ||||
|             float frameShadow = max2(positiveLog(-coords * frameShadowCoeff + vec2(1.0)) + positiveLog(coords * frameShadowCoeff - (vec2(frameShadowCoeff) - vec2(1.0)))); | ||||
|             frameShadow = max(sqrt(frameShadow), 0.0); | ||||
|             frameShadow = clamp(sqrt(frameShadow), 0.0, 1.0); | ||||
|             color *= frameShadow; | ||||
|             alpha = sum2(1.0 - step(vec2(0.0), coords) + step(vec2(1.0), coords)); | ||||
|             alpha = clamp(alpha, 0.0, 1.0); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user