mirror of
				https://github.com/Swordfish90/cool-retro-term.git
				synced 2025-11-04 00:52:11 +00:00 
			
		
		
		
	Compare commits
	
		
			73 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					cdd1488e13 | ||
| 
						 | 
					b8b2644969 | ||
| 
						 | 
					09b5c0a5d0 | ||
| 
						 | 
					1ed66f3aa2 | ||
| 
						 | 
					3b4d5d1c3f | ||
| 
						 | 
					f98fd5a7ad | ||
| 
						 | 
					b961109623 | ||
| 
						 | 
					8f0d1023a4 | ||
| 
						 | 
					79773ba95c | ||
| 
						 | 
					ff3f02fb8c | ||
| 
						 | 
					0af2b20b3a | ||
| 
						 | 
					b026fe357e | ||
| 
						 | 
					ade36c013b | ||
| 
						 | 
					54a6a7f590 | ||
| 
						 | 
					20728e4a0f | ||
| 
						 | 
					afa456f6b3 | ||
| 
						 | 
					3fbfb77430 | ||
| 
						 | 
					051bcb62c6 | ||
| 
						 | 
					d2c57eed6d | ||
| 
						 | 
					f2f38c0e0d | ||
| 
						 | 
					4046bdbc6a | ||
| 
						 | 
					c83cc206fd | ||
| 
						 | 
					41ac14fbd3 | ||
| 
						 | 
					e4c1cad1a7 | ||
| 
						 | 
					863c1ac27a | ||
| 
						 | 
					c85eba617c | ||
| 
						 | 
					dcb7b7c309 | ||
| 
						 | 
					3cee186663 | ||
| 
						 | 
					06afe507f6 | ||
| 
						 | 
					4268d4d770 | ||
| 
						 | 
					d61dae5ab4 | ||
| 
						 | 
					b5f39c1d53 | ||
| 
						 | 
					767a61b86e | ||
| 
						 | 
					0d3c0a2233 | ||
| 
						 | 
					0431103a1d | ||
| 
						 | 
					633e4e642c | ||
| 
						 | 
					77dc82a381 | ||
| 
						 | 
					44a63d4aaa | ||
| 
						 | 
					5b3297f916 | ||
| 
						 | 
					41413d4712 | ||
| 
						 | 
					fd2e5ce71e | ||
| 
						 | 
					e9ddd7d3b8 | ||
| 
						 | 
					da6795f002 | ||
| 
						 | 
					f497bb4b44 | ||
| 
						 | 
					4aea85649f | ||
| 
						 | 
					b9ffae25e3 | ||
| 
						 | 
					db7a7f38f7 | ||
| 
						 | 
					e2c4392c6d | ||
| 
						 | 
					7e771b1cfc | ||
| 
						 | 
					4bff6efe97 | ||
| 
						 | 
					c514dc7a24 | ||
| 
						 | 
					24754edb6a | ||
| 
						 | 
					79fbb76524 | ||
| 
						 | 
					b85aede966 | ||
| 
						 | 
					c66ca6e44f | ||
| 
						 | 
					a192024fef | ||
| 
						 | 
					918df9098a | ||
| 
						 | 
					c9271bfa36 | ||
| 
						 | 
					fa162c818b | ||
| 
						 | 
					ff976e3ec2 | ||
| 
						 | 
					17c5651305 | ||
| 
						 | 
					7c7b049ba1 | ||
| 
						 | 
					0823fe8b3d | ||
| 
						 | 
					e787fd0fb5 | ||
| 
						 | 
					650497bff4 | ||
| 
						 | 
					2f25bd30b0 | ||
| 
						 | 
					d58157a450 | ||
| 
						 | 
					9d049bd041 | ||
| 
						 | 
					988222b711 | ||
| 
						 | 
					f42bd3036f | ||
| 
						 | 
					297239fb5c | ||
| 
						 | 
					dbd46d44aa | ||
| 
						 | 
					254f4d6e92 | 
							
								
								
									
										37
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
sudo: required
 | 
			
		||||
dist: trusty
 | 
			
		||||
language: c++
 | 
			
		||||
 | 
			
		||||
install:
 | 
			
		||||
  - sudo add-apt-repository -y ppa:beineri/opt-qt58-trusty
 | 
			
		||||
  - sudo apt-get update -qq
 | 
			
		||||
  - sudo apt-get -y install build-essential qt58declarative qt58graphicaleffects qt58quickcontrols libgl1-mesa-dev
 | 
			
		||||
  - source /opt/qt*/bin/qt*-env.sh
 | 
			
		||||
 | 
			
		||||
script:
 | 
			
		||||
  - qmake CONFIG+=release PREFIX=/usr
 | 
			
		||||
  - make -j$(nproc)
 | 
			
		||||
  - mkdir -p appdir/usr/share/metainfo appdir/usr/bin
 | 
			
		||||
  - cp packaging/appdata/cool-retro-term.appdata.xml appdir/usr/share/metainfo/
 | 
			
		||||
  - cp cool-retro-term appdir/usr/bin/
 | 
			
		||||
  - cp ./cool-retro-term.desktop appdir/
 | 
			
		||||
  - cp ./app/icons/128x128/cool-retro-term.png appdir/
 | 
			
		||||
  - cp -r ./app/qml appdir/usr/
 | 
			
		||||
  - cp -r ./qmltermwidget/QMLTermWidget appdir/usr/qml/ # Workaround for https://github.com/probonopd/linuxdeployqt/issues/78
 | 
			
		||||
  - wget -c https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage
 | 
			
		||||
  - chmod a+x linuxdeployqt-*.AppImage 
 | 
			
		||||
  - unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
 | 
			
		||||
  - export VERSION=$(git rev-parse --short HEAD) # linuxdeployqt uses this for naming the file
 | 
			
		||||
  - ./linuxdeployqt-*.AppImage appdir/usr/bin/cool-retro-term -qmldir=./app/qml/ -qmldir=./qmltermwidget/ # -verbose=3 2>&1 | grep "path:" -C 3
 | 
			
		||||
  - ./linuxdeployqt-*.AppImage appdir/usr/bin/cool-retro-term -qmldir=./app/qml/ -qmldir=./qmltermwidget/ -verbose=2 -appimage
 | 
			
		||||
  
 | 
			
		||||
after_success:
 | 
			
		||||
  - find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq
 | 
			
		||||
  - # curl --upload-file Cool*.AppImage https://transfer.sh/Cool_Retro_Term-git.$(git rev-parse --short HEAD)-x86_64.AppImage
 | 
			
		||||
  - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh
 | 
			
		||||
  - bash upload.sh Cool*.AppImage*
 | 
			
		||||
  
 | 
			
		||||
branches:
 | 
			
		||||
  except:
 | 
			
		||||
    - # Do not build tags that we create when we upload to GitHub Releases
 | 
			
		||||
    - /^(?i:continuous)/
 | 
			
		||||
							
								
								
									
										28
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								README.md
									
									
									
									
									
								
							@@ -13,18 +13,18 @@ It uses the QML port of qtermwidget (Konsole) developed by me: https://github.co
 | 
			
		||||
This terminal emulator works under Linux and macOS and requires Qt 5.2 or higher.
 | 
			
		||||
 | 
			
		||||
## Screenshots
 | 
			
		||||

 | 
			
		||||

 | 
			
		||||

 | 
			
		||||

 | 
			
		||||

 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
## Get cool-retro-term
 | 
			
		||||
You can either build cool-retro-term yourself (see below) or walk the easy way and install one of these packages:
 | 
			
		||||
## Install
 | 
			
		||||
Walk the easy way and install cool-retro-term using one of these convenient packages:
 | 
			
		||||
 | 
			
		||||
Fedora has the `cool-retro-term` in the offcial repositories. All you have to do is `sudo dnf install cool-retro-term`.
 | 
			
		||||
**Fedora** has the `cool-retro-term` in the offcial repositories. All you have to do is `sudo dnf install cool-retro-term`.
 | 
			
		||||
 | 
			
		||||
Users of openSUSE can grab a package from [Open Build Service](http://software.opensuse.org/package/cool-retro-term).
 | 
			
		||||
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):
 | 
			
		||||
**Arch** users can install this [package](https://aur.archlinux.org/packages/cool-retro-term-git/) directly via the [AUR](https://aur.archlinux.org):
 | 
			
		||||
 | 
			
		||||
    yaourt -S aur/cool-retro-term-git
 | 
			
		||||
 | 
			
		||||
@@ -34,25 +34,27 @@ or use:
 | 
			
		||||
 | 
			
		||||
to install precompiled from community repository.
 | 
			
		||||
 | 
			
		||||
Gentoo users can now install the second release "1.0.1" from a 3rd-party repository preferably via layman:
 | 
			
		||||
**Gentoo** users can now install the third release "1.1.0" from a 3rd-party repository preferably via layman:
 | 
			
		||||
 | 
			
		||||
    USE="git" emerge app-portage/layman
 | 
			
		||||
    wget https://www.gerczei.eu/files/gerczei.xml -O /etc/layman/overlays/gerczei.xml
 | 
			
		||||
    layman -f -a qt -a gerczei # those who've added the repo before 27/08/17 should remove, update and add it again as its source has changed
 | 
			
		||||
    ACCEPT_KEYWORDS="~*" emerge =x11-terms/cool-retro-term-1.0.1::gerczei
 | 
			
		||||
    ACCEPT_KEYWORDS="~*" emerge =x11-terms/cool-retro-term-1.1.0::gerczei
 | 
			
		||||
 | 
			
		||||
The live ebuild (version 9999-r1) tracking the bleeding-edge WIP codebase also remains available.
 | 
			
		||||
 | 
			
		||||
A word of warning: USE flags and keywords are to be added to portage's configuration files and every emerge operation should be executed with '-p' (short option for --pretend) appended to the command line first as per best practice!
 | 
			
		||||
 | 
			
		||||
Ubuntu users of 14.04 LTS (Trusty) up to 15.10 (Wily) can use [this PPA](https://launchpad.net/~bugs-launchpad-net-falkensweb).
 | 
			
		||||
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)
 | 
			
		||||
**Ubuntu 17.10** can use [this PPA](https://launchpad.net/%7Evantuz/+archive/ubuntu/cool-retro-term)
 | 
			
		||||
 | 
			
		||||
macOS users can grab the latest dmg from the release page: https://github.com/Swordfish90/cool-retro-term/releases
 | 
			
		||||
**macOS** users can grab the latest dmg from the release page: https://github.com/Swordfish90/cool-retro-term/releases
 | 
			
		||||
 | 
			
		||||
## Build instructions (Linux)
 | 
			
		||||
 | 
			
		||||
Build cool-retro-term yourself, you know, the retro way.
 | 
			
		||||
 | 
			
		||||
## Dependencies
 | 
			
		||||
Make sure to install these first.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,10 @@ int main(int argc, char *argv[])
 | 
			
		||||
    // This disables QT appmenu under Ubuntu, which is not working with QML apps.
 | 
			
		||||
    setenv("QT_QPA_PLATFORMTHEME", "", 1);
 | 
			
		||||
 | 
			
		||||
#if defined (Q_OS_LINUX)
 | 
			
		||||
    setenv("QSG_RENDER_LOOP", "threaded", 0);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(Q_OS_MAC)
 | 
			
		||||
    // This allows UTF-8 characters usage in OSX.
 | 
			
		||||
    setenv("LC_CTYPE", "UTF-8", 1);
 | 
			
		||||
@@ -70,8 +74,10 @@ int main(int argc, char *argv[])
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    QString appVersion("1.1.1");
 | 
			
		||||
 | 
			
		||||
    if (args.contains("-v") || args.contains("--version")) {
 | 
			
		||||
        qDebug() << "cool-retro-term 1.0.1";
 | 
			
		||||
        qDebug() << ("cool-retro-term " + appVersion).toStdString().c_str();
 | 
			
		||||
	return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -82,6 +88,7 @@ int main(int argc, char *argv[])
 | 
			
		||||
    }
 | 
			
		||||
    QVariant command(cmdList.empty() ? QVariant() : cmdList[0]);
 | 
			
		||||
    QVariant commandArgs(cmdList.size() <= 1 ? QVariant() : QVariant(cmdList.mid(1)));
 | 
			
		||||
    engine.rootContext()->setContextProperty("appVersion", appVersion);
 | 
			
		||||
    engine.rootContext()->setContextProperty("defaultCmd", command);
 | 
			
		||||
    engine.rootContext()->setContextProperty("defaultCmdArgs", commandArgs);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ import QtQuick.Controls 1.0
 | 
			
		||||
import "utils.js" as Utils
 | 
			
		||||
 | 
			
		||||
QtObject{
 | 
			
		||||
    readonly property string version: "1.1.0"
 | 
			
		||||
    readonly property string version: appVersion
 | 
			
		||||
    readonly property int profileVersion: 2
 | 
			
		||||
 | 
			
		||||
    // STATIC CONSTANTS ////////////////////////////////////////////////////////
 | 
			
		||||
@@ -33,6 +33,9 @@ QtObject{
 | 
			
		||||
    readonly property real minimumFontScaling: 0.25
 | 
			
		||||
    readonly property real maximumFontScaling: 2.50
 | 
			
		||||
 | 
			
		||||
    readonly property real minBurnInFadeTime: 160
 | 
			
		||||
    readonly property real maxBurnInFadeTime: 1600
 | 
			
		||||
 | 
			
		||||
    // GENERAL SETTINGS ///////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
    property int x: 100
 | 
			
		||||
@@ -48,11 +51,13 @@ QtObject{
 | 
			
		||||
    property bool showTerminalSize: true
 | 
			
		||||
    property real windowScaling: 1.0
 | 
			
		||||
 | 
			
		||||
    property real fps: 24
 | 
			
		||||
    property real fps: 20
 | 
			
		||||
    property bool verbose: false
 | 
			
		||||
 | 
			
		||||
    property real bloomQuality: 0.5
 | 
			
		||||
 | 
			
		||||
    property real burnInQuality: 0.5
 | 
			
		||||
    property bool useFastBurnIn: Qt.platform.os === "osx" ? false : true
 | 
			
		||||
 | 
			
		||||
    onWindowScalingChanged: handleFontChanged();
 | 
			
		||||
 | 
			
		||||
@@ -73,7 +78,7 @@ QtObject{
 | 
			
		||||
    property color backgroundColor: Utils.mix(Utils.strToColor(_backgroundColor), Utils.strToColor(saturatedColor), 0.7 + (contrast * 0.3))
 | 
			
		||||
 | 
			
		||||
    property real staticNoise: 0.12
 | 
			
		||||
    property real screenCurvature: 0.2
 | 
			
		||||
    property real screenCurvature: 0.3
 | 
			
		||||
    property real glowingLine: 0.2
 | 
			
		||||
    property real burnIn: 0.25
 | 
			
		||||
    property real bloom: 0.55
 | 
			
		||||
@@ -88,6 +93,9 @@ QtObject{
 | 
			
		||||
 | 
			
		||||
    property real rbgShift: 0.0
 | 
			
		||||
 | 
			
		||||
    property real _margin: 0.5
 | 
			
		||||
    property real margin: Utils.lint(1.0, 20.0, _margin)
 | 
			
		||||
 | 
			
		||||
    readonly property int no_rasterization: 0
 | 
			
		||||
    readonly property int scanline_rasterization: 1
 | 
			
		||||
    readonly property int pixel_rasterization: 2
 | 
			
		||||
@@ -126,7 +134,7 @@ QtObject{
 | 
			
		||||
 | 
			
		||||
    property FontLoader fontLoader: FontLoader { }
 | 
			
		||||
 | 
			
		||||
    onFontScalingChanged: handleFontChanged();
 | 
			
		||||
    onTotalFontScalingChanged: handleFontChanged();
 | 
			
		||||
    onFontWidthChanged: handleFontChanged();
 | 
			
		||||
 | 
			
		||||
    function getIndexByName(name) {
 | 
			
		||||
@@ -155,7 +163,7 @@ QtObject{
 | 
			
		||||
        if (index === undefined) return;
 | 
			
		||||
 | 
			
		||||
        fontManager.item.selectedFontIndex = index;
 | 
			
		||||
        fontManager.item.scaling = totalFontScaling * windowScaling;
 | 
			
		||||
        fontManager.item.scaling = totalFontScaling;
 | 
			
		||||
 | 
			
		||||
        var fontSource = fontManager.item.source;
 | 
			
		||||
        var pixelSize = fontManager.item.pixelSize;
 | 
			
		||||
@@ -199,7 +207,8 @@ QtObject{
 | 
			
		||||
            bloomQuality: bloomQuality,
 | 
			
		||||
            burnInQuality: burnInQuality,
 | 
			
		||||
            useCustomCommand: useCustomCommand,
 | 
			
		||||
            customCommand: customCommand
 | 
			
		||||
            customCommand: customCommand,
 | 
			
		||||
            useFastBurnIn: useFastBurnIn
 | 
			
		||||
        }
 | 
			
		||||
        return stringify(settings);
 | 
			
		||||
    }
 | 
			
		||||
@@ -225,7 +234,8 @@ QtObject{
 | 
			
		||||
            ambientLight: ambientLight,
 | 
			
		||||
            windowOpacity: windowOpacity,
 | 
			
		||||
            fontName: fontNames[rasterization],
 | 
			
		||||
            fontWidth: fontWidth
 | 
			
		||||
            fontWidth: fontWidth,
 | 
			
		||||
            margin: _margin
 | 
			
		||||
        }
 | 
			
		||||
        return settings;
 | 
			
		||||
    }
 | 
			
		||||
@@ -284,6 +294,8 @@ QtObject{
 | 
			
		||||
 | 
			
		||||
        useCustomCommand = settings.useCustomCommand !== undefined ? settings.useCustomCommand : useCustomCommand
 | 
			
		||||
        customCommand = settings.customCommand !== undefined ? settings.customCommand : customCommand
 | 
			
		||||
 | 
			
		||||
        useFastBurnIn = settings.useFastBurnIn !== undefined ? settings.useFastBurnIn : useFastBurnIn;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function loadProfileString(profileString){
 | 
			
		||||
@@ -317,6 +329,8 @@ QtObject{
 | 
			
		||||
        fontNames[rasterization] = settings.fontName !== undefined ? settings.fontName : fontNames[rasterization];
 | 
			
		||||
        fontWidth = settings.fontWidth !== undefined ? settings.fontWidth : fontWidth;
 | 
			
		||||
 | 
			
		||||
        _margin = settings.margin !== undefined ? settings.margin : _margin;
 | 
			
		||||
 | 
			
		||||
        handleFontChanged();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -384,9 +398,10 @@ QtObject{
 | 
			
		||||
                  "rasterization": 0,
 | 
			
		||||
                  "rbgShift": 0,
 | 
			
		||||
                  "saturationColor": 0.2483,
 | 
			
		||||
                  "screenCurvature": 0.1997,
 | 
			
		||||
                  "screenCurvature": 0.3,
 | 
			
		||||
                  "staticNoise": 0.1198,
 | 
			
		||||
                  "windowOpacity": 1
 | 
			
		||||
                  "windowOpacity": 1,
 | 
			
		||||
                  "margin": 0.5
 | 
			
		||||
                }'
 | 
			
		||||
            builtin: true
 | 
			
		||||
        }
 | 
			
		||||
@@ -411,9 +426,10 @@ QtObject{
 | 
			
		||||
                  "rasterization": 0,
 | 
			
		||||
                  "rbgShift": 0,
 | 
			
		||||
                  "saturationColor": 0.0,
 | 
			
		||||
                  "screenCurvature": 0.1997,
 | 
			
		||||
                  "screenCurvature": 0.3,
 | 
			
		||||
                  "staticNoise": 0.1198,
 | 
			
		||||
                  "windowOpacity": 1
 | 
			
		||||
                  "windowOpacity": 1,
 | 
			
		||||
                  "margin": 0.5
 | 
			
		||||
                }'
 | 
			
		||||
            builtin: true
 | 
			
		||||
        }
 | 
			
		||||
@@ -438,9 +454,10 @@ QtObject{
 | 
			
		||||
                  "rasterization": 1,
 | 
			
		||||
                  "rbgShift": 0,
 | 
			
		||||
                  "saturationColor": 0.5,
 | 
			
		||||
                  "screenCurvature": 0.2,
 | 
			
		||||
                  "screenCurvature": 0.3,
 | 
			
		||||
                  "staticNoise": 0.15,
 | 
			
		||||
                  "windowOpacity": 1
 | 
			
		||||
                  "windowOpacity": 1,
 | 
			
		||||
                  "margin": 0.5
 | 
			
		||||
                }'
 | 
			
		||||
            builtin: true
 | 
			
		||||
        }
 | 
			
		||||
@@ -466,8 +483,9 @@ QtObject{
 | 
			
		||||
                  "rbgShift": 0,
 | 
			
		||||
                  "saturationColor": 0,
 | 
			
		||||
                  "screenCurvature": 0,
 | 
			
		||||
                  "staticNoise": 0.1545,
 | 
			
		||||
                  "windowOpacity": 1
 | 
			
		||||
                  "staticNoise": 0.15,
 | 
			
		||||
                  "windowOpacity": 1,
 | 
			
		||||
                  "margin": 0.5
 | 
			
		||||
                }'
 | 
			
		||||
            builtin: true
 | 
			
		||||
        }
 | 
			
		||||
@@ -492,9 +510,10 @@ QtObject{
 | 
			
		||||
                  "rasterization": 1,
 | 
			
		||||
                  "rbgShift": 0,
 | 
			
		||||
                  "saturationColor": 0,
 | 
			
		||||
                  "screenCurvature": 0.8976,
 | 
			
		||||
                  "screenCurvature": 0.5,
 | 
			
		||||
                  "staticNoise": 0.099,
 | 
			
		||||
                  "windowOpacity": 1
 | 
			
		||||
                  "windowOpacity": 1,
 | 
			
		||||
                  "margin": 0.5
 | 
			
		||||
                }'
 | 
			
		||||
            builtin: true
 | 
			
		||||
        }
 | 
			
		||||
@@ -519,9 +538,10 @@ QtObject{
 | 
			
		||||
                  "rasterization": 1,
 | 
			
		||||
                  "rbgShift": 0.2969,
 | 
			
		||||
                  "saturationColor": 0,
 | 
			
		||||
                  "screenCurvature": 0.3003,
 | 
			
		||||
                  "screenCurvature": 0.5,
 | 
			
		||||
                  "staticNoise": 0.2969,
 | 
			
		||||
                  "windowOpacity": 1
 | 
			
		||||
                  "windowOpacity": 1,
 | 
			
		||||
                  "margin": 0.5
 | 
			
		||||
                }'
 | 
			
		||||
            builtin: true
 | 
			
		||||
        }
 | 
			
		||||
@@ -546,9 +566,10 @@ QtObject{
 | 
			
		||||
                  "rasterization": 0,
 | 
			
		||||
                  "rbgShift": 0.3524,
 | 
			
		||||
                  "saturationColor": 0,
 | 
			
		||||
                  "screenCurvature": 0.401,
 | 
			
		||||
                  "screenCurvature": 0.4,
 | 
			
		||||
                  "staticNoise": 0.0503,
 | 
			
		||||
                  "windowOpacity": 1
 | 
			
		||||
                  "windowOpacity": 1,
 | 
			
		||||
                  "margin": 0.5
 | 
			
		||||
                }'
 | 
			
		||||
            builtin: true
 | 
			
		||||
        }
 | 
			
		||||
@@ -573,9 +594,10 @@ QtObject{
 | 
			
		||||
                  "rasterization": 0,
 | 
			
		||||
                  "rbgShift": 0,
 | 
			
		||||
                  "saturationColor": 0,
 | 
			
		||||
                  "screenCurvature": 0.1997,
 | 
			
		||||
                  "screenCurvature": 0.2,
 | 
			
		||||
                  "staticNoise": 0,
 | 
			
		||||
                  "windowOpacity": 1
 | 
			
		||||
                  "windowOpacity": 1,
 | 
			
		||||
                  "margin": 0.5
 | 
			
		||||
                }'
 | 
			
		||||
            builtin: true
 | 
			
		||||
        }
 | 
			
		||||
@@ -600,9 +622,10 @@ QtObject{
 | 
			
		||||
                  "rasterization": 0,
 | 
			
		||||
                  "rbgShift": 0,
 | 
			
		||||
                  "saturationColor": 0.4983,
 | 
			
		||||
                  "screenCurvature": 0.05,
 | 
			
		||||
                  "screenCurvature": 0,
 | 
			
		||||
                  "staticNoise": 0.0955,
 | 
			
		||||
                  "windowOpacity": 0.7
 | 
			
		||||
                  "windowOpacity": 0.7,
 | 
			
		||||
                  "margin": 0.1
 | 
			
		||||
                }'
 | 
			
		||||
            builtin: true
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -13,10 +13,12 @@ Loader {
 | 
			
		||||
    property real delay: (1.0 / appSettings.fps) * 1000
 | 
			
		||||
    property real burnIn: appSettings.burnIn
 | 
			
		||||
    property real burnInFadeTime: 1 / Utils.lint(_minBurnInFadeTime, _maxBurnInFadeTime, burnIn)
 | 
			
		||||
    property real _minBurnInFadeTime: 160
 | 
			
		||||
    property real _maxBurnInFadeTime: 1600
 | 
			
		||||
    property real _minBurnInFadeTime: appSettings.minBurnInFadeTime
 | 
			
		||||
    property real _maxBurnInFadeTime: appSettings.maxBurnInFadeTime
 | 
			
		||||
 | 
			
		||||
    active: appSettings.burnIn !== 0
 | 
			
		||||
    active: appSettings.useFastBurnIn && appSettings.burnIn !== 0
 | 
			
		||||
 | 
			
		||||
    anchors.fill: parent
 | 
			
		||||
 | 
			
		||||
    function completelyUpdate() {
 | 
			
		||||
        prevLastUpdate = lastUpdate;
 | 
			
		||||
@@ -33,16 +35,6 @@ Loader {
 | 
			
		||||
    sourceComponent: Item {
 | 
			
		||||
        property alias source: burnInEffectSource
 | 
			
		||||
 | 
			
		||||
        property int burnInScaling: scaleTexture * appSettings.burnInQuality
 | 
			
		||||
 | 
			
		||||
        width: appSettings.lowResolutionFont
 | 
			
		||||
               ? kterminal.width * Math.max(1, burnInScaling)
 | 
			
		||||
               : kterminal.width * scaleTexture * appSettings.burnInQuality
 | 
			
		||||
 | 
			
		||||
        height: appSettings.lowResolutionFont
 | 
			
		||||
                ? kterminal.height * Math.max(1, burnInScaling)
 | 
			
		||||
                : kterminal.height * scaleTexture * appSettings.burnInQuality
 | 
			
		||||
 | 
			
		||||
        ShaderEffectSource {
 | 
			
		||||
            id: burnInEffectSource
 | 
			
		||||
 | 
			
		||||
@@ -52,13 +44,10 @@ Loader {
 | 
			
		||||
            live: false
 | 
			
		||||
            recursive: true
 | 
			
		||||
            hideSource: true
 | 
			
		||||
            wrapMode: kterminalSource.wrapMode
 | 
			
		||||
            wrapMode: ShaderEffectSource.ClampToEdge
 | 
			
		||||
 | 
			
		||||
            format: ShaderEffectSource.RGBA
 | 
			
		||||
 | 
			
		||||
            // Enabling smooth with a low burnInQuality causes bad artifacts because the FBO
 | 
			
		||||
            // has different values when it's read back. This lowers the quality, but makes it more consistent.
 | 
			
		||||
            smooth: appSettings.burnInQuality === 1.0
 | 
			
		||||
            smooth: true
 | 
			
		||||
 | 
			
		||||
            visible: false
 | 
			
		||||
 | 
			
		||||
@@ -91,7 +80,6 @@ Loader {
 | 
			
		||||
            property real prevLastUpdate: burnInEffect.prevLastUpdate
 | 
			
		||||
 | 
			
		||||
            anchors.fill: parent
 | 
			
		||||
 | 
			
		||||
            blending: false
 | 
			
		||||
 | 
			
		||||
            fragmentShader:
 | 
			
		||||
 
 | 
			
		||||
@@ -236,7 +236,9 @@ QtObject{
 | 
			
		||||
    function addSystemFonts() {
 | 
			
		||||
        var families = monospaceSystemFonts;
 | 
			
		||||
        for (var i = 0; i < families.length; i++) {
 | 
			
		||||
            console.log("Adding system font: ", families[i])
 | 
			
		||||
            if (verbose) {
 | 
			
		||||
                console.log("Adding system font: ", families[i])
 | 
			
		||||
            }
 | 
			
		||||
            fontlist.append(convertToListElement(families[i]))
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ import QtQuick 2.0
 | 
			
		||||
import "utils.js" as Utils
 | 
			
		||||
 | 
			
		||||
ShaderEffect {
 | 
			
		||||
    property color _staticFrameColor: "#dedede"
 | 
			
		||||
    property color _staticFrameColor: "#ffffff"
 | 
			
		||||
    property color _backgroundColor: appSettings.backgroundColor
 | 
			
		||||
    property color _fontColor: appSettings.fontColor
 | 
			
		||||
    property color _lightColor: Utils.mix(_fontColor, _backgroundColor, 0.2)
 | 
			
		||||
@@ -13,7 +13,7 @@ ShaderEffect {
 | 
			
		||||
    property real screenCurvature: appSettings.screenCurvature * appSettings.screenCurvatureSize
 | 
			
		||||
    property real shadowLength: 0.5 * screenCurvature * Utils.lint(0.50, 1.5, _ambientLight)
 | 
			
		||||
 | 
			
		||||
    visible: screenCurvature != 0
 | 
			
		||||
    property size aadelta: Qt.size(1.0 / width, 1.0 / height)
 | 
			
		||||
 | 
			
		||||
    fragmentShader: "
 | 
			
		||||
        #ifdef GL_ES
 | 
			
		||||
@@ -24,6 +24,7 @@ ShaderEffect {
 | 
			
		||||
        uniform lowp float shadowLength;
 | 
			
		||||
        uniform highp float qt_Opacity;
 | 
			
		||||
        uniform lowp vec4 frameColor;
 | 
			
		||||
        uniform mediump vec2 aadelta;
 | 
			
		||||
 | 
			
		||||
        varying highp vec2 qt_TexCoord0;
 | 
			
		||||
 | 
			
		||||
@@ -41,6 +42,10 @@ ShaderEffect {
 | 
			
		||||
            return min(v.x, v.y);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        float prod2(vec2 v) {
 | 
			
		||||
            return v.x * v.y;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        float sum2(vec2 v) {
 | 
			
		||||
            return v.x + v.y;
 | 
			
		||||
        }
 | 
			
		||||
@@ -53,17 +58,17 @@ ShaderEffect {
 | 
			
		||||
            float alpha = 0.0;
 | 
			
		||||
 | 
			
		||||
            float outShadowLength = shadowLength;
 | 
			
		||||
            float inShadowLength = 0.5 * shadowLength;
 | 
			
		||||
            float inShadowLength = shadowLength * 0.5;
 | 
			
		||||
 | 
			
		||||
            float outShadow = max2(1.0 - smoothstep(vec2(-outShadowLength), vec2(0.0), coords) + smoothstep(vec2(1.0), vec2(1.0 + outShadowLength), coords));
 | 
			
		||||
            outShadow = clamp(0.0, 1.0, outShadow);
 | 
			
		||||
            color += frameColor.rgb * sqrt(outShadow);
 | 
			
		||||
            alpha = sum2(1.0 - step(0.0, coords) + step(1.0, coords));
 | 
			
		||||
            alpha = clamp(alpha, 0.0, 1.0) * mix(1.0, 0.9, sqrt(outShadow));
 | 
			
		||||
            outShadow = clamp(sqrt(outShadow), 0.0, 1.0);
 | 
			
		||||
            color += frameColor.rgb * outShadow;
 | 
			
		||||
            alpha = sum2(1.0 - smoothstep(vec2(0.0), aadelta, coords) + smoothstep(vec2(1.0) - aadelta, vec2(1.0), coords));
 | 
			
		||||
            alpha = clamp(alpha, 0.0, 1.0) * mix(1.0, 0.9, outShadow);
 | 
			
		||||
 | 
			
		||||
            float inShadow = min2(step(vec2(0.0), coords) - step(vec2(1.0), coords));
 | 
			
		||||
            inShadow -= min2(smoothstep(0.0, inShadowLength, coords) - smoothstep(1.0 - inShadowLength, 1.0, coords));
 | 
			
		||||
            alpha += 0.35 * inShadow;
 | 
			
		||||
            float inShadow = 1.0 - prod2(smoothstep(0.0, inShadowLength, coords) - smoothstep(1.0 - inShadowLength, 1.0, coords));
 | 
			
		||||
            inShadow = 0.5 * inShadow * inShadow;
 | 
			
		||||
            alpha = max(alpha, inShadow);
 | 
			
		||||
 | 
			
		||||
            gl_FragColor = vec4(color * alpha, alpha);
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -28,11 +28,12 @@ import "utils.js" as Utils
 | 
			
		||||
Item{
 | 
			
		||||
    id: terminalContainer
 | 
			
		||||
 | 
			
		||||
    property size virtualResolution: Qt.size(kterminal.width, kterminal.height)
 | 
			
		||||
    property size virtualResolution: Qt.size(kterminal.totalWidth, kterminal.totalHeight)
 | 
			
		||||
    property alias mainTerminal: kterminal
 | 
			
		||||
 | 
			
		||||
    property ShaderEffectSource mainSource: kterminalSource
 | 
			
		||||
    property BurnInEffect burnInEffect: burnInEffect
 | 
			
		||||
    property SlowBurnIn slowBurnInEffect: slowBurnInEffect
 | 
			
		||||
    property real fontWidth: 1.0
 | 
			
		||||
    property real screenScaling: 1.0
 | 
			
		||||
    property real scaleTexture: 1.0
 | 
			
		||||
@@ -69,8 +70,24 @@ Item{
 | 
			
		||||
 | 
			
		||||
    QMLTermWidget {
 | 
			
		||||
        id: kterminal
 | 
			
		||||
        width: Math.floor(parent.width / (screenScaling * fontWidth))
 | 
			
		||||
        height: Math.floor(parent.height / screenScaling)
 | 
			
		||||
 | 
			
		||||
        property int textureResolutionScale: appSettings.lowResolutionFont ? devicePixelRatio : 1
 | 
			
		||||
        property int margin: appSettings.margin / screenScaling
 | 
			
		||||
        property int totalWidth: Math.floor(parent.width / (screenScaling * fontWidth))
 | 
			
		||||
        property int totalHeight: Math.floor(parent.height / screenScaling)
 | 
			
		||||
 | 
			
		||||
        property int rawWidth: totalWidth - 2 * margin
 | 
			
		||||
        property int rawHeight: totalHeight - 2 * margin
 | 
			
		||||
 | 
			
		||||
        textureSize: Qt.size(width / textureResolutionScale, height / textureResolutionScale)
 | 
			
		||||
 | 
			
		||||
        width: ensureMultiple(rawWidth, devicePixelRatio)
 | 
			
		||||
        height: ensureMultiple(rawHeight, devicePixelRatio)
 | 
			
		||||
 | 
			
		||||
        /** Ensure size is a multiple of factor. This is needed for pixel perfect scaling on highdpi screens. */
 | 
			
		||||
        function ensureMultiple(size, factor) {
 | 
			
		||||
            return Math.round(size / factor) * factor;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        colorScheme: "cool-retro-term"
 | 
			
		||||
 | 
			
		||||
@@ -167,6 +184,8 @@ Item{
 | 
			
		||||
    property alias contextmenu: menuLoader.item
 | 
			
		||||
 | 
			
		||||
    MouseArea{
 | 
			
		||||
        property real margin: appSettings.margin
 | 
			
		||||
 | 
			
		||||
        acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
 | 
			
		||||
        anchors.fill: parent
 | 
			
		||||
        cursorShape: kterminal.terminalUsesMouse ? Qt.ArrowCursor : Qt.IBeamCursor
 | 
			
		||||
@@ -200,14 +219,14 @@ Item{
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function correctDistortion(x, y){
 | 
			
		||||
            x = x / width;
 | 
			
		||||
            y = y / height;
 | 
			
		||||
            x = (x - margin) / width;
 | 
			
		||||
            y = (y - margin) / height;
 | 
			
		||||
 | 
			
		||||
            var cc = Qt.size(0.5 - x, 0.5 - y);
 | 
			
		||||
            var distortion = (cc.height * cc.height + cc.width * cc.width) * appSettings.screenCurvature * appSettings.screenCurvatureSize;
 | 
			
		||||
 | 
			
		||||
            return Qt.point((x - cc.width  * (1+distortion) * distortion) * kterminal.width,
 | 
			
		||||
                           (y - cc.height * (1+distortion) * distortion) * kterminal.height)
 | 
			
		||||
            return Qt.point((x - cc.width  * (1+distortion) * distortion) * kterminal.totalWidth,
 | 
			
		||||
                           (y - cc.height * (1+distortion) * distortion) * kterminal.totalHeight)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ShaderEffectSource{
 | 
			
		||||
@@ -216,10 +235,30 @@ Item{
 | 
			
		||||
        hideSource: true
 | 
			
		||||
        wrapMode: ShaderEffectSource.Repeat
 | 
			
		||||
        visible: false
 | 
			
		||||
        textureSize: Qt.size(kterminal.width * scaleTexture, kterminal.height * scaleTexture);
 | 
			
		||||
        textureSize: Qt.size(kterminal.totalWidth * scaleTexture, kterminal.totalHeight * scaleTexture)
 | 
			
		||||
        sourceRect: Qt.rect(-kterminal.margin, -kterminal.margin, kterminal.totalWidth, kterminal.totalHeight)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    BurnInEffect {
 | 
			
		||||
        id: burnInEffect
 | 
			
		||||
    Item {
 | 
			
		||||
        id: burnInContainer
 | 
			
		||||
 | 
			
		||||
        property int burnInScaling: scaleTexture * appSettings.burnInQuality
 | 
			
		||||
 | 
			
		||||
        width: Math.round(appSettings.lowResolutionFont
 | 
			
		||||
               ? kterminal.totalWidth * Math.max(1, burnInScaling)
 | 
			
		||||
               : kterminal.totalWidth * scaleTexture * appSettings.burnInQuality)
 | 
			
		||||
 | 
			
		||||
        height: Math.round(appSettings.lowResolutionFont
 | 
			
		||||
                ? kterminal.totalHeight * Math.max(1, burnInScaling)
 | 
			
		||||
                : kterminal.totalHeight * scaleTexture * appSettings.burnInQuality)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        BurnInEffect {
 | 
			
		||||
            id: burnInEffect
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        SlowBurnIn {
 | 
			
		||||
            id: slowBurnInEffect
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -27,13 +27,48 @@ import "Components"
 | 
			
		||||
Tab{
 | 
			
		||||
    ColumnLayout{
 | 
			
		||||
        anchors.fill: parent
 | 
			
		||||
 | 
			
		||||
        GroupBox{
 | 
			
		||||
            title: qsTr("General")
 | 
			
		||||
            Layout.fillWidth: true
 | 
			
		||||
            title: qsTr("Command")
 | 
			
		||||
            ColumnLayout {
 | 
			
		||||
                anchors.fill: parent
 | 
			
		||||
                CheckBox{
 | 
			
		||||
                    id: useCustomCommand
 | 
			
		||||
                    text: qsTr("Use custom command instead of shell at startup")
 | 
			
		||||
                    checked: appSettings.useCustomCommand
 | 
			
		||||
                    onCheckedChanged: appSettings.useCustomCommand = checked
 | 
			
		||||
                }
 | 
			
		||||
                // Workaround for QTBUG-31627 for pre 5.3.0
 | 
			
		||||
                Binding{
 | 
			
		||||
                    target: useCustomCommand
 | 
			
		||||
                    property: "checked"
 | 
			
		||||
                    value: appSettings.useCustomCommand
 | 
			
		||||
                }
 | 
			
		||||
                TextField{
 | 
			
		||||
                    id: customCommand
 | 
			
		||||
                    Layout.fillWidth: true
 | 
			
		||||
                    text: appSettings.customCommand
 | 
			
		||||
                    enabled: useCustomCommand.checked
 | 
			
		||||
                    onEditingFinished: appSettings.customCommand = text
 | 
			
		||||
 | 
			
		||||
                    // Save text even if user forgets to press enter or unfocus
 | 
			
		||||
                    function saveSetting() {
 | 
			
		||||
                        appSettings.customCommand = text;
 | 
			
		||||
                    }
 | 
			
		||||
                    Component.onCompleted: settings_window.closing.connect(saveSetting)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        GroupBox{
 | 
			
		||||
            title: qsTr("Performance")
 | 
			
		||||
            Layout.fillWidth: true
 | 
			
		||||
            GridLayout{
 | 
			
		||||
                anchors.fill: parent
 | 
			
		||||
                rows: 2
 | 
			
		||||
                columns: 3
 | 
			
		||||
 | 
			
		||||
                Label{text: qsTr("Effects FPS")}
 | 
			
		||||
                Slider{
 | 
			
		||||
                    Layout.fillWidth: true
 | 
			
		||||
@@ -52,6 +87,7 @@ Tab{
 | 
			
		||||
                        enabled = true;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                SizedLabel{text: appSettings.fps !== 0 ? appSettings.fps : qsTr("Max")}
 | 
			
		||||
                Label{text: qsTr("Texture Quality")}
 | 
			
		||||
                Slider{
 | 
			
		||||
@@ -67,14 +103,7 @@ Tab{
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                SizedLabel{text: Math.round(txtslider.value * 100) + "%"}
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        GroupBox{
 | 
			
		||||
            title: qsTr("Bloom")
 | 
			
		||||
            Layout.fillWidth: true
 | 
			
		||||
            GridLayout{
 | 
			
		||||
                id: bloomQualityContainer
 | 
			
		||||
                anchors.fill: parent
 | 
			
		||||
 | 
			
		||||
                Label{text: qsTr("Bloom Quality")}
 | 
			
		||||
                Slider{
 | 
			
		||||
                    Layout.fillWidth: true
 | 
			
		||||
@@ -89,14 +118,6 @@ Tab{
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                SizedLabel{text: Math.round(bloomSlider.value * 100) + "%"}
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        GroupBox{
 | 
			
		||||
            title: qsTr("BurnIn")
 | 
			
		||||
            Layout.fillWidth: true
 | 
			
		||||
            GridLayout{
 | 
			
		||||
                id: blurQualityContainer
 | 
			
		||||
                anchors.fill: parent
 | 
			
		||||
 | 
			
		||||
                Label{text: qsTr("BurnIn Quality")}
 | 
			
		||||
                Slider{
 | 
			
		||||
@@ -112,6 +133,12 @@ Tab{
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                SizedLabel{text: Math.round(burnInSlider.value * 100) + "%"}
 | 
			
		||||
                CheckBox{
 | 
			
		||||
                    Layout.columnSpan: 2
 | 
			
		||||
                    text: qsTr("Burnin optimization (Might display timing artifacts)")
 | 
			
		||||
                    checked: appSettings.useFastBurnIn
 | 
			
		||||
                    onCheckedChanged: appSettings.useFastBurnIn = checked
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -23,62 +23,68 @@ import QtQuick.Controls 1.1
 | 
			
		||||
import QtQuick.Layouts 1.1
 | 
			
		||||
 | 
			
		||||
Tab{
 | 
			
		||||
    GroupBox{
 | 
			
		||||
        title: qsTr("Effects")
 | 
			
		||||
    ColumnLayout{
 | 
			
		||||
        anchors.fill: parent
 | 
			
		||||
        ColumnLayout{
 | 
			
		||||
            anchors.fill: parent
 | 
			
		||||
            spacing: 2
 | 
			
		||||
            CheckableSlider{
 | 
			
		||||
                name: qsTr("Bloom")
 | 
			
		||||
                onNewValue: appSettings.bloom = newValue
 | 
			
		||||
                value: appSettings.bloom
 | 
			
		||||
            }
 | 
			
		||||
            CheckableSlider{
 | 
			
		||||
                name: qsTr("BurnIn")
 | 
			
		||||
                onNewValue: appSettings.burnIn = newValue
 | 
			
		||||
                value: appSettings.burnIn
 | 
			
		||||
            }
 | 
			
		||||
            CheckableSlider{
 | 
			
		||||
                name: qsTr("Static Noise")
 | 
			
		||||
                onNewValue: appSettings.staticNoise = newValue
 | 
			
		||||
                value: appSettings.staticNoise
 | 
			
		||||
            }
 | 
			
		||||
            CheckableSlider{
 | 
			
		||||
                name: qsTr("Jitter")
 | 
			
		||||
                onNewValue: appSettings.jitter = newValue
 | 
			
		||||
                value: appSettings.jitter
 | 
			
		||||
            }
 | 
			
		||||
            CheckableSlider{
 | 
			
		||||
                name: qsTr("Glow Line")
 | 
			
		||||
                onNewValue: appSettings.glowingLine = newValue;
 | 
			
		||||
                value: appSettings.glowingLine
 | 
			
		||||
            }
 | 
			
		||||
            CheckableSlider{
 | 
			
		||||
                name: qsTr("Screen Curvature")
 | 
			
		||||
                onNewValue: appSettings.screenCurvature = newValue;
 | 
			
		||||
                value: appSettings.screenCurvature;
 | 
			
		||||
            }
 | 
			
		||||
            CheckableSlider{
 | 
			
		||||
                name: qsTr("Ambient Light")
 | 
			
		||||
                onNewValue: appSettings.ambientLight = newValue;
 | 
			
		||||
                value: appSettings.ambientLight
 | 
			
		||||
                enabled: appSettings.framesIndex !== 0
 | 
			
		||||
            }
 | 
			
		||||
            CheckableSlider{
 | 
			
		||||
                name: qsTr("Flickering")
 | 
			
		||||
                onNewValue: appSettings.flickering = newValue;
 | 
			
		||||
                value: appSettings.flickering;
 | 
			
		||||
            }
 | 
			
		||||
            CheckableSlider{
 | 
			
		||||
                name: qsTr("Horizontal Sync")
 | 
			
		||||
                onNewValue: appSettings.horizontalSync = newValue;
 | 
			
		||||
                value: appSettings.horizontalSync;
 | 
			
		||||
            }
 | 
			
		||||
            CheckableSlider{
 | 
			
		||||
                name: qsTr("RGB Shift")
 | 
			
		||||
                onNewValue: appSettings.rbgShift = newValue;
 | 
			
		||||
                value: appSettings.rbgShift;
 | 
			
		||||
        spacing: 2
 | 
			
		||||
 | 
			
		||||
        GroupBox{
 | 
			
		||||
            title: qsTr("Effects")
 | 
			
		||||
            Layout.fillWidth: true
 | 
			
		||||
 | 
			
		||||
            ColumnLayout {
 | 
			
		||||
                anchors.fill: parent
 | 
			
		||||
 | 
			
		||||
                CheckableSlider{
 | 
			
		||||
                    name: qsTr("Bloom")
 | 
			
		||||
                    onNewValue: appSettings.bloom = newValue
 | 
			
		||||
                    value: appSettings.bloom
 | 
			
		||||
                }
 | 
			
		||||
                CheckableSlider{
 | 
			
		||||
                    name: qsTr("BurnIn")
 | 
			
		||||
                    onNewValue: appSettings.burnIn = newValue
 | 
			
		||||
                    value: appSettings.burnIn
 | 
			
		||||
                }
 | 
			
		||||
                CheckableSlider{
 | 
			
		||||
                    name: qsTr("Static Noise")
 | 
			
		||||
                    onNewValue: appSettings.staticNoise = newValue
 | 
			
		||||
                    value: appSettings.staticNoise
 | 
			
		||||
                }
 | 
			
		||||
                CheckableSlider{
 | 
			
		||||
                    name: qsTr("Jitter")
 | 
			
		||||
                    onNewValue: appSettings.jitter = newValue
 | 
			
		||||
                    value: appSettings.jitter
 | 
			
		||||
                }
 | 
			
		||||
                CheckableSlider{
 | 
			
		||||
                    name: qsTr("Glow Line")
 | 
			
		||||
                    onNewValue: appSettings.glowingLine = newValue;
 | 
			
		||||
                    value: appSettings.glowingLine
 | 
			
		||||
                }
 | 
			
		||||
                CheckableSlider{
 | 
			
		||||
                    name: qsTr("Screen Curvature")
 | 
			
		||||
                    onNewValue: appSettings.screenCurvature = newValue;
 | 
			
		||||
                    value: appSettings.screenCurvature;
 | 
			
		||||
                }
 | 
			
		||||
                CheckableSlider{
 | 
			
		||||
                    name: qsTr("Ambient Light")
 | 
			
		||||
                    onNewValue: appSettings.ambientLight = newValue;
 | 
			
		||||
                    value: appSettings.ambientLight
 | 
			
		||||
                    enabled: appSettings.framesIndex !== 0
 | 
			
		||||
                }
 | 
			
		||||
                CheckableSlider{
 | 
			
		||||
                    name: qsTr("Flickering")
 | 
			
		||||
                    onNewValue: appSettings.flickering = newValue;
 | 
			
		||||
                    value: appSettings.flickering;
 | 
			
		||||
                }
 | 
			
		||||
                CheckableSlider{
 | 
			
		||||
                    name: qsTr("Horizontal Sync")
 | 
			
		||||
                    onNewValue: appSettings.horizontalSync = newValue;
 | 
			
		||||
                    value: appSettings.horizontalSync;
 | 
			
		||||
                }
 | 
			
		||||
                CheckableSlider{
 | 
			
		||||
                    name: qsTr("RGB Shift")
 | 
			
		||||
                    onNewValue: appSettings.rbgShift = newValue;
 | 
			
		||||
                    value: appSettings.rbgShift;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -52,7 +52,7 @@ Tab{
 | 
			
		||||
                    Layout.fillWidth: false
 | 
			
		||||
                    Button{
 | 
			
		||||
                        Layout.fillWidth: true
 | 
			
		||||
                        text: qsTr("New")
 | 
			
		||||
                        text: qsTr("Save")
 | 
			
		||||
                        onClicked: {
 | 
			
		||||
                            insertname.profileName = "";
 | 
			
		||||
                            insertname.show()
 | 
			
		||||
@@ -164,34 +164,30 @@ Tab{
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        GroupBox{
 | 
			
		||||
            title: qsTr("Screen")
 | 
			
		||||
            Layout.fillWidth: true
 | 
			
		||||
            title: qsTr("Command")
 | 
			
		||||
            ColumnLayout {
 | 
			
		||||
            GridLayout{
 | 
			
		||||
                anchors.fill: parent
 | 
			
		||||
                CheckBox{
 | 
			
		||||
                    id: useCustomCommand
 | 
			
		||||
                    text: qsTr("Use custom command instead of shell at startup")
 | 
			
		||||
                    checked: appSettings.useCustomCommand
 | 
			
		||||
                    onCheckedChanged: appSettings.useCustomCommand = checked
 | 
			
		||||
                columns: 2
 | 
			
		||||
                Label{ text: qsTr("Brightness") }
 | 
			
		||||
                SimpleSlider{
 | 
			
		||||
                    onValueChanged: appSettings.brightness = value
 | 
			
		||||
                    value: appSettings.brightness
 | 
			
		||||
                }
 | 
			
		||||
                // Workaround for QTBUG-31627 for pre 5.3.0
 | 
			
		||||
                Binding{
 | 
			
		||||
                    target: useCustomCommand
 | 
			
		||||
                    property: "checked"
 | 
			
		||||
                    value: appSettings.useCustomCommand
 | 
			
		||||
                Label{ text: qsTr("Contrast") }
 | 
			
		||||
                SimpleSlider{
 | 
			
		||||
                    onValueChanged: appSettings.contrast = value
 | 
			
		||||
                    value: appSettings.contrast
 | 
			
		||||
                }
 | 
			
		||||
                TextField{
 | 
			
		||||
                    id: customCommand
 | 
			
		||||
                    Layout.fillWidth: true
 | 
			
		||||
                    text: appSettings.customCommand
 | 
			
		||||
                    enabled: useCustomCommand.checked
 | 
			
		||||
                    onEditingFinished: appSettings.customCommand = text
 | 
			
		||||
 | 
			
		||||
                    // Save text even if user forgets to press enter or unfocus
 | 
			
		||||
                    function saveSetting() {
 | 
			
		||||
                        appSettings.customCommand = text;
 | 
			
		||||
                    }
 | 
			
		||||
                    Component.onCompleted: settings_window.closing.connect(saveSetting)
 | 
			
		||||
                Label{ text: qsTr("Margin") }
 | 
			
		||||
                SimpleSlider{
 | 
			
		||||
                    onValueChanged: appSettings._margin = value
 | 
			
		||||
                    value: appSettings._margin
 | 
			
		||||
                }
 | 
			
		||||
                Label{ text: qsTr("Opacity") }
 | 
			
		||||
                SimpleSlider{
 | 
			
		||||
                    onValueChanged: appSettings.windowOpacity = value
 | 
			
		||||
                    value: appSettings.windowOpacity
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,67 +0,0 @@
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
* Copyright (c) 2013 "Filippo Scognamiglio"
 | 
			
		||||
* https://github.com/Swordfish90/cool-retro-term
 | 
			
		||||
*
 | 
			
		||||
* This file is part of cool-retro-term.
 | 
			
		||||
*
 | 
			
		||||
* cool-retro-term is free software: you can redistribute it and/or modify
 | 
			
		||||
* it under the terms of the GNU General Public License as published by
 | 
			
		||||
* the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
* (at your option) any later version.
 | 
			
		||||
*
 | 
			
		||||
* This program is distributed in the hope that it will be useful,
 | 
			
		||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
* GNU General Public License for more details.
 | 
			
		||||
*
 | 
			
		||||
* You should have received a copy of the GNU General Public License
 | 
			
		||||
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*******************************************************************************/
 | 
			
		||||
 | 
			
		||||
import QtQuick 2.2
 | 
			
		||||
import QtQuick.Controls 1.1
 | 
			
		||||
import QtQuick.Layouts 1.1
 | 
			
		||||
import QtQuick.Dialogs 1.1
 | 
			
		||||
 | 
			
		||||
Tab{
 | 
			
		||||
    ColumnLayout{
 | 
			
		||||
        anchors.fill: parent
 | 
			
		||||
        GroupBox{
 | 
			
		||||
            title: qsTr("Rasterization Mode")
 | 
			
		||||
            Layout.fillWidth: true
 | 
			
		||||
            ComboBox {
 | 
			
		||||
                id: rasterizationBox
 | 
			
		||||
                property string selectedElement: model[currentIndex]
 | 
			
		||||
                anchors.fill: parent
 | 
			
		||||
                model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")]
 | 
			
		||||
                currentIndex: appSettings.rasterization
 | 
			
		||||
                onCurrentIndexChanged: {
 | 
			
		||||
                    appSettings.rasterization = currentIndex
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        GroupBox{
 | 
			
		||||
            title: qsTr("Lights")
 | 
			
		||||
            Layout.fillWidth: true
 | 
			
		||||
            GridLayout{
 | 
			
		||||
                anchors.fill: parent
 | 
			
		||||
                columns: 2
 | 
			
		||||
                Label{ text: qsTr("Brightness") }
 | 
			
		||||
                SimpleSlider{
 | 
			
		||||
                    onValueChanged: appSettings.brightness = value
 | 
			
		||||
                    value: appSettings.brightness
 | 
			
		||||
                }
 | 
			
		||||
                Label{ text: qsTr("Contrast") }
 | 
			
		||||
                SimpleSlider{
 | 
			
		||||
                    onValueChanged: appSettings.contrast = value
 | 
			
		||||
                    value: appSettings.contrast
 | 
			
		||||
                }
 | 
			
		||||
                Label{ text: qsTr("Opacity") }
 | 
			
		||||
                SimpleSlider{
 | 
			
		||||
                    onValueChanged: appSettings.windowOpacity = value
 | 
			
		||||
                    value: appSettings.windowOpacity
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -27,13 +27,26 @@ import "Components"
 | 
			
		||||
Tab{
 | 
			
		||||
    ColumnLayout{
 | 
			
		||||
        anchors.fill: parent
 | 
			
		||||
 | 
			
		||||
        GroupBox{
 | 
			
		||||
            property var rasterization: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")][appSettings.rasterization]
 | 
			
		||||
            title: qsTr("Font " + "(" + rasterization + ")")
 | 
			
		||||
            title: qsTr("Font")
 | 
			
		||||
            Layout.fillWidth: true
 | 
			
		||||
            GridLayout{
 | 
			
		||||
                anchors.fill: parent
 | 
			
		||||
                columns: 2
 | 
			
		||||
                Label { text: qsTr("Rasterization") }
 | 
			
		||||
                ComboBox {
 | 
			
		||||
                    id: rasterizationBox
 | 
			
		||||
 | 
			
		||||
                    property string selectedElement: model[currentIndex]
 | 
			
		||||
 | 
			
		||||
                    Layout.fillWidth: true
 | 
			
		||||
                    model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")]
 | 
			
		||||
                    currentIndex: appSettings.rasterization
 | 
			
		||||
                    onCurrentIndexChanged: {
 | 
			
		||||
                        appSettings.rasterization = currentIndex
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                Label{ text: qsTr("Name") }
 | 
			
		||||
                ComboBox{
 | 
			
		||||
                    id: fontChanger
 | 
			
		||||
 
 | 
			
		||||
@@ -36,33 +36,27 @@ Window {
 | 
			
		||||
        id: tabView
 | 
			
		||||
        anchors.fill: parent
 | 
			
		||||
        anchors.margins: 10
 | 
			
		||||
        SettingsGeneralTab{
 | 
			
		||||
        SettingsGeneralTab {
 | 
			
		||||
            id: generalTab
 | 
			
		||||
            title: qsTr("General")
 | 
			
		||||
            anchors.fill: parent
 | 
			
		||||
            anchors.margins: tabmargins
 | 
			
		||||
        }
 | 
			
		||||
        SettingsScreenTab{
 | 
			
		||||
            id: screenTab
 | 
			
		||||
            title: qsTr("Screen")
 | 
			
		||||
            anchors.fill: parent
 | 
			
		||||
            anchors.margins: tabmargins
 | 
			
		||||
        }
 | 
			
		||||
        SettingsTerminalTab{
 | 
			
		||||
        SettingsTerminalTab {
 | 
			
		||||
            id: terminalTab
 | 
			
		||||
            title: qsTr("Terminal")
 | 
			
		||||
            anchors.fill: parent
 | 
			
		||||
            anchors.margins: tabmargins
 | 
			
		||||
        }
 | 
			
		||||
        SettingsEffectsTab{
 | 
			
		||||
        SettingsEffectsTab {
 | 
			
		||||
            id: effectsTab
 | 
			
		||||
            title: qsTr("Effects")
 | 
			
		||||
            anchors.fill: parent
 | 
			
		||||
            anchors.margins: tabmargins
 | 
			
		||||
        }
 | 
			
		||||
        SettingsPerformanceTab{
 | 
			
		||||
        SettingsAdvancedTab {
 | 
			
		||||
            id: performanceTab
 | 
			
		||||
            title: qsTr("Performance")
 | 
			
		||||
            title: qsTr("Advanced")
 | 
			
		||||
            anchors.fill: parent
 | 
			
		||||
            anchors.margins: tabmargins
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -23,330 +23,513 @@ import QtGraphicalEffects 1.0
 | 
			
		||||
 | 
			
		||||
import "utils.js" as Utils
 | 
			
		||||
 | 
			
		||||
ShaderEffect {
 | 
			
		||||
Item {
 | 
			
		||||
    property SlowBurnIn slowBurnInEffect
 | 
			
		||||
    property ShaderEffectSource source
 | 
			
		||||
    property BurnInEffect burnInEffect
 | 
			
		||||
    property ShaderEffectSource bloomSource
 | 
			
		||||
 | 
			
		||||
    property color fontColor: appSettings.fontColor
 | 
			
		||||
    property color backgroundColor: appSettings.backgroundColor
 | 
			
		||||
    property real bloom: appSettings.bloom * 2.5
 | 
			
		||||
 | 
			
		||||
    property ShaderEffectSource burnInSource: burnInEffect.source
 | 
			
		||||
    property real burnIn: appSettings.burnIn
 | 
			
		||||
    property real burnInLastUpdate: burnInEffect.lastUpdate
 | 
			
		||||
    property real burnInTime: burnInEffect.burnInFadeTime
 | 
			
		||||
 | 
			
		||||
    property real jitter: appSettings.jitter
 | 
			
		||||
    property size jitterDisplacement: Qt.size(0.007 * jitter, 0.002 * jitter)
 | 
			
		||||
 | 
			
		||||
    property real staticNoise: appSettings.staticNoise
 | 
			
		||||
    property size scaleNoiseSize: Qt.size((width) / (noiseTexture.width * appSettings.windowScaling * appSettings.totalFontScaling),
 | 
			
		||||
                                          (height) / (noiseTexture.height * appSettings.windowScaling * appSettings.totalFontScaling))
 | 
			
		||||
 | 
			
		||||
    property real screenCurvature: appSettings.screenCurvature * appSettings.screenCurvatureSize
 | 
			
		||||
    property real glowingLine: appSettings.glowingLine * 0.2
 | 
			
		||||
 | 
			
		||||
    property real chromaColor: appSettings.chromaColor;
 | 
			
		||||
 | 
			
		||||
    property real rbgShift: (appSettings.rbgShift / width) * appSettings.totalFontScaling
 | 
			
		||||
 | 
			
		||||
    property real flickering: appSettings.flickering
 | 
			
		||||
    property real horizontalSync: appSettings.horizontalSync * 0.5
 | 
			
		||||
 | 
			
		||||
    property int rasterization: appSettings.rasterization
 | 
			
		||||
 | 
			
		||||
    property real screen_brightness: Utils.lint(0.5, 1.5, appSettings.brightness)
 | 
			
		||||
    property real chromaColor: appSettings.chromaColor
 | 
			
		||||
 | 
			
		||||
    property real ambientLight: appSettings.ambientLight * 0.2
 | 
			
		||||
 | 
			
		||||
    property size virtual_resolution
 | 
			
		||||
 | 
			
		||||
    property real time: timeManager.time
 | 
			
		||||
    property ShaderEffectSource noiseSource: noiseShaderSource
 | 
			
		||||
     ShaderEffect {
 | 
			
		||||
         id: dynamicShader
 | 
			
		||||
 | 
			
		||||
    // If something goes wrong activate the fallback version of the shader.
 | 
			
		||||
    property bool fallBack: false
 | 
			
		||||
         property ShaderEffectSource screenBuffer: frameBuffer
 | 
			
		||||
         property ShaderEffectSource burnInSource: burnInEffect.source
 | 
			
		||||
         property ShaderEffectSource frameSource: terminalFrameLoader.item
 | 
			
		||||
 | 
			
		||||
    blending: false
 | 
			
		||||
         property color fontColor: parent.fontColor
 | 
			
		||||
         property color backgroundColor: parent.backgroundColor
 | 
			
		||||
         property real screenCurvature: parent.screenCurvature
 | 
			
		||||
         property real chromaColor: parent.chromaColor
 | 
			
		||||
         property real ambientLight: parent.ambientLight
 | 
			
		||||
 | 
			
		||||
    //Smooth random texture used for flickering effect.
 | 
			
		||||
    Image{
 | 
			
		||||
        id: noiseTexture
 | 
			
		||||
        source: "images/allNoise512.png"
 | 
			
		||||
        width: 512
 | 
			
		||||
        height: 512
 | 
			
		||||
        fillMode: Image.Tile
 | 
			
		||||
        visible: false
 | 
			
		||||
    }
 | 
			
		||||
    ShaderEffectSource{
 | 
			
		||||
        id: noiseShaderSource
 | 
			
		||||
        sourceItem: noiseTexture
 | 
			
		||||
        wrapMode: ShaderEffectSource.Repeat
 | 
			
		||||
        visible: false
 | 
			
		||||
        smooth: true
 | 
			
		||||
    }
 | 
			
		||||
         property real flickering: appSettings.flickering
 | 
			
		||||
         property real horizontalSync: appSettings.horizontalSync
 | 
			
		||||
         property real horizontalSyncStrength: Utils.lint(0.05, 0.35, horizontalSync)
 | 
			
		||||
         property real glowingLine: appSettings.glowingLine * 0.2
 | 
			
		||||
 | 
			
		||||
    //Print the number with a reasonable precision for the shader.
 | 
			
		||||
    function str(num){
 | 
			
		||||
        return num.toFixed(8);
 | 
			
		||||
    }
 | 
			
		||||
         // Fast burnin properties
 | 
			
		||||
         property real burnIn: appSettings.useFastBurnIn ? appSettings.burnIn : 0
 | 
			
		||||
         property real burnInLastUpdate: burnInEffect.lastUpdate
 | 
			
		||||
         property real burnInTime: burnInEffect.burnInFadeTime
 | 
			
		||||
 | 
			
		||||
    vertexShader: "
 | 
			
		||||
        uniform highp mat4 qt_Matrix;
 | 
			
		||||
        uniform highp float time;
 | 
			
		||||
         // Slow burnin properties
 | 
			
		||||
         property real slowBurnIn: appSettings.useFastBurnIn ? 0 : appSettings.burnIn
 | 
			
		||||
         property ShaderEffectSource slowBurnInSource: slowBurnInEffect.source
 | 
			
		||||
 | 
			
		||||
        attribute highp vec4 qt_Vertex;
 | 
			
		||||
        attribute highp vec2 qt_MultiTexCoord0;
 | 
			
		||||
         property real jitter: appSettings.jitter
 | 
			
		||||
         property size jitterDisplacement: Qt.size(0.007 * jitter, 0.002 * jitter)
 | 
			
		||||
         property real shadowLength: 0.25 * screenCurvature * Utils.lint(0.50, 1.5, ambientLight)
 | 
			
		||||
         property real staticNoise: appSettings.staticNoise
 | 
			
		||||
         property size scaleNoiseSize: Qt.size((width) / (noiseTexture.width * appSettings.windowScaling * appSettings.totalFontScaling),
 | 
			
		||||
                                               (height) / (noiseTexture.height * appSettings.windowScaling * appSettings.totalFontScaling))
 | 
			
		||||
 | 
			
		||||
        varying highp vec2 qt_TexCoord0;" +
 | 
			
		||||
         property size virtual_resolution: parent.virtual_resolution
 | 
			
		||||
 | 
			
		||||
        (!fallBack ? "
 | 
			
		||||
            uniform sampler2D noiseSource;" : "") +
 | 
			
		||||
         property real time: timeManager.time
 | 
			
		||||
         property ShaderEffectSource noiseSource: noiseShaderSource
 | 
			
		||||
 | 
			
		||||
        (!fallBack && rbgShift !== 0.0 ?"
 | 
			
		||||
            varying lowp vec4 constantNoise;" : "") +
 | 
			
		||||
         // If something goes wrong activate the fallback version of the shader.
 | 
			
		||||
         property bool fallBack: false
 | 
			
		||||
 | 
			
		||||
        (!fallBack && flickering !== 0.0 ?"
 | 
			
		||||
            varying lowp float brightness;
 | 
			
		||||
            uniform lowp float flickering;" : "") +
 | 
			
		||||
         anchors.fill: parent
 | 
			
		||||
         blending: false
 | 
			
		||||
 | 
			
		||||
        (!fallBack && horizontalSync !== 0.0 ?"
 | 
			
		||||
            uniform lowp float horizontalSync;
 | 
			
		||||
            varying lowp float distortionScale;
 | 
			
		||||
            varying lowp float distortionFreq;" : "") +
 | 
			
		||||
         //Smooth random texture used for flickering effect.
 | 
			
		||||
         Image{
 | 
			
		||||
             id: noiseTexture
 | 
			
		||||
             source: "images/allNoise512.png"
 | 
			
		||||
             width: 512
 | 
			
		||||
             height: 512
 | 
			
		||||
             fillMode: Image.Tile
 | 
			
		||||
             visible: false
 | 
			
		||||
         }
 | 
			
		||||
         ShaderEffectSource{
 | 
			
		||||
             id: noiseShaderSource
 | 
			
		||||
             sourceItem: noiseTexture
 | 
			
		||||
             wrapMode: ShaderEffectSource.Repeat
 | 
			
		||||
             visible: false
 | 
			
		||||
             smooth: true
 | 
			
		||||
         }
 | 
			
		||||
 | 
			
		||||
        "
 | 
			
		||||
        void main() {
 | 
			
		||||
            qt_TexCoord0 = qt_MultiTexCoord0;
 | 
			
		||||
            vec2 coords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));" +
 | 
			
		||||
         //Print the number with a reasonable precision for the shader.
 | 
			
		||||
         function str(num){
 | 
			
		||||
             return num.toFixed(8);
 | 
			
		||||
         }
 | 
			
		||||
 | 
			
		||||
            (!fallBack && (flickering !== 0.0 || horizontalSync !== 0.0 || rbgShift !== 0) ?
 | 
			
		||||
                "vec4 initialNoiseTexel = texture2D(noiseSource, coords);"
 | 
			
		||||
            : "") +
 | 
			
		||||
         vertexShader: "
 | 
			
		||||
             uniform highp mat4 qt_Matrix;
 | 
			
		||||
             uniform highp float time;
 | 
			
		||||
 | 
			
		||||
            (!fallBack && rbgShift !== 0.0 ?"
 | 
			
		||||
                constantNoise = initialNoiseTexel;" : "") +
 | 
			
		||||
             attribute highp vec4 qt_Vertex;
 | 
			
		||||
             attribute highp vec2 qt_MultiTexCoord0;
 | 
			
		||||
 | 
			
		||||
            (!fallBack && flickering !== 0.0 ? "
 | 
			
		||||
                brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;"
 | 
			
		||||
            : "") +
 | 
			
		||||
             varying highp vec2 qt_TexCoord0;" +
 | 
			
		||||
 | 
			
		||||
            (!fallBack && horizontalSync !== 0.0 ? "
 | 
			
		||||
                float randval = horizontalSync - initialNoiseTexel.r;
 | 
			
		||||
                distortionScale = step(0.0, randval) * randval * horizontalSync;
 | 
			
		||||
                distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
 | 
			
		||||
            : "") +
 | 
			
		||||
             (!fallBack ? "
 | 
			
		||||
                 uniform sampler2D noiseSource;" : "") +
 | 
			
		||||
 | 
			
		||||
            "gl_Position = qt_Matrix * qt_Vertex;
 | 
			
		||||
        }"
 | 
			
		||||
             (!fallBack && flickering !== 0.0 ?"
 | 
			
		||||
                 varying lowp float brightness;
 | 
			
		||||
                 uniform lowp float flickering;" : "") +
 | 
			
		||||
 | 
			
		||||
    fragmentShader: "
 | 
			
		||||
        #ifdef GL_ES
 | 
			
		||||
            precision mediump float;
 | 
			
		||||
        #endif
 | 
			
		||||
             (!fallBack && horizontalSync !== 0.0 ?"
 | 
			
		||||
                 uniform lowp float horizontalSyncStrength;
 | 
			
		||||
                 varying lowp float distortionScale;
 | 
			
		||||
                 varying lowp float distortionFreq;" : "") +
 | 
			
		||||
 | 
			
		||||
        uniform sampler2D source;
 | 
			
		||||
        uniform highp float qt_Opacity;
 | 
			
		||||
        uniform highp float time;
 | 
			
		||||
        varying highp vec2 qt_TexCoord0;
 | 
			
		||||
             "
 | 
			
		||||
             void main() {
 | 
			
		||||
                 qt_TexCoord0 = qt_MultiTexCoord0;
 | 
			
		||||
                 vec2 coords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));" +
 | 
			
		||||
 | 
			
		||||
        uniform highp vec4 fontColor;
 | 
			
		||||
        uniform highp vec4 backgroundColor;
 | 
			
		||||
        uniform lowp float screen_brightness;
 | 
			
		||||
                 (!fallBack && (flickering !== 0.0 || horizontalSync !== 0.0) ?
 | 
			
		||||
                     "vec4 initialNoiseTexel = texture2D(noiseSource, coords);"
 | 
			
		||||
                 : "") +
 | 
			
		||||
 | 
			
		||||
        uniform highp vec2 virtual_resolution;" +
 | 
			
		||||
                 (!fallBack && flickering !== 0.0 ? "
 | 
			
		||||
                     brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;"
 | 
			
		||||
                 : "") +
 | 
			
		||||
 | 
			
		||||
        (bloom !== 0 ? "
 | 
			
		||||
            uniform highp sampler2D bloomSource;
 | 
			
		||||
            uniform lowp float bloom;" : "") +
 | 
			
		||||
        (burnIn !== 0 ? "
 | 
			
		||||
            uniform sampler2D burnInSource;
 | 
			
		||||
            uniform highp float burnInLastUpdate;
 | 
			
		||||
            uniform highp float burnInTime;" : "") +
 | 
			
		||||
        (staticNoise !== 0 ? "
 | 
			
		||||
            uniform highp float staticNoise;" : "") +
 | 
			
		||||
        (((staticNoise !== 0 || jitter !== 0 || rbgShift)
 | 
			
		||||
          ||(fallBack && (flickering || horizontalSync))) ? "
 | 
			
		||||
            uniform lowp sampler2D noiseSource;
 | 
			
		||||
            uniform highp vec2 scaleNoiseSize;" : "") +
 | 
			
		||||
        (screenCurvature !== 0 ? "
 | 
			
		||||
            uniform highp float screenCurvature;" : "") +
 | 
			
		||||
        (glowingLine !== 0 ? "
 | 
			
		||||
            uniform highp float glowingLine;" : "") +
 | 
			
		||||
        (chromaColor !== 0 ? "
 | 
			
		||||
            uniform lowp float chromaColor;" : "") +
 | 
			
		||||
        (jitter !== 0 ? "
 | 
			
		||||
            uniform lowp vec2 jitterDisplacement;" : "") +
 | 
			
		||||
        (rbgShift !== 0 ? "
 | 
			
		||||
            uniform lowp float rbgShift;" : "") +
 | 
			
		||||
        (ambientLight !== 0 ? "
 | 
			
		||||
            uniform lowp float ambientLight;" : "") +
 | 
			
		||||
                 (!fallBack && horizontalSync !== 0.0 ? "
 | 
			
		||||
                     float randval = horizontalSyncStrength - initialNoiseTexel.r;
 | 
			
		||||
                     distortionScale = step(0.0, randval) * randval * horizontalSyncStrength;
 | 
			
		||||
                     distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
 | 
			
		||||
                 : "") +
 | 
			
		||||
 | 
			
		||||
        (fallBack && horizontalSync !== 0 ? "
 | 
			
		||||
            uniform lowp float horizontalSync;" : "") +
 | 
			
		||||
        (fallBack && flickering !== 0.0 ?"
 | 
			
		||||
            uniform lowp float flickering;" : "") +
 | 
			
		||||
        (!fallBack && flickering !== 0 ? "
 | 
			
		||||
            varying lowp float brightness;"
 | 
			
		||||
        : "") +
 | 
			
		||||
        (!fallBack && horizontalSync !== 0 ? "
 | 
			
		||||
            varying lowp float distortionScale;
 | 
			
		||||
            varying lowp float distortionFreq;" : "") +
 | 
			
		||||
                 "gl_Position = qt_Matrix * qt_Vertex;
 | 
			
		||||
             }"
 | 
			
		||||
 | 
			
		||||
        (!fallBack && rbgShift !== 0.0 ?"
 | 
			
		||||
            varying lowp vec4 constantNoise;" : "") +
 | 
			
		||||
         fragmentShader: "
 | 
			
		||||
             #ifdef GL_ES
 | 
			
		||||
                 precision mediump float;
 | 
			
		||||
             #endif
 | 
			
		||||
 | 
			
		||||
        (glowingLine !== 0 ? "
 | 
			
		||||
            float randomPass(vec2 coords){
 | 
			
		||||
                return fract(smoothstep(-120.0, 0.0, coords.y - (virtual_resolution.y + 120.0) * fract(time * 0.00015)));
 | 
			
		||||
            }" : "") +
 | 
			
		||||
             uniform sampler2D screenBuffer;
 | 
			
		||||
             uniform highp float qt_Opacity;
 | 
			
		||||
             uniform highp float time;
 | 
			
		||||
             varying highp vec2 qt_TexCoord0;
 | 
			
		||||
 | 
			
		||||
        "highp float getScanlineIntensity(vec2 coords) {
 | 
			
		||||
            float result = 1.0;" +
 | 
			
		||||
             uniform highp vec4 fontColor;
 | 
			
		||||
             uniform highp vec4 backgroundColor;
 | 
			
		||||
             uniform lowp float shadowLength;
 | 
			
		||||
 | 
			
		||||
           (appSettings.rasterization != appSettings.no_rasterization ?
 | 
			
		||||
               "float val = 0.0;
 | 
			
		||||
                vec2 rasterizationCoords = fract(coords * virtual_resolution);
 | 
			
		||||
                val += smoothstep(0.0, 0.5, rasterizationCoords.y);
 | 
			
		||||
                val -= smoothstep(0.5, 1.0, rasterizationCoords.y);
 | 
			
		||||
                result *= mix(0.5, 1.0, val);" : "") +
 | 
			
		||||
           (appSettings.rasterization == appSettings.pixel_rasterization ?
 | 
			
		||||
               "val = 0.0;
 | 
			
		||||
                val += smoothstep(0.0, 0.5, rasterizationCoords.x);
 | 
			
		||||
                val -= smoothstep(0.5, 1.0, rasterizationCoords.x);
 | 
			
		||||
                result *= mix(0.5, 1.0, val);" : "") + "
 | 
			
		||||
             uniform highp vec2 virtual_resolution;" +
 | 
			
		||||
 | 
			
		||||
           return result;
 | 
			
		||||
        }
 | 
			
		||||
             (burnIn !== 0 ? "
 | 
			
		||||
                 uniform sampler2D burnInSource;
 | 
			
		||||
                 uniform highp float burnInLastUpdate;
 | 
			
		||||
                 uniform highp float burnInTime;" : "") +
 | 
			
		||||
             (slowBurnIn !== 0 ? "
 | 
			
		||||
                 uniform sampler2D slowBurnInSource;" : "") +
 | 
			
		||||
             (staticNoise !== 0 ? "
 | 
			
		||||
                 uniform highp float staticNoise;" : "") +
 | 
			
		||||
             (((staticNoise !== 0 || jitter !== 0)
 | 
			
		||||
               ||(fallBack && (flickering || horizontalSync))) ? "
 | 
			
		||||
                 uniform lowp sampler2D noiseSource;
 | 
			
		||||
                 uniform highp vec2 scaleNoiseSize;" : "") +
 | 
			
		||||
             (screenCurvature !== 0 ? "
 | 
			
		||||
                 uniform highp float screenCurvature;
 | 
			
		||||
                 uniform lowp sampler2D frameSource;" : "") +
 | 
			
		||||
             (glowingLine !== 0 ? "
 | 
			
		||||
                 uniform highp float glowingLine;" : "") +
 | 
			
		||||
             (chromaColor !== 0 ? "
 | 
			
		||||
                 uniform lowp float chromaColor;" : "") +
 | 
			
		||||
             (jitter !== 0 ? "
 | 
			
		||||
                 uniform lowp vec2 jitterDisplacement;" : "") +
 | 
			
		||||
             (ambientLight !== 0 ? "
 | 
			
		||||
                 uniform lowp float ambientLight;" : "") +
 | 
			
		||||
 | 
			
		||||
        float min2(vec2 v) {
 | 
			
		||||
            return min(v.x, v.y);
 | 
			
		||||
        }
 | 
			
		||||
             (fallBack && horizontalSync !== 0 ? "
 | 
			
		||||
                 uniform lowp float horizontalSyncStrength;" : "") +
 | 
			
		||||
             (fallBack && flickering !== 0.0 ?"
 | 
			
		||||
                 uniform lowp float flickering;" : "") +
 | 
			
		||||
             (!fallBack && flickering !== 0 ? "
 | 
			
		||||
                 varying lowp float brightness;"
 | 
			
		||||
             : "") +
 | 
			
		||||
             (!fallBack && horizontalSync !== 0 ? "
 | 
			
		||||
                 varying lowp float distortionScale;
 | 
			
		||||
                 varying lowp float distortionFreq;" : "") +
 | 
			
		||||
 | 
			
		||||
        float rgb2grey(vec3 v){
 | 
			
		||||
            return dot(v, vec3(0.21, 0.72, 0.04));
 | 
			
		||||
        }" +
 | 
			
		||||
             (glowingLine !== 0 ? "
 | 
			
		||||
                 float randomPass(vec2 coords){
 | 
			
		||||
                     return fract(smoothstep(-120.0, 0.0, coords.y - (virtual_resolution.y + 120.0) * fract(time * 0.00015)));
 | 
			
		||||
                 }" : "") +
 | 
			
		||||
 | 
			
		||||
        "void main() {" +
 | 
			
		||||
            "vec2 cc = vec2(0.5) - qt_TexCoord0;" +
 | 
			
		||||
            "float distance = length(cc);" +
 | 
			
		||||
             "float min2(vec2 v) {
 | 
			
		||||
                 return min(v.x, v.y);
 | 
			
		||||
             }
 | 
			
		||||
 | 
			
		||||
            //FallBack if there are problems
 | 
			
		||||
            (fallBack && (flickering !== 0.0 || horizontalSync !== 0.0 || rbgShift !== 0.0) ?
 | 
			
		||||
                "vec2 initialCoords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));
 | 
			
		||||
                 vec4 initialNoiseTexel = texture2D(noiseSource, initialCoords);"
 | 
			
		||||
            : "") +
 | 
			
		||||
            (fallBack && flickering !== 0.0 ? "
 | 
			
		||||
                float brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;"
 | 
			
		||||
            : "") +
 | 
			
		||||
            (fallBack && horizontalSync !== 0.0 ? "
 | 
			
		||||
                float randval = horizontalSync - initialNoiseTexel.r;
 | 
			
		||||
                float distortionScale = step(0.0, randval) * randval * horizontalSync;
 | 
			
		||||
                float distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
 | 
			
		||||
            : "") +
 | 
			
		||||
            (fallBack && rbgShift !== 0.0 ?"
 | 
			
		||||
                lowp vec4 constantNoise = initialNoiseTexel;" : "") +
 | 
			
		||||
             float rgb2grey(vec3 v){
 | 
			
		||||
                 return dot(v, vec3(0.21, 0.72, 0.04));
 | 
			
		||||
             }
 | 
			
		||||
 | 
			
		||||
            (staticNoise ? "
 | 
			
		||||
                float noise = staticNoise;" : "") +
 | 
			
		||||
             float isInScreen(vec2 v) {
 | 
			
		||||
                 return min2(step(0.0, v) - step(1.0, v));
 | 
			
		||||
             }
 | 
			
		||||
 | 
			
		||||
            (screenCurvature !== 0 ? "
 | 
			
		||||
                float distortion = dot(cc, cc) * screenCurvature;
 | 
			
		||||
                vec2 curvatureCoords = (qt_TexCoord0 - cc * (1.0 + distortion) * distortion);
 | 
			
		||||
                vec2 staticCoords = - 2.0 * curvatureCoords + 3.0 * step(vec2(0.0), curvatureCoords) * curvatureCoords - 3.0 * step(vec2(1.0), curvatureCoords) * curvatureCoords;"
 | 
			
		||||
            :"
 | 
			
		||||
                vec2 staticCoords = qt_TexCoord0;") +
 | 
			
		||||
             vec2 barrel(vec2 v, vec2 cc) {" +
 | 
			
		||||
 | 
			
		||||
            "vec2 coords = staticCoords;" +
 | 
			
		||||
                 (screenCurvature !== 0 ? "
 | 
			
		||||
                     float distortion = dot(cc, cc) * screenCurvature;
 | 
			
		||||
                     return (v - cc * (1.0 + distortion) * distortion);"
 | 
			
		||||
                 :
 | 
			
		||||
                     "return v;") +
 | 
			
		||||
             "}" +
 | 
			
		||||
 | 
			
		||||
            (horizontalSync !== 0 ? "
 | 
			
		||||
                float dst = sin((coords.y + time * 0.001) * distortionFreq);
 | 
			
		||||
                coords.x += dst * distortionScale;" +
 | 
			
		||||
                (staticNoise ? "
 | 
			
		||||
                    noise += distortionScale * 7.0;" : "")
 | 
			
		||||
            : "") +
 | 
			
		||||
             "vec3 convertWithChroma(vec3 inColor) {
 | 
			
		||||
                vec3 outColor = inColor;" +
 | 
			
		||||
 | 
			
		||||
            (jitter !== 0 || staticNoise !== 0 || rbgShift !== 0 ?
 | 
			
		||||
                "vec4 noiseTexel = texture2D(noiseSource, scaleNoiseSize * coords + vec2(fract(time / 51.0), fract(time / 237.0)));"
 | 
			
		||||
            : "") +
 | 
			
		||||
                 (chromaColor !== 0 ?
 | 
			
		||||
                     "outColor = fontColor.rgb * mix(vec3(rgb2grey(inColor)), inColor, chromaColor);"
 | 
			
		||||
                 :
 | 
			
		||||
                     "outColor = fontColor.rgb * rgb2grey(inColor);") +
 | 
			
		||||
 | 
			
		||||
            (jitter !== 0 ? "
 | 
			
		||||
                vec2 offset = vec2(noiseTexel.b, noiseTexel.a) - vec2(0.5);
 | 
			
		||||
                vec2 txt_coords = coords + offset * jitterDisplacement;"
 | 
			
		||||
            :  "vec2 txt_coords = coords;") +
 | 
			
		||||
             "  return outColor;
 | 
			
		||||
             }" +
 | 
			
		||||
 | 
			
		||||
            "float color = 0.0001;" +
 | 
			
		||||
             "void main() {" +
 | 
			
		||||
                 "vec2 cc = vec2(0.5) - qt_TexCoord0;" +
 | 
			
		||||
                 "float distance = length(cc);" +
 | 
			
		||||
 | 
			
		||||
            (staticNoise !== 0 ? "
 | 
			
		||||
                float noiseVal = noiseTexel.a;
 | 
			
		||||
                color += noiseVal * noise * (1.0 - distance * 1.3);" : "") +
 | 
			
		||||
                 //FallBack if there are problems
 | 
			
		||||
                 (fallBack && (flickering !== 0.0 || horizontalSync !== 0.0) ?
 | 
			
		||||
                     "vec2 initialCoords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));
 | 
			
		||||
                      vec4 initialNoiseTexel = texture2D(noiseSource, initialCoords);"
 | 
			
		||||
                 : "") +
 | 
			
		||||
                 (fallBack && flickering !== 0.0 ? "
 | 
			
		||||
                     float brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;"
 | 
			
		||||
                 : "") +
 | 
			
		||||
                 (fallBack && horizontalSync !== 0.0 ? "
 | 
			
		||||
                     float randval = horizontalSyncStrength - initialNoiseTexel.r;
 | 
			
		||||
                     float distortionScale = step(0.0, randval) * randval * horizontalSyncStrength;
 | 
			
		||||
                     float distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
 | 
			
		||||
                 : "") +
 | 
			
		||||
 | 
			
		||||
            (glowingLine !== 0 ? "
 | 
			
		||||
                color += randomPass(coords * virtual_resolution) * glowingLine;" : "") +
 | 
			
		||||
                 (staticNoise ? "
 | 
			
		||||
                     float noise = staticNoise;" : "") +
 | 
			
		||||
 | 
			
		||||
            "vec3 txt_color = texture2D(source, txt_coords).rgb;" +
 | 
			
		||||
                 (screenCurvature !== 0 ? "
 | 
			
		||||
                     vec2 staticCoords = barrel(qt_TexCoord0, cc);"
 | 
			
		||||
                 :"
 | 
			
		||||
                     vec2 staticCoords = qt_TexCoord0;") +
 | 
			
		||||
 | 
			
		||||
            (rbgShift !== 0 ? "
 | 
			
		||||
                vec2 displacement = vec2(12.0, 0.0) * rbgShift * (0.6 * constantNoise.r + 0.4);
 | 
			
		||||
                vec3 rightColor = texture2D(source, txt_coords + displacement).rgb;
 | 
			
		||||
                vec3 leftColor = texture2D(source, txt_coords - displacement).rgb;
 | 
			
		||||
                txt_color.r = leftColor.r * 0.10 + rightColor.r * 0.30 + txt_color.r * 0.60;
 | 
			
		||||
                txt_color.g = leftColor.g * 0.20 + rightColor.g * 0.20 + txt_color.g * 0.60;
 | 
			
		||||
                txt_color.b = leftColor.b * 0.30 + rightColor.b * 0.10 + txt_color.b * 0.60;
 | 
			
		||||
            " : "") +
 | 
			
		||||
                 "vec2 coords = qt_TexCoord0;" +
 | 
			
		||||
 | 
			
		||||
            (burnIn !== 0 ? "
 | 
			
		||||
                vec4 txt_blur = texture2D(burnInSource, staticCoords);
 | 
			
		||||
                float blurDecay = clamp((time - burnInLastUpdate) * burnInTime, 0.0, 1.0);
 | 
			
		||||
                txt_color = max(txt_color, 0.5 * (txt_blur.rgb - vec3(blurDecay)));"
 | 
			
		||||
            : "") +
 | 
			
		||||
                 (horizontalSync !== 0 ? "
 | 
			
		||||
                     float dst = sin((coords.y + time * 0.001) * distortionFreq);
 | 
			
		||||
                     coords.x += dst * distortionScale;" +
 | 
			
		||||
 | 
			
		||||
             "txt_color *= getScanlineIntensity(coords);" +
 | 
			
		||||
                     (staticNoise ? "
 | 
			
		||||
                         noise += distortionScale * 7.0;" : "")
 | 
			
		||||
 | 
			
		||||
             "txt_color += vec3(color);" +
 | 
			
		||||
             "float greyscale_color = rgb2grey(txt_color);" +
 | 
			
		||||
                 : "") +
 | 
			
		||||
 | 
			
		||||
            (chromaColor !== 0 ?
 | 
			
		||||
                "vec3 foregroundColor = mix(fontColor.rgb, txt_color * fontColor.rgb / greyscale_color, chromaColor);
 | 
			
		||||
                 vec3 finalColor = mix(backgroundColor.rgb, foregroundColor, greyscale_color);"
 | 
			
		||||
            :
 | 
			
		||||
                "vec3 finalColor = mix(backgroundColor.rgb, fontColor.rgb, greyscale_color);") +
 | 
			
		||||
                 (jitter !== 0 || staticNoise !== 0 ?
 | 
			
		||||
                     "vec4 noiseTexel = texture2D(noiseSource, scaleNoiseSize * coords + vec2(fract(time / 51.0), fract(time / 237.0)));"
 | 
			
		||||
                 : "") +
 | 
			
		||||
 | 
			
		||||
            (bloom !== 0 ?
 | 
			
		||||
                "vec4 bloomFullColor = texture2D(bloomSource, coords);
 | 
			
		||||
                 vec3 bloomColor = bloomFullColor.rgb;
 | 
			
		||||
                 float bloomAlpha = bloomFullColor.a;" +
 | 
			
		||||
                (chromaColor !== 0 ?
 | 
			
		||||
                    "bloomColor = fontColor.rgb * mix(vec3(rgb2grey(bloomColor)), bloomColor, chromaColor);"
 | 
			
		||||
                :
 | 
			
		||||
                    "bloomColor = fontColor.rgb * rgb2grey(bloomColor);") +
 | 
			
		||||
                "finalColor += clamp(bloomColor * bloom * bloomAlpha, 0.0, 0.5);"
 | 
			
		||||
            : "") +
 | 
			
		||||
                 (jitter !== 0 ? "
 | 
			
		||||
                     vec2 offset = vec2(noiseTexel.b, noiseTexel.a) - vec2(0.5);
 | 
			
		||||
                     vec2 txt_coords = coords + offset * jitterDisplacement;"
 | 
			
		||||
                 :  "vec2 txt_coords = coords;") +
 | 
			
		||||
 | 
			
		||||
            (screenCurvature !== 0 ? "
 | 
			
		||||
                vec2 curvatureMask = step(vec2(0.0), curvatureCoords) - step(vec2(1.0), curvatureCoords);
 | 
			
		||||
                finalColor *= clamp(0.0, 1.0, curvatureMask.x + curvatureMask.y);"
 | 
			
		||||
            :"") +
 | 
			
		||||
                 "float color = 0.0001;" +
 | 
			
		||||
 | 
			
		||||
            (flickering !== 0 ? "
 | 
			
		||||
                finalColor *= brightness;" : "") +
 | 
			
		||||
                 (staticNoise !== 0 ? "
 | 
			
		||||
                     float noiseVal = noiseTexel.a;
 | 
			
		||||
                     color += noiseVal * noise * (1.0 - distance * 1.3);" : "") +
 | 
			
		||||
 | 
			
		||||
            (ambientLight !== 0 ? "
 | 
			
		||||
                finalColor += vec3(ambientLight) * (1.0 - distance) * (1.0 - distance);" : "") +
 | 
			
		||||
                 (glowingLine !== 0 ? "
 | 
			
		||||
                     color += randomPass(coords * virtual_resolution) * glowingLine;" : "") +
 | 
			
		||||
 | 
			
		||||
                 "vec3 txt_color = texture2D(screenBuffer, txt_coords).rgb;" +
 | 
			
		||||
 | 
			
		||||
            "gl_FragColor = vec4(finalColor * screen_brightness, qt_Opacity);" +
 | 
			
		||||
        "}"
 | 
			
		||||
                 (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));
 | 
			
		||||
                     txt_color = max(txt_color, convertWithChroma(burnInColor));"
 | 
			
		||||
                 : "") +
 | 
			
		||||
 | 
			
		||||
     onStatusChanged: {
 | 
			
		||||
         // Print warning messages
 | 
			
		||||
         if (log)
 | 
			
		||||
             console.log(log);
 | 
			
		||||
                 (slowBurnIn !== 0 ? "
 | 
			
		||||
                     vec4 txt_blur = texture2D(slowBurnInSource, staticCoords);
 | 
			
		||||
                     txt_color = max(txt_color, convertWithChroma(txt_blur.rgb * txt_blur.a));
 | 
			
		||||
                 " : "") +
 | 
			
		||||
 | 
			
		||||
         // Activate fallback mode
 | 
			
		||||
         if (status == ShaderEffect.Error) {
 | 
			
		||||
            fallBack = true;
 | 
			
		||||
                  "txt_color += fontColor.rgb * vec3(color);" +
 | 
			
		||||
 | 
			
		||||
                 "vec3 finalColor = txt_color;" +
 | 
			
		||||
 | 
			
		||||
                 (flickering !== 0 ? "
 | 
			
		||||
                     finalColor *= brightness;" : "") +
 | 
			
		||||
 | 
			
		||||
                 (ambientLight !== 0 ? "
 | 
			
		||||
                     finalColor += vec3(ambientLight) * (1.0 - distance) * (1.0 - distance);" : "") +
 | 
			
		||||
 | 
			
		||||
                 (screenCurvature !== 0 ?
 | 
			
		||||
                    "vec4 frameColor = texture2D(frameSource, qt_TexCoord0);
 | 
			
		||||
                     finalColor = mix(finalColor, frameColor.rgb, frameColor.a);"
 | 
			
		||||
                 : "") +
 | 
			
		||||
 | 
			
		||||
                 "gl_FragColor = vec4(finalColor, qt_Opacity);" +
 | 
			
		||||
             "}"
 | 
			
		||||
 | 
			
		||||
          onStatusChanged: {
 | 
			
		||||
              // Print warning messages
 | 
			
		||||
              if (log)
 | 
			
		||||
                  console.log(log);
 | 
			
		||||
 | 
			
		||||
              // Activate fallback mode
 | 
			
		||||
              if (status == ShaderEffect.Error) {
 | 
			
		||||
                 fallBack = true;
 | 
			
		||||
              }
 | 
			
		||||
          }
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
     Loader {
 | 
			
		||||
         id: terminalFrameLoader
 | 
			
		||||
 | 
			
		||||
         active: screenCurvature !== 0
 | 
			
		||||
 | 
			
		||||
         width: staticShader.width
 | 
			
		||||
         height: staticShader.height
 | 
			
		||||
 | 
			
		||||
         sourceComponent: ShaderEffectSource {
 | 
			
		||||
 | 
			
		||||
             sourceItem: terminalFrame
 | 
			
		||||
             hideSource: true
 | 
			
		||||
             visible: false
 | 
			
		||||
             format: ShaderEffectSource.RGBA
 | 
			
		||||
 | 
			
		||||
             NewTerminalFrame {
 | 
			
		||||
                 id: terminalFrame
 | 
			
		||||
                 blending: false
 | 
			
		||||
                 anchors.fill: parent
 | 
			
		||||
             }
 | 
			
		||||
         }
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
     ShaderEffect {
 | 
			
		||||
         id: staticShader
 | 
			
		||||
 | 
			
		||||
         width: parent.width * appSettings.windowScaling
 | 
			
		||||
         height: parent.height * appSettings.windowScaling
 | 
			
		||||
 | 
			
		||||
         property ShaderEffectSource source: parent.source
 | 
			
		||||
         property ShaderEffectSource bloomSource: parent.bloomSource
 | 
			
		||||
 | 
			
		||||
         property color fontColor: parent.fontColor
 | 
			
		||||
         property color backgroundColor: parent.backgroundColor
 | 
			
		||||
         property real bloom: appSettings.bloom * 2.5
 | 
			
		||||
 | 
			
		||||
         property real screenCurvature: parent.screenCurvature
 | 
			
		||||
 | 
			
		||||
         property real chromaColor: appSettings.chromaColor;
 | 
			
		||||
 | 
			
		||||
         property real rbgShift: (appSettings.rbgShift / width) * appSettings.totalFontScaling // TODO FILIPPO width here is wrong.
 | 
			
		||||
 | 
			
		||||
         property int rasterization: appSettings.rasterization
 | 
			
		||||
 | 
			
		||||
         property real screen_brightness: Utils.lint(0.5, 1.5, appSettings.brightness)
 | 
			
		||||
 | 
			
		||||
         property real ambientLight: parent.ambientLight
 | 
			
		||||
 | 
			
		||||
         property size virtual_resolution: parent.virtual_resolution
 | 
			
		||||
 | 
			
		||||
         blending: false
 | 
			
		||||
         visible: false
 | 
			
		||||
 | 
			
		||||
         //Print the number with a reasonable precision for the shader.
 | 
			
		||||
         function str(num){
 | 
			
		||||
             return num.toFixed(8);
 | 
			
		||||
         }
 | 
			
		||||
 | 
			
		||||
         fragmentShader: "
 | 
			
		||||
             #ifdef GL_ES
 | 
			
		||||
                 precision mediump float;
 | 
			
		||||
             #endif
 | 
			
		||||
 | 
			
		||||
             uniform sampler2D source;
 | 
			
		||||
             uniform highp float qt_Opacity;
 | 
			
		||||
             varying highp vec2 qt_TexCoord0;
 | 
			
		||||
 | 
			
		||||
             uniform highp vec4 fontColor;
 | 
			
		||||
             uniform highp vec4 backgroundColor;
 | 
			
		||||
             uniform lowp float screen_brightness;
 | 
			
		||||
 | 
			
		||||
             uniform highp vec2 virtual_resolution;" +
 | 
			
		||||
 | 
			
		||||
             (bloom !== 0 ? "
 | 
			
		||||
                 uniform highp sampler2D bloomSource;
 | 
			
		||||
                 uniform lowp float bloom;" : "") +
 | 
			
		||||
 | 
			
		||||
             (screenCurvature !== 0 ? "
 | 
			
		||||
                 uniform highp float screenCurvature;" : "") +
 | 
			
		||||
 | 
			
		||||
             (chromaColor !== 0 ? "
 | 
			
		||||
                 uniform lowp float chromaColor;" : "") +
 | 
			
		||||
 | 
			
		||||
             (rbgShift !== 0 ? "
 | 
			
		||||
                 uniform lowp float rbgShift;" : "") +
 | 
			
		||||
 | 
			
		||||
             (ambientLight !== 0 ? "
 | 
			
		||||
                 uniform lowp float ambientLight;" : "") +
 | 
			
		||||
 | 
			
		||||
             "highp float getScanlineIntensity(vec2 coords) {
 | 
			
		||||
                 float result = 1.0;" +
 | 
			
		||||
 | 
			
		||||
                (appSettings.rasterization != appSettings.no_rasterization ?
 | 
			
		||||
                    "float val = 0.0;
 | 
			
		||||
                     vec2 rasterizationCoords = fract(coords * virtual_resolution);
 | 
			
		||||
                     val += smoothstep(0.0, 0.5, rasterizationCoords.y);
 | 
			
		||||
                     val -= smoothstep(0.5, 1.0, rasterizationCoords.y);
 | 
			
		||||
                     result *= mix(0.5, 1.0, val);" : "") +
 | 
			
		||||
 | 
			
		||||
                (appSettings.rasterization == appSettings.pixel_rasterization ?
 | 
			
		||||
                    "val = 0.0;
 | 
			
		||||
                     val += smoothstep(0.0, 0.5, rasterizationCoords.x);
 | 
			
		||||
                     val -= smoothstep(0.5, 1.0, rasterizationCoords.x);
 | 
			
		||||
                     result *= mix(0.5, 1.0, val);" : "") + "
 | 
			
		||||
 | 
			
		||||
                return result;
 | 
			
		||||
             }
 | 
			
		||||
 | 
			
		||||
             float min2(vec2 v) {
 | 
			
		||||
                 return min(v.x, v.y);
 | 
			
		||||
             }
 | 
			
		||||
 | 
			
		||||
             float sum2(vec2 v) {
 | 
			
		||||
                 return v.x + v.y;
 | 
			
		||||
             }
 | 
			
		||||
 | 
			
		||||
             float rgb2grey(vec3 v){
 | 
			
		||||
                 return dot(v, vec3(0.21, 0.72, 0.04));
 | 
			
		||||
             }" +
 | 
			
		||||
 | 
			
		||||
             "vec3 convertWithChroma(vec3 inColor) {
 | 
			
		||||
                vec3 outColor = inColor;" +
 | 
			
		||||
 | 
			
		||||
                 (chromaColor !== 0 ?
 | 
			
		||||
                     "outColor = fontColor.rgb * mix(vec3(rgb2grey(inColor)), inColor, chromaColor);"
 | 
			
		||||
                 :
 | 
			
		||||
                     "outColor = fontColor.rgb * rgb2grey(inColor);") +
 | 
			
		||||
 | 
			
		||||
             "  return outColor;
 | 
			
		||||
             }" +
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
             "void main() {" +
 | 
			
		||||
                 "vec2 cc = vec2(0.5) - qt_TexCoord0;" +
 | 
			
		||||
 | 
			
		||||
                 (screenCurvature !== 0 ? "
 | 
			
		||||
                     float distortion = dot(cc, cc) * screenCurvature;
 | 
			
		||||
                     vec2 curvatureCoords = (qt_TexCoord0 - cc * (1.0 + distortion) * distortion);
 | 
			
		||||
                     vec2 txt_coords = - 2.0 * curvatureCoords + 3.0 * step(vec2(0.0), curvatureCoords) * curvatureCoords - 3.0 * step(vec2(1.0), curvatureCoords) * curvatureCoords;"
 | 
			
		||||
                 :"
 | 
			
		||||
                     vec2 txt_coords = qt_TexCoord0;") +
 | 
			
		||||
 | 
			
		||||
                 "vec3 txt_color = texture2D(source, txt_coords).rgb;" +
 | 
			
		||||
 | 
			
		||||
                 (rbgShift !== 0 ? "
 | 
			
		||||
                     vec2 displacement = vec2(12.0, 0.0) * rbgShift;
 | 
			
		||||
                     vec3 rightColor = texture2D(source, txt_coords + displacement).rgb;
 | 
			
		||||
                     vec3 leftColor = texture2D(source, txt_coords - displacement).rgb;
 | 
			
		||||
                     txt_color.r = leftColor.r * 0.10 + rightColor.r * 0.30 + txt_color.r * 0.60;
 | 
			
		||||
                     txt_color.g = leftColor.g * 0.20 + rightColor.g * 0.20 + txt_color.g * 0.60;
 | 
			
		||||
                     txt_color.b = leftColor.b * 0.30 + rightColor.b * 0.10 + txt_color.b * 0.60;
 | 
			
		||||
                 " : "") +
 | 
			
		||||
 | 
			
		||||
                  "txt_color *= getScanlineIntensity(txt_coords);" +
 | 
			
		||||
 | 
			
		||||
                  "txt_color += vec3(0.0001);" +
 | 
			
		||||
                  "float greyscale_color = rgb2grey(txt_color);" +
 | 
			
		||||
 | 
			
		||||
                 (screenCurvature !== 0 ? "
 | 
			
		||||
                     float reflectionMask = sum2(step(vec2(0.0), curvatureCoords) - step(vec2(1.0), curvatureCoords));
 | 
			
		||||
                     reflectionMask = clamp(reflectionMask, 0.0, 1.0);"
 | 
			
		||||
                 :
 | 
			
		||||
                     "float reflectionMask = 1.0;") +
 | 
			
		||||
 | 
			
		||||
                 (chromaColor !== 0 ?
 | 
			
		||||
                     "vec3 foregroundColor = mix(fontColor.rgb, txt_color * fontColor.rgb / greyscale_color, chromaColor);
 | 
			
		||||
                      vec3 finalColor = mix(backgroundColor.rgb, foregroundColor, greyscale_color * reflectionMask);"
 | 
			
		||||
                 :
 | 
			
		||||
                     "vec3 finalColor = mix(backgroundColor.rgb, fontColor.rgb, greyscale_color * reflectionMask);") +
 | 
			
		||||
 | 
			
		||||
                     (bloom !== 0 ?
 | 
			
		||||
                         "vec4 bloomFullColor = texture2D(bloomSource, txt_coords);
 | 
			
		||||
                          vec3 bloomColor = bloomFullColor.rgb;
 | 
			
		||||
                          float bloomAlpha = bloomFullColor.a;
 | 
			
		||||
                          bloomColor = convertWithChroma(bloomColor);
 | 
			
		||||
                          finalColor += clamp(bloomColor * bloom * bloomAlpha, 0.0, 0.5);"
 | 
			
		||||
                     : "") +
 | 
			
		||||
 | 
			
		||||
                 "finalColor *= screen_brightness;" +
 | 
			
		||||
 | 
			
		||||
                 "gl_FragColor = vec4(finalColor, qt_Opacity);" +
 | 
			
		||||
             "}"
 | 
			
		||||
 | 
			
		||||
         onStatusChanged: {
 | 
			
		||||
             // Print warning messages
 | 
			
		||||
             if (log) console.log(log);
 | 
			
		||||
         }
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
     ShaderEffectSource {
 | 
			
		||||
         id: frameBuffer
 | 
			
		||||
         visible: false
 | 
			
		||||
         sourceItem: staticShader
 | 
			
		||||
         hideSource: true
 | 
			
		||||
     }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										122
									
								
								app/qml/SlowBurnIn.qml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								app/qml/SlowBurnIn.qml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,122 @@
 | 
			
		||||
import QtQuick 2.0
 | 
			
		||||
 | 
			
		||||
import "utils.js" as Utils
 | 
			
		||||
 | 
			
		||||
Loader {
 | 
			
		||||
    property ShaderEffectSource source: item ? item.source : null
 | 
			
		||||
 | 
			
		||||
    active: !appSettings.useFastBurnIn && appSettings.burnIn !== 0
 | 
			
		||||
 | 
			
		||||
    anchors.fill: parent
 | 
			
		||||
 | 
			
		||||
    sourceComponent: Item {
 | 
			
		||||
        property alias source: burnInSourceEffect
 | 
			
		||||
 | 
			
		||||
        property int burnInScaling: scaleTexture * appSettings.burnInQuality
 | 
			
		||||
 | 
			
		||||
        ShaderEffectSource {
 | 
			
		||||
            property bool updateBurnIn: false
 | 
			
		||||
            property real burnIn: appSettings.burnIn
 | 
			
		||||
            property real fps: appSettings.fps !== 0 ? appSettings.fps : 60
 | 
			
		||||
            property real burnInFadeTime: Utils.lint(minBurnInFadeTime, maxBurnInFadeTime, burnIn)
 | 
			
		||||
            property real burnInCoefficient: 1000 / (fps * burnInFadeTime)
 | 
			
		||||
            property real minBurnInFadeTime: appSettings.minBurnInFadeTime
 | 
			
		||||
            property real maxBurnInFadeTime: appSettings.maxBurnInFadeTime
 | 
			
		||||
 | 
			
		||||
            id: burnInSourceEffect
 | 
			
		||||
 | 
			
		||||
            anchors.fill: parent
 | 
			
		||||
 | 
			
		||||
            sourceItem: burnInEffect
 | 
			
		||||
            recursive: true
 | 
			
		||||
            live: false
 | 
			
		||||
            hideSource: true
 | 
			
		||||
            wrapMode: kterminalSource.wrapMode
 | 
			
		||||
 | 
			
		||||
            visible: false
 | 
			
		||||
 | 
			
		||||
            function restartBlurSource(){
 | 
			
		||||
                livetimer.restart();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // This updates the burnin synched with the timer.
 | 
			
		||||
            Connections {
 | 
			
		||||
                target: burnInSourceEffect.updateBurnIn ? timeManager : null
 | 
			
		||||
                ignoreUnknownSignals: false
 | 
			
		||||
                onTimeChanged: {
 | 
			
		||||
                    burnInSourceEffect.scheduleUpdate();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Timer{
 | 
			
		||||
                id: livetimer
 | 
			
		||||
 | 
			
		||||
                // The interval assumes 60 fps. This is the time needed burnout a white pixel.
 | 
			
		||||
                // We multiply 1.1 to have a little bit of margin over the theoretical value.
 | 
			
		||||
                // This solution is not extremely clean, but it's probably the best to avoid measuring fps.
 | 
			
		||||
 | 
			
		||||
                interval: burnInSourceEffect.burnInFadeTime * 1.1
 | 
			
		||||
                running: true
 | 
			
		||||
                onTriggered: burnInSourceEffect.updateBurnIn = false;
 | 
			
		||||
            }
 | 
			
		||||
            Connections{
 | 
			
		||||
                target: kterminal
 | 
			
		||||
                onImagePainted:{
 | 
			
		||||
                    burnInSourceEffect.scheduleUpdate();
 | 
			
		||||
                    burnInSourceEffect.updateBurnIn = true;
 | 
			
		||||
                    livetimer.restart();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // Restart blurred source settings change.
 | 
			
		||||
            Connections{
 | 
			
		||||
                target: appSettings
 | 
			
		||||
                onBurnInChanged: burnInSourceEffect.restartBlurSource();
 | 
			
		||||
                onTerminalFontChanged: burnInSourceEffect.restartBlurSource();
 | 
			
		||||
                onRasterizationChanged: burnInSourceEffect.restartBlurSource();
 | 
			
		||||
                onBurnInQualityChanged: burnInSourceEffect.restartBlurSource();
 | 
			
		||||
            }
 | 
			
		||||
            Connections {
 | 
			
		||||
                target: kterminalScrollbar
 | 
			
		||||
                onOpacityChanged: burnInSourceEffect.restartBlurSource();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            ShaderEffect {
 | 
			
		||||
                id: burnInEffect
 | 
			
		||||
 | 
			
		||||
                property variant txt_source: kterminalSource
 | 
			
		||||
                property variant blurredSource: burnInSourceEffect
 | 
			
		||||
                property real burnInCoefficient: burnInSourceEffect.burnInCoefficient
 | 
			
		||||
 | 
			
		||||
                anchors.fill: parent
 | 
			
		||||
                blending: false
 | 
			
		||||
 | 
			
		||||
                fragmentShader:
 | 
			
		||||
                    "#ifdef GL_ES
 | 
			
		||||
                    precision mediump float;
 | 
			
		||||
                #endif\n" +
 | 
			
		||||
 | 
			
		||||
                "uniform lowp float qt_Opacity;" +
 | 
			
		||||
                "uniform lowp sampler2D txt_source;" +
 | 
			
		||||
 | 
			
		||||
                "varying highp vec2 qt_TexCoord0;
 | 
			
		||||
             uniform lowp sampler2D blurredSource;
 | 
			
		||||
             uniform highp float burnInCoefficient;" +
 | 
			
		||||
 | 
			
		||||
                "float max3(vec3 v) {
 | 
			
		||||
                     return max (max (v.x, v.y), v.z);
 | 
			
		||||
                }" +
 | 
			
		||||
 | 
			
		||||
                "void main() {" +
 | 
			
		||||
                    "vec2 coords = qt_TexCoord0;" +
 | 
			
		||||
                    "vec3 origColor = texture2D(txt_source, coords).rgb;" +
 | 
			
		||||
                    "vec3 blur_color = texture2D(blurredSource, coords).rgb - vec3(burnInCoefficient);" +
 | 
			
		||||
                    "vec3 color = min(origColor + blur_color, max(origColor, blur_color));" +
 | 
			
		||||
 | 
			
		||||
                    "gl_FragColor = vec4(color, max3(color - origColor));" +
 | 
			
		||||
                "}"
 | 
			
		||||
 | 
			
		||||
                onStatusChanged: if (log) console.log(log) //Print warning messages
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -10,10 +10,9 @@ ShaderTerminal {
 | 
			
		||||
    id: mainShader
 | 
			
		||||
    opacity: appSettings.windowOpacity * 0.3 + 0.7
 | 
			
		||||
 | 
			
		||||
    blending: false
 | 
			
		||||
 | 
			
		||||
    source: terminal.mainSource
 | 
			
		||||
    burnInEffect: terminal.burnInEffect
 | 
			
		||||
    slowBurnInEffect: terminal.slowBurnInEffect
 | 
			
		||||
    virtual_resolution: terminal.virtualResolution
 | 
			
		||||
 | 
			
		||||
    TimeManager{
 | 
			
		||||
@@ -36,7 +35,7 @@ ShaderTerminal {
 | 
			
		||||
        height: parent.height * appSettings.bloomQuality
 | 
			
		||||
 | 
			
		||||
        sourceComponent: FastBlur{
 | 
			
		||||
            radius: Utils.lint(16, 64, appSettings.bloomQuality * appSettings.windowScaling);
 | 
			
		||||
            radius: Utils.lint(16, 64, appSettings.bloomQuality);
 | 
			
		||||
            source: terminal.mainSource
 | 
			
		||||
            transparentBorder: true
 | 
			
		||||
        }
 | 
			
		||||
@@ -56,11 +55,11 @@ ShaderTerminal {
 | 
			
		||||
 | 
			
		||||
    bloomSource: bloomSourceLoader.item
 | 
			
		||||
 | 
			
		||||
    NewTerminalFrame {
 | 
			
		||||
        id: terminalFrame
 | 
			
		||||
        anchors.fill: parent
 | 
			
		||||
        blending: true
 | 
			
		||||
    }
 | 
			
		||||
//    NewTerminalFrame {
 | 
			
		||||
//        id: terminalFrame
 | 
			
		||||
//        anchors.fill: parent
 | 
			
		||||
//        blending: true
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
    // This shader might be useful in the future. Since we used it only for a couple
 | 
			
		||||
    // of calculations is probably best to move those in the main shader. If in the future
 | 
			
		||||
 
 | 
			
		||||
@@ -137,13 +137,8 @@ ApplicationWindow{
 | 
			
		||||
    TerminalContainer{
 | 
			
		||||
        id: terminalContainer
 | 
			
		||||
        y: appSettings.showMenubar ? 0 : -2 // Workaroud to hide the margin in the menubar.
 | 
			
		||||
        width: parent.width * appSettings.windowScaling
 | 
			
		||||
        height: (parent.height + Math.abs(y)) * appSettings.windowScaling
 | 
			
		||||
 | 
			
		||||
        transform: Scale {
 | 
			
		||||
            xScale: 1 / appSettings.windowScaling
 | 
			
		||||
            yScale: 1 / appSettings.windowScaling
 | 
			
		||||
        }
 | 
			
		||||
        width: parent.width
 | 
			
		||||
        height: (parent.height + Math.abs(y))
 | 
			
		||||
    }
 | 
			
		||||
    SettingsWindow{
 | 
			
		||||
        id: settingswindow
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        <file>fonts/1971-ibm-3278/3270Medium.ttf</file>
 | 
			
		||||
        <file>Storage.qml</file>
 | 
			
		||||
        <file>CRTMainMenuBar.qml</file>
 | 
			
		||||
        <file>SettingsPerformanceTab.qml</file>
 | 
			
		||||
        <file>SettingsAdvancedTab.qml</file>
 | 
			
		||||
        <file>TerminalContainer.qml</file>
 | 
			
		||||
        <file>images/crt256.png</file>
 | 
			
		||||
        <file>utils.js</file>
 | 
			
		||||
@@ -32,7 +32,6 @@
 | 
			
		||||
        <file>fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf</file>
 | 
			
		||||
        <file>fonts/modern-hermit/Hermit-medium.otf</file>
 | 
			
		||||
        <file>fonts/modern-inconsolata/Inconsolata.otf</file>
 | 
			
		||||
        <file>SettingsScreenTab.qml</file>
 | 
			
		||||
        <file>fonts/modern-fixedsys-excelsior/FSEX301-L2.ttf</file>
 | 
			
		||||
        <file>../icons/32x32/cool-retro-term.png</file>
 | 
			
		||||
        <file>Components/SizedLabel.qml</file>
 | 
			
		||||
@@ -44,5 +43,6 @@
 | 
			
		||||
        <file>BurnInEffect.qml</file>
 | 
			
		||||
        <file>fonts/modern-terminus/TerminusTTF-4.46.0.ttf</file>
 | 
			
		||||
        <file>NewTerminalFrame.qml</file>
 | 
			
		||||
        <file>SlowBurnIn.qml</file>
 | 
			
		||||
    </qresource>
 | 
			
		||||
</RCC>
 | 
			
		||||
 
 | 
			
		||||
@@ -30,14 +30,17 @@ Print a help screen and exit.
 | 
			
		||||
\fB\-p\fR \fIPROFILE\fR, \fB\-\-profile\fR \fIPROFILE\fR
 | 
			
		||||
Run with the given profile.
 | 
			
		||||
.TP
 | 
			
		||||
\fB\-\-workdir\fR \fIDIR\fR
 | 
			
		||||
Start with \fIDIR\fR as the working directory.
 | 
			
		||||
\fB\-T\fR \fITITLE\fR
 | 
			
		||||
Use \fITITLE\fR as the window title.
 | 
			
		||||
.TP
 | 
			
		||||
\fB\-\-verbose\fR
 | 
			
		||||
Print additional information such as profiles and settings.
 | 
			
		||||
.TP
 | 
			
		||||
\fB\-v\fR, \fB\-\-version\fR
 | 
			
		||||
Print the version number and exit.
 | 
			
		||||
.TP
 | 
			
		||||
\fB\-\-workdir\fR \fIDIR\fR
 | 
			
		||||
Start with \fIDIR\fR as the working directory.
 | 
			
		||||
.SH LICENCE
 | 
			
		||||
This program is available under the terms of the GNU General Public License,
 | 
			
		||||
version 3 or any later version, as published by the Free Software Foundation.
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,19 @@
 | 
			
		||||
name: cool-retro-term # check to see if it's available
 | 
			
		||||
version: '1.1.0' # this is freakin' awesome
 | 
			
		||||
summary: cool-retro-term is a terminal emulator. # 79 char long summary
 | 
			
		||||
version: '1.1.1' # this is freakin' awesome
 | 
			
		||||
summary: cool-retro-term is a cool and retro terminal emulator. # 79 char long summary
 | 
			
		||||
description: |
 | 
			
		||||
  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.
 | 
			
		||||
grade: stable # must be 'stable' to release into candidate/stable channels
 | 
			
		||||
confinement: strict # use 'strict' once you have the right plugs
 | 
			
		||||
confinement: classic # use 'strict' once you have the right plugs
 | 
			
		||||
 | 
			
		||||
base: core18
 | 
			
		||||
 | 
			
		||||
apps:
 | 
			
		||||
  cool-retro-term:
 | 
			
		||||
    command: desktop-launch $SNAP/usr/bin/cool-retro-term
 | 
			
		||||
    command: bin/desktop-launch $SNAP/usr/bin/cool-retro-term
 | 
			
		||||
    desktop: usr/share/applications/cool-retro-term.desktop
 | 
			
		||||
    environment:
 | 
			
		||||
      QML2_IMPORT_PATH: $SNAP/usr/lib/x86_64-linux-gnu/qt5/qml
 | 
			
		||||
    plugs:
 | 
			
		||||
      - unity7
 | 
			
		||||
      - x11
 | 
			
		||||
@@ -27,13 +31,38 @@ apps:
 | 
			
		||||
      - system-observe
 | 
			
		||||
      
 | 
			
		||||
parts:
 | 
			
		||||
  desktop-qt5:
 | 
			
		||||
    source: https://github.com/ubuntu/snapcraft-desktop-helpers.git
 | 
			
		||||
    source-subdir: qt
 | 
			
		||||
    plugin: make
 | 
			
		||||
    make-parameters: ["FLAVOR=qt5"]
 | 
			
		||||
    build-packages:
 | 
			
		||||
      - build-essential
 | 
			
		||||
      - qtbase5-dev
 | 
			
		||||
      - dpkg-dev
 | 
			
		||||
    stage-packages:
 | 
			
		||||
      - libxkbcommon0
 | 
			
		||||
      - ttf-ubuntu-font-family
 | 
			
		||||
      - dmz-cursor-theme
 | 
			
		||||
      - light-themes
 | 
			
		||||
      - adwaita-icon-theme
 | 
			
		||||
      - gnome-themes-standard
 | 
			
		||||
      - shared-mime-info
 | 
			
		||||
      - libqt5gui5
 | 
			
		||||
      - libgdk-pixbuf2.0-0
 | 
			
		||||
      - libqt5svg5 # for loading icon themes which are svg
 | 
			
		||||
      - try: [appmenu-qt5] # not available on core18
 | 
			
		||||
      - locales-all
 | 
			
		||||
      - xdg-user-dirs
 | 
			
		||||
      - fcitx-frontend-qt5
 | 
			
		||||
 | 
			
		||||
  my-part:
 | 
			
		||||
    source: https://github.com/Swordfish90/cool-retro-term
 | 
			
		||||
    source-type: git
 | 
			
		||||
    plugin: qmake # See 'snapcraft plugins'
 | 
			
		||||
    qt-version: qt5
 | 
			
		||||
    after: [desktop-qt5]
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    build-packages:
 | 
			
		||||
      - build-essential 
 | 
			
		||||
      - qmlscene 
 | 
			
		||||
@@ -44,11 +73,12 @@ parts:
 | 
			
		||||
    stage-packages: 
 | 
			
		||||
      - qmlscene
 | 
			
		||||
      - qml-module-qtquick-controls 
 | 
			
		||||
      - qtdeclarative5-qtquick2-plugin 
 | 
			
		||||
      - libqt5qml-graphicaleffects 
 | 
			
		||||
      - qml-module-qtquick2
 | 
			
		||||
      - qml-module-qtgraphicaleffects
 | 
			
		||||
      - qml-module-qtquick-dialogs 
 | 
			
		||||
      - qtdeclarative5-localstorage-plugin 
 | 
			
		||||
      - qtdeclarative5-window-plugin
 | 
			
		||||
      - qml-module-qtquick-localstorage
 | 
			
		||||
      - qml-module-qtquick-window2
 | 
			
		||||
      - libgl1-mesa-dev
 | 
			
		||||
      - qtdeclarative5-dev-tools
 | 
			
		||||
      - qml-module-qtquick-extras
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user