Compare commits
	
		
			38 Commits
		
	
	
		
			1.1.1
			...
			ryanfelder
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | a9e5f309a6 | ||
|   | 6f84f53390 | ||
|   | 0625ca4f15 | ||
|   | dac2b4ff16 | ||
|   | 2d12b0c747 | ||
|   | 5fe26edaa6 | ||
|   | a736cfd548 | ||
|   | 5af4214daa | ||
|   | 98ef7b329a | ||
|   | b0e1962fa7 | ||
|   | 83684e8882 | ||
|   | 1ed7d077a9 | ||
|   | ba4b36618f | ||
|   | af647a4bad | ||
|   | b719530ef0 | ||
|   | 530d61d67e | ||
|   | 3d76bcb48c | ||
|   | 70ce2f1f3c | ||
|   | 21a190a1aa | ||
|   | a88d222709 | ||
|   | b2defceae5 | ||
|   | 8d7565ffc4 | ||
|   | 9960b25dff | ||
|   | 411c116deb | ||
|   | 64e007f1fd | ||
|   | c62fc365db | ||
|   | e7e630bd5d | ||
|   | 7d77175fbb | ||
|   | f033553972 | ||
|   | ae1ed044ba | ||
|   | 35d601c7a7 | ||
|   | f89aeec374 | ||
|   | 42c3b4b42e | ||
|   | 322fc31396 | ||
|   | 6e4d5cfddd | ||
|   | d81485a8bf | ||
|   | a9260d956c | ||
|   | 025bb560bc | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -18,6 +18,7 @@ | |||||||
| *.pro.user.* | *.pro.user.* | ||||||
| *.moc | *.moc | ||||||
| moc_*.cpp | moc_*.cpp | ||||||
|  | moc_*.h | ||||||
| qrc_*.cpp | qrc_*.cpp | ||||||
| ui_*.h | ui_*.h | ||||||
| Makefile* | Makefile* | ||||||
|   | |||||||
							
								
								
									
										58
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								README.md
									
									
									
									
									
								
							| @@ -12,6 +12,8 @@ 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. | This terminal emulator works under Linux and macOS and requires Qt 5.2 or higher. | ||||||
|  |  | ||||||
|  | Settings such as colors, fonts, and effects can be accessed via context menu. | ||||||
|  |  | ||||||
| ## Screenshots | ## Screenshots | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -20,13 +22,19 @@ This terminal emulator works under Linux and macOS and requires Qt 5.2 or higher | |||||||
| ## Install | ## Install | ||||||
| Walk the easy way and install cool-retro-term using one of these convenient packages: | 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`. | Just grab the latest AppImage from the release page and make it executable and run it: | ||||||
|  |  | ||||||
|  |     wget https://github.com/Swordfish90/cool-retro-term/releases/download/1.1.1/Cool-Retro-Term-1.1.1-x86_64.AppImage | ||||||
|  |     chmod a+x Cool-Retro-Term-1.1.1-x86_64.AppImage | ||||||
|  |     ./Cool-Retro-Term-1.1.1-x86_64.AppImage | ||||||
|  |  | ||||||
|  | **Fedora** has the `cool-retro-term` in the official 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 |     trizen -S aur/cool-retro-term-git | ||||||
|  |  | ||||||
| or use: | or use: | ||||||
|  |  | ||||||
| @@ -34,22 +42,32 @@ or use: | |||||||
|  |  | ||||||
| to install precompiled from community repository. | to install precompiled from community repository. | ||||||
|  |  | ||||||
| **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.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! |  | ||||||
|  |  | ||||||
| Users of **Ubuntu 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 | **Solus** users can install using `eopg`: | ||||||
|  | ``` | ||||||
|  | eopkg it cool-retro-term | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | **macOS** users can grab the latest dmg from the [release page](https://github.com/Swordfish90/cool-retro-term/releases) or install via Homebrew: | ||||||
|  | ``` | ||||||
|  | brew cask install cool-retro-term | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | **FreeBSD** users can install cool-retro-term with `pkg`: | ||||||
|  |  | ||||||
|  |     pkg install cool-retro-term | ||||||
|  |      | ||||||
|  | ## Build instructions (FreeBSD) | ||||||
|  |  | ||||||
|  | Grab a copy of [the FreeBSD Ports Collection](https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ports-using.html), modify [`/usr/ports/x11/cool-retro-term/Makefile`](https://svnweb.freebsd.org/ports/head/x11/cool-retro-term/Makefile?view=markup) as you like, and then run `make install` to build and install the emulator: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | cd /usr/ports/x11/cool-retro-term | ||||||
|  | make install | ||||||
|  | ``` | ||||||
|  |  | ||||||
| ## Build instructions (Linux) | ## Build instructions (Linux) | ||||||
|  |  | ||||||
| @@ -84,6 +102,12 @@ Make sure to install these first. | |||||||
|  |  | ||||||
| --- | --- | ||||||
|  |  | ||||||
|  | **snapcraft (most of distros)** | ||||||
|  |  | ||||||
|  |     sudo snap install cool-retro-term --classic | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
| **Debian Jessie and above** | **Debian Jessie and above** | ||||||
|  |  | ||||||
|     sudo apt install build-essential qmlscene qt5-qmake qt5-default qtdeclarative5-dev qml-module-qtquick-controls qml-module-qtgraphicaleffects qml-module-qtquick-dialogs qml-module-qtquick-localstorage qml-module-qtquick-window2 qml-module-qt-labs-settings qml-module-qt-labs-folderlistmodel |     sudo apt install build-essential qmlscene qt5-qmake qt5-default qtdeclarative5-dev qml-module-qtquick-controls qml-module-qtgraphicaleffects qml-module-qtquick-dialogs qml-module-qtquick-localstorage qml-module-qtquick-window2 qml-module-qt-labs-settings qml-module-qt-labs-folderlistmodel | ||||||
| @@ -175,6 +199,12 @@ cp -r qmltermwidget/QMLTermWidget cool-retro-term.app/Contents/PlugIns | |||||||
| open cool-retro-term.app | open cool-retro-term.app | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | **Homebrew** | ||||||
|  |  | ||||||
|  | ```sh | ||||||
|  | brew cask install cool-retro-term | ||||||
|  | ``` | ||||||
|  |  | ||||||
| ## Donations | ## Donations | ||||||
| I made this project in my spare time because I love what I'm doing. If you are enjoying it and you want to buy me a beer click [here](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=flscogna%40gmail%2ecom&lc=IT&item_name=Filippo%20Scognamiglio¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted). | I made this project in my spare time because I love what I'm doing. If you are enjoying it and you want to buy me a beer click [here](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=flscogna%40gmail%2ecom&lc=IT&item_name=Filippo%20Scognamiglio¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted). | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										43
									
								
								app/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								app/main.cpp
									
									
									
									
									
								
							| @@ -42,6 +42,28 @@ int main(int argc, char *argv[]) | |||||||
|     setenv("LC_CTYPE", "UTF-8", 1); |     setenv("LC_CTYPE", "UTF-8", 1); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |     if (argc>1 && (!strcmp(argv[1],"-h") || !strcmp(argv[1],"--help"))) { | ||||||
|  |         QTextStream cout(stdout, QIODevice::WriteOnly); | ||||||
|  |         cout << "Usage: " << argv[0] << " [--default-settings] [--workdir <dir>] [--program <prog>] [-p|--profile <prof>] [--fullscreen] [-h|--help]" << endl; | ||||||
|  |         cout << "  --default-settings  Run cool-retro-term with the default settings" << endl; | ||||||
|  |         cout << "  --workdir <dir>     Change working directory to 'dir'" << endl; | ||||||
|  |         cout << "  -e <cmd>            Command to execute. This option will catch all following arguments, so use it as the last option." << endl; | ||||||
|  |         cout << "  -T <title>          Set window title to 'title'." << endl; | ||||||
|  |         cout << "  --fullscreen        Run cool-retro-term in fullscreen." << endl; | ||||||
|  |         cout << "  -p|--profile <prof> Run cool-retro-term with the given profile." << endl; | ||||||
|  |         cout << "  -h|--help           Print this help." << endl; | ||||||
|  |         cout << "  --verbose           Print additional information such as profiles and settings." << endl; | ||||||
|  |         return 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     QString appVersion("1.1.1"); | ||||||
|  |  | ||||||
|  |     if (argc>1 && (!strcmp(argv[1],"-v") || !strcmp(argv[1],"--version"))) { | ||||||
|  |         QTextStream cout(stdout, QIODevice::WriteOnly); | ||||||
|  |         cout << "cool-retro-term " << appVersion << endl; | ||||||
|  | 	return 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     QApplication app(argc, argv); |     QApplication app(argc, argv); | ||||||
|     // set application attributes |     // set application attributes | ||||||
|     // Has no effects, see https://bugreports.qt.io/browse/QTBUG-51293 |     // Has no effects, see https://bugreports.qt.io/browse/QTBUG-51293 | ||||||
| @@ -59,27 +81,6 @@ int main(int argc, char *argv[]) | |||||||
|  |  | ||||||
|     // Manage command line arguments from the cpp side |     // Manage command line arguments from the cpp side | ||||||
|     QStringList args = app.arguments(); |     QStringList args = app.arguments(); | ||||||
|     if (args.contains("-h") || args.contains("--help")) { |  | ||||||
|         // BUG: This usage help text goes to stderr, should go to stdout. |  | ||||||
|         // BUG: First line of output is surrounded by double quotes. |  | ||||||
|         qDebug() << "Usage: " + args.at(0) + " [--default-settings] [--workdir <dir>] [--program <prog>] [-p|--profile <prof>] [--fullscreen] [-h|--help]"; |  | ||||||
|         qDebug() << "  --default-settings  Run cool-retro-term with the default settings"; |  | ||||||
|         qDebug() << "  --workdir <dir>     Change working directory to 'dir'"; |  | ||||||
|         qDebug() << "  -e <cmd>            Command to execute. This option will catch all following arguments, so use it as the last option."; |  | ||||||
|         qDebug() << "  -T <title>          Set window title to 'title'."; |  | ||||||
|         qDebug() << "  --fullscreen        Run cool-retro-term in fullscreen."; |  | ||||||
|         qDebug() << "  -p|--profile <prof> Run cool-retro-term with the given profile."; |  | ||||||
|         qDebug() << "  -h|--help           Print this help."; |  | ||||||
|         qDebug() << "  --verbose           Print additional information such as profiles and settings."; |  | ||||||
|         return 0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     QString appVersion("1.1.1"); |  | ||||||
|  |  | ||||||
|     if (args.contains("-v") || args.contains("--version")) { |  | ||||||
|         qDebug() << ("cool-retro-term " + appVersion).toStdString().c_str(); |  | ||||||
| 	return 0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // Manage default command |     // Manage default command | ||||||
|     QStringList cmdList; |     QStringList cmdList; | ||||||
|   | |||||||
| @@ -59,6 +59,8 @@ QtObject{ | |||||||
|     property real burnInQuality: 0.5 |     property real burnInQuality: 0.5 | ||||||
|     property bool useFastBurnIn: Qt.platform.os === "osx" ? false : true |     property bool useFastBurnIn: Qt.platform.os === "osx" ? false : true | ||||||
|  |  | ||||||
|  |     property bool blinkingCursor: false | ||||||
|  |  | ||||||
|     onWindowScalingChanged: handleFontChanged(); |     onWindowScalingChanged: handleFontChanged(); | ||||||
|  |  | ||||||
|     // PROFILE SETTINGS /////////////////////////////////////////////////////// |     // PROFILE SETTINGS /////////////////////////////////////////////////////// | ||||||
| @@ -92,6 +94,7 @@ QtObject{ | |||||||
|     property real flickering: 0.1 |     property real flickering: 0.1 | ||||||
|  |  | ||||||
|     property real rbgShift: 0.0 |     property real rbgShift: 0.0 | ||||||
|  |     property real scanlineBlur: 0.0 | ||||||
|  |  | ||||||
|     property real _margin: 0.5 |     property real _margin: 0.5 | ||||||
|     property real margin: Utils.lint(1.0, 20.0, _margin) |     property real margin: Utils.lint(1.0, 20.0, _margin) | ||||||
| @@ -208,7 +211,8 @@ QtObject{ | |||||||
|             burnInQuality: burnInQuality, |             burnInQuality: burnInQuality, | ||||||
|             useCustomCommand: useCustomCommand, |             useCustomCommand: useCustomCommand, | ||||||
|             customCommand: customCommand, |             customCommand: customCommand, | ||||||
|             useFastBurnIn: useFastBurnIn |             useFastBurnIn: useFastBurnIn, | ||||||
|  |             blinkingCursor: blinkingCursor | ||||||
|         } |         } | ||||||
|         return stringify(settings); |         return stringify(settings); | ||||||
|     } |     } | ||||||
| @@ -229,6 +233,7 @@ QtObject{ | |||||||
|             rasterization: rasterization, |             rasterization: rasterization, | ||||||
|             jitter: jitter, |             jitter: jitter, | ||||||
|             rbgShift: rbgShift, |             rbgShift: rbgShift, | ||||||
|  |             scanlineBlur: scanlineBlur, | ||||||
|             brightness: brightness, |             brightness: brightness, | ||||||
|             contrast: contrast, |             contrast: contrast, | ||||||
|             ambientLight: ambientLight, |             ambientLight: ambientLight, | ||||||
| @@ -296,6 +301,8 @@ QtObject{ | |||||||
|         customCommand = settings.customCommand !== undefined ? settings.customCommand : customCommand |         customCommand = settings.customCommand !== undefined ? settings.customCommand : customCommand | ||||||
|  |  | ||||||
|         useFastBurnIn = settings.useFastBurnIn !== undefined ? settings.useFastBurnIn : useFastBurnIn; |         useFastBurnIn = settings.useFastBurnIn !== undefined ? settings.useFastBurnIn : useFastBurnIn; | ||||||
|  |  | ||||||
|  |         blinkingCursor = settings.blinkingCursor !== undefined ? settings.blinkingCursor : blinkingCursor | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     function loadProfileString(profileString){ |     function loadProfileString(profileString){ | ||||||
| @@ -320,6 +327,7 @@ QtObject{ | |||||||
|         jitter = settings.jitter !== undefined ? settings.jitter : jitter; |         jitter = settings.jitter !== undefined ? settings.jitter : jitter; | ||||||
|  |  | ||||||
|         rbgShift = settings.rbgShift !== undefined ? settings.rbgShift : rbgShift; |         rbgShift = settings.rbgShift !== undefined ? settings.rbgShift : rbgShift; | ||||||
|  |         scanlineBlur = settings.scanlineBlur !== undefined ? settings.scanlineBlur : rbgShift; | ||||||
|  |  | ||||||
|         ambientLight = settings.ambientLight !== undefined ? settings.ambientLight : ambientLight; |         ambientLight = settings.ambientLight !== undefined ? settings.ambientLight : ambientLight; | ||||||
|         contrast = settings.contrast !== undefined ? settings.contrast : contrast; |         contrast = settings.contrast !== undefined ? settings.contrast : contrast; | ||||||
| @@ -397,6 +405,7 @@ QtObject{ | |||||||
|                   "jitter": 0.1997, |                   "jitter": 0.1997, | ||||||
|                   "rasterization": 0, |                   "rasterization": 0, | ||||||
|                   "rbgShift": 0, |                   "rbgShift": 0, | ||||||
|  |                   "scanlineBlur": 0, | ||||||
|                   "saturationColor": 0.2483, |                   "saturationColor": 0.2483, | ||||||
|                   "screenCurvature": 0.3, |                   "screenCurvature": 0.3, | ||||||
|                   "staticNoise": 0.1198, |                   "staticNoise": 0.1198, | ||||||
| @@ -405,6 +414,34 @@ QtObject{ | |||||||
|                 }' |                 }' | ||||||
|             builtin: true |             builtin: true | ||||||
|         } |         } | ||||||
|  |         ListElement{ | ||||||
|  |             text: "Amber Scanlines" | ||||||
|  |             obj_string: '{ | ||||||
|  |                   "ambientLight": 0.2, | ||||||
|  |                   "backgroundColor": "#000000", | ||||||
|  |                   "bloom": 0.32, | ||||||
|  |                   "brightness": 0.85, | ||||||
|  |                   "burnIn": 0.30, | ||||||
|  |                   "chromaColor": 1, | ||||||
|  |                   "contrast": 0.75, | ||||||
|  |                   "flickering": 0.04, | ||||||
|  |                   "fontColor": "#ff8100", | ||||||
|  |                   "fontName": "TERMINUS_SCALED", | ||||||
|  |                   "fontWidth": 1, | ||||||
|  |                   "glowingLine": 0, | ||||||
|  |                   "horizontalSync": 0, | ||||||
|  |                   "jitter": 0.03, | ||||||
|  |                   "rasterization": 1, | ||||||
|  |                   "rbgShift": 0, | ||||||
|  |                   "scanlineBlur": 0.05, | ||||||
|  |                   "saturationColor": 1, | ||||||
|  |                   "screenCurvature": 0.05, | ||||||
|  |                   "staticNoise": 0.05, | ||||||
|  |                   "windowOpacity": 1, | ||||||
|  |                   "margin": 0.5 | ||||||
|  |                 }' | ||||||
|  |             builtin: true | ||||||
|  |         } | ||||||
|         ListElement{ |         ListElement{ | ||||||
|             text: "Monochrome Green" |             text: "Monochrome Green" | ||||||
|             obj_string: ' |             obj_string: ' | ||||||
| @@ -425,6 +462,7 @@ QtObject{ | |||||||
|                   "jitter": 0.1997, |                   "jitter": 0.1997, | ||||||
|                   "rasterization": 0, |                   "rasterization": 0, | ||||||
|                   "rbgShift": 0, |                   "rbgShift": 0, | ||||||
|  |                   "scanlineBlur": 0, | ||||||
|                   "saturationColor": 0.0, |                   "saturationColor": 0.0, | ||||||
|                   "screenCurvature": 0.3, |                   "screenCurvature": 0.3, | ||||||
|                   "staticNoise": 0.1198, |                   "staticNoise": 0.1198, | ||||||
| @@ -453,6 +491,7 @@ QtObject{ | |||||||
|                   "jitter": 0.11, |                   "jitter": 0.11, | ||||||
|                   "rasterization": 1, |                   "rasterization": 1, | ||||||
|                   "rbgShift": 0, |                   "rbgShift": 0, | ||||||
|  |                   "scanlineBlur": 0.05, | ||||||
|                   "saturationColor": 0.5, |                   "saturationColor": 0.5, | ||||||
|                   "screenCurvature": 0.3, |                   "screenCurvature": 0.3, | ||||||
|                   "staticNoise": 0.15, |                   "staticNoise": 0.15, | ||||||
| @@ -481,6 +520,7 @@ QtObject{ | |||||||
|                   "jitter": 0, |                   "jitter": 0, | ||||||
|                   "rasterization": 2, |                   "rasterization": 2, | ||||||
|                   "rbgShift": 0, |                   "rbgShift": 0, | ||||||
|  |                   "scanlineBlur": 0, | ||||||
|                   "saturationColor": 0, |                   "saturationColor": 0, | ||||||
|                   "screenCurvature": 0, |                   "screenCurvature": 0, | ||||||
|                   "staticNoise": 0.15, |                   "staticNoise": 0.15, | ||||||
| @@ -509,6 +549,7 @@ QtObject{ | |||||||
|                   "jitter": 0.1, |                   "jitter": 0.1, | ||||||
|                   "rasterization": 1, |                   "rasterization": 1, | ||||||
|                   "rbgShift": 0, |                   "rbgShift": 0, | ||||||
|  |                   "scanlineBlur": 0, | ||||||
|                   "saturationColor": 0, |                   "saturationColor": 0, | ||||||
|                   "screenCurvature": 0.5, |                   "screenCurvature": 0.5, | ||||||
|                   "staticNoise": 0.099, |                   "staticNoise": 0.099, | ||||||
| @@ -537,6 +578,7 @@ QtObject{ | |||||||
|                   "jitter": 0.4, |                   "jitter": 0.4, | ||||||
|                   "rasterization": 1, |                   "rasterization": 1, | ||||||
|                   "rbgShift": 0.2969, |                   "rbgShift": 0.2969, | ||||||
|  |                   "scanlineBlur": 0, | ||||||
|                   "saturationColor": 0, |                   "saturationColor": 0, | ||||||
|                   "screenCurvature": 0.5, |                   "screenCurvature": 0.5, | ||||||
|                   "staticNoise": 0.2969, |                   "staticNoise": 0.2969, | ||||||
| @@ -565,6 +607,7 @@ QtObject{ | |||||||
|                   "jitter": 0.1545, |                   "jitter": 0.1545, | ||||||
|                   "rasterization": 0, |                   "rasterization": 0, | ||||||
|                   "rbgShift": 0.3524, |                   "rbgShift": 0.3524, | ||||||
|  |                   "scanlineBlur": 0, | ||||||
|                   "saturationColor": 0, |                   "saturationColor": 0, | ||||||
|                   "screenCurvature": 0.4, |                   "screenCurvature": 0.4, | ||||||
|                   "staticNoise": 0.0503, |                   "staticNoise": 0.0503, | ||||||
| @@ -593,6 +636,7 @@ QtObject{ | |||||||
|                   "jitter": 0, |                   "jitter": 0, | ||||||
|                   "rasterization": 0, |                   "rasterization": 0, | ||||||
|                   "rbgShift": 0, |                   "rbgShift": 0, | ||||||
|  |                   "scanlineBlur": 0, | ||||||
|                   "saturationColor": 0, |                   "saturationColor": 0, | ||||||
|                   "screenCurvature": 0.2, |                   "screenCurvature": 0.2, | ||||||
|                   "staticNoise": 0, |                   "staticNoise": 0, | ||||||
| @@ -621,6 +665,7 @@ QtObject{ | |||||||
|                   "jitter": 0.099, |                   "jitter": 0.099, | ||||||
|                   "rasterization": 0, |                   "rasterization": 0, | ||||||
|                   "rbgShift": 0, |                   "rbgShift": 0, | ||||||
|  |                   "scanlineBlur": 0, | ||||||
|                   "saturationColor": 0.4983, |                   "saturationColor": 0.4983, | ||||||
|                   "screenCurvature": 0, |                   "screenCurvature": 0, | ||||||
|                   "staticNoise": 0.0955, |                   "staticNoise": 0.0955, | ||||||
|   | |||||||
| @@ -78,6 +78,8 @@ Loader { | |||||||
|             property real burnInTime: burnInFadeTime |             property real burnInTime: burnInFadeTime | ||||||
|             property real lastUpdate: burnInEffect.lastUpdate |             property real lastUpdate: burnInEffect.lastUpdate | ||||||
|             property real prevLastUpdate: burnInEffect.prevLastUpdate |             property real prevLastUpdate: burnInEffect.prevLastUpdate | ||||||
|  |             property int rasterization: appSettings.rasterization | ||||||
|  |             property size virtual_resolution: Qt.size(kterminal.totalWidth, kterminal.totalHeight) | ||||||
|  |  | ||||||
|             anchors.fill: parent |             anchors.fill: parent | ||||||
|             blending: false |             blending: false | ||||||
| @@ -97,12 +99,33 @@ Loader { | |||||||
|  |  | ||||||
|                  uniform highp float lastUpdate; |                  uniform highp float lastUpdate; | ||||||
|  |  | ||||||
|                  uniform highp float prevLastUpdate;" + |                  uniform highp float prevLastUpdate; | ||||||
|  |  | ||||||
|  |                  uniform highp vec2 virtual_resolution;" + | ||||||
|  |  | ||||||
|                 "float rgb2grey(vec3 v){ |                 "float rgb2grey(vec3 v){ | ||||||
|                     return dot(v, vec3(0.21, 0.72, 0.04)); |                     return dot(v, vec3(0.21, 0.72, 0.04)); | ||||||
|                 }" + |                 }" + | ||||||
|  |  | ||||||
|  |                 "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; | ||||||
|  |                 }" + | ||||||
|  |  | ||||||
|                 "void main() { |                 "void main() { | ||||||
|                     vec2 coords = qt_TexCoord0; |                     vec2 coords = qt_TexCoord0; | ||||||
|  |  | ||||||
| @@ -111,7 +134,7 @@ Loader { | |||||||
|  |  | ||||||
|                     float prevMask = accColor.a; |                     float prevMask = accColor.a; | ||||||
|                     float currMask = rgb2grey(txtColor); |                     float currMask = rgb2grey(txtColor); | ||||||
|  |                     txtColor *= getScanlineIntensity(coords); | ||||||
|                     highp float blurDecay = clamp((lastUpdate - prevLastUpdate) * burnInTime, 0.0, 1.0); |                     highp float blurDecay = clamp((lastUpdate - prevLastUpdate) * burnInTime, 0.0, 1.0); | ||||||
|                     blurDecay = max(0.0, blurDecay - prevMask); |                     blurDecay = max(0.0, blurDecay - prevMask); | ||||||
|                     vec3 blurColor = accColor.rgb - vec3(blurDecay); |                     vec3 blurColor = accColor.rgb - vec3(blurDecay); | ||||||
|   | |||||||
| @@ -94,6 +94,7 @@ Item{ | |||||||
|         smooth: !appSettings.lowResolutionFont |         smooth: !appSettings.lowResolutionFont | ||||||
|         enableBold: false |         enableBold: false | ||||||
|         fullCursorHeight: true |         fullCursorHeight: true | ||||||
|  |         blinkingCursor: appSettings.blinkingCursor | ||||||
|  |  | ||||||
|         session: QMLTermSession { |         session: QMLTermSession { | ||||||
|             id: ksession |             id: ksession | ||||||
|   | |||||||
| @@ -85,6 +85,11 @@ Tab{ | |||||||
|                     onNewValue: appSettings.rbgShift = newValue; |                     onNewValue: appSettings.rbgShift = newValue; | ||||||
|                     value: appSettings.rbgShift; |                     value: appSettings.rbgShift; | ||||||
|                 } |                 } | ||||||
|  |                 CheckableSlider{ | ||||||
|  |                     name: qsTr("Scanline Blur") | ||||||
|  |                     onNewValue: appSettings.scanlineBlur = newValue; | ||||||
|  |                     value: appSettings.scanlineBlur; | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -114,6 +114,24 @@ Tab{ | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |         GroupBox{ | ||||||
|  |             title: qsTr("Cursor") | ||||||
|  |             Layout.fillWidth: true | ||||||
|  |             ColumnLayout { | ||||||
|  |                 anchors.fill: parent | ||||||
|  |                 CheckBox{ | ||||||
|  |                     id: blinkingCursor | ||||||
|  |                     text: qsTr("Blinking Cursor") | ||||||
|  |                     checked: appSettings.blinkingCursor | ||||||
|  |                     onCheckedChanged: appSettings.blinkingCursor = checked | ||||||
|  |                 } | ||||||
|  |                 Binding{ | ||||||
|  |                     target: blinkingCursor | ||||||
|  |                     property: "checked" | ||||||
|  |                     value: appSettings.blinkingCursor | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|         GroupBox{ |         GroupBox{ | ||||||
|             title: qsTr("Colors") |             title: qsTr("Colors") | ||||||
|             Layout.fillWidth: true |             Layout.fillWidth: true | ||||||
|   | |||||||
| @@ -378,6 +378,7 @@ Item { | |||||||
|          property real chromaColor: appSettings.chromaColor; |          property real chromaColor: appSettings.chromaColor; | ||||||
|  |  | ||||||
|          property real rbgShift: (appSettings.rbgShift / width) * appSettings.totalFontScaling // TODO FILIPPO width here is wrong. |          property real rbgShift: (appSettings.rbgShift / width) * appSettings.totalFontScaling // TODO FILIPPO width here is wrong. | ||||||
|  |          property real scanlineBlur: (appSettings.scanlineBlur / width) * appSettings.totalFontScaling | ||||||
|  |  | ||||||
|          property int rasterization: appSettings.rasterization |          property int rasterization: appSettings.rasterization | ||||||
|  |  | ||||||
| @@ -423,6 +424,9 @@ Item { | |||||||
|              (rbgShift !== 0 ? " |              (rbgShift !== 0 ? " | ||||||
|                  uniform lowp float rbgShift;" : "") + |                  uniform lowp float rbgShift;" : "") + | ||||||
|  |  | ||||||
|  |              (scanlineBlur !== 0 ? " | ||||||
|  |                  uniform lowp float scanlineBlur;" : "") + | ||||||
|  |  | ||||||
|              (ambientLight !== 0 ? " |              (ambientLight !== 0 ? " | ||||||
|                  uniform lowp float ambientLight;" : "") + |                  uniform lowp float ambientLight;" : "") + | ||||||
|  |  | ||||||
| @@ -432,15 +436,15 @@ Item { | |||||||
|                 (appSettings.rasterization != appSettings.no_rasterization ? |                 (appSettings.rasterization != appSettings.no_rasterization ? | ||||||
|                     "float val = 0.0; |                     "float val = 0.0; | ||||||
|                      vec2 rasterizationCoords = fract(coords * virtual_resolution); |                      vec2 rasterizationCoords = fract(coords * virtual_resolution); | ||||||
|                      val += smoothstep(0.0, 0.5, rasterizationCoords.y); |                      val += smoothstep(0.1, 0.5, rasterizationCoords.y); | ||||||
|                      val -= smoothstep(0.5, 1.0, rasterizationCoords.y); |                      val -= smoothstep(0.5, 0.9, rasterizationCoords.y); | ||||||
|                      result *= mix(0.5, 1.0, val);" : "") + |                      result *= mix(0.3, 1.0, val);" : "") + | ||||||
|  |  | ||||||
|                 (appSettings.rasterization == appSettings.pixel_rasterization ? |                 (appSettings.rasterization == appSettings.pixel_rasterization ? | ||||||
|                     "val = 0.0; |                     "val = 0.0; | ||||||
|                      val += smoothstep(0.0, 0.5, rasterizationCoords.x); |                      val += smoothstep(0.0, 0.5, rasterizationCoords.x); | ||||||
|                      val -= smoothstep(0.5, 1.0, rasterizationCoords.x); |                      val -= smoothstep(0.5, 1.0, rasterizationCoords.x); | ||||||
|                      result *= mix(0.5, 1.0, val);" : "") + " |                      result *= mix(0.1, 1.0, val);" : "") + " | ||||||
|  |  | ||||||
|                 return result; |                 return result; | ||||||
|              } |              } | ||||||
| @@ -490,6 +494,19 @@ Item { | |||||||
|                      txt_color.b = leftColor.b * 0.30 + rightColor.b * 0.10 + txt_color.b * 0.60; |                      txt_color.b = leftColor.b * 0.30 + rightColor.b * 0.10 + txt_color.b * 0.60; | ||||||
|                  " : "") + |                  " : "") + | ||||||
|  |  | ||||||
|  |                  (scanlineBlur !== 0 ? " | ||||||
|  |                      vec2 scanlineBlur_displacement = vec2(12.0, 0.0) * scanlineBlur; | ||||||
|  |                      vec3 scanlineBlur_rightColor = texture2D(source, txt_coords + scanlineBlur_displacement).rgb; | ||||||
|  |                      vec3 scanlineBlur_leftColor = texture2D(source, txt_coords - scanlineBlur_displacement).rgb; | ||||||
|  |                      vec3 scanlineBlur_rightColor2 = texture2D(source, txt_coords + scanlineBlur_displacement + scanlineBlur_displacement).rgb; | ||||||
|  |                      vec3 scanlineBlur_leftColor2 = texture2D(source, txt_coords - scanlineBlur_displacement - scanlineBlur_displacement).rgb; | ||||||
|  |                      vec3 scanlineBlur_rightColor3 = texture2D(source, txt_coords + scanlineBlur_displacement + scanlineBlur_displacement + scanlineBlur_displacement).rgb; | ||||||
|  |                      vec3 scanlineBlur_leftColor3 = texture2D(source, txt_coords - scanlineBlur_displacement - scanlineBlur_displacement - scanlineBlur_displacement).rgb; | ||||||
|  |                      txt_color.r = scanlineBlur_leftColor3.r * 0.05 + scanlineBlur_leftColor2.r * 0.1 + scanlineBlur_leftColor.r * 0.20 + txt_color.r * 0.30 + scanlineBlur_rightColor.r * 0.20 + scanlineBlur_rightColor2.r * 0.1 + scanlineBlur_rightColor3.r * 0.05; | ||||||
|  |                      txt_color.g = scanlineBlur_leftColor3.g * 0.05 + scanlineBlur_leftColor2.g * 0.1 + scanlineBlur_leftColor.g * 0.20 + txt_color.g * 0.30 + scanlineBlur_rightColor.g * 0.20 + scanlineBlur_rightColor2.g * 0.1 + scanlineBlur_rightColor3.g * 0.05; | ||||||
|  |                      txt_color.b = scanlineBlur_leftColor3.b * 0.05 + scanlineBlur_leftColor2.b * 0.1 + scanlineBlur_leftColor.b * 0.20 + txt_color.b * 0.30 + scanlineBlur_rightColor.b * 0.20 + scanlineBlur_rightColor2.b * 0.1 + scanlineBlur_rightColor3.b * 0.05; | ||||||
|  |                  " : "") + | ||||||
|  |  | ||||||
|                   "txt_color *= getScanlineIntensity(txt_coords);" + |                   "txt_color *= getScanlineIntensity(txt_coords);" + | ||||||
|  |  | ||||||
|                   "txt_color += vec3(0.0001);" + |                   "txt_color += vec3(0.0001);" + | ||||||
|   | |||||||
| @@ -87,6 +87,9 @@ Loader { | |||||||
|                 property variant blurredSource: burnInSourceEffect |                 property variant blurredSource: burnInSourceEffect | ||||||
|                 property real burnInCoefficient: burnInSourceEffect.burnInCoefficient |                 property real burnInCoefficient: burnInSourceEffect.burnInCoefficient | ||||||
|  |  | ||||||
|  |                 property int rasterization: appSettings.rasterization | ||||||
|  |                 property size virtual_resolution: Qt.size(kterminal.totalWidth, kterminal.totalHeight) | ||||||
|  |  | ||||||
|                 anchors.fill: parent |                 anchors.fill: parent | ||||||
|                 blending: false |                 blending: false | ||||||
|  |  | ||||||
| @@ -97,6 +100,7 @@ Loader { | |||||||
|  |  | ||||||
|                 "uniform lowp float qt_Opacity;" + |                 "uniform lowp float qt_Opacity;" + | ||||||
|                 "uniform lowp sampler2D txt_source;" + |                 "uniform lowp sampler2D txt_source;" + | ||||||
|  |                 "uniform highp vec2 virtual_resolution;" + | ||||||
|  |  | ||||||
|                 "varying highp vec2 qt_TexCoord0; |                 "varying highp vec2 qt_TexCoord0; | ||||||
|              uniform lowp sampler2D blurredSource; |              uniform lowp sampler2D blurredSource; | ||||||
| @@ -106,12 +110,33 @@ Loader { | |||||||
|                      return max (max (v.x, v.y), v.z); |                      return max (max (v.x, v.y), v.z); | ||||||
|                 }" + |                 }" + | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                 "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; | ||||||
|  |                 }" + | ||||||
|  |  | ||||||
|  |  | ||||||
|                 "void main() {" + |                 "void main() {" + | ||||||
|                     "vec2 coords = qt_TexCoord0;" + |                     "vec2 coords = qt_TexCoord0;" + | ||||||
|                     "vec3 origColor = texture2D(txt_source, coords).rgb;" + |                     "vec3 origColor = texture2D(txt_source, coords).rgb;" + | ||||||
|  |                     "origColor *= getScanlineIntensity(coords);" + | ||||||
|                     "vec3 blur_color = texture2D(blurredSource, coords).rgb - vec3(burnInCoefficient);" + |                     "vec3 blur_color = texture2D(blurredSource, coords).rgb - vec3(burnInCoefficient);" + | ||||||
|                     "vec3 color = min(origColor + blur_color, max(origColor, blur_color));" + |                     "vec3 color = min(origColor + blur_color, max(origColor, blur_color));" + | ||||||
|  |  | ||||||
|                     "gl_FragColor = vec4(color, max3(color - origColor));" + |                     "gl_FragColor = vec4(color, max3(color - origColor));" + | ||||||
|                 "}" |                 "}" | ||||||
|  |  | ||||||
|   | |||||||
 Submodule qmltermwidget updated: 48274c7566...59f967d5e1
									
								
							| @@ -14,21 +14,6 @@ apps: | |||||||
|     desktop: usr/share/applications/cool-retro-term.desktop |     desktop: usr/share/applications/cool-retro-term.desktop | ||||||
|     environment: |     environment: | ||||||
|       QML2_IMPORT_PATH: $SNAP/usr/lib/x86_64-linux-gnu/qt5/qml |       QML2_IMPORT_PATH: $SNAP/usr/lib/x86_64-linux-gnu/qt5/qml | ||||||
|     plugs: |  | ||||||
|       - unity7 |  | ||||||
|       - x11 |  | ||||||
|       - desktop |  | ||||||
|       - home |  | ||||||
|       - network |  | ||||||
|       - network-bind |  | ||||||
|       - network-manager |  | ||||||
|       - password-manager-service |  | ||||||
|       - locale-control |  | ||||||
|       - gsettings |  | ||||||
|       - shutdown |  | ||||||
|       - firewall-control |  | ||||||
|       - process-control |  | ||||||
|       - system-observe |  | ||||||
|        |        | ||||||
| parts: | parts: | ||||||
|   desktop-qt5: |   desktop-qt5: | ||||||
| @@ -81,4 +66,6 @@ parts: | |||||||
|       - libgl1-mesa-dev |       - libgl1-mesa-dev | ||||||
|       - qtdeclarative5-dev-tools |       - qtdeclarative5-dev-tools | ||||||
|       - qml-module-qtquick-extras |       - qml-module-qtquick-extras | ||||||
|  |       - qml-module-qt-labs-settings | ||||||
|  |       - qml-module-qt-labs-folderlistmodel | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user