223 Commits

Author SHA1 Message Date
Filippo Scognamiglio
b9d027291e Bump version to 1.0.1. 2017-10-27 18:28:43 +02:00
Filippo Scognamiglio
eb00915c39 Merge pull request #373 from rbanffy/master
Updated 3278 font and associated files
2017-10-27 11:03:48 +02:00
Filippo Scognamiglio
828a22a939 Update submodule to include fix for High Sierra. 2017-10-27 11:02:43 +02:00
Ricardo Bánffy
875d02458e Updated 3278 font and associated files 2017-10-25 22:08:23 +01:00
Filippo Scognamiglio
a6d6ced1ad Merge pull request #340 from alexmyczko/patch-6
update copyright years
2017-10-07 11:58:45 +02:00
Filippo Scognamiglio
7e9855881b Merge pull request #354 from alexmyczko/patch-7
fix typos
2017-10-07 11:56:58 +02:00
Filippo Scognamiglio
cf4e7ca279 Merge pull request #360 from tgerczei/master
Gentoo overlay source change note
2017-10-07 11:56:09 +02:00
Filippo Scognamiglio
0a9b2b0bac Merge pull request #364 from matthiasbalke/patch-1
fixed markdown headings
2017-10-07 11:35:46 +02:00
Filippo Scognamiglio
f6b0a63410 Merge pull request #365 from scruss/master
Update README.md
2017-10-07 11:35:15 +02:00
Stewart C. Russell
7563cd4a08 Update README.md
added Ubuntu 17.04 dependencies
2017-09-09 13:31:11 -04:00
Matthias Balke
851f6d6624 fixed markdown headings 2017-09-06 09:48:01 +02:00
Tamás Gérczei
cd97acfcc1 Gentoo overlay source change note 2017-08-27 19:50:24 +02:00
Alex
613a2c5583 fix typos 2017-07-21 13:01:18 +02:00
Alex
32e95185ad update copyright years 2017-03-30 16:34:53 +02:00
Filippo Scognamiglio
e48719fa44 Merge pull request #322 from rbanffy/master
Update 3270 terminal font
2017-02-01 12:14:26 +01:00
Filippo Scognamiglio
348e5a4e19 Merge pull request #326 from barak/tweaks
Minor tweaks, either fixes or tiny additions done while updating debian packaging
2017-02-01 12:13:48 +01:00
Barak A. Pearlmutter
8d28972323 Merge remote-tracking branch 'b0n541/master' into tweaks 2017-01-25 13:16:39 +00:00
Barak A. Pearlmutter
d74bd0a39b version 1.0 2016-12-18 22:53:16 +00:00
Barak A. Pearlmutter
07307a6d8f typo 2016-12-18 22:53:16 +00:00
Barak A. Pearlmutter
151fb6e58d add --version, aka -v, command line option 2016-12-18 22:53:16 +00:00
Barak A. Pearlmutter
888ab49e44 add comment listing bugs in --help option output 2016-12-18 22:53:16 +00:00
Jan Schäfer
24dad37da7 Removed duplicated packages from Ubuntu 16.10 2016-12-06 04:44:47 +01:00
Jan Schäfer
eb6a41556d Updated install of needed packages for Ubuntu 16.10 2016-12-06 04:11:50 +01:00
Ricardo Banffy
5534cc4457 Update 3270 terminal font 2016-11-26 20:21:41 +00:00
Filippo Scognamiglio
dde90fb5b7 Merge pull request #307 from alexmyczko/patch-2
Create manpage cool-retro-term.1
2016-08-30 18:12:43 +02:00
Filippo Scognamiglio
efb2f749aa Merge pull request #306 from alexmyczko/patch-1
Create watch
2016-08-30 18:12:23 +02:00
Filippo Scognamiglio
fbee977166 Merge pull request #303 from alex-spataru/master
Remember window size automatically
2016-08-30 18:11:36 +02:00
Alex
9f012b8ac8 Create cool-retro-term.1
a manpage
2016-08-22 17:04:26 +02:00
Alex
9c3a157a84 Create watch
watch file to be used by uscan(1)
2016-08-22 17:01:55 +02:00
Alex Spataru
b7f632077c Use provided settings database 2016-08-06 13:43:04 -05:00
Alex Spataru
bfab242344 Also save window position 2016-08-06 02:04:35 -05:00
Alex Spataru
6e54a96730 Save window size 2016-08-06 01:34:11 -05:00
Filippo Scognamiglio
69d35a749f Merge pull request #282 from tgerczei/master
Updated README.md
2016-05-20 15:16:58 +02:00
Filippo Scognamiglio
4745702909 Merge pull request #284 from EaterOA/master
Add custom command support
2016-05-20 15:16:45 +02:00
Vincent Wong
e94801ee02 Fix issue with custom command not saving on exit
If the user directly closes the settings window without triggering the
custom command Textfield's onEditingFinished (via unfocus or pressing
enter), the custom command may not save. This change adds a listener to
the Textfield so that if the settings window closes, the change will
always be recorded.
2016-04-07 18:15:37 -07:00
Vincent Wong
cc57fbdcd5 Profile-bound custom commands now execute
Rather than starting ksession right away, PreprocessedTerminal now waits
for ApplicationSettings to finish loading custom command settings from
storage. If a custom command is specified, PreprocessedTerminal will
tokenize it and pass it onto ksession as a shell program similar to the
-e option. If both a -e command and a custom command is specified, the
-e version overrides the custom command.
2016-03-21 12:55:09 -07:00
Vincent Wong
674097f672 Add new custom command settings in General
These custom commands are profile-specific
2016-03-21 12:48:18 -07:00
Tamas Gerczei
472561c1b8 Switched the Gentoo overlay to a new, trustable certificate so no exception is necessary any longer 2016-03-13 21:42:13 +01:00
Filippo Scognamiglio
d345be2114 Merge pull request #280 from rbanffy/master
Update 3270 font to v1.2.11, with added glyphs
2016-03-13 15:36:22 +01:00
Filippo Scognamiglio
c505dfaa11 Remove Envy Code Font. 2016-03-13 15:33:40 +01:00
Ricardo Bánffy
1574d5ab4c Update README 2016-02-29 21:30:54 +00:00
Ricardo Bánffy
0a24f497cc Update 3270 font to v1.2.11, with added glyphs 2016-02-29 17:24:31 +00:00
Filippo Scognamiglio
9e629780ad Merge pull request #274 from barak/master
Debian Packaging Updates
2016-02-20 13:08:31 +01:00
Filippo Scognamiglio
98a842655a Merge pull request #275 from rbanffy/master
Update 3270 font - better hints, new glyphs
2016-02-20 13:08:09 +01:00
Filippo Scognamiglio
53943878c1 Merge pull request #276 from Wazutiman/patch-1
Additional dependency for fedora
2016-02-20 13:07:57 +01:00
Filippo Scognamiglio
34360c1603 Merge pull request #278 from MichaelNeas/master
OSX Port Update
2016-02-20 13:07:37 +01:00
Michael Neas
356448bb70 OSX Port Update 2016-02-18 11:47:16 -05:00
Shawn Dooley
103cd641a7 Additional dependency for fedora 2016-01-29 23:44:41 -05:00
Ricardo Bánffy
d7fb0b3021 Update 3270 font - better hints, new glyphs 2016-01-27 08:52:41 -02:00
Barak A. Pearlmutter
7bf79ec645 placate desktop-file-validate and lintian
$ lintian cool-retro-term_*.deb | egrep desktop
I: cool-retro-term: desktop-entry-lacks-keywords-entry usr/share/applications/cool-retro-term.desktop
W: cool-retro-term: desktop-mime-but-no-exec-code usr/share/applications/cool-retro-term.desktop

$ desktop-file-validate cool-retro-term.desktop
cool-retro-term.desktop: hint: value "Qt;System;Utility;TerminalEmulator;" for key "Categories" in group "Desktop Entry" contains more than one main category; application might appear more than once in the application menu
2016-01-10 14:53:58 +00:00
Barak A. Pearlmutter
dd0e904432 debian/control section x11 per policy; provides x-terminal-emulator 2015-12-18 17:16:49 +00:00
Barak A. Pearlmutter
561739ba8b debian/control packaging repo 2015-12-18 17:04:53 +00:00
Barak A. Pearlmutter
b2596c0580 debian/control homepage 2015-12-18 16:14:12 +00:00
Barak A. Pearlmutter
b1456b4fda typo: informations ↝ information 2015-12-18 16:09:54 +00:00
Barak A. Pearlmutter
923cf9b2bb git ignore debian build debris 2015-12-18 16:00:41 +00:00
Filippo Scognamiglio
273917060b Merge pull request #266 from rbanffy/master
Update 3270 font to latest version
2015-12-15 18:27:54 +01:00
Filippo Scognamiglio
7ba2046d14 Merge pull request #270 from tomchiverton/patch-2
Ubuntu versions README updated
2015-12-15 18:26:13 +01:00
Tom Chiverton
be145c12a3 Ubuntu versions updated 2015-12-09 18:46:12 +00:00
Ricardo Bánffy
759e796fdd Re-add link to original project 2015-10-18 23:15:04 -02:00
Ricardo Bánffy
9121beaf8d Update 3270 font to latest version 2015-10-18 23:13:05 -02:00
Tamas Gerczei
89472dfc54 Merge remote-tracking branch 'upstream/master' 2015-10-16 12:20:16 +02:00
Tamas Gerczei
eb739195ea Merge branch 'master' of https://github.com/tgerczei/cool-retro-term 2015-10-15 20:11:23 +02:00
Tamas Gerczei
2da0bc9535 ebuild updated 2015-10-15 20:11:14 +02:00
Filippo Scognamiglio
7255a162e9 Merge pull request #254 from tgerczei/master
Update README.md
2015-08-16 11:47:29 +02:00
tgerczei
a479506dcf Update README.md
revision bump
2015-08-14 15:45:51 +02:00
Filippo Scognamiglio
cf62e85172 Merge pull request #249 from Swordfish90/unstable
Update engine. This fixes the CTRL+Space behaviour.
2015-06-20 16:48:39 +02:00
Filippo Scognamiglio
c0ea7acd28 Merge pull request #246 from GottZ/patch-1
Update readme.md to include install instructions for arch official repository.
2015-05-19 17:18:47 +02:00
Jan-Stefan Janetzky
7923db38c8 arch has it in community/
there is a precompiled version of cool-retro-term inside the official arch linux community repository.
2015-05-18 18:03:30 +02:00
Filippo Scognamiglio
bf9937619e Update engine. This fixes the CTRL+Space behaviour. 2015-04-03 19:17:40 +02:00
Filippo Scognamiglio
e5fe99eda9 Merge pull request #230 from andresgutierrez/master
Instructions for building on MacOSX with MacPorts
2015-02-24 01:29:38 +01:00
Andres Gutierrez
eded375cf6 Instructions for building on MacOSX with MacPorts 2015-02-23 15:34:47 -05:00
Filippo Scognamiglio
1b619a7a36 Merge pull request #223 from rbanffy/master
Update 3270 font
2015-02-16 16:06:36 +01:00
Ricardo Bánffy
5d79e475d1 update 3270 font 2015-02-15 13:24:56 -02:00
Filippo Scognamiglio
cb2b9dd3a2 Merge pull request #222 from tgerczei/master
Update README.md
2015-02-15 14:50:25 +01:00
tgerczei
04f819b331 Update README.md
Updated instructions for Gentoo to install first release.
2015-02-15 14:28:16 +01:00
Filippo Scognamiglio
5807ea001a Merge branch 'unstable' which fixes default precisions on ES systems.
Conflicts:
	app/qml/PreprocessedTerminal.qml
	app/qml/ShaderTerminal.qml
	app/qml/frames/utils/TerminalFrame.qml
2015-01-29 03:17:05 +01:00
Filippo Scognamiglio
28d92dc68b Remove default precision on non ES platforms. 2015-01-28 11:14:42 +01:00
Filippo Scognamiglio
91a221529f Merge pull request #216 from Swordfish90/revert-215-master
Revert "Fix: added missing default precision directives in fragment shad...
2015-01-28 10:10:03 +00:00
Filippo Scognamiglio
844af0d93f Revert "Fix: added missing default precision directives in fragment shaders" 2015-01-28 11:09:30 +01:00
Filippo Scognamiglio
6912d74d71 Merge pull request #215 from theridane/master
Fix: added missing default precision directives in fragment shaders
2015-01-28 09:46:22 +00:00
Martin Sekera
f1a6c0fcee Fix: added missing default precision directives in fragment shaders 2015-01-27 23:48:05 +01:00
Filippo Scognamiglio
edad3ab28c Merge pull request #214 from x-a-n-a-x/patch-1
Add Bountysource information to README.md
2015-01-25 10:36:30 +00:00
x-a-n-a-x
fb7e086770 Update README.md
Add a paragraph about bounties and bountysource.
2015-01-25 11:29:25 +01:00
Filippo Scognamiglio
6446f1d1bc Merge pull request #213 from Swordfish90/unstable
Mege latest changes for final version.
2015-01-24 18:16:52 +00:00
Filippo Scognamiglio
01f391dea3 Fix: wrong default font. 2015-01-24 19:11:54 +01:00
Filippo Scognamiglio
5b635abb38 Update README.md with new screenshots and bump version to 1.0.0. 2015-01-24 18:54:08 +01:00
Filippo Scognamiglio
54c52b230a Reorganize FPS slider. 2015-01-24 18:06:37 +01:00
Filippo Scognamiglio
40eb51e5eb Improve look of glow line. 2015-01-22 01:44:30 +01:00
Filippo Scognamiglio
546c4f36f0 Fix scanlines on high-dpi screens. 2015-01-20 03:35:47 +01:00
Filippo Scognamiglio
2911960482 Fix merge conflicts. 2015-01-20 01:14:51 +01:00
Filippo Scognamiglio
265e19def8 Revert invisibility of spacing item in settings dialog. 2015-01-20 01:05:27 +01:00
Filippo Scognamiglio
2bc88768b6 Reduce minimum scaling value and fix aliasing issues with small fonts and rasterization. 2015-01-20 00:57:23 +01:00
Filippo Scognamiglio
32f7923652 Fix: use arrow cursor when terminal application uses mouse. 2015-01-19 18:20:23 +01:00
Filippo Scognamiglio
e379f05aca Merge pull request #212 from Swordfish90/fast-burnin-3
Improved burnin. This is a very important optimizatoin for mesa linux ma...
2015-01-19 17:17:21 +00:00
Filippo Scognamiglio
a7bab660e9 Improved burnin. This is a very important optimizatoin for mesa linux machines. 2015-01-19 17:31:37 +01:00
Filippo Scognamiglio
1bcb85968b Merge pull request #211 from rbanffy/master
Correct rendering issue in 3270 font.
2015-01-17 10:24:46 +00:00
Ricardo Bánffy
4adf13539a Correct rendering issue (see https://raw.githubusercontent.com/wiki/rbanffy/3270font/aepw.png) 2015-01-16 21:44:34 -02:00
Filippo Scognamiglio
8b47c5633a Merge pull request #210 from KAMiKAZOW/patch-2
rm pixmap
2015-01-14 17:08:31 +00:00
KAMiKAZOW
cb1e3f1b76 rm pixmap
because it's redundant
2015-01-14 01:17:49 +01:00
Filippo Scognamiglio
92ef89d5d2 Merge pull request #207 from KAMiKAZOW/patch-1
Install icon
2015-01-13 21:38:06 +00:00
Filippo Scognamiglio
b8fd9d6c45 Merge pull request #209 from Swordfish90/install-icons
Install icons
2015-01-13 21:37:39 +00:00
Filippo Scognamiglio
0c17ca115e Set window application icon. 2015-01-12 22:35:49 +01:00
Filippo Scognamiglio
505a840574 Install icons. 2015-01-12 21:51:27 +01:00
KAMiKAZOW
56d742c1d2 Install icon
Install CRT icon, minor other things
2015-01-12 15:46:52 +01:00
Filippo Scognamiglio
28c66fa689 Merge pull request #204 from tomchiverton/patch-1
Add link to Ubuntu 14.04 PPA to readmd
2015-01-10 17:59:32 +00:00
Tom Chiverton
ceea1339d0 Add link to Ubuntu 14.04 PPA 2015-01-10 16:54:23 +00:00
Filippo Scognamiglio
8aea50fd2b Merge branch 'unstable' of https://github.com/Swordfish90/cool-retro-term into unstable 2015-01-08 03:56:06 +01:00
Filippo Scognamiglio
166e1f40fe Misc fixes in settings dialog. 2015-01-08 03:55:19 +01:00
Filippo Scognamiglio
415dcafee3 Merge pull request #201 from Swordfish90/unstable
Unstable
2015-01-07 11:43:09 +01:00
Filippo Scognamiglio
0399a6eb3c Adjust fixedsys-excelsior baseScaling. 2015-01-07 11:23:59 +01:00
Filippo Scognamiglio
ac70da5b38 Add Fixedsys Excelsior font. 2015-01-07 11:16:09 +01:00
Filippo Scognamiglio
5ad20f6b4e Merge pull request #200 from Swordfish90/unstable
Unstable
2015-01-06 02:37:22 +01:00
Filippo Scognamiglio
283aa92579 Merge pull request #199 from Swordfish90/improve-burn-in
Burnin is now subtractive. Better looking and more predictable.
2015-01-06 02:30:18 +01:00
Filippo Scognamiglio
a24cbbcc93 Burnin is now subtractive. Better looking and more predictable. 2015-01-06 01:35:35 +01:00
Filippo Scognamiglio
17b70b47ce Fix OSX keys issues. 2015-01-05 22:35:07 +01:00
Filippo Scognamiglio
295912fbb3 Reduce minimum quality and allower finer tuning of performance settings. 2015-01-05 22:08:06 +01:00
Filippo Scognamiglio
859adf966a Use IBeamCursor instead of normal arrow. 2015-01-05 22:01:14 +01:00
Filippo Scognamiglio
cf404f980d Use already available shaderEffectSource and improve bloom look at low quality by limiting minimum radius. 2015-01-05 21:47:42 +01:00
Filippo Scognamiglio
6979abe96a Merge pull request #198 from Swordfish90/fix-color-dialog-2
Fix bad behaving color dialog on some platforms.
2015-01-02 22:16:33 +01:00
Filippo Scognamiglio
c685cbd640 Merge pull request #197 from Swordfish90/add-pixelated-fonts
Add pixelated fonts and use them as default
2015-01-02 22:15:11 +01:00
Filippo Scognamiglio
4934d78cea Fix font names and default profiles. 2015-01-02 21:46:59 +01:00
Filippo Scognamiglio
c6716e1b1a Fix: texture quality and burnin sliders now have effect on image quality when low res fornts are used. 2015-01-02 12:09:25 +01:00
Filippo Scognamiglio
cc1d77ea32 Fix: font names and order. Added compatible scanlines and pixels fonts. 2014-12-31 16:40:30 +01:00
Filippo Scognamiglio
3e7ac0d87d Optimize burn-in effect when low res font is used. We can actually use a much lower-res accumulator too. 2014-12-31 14:36:53 +01:00
Filippo Scognamiglio
a6952251de Make the upscaled fonts really upscaled. (Faster expecially at high resolutions). 2014-12-31 13:46:03 +01:00
Filippo Scognamiglio
d10bf29493 Fix bad behaving color dialog on some platforms. 2014-12-30 10:25:33 +01:00
Filippo Scognamiglio
9364aa3536 Merge pull request #195 from Swordfish90/unstable
Added profiles import/export, reorganized settings, fixes, fixes and fixes
2014-12-26 23:43:50 +01:00
Filippo Scognamiglio
a63135045e Bump terminal version and prepare for release. 2014-12-26 23:41:03 +01:00
Filippo Scognamiglio
bc441116e2 Enable terminal smoothing when rasterization is not used. 2014-12-26 23:16:31 +01:00
Filippo Scognamiglio
025ef61de1 Allow profiles with the same name. 2014-12-26 19:57:03 +01:00
Filippo Scognamiglio
e4c7ffe201 Fix: various small improvements. 2014-12-26 19:47:11 +01:00
Filippo Scognamiglio
0264fbebcd Small adjustments in the settings dialog. 2014-12-26 17:51:10 +01:00
Filippo Scognamiglio
7dd61c89fc Fix: osx shortcuts. 2014-12-26 17:36:03 +01:00
Filippo Scognamiglio
a62645f0b7 Improve profiles management, redesign a bit the settings window. 2014-12-26 17:19:34 +01:00
Filippo Scognamiglio
88079a3ee4 Improvement: initial implementation of profiles json IO. 2014-12-26 02:54:38 +01:00
Filippo Scognamiglio
c7fbe591ba Improvement: port profile selector to TableView. 2014-12-26 02:28:51 +01:00
Filippo Scognamiglio
b1139a3911 Fix: tiny tiny fixes. 2014-12-26 00:44:32 +01:00
Filippo Scognamiglio
f03fa29836 Improvement: index frames by name and not position. 2014-12-26 00:00:35 +01:00
Filippo Scognamiglio
04a6365349 Fix: font was not updated when profile changed. 2014-12-24 15:41:08 +01:00
Filippo Scognamiglio
4d3c16fabc Refactoting: change names in settings, and using camelCase for settings name. 2014-12-23 18:13:34 +01:00
Filippo Scognamiglio
9d5896b62c Improvement: allow arguments to be passed to the process launched with the terminal. 2014-12-23 17:07:10 +01:00
Filippo Scognamiglio
23a1033787 Refactor: different platforms contextual menus. 2014-12-23 14:02:46 +01:00
Filippo Scognamiglio
c35cb6cf45 Fix: horizontal sync should not go outside screen boundaries. 2014-12-23 13:58:22 +01:00
Filippo Scognamiglio
e0708e519c Merge pull request #193 from Swordfish90/unstable
Some fixes, bit of refactoring and plenty of new fonts.
2014-12-23 02:37:22 +01:00
Filippo Scognamiglio
0935dda00b Fix: Make osx copy and paste shortcuts consistent with the system. 2014-12-23 02:34:58 +01:00
Filippo Scognamiglio
1119f774f9 Many many new fonts. Sripped out resource file of what was useless. 2014-12-23 02:12:59 +01:00
Filippo Scognamiglio
7dcf98c395 Refactoring: port non visual components from Item to QtObject. 2014-12-23 00:49:33 +01:00
Filippo Scognamiglio
e5174fdb08 Workaround: workaround the margin in the menubar. 2014-12-23 00:35:02 +01:00
Filippo Scognamiglio
0594668387 Fix: clamp frame to black when outside texture boundaries. 2014-12-23 00:16:03 +01:00
Filippo Scognamiglio
ebbb1f82fe Merge pull request #192 from Swordfish90/unstable
Disable antialias when using rasterization. Fix windows raise behavior, OSX build issue with Qt 5.4 and OSX quit behavior.
2014-12-22 23:30:22 +01:00
Filippo Scognamiglio
dc8061a0a4 Fix: disable antialiasing when rasterization is enabled. 2014-12-22 23:07:08 +01:00
Filippo Scognamiglio
6c1c17445a Fix: fix OSX context menu issues. Split the context menus into two different components. 2014-12-22 21:44:45 +01:00
Filippo Scognamiglio
56d366116a Fix: Windows flags and raise behaviour. Also fix OSX quit issues. 2014-12-22 20:50:17 +01:00
Filippo Scognamiglio
1ed4d271c7 Fix: Issue between texture quality and the new frame. 2014-12-22 02:34:58 +01:00
Filippo Scognamiglio
bd1098f373 Fix: sql had issues under OSX. 2014-12-22 02:00:45 +01:00
Filippo Scognamiglio
8ed9a33bcd Fix: send application quit event when qml engine is closed. 2014-12-21 16:32:55 +01:00
Filippo Scognamiglio
17f37b48e7 Fix: autologin the shell under OSX. 2014-12-21 16:19:23 +01:00
Filippo Scognamiglio
5ea8bec0cf Merge pull request #189 from robatron/patch-2
README updates
2014-12-20 18:57:31 +01:00
Filippo Scognamiglio
2f94fa4e2f Merge pull request #190 from Swordfish90/unstable
New improved and faster frame effect.
2014-12-20 18:56:32 +01:00
Filippo Scognamiglio
6832b32741 Fix: screen curvature is now consistent across all screen sizes. Close #176. 2014-12-20 18:46:20 +01:00
Filippo Scognamiglio
c06b3db71e Fix: missing scrollbar margins caused some clamping on the texture border. 2014-12-20 18:46:20 +01:00
Filippo Scognamiglio
ebbaec762d Refactoring: avoid manually defined bindings in font changed handler. 2014-12-20 18:46:20 +01:00
Filippo Scognamiglio
ebc2246901 Fix: issue when changing rasterization. Small cleanups. 2014-12-20 18:46:20 +01:00
Filippo Scognamiglio
df76d83d4b Improved frames. They are now faster, better looking, and more customizable. Also added a workaround for segementation faults when changing them. 2014-12-20 18:46:05 +01:00
Rob McGuire-Dale
7b15677426 Enable shell syntax highlighting, specify pre-reqs 2014-12-18 21:17:47 -08:00
Filippo Scognamiglio
297201a75f Merge pull request #187 from Swordfish90/refactoring
Optimised and configurable motion blur effect. Other various fixes.
2014-12-16 01:50:40 +01:00
Filippo Scognamiglio
0c0cdfdee1 Fix: update profiles to reflect new changes. 2014-12-16 01:36:35 +01:00
Filippo Scognamiglio
579194dd35 Fix: using font names instaed of indexes in settings. 2014-12-16 01:22:46 +01:00
Filippo Scognamiglio
fa59bb06b1 Fix: Add static noise when horizontal distortion is activated. 2014-12-15 22:24:57 +01:00
Filippo Scognamiglio
38d4c5dd52 Fix: Improve a bit and fix visual issues with bloom. 2014-12-15 22:18:22 +01:00
Filippo Scognamiglio
ce5658a205 Fix: tweak blur values. 2014-12-15 22:03:09 +01:00
Filippo Scognamiglio
f9e68a6854 Fix: change workaround used to hide the menubar. This works with Qt 5.4 2014-12-15 11:56:40 +01:00
Filippo Scognamiglio
f4bd4fe69b Fix: bump plugin which fixes install issues with qmake. 2014-12-15 11:21:30 +01:00
Filippo Scognamiglio
26d5c56cd0 Optimizations: motion blur is better, and quality is now customizable. Default value is 50%. which is again a good compromise. 2014-12-15 02:35:13 +01:00
Filippo Scognamiglio
9fc73468a2 Merge pull request #184 from Swordfish90/refactoring
Many many fixes and optimizations. Texture scaling now dramatically improve performances, various shader optimizations, improved static noise and horizontal distortion and more...
2014-12-14 21:27:41 +01:00
Filippo Scognamiglio
37317136ed Fix: Bloom radius needed a dependency on window scaling. 2014-12-14 21:17:40 +01:00
Filippo Scognamiglio
4ce7b0cadf Removed scanline quality settings. Was quite useless and confusing. 2014-12-14 19:13:19 +01:00
Filippo Scognamiglio
29e8592582 Optimization: Allow finer bloom quality settings. Also set default value to 50%, good compromise between speed and quality. 2014-12-14 18:53:37 +01:00
Filippo Scognamiglio
a088c2455e Fix: Window scaling was counted two times for bloom. 2014-12-14 17:01:40 +01:00
Filippo Scognamiglio
dab16fb80a Fix: oops... Removed something that was actually useful. 2014-12-14 12:02:40 +01:00
Filippo Scognamiglio
c9f918784c Move scanlines computations in main shader. This reduces GPU memory consumption, may improve performace and increases scanlines quality. 2014-12-14 10:32:43 +01:00
Filippo Scognamiglio
2876076cea Improvement: redesigned horizontal distortion effect. 2014-12-14 09:44:23 +01:00
Filippo Scognamiglio
08c53160a4 Merge pull request #183 from tgerczei/master
Update README.md
2014-12-13 21:21:00 +01:00
Filippo Scognamiglio
6cabacbcc0 Optimization: new texture based way to draw the noise. It looks better. There is also a wiser use of textures which brings big performance improvements. 2014-12-13 16:53:45 +01:00
tgerczei
d3d153b9c0 Update README.md
layman syntax correction
2014-12-13 08:16:36 +01:00
Filippo Scognamiglio
b9afcec3cf Improve static noise by using pregenerated image instead of the shader we used before. 2014-12-13 01:44:26 +01:00
Filippo Scognamiglio
fd73afb66b Refactor: move some out of place functions. 2014-12-12 21:31:19 +01:00
Filippo Scognamiglio
64fb980ae4 Fix: improve profile and settings printing and disable it by default. 2014-12-12 21:10:53 +01:00
Filippo Scognamiglio
c58f85c6ac Fix: cursor was chopped when linespacing was used. 2014-12-12 02:20:11 +01:00
Filippo Scognamiglio
94131a24ad Improvement: all fonts now have a custom default width, this allows to have more uniform sizes across fonts and different rasterizations. Small tweaks in font sizes. 2014-12-12 01:38:32 +01:00
Filippo Scognamiglio
30cc2a5e9c Refactor: texture scaling is now slightly better organized. 2014-12-12 00:59:23 +01:00
Filippo Scognamiglio
6eb3e814fe Fix: remove unused font. 2014-12-12 00:46:34 +01:00
Filippo Scognamiglio
e029978937 Bump plugin version. Fix: terminal plugin was not installed. 2014-12-12 00:36:32 +01:00
Filippo Scognamiglio
85d637e62e Fix: undefined reference after refactoring. 2014-12-11 13:50:52 +01:00
Filippo Scognamiglio
dbdd7f3705 Fix: dialog sizes and positioning. 2014-12-11 12:35:31 +01:00
Filippo Scognamiglio
7b7eba1c7c Refactoring: rename shadersettings in appSettings. 2014-12-11 12:08:15 +01:00
Filippo Scognamiglio
0daf33c36f Refactor: simplify main terminal. 2014-12-11 11:31:23 +01:00
Filippo Scognamiglio
68a8d7d212 Refactor: extract all the other effects from main terminal. 2014-12-11 10:40:14 +01:00
Filippo Scognamiglio
9f943aa2d0 Refactor: extract noise and rasterization from terminal object. 2014-12-11 10:07:53 +01:00
Filippo Scognamiglio
6b9a2ed5d2 Refactor main and terminal container. 2014-12-11 01:48:30 +01:00
Filippo Scognamiglio
dcb332b06f Use scale transformation instead of shadereffectsource. Faster when reducing quality. 2014-12-11 01:20:51 +01:00
Filippo Scognamiglio
b9f2cc4300 Force shadereffect source visibility to off. Bump qmltermwidget plugin version. 2014-12-11 00:52:09 +01:00
Filippo Scognamiglio
48716f1c0e Merge pull request #182 from tgerczei/master
Adding Gentoo install instructions.
2014-12-04 03:32:48 +01:00
tgerczei
33c8c28899 Update README.md 2014-12-03 14:06:48 +01:00
tgerczei
eb5968bdd2 Update README.md
Added instructions for Gentoo
2014-12-03 13:47:37 +01:00
Filippo Scognamiglio
16768cf10c Merge pull request #173 from Swordfish90/newnewplugin
Move to new plugin. Fixes, performace optimizations and a new scrollbar added in the transition.
2014-11-13 00:24:00 +01:00
Filippo Scognamiglio
789828e8b8 Bump plugin version. 2014-11-13 00:16:20 +01:00
Filippo Scognamiglio
4b57ee4e64 Removed old plugin. We'll miss you pal. 2014-11-12 23:28:55 +01:00
Filippo Scognamiglio
b61c03630d Update README.md 2014-11-12 23:27:38 +01:00
Filippo Scognamiglio
b3a4b7158e Added scrollbar. 2014-11-12 23:14:48 +01:00
Filippo Scognamiglio
28bb2e2adf Set default effects fps to 24 (the terminal is now updated at full speed). 2014-11-11 15:19:03 +01:00
Filippo Scognamiglio
c575385ba3 Update plugin version. 2014-11-11 15:08:21 +01:00
Filippo Scognamiglio
45ef5ee000 Added lightly smoothed black frame around the screen. 2014-11-11 14:51:24 +01:00
Filippo Scognamiglio
5552bea525 Moving time manager in ShaderTerminal since it is only used there. 2014-11-09 15:20:05 +01:00
Filippo Scognamiglio
4f22704922 Using new plugin. This is ported by me from qtermwidget (konsole). Removing manual management of the signals to rely more on Qt implementations. 2014-11-09 01:38:22 +01:00
Filippo Scognamiglio
e0660a699b Merge pull request #170 from inzanity/master
Use window title from session. Fixes #167
2014-11-03 06:01:15 -05:00
Santtu Lakkala
4b5827cb3e Use window title from session. Fixes #167 2014-10-27 09:28:27 +02:00
Filippo Scognamiglio
08ade0eb6f Fix regression: copy and paste were not working anymore. 2014-10-13 22:53:26 +02:00
Filippo Scognamiglio
e4f89f0486 Add missing command in osx build function. 2014-10-13 14:45:34 +02:00
Filippo Scognamiglio
b2709aef6f Merge pull request #161 from jekader/debian-packaging
add missing dependencies to Debian manifest
2014-10-13 13:39:56 +02:00
Jeka Der
3bf385b317 added missing Debian dependencies 2014-10-12 18:14:33 +02:00
Filippo Scognamiglio
bebfdfa267 Merge pull request #158 from KAMiKAZOW/patch-2
Fix typo in cool-retro-term.spec
2014-10-12 11:06:58 +02:00
KAMiKAZOW
e3e7d12ff8 Update cool-retro-term.spec
Fix typo
2014-10-12 05:16:22 +02:00
168 changed files with 2309 additions and 26407 deletions

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "qmltermwidget"]
path = qmltermwidget
url = https://github.com/Swordfish90/qmltermwidget

View File

@@ -4,14 +4,14 @@
cool-retro-term is a terminal emulator which mimics the look and feel of the old cathode tube screens. cool-retro-term is a terminal emulator which mimics the look and feel of the old cathode tube screens.
It has been designed to be eye-candy, customizable, and reasonably lightweight. It has been designed to be eye-candy, customizable, and reasonably lightweight.
It uses the Konsole engine which is powerful and mature. It uses the QML port of qtermwidget (Konsole) developed by me: https://github.com/Swordfish90/qmltermwidget .
This terminal emulator requires Qt 5.2 or higher to run. This terminal emulator works under Linux and OSX and requires Qt 5.2 or higher.
## Screenshots ## Screenshots
![Image](<http://i.imgur.com/NUfvnlu.png>) ![Image](<http://i.imgur.com/I6wq1cC.png>)
![Image](<http://i.imgur.com/4LpfLF8.png>) ![Image](<http://i.imgur.com/12EqlpL.png>)
![Image](<http://i.imgur.com/MMmM6Ht.png>) ![Image](<http://i.imgur.com/Lx0acQz.jpg>)
## Get cool-retro-term ## 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: You can either build cool-retro-term yourself (see below) or walk the easy way and install one of these packages:
@@ -22,6 +22,27 @@ Arch users can install this [package](https://aur.archlinux.org/packages/cool-re
yaourt -S aur/cool-retro-term-git yaourt -S aur/cool-retro-term-git
or use:
pacman -S cool-retro-term
to install precompiled from community repository.
Gentoo users can now install the first release "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.0-r1::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)
OSX users can grab the latest dmg from the release page: https://github.com/Swordfish90/cool-retro-term/releases
## Build instructions (Linux) ## Build instructions (Linux)
## Dependencies ## Dependencies
@@ -35,6 +56,18 @@ Make sure to install these first.
--- ---
**Ubuntu 16.10**
sudo apt-get install build-essential qmlscene qt5-qmake qt5-default qtdeclarative5-dev qml-module-qtquick-controls qtdeclarative5-qtquick2-plugin libqt5qml-graphicaleffects qml-module-qtquick-dialogs qtdeclarative5-localstorage-plugin qtdeclarative5-window-plugin
---
**Ubuntu 17.04**
sudo apt-get install build-essential libqt5qml-graphicaleffects qml-module-qt-labs-folderlistmodel qml-module-qt-labs-settings qml-module-qtquick-controls qml-module-qtquick-dialogs qmlscene qt5-default qt5-qmake qtdeclarative5-dev qtdeclarative5-localstorage-plugin qtdeclarative5-qtquick2-plugin qtdeclarative5-window-plugin
---
**Debian Jessie** **Debian Jessie**
sudo apt-get 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 sudo apt-get 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
@@ -44,11 +77,11 @@ Make sure to install these first.
**Fedora** **Fedora**
This command should install the known fedora dependencies: This command should install the known fedora dependencies:
sudo yum -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols sudo yum -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols redhat-rpm-config
or: or:
sudo dnf -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols sudo dnf -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols redhat-rpm-config
--- ---
@@ -82,7 +115,7 @@ Once you installed all dependencies (Qt is installed and in your path) you need
```bash ```bash
# Get it from GitHub # Get it from GitHub
git clone https://github.com/Swordfish90/cool-retro-term.git git clone --recursive https://github.com/Swordfish90/cool-retro-term.git
# Build it # Build it
cd cool-retro-term cd cool-retro-term
@@ -96,14 +129,37 @@ qmake && make
## Build instructions (OSX) ## Build instructions (OSX)
1. Install [Xcode](https://developer.apple.com/xcode/) and agree to the licence agreement
2. Enter the following commands into the terminal:
**Brew**
```sh
brew install qt5 brew install qt5
git clone https://github.com/Swordfish90/cool-retro-term.git git clone --recursive https://github.com/Swordfish90/cool-retro-term.git
export CPPFLAGS="-I/usr/local/opt/qt5/include" export CPPFLAGS="-I/usr/local/opt/qt5/include"
export LDFLAGS="-L/usr/local/opt/qt5/lib" export LDFLAGS="-L/usr/local/opt/qt5/lib"
export PATH=/usr/local/opt/qt5/bin:$PATH export PATH=/usr/local/opt/qt5/bin:$PATH
cd cool-retro-term cd cool-retro-term
qmake && make qmake && make
mkdir cool-retro-term.app/Contents/PlugIns
cp -r qmltermwidget/QMLTermWidget cool-retro-term.app/Contents/PlugIns
open cool-retro-term.app open cool-retro-term.app
```
**MacPorts**
```sh
sudo port install qt5
git clone --recursive https://github.com/Swordfish90/cool-retro-term.git
cd cool-retro-term
/opt/local/libexec/qt5/bin/qmake && make
mkdir cool-retro-term.app/Contents/PlugIns
cp -r qmltermwidget/QMLTermWidget cool-retro-term.app/Contents/PlugIns
open cool-retro-term.app
```
## 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&currency_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&currency_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted) .
You can also add "bounties" on your favourite issues. More information on the [Bountysource](https://www.bountysource.com/teams/crt/issues) page.

View File

@@ -1,50 +0,0 @@
#ifndef FILEIO_H
#define FILEIO_H
#include <QObject>
#include <QFile>
#include <QTextStream>
#include <QUrl>
class FileIO : public QObject
{
Q_OBJECT
public:
FileIO() {}
public slots:
bool write(const QString& sourceUrl, const QString& data) {
if (sourceUrl.isEmpty())
return false;
QUrl url(sourceUrl);
QFile file(url.toLocalFile());
if (!file.open(QFile::WriteOnly | QFile::Truncate))
return false;
QTextStream out(&file);
out << data;
file.close();
return true;
}
QString read(const QString& sourceUrl) {
if (sourceUrl.isEmpty())
return "";
QUrl url(sourceUrl);
QFile file(url.toLocalFile());
if (!file.open(QFile::ReadOnly))
return "";
QTextStream in(&file);
QString result = in.readAll();
file.close();
return result;
}
};
#endif // FILEIO_H

View File

@@ -1,8 +1,13 @@
QT += qml quick widgets QT += qml quick widgets sql
TARGET = cool-retro-term TARGET = cool-retro-term
DESTDIR = $$OUT_PWD/../ DESTDIR = $$OUT_PWD/../
SOURCES = main.cpp
HEADERS += \
fileio.h
SOURCES = main.cpp \
fileio.cpp
macx:ICON = icons/crt.icns macx:ICON = icons/crt.icns
@@ -16,5 +21,16 @@ target.path += /usr/bin/
INSTALLS += target INSTALLS += target
HEADERS += \ # Install icons
FileIO.h unix {
icon32.files = icons/32x32/cool-retro-term.png
icon32.path = /usr/share/icons/hicolor/32x32/apps
icon64.files = icons/64x64/cool-retro-term.png
icon64.path = /usr/share/icons/hicolor/64x64/apps
icon128.files = icons/128x128/cool-retro-term.png
icon128.path = /usr/share/icons/hicolor/128x128/apps
icon256.files = icons/256x256/cool-retro-term.png
icon256.path = /usr/share/icons/hicolor/256x256/apps
INSTALLS += icon32 icon64 icon128 icon256
}

37
app/fileio.cpp Normal file
View File

@@ -0,0 +1,37 @@
#include "fileio.h"
FileIO::FileIO()
{
}
bool FileIO::write(const QString& sourceUrl, const QString& data) {
if (sourceUrl.isEmpty())
return false;
QUrl url(sourceUrl);
QFile file(url.toLocalFile());
if (!file.open(QFile::WriteOnly | QFile::Truncate))
return false;
QTextStream out(&file);
out << data;
file.close();
return true;
}
QString FileIO::read(const QString& sourceUrl) {
if (sourceUrl.isEmpty())
return "";
QUrl url(sourceUrl);
QFile file(url.toLocalFile());
if (!file.open(QFile::ReadOnly))
return "";
QTextStream in(&file);
QString result = in.readAll();
file.close();
return result;
}

21
app/fileio.h Normal file
View File

@@ -0,0 +1,21 @@
#ifndef FILEIO_H
#define FILEIO_H
#include <QObject>
#include <QFile>
#include <QTextStream>
#include <QUrl>
class FileIO : public QObject
{
Q_OBJECT
public:
FileIO();
public slots:
bool write(const QString& sourceUrl, const QString& data);
QString read(const QString& sourceUrl);
};
#endif // FILEIO_H

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -5,51 +5,98 @@
#include <QStringList> #include <QStringList>
#include <QtWidgets/QApplication> #include <QtWidgets/QApplication>
#include <QIcon>
#include <QDebug> #include <QDebug>
#include <stdlib.h> #include <stdlib.h>
#include <FileIO.h> #include <fileio.h>
QString getNamedArgument(QStringList args, QString name, QString defaultName)
QString getNamedArgument(QStringList args, QString name) { {
int index = args.indexOf(name); int index = args.indexOf(name);
return (index != -1) ? args[index + 1] : QString(""); return (index != -1) ? args[index + 1] : QString(defaultName);
}
QString getNamedArgument(QStringList args, QString name)
{
return getNamedArgument(args, name, "");
} }
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
// Some environmental variable are necessary on certain platforms.
// This disables QT appmenu under Ubuntu, which is not working with QML apps.
setenv("QT_QPA_PLATFORMTHEME", "", 1); setenv("QT_QPA_PLATFORMTHEME", "", 1);
#if defined(Q_OS_MAC)
// This allows UTF-8 characters usage in OSX.
setenv("LC_CTYPE", "UTF-8", 1);
#endif
QApplication app(argc, argv); QApplication app(argc, argv);
QQmlApplicationEngine engine; QQmlApplicationEngine engine;
FileIO fileIO;
#if !defined(Q_OS_MAC)
app.setWindowIcon(QIcon::fromTheme("cool-retro-term", QIcon(":../icons/32x32/cool-retro-term.png")));
#else
app.setWindowIcon(QIcon(":../icons/32x32/cool-retro-term.png"));
#endif
// 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")) { 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() << "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() << " --default-settings Run cool-retro-term with the default settings";
qDebug() << " --workdir <dir> Change working directory to 'dir'"; qDebug() << " --workdir <dir> Change working directory to 'dir'";
qDebug() << " --program <prog> Run the 'prog' in the new terminal."; qDebug() << " -e <cmd> Command to execute. This option will catch all following arguments, so use it as the last option.";
qDebug() << " --fullscreen Run cool-retro-term in fullscreen."; qDebug() << " --fullscreen Run cool-retro-term in fullscreen.";
qDebug() << " -p|--profile <prof> Run cool-retro-term with the given profile."; qDebug() << " -p|--profile <prof> Run cool-retro-term with the given profile.";
qDebug() << " -h|--help Print this help."; qDebug() << " -h|--help Print this help.";
qDebug() << " --verbose Print additional information such as profiles and settings.";
return 0; return 0;
} }
engine.rootContext()->setContextProperty("workdir", getNamedArgument(args, "--workdir")); if (args.contains("-v") || args.contains("--version")) {
engine.rootContext()->setContextProperty("shellProgram", getNamedArgument(args, "--program")); qDebug() << "cool-retro-term 1.0.1";
return 0;
}
// Used to read and write files // Manage default command
FileIO fileIO; QStringList cmdList;
engine.rootContext()->setContextProperty("fileio", &fileIO); if (args.contains("-e")) {
cmdList << args.mid(args.indexOf("-e") + 1);
}
QVariant command(cmdList.empty() ? QVariant() : cmdList[0]);
QVariant commandArgs(cmdList.size() <= 1 ? QVariant() : QVariant(cmdList.mid(1)));
engine.rootContext()->setContextProperty("defaultCmd", command);
engine.rootContext()->setContextProperty("defaultCmdArgs", commandArgs);
engine.rootContext()->setContextProperty("workdir", getNamedArgument(args, "--workdir", "$HOME"));
engine.rootContext()->setContextProperty("fileIO", &fileIO);
engine.rootContext()->setContextProperty("devicePixelRatio", app.devicePixelRatio());
// Manage import paths for Linux and OSX. // Manage import paths for Linux and OSX.
QStringList importPathList = engine.importPathList(); QStringList importPathList = engine.importPathList();
importPathList.prepend(QCoreApplication::applicationDirPath() + "/imports/"); importPathList.prepend(QCoreApplication::applicationDirPath() + "/qmltermwidget");
importPathList.prepend(QCoreApplication::applicationDirPath() + "/../PlugIns"); importPathList.prepend(QCoreApplication::applicationDirPath() + "/../PlugIns");
importPathList.prepend(QCoreApplication::applicationDirPath() + "/../../../qmltermwidget");
engine.setImportPathList(importPathList); engine.setImportPathList(importPathList);
engine.load(QUrl("qrc:/main.qml")); engine.load(QUrl(QStringLiteral ("qrc:/main.qml")));
if (engine.rootObjects().isEmpty()) {
qDebug() << "Cannot load QML interface";
return EXIT_FAILURE;
}
// Quit the application when the engine closes.
QObject::connect((QObject*) &engine, SIGNAL(quit()), (QObject*) &app, SLOT(quit()));
return app.exec(); return app.exec();
} }

View File

@@ -6,8 +6,10 @@ import QtQuick.Window 2.0
Window{ Window{
id: dialogwindow id: dialogwindow
title: qsTr("About") title: qsTr("About")
width: 450 width: 600
height: 300 height: 400
modality: Qt.ApplicationModal
ColumnLayout{ ColumnLayout{
anchors.fill: parent anchors.fill: parent
@@ -64,20 +66,18 @@ Window{
ColumnLayout{ ColumnLayout{
anchors.fill: parent anchors.fill: parent
spacing: 10 spacing: 10
Item{
Layout.fillHeight: true
Layout.fillWidth: true
Image{ Image{
anchors.fill: parent Layout.fillWidth: true
Layout.fillHeight: true
anchors.horizontalCenter: parent.horizontalCenter
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
source: "images/crt256.png" source: "images/crt256.png"
smooth: true smooth: true
} }
}
Text{ Text{
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
text: shadersettings.version + "\n" + text: appSettings.version + "\n" +
qsTr("Author: ") + "Filippo Scognamiglio\n" + qsTr("Author: ") + "Filippo Scognamiglio\n" +
qsTr("Email: ") + "flscogna@gmail.com\n" + qsTr("Email: ") + "flscogna@gmail.com\n" +
qsTr("Source: ") + "https://github.com/Swordfish90/cool-retro-term\n" qsTr("Source: ") + "https://github.com/Swordfish90/cool-retro-term\n"

View File

@@ -19,67 +19,70 @@
*******************************************************************************/ *******************************************************************************/
import QtQuick 2.2 import QtQuick 2.2
import QtQuick.Controls 1.0
import "utils.js" as Utils
QtObject{
property string version: "1.0.1"
Item{ // STATIC CONSTANTS ////////////////////////////////////////////////////////
property string version: "0.9"
// GENERAL SETTINGS /////////////////////////////////////////////////// readonly property real minimumFontScaling: 0.25
readonly property real maximumFontScaling: 2.50
// GENERAL SETTINGS ///////////////////////////////////////////////////////
property int x: 100
property int y: 100
property int width: 1024
property int height: 768
property bool fullscreen: false property bool fullscreen: false
property bool showMenubar: true property bool showMenubar: true
property real windowOpacity: 1.0 property real windowOpacity: 1.0
property real ambient_light: 0.2 property real ambientLight: 0.2
property real contrast: 0.85 property real contrast: 0.85
property real brightness: 0.5 property real brightness: 0.5
property bool show_terminal_size: true property bool showTerminalSize: true
property real windowScaling: 1.0
property real window_scaling: 1.0 property real fps: 24
onWindow_scalingChanged: handleFontChanged(); property bool verbose: false
property real fps: 0 onWindowScalingChanged: handleFontChanged();
function mix(c1, c2, alpha){
return Qt.rgba(c1.r * alpha + c2.r * (1-alpha),
c1.g * alpha + c2.g * (1-alpha),
c1.b * alpha + c2.b * (1-alpha),
c1.a * alpha + c2.a * (1-alpha))
}
function strToColor(s){
var r = parseInt(s.substring(1,3), 16) / 256;
var g = parseInt(s.substring(3,5), 16) / 256;
var b = parseInt(s.substring(5,7), 16) / 256;
return Qt.rgba(r, g, b, 1.0);
}
// PROFILE SETTINGS /////////////////////////////////////////////////////// // PROFILE SETTINGS ///////////////////////////////////////////////////////
property string _background_color: "#000000" property bool useCustomCommand: false
property string _font_color: "#ff8100" property string customCommand: ""
property string saturated_color: mix(strToColor("#FFFFFF"), strToColor(_font_color), saturation_color * 0.5)
property color font_color: mix(strToColor(saturated_color), strToColor(_background_color), 0.7 + (contrast * 0.3))
property color background_color: mix(strToColor(_background_color), strToColor(saturated_color), 0.7 + (contrast * 0.3))
property real noise_strength: 0.1 property string _backgroundColor: "#000000"
property real screen_distortion: 0.1 property string _fontColor: "#ff8100"
property real glowing_line_strength: 0.2 property string saturatedColor: Utils.mix(Utils.strToColor("#FFFFFF"), Utils.strToColor(_fontColor), saturationColor * 0.5)
property real motion_blur: 0.40 property color fontColor: Utils.mix(Utils.strToColor(saturatedColor), Utils.strToColor(_backgroundColor), 0.7 + (contrast * 0.3))
property real bloom_strength: 0.65 property color backgroundColor: Utils.mix(Utils.strToColor(_backgroundColor), Utils.strToColor(saturatedColor), 0.7 + (contrast * 0.3))
property real bloom_quality: 1.0 property real staticNoise: 0.1
property real screenCurvature: 0.1
property real glowingLine: 0.2
property real burnIn: 0.40
property real bloom: 0.65
property real chroma_color: 0.0 property real bloomQuality: 0.5
property real saturation_color: 0.0 property real burnInQuality: 0.5
property real chromaColor: 0.0
property real saturationColor: 0.0
property real jitter: 0.18 property real jitter: 0.18
property real horizontal_sincronization: 0.08 property real horizontalSync: 0.08
property real brightness_flickering: 0.1 property real flickering: 0.1
property real rgb_shift: 0.0 property real rbgShift: 0.0
readonly property int no_rasterization: 0 readonly property int no_rasterization: 0
readonly property int scanline_rasterization: 1 readonly property int scanline_rasterization: 1
@@ -87,28 +90,21 @@ Item{
property int rasterization: no_rasterization property int rasterization: no_rasterization
property int scanline_quality: 3
onScanline_qualityChanged: handleFontChanged();
ListModel{
id: framelist
ListElement{text: "No frame"; source: "./frames/NoFrame.qml"; reflections: false}
ListElement{text: "Simple white frame"; source: "./frames/WhiteSimpleFrame.qml"; reflections: true}
ListElement{text: "Rough black frame"; source: "./frames/BlackRoughFrame.qml"; reflections: true}
}
property string frame_source: frames_list.get(frames_index).source
property int frames_index: 1
property var frames_list: framelist
// FONTS ////////////////////////////////////////////////////////////////// // FONTS //////////////////////////////////////////////////////////////////
signal terminalFontChanged(string fontSource, int pixelSize, int lineSpacing, real screenScaling) property real fontScaling: 1.0
property real fontWidth: 1.0
Loader{ property bool lowResolutionFont: false
id: fontManager
property var fontNames: ["TERMINUS_SCALED", "COMMODORE_PET", "COMMODORE_PET"]
property var fontlist: fontManager.item.fontlist
signal terminalFontChanged(string fontSource, int pixelSize, int lineSpacing, real screenScaling, real fontWidth)
signal initializedSettings()
property Loader fontManager: Loader{
states: [ states: [
State { when: rasterization == no_rasterization State { when: rasterization == no_rasterization
PropertyChanges {target: fontManager; source: "Fonts.qml" } }, PropertyChanges {target: fontManager; source: "Fonts.qml" } },
@@ -121,95 +117,152 @@ Item{
onLoaded: handleFontChanged() onLoaded: handleFontChanged()
} }
property real fontScaling: 1.0
onFontScalingChanged: handleFontChanged(); onFontScalingChanged: handleFontChanged();
onFontWidthChanged: handleFontChanged();
function getIndexByName(name) {
for (var i = 0; i < fontlist.count; i++) {
if (name === fontlist.get(i).name)
return i;
}
return 0; // If the font is not available default to 0.
}
function incrementScaling(){ function incrementScaling(){
fontScaling = Math.min(fontScaling + 0.05, 2.50); fontScaling = Math.min(fontScaling + 0.05, maximumFontScaling);
handleFontChanged(); handleFontChanged();
} }
function decrementScaling(){ function decrementScaling(){
fontScaling = Math.max(fontScaling - 0.05, 0.50); fontScaling = Math.max(fontScaling - 0.05, minimumFontScaling);
handleFontChanged(); handleFontChanged();
} }
property real fontWidth: 1.0
onFontWidthChanged: handleFontChanged();
property var fontIndexes: [0,0,0]
property var fontlist: fontManager.item.fontlist
function handleFontChanged(){ function handleFontChanged(){
if (!fontManager.item) return; if (!fontManager.item) return;
fontManager.item.selectedFontIndex = fontIndexes[rasterization];
fontManager.item.scaling = fontScaling * window_scaling; var index = getIndexByName(fontNames[rasterization]);
if (index === undefined) return;
fontManager.item.selectedFontIndex = index;
fontManager.item.scaling = fontScaling * windowScaling;
var fontSource = fontManager.item.source; var fontSource = fontManager.item.source;
var pixelSize = fontManager.item.pixelSize; var pixelSize = fontManager.item.pixelSize;
var lineSpacing = fontManager.item.lineSpacing; var lineSpacing = fontManager.item.lineSpacing;
var screenScaling = fontManager.item.screenScaling; var screenScaling = fontManager.item.screenScaling;
var fontWidth = fontManager.item.defaultFontWidth * appSettings.fontWidth;
terminalFontChanged(fontSource, pixelSize, lineSpacing, screenScaling); lowResolutionFont = fontManager.item.lowResolutionFont;
terminalFontChanged(fontSource, pixelSize, lineSpacing, screenScaling, fontWidth);
} }
// FRAMES ///////////////////////////////////////////////////////////////// // FRAMES /////////////////////////////////////////////////////////////////
property bool _frameReflections: true property ListModel framesList: ListModel{
property bool reflectionsAllowed: framelist.get(frames_index).reflections ListElement{
name: "NO_FRAME"
text: "No frame"
source: ""
reflections: false
}
ListElement{
name: "SIMPLE_WHITE_FRAME"
text: "Simple white frame"
source: "./frames/WhiteSimpleFrame.qml"
reflections: true
}
ListElement{
name: "ROUGH_BLACK_FRAME"
text: "Rough black frame"
source: "./frames/BlackRoughFrame.qml"
reflections: true
}
}
function getFrameIndexByName(name) {
for (var i = 0; i < framesList.count; i++) {
if (name === framesList.get(i).name)
return i;
}
return 0; // If the frame is not available default to 0.
}
property string frameSource: "./frames/WhiteSimpleFrame.qml"
property string frameName: "SIMPLE_WHITE_FRAME"
property bool _frameReflections: false
property bool reflectionsAllowed: true
property bool frameReflections: _frameReflections && reflectionsAllowed property bool frameReflections: _frameReflections && reflectionsAllowed
property alias profiles_list: profileslist onFrameNameChanged: {
property int profiles_index: 0 var index = getFrameIndexByName(frameName);
frameSource = framesList.get(index).source;
reflectionsAllowed = framesList.get(index).reflections;
}
// DB STORAGE ///////////////////////////////////////////////////////////// // DB STORAGE /////////////////////////////////////////////////////////////
Storage{id: storage} property Storage storage: Storage{ }
function stringify(obj) {
var replacer = function(key, val) {
return val.toFixed ? Number(val.toFixed(4)) : val;
}
return JSON.stringify(obj, replacer, 2);
}
function composeSettingsString(){ function composeSettingsString(){
var settings = { var settings = {
fps: fps, fps: fps,
window_scaling: window_scaling, x: x,
show_terminal_size: show_terminal_size, y: y,
width: width,
height: height,
windowScaling: windowScaling,
showTerminalSize: showTerminalSize,
fontScaling: fontScaling, fontScaling: fontScaling,
fontIndexes: fontIndexes, fontNames: fontNames,
frameReflections: _frameReflections, frameReflections: _frameReflections,
showMenubar: showMenubar, showMenubar: showMenubar,
scanline_quality: scanline_quality, bloomQuality: bloomQuality,
bloom_quality: bloom_quality burnInQuality: burnInQuality
} }
return JSON.stringify(settings); return stringify(settings);
} }
function composeProfileObject(){ function composeProfileObject(){
var profile = { var settings = {
background_color: _background_color, backgroundColor: _backgroundColor,
font_color: _font_color, fontColor: _fontColor,
brightness_flickering: brightness_flickering, flickering: flickering,
horizontal_sincronization: horizontal_sincronization, horizontalSync: horizontalSync,
noise_strength: noise_strength, staticNoise: staticNoise,
chroma_color: chroma_color, chromaColor: chromaColor,
saturation_color: saturation_color, saturationColor: saturationColor,
screen_distortion: screen_distortion, screenCurvature: screenCurvature,
glowing_line_strength: glowing_line_strength, glowingLine: glowingLine,
frames_index: frames_index, frameName: frameName,
motion_blur: motion_blur, burnIn: burnIn,
bloom_strength: bloom_strength, bloom: bloom,
rasterization: rasterization, rasterization: rasterization,
jitter: jitter, jitter: jitter,
rgb_shift: rgb_shift, rbgShift: rbgShift,
brightness: brightness, brightness: brightness,
contrast: contrast, contrast: contrast,
ambient_light: ambient_light, ambientLight: ambientLight,
windowOpacity: windowOpacity, windowOpacity: windowOpacity,
fontIndex: fontIndexes[rasterization], fontName: fontNames[rasterization],
fontWidth: fontWidth fontWidth: fontWidth,
useCustomCommand: useCustomCommand,
customCommand: customCommand
} }
return profile; return settings;
} }
function composeProfileString() { function composeProfileString() {
return JSON.stringify(composeProfileObject()); return stringify(composeProfileObject());
} }
function loadSettings(){ function loadSettings(){
@@ -222,6 +275,7 @@ Item{
loadSettingsString(settingsString); loadSettingsString(settingsString);
loadProfileString(profileString); loadProfileString(profileString);
if (verbose)
console.log("Loading settings: " + settingsString + profileString); console.log("Loading settings: " + settingsString + profileString);
} }
@@ -232,61 +286,73 @@ Item{
storage.setSetting("_CURRENT_SETTINGS", settingsString); storage.setSetting("_CURRENT_SETTINGS", settingsString);
storage.setSetting("_CURRENT_PROFILE", profileString); storage.setSetting("_CURRENT_PROFILE", profileString);
if (verbose) {
console.log("Storing settings: " + settingsString); console.log("Storing settings: " + settingsString);
console.log("Storing profile: " + profileString); console.log("Storing profile: " + profileString);
} }
}
function loadSettingsString(settingsString){ function loadSettingsString(settingsString){
var settings = JSON.parse(settingsString); var settings = JSON.parse(settingsString);
show_terminal_size = settings.show_terminal_size !== undefined ? settings.show_terminal_size : show_terminal_size showTerminalSize = settings.showTerminalSize !== undefined ? settings.showTerminalSize : showTerminalSize
fps = settings.fps !== undefined ? settings.fps: fps fps = settings.fps !== undefined ? settings.fps: fps
window_scaling = settings.window_scaling !== undefined ? settings.window_scaling : window_scaling windowScaling = settings.windowScaling !== undefined ? settings.windowScaling : windowScaling
fontIndexes = settings.fontIndexes !== undefined ? settings.fontIndexes : fontIndexes x = settings.x !== undefined ? settings.x : x
y = settings.y !== undefined ? settings.y : y
width = settings.width !== undefined ? settings.width : width
height = settings.height !== undefined ? settings.height : height
fontNames = settings.fontNames !== undefined ? settings.fontNames : fontNames
fontScaling = settings.fontScaling !== undefined ? settings.fontScaling : fontScaling fontScaling = settings.fontScaling !== undefined ? settings.fontScaling : fontScaling
_frameReflections = settings.frameReflections !== undefined ? settings.frameReflections : _frameReflections; _frameReflections = settings.frameReflections !== undefined ? settings.frameReflections : _frameReflections;
showMenubar = settings.showMenubar !== undefined ? settings.showMenubar : showMenubar; showMenubar = settings.showMenubar !== undefined ? settings.showMenubar : showMenubar;
scanline_quality = settings.scanline_quality !== undefined ? settings.scanline_quality : scanline_quality; bloomQuality = settings.bloomQuality !== undefined ? settings.bloomQuality : bloomQuality;
bloom_quality = settings.bloom_quality !== undefined ? settings.bloom_quality : bloom_quality; burnInQuality = settings.burnInQuality !== undefined ? settings.burnInQuality : burnInQuality;
} }
function loadProfileString(profileString){ function loadProfileString(profileString){
var settings = JSON.parse(profileString); var settings = JSON.parse(profileString);
_background_color = settings.background_color !== undefined ? settings.background_color : _background_color; _backgroundColor = settings.backgroundColor !== undefined ? settings.backgroundColor : _backgroundColor;
_font_color = settings.font_color !== undefined ? settings.font_color : _font_color; _fontColor = settings.fontColor !== undefined ? settings.fontColor : _fontColor;
horizontal_sincronization = settings.horizontal_sincronization !== undefined ? settings.horizontal_sincronization : horizontal_sincronization horizontalSync = settings.horizontalSync !== undefined ? settings.horizontalSync : horizontalSync
brightness_flickering = settings.brightness_flickering !== undefined ? settings.brightness_flickering : brightness_flickering; flickering = settings.flickering !== undefined ? settings.flickering : flickering;
noise_strength = settings.noise_strength !== undefined ? settings.noise_strength : noise_strength; staticNoise = settings.staticNoise !== undefined ? settings.staticNoise : staticNoise;
chroma_color = settings.chroma_color !== undefined ? settings.chroma_color : chroma_color; chromaColor = settings.chromaColor !== undefined ? settings.chromaColor : chromaColor;
saturation_color = settings.saturation_color !== undefined ? settings.saturation_color : saturation_color; saturationColor = settings.saturationColor !== undefined ? settings.saturationColor : saturationColor;
screen_distortion = settings.screen_distortion !== undefined ? settings.screen_distortion : screen_distortion; screenCurvature = settings.screenCurvature !== undefined ? settings.screenCurvature : screenCurvature;
glowing_line_strength = settings.glowing_line_strength !== undefined ? settings.glowing_line_strength : glowing_line_strength; glowingLine = settings.glowingLine !== undefined ? settings.glowingLine : glowingLine;
motion_blur = settings.motion_blur !== undefined ? settings.motion_blur : motion_blur burnIn = settings.burnIn !== undefined ? settings.burnIn : burnIn
bloom_strength = settings.bloom_strength !== undefined ? settings.bloom_strength : bloom_strength bloom = settings.bloom !== undefined ? settings.bloom : bloom
frames_index = settings.frames_index !== undefined ? settings.frames_index : frames_index; frameName = settings.frameName !== undefined ? settings.frameName : frameName;
rasterization = settings.rasterization !== undefined ? settings.rasterization : rasterization; rasterization = settings.rasterization !== undefined ? settings.rasterization : rasterization;
jitter = settings.jitter !== undefined ? settings.jitter : jitter; jitter = settings.jitter !== undefined ? settings.jitter : jitter;
rgb_shift = settings.rgb_shift !== undefined ? settings.rgb_shift : rgb_shift; rbgShift = settings.rbgShift !== undefined ? settings.rbgShift : rbgShift;
ambient_light = settings.ambient_light !== undefined ? settings.ambient_light : ambient_light; ambientLight = settings.ambientLight !== undefined ? settings.ambientLight : ambientLight;
contrast = settings.contrast !== undefined ? settings.contrast : contrast; contrast = settings.contrast !== undefined ? settings.contrast : contrast;
brightness = settings.brightness !== undefined ? settings.brightness : brightness; brightness = settings.brightness !== undefined ? settings.brightness : brightness;
windowOpacity = settings.windowOpacity !== undefined ? settings.windowOpacity : windowOpacity; windowOpacity = settings.windowOpacity !== undefined ? settings.windowOpacity : windowOpacity;
fontIndexes[rasterization] = settings.fontIndex !== undefined ? settings.fontIndex : fontIndexes[rasterization]; fontNames[rasterization] = settings.fontName !== undefined ? settings.fontName : fontNames[rasterization];
fontWidth = settings.fontWidth !== undefined ? settings.fontWidth : fontWidth; fontWidth = settings.fontWidth !== undefined ? settings.fontWidth : fontWidth;
useCustomCommand = settings.useCustomCommand !== undefined ? settings.useCustomCommand : useCustomCommand
customCommand = settings.customCommand !== undefined ? settings.customCommand : customCommand
handleFontChanged();
} }
function storeCustomProfiles(){ function storeCustomProfiles(){
@@ -303,89 +369,86 @@ Item{
var customProfiles = JSON.parse(customProfilesString); var customProfiles = JSON.parse(customProfilesString);
for (var i=0; i<customProfiles.length; i++) { for (var i=0; i<customProfiles.length; i++) {
var profile = customProfiles[i]; var profile = customProfiles[i];
console.log("Loading custom profile: " + JSON.stringify(profile));
profiles_list.append(profile); if (verbose)
console.log("Loading custom profile: " + stringify(profile));
profilesList.append(profile);
} }
} }
function composeCustomProfilesString(){ function composeCustomProfilesString(){
var customProfiles = [] var customProfiles = []
for(var i=0; i<profileslist.count; i++){ for(var i=0; i<profilesList.count; i++){
var profile = profileslist.get(i); var profile = profilesList.get(i);
if(profile.builtin) continue; if(profile.builtin) continue;
customProfiles.push({text: profile.text, obj_string: profile.obj_string, builtin: false}) customProfiles.push({text: profile.text, obj_string: profile.obj_string, builtin: false})
} }
return JSON.stringify(customProfiles); return stringify(customProfiles);
}
function loadCurrentProfile(){
loadProfile(profiles_index);
} }
function loadProfile(index){ function loadProfile(index){
var profile = profileslist.get(index); var profile = profilesList.get(index);
loadProfileString(profile.obj_string); loadProfileString(profile.obj_string);
} }
function addNewCustomProfile(name){ function appendCustomProfile(name, profileString) {
var profileString = composeProfileString(); profilesList.append({text: name, obj_string: profileString, builtin: false});
profileslist.append({text: name, obj_string: profileString, builtin: false});
} }
// PROFILES /////////////////////////////////////////////////////////////// // PROFILES ///////////////////////////////////////////////////////////////
ListModel{ property ListModel profilesList: ListModel{
id: profileslist
ListElement{ ListElement{
text: "Default Amber" text: "Default Amber"
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.65,"brightness":0.5,"brightness_flickering":0.1,"contrast":0.85,"fontIndex":0,"font_color":"#ff8100","frames_index":1,"glowing_line_strength":0.2,"horizontal_sincronization":0.08,"jitter":0.18,"motion_blur":0.4,"noise_strength":0.1,"rasterization":0,"screen_distortion":0.1,"windowOpacity":1,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}' obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0.65,"brightness":0.5,"flickering":0.1,"contrast":0.85,"fontName":"TERMINUS_SCALED","fontColor":"#ff8100","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0.2,"horizontalSync":0.16,"jitter":0.18,"burnIn":0.4,"staticNoise":0.1,"rasterization":0,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
builtin: true builtin: true
} }
ListElement{ ListElement{
text: "Default Green" text: "Default Green"
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.4,"brightness":0.5,"brightness_flickering":0.1,"contrast":0.85,"fontIndex":0,"font_color":"#0ccc68","frames_index":1,"glowing_line_strength":0.2,"horizontal_sincronization":0.08,"jitter":0.18,"motion_blur":0.45,"noise_strength":0.1,"rasterization":0,"screen_distortion":0.1,"windowOpacity":1,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}' obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0.4,"brightness":0.5,"flickering":0.1,"contrast":0.85,"fontName":"TERMINUS_SCALED","fontColor":"#0ccc68","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0.2,"horizontalSync":0.16,"jitter":0.18,"burnIn":0.45,"staticNoise":0.1,"rasterization":0,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
builtin: true builtin: true
} }
ListElement{ ListElement{
text: "Default Scanlines" text: "Default Scanlines"
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.4,"brightness":0.5,"brightness_flickering":0.1,"contrast":0.85,"fontIndex":0,"font_color":"#00ff5b","frames_index":1,"glowing_line_strength":0.2,"horizontal_sincronization":0.07,"jitter":0.11,"motion_blur":0.4,"noise_strength":0.05,"rasterization":1,"screen_distortion":0.1,"windowOpacity":1,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}' obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0.4,"brightness":0.5,"flickering":0.1,"contrast":0.85,"fontName":"COMMODORE_PET","fontColor":"#00ff5b","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0.2,"horizontalSync":0.14,"jitter":0.11,"burnIn":0.4,"staticNoise":0.05,"rasterization":1,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
builtin: true builtin: true
} }
ListElement{ ListElement{
text: "Default Pixelated" text: "Default Pixelated"
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.4,"brightness":0.5,"brightness_flickering":0.1,"contrast":0.85,"fontIndex":0,"font_color":"#ff8100","frames_index":1,"glowing_line_strength":0.2,"horizontal_sincronization":0.1,"jitter":0,"motion_blur":0.45,"noise_strength":0.14,"rasterization":2,"screen_distortion":0.05,"windowOpacity":1,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}' obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0,"brightness":0.5,"flickering":0.2,"contrast":0.85,"fontName":"COMMODORE_PET","fontColor":"#ffffff","frameName":"ROUGH_BLACK_FRAME","glowingLine":0.2,"horizontalSync":0.2,"jitter":0,"burnIn":0.45,"staticNoise":0.19,"rasterization":2,"screenCurvature":0.05,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
builtin: true builtin: true
} }
ListElement{ ListElement{
text: "Apple ][" text: "Apple ]["
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.5,"brightness":0.5,"brightness_flickering":0.2,"contrast":0.85,"fontIndex":2,"font_color":"#2fff91","frames_index":1,"glowing_line_strength":0.22,"horizontal_sincronization":0.08,"jitter":0.1,"motion_blur":0.65,"noise_strength":0.08,"rasterization":1,"screen_distortion":0.18,"windowOpacity":1,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}' obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0.5,"brightness":0.5,"flickering":0.2,"contrast":0.85,"fontName":"APPLE_II","fontColor":"#2fff91","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0.22,"horizontalSync":0.16,"jitter":0.1,"burnIn":0.65,"staticNoise":0.08,"rasterization":1,"screenCurvature":0.18,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
builtin: true builtin: true
} }
ListElement{ ListElement{
text: "Vintage" text: "Vintage"
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.4,"brightness":0.5,"brightness_flickering":0.54,"contrast":0.85,"fontIndex":0,"font_color":"#00ff3e","frames_index":2,"glowing_line_strength":0.3,"horizontal_sincronization":0.2,"jitter":0.4,"motion_blur":0.75,"noise_strength":0.2,"rasterization":1,"screen_distortion":0.1,"windowOpacity":1,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}' obj_string: '{"ambientLight":0.5,"backgroundColor":"#000000","bloom":0.4,"brightness":0.5,"flickering":0.9,"contrast":0.80,"fontName":"COMMODORE_PET","fontColor":"#00ff3e","frameName":"ROUGH_BLACK_FRAME","glowingLine":0.3,"horizontalSync":0.42,"jitter":0.4,"burnIn":0.75,"staticNoise":0.2,"rasterization":1,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
builtin: true builtin: true
} }
ListElement{ ListElement{
text: "IBM Dos" text: "IBM Dos"
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.4,"brightness":0.5,"brightness_flickering":0.07,"contrast":0.85,"fontIndex":7,"font_color":"#ffffff","frames_index":1,"glowing_line_strength":0.13,"horizontal_sincronization":0,"jitter":0.08,"motion_blur":0.3,"noise_strength":0.03,"rasterization":0,"screen_distortion":0.1,"windowOpacity":1,"chroma_color":1,"saturation_color":0,"rgb_shift":0.5,"fontWidth":1.0}' obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0.4,"brightness":0.5,"flickering":0.07,"contrast":0.85,"fontName":"IBM_DOS","fontColor":"#ffffff","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0.13,"horizontalSync":0,"jitter":0.16,"burnIn":0.3,"staticNoise":0.03,"rasterization":0,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":1,"saturationColor":0,"rbgShift":0.35,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
builtin: true builtin: true
} }
ListElement{ ListElement{
text: "IBM 3278" text: "IBM 3278"
obj_string: '{"ambient_light":0.1,"background_color":"#000000","bloom_strength":0.15,"brightness":0.5,"brightness_flickering":0,"contrast":0.95,"fontIndex":8,"font_color":"#0ccc68","frames_index":1,"glowing_line_strength":0,"horizontal_sincronization":0,"jitter":0,"motion_blur":0.6,"noise_strength":0,"rasterization":0,"screen_distortion":0.1,"windowOpacity":1,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}' obj_string: '{"ambientLight":0.1,"backgroundColor":"#000000","bloom":0.15,"brightness":0.5,"flickering":0,"contrast":0.85,"fontName":"IBM_3278","fontColor":"#0ccc68","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0,"horizontalSync":0,"jitter":0,"burnIn":0.6,"staticNoise":0,"rasterization":0,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
builtin: true builtin: true
} }
ListElement{ ListElement{
text: "Transparent Green" text: "Transparent Green"
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.4549689440993788,"brightness":0.5,"brightness_flickering":0.20341614906832298,"contrast":0.85,"fontIndex":0,"font_color":"#0ccc68","frames_index":0,"glowing_line_strength":0.15993788819875776,"horizontal_sincronization":0.05045871559633028,"jitter":0.20341614906832298,"motion_blur":0.24999999999999997,"noise_strength":0.20031055900621117,"rasterization":0,"screen_distortion":0.05045871559633028,"windowOpacity":0.5956221198156681,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}' obj_string: '{"ambientLight":0.2,"backgroundColor":"#000000","bloom":0.45,"brightness":0.5,"flickering":0.20,"contrast":0.85,"fontName":"TERMINUS_SCALED","fontColor":"#0ccc68","frameName":"NO_FRAME","glowingLine":0.16,"horizontalSync":0.1,"jitter":0.20,"burnIn":0.25,"staticNoise":0.20,"rasterization":0,"screenCurvature":0.05,"windowOpacity":0.60,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
builtin: true builtin: true
} }
} }
function getProfileIndexByName(name) { function getProfileIndexByName(name) {
for (var i = 0; i < profileslist.count; i++) { for (var i = 0; i < profilesList.count; i++) {
if(profileslist.get(i).text === name) if(profilesList.get(i).text === name)
return i; return i;
} }
return -1; return -1;
@@ -394,6 +457,9 @@ Item{
Component.onCompleted: { Component.onCompleted: {
// Manage the arguments from the QML side. // Manage the arguments from the QML side.
var args = Qt.application.arguments; var args = Qt.application.arguments;
if (args.indexOf("--verbose") !== -1) {
verbose = true;
}
if (args.indexOf("--default-settings") === -1) { if (args.indexOf("--default-settings") === -1) {
loadSettings(); loadSettings();
} }
@@ -413,10 +479,19 @@ Item{
fullscreen = true; fullscreen = true;
showMenubar = false; showMenubar = false;
} }
initializedSettings();
} }
Component.onDestruction: { Component.onDestruction: {
storeSettings(); storeSettings();
storeCustomProfiles(); storeCustomProfiles();
//storage.dropSettings(); //DROPS THE SETTINGS!.. REMEMBER TO DISABLE ONCE ENABLED!! //storage.dropSettings(); //DROPS THE SETTINGS!.. REMEMBER TO DISABLE ONCE ENABLED!!
} }
// VARS ///////////////////////////////////////////////////////////////////
property Label _sampleLabel: Label {
text: "100%"
}
property real labelWidth: _sampleLabel.width
} }

View File

@@ -31,12 +31,12 @@ MenuBar {
title: qsTr("Profiles") title: qsTr("Profiles")
visible: defaultMenuBar.visible visible: defaultMenuBar.visible
Instantiator{ Instantiator{
model: shadersettings.profiles_list model: appSettings.profilesList
delegate: MenuItem { delegate: MenuItem {
text: model.text text: model.text
onTriggered: { onTriggered: {
shadersettings.loadProfileString(obj_string); appSettings.loadProfileString(obj_string);
shadersettings.handleFontChanged(); appSettings.handleFontChanged();
} }
} }
onObjectAdded: profilesMenu.insertItem(index, object) onObjectAdded: profilesMenu.insertItem(index, object)

View File

@@ -22,6 +22,8 @@ import QtQuick 2.2
import QtQuick.Controls 1.1 import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1 import QtQuick.Layouts 1.1
import "Components"
RowLayout { RowLayout {
property alias name: check.text property alias name: check.text
@@ -35,7 +37,6 @@ RowLayout {
id: setting_component id: setting_component
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
spacing: 25
onValueChanged: { onValueChanged: {
check.checked = !(value == 0); check.checked = !(value == 0);
@@ -45,7 +46,7 @@ RowLayout {
CheckBox{ CheckBox{
id: check id: check
implicitWidth: 150 implicitWidth: 160
onClicked: { onClicked: {
if(!checked){ if(!checked){
checked = false; checked = false;
@@ -66,16 +67,8 @@ RowLayout {
newValue(value); newValue(value);
} }
} }
Text{ SizedLabel {
id: textfield anchors { top: parent.top; bottom: parent.bottom }
property string unformattedText: Math.round(((value - min_value) / (max_value - min_value)) * 100) text: Math.round(((value - min_value) / (max_value - min_value)) * 100) + "%"
text: formatNumber(unformattedText)
}
function formatNumber(num) {
var n = "" + num;
while (n.length < 3) {
n = " " + n;
}
return n + "%";
} }
} }

View File

@@ -22,8 +22,10 @@ import QtQuick 2.2
import QtQuick.Dialogs 1.1 import QtQuick.Dialogs 1.1
Item { Item {
id: rootItem
signal colorSelected (color color) signal colorSelected (color color)
property color button_color property color color
property string name property string name
ColorDialog { ColorDialog {
@@ -33,13 +35,13 @@ Item {
visible: false visible: false
//This is a workaround to a Qt 5.2 bug. //This is a workaround to a Qt 5.2 bug.
onCurrentColorChanged: colorDialog.color = colorDialog.currentColor; onColorChanged: if (Qt.platform.os !== "osx") colorSelected(color)
onAccepted: colorSelected(color) onAccepted: if (Qt.platform.os === "osx") colorSelected(color)
} }
Rectangle{ Rectangle{
anchors.fill: parent anchors.fill: parent
radius: 10 radius: 10
color: button_color color: rootItem.color
border.color: "black" border.color: "black"
Glossy {} Glossy {}
Rectangle { Rectangle {
@@ -52,7 +54,7 @@ Item {
Text{ Text{
anchors.centerIn: parent anchors.centerIn: parent
z: parent.z + 1 z: parent.z + 1
text: name + ": " + button_color text: name + ": " + rootItem.color
} }
} }
MouseArea{ MouseArea{

View File

@@ -0,0 +1,35 @@
/*******************************************************************************
* 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.0
import QtQuick.Controls 1.0
// This component is simply a label with a predefined size.
// Used to improve alignment.
Item {
property alias text: textfield.text
width: appSettings.labelWidth
Label{
id: textfield
anchors { right: parent.right; verticalCenter: parent.verticalCenter }
}
}

View File

@@ -20,45 +20,80 @@
import QtQuick 2.2 import QtQuick 2.2
Item{ QtObject{
property int selectedFontIndex property int selectedFontIndex
property real scaling property real scaling
property alias fontlist: fontlist
property var _font: fontlist.get(selectedFontIndex) property var _font: fontlist.get(selectedFontIndex)
property var source: _font.source property var source: _font.source
property int pixelSize: _font.pixelSize property int pixelSize: _font.pixelSize
property int lineSpacing: _font.lineSpacing property int lineSpacing: _font.lineSpacing
property real screenScaling: scaling * _font.baseScaling property real screenScaling: scaling * _font.baseScaling
property real defaultFontWidth: fontlist.get(selectedFontIndex).fontWidth
property bool lowResolutionFont: true
ListModel{ property ListModel fontlist: ListModel{
id: fontlist
ListElement{ ListElement{
name: "COMMODORE_PET"
text: "Commodore PET (1977)" text: "Commodore PET (1977)"
source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf" source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
lineSpacing: 2 lineSpacing: 2
pixelSize: 8 pixelSize: 8
baseScaling: 4.0 baseScaling: 4.0
fontWidth: 0.8
} }
ListElement{ ListElement{
name: "PROGGY_TINY"
text: "Proggy Tiny (Modern)"
source: "fonts/modern-proggy-tiny/ProggyTiny.ttf"
lineSpacing: 1
pixelSize: 16
baseScaling: 4.0
fontWidth: 0.9
}
ListElement{
name: "TERMINUS_SCALED"
text: "Terminus (Modern)"
source: "fonts/modern-terminus/TerminusTTF-4.38.2.ttf"
lineSpacing: 1
pixelSize: 12
baseScaling: 3.0
fontWidth: 1.0
}
ListElement{
name: "PRO_FONT_SCALED"
text: "Pro Font (Modern)"
source: "fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf"
lineSpacing: 1
pixelSize: 12
baseScaling: 3.0
fontWidth: 1.0
}
ListElement{
name: "APPLE_II"
text: "Apple ][ (1977)" text: "Apple ][ (1977)"
source: "fonts/1977-apple2/PrintChar21.ttf" source: "fonts/1977-apple2/PrintChar21.ttf"
lineSpacing: 2 lineSpacing: 2
pixelSize: 8 pixelSize: 8
baseScaling: 4.0 baseScaling: 4.0
fontWidth: 0.9
} }
ListElement{ ListElement{
name: "ATARI_400"
text: "Atari 400-800 (1979)" text: "Atari 400-800 (1979)"
source: "fonts/1979-atari-400-800/ATARI400800_original.TTF" source: "fonts/1979-atari-400-800/ATARI400800_original.TTF"
lineSpacing: 3 lineSpacing: 3
pixelSize: 8 pixelSize: 8
baseScaling: 4.0 baseScaling: 4.0
fontWidth: 0.8
} }
ListElement{ ListElement{
name: "COMMODORE_64"
text: "Commodore 64 (1982)" text: "Commodore 64 (1982)"
source: "fonts/1982-commodore64/C64_User_Mono_v1.0-STYLE.ttf" source: "fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf"
lineSpacing: 3 lineSpacing: 3
pixelSize: 8 pixelSize: 8
baseScaling: 4.0 baseScaling: 4.0
fontWidth: 0.8
} }
} }
} }

View File

@@ -20,45 +20,80 @@
import QtQuick 2.2 import QtQuick 2.2
Item{ QtObject{
property int selectedFontIndex property int selectedFontIndex
property real scaling property real scaling
property alias fontlist: fontlist
property var _font: fontlist.get(selectedFontIndex) property var _font: fontlist.get(selectedFontIndex)
property var source: _font.source property var source: _font.source
property int pixelSize: _font.pixelSize property int pixelSize: _font.pixelSize
property int lineSpacing: _font.lineSpacing property int lineSpacing: _font.lineSpacing
property real screenScaling: scaling * _font.baseScaling property real screenScaling: scaling * _font.baseScaling
property real defaultFontWidth: fontlist.get(selectedFontIndex).fontWidth
property bool lowResolutionFont: true
ListModel{ property ListModel fontlist: ListModel{
id: fontlist
ListElement{ ListElement{
name: "COMMODORE_PET"
text: "Commodore PET (1977)" text: "Commodore PET (1977)"
source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf" source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
lineSpacing: 2 lineSpacing: 2
pixelSize: 8 pixelSize: 8
baseScaling: 4.0 baseScaling: 4.0
fontWidth: 0.7
} }
ListElement{ ListElement{
name: "PROGGY_TINY"
text: "Proggy Tiny (Modern)"
source: "fonts/modern-proggy-tiny/ProggyTiny.ttf"
lineSpacing: 1
pixelSize: 16
baseScaling: 4.0
fontWidth: 0.9
}
ListElement{
name: "TERMINUS_SCALED"
text: "Terminus (Modern)"
source: "fonts/modern-terminus/TerminusTTF-4.38.2.ttf"
lineSpacing: 1
pixelSize: 12
baseScaling: 3.0
fontWidth: 1.0
}
ListElement{
name: "PRO_FONT_SCALED"
text: "Pro Font (Modern)"
source: "fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf"
lineSpacing: 1
pixelSize: 12
baseScaling: 3.0
fontWidth: 1.0
}
ListElement{
name: "APPLE_II"
text: "Apple ][ (1977)" text: "Apple ][ (1977)"
source: "fonts/1977-apple2/PrintChar21.ttf" source: "fonts/1977-apple2/PrintChar21.ttf"
lineSpacing: 2 lineSpacing: 2
pixelSize: 8 pixelSize: 8
baseScaling: 4.0 baseScaling: 4.0
fontWidth: 0.8
} }
ListElement{ ListElement{
name: "ATARI_400"
text: "Atari 400-800 (1979)" text: "Atari 400-800 (1979)"
source: "fonts/1979-atari-400-800/ATARI400800_original.TTF" source: "fonts/1979-atari-400-800/ATARI400800_original.TTF"
lineSpacing: 3 lineSpacing: 3
pixelSize: 8 pixelSize: 8
baseScaling: 4.0 baseScaling: 4.0
fontWidth: 0.7
} }
ListElement{ ListElement{
name: "COMMODORE_64"
text: "Commodore 64 (1982)" text: "Commodore 64 (1982)"
source: "fonts/1982-commodore64/C64_User_Mono_v1.0-STYLE.ttf" source: "fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf"
lineSpacing: 3 lineSpacing: 3
pixelSize: 8 pixelSize: 8
baseScaling: 4.0 baseScaling: 4.0
fontWidth: 0.7
} }
} }
} }

View File

@@ -20,73 +20,189 @@
import QtQuick 2.2 import QtQuick 2.2
Item{ QtObject{
property int selectedFontIndex property int selectedFontIndex
property real scaling property real scaling
property alias fontlist: fontlist
property var source: fontlist.get(selectedFontIndex).source property var source: fontlist.get(selectedFontIndex).source
property var _font: fontlist.get(selectedFontIndex) property var _font: fontlist.get(selectedFontIndex)
property int pixelSize: _font.pixelSize * scaling property bool lowResolutionFont: _font.lowResolutionFont
property int lineSpacing: pixelSize * _font.lineSpacing
property real screenScaling: 1.0
//In this configuration lineSpacing is proportional to pixelSize. property int pixelSize: lowResolutionFont
? _font.pixelSize
: _font.pixelSize * scaling
ListModel{ property int lineSpacing: lowResolutionFont
id: fontlist ? _font.lineSpacing
: pixelSize * _font.lineSpacing
property real screenScaling: lowResolutionFont
? _font.baseScaling * scaling
: 1.0
property real defaultFontWidth: fontlist.get(selectedFontIndex).fontWidth
// There are two kind of fonts: low resolution and high resolution.
// Low resolution font sets the lowResolutionFont property to true.
// They are rendered at a fixed pixel size and the texture is upscaled
// to fill the screen (they are much faster to render).
// High resolution fonts are instead drawn on a texture which has the
// size of the screen, and the scaling directly controls their pixels size.
// Those are slower to render but are not pixelated.
property ListModel fontlist: ListModel{
ListElement{ ListElement{
name: "TERMINUS_SCALED"
text: "Terminus (Modern)" text: "Terminus (Modern)"
source: "fonts/modern-terminus/TerminusTTF-Bold-4.38.2.ttf" source: "fonts/modern-terminus/TerminusTTF-4.38.2.ttf"
lineSpacing: 0.2 lineSpacing: 1
pixelSize: 35 pixelSize: 12
baseScaling: 3.0
fontWidth: 1.0
lowResolutionFont: true
} }
ListElement{ ListElement{
name: "PRO_FONT_SCALED"
text: "Pro Font (Modern)"
source: "fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf"
lineSpacing: 1
pixelSize: 12
baseScaling: 3.0
fontWidth: 1.0
lowResolutionFont: true
}
ListElement{
name: "EXCELSIOR_SCALED"
text: "Fixedsys Excelsior (Modern)"
source: "fonts/modern-fixedsys-excelsior/FSEX301-L2.ttf"
lineSpacing: 0
pixelSize: 16
baseScaling: 2.4
fontWidth: 1.0
lowResolutionFont: true
}
ListElement{
name: "COMMODORE_PET_SCALED"
text: "Commodore PET (1977)" text: "Commodore PET (1977)"
source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf" source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
lineSpacing: 0.2 lineSpacing: 2
pixelSize: 24 pixelSize: 8
baseScaling: 3.5
fontWidth: 0.7
lowResolutionFont: true
} }
ListElement{ ListElement{
text: "Commodore PET 2Y (1977)" name: "PROGGY_TINY_SCALED"
source: "fonts/1977-commodore-pet/COMMODORE_PET_2y.ttf" text: "Proggy Tiny (Modern)"
lineSpacing: 0.2 source: "fonts/modern-proggy-tiny/ProggyTiny.ttf"
pixelSize: 32 lineSpacing: 1
pixelSize: 16
baseScaling: 3.0
fontWidth: 0.9
lowResolutionFont: true
} }
ListElement{ ListElement{
name: "APPLE_II_SCALED"
text: "Apple ][ (1977)" text: "Apple ][ (1977)"
source: "fonts/1977-apple2/PrintChar21.ttf" source: "fonts/1977-apple2/PrintChar21.ttf"
lineSpacing: 0.2 lineSpacing: 2
pixelSize: 24 pixelSize: 8
baseScaling: 3.5
fontWidth: 0.8
lowResolutionFont: true
} }
ListElement{ ListElement{
name: "ATARI_400_SCALED"
text: "Atari 400-800 (1979)" text: "Atari 400-800 (1979)"
source: "fonts/1979-atari-400-800/ATARI400800_original.TTF" source: "fonts/1979-atari-400-800/ATARI400800_original.TTF"
lineSpacing: 0.3 lineSpacing: 3
pixelSize: 24 pixelSize: 8
baseScaling: 3.5
fontWidth: 0.7
lowResolutionFont: true
} }
ListElement{ ListElement{
name: "COMMODORE_64_SCALED"
text: "Commodore 64 (1982)" text: "Commodore 64 (1982)"
source: "fonts/1982-commodore64/C64_User_Mono_v1.0-STYLE.ttf" source: "fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf"
lineSpacing: 0.3 lineSpacing: 3
pixelSize: 24 pixelSize: 8
baseScaling: 3.5
fontWidth: 0.7
lowResolutionFont: true
} }
ListElement{ ListElement{
name: "ATARI_ST_SCALED"
text: "Atari ST (1985)" text: "Atari ST (1985)"
source: "fonts/1985-atari-st/AtariST8x16SystemFont.ttf" source: "fonts/1985-atari-st/AtariST8x16SystemFont.ttf"
lineSpacing: 0.2 lineSpacing: 3
pixelSize: 32 pixelSize: 16
baseScaling: 2.0
fontWidth: 1.0
lowResolutionFont: true
} }
ListElement{ ListElement{
name: "IBM_DOS"
text: "IBM DOS (1985)" text: "IBM DOS (1985)"
source: "fonts/1985-ibm-pc-vga/Perfect DOS VGA 437.ttf" source: "fonts/1985-ibm-pc-vga/Perfect DOS VGA 437 Win.ttf"
lineSpacing: 0.2 lineSpacing: 3
pixelSize: 32 pixelSize: 16
baseScaling: 2.0
fontWidth: 1.0
lowResolutionFont: true
} }
ListElement{ ListElement{
text: "IBM 3278 (1971)" name: "HERMIT"
text: "HD: Hermit (Modern)"
source: "fonts/modern-hermit/Hermit-medium.otf"
lineSpacing: 0.05
pixelSize: 28
fontWidth: 1.0
lowResolutionFont: false
}
ListElement{
name: "TERMINUS"
text: "HD: Terminus (Modern)"
source: "fonts/modern-terminus/TerminusTTF-4.38.2.ttf"
lineSpacing: 0.1
pixelSize: 35
fontWidth: 1.0
lowResolutionFont: false
}
ListElement{
name: "PRO_FONT"
text: "HD: Pro Font (Modern)"
source: "fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf"
lineSpacing: 0.1
pixelSize: 35
fontWidth: 1.0
lowResolutionFont: false
}
ListElement{
name: "MONACO"
text: "HD: Monaco (Modern)"
source: "fonts/modern-monaco/monaco.ttf"
lineSpacing: 0.1
pixelSize: 30
fontWidth: 1.0
lowResolutionFont: false
}
ListElement{
name: "INCONSOLATA"
text: "HD: Inconsolata (Modern)"
source: "fonts/modern-inconsolata/Inconsolata.otf"
lineSpacing: 0.1
pixelSize: 35
fontWidth: 1.0
lowResolutionFont: false
}
ListElement{
name: "IBM_3278"
text: "HD: IBM 3278 (1971)"
source: "fonts/1971-ibm-3278/3270Medium.ttf" source: "fonts/1971-ibm-3278/3270Medium.ttf"
lineSpacing: 0.2 lineSpacing: 0.2
pixelSize: 32 pixelSize: 32
fontWidth: 1.0
lowResolutionFont: false
} }
} }
} }

View File

@@ -31,6 +31,7 @@ Window{
modality: Qt.ApplicationModal modality: Qt.ApplicationModal
title: qsTr("Save new profile") title: qsTr("Save new profile")
property alias profileName: namefield.text
signal nameSelected(string name) signal nameSelected(string name)
MessageDialog { MessageDialog {
@@ -45,15 +46,9 @@ Window{
} }
function validateName(name){ function validateName(name){
var profile_list = shadersettings.profiles_list; var profile_list = appSettings.profilesList;
if (name === "") if (name === "")
return 1; return 1;
for (var i = 0; i < profile_list.count; i++){
if(profile_list.get(i).text === name)
return 2;
}
return 0; return 0;
} }
@@ -82,9 +77,6 @@ Window{
case 1: case 1:
errorDialog.showError(qsTr("The name you inserted is empty. Please choose a different one.")); errorDialog.showError(qsTr("The name you inserted is empty. Please choose a different one."));
break; break;
case 2:
errorDialog.showError(qsTr("The name you inserted already exists. Please choose a different one."));
break;
default: default:
nameSelected(name); nameSelected(name);
close(); close();

View File

@@ -19,67 +19,55 @@
*******************************************************************************/ *******************************************************************************/
import QtQuick 2.2 import QtQuick 2.2
import QtGraphicalEffects 1.0
import QtQuick.Controls 1.1 import QtQuick.Controls 1.1
import org.crt.konsole 0.1 import QMLTermWidget 1.0
import "utils.js" as Utils
Item{ Item{
id: terminalContainer id: terminalContainer
//Frame displacement properties. This makes the terminal the same size of the texture. property size virtualResolution: Qt.size(kterminal.width, kterminal.height)
property real dtop: frame.item.displacementTop property alias mainTerminal: kterminal
property real dleft:frame.item.displacementLeft property ShaderEffectSource mainSource: kterminalSource
property real dright: frame.item.displacementRight property ShaderEffectSource blurredSource: blurredSourceLoader.item
property real dbottom: frame.item.displacementBottom
anchors.leftMargin: dleft
anchors.rightMargin: dright
anchors.topMargin: dtop
anchors.bottomMargin: dbottom
property variant theSource: mBlur !== 0 ? blurredSourceLoader.item : kterminalSource
property variant bloomSource: bloomSourceLoader.item
property variant rasterizationSource: rasterizationEffectSource
property variant staticNoiseSource: staticNoiseSource
property real fontWidth: 1.0
property real screenScaling: 1.0
property real scaleTexture: 1.0
property alias title: ksession.title
property alias kterminal: kterminal property alias kterminal: kterminal
signal sizeChanged anchors.leftMargin: frame.displacementLeft * appSettings.windowScaling
onWidthChanged: sizeChanged() anchors.rightMargin: frame.displacementRight * appSettings.windowScaling
onHeightChanged: sizeChanged() anchors.topMargin: frame.displacementTop * appSettings.windowScaling
anchors.bottomMargin: frame.displacementBottom * appSettings.windowScaling
//The blur effect has to take into account the framerate //Parameters for the burnIn effect.
property int fps: shadersettings.fps !== 0 ? shadersettings.fps : 60 property real burnIn: appSettings.burnIn
property real fpsAttenuation: Math.sqrt(60 / fps) property real fps: appSettings.fps !== 0 ? appSettings.fps : 60
property real mBlur: shadersettings.motion_blur property real burnInFadeTime: Utils.lint(_minBurnInFadeTime, _maxBurnInFadeTime, burnIn)
property real motionBlurCoefficient: (_maxBlurCoefficient * mBlur + _minBlurCoefficient * (1 - mBlur)) property real motionBlurCoefficient: 1.0 / (fps * burnInFadeTime)
property real _minBlurCoefficient: 0.70 property real _minBurnInFadeTime: 0.16
property real _maxBlurCoefficient: 0.90 property real _maxBurnInFadeTime: 1.6
property real mBloom: shadersettings.bloom_strength
property int mScanlines: shadersettings.rasterization
onMScanlinesChanged: restartBlurredSource()
property size terminalSize: kterminal.terminalSize property size terminalSize: kterminal.terminalSize
property size paintedTextSize property size fontMetrics: kterminal.fontMetrics
onMBlurChanged: restartBlurredSource() // Manage copy and paste
Connections{
function restartBlurredSource(){ target: copyAction
if(!blurredSourceLoader.item) return; onTriggered: kterminal.copyClipboard();
blurredSourceLoader.item.restartBlurSource();
} }
function pasteClipboard(){ Connections{
kterminal.pasteClipboard(); target: pasteAction
} onTriggered: kterminal.pasteClipboard()
function copyClipboard(){
kterminal.copyClipboard();
} }
//When settings are updated sources need to be redrawn. //When settings are updated sources need to be redrawn.
Connections{ Connections{
target: shadersettings target: appSettings
onFontScalingChanged: terminalContainer.updateSources(); onFontScalingChanged: terminalContainer.updateSources();
onFontWidthChanged: terminalContainer.updateSources(); onFontWidthChanged: terminalContainer.updateSources();
} }
@@ -90,107 +78,142 @@ Item{
} }
function updateSources() { function updateSources() {
kterminal.update(); kterminal.update();
kterminal.updateImage();
} }
QMLTermWidget {
KTerminal {
id: kterminal id: kterminal
width: parent.width width: Math.floor(parent.width / (screenScaling * fontWidth))
height: parent.height height: Math.floor(parent.height / screenScaling)
colorScheme: "cool-retro-term" colorScheme: "cool-retro-term"
smooth: false smooth: !appSettings.lowResolutionFont
enableBold: false
fullCursorHeight: true
session: KSession { session: QMLTermSession {
id: ksession id: ksession
kbScheme: "xterm"
onFinished: { onFinished: {
Qt.quit() Qt.quit()
} }
} }
FontLoader{ id: fontLoader } QMLTermScrollbar {
Text{id: fontMetrics; text: "B"; visible: false} id: kterminalScrollbar
terminal: kterminal
anchors.margins: width * 0.5
width: terminal.fontMetrics.width * 0.75
Rectangle {
anchors.fill: parent
anchors.topMargin: 1
anchors.bottomMargin: 1
color: "white"
radius: width * 0.25
opacity: 0.7
}
}
function handleFontChange(fontSource, pixelSize, lineSpacing, screenScaling){ FontLoader{ id: fontLoader }
function handleFontChange(fontSource, pixelSize, lineSpacing, screenScaling, fontWidth){
fontLoader.source = fontSource; fontLoader.source = fontSource;
kterminal.antialiasText = !appSettings.lowResolutionFont;
font.pixelSize = pixelSize; font.pixelSize = pixelSize;
font.family = fontLoader.name; font.family = fontLoader.name;
var fontWidth = 1.0 / shadersettings.fontWidth; terminalContainer.fontWidth = fontWidth;
terminalContainer.screenScaling = screenScaling;
scaleTexture = Math.max(1.0, Math.floor(screenScaling * appSettings.windowScaling));
width = Qt.binding(function() {return Math.floor(fontWidth * terminalContainer.width / screenScaling);}); kterminal.lineSpacing = lineSpacing;
height = Qt.binding(function() {return Math.floor(terminalContainer.height / screenScaling);});
var scaleTexture = Math.max(Math.round(screenScaling / shadersettings.scanline_quality), 1.0);
kterminalSource.textureSize = Qt.binding(function () {
return Qt.size(kterminal.width * scaleTexture, kterminal.height * scaleTexture);
});
setLineSpacing(lineSpacing);
update();
restartBlurredSource();
} }
Component.onCompleted: { function startSession() {
shadersettings.terminalFontChanged.connect(handleFontChange); appSettings.initializedSettings.disconnect(startSession);
// Retrieve the variable set in main.cpp if arguments are passed. // Retrieve the variable set in main.cpp if arguments are passed.
if (shellProgram) if (defaultCmd) {
ksession.setShellProgram(shellProgram); ksession.setShellProgram(defaultCmd);
ksession.setArgs(defaultCmdArgs);
} else if (appSettings.useCustomCommand) {
var args = Utils.tokenizeCommandLine(appSettings.customCommand);
ksession.setShellProgram(args[0]);
ksession.setArgs(args.slice(1));
} else if (!defaultCmd && Qt.platform.os === "osx") {
// OSX Requires the following default parameters for auto login.
ksession.setArgs(["-i", "-l"]);
}
if (workdir) if (workdir)
ksession.initialWorkingDirectory = workdir; ksession.initialWorkingDirectory = workdir;
ksession.startShellProgram(); ksession.startShellProgram();
forceActiveFocus(); forceActiveFocus();
} }
Component.onCompleted: {
appSettings.terminalFontChanged.connect(handleFontChange);
appSettings.initializedSettings.connect(startSession);
} }
}
Component {
id: linuxContextMenu
Menu{ Menu{
id: contextmenu id: contextmenu
MenuItem{action: copyAction} MenuItem{action: copyAction}
MenuItem{action: pasteAction} MenuItem{action: pasteAction}
MenuSeparator{visible: Qt.platform.os !== "osx"} MenuSeparator{}
MenuItem{action: fullscreenAction; visible: Qt.platform.os !== "osx"} MenuItem{action: fullscreenAction}
MenuItem{action: showMenubarAction; visible: Qt.platform.os !== "osx"} MenuItem{action: showMenubarAction}
MenuSeparator{visible: !shadersettings.showMenubar} MenuSeparator{visible: !appSettings.showMenubar}
CRTMainMenuBar{visible: !shadersettings.showMenubar} CRTMainMenuBar{visible: !appSettings.showMenubar}
} }
}
Component {
id: osxContextMenu
Menu{
id: contextmenu
MenuItem{action: copyAction}
MenuItem{action: pasteAction}
}
}
Loader {
id: menuLoader
sourceComponent: (Qt.platform.os === "osx" ? osxContextMenu : linuxContextMenu)
}
property alias contextmenu: menuLoader.item
MouseArea{ MouseArea{
acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
// This is incredibly ugly. All this file should be reorganized. anchors.fill: parent
width: (parent.width + dleft + dright) / shadersettings.window_scaling - dleft -dright cursorShape: kterminal.terminalUsesMouse ? Qt.ArrowCursor : Qt.IBeamCursor
height: (parent.height + dtop + dbottom) / shadersettings.window_scaling - dtop - dbottom
onWheel:{ onWheel:{
if(wheel.modifiers & Qt.ControlModifier){ if(wheel.modifiers & Qt.ControlModifier){
wheel.angleDelta.y > 0 ? zoomIn.trigger() : zoomOut.trigger(); wheel.angleDelta.y > 0 ? zoomIn.trigger() : zoomOut.trigger();
} else { } else {
var coord = correctDistortion(wheel.x, wheel.y); var coord = correctDistortion(wheel.x, wheel.y);
var lines = wheel.angleDelta.y > 0 ? -1 : 1; kterminal.simulateWheel(coord.x, coord.y, wheel.buttons, wheel.modifiers, wheel.angleDelta);
kterminal.scrollWheelEvent(coord, lines);
} }
} }
onDoubleClicked: { onDoubleClicked: {
var coord = correctDistortion(mouse.x, mouse.y); var coord = correctDistortion(mouse.x, mouse.y);
kterminal.mouseDoubleClickEvent(coord, mouse.button, mouse.modifiers); kterminal.simulateMouseDoubleClick(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers);
} }
onPressed: { onPressed: {
if((!kterminal.usesMouse || mouse.modifiers & Qt.ShiftModifier) && mouse.button == Qt.RightButton) { if((!kterminal.terminalUsesMouse || mouse.modifiers & Qt.ShiftModifier) && mouse.button == Qt.RightButton) {
contextmenu.popup(); contextmenu.popup();
} else { } else {
var coord = correctDistortion(mouse.x, mouse.y); var coord = correctDistortion(mouse.x, mouse.y);
kterminal.mousePressEvent(coord, mouse.button, mouse.modifiers) kterminal.simulateMousePress(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers)
} }
} }
onReleased: { onReleased: {
var coord = correctDistortion(mouse.x, mouse.y); var coord = correctDistortion(mouse.x, mouse.y);
kterminal.mouseReleaseEvent(coord, mouse.button, mouse.modifiers); kterminal.simulateMouseRelease(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers);
} }
onPositionChanged: { onPositionChanged: {
var coord = correctDistortion(mouse.x, mouse.y); var coord = correctDistortion(mouse.x, mouse.y);
kterminal.mouseMoveEvent(coord, mouse.button, mouse.buttons, mouse.modifiers); kterminal.simulateMouseMove(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers);
} }
function correctDistortion(x, y){ function correctDistortion(x, y){
@@ -198,7 +221,7 @@ Item{
y = y / height; y = y / height;
var cc = Qt.size(0.5 - x, 0.5 - y); var cc = Qt.size(0.5 - x, 0.5 - y);
var distortion = (cc.height * cc.height + cc.width * cc.width) * shadersettings.screen_distortion; var distortion = (cc.height * cc.height + cc.width * cc.width) * appSettings.screenCurvature;
return Qt.point((x - cc.width * (1+distortion) * distortion) * kterminal.width, return Qt.point((x - cc.width * (1+distortion) * distortion) * kterminal.width,
(y - cc.height * (1+distortion) * distortion) * kterminal.height) (y - cc.height * (1+distortion) * distortion) * kterminal.height)
@@ -209,24 +232,17 @@ Item{
sourceItem: kterminal sourceItem: kterminal
hideSource: true hideSource: true
wrapMode: ShaderEffectSource.ClampToEdge wrapMode: ShaderEffectSource.ClampToEdge
live: false visible: false
textureSize: Qt.size(kterminal.width * scaleTexture, kterminal.height * scaleTexture);
signal sourceUpdate
Connections{
target: kterminal
onUpdatedImage:{
kterminalSource.scheduleUpdate();
kterminalSource.sourceUpdate();
}
}
} }
Loader{ Loader{
id: blurredSourceLoader id: blurredSourceLoader
asynchronous: true asynchronous: true
active: mBlur !== 0 active: burnIn !== 0
sourceComponent: ShaderEffectSource{ sourceComponent: ShaderEffectSource{
property bool updateBurnIn: false
id: _blurredSourceEffect id: _blurredSourceEffect
sourceItem: blurredTerminalLoader.item sourceItem: blurredTerminalLoader.item
recursive: true recursive: true
@@ -234,54 +250,80 @@ Item{
hideSource: true hideSource: true
wrapMode: kterminalSource.wrapMode wrapMode: kterminalSource.wrapMode
visible: false
function restartBlurSource(){ function restartBlurSource(){
livetimer.restart(); livetimer.restart();
} }
// This updates the burnin synched with the timer.
Connections {
target: updateBurnIn ? mainShader : null
ignoreUnknownSignals: false
onTimeChanged: _blurredSourceEffect.scheduleUpdate();
}
Timer{ Timer{
id: livetimer 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: burnInFadeTime * 1000 * 1.1
running: true running: true
onRunningChanged: { onTriggered: _blurredSourceEffect.updateBurnIn = false;
running ?
timeBinding.target = timeManager :
timeBinding.target = null
}
} }
Connections{ Connections{
id: timeBinding target: kterminal
target: timeManager onImagePainted:{
onTimeChanged: {
_blurredSourceEffect.scheduleUpdate(); _blurredSourceEffect.scheduleUpdate();
} _blurredSourceEffect.updateBurnIn = true;
}
Connections{
target: kterminalSource
onSourceUpdate:{
livetimer.restart(); livetimer.restart();
} }
} }
// Restart blurred source settings change.
Connections{ Connections{
target: shadersettings target: appSettings
onScanline_qualityChanged: restartBlurredSource(); onBurnInChanged: _blurredSourceEffect.restartBlurSource();
onTerminalFontChanged: _blurredSourceEffect.restartBlurSource();
onRasterizationChanged: _blurredSourceEffect.restartBlurSource();
onBurnInQualityChanged: _blurredSourceEffect.restartBlurSource();
}
Connections {
target: kterminalScrollbar
onOpacityChanged: _blurredSourceEffect.restartBlurSource();
} }
} }
} }
Loader{ Loader{
id: blurredTerminalLoader id: blurredTerminalLoader
width: kterminalSource.textureSize.width
height: kterminalSource.textureSize.height property int burnInScaling: scaleTexture * appSettings.burnInQuality
active: mBlur !== 0
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
active: burnIn !== 0
asynchronous: true asynchronous: true
sourceComponent: ShaderEffect { sourceComponent: ShaderEffect {
property variant txt_source: kterminalSource property variant txt_source: kterminalSource
property variant blurredSource: blurredSourceLoader.item property variant blurredSource: blurredSourceLoader.item
property real blurCoefficient: (1.0 - motionBlurCoefficient) * fpsAttenuation property real blurCoefficient: motionBlurCoefficient
blending: false blending: false
fragmentShader: fragmentShader:
"#ifdef GL_ES
precision mediump float;
#endif\n" +
"uniform lowp float qt_Opacity;" + "uniform lowp float qt_Opacity;" +
"uniform lowp sampler2D txt_source;" + "uniform lowp sampler2D txt_source;" +
@@ -296,149 +338,14 @@ Item{
"void main() {" + "void main() {" +
"vec2 coords = qt_TexCoord0;" + "vec2 coords = qt_TexCoord0;" +
"vec3 color = texture2D(txt_source, coords).rgb * 256.0;" + "vec3 origColor = texture2D(txt_source, coords).rgb;" +
"vec3 blur_color = texture2D(blurredSource, coords).rgb - vec3(blurCoefficient);" +
"vec3 color = min(origColor + blur_color, max(origColor, blur_color));" +
"vec3 blur_color = texture2D(blurredSource, coords).rgb * 256.0;" + "gl_FragColor = vec4(color, rgb2grey(color - origColor));" +
"blur_color = blur_color - blur_color * blurCoefficient;" +
"color = step(vec3(1.0), color) * color + step(color, vec3(1.0)) * blur_color;" +
"gl_FragColor = vec4(floor(color) / 256.0, 1.0);" +
"}" "}"
onStatusChanged: if (log) console.log(log) //Print warning messages onStatusChanged: if (log) console.log(log) //Print warning messages
} }
} }
///////////////////////////////////////////////////////////////////////////
// EFFECTS //////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
// BLOOM ////////////////////////////////////////////////////////////////
Loader{
property real scaling: shadersettings.bloom_quality * shadersettings.window_scaling
id: bloomEffectLoader
active: mBloom != 0
asynchronous: true
width: parent.width * scaling
height: parent.height * scaling
sourceComponent: FastBlur{
radius: 48 * scaling
source: kterminal
transparentBorder: true
}
}
Loader{
id: bloomSourceLoader
active: mBloom != 0
asynchronous: true
sourceComponent: ShaderEffectSource{
id: _bloomEffectSource
sourceItem: bloomEffectLoader.item
hideSource: true
live: false
smooth: true
Connections{
target: kterminalSource
onSourceUpdate: _bloomEffectSource.scheduleUpdate();
}
}
}
// NOISE ////////////////////////////////////////////////////////////////
ShaderEffect {
id: staticNoiseEffect
anchors.fill: parent
property real element_size: shadersettings.rasterization == shadersettings.no_rasterization ? 2 : 1
property size virtual_resolution: Qt.size(kterminal.width / element_size, kterminal.height / element_size)
blending: false
fragmentShader:
"uniform lowp float qt_Opacity;
varying highp vec2 qt_TexCoord0;
uniform highp vec2 virtual_resolution;" +
"highp float noise(vec2 co)
{
highp float a = 12.9898;
highp float b = 78.233;
highp float c = 43758.5453;
highp float dt= dot(co.xy ,vec2(a,b));
highp float sn= mod(dt,3.14);
return fract(sin(sn) * c);
}
vec2 sw(vec2 p) {return vec2( floor(p.x) , floor(p.y) );}
vec2 se(vec2 p) {return vec2( ceil(p.x) , floor(p.y) );}
vec2 nw(vec2 p) {return vec2( floor(p.x) , ceil(p.y) );}
vec2 ne(vec2 p) {return vec2( ceil(p.x) , ceil(p.y) );}
float smoothNoise(vec2 p) {
vec2 inter = smoothstep(0., 1., fract(p));
float s = mix(noise(sw(p)), noise(se(p)), inter.x);
float n = mix(noise(nw(p)), noise(ne(p)), inter.x);
return mix(s, n, inter.y);
}" +
"void main() {" +
"gl_FragColor.a = smoothNoise(qt_TexCoord0 * virtual_resolution);" +
"}"
onStatusChanged: if (log) console.log(log) //Print warning messages
}
ShaderEffectSource{
id: staticNoiseSource
sourceItem: staticNoiseEffect
textureSize: Qt.size(parent.width, parent.height)
wrapMode: ShaderEffectSource.Repeat
smooth: true
hideSource: true
}
// RASTERIZATION //////////////////////////////////////////////////////////
ShaderEffect {
id: rasterizationEffect
width: parent.width
height: parent.height
property size virtual_resolution: Qt.size(kterminal.width, kterminal.height)
blending: false
fragmentShader:
"uniform lowp float qt_Opacity;" +
"varying highp vec2 qt_TexCoord0;
uniform highp vec2 virtual_resolution;
highp float getScanlineIntensity(vec2 coords) {
highp float result = 1.0;" +
(mScanlines != shadersettings.no_rasterization ?
"result *= abs(sin(coords.y * virtual_resolution.y * "+Math.PI+"));" : "") +
(mScanlines == shadersettings.pixel_rasterization ?
"result *= abs(sin(coords.x * virtual_resolution.x * "+Math.PI+"));" : "") + "
return result;
}" +
"void main() {" +
"highp float color = getScanlineIntensity(qt_TexCoord0);" +
"float distance = length(vec2(0.5) - qt_TexCoord0);" +
"color = mix(color, 0.0, 1.2 * distance * distance);" +
"gl_FragColor.a = color;" +
"}"
onStatusChanged: if (log) console.log(log) //Print warning messages
}
ShaderEffectSource{
id: rasterizationEffectSource
sourceItem: rasterizationEffect
hideSource: true
smooth: true
wrapMode: ShaderEffectSource.Repeat
}
} }

View File

@@ -28,57 +28,58 @@ Tab{
anchors.fill: parent anchors.fill: parent
ColumnLayout{ ColumnLayout{
anchors.fill: parent anchors.fill: parent
spacing: 2
CheckableSlider{ CheckableSlider{
name: qsTr("Bloom") name: qsTr("Bloom")
onNewValue: shadersettings.bloom_strength = newValue onNewValue: appSettings.bloom = newValue
value: shadersettings.bloom_strength value: appSettings.bloom
} }
CheckableSlider{ CheckableSlider{
name: qsTr("Motion Blur") name: qsTr("BurnIn")
onNewValue: shadersettings.motion_blur = newValue onNewValue: appSettings.burnIn = newValue
value: shadersettings.motion_blur value: appSettings.burnIn
} }
CheckableSlider{ CheckableSlider{
name: qsTr("Noise") name: qsTr("Static Noise")
onNewValue: shadersettings.noise_strength = newValue onNewValue: appSettings.staticNoise = newValue
value: shadersettings.noise_strength value: appSettings.staticNoise
} }
CheckableSlider{ CheckableSlider{
name: qsTr("Jitter") name: qsTr("Jitter")
onNewValue: shadersettings.jitter = newValue onNewValue: appSettings.jitter = newValue
value: shadersettings.jitter value: appSettings.jitter
} }
CheckableSlider{ CheckableSlider{
name: qsTr("Glow") name: qsTr("Glow Line")
onNewValue: shadersettings.glowing_line_strength = newValue; onNewValue: appSettings.glowingLine = newValue;
value: shadersettings.glowing_line_strength value: appSettings.glowingLine
} }
CheckableSlider{ CheckableSlider{
name: qsTr("Screen distortion") name: qsTr("Screen Curvature")
onNewValue: shadersettings.screen_distortion = newValue; onNewValue: appSettings.screenCurvature = newValue;
value: shadersettings.screen_distortion; value: appSettings.screenCurvature;
} }
CheckableSlider{ CheckableSlider{
name: qsTr("Ambient light") name: qsTr("Ambient Light")
onNewValue: shadersettings.ambient_light = newValue; onNewValue: appSettings.ambientLight = newValue;
value: shadersettings.ambient_light value: appSettings.ambientLight
enabled: shadersettings.frames_index !== 0 enabled: appSettings.framesIndex !== 0
} }
CheckableSlider{ CheckableSlider{
name: qsTr("Brightness flickering") name: qsTr("Flickering")
onNewValue: shadersettings.brightness_flickering = newValue; onNewValue: appSettings.flickering = newValue;
value: shadersettings.brightness_flickering; value: appSettings.flickering;
} }
CheckableSlider{ CheckableSlider{
name: qsTr("Horizontal flickering") name: qsTr("Horizontal Sync")
onNewValue: shadersettings.horizontal_sincronization = newValue; onNewValue: appSettings.horizontalSync = newValue;
value: shadersettings.horizontal_sincronization; value: appSettings.horizontalSync;
} }
CheckableSlider{ CheckableSlider{
name: qsTr("RGB shift") name: qsTr("RGB Shift")
onNewValue: shadersettings.rgb_shift = newValue; onNewValue: appSettings.rbgShift = newValue;
value: shadersettings.rgb_shift; value: appSettings.rbgShift;
enabled: shadersettings.chroma_color !== 0 enabled: appSettings.chromaColor !== 0
} }
} }
} }

View File

@@ -27,78 +27,185 @@ Tab{
ColumnLayout{ ColumnLayout{
anchors.fill: parent anchors.fill: parent
GroupBox{ GroupBox{
anchors {left: parent.left; right: parent.right}
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true
title: qsTr("Profile") title: qsTr("Profile")
ColumnLayout{
anchors.fill: parent
ComboBox{
id: profilesbox
Layout.fillWidth: true
model: shadersettings.profiles_list
currentIndex: shadersettings.profiles_index
}
RowLayout { RowLayout {
anchors.fill: parent
TableView {
id: profilesView
Layout.fillWidth: true Layout.fillWidth: true
anchors { top: parent.top; bottom: parent.bottom; }
model: appSettings.profilesList
headerVisible: false
TableViewColumn {
title: qsTr("Profile")
role: "text"
width: parent.width * 0.5
}
onActivated: {
appSettings.loadProfile(row);
}
}
ColumnLayout {
anchors { top: parent.top; bottom: parent.bottom }
Layout.fillWidth: false
Button{ Button{
Layout.fillWidth: true Layout.fillWidth: true
text: qsTr("New")
onClicked: {
insertname.profileName = "";
insertname.show()
}
}
Button{
Layout.fillWidth: true
property alias currentIndex: profilesView.currentRow
enabled: currentIndex >= 0
text: qsTr("Load") text: qsTr("Load")
onClicked: { onClicked: {
shadersettings.profiles_index = profilesbox.currentIndex var index = profilesView.currentRow;
shadersettings.loadCurrentProfile(); if (index >= 0)
shadersettings.handleFontChanged(); appSettings.loadProfile(index);
} }
} }
Button{ Button{
Layout.fillWidth: true Layout.fillWidth: true
text: qsTr("Save New Profile") text: qsTr("Remove")
onClicked: insertname.show() property alias currentIndex: profilesView.currentRow
}
Button{ enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin
Layout.fillWidth: true
text: qsTr("Remove Selected")
enabled: !shadersettings.profiles_list.get(profilesbox.currentIndex).builtin
onClicked: { onClicked: {
shadersettings.profiles_list.remove(profilesbox.currentIndex) appSettings.profilesList.remove(currentIndex);
profilesbox.currentIndex = profilesbox.currentIndex - 1 profilesView.selection.clear();
// TODO This is a very ugly workaround. The view didn't update on Qt 5.3.2.
profilesView.model = 0;
profilesView.model = appSettings.profilesList;
} }
} }
Item {
// Spacing
Layout.fillHeight: true
} }
RowLayout{
Layout.fillWidth: true
Button{ Button{
Layout.fillWidth: true Layout.fillWidth: true
text: qsTr("Import From File") text: qsTr("Import")
onClicked: { onClicked: {
fileDialog.selectExisting = true; fileDialog.selectExisting = true;
fileDialog.callBack = function (url) {loadFile(url);}; fileDialog.callBack = function (url) {loadFile(url);};
fileDialog.open(); fileDialog.open();
} }
function loadFile(url) { function loadFile(url) {
try {
if (appSettings.verbose)
console.log("Loading file: " + url); console.log("Loading file: " + url);
var profileStirng = fileio.read(url);
shadersettings.loadProfileString(profileStirng); var profileObject = JSON.parse(fileIO.read(url));
var name = profileObject.name;
if (!name)
throw "Profile doesn't have a name";
delete profileObject.name;
appSettings.appendCustomProfile(name, JSON.stringify(profileObject));
} catch (err) {
console.log(err);
messageDialog.text = qsTr("There has been an error reading the file.")
messageDialog.open();
}
} }
} }
Button{ Button{
property alias currentIndex: profilesView.currentRow
Layout.fillWidth: true Layout.fillWidth: true
text: qsTr("Export To File")
text: qsTr("Export")
enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin
onClicked: { onClicked: {
fileDialog.selectExisting = false; fileDialog.selectExisting = false;
fileDialog.callBack = function (url) {storeFile(url);}; fileDialog.callBack = function (url) {storeFile(url);};
fileDialog.open(); fileDialog.open();
} }
function storeFile(url) { function storeFile(url) {
try {
var urlString = url.toString();
// Fix the extension if it's missing.
var extension = urlString.substring(urlString.length - 5, urlString.length);
var urlTail = (extension === ".json" ? "" : ".json");
url += urlTail;
if (true)
console.log("Storing file: " + url); console.log("Storing file: " + url);
var profileObject = shadersettings.composeProfileObject();
fileio.write(url, JSON.stringify(profileObject, undefined, 2)); var profileObject = appSettings.profilesList.get(currentIndex);
var profileSettings = JSON.parse(profileObject.obj_string);
profileSettings["name"] = profileObject.text;
var result = fileIO.write(url, JSON.stringify(profileSettings, undefined, 2));
if (!result)
throw "The file could not be written.";
} catch (err) {
console.log(err);
messageDialog.text = qsTr("There has been an error storing the file.")
messageDialog.open();
} }
} }
} }
}
}
}
GroupBox{
anchors {left: parent.left; right: parent.right}
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
anchors {left: parent.left; right: parent.right}
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)
}
}
}
// DIALOGS ////////////////////////////////////////////////////////////////
InsertNameDialog{ InsertNameDialog{
id: insertname id: insertname
onNameSelected: shadersettings.addNewCustomProfile(name) onNameSelected: {
appSettings.appendCustomProfile(name, appSettings.composeProfileString());
}
}
MessageDialog {
id: messageDialog
title: qsTr("File Error")
onAccepted: {
messageDialog.close();
}
} }
Loader { Loader {
property var callBack property var callBack
@@ -126,42 +233,3 @@ Tab{
} }
} }
} }
GroupBox{
title: qsTr("Lights")
Layout.fillWidth: true
GridLayout{
anchors.fill: parent
columns: 2
Text{ text: qsTr("Brightness") }
SimpleSlider{
onValueChanged: shadersettings.brightness = value
value: shadersettings.brightness
}
Text{ text: qsTr("Contrast") }
SimpleSlider{
onValueChanged: shadersettings.contrast = value
value: shadersettings.contrast
}
Text{ text: qsTr("Opacity") }
SimpleSlider{
onValueChanged: shadersettings.windowOpacity = value
value: shadersettings.windowOpacity
}
}
}
GroupBox{
title: qsTr("Frame")
Layout.fillWidth: true
RowLayout{
anchors.fill: parent
ComboBox{
id: framescombobox
Layout.fillWidth: true
model: shadersettings.frames_list
currentIndex: shadersettings.frames_index
onCurrentIndexChanged: shadersettings.frames_index = currentIndex
}
}
}
}
}

View File

@@ -22,6 +22,8 @@ import QtQuick 2.2
import QtQuick.Controls 1.1 import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1 import QtQuick.Layouts 1.1
import "Components"
Tab{ Tab{
ColumnLayout{ ColumnLayout{
anchors.fill: parent anchors.fill: parent
@@ -34,73 +36,39 @@ Tab{
anchors.fill: parent anchors.fill: parent
rows: 2 rows: 2
columns: 3 columns: 3
CheckBox{ Label{text: qsTr("Effects FPS")}
property int fps: checked ? slider.value : 0
onFpsChanged: shadersettings.fps = fps
checked: shadersettings.fps !== 0
text: qsTr("Limit FPS")
}
Slider{ Slider{
id: slider
Layout.fillWidth: true Layout.fillWidth: true
stepSize: 1 id: fpsSlider
maximumValue: 60 onValueChanged: {
minimumValue: 1 if (enabled) {
enabled: shadersettings.fps !== 0 appSettings.fps = value !== 60 ? value + 1 : 0;
value: shadersettings.fps !== 0 ? shadersettings.fps : 60
} }
Text{text: slider.value} }
Text{text: qsTr("Texture Quality")} stepSize: 1
enabled: false
Component.onCompleted: {
minimumValue = 0;
maximumValue = 60;
value = appSettings.fps !== 0 ? appSettings.fps - 1 : 60;
enabled = true;
}
}
SizedLabel{text: appSettings.fps !== 0 ? appSettings.fps : qsTr("Max")}
Label{text: qsTr("Texture Quality")}
Slider{ Slider{
Layout.fillWidth: true Layout.fillWidth: true
id: txtslider id: txtslider
onValueChanged: shadersettings.window_scaling = value; onValueChanged: if (enabled) appSettings.windowScaling = value;
value: shadersettings.window_scaling stepSize: 0.05
stepSize: 0.10 enabled: false
Component.onCompleted: minimumValue = 0.3 //Without this value gets set to 0.5
}
Text{text: Math.round(txtslider.value * 100) + "%"}
}
}
GroupBox{
title: qsTr("Rasterization")
Layout.fillWidth: true
anchors.left: parent.left
anchors.right: parent.right
GridLayout{
id: scanlineQualityContainer
anchors.fill: parent
columns: 3
property alias valsIndex: scanlineQualitySlider.value
property var vals: [4,3,2]
property var valsStrings: [
qsTr("Low"),
qsTr("Medium"),
qsTr("High")
]
onValsIndexChanged: shadersettings.scanline_quality = vals[valsIndex];
Text{text: qsTr("Scanlines Quality")}
Slider{
id: scanlineQualitySlider
Layout.fillWidth: true
onValueChanged: parent.valsIndex = value;
stepSize: 1
Component.onCompleted: { Component.onCompleted: {
minimumValue = 0; minimumValue = 0.25 //Without this value gets set to 0.5
maximumValue = 2; value = appSettings.windowScaling;
value = parent.vals.indexOf(shadersettings.scanline_quality); enabled = true;
}
Connections{
target: shadersettings
onScanline_qualityChanged:
scanlineQualityContainer.valsIndex = scanlineQualityContainer.vals.indexOf(shadersettings.scanline_quality);
} }
} }
Text{ SizedLabel{text: Math.round(txtslider.value * 100) + "%"}
text: parent.valsStrings[parent.valsIndex];
}
} }
} }
GroupBox{ GroupBox{
@@ -111,38 +79,46 @@ Tab{
GridLayout{ GridLayout{
id: bloomQualityContainer id: bloomQualityContainer
anchors.fill: parent anchors.fill: parent
columns: 3 Label{text: qsTr("Bloom Quality")}
property alias valsIndex: bloomQualitySlider.value
property var vals: [0.25, 0.50, 1.00]
property var valsStrings: [
qsTr("Low"),
qsTr("Medium"),
qsTr("High")
]
onValsIndexChanged: shadersettings.bloom_quality = vals[valsIndex];
Text{text: qsTr("Bloom Quality")}
Slider{ Slider{
id: bloomQualitySlider
Layout.fillWidth: true Layout.fillWidth: true
onValueChanged: parent.valsIndex = value; id: bloomSlider
stepSize: 1 onValueChanged: if (enabled) appSettings.bloomQuality = value;
stepSize: 0.05
enabled: false
Component.onCompleted: { Component.onCompleted: {
minimumValue = 0; minimumValue = 0.25
maximumValue = 2; value = appSettings.bloomQuality;
value = parent.vals.indexOf(shadersettings.bloom_quality); enabled = true;
}
Connections{
target: shadersettings
onBloom_qualityChanged:
bloomQualityContainer.valsIndex = bloomQualityContainer.vals.indexOf(shadersettings.bloom_quality);
} }
} }
Text{ SizedLabel{text: Math.round(bloomSlider.value * 100) + "%"}
text: parent.valsStrings[parent.valsIndex];
} }
} }
GroupBox{
title: qsTr("BurnIn")
Layout.fillWidth: true
anchors.left: parent.left
anchors.right: parent.right
GridLayout{
id: blurQualityContainer
anchors.fill: parent
Label{text: qsTr("BurnIn Quality")}
Slider{
Layout.fillWidth: true
id: burnInSlider
onValueChanged: if (enabled) appSettings.burnInQuality = value;
stepSize: 0.05
enabled: false
Component.onCompleted: {
minimumValue = 0.25
value = appSettings.burnInQuality;
enabled = true;
}
}
SizedLabel{text: Math.round(burnInSlider.value * 100) + "%"}
}
} }
GroupBox{ GroupBox{
title: qsTr("Frame") title: qsTr("Frame")
@@ -150,9 +126,9 @@ Tab{
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
CheckBox{ CheckBox{
checked: shadersettings._frameReflections checked: appSettings._frameReflections
text: qsTr("Frame Reflections") text: qsTr("Frame Reflections")
onCheckedChanged: shadersettings._frameReflections = checked onCheckedChanged: appSettings._frameReflections = checked
} }
} }
} }

View File

@@ -0,0 +1,94 @@
/*******************************************************************************
* 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
}
}
}
GroupBox{
title: qsTr("Frame")
Layout.fillWidth: true
RowLayout{
anchors.fill: parent
ComboBox{
id: framescombobox
Layout.fillWidth: true
model: appSettings.framesList
currentIndex: appSettings.framesIndex
onActivated: {
appSettings.frameName = appSettings.framesList.get(index).name;
}
function updateIndex(){
var name = appSettings.frameName;
var index = appSettings.getFrameIndexByName(name);
if (index !== undefined)
currentIndex = index;
}
Component.onCompleted: updateIndex();
Connections {
target: appSettings
onFrameNameChanged: framescombobox.updateIndex();
}
}
}
}
}
}

View File

@@ -22,80 +22,80 @@ import QtQuick 2.2
import QtQuick.Controls 1.1 import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1 import QtQuick.Layouts 1.1
import "Components"
Tab{ Tab{
ColumnLayout{ ColumnLayout{
anchors.fill: parent anchors.fill: parent
GroupBox{ GroupBox{
title: qsTr("Rasterization Mode") property var rasterization: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")][appSettings.rasterization]
Layout.fillWidth: true title: qsTr("Font" + "(" + rasterization + ")")
ComboBox { anchors { left: parent.left; right: parent.right }
id: rasterizationBox
property string selectedElement: model[currentIndex]
anchors.fill: parent
model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")]
currentIndex: shadersettings.rasterization
onCurrentIndexChanged: {
shadersettings.rasterization = currentIndex
fontChanger.updateIndex();
}
}
}
GroupBox{
title: qsTr("Font") + " (" + rasterizationBox.selectedElement + ")"
Layout.fillWidth: true
GridLayout{ GridLayout{
anchors.fill: parent anchors.fill: parent
columns: 2 columns: 2
Text{ text: qsTr("Name") } Label{ text: qsTr("Name") }
ComboBox{ ComboBox{
id: fontChanger id: fontChanger
Layout.fillWidth: true Layout.fillWidth: true
model: shadersettings.fontlist model: appSettings.fontlist
currentIndex: updateIndex()
onActivated: { onActivated: {
shadersettings.fontIndexes[shadersettings.rasterization] = index; var name = appSettings.fontlist.get(index).name;
shadersettings.handleFontChanged(); appSettings.fontNames[appSettings.rasterization] = name;
appSettings.handleFontChanged();
} }
function updateIndex(){ function updateIndex(){
currentIndex = shadersettings.fontIndexes[shadersettings.rasterization]; var name = appSettings.fontNames[appSettings.rasterization];
var index = appSettings.getIndexByName(name);
if (index !== undefined)
currentIndex = index;
} }
Connections{
target: appSettings
onTerminalFontChanged: fontChanger.updateIndex();
} }
Text{ text: qsTr("Scaling") } Component.onCompleted: updateIndex();
}
Label{ text: qsTr("Scaling") }
RowLayout{ RowLayout{
Layout.fillWidth: true Layout.fillWidth: true
Slider{ Slider{
Layout.fillWidth: true Layout.fillWidth: true
id: fontScalingChanger id: fontScalingChanger
onValueChanged: if(enabled) shadersettings.fontScaling = value onValueChanged: if(enabled) appSettings.fontScaling = value
stepSize: 0.05 stepSize: 0.05
enabled: false // Another trick to fix initial bad behavior. enabled: false // Another trick to fix initial bad behavior.
Component.onCompleted: { Component.onCompleted: {
minimumValue = 0.5; minimumValue = appSettings.minimumFontScaling;
maximumValue = 2.5; maximumValue = appSettings.maximumFontScaling;
value = shadersettings.fontScaling; value = appSettings.fontScaling;
enabled = true; enabled = true;
} }
Connections{ Connections{
target: shadersettings target: appSettings
onFontScalingChanged: fontScalingChanger.value = shadersettings.fontScaling; onFontScalingChanged: fontScalingChanger.value = appSettings.fontScaling;
} }
} }
Text{ SizedLabel{
text: Math.round(fontScalingChanger.value * 100) + "%" text: Math.round(fontScalingChanger.value * 100) + "%"
} }
} }
Text{ text: qsTr("Font Width") } Label{ text: qsTr("Font Width") }
RowLayout{ RowLayout{
Layout.fillWidth: true Layout.fillWidth: true
Slider{ Slider{
Layout.fillWidth: true Layout.fillWidth: true
id: widthChanger id: widthChanger
onValueChanged: shadersettings.fontWidth = value; onValueChanged: appSettings.fontWidth = value;
value: shadersettings.fontWidth value: appSettings.fontWidth
stepSize: 0.05 stepSize: 0.05
Component.onCompleted: minimumValue = 0.5 //Without this value gets set to 0.5 Component.onCompleted: {
// This is needed to avoid unnecessary chnaged events.
minimumValue = 0.5;
maximumValue = 1.5;
} }
Text{ }
SizedLabel{
text: Math.round(widthChanger.value * 100) + "%" text: Math.round(widthChanger.value * 100) + "%"
} }
} }
@@ -103,38 +103,38 @@ Tab{
} }
GroupBox{ GroupBox{
title: qsTr("Colors") title: qsTr("Colors")
Layout.fillWidth: true anchors { left: parent.left; right: parent.right }
ColumnLayout{ ColumnLayout{
anchors.fill: parent anchors.fill: parent
ColumnLayout{
Layout.fillWidth: true
CheckableSlider{
name: qsTr("Chroma Color")
onNewValue: appSettings.chromaColor = newValue
value: appSettings.chromaColor
}
CheckableSlider{
name: qsTr("Saturation Color")
onNewValue: appSettings.saturationColor = newValue
value: appSettings.saturationColor
enabled: appSettings.chromaColor !== 0
}
}
RowLayout{ RowLayout{
Layout.fillWidth: true Layout.fillWidth: true
ColorButton{ ColorButton{
name: qsTr("Font") name: qsTr("Font")
height: 50 height: 50
Layout.fillWidth: true Layout.fillWidth: true
onColorSelected: shadersettings._font_color = color; onColorSelected: appSettings._fontColor = color;
button_color: shadersettings._font_color color: appSettings._fontColor
} }
ColorButton{ ColorButton{
name: qsTr("Background") name: qsTr("Background")
height: 50 height: 50
Layout.fillWidth: true Layout.fillWidth: true
onColorSelected: shadersettings._background_color = color; onColorSelected: appSettings._backgroundColor = color;
button_color: shadersettings._background_color color: appSettings._backgroundColor
}
}
ColumnLayout{
Layout.fillWidth: true
CheckableSlider{
name: qsTr("Chroma Color")
onNewValue: shadersettings.chroma_color = newValue
value: shadersettings.chroma_color
}
CheckableSlider{
name: qsTr("Saturation Color")
onNewValue: shadersettings.saturation_color = newValue
value: shadersettings.saturation_color
enabled: shadersettings.chroma_color !== 0
} }
} }
} }

View File

@@ -27,8 +27,8 @@ import QtQuick.Dialogs 1.1
Window { Window {
id: settings_window id: settings_window
title: qsTr("Settings") title: qsTr("Settings")
width: 640 width: 580
height: 440 height: 400
property int tabmargins: 15 property int tabmargins: 15
@@ -42,6 +42,12 @@ Window {
anchors.fill: parent anchors.fill: parent
anchors.margins: tabmargins anchors.margins: tabmargins
} }
SettingsScreenTab{
id: screenTab
title: qsTr("Screen")
anchors.fill: parent
anchors.margins: tabmargins
}
SettingsTerminalTab{ SettingsTerminalTab{
id: terminalTab id: terminalTab
title: qsTr("Terminal") title: qsTr("Terminal")

View File

@@ -21,40 +21,60 @@
import QtQuick 2.2 import QtQuick 2.2
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
import "utils.js" as Utils
ShaderEffect { ShaderEffect {
property color font_color: shadersettings.font_color property ShaderEffectSource source
property color background_color: shadersettings.background_color property ShaderEffectSource blurredSource
property variant source: terminal.theSource property ShaderEffectSource bloomSource
property variant bloomSource: terminal.bloomSource
property variant rasterizationSource: terminal.rasterizationSource
property variant noiseSource: terminal.staticNoiseSource
property real bloom_strength: shadersettings.bloom_strength * 2.5
property real jitter: shadersettings.jitter * 0.007 property color fontColor: appSettings.fontColor
property color backgroundColor: appSettings.backgroundColor
property real bloom: appSettings.bloom * 2.5
property real noise_strength: shadersettings.noise_strength property real burnIn: appSettings.burnIn
property real screen_distorsion: shadersettings.screen_distortion
property real glowing_line_strength: shadersettings.glowing_line_strength
property real chroma_color: shadersettings.chroma_color; property real jitter: appSettings.jitter * 0.007
property real staticNoise: appSettings.staticNoise
property size scaleNoiseSize: Qt.size((width) / (noiseTexture.width * appSettings.windowScaling * appSettings.fontScaling),
(height) / (noiseTexture.height * appSettings.windowScaling * appSettings.fontScaling))
property real rgb_shift: shadersettings.rgb_shift * 0.2 property real screenCurvature: appSettings.screenCurvature
property real glowingLine: appSettings.glowingLine * 0.2
property real brightness_flickering: shadersettings.brightness_flickering property real chromaColor: appSettings.chromaColor;
property real horizontal_sincronization: shadersettings.horizontal_sincronization
property bool frameReflections: shadersettings.frameReflections property real rbgShift: appSettings.rbgShift * 0.2
property real disp_top: (frame.item.displacementTop * shadersettings.window_scaling) / height property real flickering: appSettings.flickering
property real disp_bottom: (frame.item.displacementBottom * shadersettings.window_scaling) / height property real horizontalSync: appSettings.horizontalSync * 0.5
property real disp_left: (frame.item.displacementLeft * shadersettings.window_scaling) / width
property real disp_right: (frame.item.displacementRight * shadersettings.window_scaling) / width
property real screen_brightness: shadersettings.brightness * 1.5 + 0.5 property bool frameReflections: appSettings.frameReflections
property real time: timeManager.time property real disp_top: (frame.displacementTop * appSettings.windowScaling) / height
property variant randomFunctionSource: randfuncsource property real disp_bottom: (frame.displacementBottom * appSettings.windowScaling) / height
property real disp_left: (frame.displacementLeft * appSettings.windowScaling) / width
property real disp_right: (frame.displacementRight * appSettings.windowScaling) / width
property real screen_brightness: appSettings.brightness * 1.5 + 0.5
// This is the average value of the abs(sin) function. Needed to avoid aliasing.
readonly property real absSinAvg: 0.63661828335466886
property size rasterizationSmooth: Qt.size(
Utils.clamp(2.0 * virtual_resolution.width / (width * devicePixelRatio), 0.0, 1.0),
Utils.clamp(2.0 * virtual_resolution.height / (height * devicePixelRatio), 0.0, 1.0))
property real dispX
property real dispY
property size virtual_resolution
TimeManager{
id: timeManager
enableTimer: terminalWindow.visible
}
property alias time: timeManager.time
property ShaderEffectSource noiseSource: noiseShaderSource
// If something goes wrong activate the fallback version of the shader. // If something goes wrong activate the fallback version of the shader.
property bool fallBack: false property bool fallBack: false
@@ -63,20 +83,19 @@ ShaderEffect {
//Smooth random texture used for flickering effect. //Smooth random texture used for flickering effect.
Image{ Image{
id: randtexture id: noiseTexture
source: "frames/images/randfunction.png" source: "images/allNoise512.png"
width: 512 width: 512
height: 512 height: 512
sourceSize.width: 512 fillMode: Image.Tile
sourceSize.height: 256 visible: false
fillMode: Image.TileVertically
} }
ShaderEffectSource{ ShaderEffectSource{
id: randfuncsource id: noiseShaderSource
sourceItem: randtexture sourceItem: noiseTexture
live: false
hideSource: true
wrapMode: ShaderEffectSource.Repeat wrapMode: ShaderEffectSource.Repeat
visible: false
smooth: true
} }
//Print the number with a reasonable precision for the shader. //Print the number with a reasonable precision for the shader.
@@ -99,78 +118,109 @@ ShaderEffect {
varying highp vec2 qt_TexCoord0;" + varying highp vec2 qt_TexCoord0;" +
(!fallBack ? " (!fallBack ? "
uniform sampler2D randomFunctionSource;" : "") + uniform sampler2D noiseSource;" : "") +
(!fallBack && brightness_flickering !== 0.0 ?" (!fallBack && flickering !== 0.0 ?"
varying lowp float brightness; varying lowp float brightness;
uniform lowp float brightness_flickering;" : "") + uniform lowp float flickering;" : "") +
(!fallBack && horizontal_sincronization !== 0.0 ?" (!fallBack && horizontalSync !== 0.0 ?"
varying lowp float horizontal_distortion; uniform lowp float horizontalSync;
uniform lowp float horizontal_sincronization;" : "") + varying lowp float distortionScale;
varying lowp float distortionFreq;" : "") +
" "
void main() { void main() {
qt_TexCoord0.x = (qt_MultiTexCoord0.x - disp_left) / (1.0 - disp_left - disp_right); qt_TexCoord0.x = (qt_MultiTexCoord0.x - disp_left) / (1.0 - disp_left - disp_right);
qt_TexCoord0.y = (qt_MultiTexCoord0.y - disp_top) / (1.0 - disp_top - disp_bottom); qt_TexCoord0.y = (qt_MultiTexCoord0.y - disp_top) / (1.0 - disp_top - disp_bottom);
vec2 coords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));" + vec2 coords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));" +
(!fallBack && brightness_flickering !== 0.0 ? "
brightness = 1.0 + (texture2D(randomFunctionSource, coords).g - 0.5) * brightness_flickering;" (!fallBack && (flickering !== 0.0 || horizontalSync !== 0.0) ?
"vec4 initialNoiseTexel = texture2D(noiseSource, coords);"
: "") +
(!fallBack && flickering !== 0.0 ? "
brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;"
: "") + : "") +
(!fallBack && horizontal_sincronization !== 0.0 ? " (!fallBack && horizontalSync !== 0.0 ? "
float randval = 1.5 * texture2D(randomFunctionSource,(vec2(1.0) -coords) * 0.5).g; float randval = horizontalSync - initialNoiseTexel.r;
float negsinc = 1.0 - 0.6 * horizontal_sincronization;" + " distortionScale = step(0.0, randval) * randval * horizontalSync;
horizontal_distortion = step(negsinc, randval) * (randval - negsinc) * 0.3*horizontal_sincronization;" distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
: "") + : "") +
"gl_Position = qt_Matrix * qt_Vertex; "gl_Position = qt_Matrix * qt_Vertex;
}" }"
fragmentShader: " fragmentShader: "
#ifdef GL_ES
precision mediump float;
#endif
uniform sampler2D source; uniform sampler2D source;
uniform highp float qt_Opacity; uniform highp float qt_Opacity;
uniform highp float time; uniform highp float time;
varying highp vec2 qt_TexCoord0; varying highp vec2 qt_TexCoord0;
uniform highp vec4 font_color; uniform highp vec4 fontColor;
uniform highp vec4 background_color; uniform highp vec4 backgroundColor;
uniform highp sampler2D rasterizationSource; uniform lowp float screen_brightness;
uniform lowp float screen_brightness;" +
(bloom_strength !== 0 ? " uniform highp vec2 virtual_resolution;
uniform highp vec2 rasterizationSmooth;
uniform highp float dispX;
uniform highp float dispY;" +
(bloom !== 0 ? "
uniform highp sampler2D bloomSource; uniform highp sampler2D bloomSource;
uniform lowp float bloom_strength;" : "") + uniform lowp float bloom;" : "") +
(noise_strength !== 0 ? " (burnIn !== 0 ? "
uniform highp float noise_strength;" : "") + uniform sampler2D blurredSource;" : "") +
(noise_strength !== 0 || jitter !== 0 || rgb_shift ? " (staticNoise !== 0 ? "
uniform lowp sampler2D noiseSource;" : "") + uniform highp float staticNoise;" : "") +
(screen_distorsion !== 0 ? " (((staticNoise !== 0 || jitter !== 0 || rbgShift)
uniform highp float screen_distorsion;" : "") + ||(fallBack && (flickering || horizontalSync))) ? "
(glowing_line_strength !== 0 ? " uniform lowp sampler2D noiseSource;
uniform highp float glowing_line_strength;" : "") + uniform highp vec2 scaleNoiseSize;" : "") +
(chroma_color !== 0 ? " (screenCurvature !== 0 ? "
uniform lowp float chroma_color;" : "") + uniform highp float screenCurvature;" : "") +
(glowingLine !== 0 ? "
uniform highp float glowingLine;" : "") +
(chromaColor !== 0 ? "
uniform lowp float chromaColor;" : "") +
(jitter !== 0 ? " (jitter !== 0 ? "
uniform lowp float jitter;" : "") + uniform lowp float jitter;" : "") +
(rgb_shift !== 0 ? " (rbgShift !== 0 ? "
uniform lowp float rgb_shift;" : "") + uniform lowp float rbgShift;" : "") +
(fallBack && (brightness_flickering || horizontal_sincronization) ? " (fallBack && horizontalSync !== 0 ? "
uniform lowp sampler2D randomFunctionSource;" : "") + uniform lowp float horizontalSync;" : "") +
(fallBack && horizontal_sincronization !== 0 ? " (fallBack && flickering !== 0.0 ?"
uniform lowp float horizontal_sincronization;" : "") + uniform lowp float flickering;" : "") +
(fallBack && brightness_flickering !== 0.0 ?" (!fallBack && flickering !== 0 ? "
uniform lowp float brightness_flickering;" : "") + varying lowp float brightness;"
(!fallBack && brightness_flickering !== 0 ? " : "") +
varying lowp float brightness;" : "") + (!fallBack && horizontalSync !== 0 ? "
(!fallBack && horizontal_sincronization !== 0 ? " varying lowp float distortionScale;
varying lowp float horizontal_distortion;" : "") + varying lowp float distortionFreq;" : "") +
(glowing_line_strength !== 0 ? " (glowingLine !== 0 ? "
float randomPass(vec2 coords){ float randomPass(vec2 coords){
return fract(smoothstep(-0.2, 0.0, coords.y - 3.0 * fract(time * 0.0001))) * glowing_line_strength; return fract(smoothstep(-120.0, 0.0, coords.y - (virtual_resolution.y + 120.0) * fract(time * 0.00015)));
}" : "") + }" : "") +
"float rgb2grey(vec3 v){ "highp float getScanlineIntensity(vec2 coords) {
highp float result = 1.0;" +
(appSettings.rasterization != appSettings.no_rasterization ?
"float val = abs(sin(coords.y * virtual_resolution.y * "+Math.PI+"));
result *= mix(val, " + absSinAvg + ", rasterizationSmooth.y);" : "") +
(appSettings.rasterization == appSettings.pixel_rasterization ?
"val = abs(sin(coords.x * virtual_resolution.x * "+Math.PI+"));
result *= mix(val, " + absSinAvg + ", rasterizationSmooth.x);" : "") + "
return result;
}
float rgb2grey(vec3 v){
return dot(v, vec3(0.21, 0.72, 0.04)); return dot(v, vec3(0.21, 0.72, 0.04));
}" + }" +
@@ -178,87 +228,97 @@ ShaderEffect {
"vec2 cc = vec2(0.5) - qt_TexCoord0;" + "vec2 cc = vec2(0.5) - qt_TexCoord0;" +
"float distance = length(cc);" + "float distance = length(cc);" +
//FallBack if there are problem //FallBack if there are problems
(fallBack && (brightness_flickering || horizontal_sincronization) ? " (fallBack && (flickering !== 0.0 || horizontalSync !== 0.0) ?
vec2 randCoords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));" : "") + "vec2 initialCoords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));
vec4 initialNoiseTexel = texture2D(noiseSource, initialCoords);"
(fallBack && brightness_flickering !== 0.0 ? " : "") +
float brightness = 1.0 + (texture2D(randomFunctionSource, randCoords).g - 0.5) * brightness_flickering;" (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 && horizontal_sincronization !== 0.0 ? " (staticNoise ? "
float randval = 1.5 * texture2D(randomFunctionSource,(vec2(1.0) - randCoords) * 0.5).g; float noise = staticNoise;" : "") +
float negsinc = 1.0 - 0.6 * horizontal_sincronization;" + "
float horizontal_distortion = step(negsinc, randval) * (randval - negsinc) * 0.3*horizontal_sincronization;"
: "") +
(noise_strength ? " (screenCurvature !== 0 ? "
float noise = noise_strength;" : "") + float distortion = dot(cc, cc) * screenCurvature;
vec2 staticCoords = (qt_TexCoord0 - cc * (1.0 + distortion) * distortion);"
(screen_distorsion !== 0 ? "
float distortion = dot(cc, cc) * screen_distorsion;
vec2 coords = (qt_TexCoord0 - cc * (1.0 + distortion) * distortion);"
:" :"
vec2 coords = qt_TexCoord0;") + vec2 staticCoords = qt_TexCoord0;") +
(horizontal_sincronization !== 0 ? " "vec2 coords = staticCoords;" +
float h_distortion = 0.5 * sin(time*0.001 + coords.y*10.0*fract(time/10.0));
h_distortion += 0.5 * cos(time*0.04 + 0.03 + coords.y*50.0*fract(time/10.0 + 0.4)); (horizontalSync !== 0 ? "
coords.x = coords.x + h_distortion * horizontal_distortion;" + float dst = sin((coords.y + time * 0.001) * distortionFreq);
(noise_strength ? " coords.x += dst * distortionScale;" +
noise += horizontal_distortion;" : "") (staticNoise ? "
noise += distortionScale * 7.0;" : "")
: "") +
(jitter !== 0 || staticNoise !== 0 ?
"vec4 noiseTexel = texture2D(noiseSource, scaleNoiseSize * coords + vec2(fract(time / 51.0), fract(time / 237.0)));"
: "") + : "") +
(jitter !== 0 ? " (jitter !== 0 ? "
vec2 offset = vec2(texture2D(noiseSource, coords + fract(time / 57.0)).a, vec2 offset = vec2(noiseTexel.b, noiseTexel.a) - vec2(0.5);
texture2D(noiseSource, coords + fract(time / 251.0)).a) - 0.5;
vec2 txt_coords = coords + offset * jitter;" vec2 txt_coords = coords + offset * jitter;"
: "vec2 txt_coords = coords;") + : "vec2 txt_coords = coords;") +
"float color = 0.0;" + "float color = 0.0;" +
(noise_strength !== 0 ? " (staticNoise !== 0 ? "
float noiseVal = texture2D(noiseSource, qt_TexCoord0 + vec2(fract(time / 51.0), fract(time / 237.0))).a; float noiseVal = noiseTexel.a;
color += noiseVal * noise * (1.0 - distance * 1.3);" : "") + color += noiseVal * noise * (1.0 - distance * 1.3);" : "") +
(glowing_line_strength !== 0 ? " (glowingLine !== 0 ? "
color += randomPass(coords) * glowing_line_strength;" : "") + color += randomPass(coords * virtual_resolution) * glowingLine;" : "") +
"vec3 txt_color = texture2D(source, txt_coords).rgb;" +
"vec3 txt_color = texture2D(source, txt_coords).rgb; (burnIn !== 0 ? "
float greyscale_color = rgb2grey(txt_color) + color;" + vec4 txt_blur = texture2D(blurredSource, txt_coords);
txt_color = txt_color + txt_blur.rgb * txt_blur.a;"
: "") +
(chroma_color !== 0 ? "float greyscale_color = rgb2grey(txt_color) + color;" +
(rgb_shift !== 0 ? "
(chromaColor !== 0 ?
(rbgShift !== 0 ? "
float rgb_noise = abs(texture2D(noiseSource, vec2(fract(time/(1024.0 * 256.0)), fract(time/(1024.0*1024.0)))).a - 0.5); float rgb_noise = abs(texture2D(noiseSource, vec2(fract(time/(1024.0 * 256.0)), fract(time/(1024.0*1024.0)))).a - 0.5);
float rcolor = texture2D(source, txt_coords + vec2(0.1, 0.0) * rgb_shift * rgb_noise).r; float rcolor = texture2D(source, txt_coords + vec2(0.1, 0.0) * rbgShift * rgb_noise).r;
float bcolor = texture2D(source, txt_coords - vec2(0.1, 0.0) * rgb_shift * rgb_noise).b; float bcolor = texture2D(source, txt_coords - vec2(0.1, 0.0) * rbgShift * rgb_noise).b;
txt_color.r = rcolor; txt_color.r = rcolor;
txt_color.b = bcolor; txt_color.b = bcolor;
greyscale_color = 0.33 * (rcolor + bcolor);" : "") + greyscale_color = 0.33 * (rcolor + bcolor);" : "") +
"vec3 mixedColor = mix(font_color.rgb, txt_color * font_color.rgb, chroma_color); "vec3 mixedColor = mix(fontColor.rgb, txt_color * fontColor.rgb, chromaColor);
vec3 finalBackColor = mix(background_color.rgb, mixedColor, greyscale_color); vec3 finalBackColor = mix(backgroundColor.rgb, mixedColor, greyscale_color);
vec3 finalColor = mix(finalBackColor, font_color.rgb, color).rgb;" vec3 finalColor = mix(finalBackColor, fontColor.rgb, color).rgb;"
: :
"vec3 finalColor = mix(background_color.rgb, font_color.rgb, greyscale_color);") + "vec3 finalColor = mix(backgroundColor.rgb, fontColor.rgb, greyscale_color);") +
"finalColor *= texture2D(rasterizationSource, coords).a;" + "finalColor *= getScanlineIntensity(coords);" +
(bloom_strength !== 0 ? (bloom !== 0 ?
"vec4 bloomFullColor = texture2D(bloomSource, coords); "vec4 bloomFullColor = texture2D(bloomSource, coords);
vec3 bloomColor = bloomFullColor.rgb; vec3 bloomColor = bloomFullColor.rgb;
vec2 minBound = step(vec2(0.0), coords); float bloomAlpha = bloomFullColor.a;" +
vec2 maxBound = step(coords, vec2(1.0)); (chromaColor !== 0 ?
float bloomAlpha = bloomFullColor.a * minBound.x * minBound.y * maxBound.x * maxBound.y;" + "bloomColor = fontColor.rgb * mix(vec3(rgb2grey(bloomColor)), bloomColor, chromaColor);"
(chroma_color !== 0 ?
"bloomColor = font_color.rgb * mix(vec3(rgb2grey(bloomColor)), bloomColor, chroma_color);"
: :
"bloomColor = font_color.rgb * rgb2grey(bloomColor);") + "bloomColor = fontColor.rgb * rgb2grey(bloomColor);") +
"finalColor += bloomColor * bloom_strength * bloomAlpha;" "finalColor += bloomColor * bloom * bloomAlpha;"
: "") + : "") +
(brightness_flickering !== 0 ? " "finalColor *= smoothstep(-dispX, 0.0, staticCoords.x) - smoothstep(1.0, 1.0 + dispX, staticCoords.x);
finalColor *= smoothstep(-dispY, 0.0, staticCoords.y) - smoothstep(1.0, 1.0 + dispY, staticCoords.y);" +
(flickering !== 0 ? "
finalColor *= brightness;" : "") + finalColor *= brightness;" : "") +
"gl_FragColor = vec4(finalColor * screen_brightness, qt_Opacity);" + "gl_FragColor = vec4(finalColor * screen_brightness, qt_Opacity);" +

View File

@@ -22,6 +22,8 @@ import QtQuick 2.2
import QtQuick.Controls 1.1 import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1 import QtQuick.Layouts 1.1
import "Components"
RowLayout { RowLayout {
property alias value: slider.value property alias value: slider.value
property alias stepSize: slider.stepSize property alias stepSize: slider.stepSize
@@ -36,15 +38,7 @@ RowLayout {
stepSize: parent.stepSize stepSize: parent.stepSize
Layout.fillWidth: true Layout.fillWidth: true
} }
Text{ SizedLabel{
id: textfield text: Math.round(value * maxMultiplier) + "%"
text: formatNumber(Math.round(value * maxMultiplier))
}
function formatNumber(num) {
var n = "" + num;
while (n.length < 3) {
n = " " + n;
}
return n + "%";
} }
} }

View File

@@ -21,11 +21,11 @@
import QtQuick 2.2 import QtQuick 2.2
import QtQuick.LocalStorage 2.0 import QtQuick.LocalStorage 2.0
Item { QtObject {
property bool initialized: false property bool initialized: false
function getDatabase() { function getDatabase() {
return LocalStorage.openDatabaseSync("coololdterm", "1.0", "StorageDatabase", 100000); return LocalStorage.openDatabaseSync("coolretroterm", "1.0", "StorageDatabase", 100000);
} }
function initialize() { function initialize() {

View File

@@ -1,55 +1,132 @@
import QtQuick 2.2 import QtQuick 2.2
import QtGraphicalEffects 1.0
Item{ import "utils.js" as Utils
Item{
id: scalableContent ShaderTerminal{
width: parent.width * shadersettings.window_scaling property alias title: terminal.title
height: parent.height * shadersettings.window_scaling property alias terminalSize: terminal.terminalSize
id: mainShader
opacity: appSettings.windowOpacity * 0.3 + 0.7
blending: false
source: terminal.mainSource
blurredSource: terminal.blurredSource
dispX: (12 / width) * appSettings.windowScaling
dispY: (12 / height) * appSettings.windowScaling
virtual_resolution: terminal.virtualResolution
Loader{ Loader{
id: frame id: frame
anchors.fill: parent anchors.fill: parent
property real displacementLeft: item ? item.displacementLeft : 0
property real displacementTop: item ? item.displacementTop : 0
property real displacementRight: item ? item.displacementRight : 0
property real displacementBottom: item ? item.displacementBottom : 0
asynchronous: true
visible: status === Loader.Ready
z: 2.1 z: 2.1
source: shadersettings.frame_source source: appSettings.frameSource
} }
PreprocessedTerminal{ PreprocessedTerminal{
id: terminal id: terminal
anchors.fill: parent anchors.fill: parent
} }
ShaderTerminal{
id: shadercontainer
anchors.fill: parent
opacity: shadersettings.windowOpacity * 0.3 + 0.7
z: 1.9
}
}
// This is used to render the texture to a lower resolution then scale it up. // EFFECTS ////////////////////////////////////////////////////////////////
Loader{ Loader{
id: scalableContentSource id: bloomEffectLoader
active: shadersettings.window_scaling < 1 active: appSettings.bloom
asynchronous: true
width: parent.width * appSettings.bloomQuality
height: parent.height * appSettings.bloomQuality
sourceComponent: FastBlur{
radius: Utils.lint(16, 48, appSettings.bloomQuality * appSettings.windowScaling);
source: terminal.mainSource
transparentBorder: true
}
}
Loader{
id: bloomSourceLoader
active: appSettings.bloom !== 0
asynchronous: true
sourceComponent: ShaderEffectSource{ sourceComponent: ShaderEffectSource{
sourceItem: scalableContent id: _bloomEffectSource
sourceItem: bloomEffectLoader.item
hideSource: true hideSource: true
smooth: true smooth: true
} visible: false
}
Loader{
active: shadersettings.window_scaling < 1
anchors.fill: parent
sourceComponent: ShaderEffect{
property var source: scalableContentSource.item
} }
} }
// Terminal size overlay. Shown when terminal size changes. bloomSource: bloomSourceLoader.item
Loader{
id: sizeoverlayloader // This shader might be useful in the future. Since we used it only for a couple
z: 3 // of calculations is probably best to move those in the main shader. If in the future
anchors.centerIn: parent // we need to store another fullScreen channel this might be handy.
active: shadersettings.show_terminal_size
sourceComponent: SizeOverlay{ // ShaderEffect {
terminalSize: terminal.terminalSize // id: rasterizationEffect
} // width: parent.width
} // height: parent.height
// property real outColor: 0.0
// property real dispX: (5 / width) * appSettings.windowScaling
// property real dispY: (5 / height) * appSettings.windowScaling
// property size virtual_resolution: terminal.virtualResolution
// blending: false
// fragmentShader:
// "uniform lowp float qt_Opacity;" +
// "varying highp vec2 qt_TexCoord0;
// uniform highp vec2 virtual_resolution;
// uniform highp float dispX;
// uniform highp float dispY;
// uniform mediump float outColor;
// highp float getScanlineIntensity(vec2 coords) {
// highp float result = 1.0;" +
// (appSettings.rasterization != appSettings.no_rasterization ?
// "result *= abs(sin(coords.y * virtual_resolution.y * "+Math.PI+"));" : "") +
// (appSettings.rasterization == appSettings.pixel_rasterization ?
// "result *= abs(sin(coords.x * virtual_resolution.x * "+Math.PI+"));" : "") + "
// return result;
// }" +
// "void main() {" +
// "highp float color = getScanlineIntensity(qt_TexCoord0);" +
// "float distance = length(vec2(0.5) - qt_TexCoord0);" +
// "color = mix(color, 0.0, 1.2 * distance * distance);" +
// "color *= outColor + smoothstep(0.00, dispX, qt_TexCoord0.x) * (1.0 - outColor);" +
// "color *= outColor + smoothstep(0.00, dispY, qt_TexCoord0.y) * (1.0 - outColor);" +
// "color *= outColor + (1.0 - smoothstep(1.00 - dispX, 1.00, qt_TexCoord0.x)) * (1.0 - outColor);" +
// "color *= outColor + (1.0 - smoothstep(1.00 - dispY, 1.00, qt_TexCoord0.y)) * (1.0 - outColor);" +
// "gl_FragColor.a = color;" +
// "}"
// onStatusChanged: if (log) console.log(log) //Print warning messages
// }
// rasterizationSource: ShaderEffectSource{
// id: rasterizationEffectSource
// sourceItem: rasterizationEffect
// hideSource: true
// smooth: true
// wrapMode: ShaderEffectSource.ClampToEdge
// visible: false
// }
} }

View File

@@ -27,13 +27,13 @@ Timer{
NumberAnimation on time { NumberAnimation on time {
from: 0 from: 0
to: 100000 to: 100000
running: shadersettings.fps === 0 && enableTimer running: appSettings.fps === 0 && enableTimer
duration: 100000 duration: 100000
loops: Animation.Infinite loops: Animation.Infinite
} }
onTriggered: time += interval onTriggered: time += interval
running: shadersettings.fps !== 0 && enableTimer running: appSettings.fps !== 0 && enableTimer
interval: Math.round(1000 / shadersettings.fps) interval: Math.round(1000 / appSettings.fps)
repeat: true repeat: true
} }

View File

@@ -1,13 +1,49 @@
Copyright (c) 2011-2012, Ricardo Banffy. Copyright (c) 2011-2017, Ricardo Banffy.
Copyright (c) 1993-2011, Paul Mattes. Copyright (c) 1993-2011, Paul Mattes.
Copyright (c) 2004-2005, Don Russell. Copyright (c) 2004-2005, Don Russell.
Copyright (c) 2004, Dick Altenbern. Copyright (c) 2004, Dick Altenbern.
Copyright (c) 1990, Jeff Sparkes. Copyright (c) 1990, Jeff Sparkes.
Copyright (c) 1989, Georgia Tech Research Corporation (GTRC), Atlanta, GA 30332. Copyright (c) 1989, Georgia Tech Research Corporation (GTRC), Atlanta, GA 30332.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistribution and use in source and binary forms, with or without
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. modification, are permitted provided that the following conditions are
Neither the names of Ricardo Banffy, Paul Mattes, Don Russell, Dick Altenbern, Jeff Sparkes, GTRC nor the names of their contributors may be used to endorse or promote products derived from this software without specific prior written permission. met:
THIS SOFTWARE IS PROVIDED BY PAUL MATTES, DON RUSSELL, DICK ALTENBERN, JEFF SPARKES AND GTRC "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL PAUL MATTES, DON RUSSELL, DICK ALTENBERN, JEFF SPARKES OR GTRC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of Ricardo Banffy, Paul Mattes, Don Russell,
Dick Altenbern, Jeff Sparkes, GTRC nor the names of their contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL RICARDO BANFFY, PAUL MATTES, DON RUSSELL, DICK ALTENBERN, JEFF
SPARKES OR GTRC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The Debian Logo glyph is based on the Debian Open Use Logo and is
Copyright (c) 1999 Software in the Public Interest, Inc., and it is
incorporated here under the terms of the Creative Commons
Attribution-ShareAlike 3.0 Unported License. The logo is released
under the terms of the GNU Lesser General Public License, version 3 or
any later version, or, at your option, of the Creative Commons
Attribution-ShareAlike 3.0 Unported License.
Ubuntu, the Ubuntu logo and the Circle of Friends symbol are
registered trademarks of Canonical Ltd.
The Fontforge SFD font description file is optionally licensed under
the SIL Open Font License v1.1 with no Reserved Font Name. This
license is available with a FAQ at http://scripts.sil.org/OFL.

View File

@@ -1,73 +1,101 @@
3270font: A font for the nostalgic 3270font: A font for the nostalgic
================================== ==================================
https://github.com/rbanffy/3270font
![Screenshot](https://raw.github.com/wiki/rbanffy/3270font/emacs.png) ![Travis-CI](https://api.travis-ci.org/rbanffy/3270font.svg)
![Screenshot](https://raw.githubusercontent.com/wiki/rbanffy/3270font/emacs.png)
![Sample](https://raw.githubusercontent.com/wiki/rbanffy/3270font/3270Medium_sample.png)
A little bit of history A little bit of history
----------------------- -----------------------
This font is derived from the x3270 font, which, in turn, was translated This font is derived from the x3270 font, which, in turn, was
from the one in Georgia Tech's 3270tool, which was itself hand-copied translated from the one in Georgia Tech's 3270tool, which was itself
from a 3270 terminal. I built it because I felt terminals deserve to be hand-copied from a 3270 series terminal. I built it because I felt
pretty. The .sfd font file contains a x3270 bitmap font that was used terminals deserve to be pretty. The .sfd font file contains a x3270
for guidance. bitmap font that was used for guidance.
![Using with the Cathode terminal program] ![Using with the cool-old-tern (now cool-retro-term) terminal program](
(https://raw.github.com/wiki/rbanffy/3270font/cathode.png) https://raw.githubusercontent.com/wiki/rbanffy/3270font/cool-retro-term.png)
Getting it
----------
If you are running Debian or Ubuntu and you don't want to mess with
building your font files, you can simply `apt-get install fonts-3270`
(It's available from the Debian
(https://packages.debian.org/sid/fonts/fonts-3270) and Ubuntu
(http://packages.ubuntu.com/zesty/fonts-3270) package repos at
https://packages.debian.org/sid/fonts/fonts-3270 and
http://packages.ubuntu.com/xenial/fonts/fonts-3270, although the
packaged version may not be the latest version, but it's good enough for
most purposes. For those who don't have the luxury of a proper
system-managed package, Adobe Type 1, TTF, OTF and WOFF versions are
available for download on
http://s3.amazonaws.com/3270font/3270_fonts_d250fd9.zip (although this
URL may not always reflect the latest version).
![ASCII is so 60's](
https://raw.githubusercontent.com/wiki/rbanffy/3270font/cyrillic.png)
The format The format
---------- ----------
This font was built with FontForge. You'll need it if you want to The "source" file is edited using FontForge. You'll need it if you want
generate fonts for your platform. On most civilized operating systems, to generate fonts for your platform. On most civilized operating
you can simply `apt-get install fontforge`, `yum install fontforge` or systems, you can simply `apt-get install fontforge`, `yum install
even `port install fontforge`. On others, you may need to grab your copy fontforge` or even `port install fontforge`. On others, you may need to
from http://fontforge.org/. I encourage you to drop by and read the grab your copy from http://fontforge.org/. I encourage you to drop by
tutorials. and read the tutorials.
![Powerline-shell compatible!] ![Powerline-shell compatible!](
(https://raw.github.com/wiki/rbanffy/3270font/powerline.png) https://raw.githubusercontent.com/wiki/rbanffy/3270font/powerline.png)
Adobe Type 1, TTF, OTF and WOFF versions are available for download on ![Using it on OSX (don't forget to turn antialiasing on)](https://raw.githubusercontent.com/wiki/rbanffy/3270font/osx_terminal.png)
http://s3.amazonaws.com/rbanffy/3270_fonts.zip for those who would just
like to use them.
![Using it on OSX] If you are running Windows, you'll probably need something like
(https://raw.github.com/wiki/rbanffy/3270font/osx_terminal.png) Cygwin, but, in the end, the font works correctly (with some very
minor hinting issues).
Generating derived files ![Works on Windows](
------------------------ https://raw.githubusercontent.com/wiki/rbanffy/3270font/windows_7.png)
Generating usable font files
----------------------------
The easiest way to generate the font files your computer can use is to
run `make all` (if you are running Ubuntu or Debian, `make install` will
install them too). Using `make help` will offer a handy list of options.
The script `generate_derived.pe` calls FontForge and generates The script `generate_derived.pe` calls FontForge and generates
PostScript, OTF, TTF and WOFF versions of the base font, as well as a PostScript, OTF, TTF and WOFF versions of the base font, as well as a
slightly more condensed .sfd file with the base font narrowed to 488 slightly more condensed .sfd file with the base font narrowed to 488
units, with no glyph rescaling and its corresponding PostScript, TTF, units, with no glyph rescaling (or cropping - we need to fix that) and
OTF and WOFF versions. its corresponding PostScript, TTF, OTF and WOFF versions.
![For your favorite editor](
https://raw.githubusercontent.com/wiki/rbanffy/3270font/symbols.png)
Contributing Contributing
------------ ------------
I don't think GitHub's pull-request mechanism is FontForge-friendly. If I fear GitHub's pull-request mechanism may not be very
you want to contribute (there are a lot of missing glyphs, such as the FontForge-friendly. If you want to contribute (there are a lot of
APL set and most non-latin alphabets which most likely were never built missing glyphs, such as the APL set and most non-latin alphabets which
into 3270 terminals), get in touch and we will figure out how to do it most likely were never built into 3270 terminals), the best workflow
right. would be to make add the encoding slots (if needed), add/make the
changes, reencode it in "Unicode, Full", compact it and validate
Preserving history it. Check if the `git diff` command gives out something sensible (does
------------------ not change things you didn't intend to) and make a pull request. If, in
doubt, get in touch and we will figure out how to do it right.
I regard the history of electronic computing a very important part of
our civilization's history. Consider donating to entities that help
preserve it, such as the Computer History Museum
(http://www.computerhistory.org/), the IT History Society
(http://ithistory.org/) and many others around the world. If you have a
historically significant piece of technology in your closet or garage,
consider contacting a local technology or industrial-design-oriented
museum for advice.
Known problems Known problems
-------------- --------------
I have received errors when installing the OTF, TTF, and PFM fonts on Not all symbols in the 3270 charset have Unicode counterparts. When
Windows 7 and 8 (didn't try others). possible, they are duplicated in the Unicode space. The 3270-only
symbols are at the end of the font, along with some glyphs useful for
building others.
Please refer to http://x3270.bgp.nu/Charset.html for a complete map.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,94 @@
Copyright (c) 2013, Pablo Caro <me AT pcaro DOT es> - http://pcaro.es/
with Reserved Font Name Hermit.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

Binary file not shown.

View File

@@ -0,0 +1,13 @@
monaco.ttf
==========
The original monaco.ttf improved: add some special characters (which are from "DejaVu Sans Mono")
In my work environment, I need connect to Linux system from Windows system remotely using SecureCRT or Putty, and edit files using VIM tools. So I need one beautiful font in SecureCRT / Putty.
In windows system, there are some original fonts are beautiful, for example "Consolas", but they can't support some special characters, for example: ▸, ↪, ⌴. Because they are original fonts in my Windows, I don't want to modify them.
I get "Monaco" from web. It is tiny and beautiful. But it also can't support those special characters.
So I add the characters by myself and share it.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1 @@
dopustz:-480

View File

@@ -0,0 +1,22 @@
ProFont
MIT License
Copyright (c) 2014 Carl Osterwald, Stephen C. Gilardi, Andrew Welch
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@@ -0,0 +1,31 @@
WHAT IS THIS?
This is ProFont TrueType, converted to Windows TrueType format
by Mike Smith, with some tweaks added by "ardu".
Modifications include:
- A Euro character
- Missing characters from the Latin 1 code page
- Full support for CodePage 850. These are mostly the famous
block/box characters you know from DOS. Very useful if you use
Mightnight Commander through PuTTY.
- Fixed metrics so that point size of 9 works correctly. Until now
you had to select 7 to obtain the native point size of 9.
- Added some quick&dirty hinting for point size of 9. Most characters
now match closely the look of the bitmap version.
Don't expect it to look good on anything else than Windows...
To get the full original Distribution, other ProFont builds
and more information
go to <http://tobiasjung.name/profont/>
DISCLAIMER
See LICENSE file
Tobias Jung
January 2014
profont@tobiasjung.name

View File

@@ -0,0 +1,7 @@
Copyright (c) 2004, 2005 Tristan Grimmer
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Binary file not shown.

View File

@@ -14,12 +14,11 @@ TerminalFrame{
imageSource: "../images/black-frame.png" imageSource: "../images/black-frame.png"
normalsSource: "../images/black-frame-normals.png" normalsSource: "../images/black-frame-normals.png"
distortionCoefficient: 1.9
displacementLeft: 80.0 displacementLeft: 80.0
displacementTop: 65.0 displacementTop: 65.0
displacementRight: 80.0 displacementRight: 80.0
displacementBottom: 65.0 displacementBottom: 65.0
shaderString: "FrameShader.qml" staticDiffuseComponent: 1.0
dinamycDiffuseComponent: 0.6
} }

View File

@@ -1,19 +0,0 @@
import QtQuick 2.2
import "utils"
TerminalFrame{
id: frame
z: 2.1
anchors.fill: parent
addedWidth: 0
addedHeight: 0
borderLeft: 0
borderRight: 0
borderTop: 0
borderBottom: 0
displacementLeft: 0
displacementTop: 0
displacementRight: 0
displacementBottom: 0
}

View File

@@ -14,12 +14,11 @@ TerminalFrame{
imageSource: "../images/screen-frame.png" imageSource: "../images/screen-frame.png"
normalsSource: "../images/screen-frame-normals.png" normalsSource: "../images/screen-frame-normals.png"
distortionCoefficient: 1.5
displacementLeft: 55 displacementLeft: 55
displacementTop: 50 displacementTop: 50
displacementRight: 55 displacementRight: 55
displacementBottom: 50 displacementBottom: 50
shaderString: "FrameShader.qml" staticDiffuseComponent: 1.0
dinamycDiffuseComponent: 0.6
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 507 KiB

After

Width:  |  Height:  |  Size: 498 KiB

View File

@@ -1,102 +0,0 @@
import QtQuick 2.2
import QtGraphicalEffects 1.0
ShaderEffect{
property variant source: framesource
property variant normals: framesourcenormals
property real screen_distorsion: shadersettings.screen_distortion * framecontainer.distortionCoefficient
property real ambient_light: shadersettings.ambient_light
property color font_color: shadersettings.font_color
property color background_color: shadersettings.background_color
property real brightness: shadersettings.brightness * 1.5 + 0.5
property bool frameReflections: shadersettings.frameReflections
property variant lightSource: reflectionEffectSourceLoader.item
property real chroma_color: shadersettings.chroma_color
Loader{
id: reflectionEffectLoader
width: parent.width * 0.33
height: parent.height * 0.33
active: frameReflections
sourceComponent: FastBlur{
id: frameReflectionEffect
radius: 128
source: terminal.kterminal
smooth: false
}
}
Loader{
id: reflectionEffectSourceLoader
active: frameReflections
sourceComponent: ShaderEffectSource{
id: frameReflectionSource
sourceItem: reflectionEffectLoader.item
hideSource: true
smooth: true
}
}
blending: true
fragmentShader: "
uniform sampler2D source;
uniform sampler2D normals;
uniform highp float screen_distorsion;
uniform highp float ambient_light;
uniform highp float qt_Opacity;
uniform lowp float chroma_color;" +
(frameReflections ?
"uniform sampler2D lightSource;" : "") + "
uniform vec4 font_color;
uniform vec4 background_color;
varying lowp float brightness;
varying highp vec2 qt_TexCoord0;
vec2 distortCoordinates(vec2 coords){
vec2 cc = coords - vec2(0.5);
float dist = dot(cc, cc) * screen_distorsion;
return (coords + cc * (1.0 + dist) * dist);
}
float rgb2grey(vec3 v){
return dot(v, vec3(0.21, 0.72, 0.04));
}
void main(){
vec2 coords = distortCoordinates(qt_TexCoord0);
vec4 txt_color = texture2D(source, coords);
vec4 txt_normal = texture2D(normals, coords);
vec3 normal = normalize(txt_normal.rgb * 2.0 - 1.0);
vec3 light_direction = normalize(vec3(0.5, 0.5, 0.0) - vec3(qt_TexCoord0, 0.0));
float dotProd = dot(normal, light_direction);" +
(frameReflections ? "
vec3 realLightColor = texture2D(lightSource, coords).rgb;
float screenLight = rgb2grey(realLightColor);
float clampedDotProd = clamp(dotProd, 0.05, 1.0);
float diffuseReflection = clamp(screenLight * 1.5 * clampedDotProd, 0.0, 0.35);
float reflectionAlpha = mix(1.0, 0.90, dotProd);
vec3 lightColor = mix(font_color.rgb * screenLight, font_color.rgb * realLightColor, chroma_color);"
: "
float diffuseReflection = 0.0;
float reflectionAlpha = 1.0;
vec3 lightColor = font_color.rgb;") + "
vec3 back_color = background_color.rgb * (0.2 + 0.5 * dotProd);
vec3 front_color = lightColor * (0.05 + diffuseReflection);
vec4 dark_color = vec4((back_color + front_color) * txt_normal.a, txt_normal.a * reflectionAlpha);
gl_FragColor = mix(dark_color, txt_color, ambient_light);
}"
onStatusChanged: if (log) console.log(log) //Print warning messages
}

View File

@@ -1,23 +0,0 @@
import QtQuick 2.2
ShaderEffect{
property variant source: framesource
property real screen_distorsion: shadersettings.screen_distortion
fragmentShader: "
uniform sampler2D source;
uniform highp float screen_distorsion;
varying highp vec2 qt_TexCoord0;
vec2 distortCoordinates(vec2 coords){
vec2 cc = coords - vec2(0.5);
float dist = dot(cc, cc) * screen_distorsion;
return (coords + cc * (1.0 + dist) * dist);
}
void main(){
vec2 coords = distortCoordinates(qt_TexCoord0);
float inside = texture2D(source, coords).a;
gl_FragColor = vec4(vec3(0.0), inside);
}"
}

View File

@@ -1,9 +1,12 @@
import QtQuick 2.2 import QtQuick 2.2
import QtGraphicalEffects 1.0
import "../../utils.js" as Utils
Item{ Item{
id: framecontainer id: framecontainer
property int textureWidth: terminalWindow.width property int textureWidth: terminalContainer.width / appSettings.windowScaling
property int textureHeight: terminalWindow.height property int textureHeight: terminalContainer.height / appSettings.windowScaling
property int addedWidth property int addedWidth
property int addedHeight property int addedHeight
@@ -21,7 +24,9 @@ Item{
property real displacementRight property real displacementRight
property real displacementBottom property real displacementBottom
property real distortionCoefficient // Material coefficients
property real staticDiffuseComponent: 0.7
property real dinamycDiffuseComponent: 1.0
BorderImage{ BorderImage{
id: frameimage id: frameimage
@@ -56,17 +61,159 @@ Item{
sourceItem: frameimage sourceItem: frameimage
hideSource: true hideSource: true
textureSize: Qt.size(parent.width, parent.height) textureSize: Qt.size(parent.width, parent.height)
sourceRect: Qt.rect(-1, -1, frameimage.width + 2, frameimage.height + 2)
visible: false
} }
ShaderEffectSource{ ShaderEffectSource{
id: framesourcenormals id: framesourcenormals
sourceItem: framenormals sourceItem: framenormals
hideSource: true hideSource: true
textureSize: Qt.size(parent.width, parent.height) textureSize: Qt.size(parent.width, parent.height)
sourceRect: Qt.rect(-1, -1, framenormals.width + 2, framenormals.height + 2)
visible: false
} }
// REFLECTIONS ////////////////////////////////////////////////////////////
Loader{ Loader{
id: reflectionEffectLoader
width: parent.width * 0.33
height: parent.height * 0.33
active: appSettings.frameReflections
sourceComponent: FastBlur{
id: frameReflectionEffect
radius: 128
source: terminal.mainSource
smooth: false
}
}
Loader{
id: reflectionEffectSourceLoader
active: appSettings.frameReflections
sourceComponent: ShaderEffectSource{
id: frameReflectionSource
sourceItem: reflectionEffectLoader.item
hideSource: true
smooth: true
visible: false
}
}
// This texture represent the static light component.
ShaderEffect {
id: staticLight
property alias source: framesource
property alias normals: framesourcenormals
property real screenCurvature: appSettings.screenCurvature
property size curvature_coefficients: Qt.size(width / mainShader.width, height / mainShader.height)
property real ambientLight: appSettings.ambientLight * 0.9 + 0.1
property color fontColor: appSettings.fontColor
property color backgroundColor: appSettings.backgroundColor
property color reflectionColor: Utils.mix(fontColor, backgroundColor, 0.2)
property real diffuseComponent: staticDiffuseComponent
anchors.centerIn: parent anchors.centerIn: parent
width: parent.width + (addedWidth / textureWidth) * parent.width width: parent.width + (addedWidth / textureWidth) * parent.width
height: parent.height + (addedHeight / textureHeight) * parent.height height: parent.height + (addedHeight / textureHeight) * parent.height
source: shaderString
blending: true
fragmentShader: "
#ifdef GL_ES
precision mediump float;
#endif
uniform highp sampler2D normals;
uniform highp sampler2D source;
uniform lowp float screenCurvature;
uniform highp vec2 curvature_coefficients;
uniform lowp float ambientLight;
uniform highp float qt_Opacity;
uniform lowp vec4 reflectionColor;
uniform lowp float diffuseComponent;
varying highp vec2 qt_TexCoord0;
vec2 distortCoordinates(vec2 coords){
vec2 cc = (coords - vec2(0.5)) * curvature_coefficients;
float dist = dot(cc, cc) * screenCurvature;
return (coords + cc * (1.0 + dist) * dist);
}
float rgb2grey(vec3 v){
return dot(v, vec3(0.21, 0.72, 0.04));
}
void main(){
vec2 coords = distortCoordinates(qt_TexCoord0);
vec4 txtColor = texture2D(source, coords);
vec4 txtNormal = texture2D(normals, coords);
vec3 normal = normalize(txtNormal.rgb * 2.0 - 1.0);
vec2 lightDirection = normalize(vec2(0.5, 0.5) - coords);
float dotProd = dot(normal, vec3(lightDirection, 0.0)) * diffuseComponent * txtNormal.a;
vec3 darkColor = dotProd * reflectionColor.rgb;
gl_FragColor = vec4(mix(darkColor, txtColor.rgb, ambientLight), dotProd);
}
"
onStatusChanged: if (log) console.log(log) //Print warning messages
}
ShaderEffectSource {
id: staticLightSource
sourceItem: staticLight
hideSource: true
anchors.fill: staticLight
live: true
}
Loader{
id: dynamicLightLoader
anchors.fill: staticLight
active: appSettings.frameReflections
sourceComponent: ShaderEffect {
property ShaderEffectSource lightMask: staticLightSource
property ShaderEffectSource reflectionSource: reflectionEffectSourceLoader.item
property real diffuseComponent: dinamycDiffuseComponent
property real chromaColor: appSettings.chromaColor
property color fontColor: appSettings.fontColor
visible: true
blending: true
fragmentShader: "
#ifdef GL_ES
precision mediump float;
#endif
uniform sampler2D lightMask;
uniform sampler2D reflectionSource;
uniform lowp float diffuseComponent;
uniform lowp float chromaColor;
uniform highp vec4 fontColor;
uniform highp float qt_Opacity;
varying highp vec2 qt_TexCoord0;
float rgb2grey(vec3 v){
return dot(v, vec3(0.21, 0.72, 0.04));
}
void main() {
float alpha = texture2D(lightMask, qt_TexCoord0).a * diffuseComponent;
vec3 reflectionColor = texture2D(reflectionSource, qt_TexCoord0).rgb;
vec3 color = fontColor.rgb * rgb2grey(reflectionColor);" +
(chromaColor !== 0 ?
"color = mix(color, fontColor.rgb * reflectionColor, chromaColor);"
: "") +
"gl_FragColor = vec4(color, 1.0) * alpha;
}
"
onStatusChanged: if (log) console.log(log) //Print warning messages
}
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 608 KiB

View File

@@ -28,21 +28,42 @@ ApplicationWindow{
width: 1024 width: 1024
height: 768 height: 768
// Save window properties automatically
onXChanged: appSettings.x = x
onYChanged: appSettings.y = y
onWidthChanged: appSettings.width = width
onHeightChanged: appSettings.height = height
// Load saved window geometry and show the window
Component.onCompleted: {
appSettings.handleFontChanged();
x = appSettings.x
y = appSettings.y
width = appSettings.width
height = appSettings.height
visible = true
}
minimumWidth: 320 minimumWidth: 320
minimumHeight: 240 minimumHeight: 240
visible: true visible: false
property bool fullscreen: shadersettings.fullscreen property bool fullscreen: appSettings.fullscreen
onFullscreenChanged: visibility = (fullscreen ? Window.FullScreen : Window.Windowed) onFullscreenChanged: visibility = (fullscreen ? Window.FullScreen : Window.Windowed)
//Workaround: if menubar is assigned ugly margins are visible. //Workaround: Without __contentItem a ugly thin border is visible.
menuBar: Qt.platform.os === "osx" menuBar: CRTMainMenuBar{
? defaultMenuBar id: mainMenu
: shadersettings.showMenubar ? defaultMenuBar : null visible: (Qt.platform.os === "osx" || appSettings.showMenubar)
__contentItem.visible: mainMenu.visible
}
color: "#00000000" color: "#00000000"
title: qsTr("cool-retro-term") title: terminalContainer.title || qsTr("cool-retro-term")
Action { Action {
id: showMenubarAction id: showMenubarAction
@@ -50,72 +71,77 @@ ApplicationWindow{
enabled: Qt.platform.os !== "osx" enabled: Qt.platform.os !== "osx"
shortcut: "Ctrl+Shift+M" shortcut: "Ctrl+Shift+M"
checkable: true checkable: true
checked: shadersettings.showMenubar checked: appSettings.showMenubar
onTriggered: shadersettings.showMenubar = !shadersettings.showMenubar onTriggered: appSettings.showMenubar = !appSettings.showMenubar
} }
Action { Action {
id: fullscreenAction id: fullscreenAction
text: qsTr("Fullscreen") text: qsTr("Fullscreen")
enabled: Qt.platform.os !== "osx" enabled: Qt.platform.os !== "osx"
shortcut: "Alt+F11" shortcut: "Alt+F11"
onTriggered: shadersettings.fullscreen = !shadersettings.fullscreen; onTriggered: appSettings.fullscreen = !appSettings.fullscreen;
checkable: true checkable: true
checked: shadersettings.fullscreen checked: appSettings.fullscreen
} }
Action { Action {
id: quitAction id: quitAction
text: qsTr("Quit") text: qsTr("Quit")
shortcut: "Ctrl+Shift+Q" shortcut: "Ctrl+Shift+Q"
onTriggered: terminalWindow.close(); onTriggered: Qt.quit();
} }
Action{ Action{
id: showsettingsAction id: showsettingsAction
text: qsTr("Settings") text: qsTr("Settings")
onTriggered: settingswindow.show(); onTriggered: {
settingswindow.show();
settingswindow.requestActivate();
settingswindow.raise();
}
} }
Action{ Action{
id: copyAction id: copyAction
text: qsTr("Copy") text: qsTr("Copy")
shortcut: "Ctrl+Shift+C" shortcut: Qt.platform.os === "osx" ? StandardKey.Copy : "Ctrl+Shift+C"
onTriggered: terminal.copyClipboard()
} }
Action{ Action{
id: pasteAction id: pasteAction
text: qsTr("Paste") text: qsTr("Paste")
shortcut: "Ctrl+Shift+V" shortcut: Qt.platform.os === "osx" ? StandardKey.Paste : "Ctrl+Shift+V"
onTriggered: terminal.pasteClipboard()
} }
Action{ Action{
id: zoomIn id: zoomIn
text: qsTr("Zoom In") text: qsTr("Zoom In")
shortcut: "Ctrl++" shortcut: "Ctrl++"
onTriggered: shadersettings.incrementScaling(); onTriggered: appSettings.incrementScaling();
} }
Action{ Action{
id: zoomOut id: zoomOut
text: qsTr("Zoom Out") text: qsTr("Zoom Out")
shortcut: "Ctrl+-" shortcut: "Ctrl+-"
onTriggered: shadersettings.decrementScaling(); onTriggered: appSettings.decrementScaling();
} }
Action{ Action{
id: showAboutAction id: showAboutAction
text: qsTr("About") text: qsTr("About")
onTriggered: { onTriggered: {
aboutDialog.show(); aboutDialog.show();
aboutDialog.requestActivate();
aboutDialog.raise();
} }
} }
CRTMainMenuBar{
id: defaultMenuBar
}
ApplicationSettings{ ApplicationSettings{
id: shadersettings id: appSettings
}
TimeManager{
id: timeManager
enableTimer: terminalWindow.visible
} }
TerminalContainer{ TerminalContainer{
anchors.fill: parent 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
}
} }
SettingsWindow{ SettingsWindow{
id: settingswindow id: settingswindow
@@ -125,5 +151,18 @@ ApplicationWindow{
id: aboutDialog id: aboutDialog
visible: false visible: false
} }
Component.onCompleted: shadersettings.handleFontChanged(); Loader{
anchors.centerIn: parent
active: appSettings.showTerminalSize
sourceComponent: SizeOverlay{
z: 3
terminalSize: terminalContainer.terminalSize
}
}
onClosing: {
// OSX Since we are currently supporting only one window
// quit the application when it is closed.
if (Qt.platform.os === "osx")
Qt.quit()
}
} }

View File

@@ -1,17 +1,13 @@
<RCC> <RCC>
<qresource prefix="/"> <qresource prefix="/">
<file>frames/BlackRoughFrame.qml</file> <file>frames/BlackRoughFrame.qml</file>
<file>frames/NoFrame.qml</file>
<file>frames/images/black-frame.png</file> <file>frames/images/black-frame.png</file>
<file>frames/images/screen-frame-normals.png</file> <file>frames/images/screen-frame-normals.png</file>
<file>frames/images/black-frame-normals.png</file> <file>frames/images/black-frame-normals.png</file>
<file>frames/images/screen-frame.png</file> <file>frames/images/screen-frame.png</file>
<file>frames/images/black-frame-original.png</file> <file>frames/images/black-frame-original.png</file>
<file>frames/images/randfunction.png</file>
<file>frames/images/screen-frame-original.png</file> <file>frames/images/screen-frame-original.png</file>
<file>frames/WhiteSimpleFrame.qml</file> <file>frames/WhiteSimpleFrame.qml</file>
<file>frames/utils/FrameShader.qml</file>
<file>frames/utils/NoFrameShader.qml</file>
<file>frames/utils/TerminalFrame.qml</file> <file>frames/utils/TerminalFrame.qml</file>
<file>SizeOverlay.qml</file> <file>SizeOverlay.qml</file>
<file>ShaderTerminal.qml</file> <file>ShaderTerminal.qml</file>
@@ -32,40 +28,29 @@
<file>main.qml</file> <file>main.qml</file>
<file>SettingsTerminalTab.qml</file> <file>SettingsTerminalTab.qml</file>
<file>FontScanlines.qml</file> <file>FontScanlines.qml</file>
<file>fonts/1982-commodore64/C64_Pro_v1.0-STYLE.ttf</file>
<file>fonts/1982-commodore64/license.txt</file>
<file>fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf</file> <file>fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf</file>
<file>fonts/1982-commodore64/C64_Elite_Mono_v1.0-STYLE.ttf</file>
<file>fonts/1982-commodore64/C64_User_Mono_v1.0-STYLE.ttf</file>
<file>fonts/1982-commodore64/C64_User_v1.0-STYLE.ttf</file>
<file>fonts/1977-apple2/FreeLicense.txt</file>
<file>fonts/1977-apple2/PRNumber3.ttf</file>
<file>fonts/1977-apple2/PrintChar21.ttf</file> <file>fonts/1977-apple2/PrintChar21.ttf</file>
<file>fonts/1971-ibm-3278/README.md</file>
<file>fonts/1971-ibm-3278/LICENSE.txt</file>
<file>fonts/1971-ibm-3278/3270Medium.ttf</file> <file>fonts/1971-ibm-3278/3270Medium.ttf</file>
<file>fonts/1985-atari-st/AtariST8x16SystemFont.ttf</file> <file>fonts/1985-atari-st/AtariST8x16SystemFont.ttf</file>
<file>fonts/modern-terminus/TerminusTTF-Bold-4.38.2.ttf</file>
<file>fonts/modern-terminus/TerminusTTF-4.38.2.ttf</file> <file>fonts/modern-terminus/TerminusTTF-4.38.2.ttf</file>
<file>fonts/1977-commodore-pet/FreeLicense.txt</file>
<file>fonts/1977-commodore-pet/COMMODORE_PET_128_2y.ttf</file>
<file>fonts/1977-commodore-pet/COMMODORE_PET.ttf</file> <file>fonts/1977-commodore-pet/COMMODORE_PET.ttf</file>
<file>fonts/1977-commodore-pet/COMMODORE_PET_64_2y.ttf</file>
<file>fonts/1977-commodore-pet/COMMODORE_PET_2y.ttf</file>
<file>fonts/1977-commodore-pet/COMMODORE_PET_64.ttf</file>
<file>fonts/1977-commodore-pet/COMMODORE_PET_128.ttf</file>
<file>fonts/1977-commodore-pet/COMMODORE_PET_2x.ttf</file>
<file>fonts/1979-atari-400-800/ReadMe.rtf</file>
<file>fonts/1979-atari-400-800/ATARI400800_original.TTF</file> <file>fonts/1979-atari-400-800/ATARI400800_original.TTF</file>
<file>fonts/1979-atari-400-800/ATARI400800_squared.TTF</file>
<file>fonts/1979-atari-400-800/ATARI400800_rounded.TTF</file>
<file>fonts/1985-ibm-pc-vga/Perfect DOS VGA 437 Win.ttf</file> <file>fonts/1985-ibm-pc-vga/Perfect DOS VGA 437 Win.ttf</file>
<file>fonts/1985-ibm-pc-vga/Perfect DOS VGA 437.ttf</file>
<file>fonts/1985-ibm-pc-vga/dos437.txt</file>
<file>Storage.qml</file> <file>Storage.qml</file>
<file>CRTMainMenuBar.qml</file> <file>CRTMainMenuBar.qml</file>
<file>SettingsPerformanceTab.qml</file> <file>SettingsPerformanceTab.qml</file>
<file>TerminalContainer.qml</file> <file>TerminalContainer.qml</file>
<file>images/crt256.png</file> <file>images/crt256.png</file>
<file>utils.js</file>
<file>images/allNoise512.png</file>
<file>fonts/modern-proggy-tiny/ProggyTiny.ttf</file>
<file>fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf</file>
<file>fonts/modern-monaco/monaco.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>
</qresource> </qresource>
</RCC> </RCC>

94
app/qml/utils.js Normal file
View File

@@ -0,0 +1,94 @@
.pragma library
function clamp(x, min, max) {
if (x <= min)
return min;
if (x >= max)
return max;
return x;
}
function lint(a, b, t) {
return (1 - t) * a + (t) * b;
}
function mix(c1, c2, alpha){
return Qt.rgba(c1.r * alpha + c2.r * (1-alpha),
c1.g * alpha + c2.g * (1-alpha),
c1.b * alpha + c2.b * (1-alpha),
c1.a * alpha + c2.a * (1-alpha))
}
function strToColor(s){
var r = parseInt(s.substring(1,3), 16) / 256;
var g = parseInt(s.substring(3,5), 16) / 256;
var b = parseInt(s.substring(5,7), 16) / 256;
return Qt.rgba(r, g, b, 1.0);
}
/* Tokenizes a command into program and arguments, taking into account quoted
* strings and backslashes.
* Based on GLib's tokenizer, used by Gnome Terminal
*/
function tokenizeCommandLine(s){
var args = [];
var currentToken = "";
var quoteChar = "";
var escaped = false;
var nextToken = function() {
args.push(currentToken);
currentToken = "";
}
var appendToCurrentToken = function(c) {
currentToken += c;
}
for (var i = 0; i < s.length; i++) {
// char followed by backslash, append literally
if (escaped) {
escaped = false;
appendToCurrentToken(s[i]);
// char inside quotes, either close or append
} else if (quoteChar) {
escaped = s[i] === '\\';
if (quoteChar === s[i]) {
quoteChar = "";
nextToken();
} else if (!escaped) {
appendToCurrentToken(s[i]);
}
// regular char
} else {
escaped = s[i] === '\\';
switch (s[i]) {
case '\\':
// begin escape
break;
case '\n':
// newlines always delimits
nextToken();
break;
case ' ':
case '\t':
// delimit on new whitespace
if (currentToken) {
nextToken();
}
break;
case '\'':
case '"':
// begin quoted section
quoteChar = s[i];
break;
default:
appendToCurrentToken(s[i]);
}
}
}
// ignore last token if broken quotes/backslash
if (currentToken && !escaped && !quoteChar) {
nextToken();
}
return args;
}

View File

@@ -2,10 +2,10 @@
Comment=Use the command line the old way Comment=Use the command line the old way
Exec=cool-retro-term Exec=cool-retro-term
GenericName=Terminal emulator GenericName=Terminal emulator
Icon=utilities-terminal Icon=cool-retro-term
MimeType=
Name=Cool Retro Term Name=Cool Retro Term
Categories=Qt;System;Utility;TerminalEmulator; Categories=System;TerminalEmulator;
StartupNotify=true StartupNotify=true
Terminal=false Terminal=false
Type=Application Type=Application
Keywords=shell;prompt;command;commandline;

View File

@@ -1,7 +1,9 @@
TEMPLATE = subdirs TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += qmltermwidget
SUBDIRS += app SUBDIRS += app
SUBDIRS += konsole-qml-plugin
desktop.files += cool-retro-term.desktop desktop.files += cool-retro-term.desktop
desktop.path += /usr/share/applications desktop.path += /usr/share/applications

View File

@@ -1,15 +0,0 @@
this is a repository for shared C++ QML plugin, offering access to
terminal sessions.
if you want to add something, please ask the maintainer of this library first to
make sure it's a good fit
the current maintainer is: Dmitry Zagnoyko <hiroshidi@gmail.com>
current plugin consist:
- KTerminal: offers access to terminal session from qml
- KSessions: offers access to pty(s) from C++ layer
Branched from:
https://code.launchpad.net/~ubuntu-terminal-dev/ubuntu-terminal-app/plugin
At revision 14

View File

@@ -1,42 +0,0 @@
# example scheme for konsole
# the title is to appear in the menu.
title Black on Light Yellow
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | | |
# V V--color--V V V
color 0 0 0 0 0 0 # regular foreground color (Black)
color 1 255 255 221 1 0 # regular background color (Light Yellow)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
color 6 24 24 178 0 0 # regular color 4 Blue
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
color 9 178 178 178 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 0 0 0 0 1 # intensive foreground color
color 11 255 255 221 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,104 +0,0 @@
[Background]
Bold=false
Color=247,247,214
Transparency=true
MaxRandomHue=340
[BackgroundIntense]
Bold=false
Color=255,255,221
Transparency=true
[Color0]
Bold=false
Color=0,0,0
Transparency=false
[Color0Intense]
Bold=false
Color=104,104,104
Transparency=false
[Color1]
Bold=false
Color=178,24,24
Transparency=false
[Color1Intense]
Bold=false
Color=255,84,84
Transparency=false
[Color2]
Bold=false
Color=24,178,24
Transparency=false
[Color2Intense]
Bold=false
Color=84,255,84
Transparency=false
[Color3]
Bold=false
Color=178,104,24
Transparency=false
[Color3Intense]
Bold=false
Color=255,255,84
Transparency=false
[Color4]
Bold=false
Color=24,24,178
Transparency=false
[Color4Intense]
Bold=false
Color=84,84,255
Transparency=false
[Color5]
Bold=false
Color=178,24,178
Transparency=false
[Color5Intense]
Bold=false
Color=255,84,255
Transparency=false
[Color6]
Bold=false
Color=24,178,178
Transparency=false
[Color6Intense]
Bold=false
Color=84,255,255
Transparency=false
[Color7]
Bold=false
Color=178,178,178
Transparency=false
[Color7Intense]
Bold=false
Color=255,255,255
Transparency=false
[Foreground]
Bold=false
Color=0,0,0
Transparency=false
[ForegroundIntense]
Bold=true
Color=0,0,0
Transparency=false
[General]
Description=Black on Random Light
Opacity=1

View File

@@ -1,42 +0,0 @@
# example scheme for konsole
# the title is to appear in the menu.
title Black on White
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | | |
# V V--color--V V V
color 0 0 0 0 0 0 # regular foreground color (Black)
color 1 255 255 255 1 0 # regular background color (White)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
color 6 24 24 178 0 0 # regular color 4 Blue
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
color 9 178 178 178 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 0 0 0 0 1 # intensive foreground color
color 11 255 255 255 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,103 +0,0 @@
[Background]
Bold=false
Color=44,44,44
Transparency=false
[BackgroundIntense]
Bold=true
Color=44,44,44
Transparency=false
[Color0]
Bold=false
Color=63,63,63
Transparency=false
[Color0Intense]
Bold=true
Color=112,144,128
Transparency=false
[Color1]
Bold=false
Color=112,80,80
Transparency=false
[Color1Intense]
Bold=true
Color=220,163,163
Transparency=false
[Color2]
Bold=false
Color=96,180,138
Transparency=false
[Color2Intense]
Bold=true
Color=114,213,163
Transparency=false
[Color3]
Bold=false
Color=223,175,143
Transparency=false
[Color3Intense]
Bold=true
Color=240,223,175
Transparency=false
[Color4]
Bold=false
Color=154,184,215
Transparency=false
[Color4Intense]
Bold=true
Color=148,191,243
Transparency=false
[Color5]
Bold=false
Color=220,140,195
Transparency=false
[Color5Intense]
Bold=true
Color=236,147,211
Transparency=false
[Color6]
Bold=false
Color=140,208,211
Transparency=false
[Color6Intense]
Bold=true
Color=147,224,227
Transparency=false
[Color7]
Bold=false
Color=220,220,204
Transparency=false
[Color7Intense]
Bold=true
Color=255,255,255
Transparency=false
[Foreground]
Bold=false
Color=220,220,204
Transparency=false
[ForegroundIntense]
Bold=true
Color=220,220,204
Transparency=false
[General]
Description=Dark Pastels
Opacity=1

View File

@@ -1,104 +0,0 @@
[Background]
Bold=false
Color=0,0,0
Transparency=false
[BackgroundIntense]
Bold=false
Color=0,0,0
Transparency=false
[Color0]
Bold=false
Color=0,0,0
Transparency=false
[Color0Intense]
Bold=false
Color=104,104,104
Transparency=false
[Color1]
Bold=false
Color=250,75,75
Transparency=false
[Color1Intense]
Bold=false
Color=255,84,84
Transparency=false
[Color2]
Bold=false
Color=24,178,24
Transparency=false
[Color2Intense]
Bold=false
Color=84,255,84
Transparency=false
[Color3]
Bold=false
Color=178,104,24
Transparency=false
[Color3Intense]
Bold=false
Color=255,255,84
Transparency=false
[Color4]
Bold=false
Color=92,167,251
Transparency=false
[Color4Intense]
Bold=false
Color=84,84,255
Transparency=false
[Color5]
Bold=false
Color=225,30,225
Transparency=false
[Color5Intense]
Bold=false
Color=255,84,255
Transparency=false
[Color6]
Bold=false
Color=24,178,178
Transparency=false
[Color6Intense]
Bold=false
Color=84,255,255
Transparency=false
[Color7]
Bold=false
Color=178,178,178
Transparency=false
[Color7Intense]
Bold=false
Color=255,255,255
Transparency=false
[Foreground]
Bold=false
Color=24,240,24
Transparency=false
[ForegroundIntense]
Bold=true
Color=24,240,24
Transparency=false
[General]
Description=Green on Black
Opacity=1

View File

@@ -1,100 +0,0 @@
[Background]
Bold=false
Color=0,0,0
[BackgroundIntense]
Bold=false
Color=104,104,104
[Color0]
Bold=false
Color=0,0,0
[Color0Intense]
Bold=false
Color=104,104,104
[Color1]
Bold=false
Color=178,24,24
[Color1Intense]
Bold=false
Color=255,84,84
[Color2]
Bold=false
Color=24,178,24
[Color2Intense]
Bold=false
Color=84,255,84
[Color3]
Bold=false
Color=178,104,24
[Color3Intense]
Bold=false
Color=255,255,84
[Color4]
Bold=false
Color=24,24,178
[Color4Intense]
Bold=false
Color=84,84,255
[Color5]
Bold=false
Color=178,24,178
[Color5Intense]
Bold=false
Color=255,84,255
[Color6]
Bold=false
Color=24,178,178
[Color6Intense]
Bold=false
Color=84,255,255
[Color7]
Bold=false
Color=178,178,178
[Color7Intense]
Bold=false
Color=255,255,255
[Foreground]
Bold=false
Color=178,178,178
[ForegroundIntense]
Bold=false
Color=255,255,255
[General]
Description=Linux Colors

View File

@@ -1,42 +0,0 @@
# example scheme for konsole
# the title is to appear in the menu.
title White on Black
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | | |
# V V--color--V V V
color 0 255 255 255 0 0 # regular foreground color (White)
color 1 0 0 0 1 0 # regular background color (Black)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
color 6 24 24 178 0 0 # regular color 4 Blue
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
color 9 178 178 178 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 255 255 255 0 1 # intensive foreground color
color 11 0 0 0 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,31 +0,0 @@
import sys
__, inpath, outpath = sys.argv
def interpolate(color, minim):
return minim + (color / 255) * (255 - minim)
def rgb2grey(r, g, b):
return round(0.21 * r + 0.72 * g + 0.07 * b)
infile = open(inpath, "r")
outfile = open(outpath, "w")
lines = infile.readlines()
def process_line(line):
if not line.startswith("color"): return line
chunks = [l for l in line.split(" ") if l]
color = rgb2grey(int(chunks[2]), int(chunks[3]), int(chunks[4]))
if color != 0:
color = int(interpolate(color, 5))
chunks[2] = str(color)
chunks[3] = str(color)
chunks[4] = str(color)
return ' '.join(chunks)
for l in (process_line(l) for l in lines):
outfile.write(l + '\n')
infile.close()
outfile.close()

View File

@@ -1,85 +0,0 @@
# example scheme for konsole
# the title is to appear in the menu.
title White on Black
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | | |
# V V--color--V V V
color 0 255 255 255 0 0 # regular foreground color (White)
color 1 0 0 0 1 0 # regular background color (Black)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 255 43 43 0 0 # regular color 1 Red
color 4 28 172 120 0 0 # regular color 2 Green
color 5 248 213 104 0 0 # regular color 3 Yellow
color 6 43 108 196 0 0 # regular color 4 Blue
color 7 255 29 206 0 0 # regular color 5 Magenta
color 8 24 167 181 0 0 # regular color 6 Cyan
color 9 179 179 179 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 255 255 255 0 1 # intensive foreground color
color 11 0 0 0 1 0 # intensive background color
color 12 106 106 106 0 0 # intensive color 0
color 13 253 94 83 0 0 # intensive color 1
color 14 168 228 160 0 0 # intensive color 2
color 15 254 254 34 0 0 # intensive color 3
color 16 154 206 235 0 0 # intensive color 4
color 17 252 116 253 0 0 # intensive color 5
color 18 236 234 190 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,42 +0,0 @@
# example scheme for konsole
# the title is to appear in the menu.
title Black on Light Color
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | | |
# V V--color--V V V
color 0 0 0 0 0 0 # regular foreground color (Black)
rcolor 1 30 255 1 0 # regular background color (Light Color)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
color 6 24 24 178 0 0 # regular color 4 Blue
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
color 9 178 178 178 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 0 0 0 0 1 # intensive foreground color
color 11 255 255 221 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,44 +0,0 @@
# example scheme for konsole
# the title is to appear in the menu.
title Marble
image tile Blkmarble.jpg
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | | |
# V V--color--V V V
color 0 255 255 255 0 0 # regular foreground color (White)
color 1 0 0 0 1 0 # regular background color (Black)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
color 6 24 24 178 0 0 # regular color 4 Blue
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
color 9 178 178 178 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 255 255 255 0 1 # intensive foreground color
color 11 0 0 0 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,47 +0,0 @@
# example scheme for konsole
# the title is to appear in the menu.
title Ugly 1
# add a wallpaper, if you like. Second word one of { tile,center,full }
image tile /opt/kde/share/wallpapers/dancy_pants.jpg
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | | |
# V V--color--V V V
color 0 0 0 0 0 0 # regular foreground color (Black)
color 1 255 255 255 1 0 # regular background color (White)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 255 0 0 0 0 # regular color 1 Red
color 4 0 255 0 0 0 # regular color 2 Green
color 5 255 255 0 0 0 # regular color 3 Yellow
color 6 0 0 255 0 0 # regular color 4 Blue
color 7 255 0 255 0 0 # regular color 5 Magenta
color 8 0 255 255 0 0 # regular color 6 Cyan
color 9 255 255 255 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 0 0 0 0 1 # intensive foreground color
color 11 255 255 255 1 1 # intensive background color
color 12 0 0 0 0 1 # intensive color 0
color 13 255 0 0 0 1 # intensive color 1
color 14 0 255 0 0 1 # intensive color 2
color 15 255 255 0 0 1 # intensive color 3
color 16 0 0 255 0 1 # intensive color 4
color 17 255 0 255 0 1 # intensive color 5
color 18 0 255 255 0 1 # intensive color 6
color 19 255 255 255 0 1 # intensive color 7

View File

@@ -1,42 +0,0 @@
# example scheme for konsole
# the title is to appear in the menu.
title Green on Black
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | | |
# V V--color--V V V
color 0 24 240 24 0 0 # regular foreground color (Green)
color 1 0 0 0 1 0 # regular background color (Black)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
color 6 24 24 178 0 0 # regular color 4 Blue
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
color 9 178 178 178 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 24 240 24 0 1 # intensive foreground color
color 11 0 0 0 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,49 +0,0 @@
# linux color schema for konsole
title Green Tint
transparency 0.3 0 150 0
# FIXME
#
# The flaw in this schema is that "blick" comes out on the
# Linux console as intensive background, really.
# Since this is not used in clients you'll hardly notice
# it in practice.
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | red grn blu | |
# V V--color--V V V
color 0 178 178 178 0 0 # regular foreground color (White)
color 1 0 0 0 1 0 # regular background color (Black)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
color 6 24 24 178 0 0 # regular color 4 Blue
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
color 9 178 178 178 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 255 255 255 0 0 # intensive foreground color
color 11 104 104 104 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,49 +0,0 @@
# linux color schema for konsole
title Green Tint with Transparent MC
transparency 0.3 0 150 0
# FIXME
#
# The flaw in this schema is that "blick" comes out on the
# Linux console as intensive background, really.
# Since this is not used in clients you'll hardly notice
# it in practice.
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | red grn blu | |
# V V--color--V V V
color 0 178 178 178 0 0 # regular foreground color (White)
color 1 0 0 0 1 0 # regular background color (Black)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
color 6 0 0 0 1 0 # regular color 4 Blue
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
color 9 178 178 178 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 255 255 255 0 0 # intensive foreground color
color 11 104 104 104 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,44 +0,0 @@
# example scheme for konsole
# the title is to appear in the menu.
title Paper
image tile Paper01.jpg
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | | |
# V V--color--V V V
color 0 0 0 0 0 0 # regular foreground color (Black)
color 1 255 255 255 1 0 # regular background color (White)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
color 6 24 24 178 0 0 # regular color 4 Blue
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
color 9 178 178 178 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 0 0 0 0 1 # intensive foreground color
color 11 255 255 255 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,47 +0,0 @@
# linux color schema for konsole
title Linux Colors
# FIXME
#
# The flaw in this schema is that "blick" comes out on the
# Linux console as intensive background, really.
# Since this is not used in clients you'll hardly notice
# it in practice.
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | red grn blu | |
# V V--color--V V V
color 0 178 178 178 0 0 # regular foreground color (White)
color 1 0 0 0 1 0 # regular background color (Black)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
color 6 24 24 178 0 0 # regular color 4 Blue
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
color 9 178 178 178 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 255 255 255 0 0 # intensive foreground color
color 11 104 104 104 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,132 +0,0 @@
[README.Schema]
The schemata offered in the Options/Schema menu are
taken from from configurations files with a *.schema
pattern either located in $KDEDIR/share/apps/konsole
or ~/.kde/share/apps/konsole.
Schemata allow to configure the color set that konsole
uses, together with some more information on rendition
processing.
Syntax
File
:: { [Line] ['#' Comment] '\n' }
Line
:: "title" Title
:: "image" Usage PathToPictureFile
:: "transparency" Fade Red Green Blue
:: "color" Slot Red Green Blue Transparent Bold
:: "rcolor" Slot Saturation Value Transparent Bold
:: "sysfg" Slot Transparent Bold
:: "sysbg" Slot Transparent Bold
Meaning
- Title is the text to appear in the Option/Schema menu.
It should be unique among all other schemata therefore.
- The "image" clause allows to place an image on the
konsole's background.
- Usage can be either
- "tile" - the image is tilewise replicated.
- "center" - the image is centered.
- "full" - the image is stretched to fit the window size.
- The Path of the picture can both be relative
(to kde wallpapers) or absolute.
When a schema uses a background image (or transparency)
one has to make at least one color slot transparent to
achive any visible effect. Please read below about the
"Transparent" field in color,sysbg,sysfg.
- The "transparency" clause picks and uses the background
of the desktop as if it where an image together with
a fade effect. This effect will fade the background
to the specified color.
The "Fade" is a real value between 0 and 1, indicating
the strength of the fade. A value of 0 will not change
the image, a value of 1 will make it the fade color
everywhere, and in between. This will make the "glas"
of the window be of the color given in the clause and
being more(1) or less(0) intransparent.
- The remaining clauses (color,sysbg,sysfg) are used
to setup konsoles rendition system.
To this end, konsole offers 20 color slots.
Slot Meaning
----- --------------------------
0 regular foreground color
1 regular background color
2-9 regular bgr color 0-7
10 intensive foreground color
11 intensive background color
12-19 intensive bgr color 0-7
The traditional meaning of the "bgr" color codes
has a bitwise interpretation of an additive three
primary color scheme inherited from early EGA
color terminals.
Color Bits Colors
----- ---- -------
0 000 Black
1 001 Red
2 010 Green
3 011 Yellow
4 100 Blue
5 101 Magenta
6 110 Cyan
7 111 White
One may or may not stick to this tradition.
Konsole allows to assign colors freely to slots.
The slots fall apart into two groups, regular
and intensive colors. The later are used when
BOLD rendition is used by the client.
Each of the groups have a default fore- and
background color and the said bgr colors.
Normal terminal processing will simply use
the default colors.
The color desired for a slot is indicated
in the Red Green Blue fields of the color
clause. Use the sysfg or the sysbg clause
to indicate the default fore and background
colors of the desktop.
To specify randomized color for a slot use
the clause rcolor. The two parameters to it
being Saturation - the amount of colour,
and Value, the darkness of the colour.
To use transparency/images and to simulate
the behavior of the xterm, one can supply
two additional tags to each slot:
- Transparent (0/1) meaning to show the
background picture, if any.
- Bold (0/1) to render characters bold.
If you know about the escape codes, you might have
noticed that intensive and bold rendition are sort
of confused. This is inherited by the xterm which
konsole is simulating.
One can use the colortest.sh script supplied
with the konsole source distribution to test
a schema.
The schema installed with konsole are more or
less demonstrations and not really beauty,
beside the Linux.schema, perhaps, which is
made after the VGA colors.

View File

@@ -1,44 +0,0 @@
# default scheme for konsole (only here for documentation purposes)
# the title is to appear in the menu.
title Konsole Defaults
# image tile /opt/kde/share/wallpapers/gray2.jpg
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | | |
# V V--color--V V V
color 0 0 0 0 0 0 # regular foreground color (Black)
color 1 255 255 255 1 0 # regular background color (White)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
color 6 24 24 178 0 0 # regular color 4 Blue
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
color 9 178 178 178 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 0 0 0 0 1 # intensive foreground color
color 11 255 255 255 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,49 +0,0 @@
# linux color schema for konsole
title Transparent Konsole
transparency 0.35 0 0 0
# FIXME
#
# The flaw in this schema is that "blick" comes out on the
# Linux console as intensive background, really.
# Since this is not used in clients you'll hardly notice
# it in practice.
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | red grn blu | |
# V V--color--V V V
color 0 178 178 178 0 0 # regular foreground color (White)
color 1 0 0 0 1 0 # regular background color (Black)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
color 6 24 24 178 0 0 # regular color 4 Blue
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
color 9 178 178 178 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 255 255 255 0 0 # intensive foreground color
color 11 104 104 104 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,51 +0,0 @@
# linux color schema for konsole
title Transparent for MC
transparency 0.35 0 0 0
# FIXME
#
# The flaw in this schema is that "blick" comes out on the
# Linux console as intensive background, really.
# Since this is not used in clients you'll hardly notice
# it in practice.
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | red grn blu | |
# V V--color--V V V
color 0 178 178 178 0 0 # regular foreground color (White)
color 1 0 0 0 1 0 # regular background color (Black)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
#color 6 24 24 178 0 0 # regular color 4 Blue
color 6 0 0 0 1 0 # regular color 4 Blue
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
color 9 178 178 178 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 255 255 255 0 0 # intensive foreground color
color 11 104 104 104 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,42 +0,0 @@
# linux color schema for konsole
title Transparent, Dark Background
transparency 0.75 0 0 0
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | red grn blu | |
# V V--color--V V V
color 0 255 255 255 0 0 # regular foreground color (White)
color 1 0 0 0 1 0 # regular background color (Black)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
color 6 24 24 178 0 0 # regular color 4 Blue
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
color 9 178 178 178 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 255 255 255 0 0 # intensive foreground color
color 11 104 104 104 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,51 +0,0 @@
# linux color schema for konsole
title Transparent, Light Background
transparency 0.1 0 0 0
# This is a schema for very light backgrounds. It makes some
# hacks about the colors to make Midnight Commander transparent
# and with suitable colors.
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | red grn blu | |
# V V--color--V V V
color 0 50 50 50 0 0 # regular foreground color (DarkGray)
color 1 200 200 200 1 0 # regular background color (White)
# color 2 0 0 0 0 0 # regular color 0 Black
color 2 200 200 200 1 0 # regular background color (White)
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
#color 6 24 24 178 0 0 # regular color 4 Blue
color 6 0 0 0 1 0 # regular color 4 Blue
# Blue is transparent, to make MC transparent
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
# color 9 178 178 178 0 0 # regular color 7 White
color 9 50 50 50 0 0 # regular foreground color (DarkGray)
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 0 0 0 0 0 # intensive foreground color
color 11 255 255 255 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,46 +0,0 @@
# xterm color schema for konsole
# xterm colors can be configured (almost) like
# konsole colors can. This is the uncustomized
# xterm schema.
# Please refere to your local xterm setup files
# if this schema differs.
title XTerm Colors
# foreground colors -------------------------------
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | red grn blu | |
# V V--color--V V V
color 0 0 0 0 0 0 # regular foreground color (Black)
color 1 255 255 255 1 0 # regular background color (White)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 205 0 0 0 0 # regular color 1 Red
color 4 0 205 0 0 0 # regular color 2 Green
color 5 205 205 0 0 0 # regular color 3 Yellow
color 6 0 0 205 0 0 # regular color 4 Blue
color 7 205 0 205 0 0 # regular color 5 Magenta
color 8 0 205 205 0 0 # regular color 6 Cyan
color 9 229 229 229 0 0 # regular color 7 White
# intensive colors -------------------------------------------
# for some strange reason, intensive colors are bold, also.
color 10 77 77 77 0 1 # intensive foreground color
color 11 255 255 255 1 1 # intensive background color
color 12 77 77 77 0 1 # intensive color 0
color 13 255 0 0 0 1 # intensive color 1
color 14 0 255 0 0 1 # intensive color 2
color 15 255 255 0 0 1 # intensive color 3
color 16 0 0 255 0 1 # intensive color 4
color 17 255 0 255 0 1 # intensive color 5
color 18 0 255 255 0 1 # intensive color 6
color 19 255 255 255 0 1 # intensive color 7

View File

@@ -1,44 +0,0 @@
# schema that uses system colors
# the title is to appear in the menu.
title System Colors
# image none
# foreground colors
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | | |
# V V--color--V V V
sysfg 0 0 0 # regular foreground color (system)
sysbg 1 1 0 # regular background color (system)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 178 24 24 0 0 # regular color 1 Red
color 4 24 178 24 0 0 # regular color 2 Green
color 5 178 104 24 0 0 # regular color 3 Yellow
color 6 24 24 178 0 0 # regular color 4 Blue
color 7 178 24 178 0 0 # regular color 5 Magenta
color 8 24 178 178 0 0 # regular color 6 Cyan
color 9 178 178 178 0 0 # regular color 7 White
# intensive colors
# instead of changing the colors, we've flaged the text to become bold
color 10 0 0 0 0 1 # intensive foreground color
color 11 255 255 255 1 0 # intensive background color
color 12 104 104 104 0 0 # intensive color 0
color 13 255 84 84 0 0 # intensive color 1
color 14 84 255 84 0 0 # intensive color 2
color 15 255 255 84 0 0 # intensive color 3
color 16 84 84 255 0 0 # intensive color 4
color 17 255 84 255 0 0 # intensive color 5
color 18 84 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,40 +0,0 @@
# VIM-recommended color schema for konsole
# VIM (VI improved) in "help xiterm" recommends these colors for xterm.
title VIM Colors
# foreground colors -------------------------------
# note that the default background color is flagged
# to become transparent when an image is present.
# slot transparent bold
# | red grn blu | |
# V V--color--V V V
color 0 0 0 0 0 0 # regular foreground color (Black)
color 1 255 255 255 1 0 # regular background color (White)
color 2 0 0 0 0 0 # regular color 0 Black
color 3 192 0 0 0 0 # regular color 1 Red
color 4 0 128 0 0 0 # regular color 2 Green
color 5 128 128 0 0 0 # regular color 3 Yellow
color 6 0 0 192 0 0 # regular color 4 Blue
color 7 192 0 192 0 0 # regular color 5 Magenta
color 8 0 128 128 0 0 # regular color 6 Cyan
color 9 192 192 192 0 0 # regular color 7 White
# intensive colors -------------------------------------------
color 10 77 77 77 0 1 # intensive foreground color
color 11 255 255 255 1 1 # intensive background color
color 12 128 128 128 0 0 # intensive color 0
color 13 255 96 96 0 0 # intensive color 1
color 14 0 255 0 0 0 # intensive color 2
color 15 255 255 0 0 0 # intensive color 3
color 16 128 128 255 0 0 # intensive color 4
color 17 255 64 255 0 0 # intensive color 5
color 18 0 255 255 0 0 # intensive color 6
color 19 255 255 255 0 0 # intensive color 7

View File

@@ -1,72 +0,0 @@
[README.KeyTab]
The keytabs offered in the Options/Keyboard menu are
taken from from configurations files with a *.keytab
pattern either located in $KDEDIR/share/apps/konsole
or ~/.kde/share/apps/konsole.
Keytabs allow to configure the behavior of konsole
on keyboard events, especially for functions keys.
Please have a look into the README.keyboard file, too.
The syntax is that each entry has the form :
"key" Keyname { ("+"|"-") Modename } ":" (String|Operation)
Keynames are those defined in <qnamespace.h> with the
"Qt::Key_" prefix removed.
Mode names are:
- Shift : Shift Key pressed
- Alt : Alt Key pressed
- Control : Control Key pressed
( The VT100 emulation has modes that can affect the
sequences emitted by certain keys. These modes are
under control of the client program.
- Newline : effects Return and Enter key.
- Application : effects Up and Down key.
- Ansi : effects Up and Down key (This is for VT52, really).
Since sending a state to a program that has set the state
itself is positivly wrong and obsolete design, better forget
about this nasty detail. I may well remove this "feature"
in a future clean up round. )
A "+" preceeding a Modename means the Key is pressed.
A "-" preceeding a Modename means the Key is not pressed.
If no mode is given it means don't care.
Note that the combination of Key and Modes (set/reset)
has to be unique. This means, that
key A + Shift : "A"
key A : "a"
will not accept the small letter "a" rule as expected,
one has to add a "- Shift" to the last clause. Use
the stdout/stderr dianostics of konsole when modifying
keytabs to find problems like this.
Operations are
- scrollUpLine : scroll up one line in the history log
- scrollUpPage : scroll up one page in the history log
- scrollDownLine : scroll down one line in the history log
- scrollDownPage : scroll down one page in the history log
- emitClipboard : "paste" the current clipboard
- emitSelection : "paste" the current selection
Strings have the syntax of C strings,
one may use the following escapes:
- \E - escape
- \\ - backslash
- \" - double quote
- \t - tab
- \r - return
- \n - newline
- \b - backspace
- \xHH - where HH are two hex digits

View File

@@ -1,169 +0,0 @@
# [README.default.Keytab] Default Keyboard Table
#
# To customize your keyboard, copy this file to something
# ending with .keytab and change it to meet you needs.
# Please read the README.KeyTab and the README.keyboard
# in this case.
#
# --------------------------------------------------------------
keyboard "Default (XFree 4)"
# --------------------------------------------------------------
#
# Note that this particular table is a "risc" version made to
# ease customization without bothering with obsolete details.
# See VT100.keytab for the more hairy stuff.
#
# --------------------------------------------------------------
# common keys
key Escape : "\E"
key Tab -Shift : "\t"
key Tab +Shift+Ansi : "\E[Z"
key Tab +Shift-Ansi : "\t"
key Backtab +Ansi : "\E[Z"
key Backtab -Ansi : "\t"
key Return-Shift-NewLine : "\r"
key Return-Shift+NewLine : "\r\n"
key Return+Shift : "\EOM"
# Backspace and Delete codes are preserving CTRL-H.
key Backspace : "\x7f"
# Arrow keys in VT52 mode
# shift up/down are reserved for scrolling.
# shift left/right are reserved for switching between tabs (this is hardcoded).
key Up -Shift-Ansi : "\EA"
key Down -Shift-Ansi : "\EB"
key Right-Shift-Ansi : "\EC"
key Left -Shift-Ansi : "\ED"
# Arrow keys in ANSI mode with Application - and Normal Cursor Mode)
key Up -Shift-AnyMod+Ansi+AppCuKeys : "\EOA"
key Down -Shift-AnyMod+Ansi+AppCuKeys : "\EOB"
key Right -Shift-AnyMod+Ansi+AppCuKeys : "\EOC"
key Left -Shift-AnyMod+Ansi+AppCuKeys : "\EOD"
key Up -Shift-AnyMod+Ansi-AppCuKeys : "\E[A"
key Down -Shift-AnyMod+Ansi-AppCuKeys : "\E[B"
key Right -Shift-AnyMod+Ansi-AppCuKeys : "\E[C"
key Left -Shift-AnyMod+Ansi-AppCuKeys : "\E[D"
key Up -Shift+AnyMod+Ansi : "\E[1;*A"
key Down -Shift+AnyMod+Ansi : "\E[1;*B"
key Right -Shift+AnyMod+Ansi : "\E[1;*C"
key Left -Shift+AnyMod+Ansi : "\E[1;*D"
# Keypad keys with NumLock ON
# (see "Numeric Keypad" section at http://www.nw.com/nw/WWW/products/wizcon/vt100.html )
#
# Not enabled for now because it breaks the keypad in Vim.
#
#key 0 +KeyPad+AppKeyPad : "\EOp"
#key 1 +KeyPad+AppKeyPad : "\EOq"
#key 2 +KeyPad+AppKeyPad : "\EOr"
#key 3 +KeyPad+AppKeyPad : "\EOs"
#key 4 +KeyPad+AppKeyPad : "\EOt"
#key 5 +KeyPad+AppKeyPad : "\EOu"
#key 6 +KeyPad+AppKeyPad : "\EOv"
#key 7 +KeyPad+AppKeyPad : "\EOw"
#key 8 +KeyPad+AppKeyPad : "\EOx"
#key 9 +KeyPad+AppKeyPad : "\EOy"
#key + +KeyPad+AppKeyPad : "\EOl"
#key - +KeyPad+AppKeyPad : "\EOm"
#key . +KeyPad+AppKeyPad : "\EOn"
#key * +KeyPad+AppKeyPad : "\EOM"
#key Enter +KeyPad+AppKeyPad : "\r"
# Keypad keys with NumLock Off
key Up -Shift+Ansi+AppCuKeys+KeyPad : "\EOA"
key Down -Shift+Ansi+AppCuKeys+KeyPad : "\EOB"
key Right -Shift+Ansi+AppCuKeys+KeyPad : "\EOC"
key Left -Shift+Ansi+AppCuKeys+KeyPad : "\EOD"
key Up -Shift+Ansi-AppCuKeys+KeyPad : "\E[A"
key Down -Shift+Ansi-AppCuKeys+KeyPad : "\E[B"
key Right -Shift+Ansi-AppCuKeys+KeyPad : "\E[C"
key Left -Shift+Ansi-AppCuKeys+KeyPad : "\E[D"
key Home +AppCuKeys+KeyPad : "\EOH"
key End +AppCuKeys+KeyPad : "\EOF"
key Home -AppCuKeys+KeyPad : "\E[H"
key End -AppCuKeys+KeyPad : "\E[F"
key Insert +KeyPad : "\E[2~"
key Delete +KeyPad : "\E[3~"
key Prior -Shift+KeyPad : "\E[5~"
key Next -Shift+KeyPad : "\E[6~"
# other grey PC keys
key Enter+NewLine : "\r\n"
key Enter-NewLine : "\r"
key Home -AnyMod-AppCuKeys : "\E[H"
key End -AnyMod-AppCuKeys : "\E[F"
key Home -AnyMod+AppCuKeys : "\EOH"
key End -AnyMod+AppCuKeys : "\EOF"
key Home +AnyMod : "\E[1;*H"
key End +AnyMod : "\E[1;*F"
key Insert -AnyMod : "\E[2~"
key Delete -AnyMod : "\E[3~"
key Insert +AnyMod : "\E[2;*~"
key Delete +AnyMod : "\E[3;*~"
key Prior -Shift-AnyMod : "\E[5~"
key Next -Shift-AnyMod : "\E[6~"
key Prior -Shift+AnyMod : "\E[5;*~"
key Next -Shift+AnyMod : "\E[6;*~"
# Function keys
key F1 -AnyMod : "\EOP"
key F2 -AnyMod : "\EOQ"
key F3 -AnyMod : "\EOR"
key F4 -AnyMod : "\EOS"
key F5 -AnyMod : "\E[15~"
key F6 -AnyMod : "\E[17~"
key F7 -AnyMod : "\E[18~"
key F8 -AnyMod : "\E[19~"
key F9 -AnyMod : "\E[20~"
key F10 -AnyMod : "\E[21~"
key F11 -AnyMod : "\E[23~"
key F12 -AnyMod : "\E[24~"
key F1 +AnyMod : "\EO*P"
key F2 +AnyMod : "\EO*Q"
key F3 +AnyMod : "\EO*R"
key F4 +AnyMod : "\EO*S"
key F5 +AnyMod : "\E[15;*~"
key F6 +AnyMod : "\E[17;*~"
key F7 +AnyMod : "\E[18;*~"
key F8 +AnyMod : "\E[19;*~"
key F9 +AnyMod : "\E[20;*~"
key F10 +AnyMod : "\E[21;*~"
key F11 +AnyMod : "\E[23;*~"
key F12 +AnyMod : "\E[24;*~"
# Work around dead keys
key Space +Control : "\x00"
# Some keys are used by konsole to cause operations.
# The scroll* operations refer to the history buffer.
key Up +Shift-AppScreen : scrollLineUp
key Prior +Shift-AppScreen : scrollPageUp
key Down +Shift-AppScreen : scrollLineDown
key Next +Shift-AppScreen : scrollPageDown
key ScrollLock : scrollLock

View File

@@ -1,133 +0,0 @@
# [vt100.keytab] Konsole Keyboard Table (VT100 keys)
#
# --------------------------------------------------------------
keyboard "vt100 (historical)"
# --------------------------------------------------------------
#
# This configuration table allows to customize the
# meaning of the keys.
#
# The syntax is that each entry has the form :
#
# "key" Keyname { ("+"|"-") Modename } ":" (String|Operation)
#
# Keynames are those defined in <qnamespace.h> with the
# "Qt::Key_" removed. (We'd better insert the list here)
#
# Mode names are :
#
# - Shift
# - Alt
# - Control
#
# The VT100 emulation has two modes that can affect the
# sequences emitted by certain keys. These modes are
# under control of the client program.
#
# - Newline : effects Return and Enter key.
# - Application : effects Up and Down key.
#
# - Ansi : effects Up and Down key (This is for VT52, really).
#
# Operations are
#
# - scrollUpLine
# - scrollUpPage
# - scrollDownLine
# - scrollDownPage
#
# - emitSelection
#
# If the key is not found here, the text of the
# key event as provided by QT is emitted, possibly
# preceeded by ESC if the Alt key is pressed.
#
# --------------------------------------------------------------
key Escape : "\E"
key Tab : "\t"
# VT100 can add an extra \n after return.
# The NewLine mode is set by an escape sequence.
key Return-NewLine : "\r"
key Return+NewLine : "\r\n"
# Some desperately try to save the ^H.
key Backspace : "\x7f"
key Delete : "\E[3~"
# These codes are for the VT52 mode of VT100
# The Ansi mode (i.e. VT100 mode) is set by
# an escape sequence
key Up -Shift-Ansi : "\EA"
key Down -Shift-Ansi : "\EB"
key Right-Shift-Ansi : "\EC"
key Left -Shift-Ansi : "\ED"
# VT100 emits a mode bit together
# with the arrow keys.The AppCuKeys
# mode is set by an escape sequence.
key Up -Shift+Ansi+AppCuKeys : "\EOA"
key Down -Shift+Ansi+AppCuKeys : "\EOB"
key Right-Shift+Ansi+AppCuKeys : "\EOC"
key Left -Shift+Ansi+AppCuKeys : "\EOD"
key Up -Shift+Ansi-AppCuKeys : "\E[A"
key Down -Shift+Ansi-AppCuKeys : "\E[B"
key Right-Shift+Ansi-AppCuKeys : "\E[C"
key Left -Shift+Ansi-AppCuKeys : "\E[D"
# function keys (FIXME: make pf1-pf4)
key F1 : "\E[11~"
key F2 : "\E[12~"
key F3 : "\E[13~"
key F4 : "\E[14~"
key F5 : "\E[15~"
key F6 : "\E[17~"
key F7 : "\E[18~"
key F8 : "\E[19~"
key F9 : "\E[20~"
key F10 : "\E[21~"
key F11 : "\E[23~"
key F12 : "\E[24~"
key Home : "\E[H"
key End : "\E[F"
key Prior -Shift : "\E[5~"
key Next -Shift : "\E[6~"
key Insert-Shift : "\E[2~"
# Keypad-Enter. See comment on Return above.
key Enter+NewLine : "\r\n"
key Enter-NewLine : "\r"
key Space +Control : "\x00"
# some of keys are used by konsole.
key Up +Shift : scrollLineUp
key Prior +Shift : scrollPageUp
key Down +Shift : scrollLineDown
key Next +Shift : scrollPageDown
key ScrollLock : scrollLock
#----------------------------------------------------------
# keypad characters as offered by Qt
# cannot be recognized as such.
#----------------------------------------------------------
# Following other strings as emitted by konsole.

View File

@@ -1,71 +0,0 @@
# [x11r5.Keytab] Keyboard Table for X11 R5
keyboard "XTerm (XFree 3.x.x)"
# --------------------------------------------------------------
#
# Note that this particular table is a "risc" version made to
# ease customization without bothering with obsolete details.
# See VT100.keytab for the more hairy stuff.
#
# --------------------------------------------------------------
# common keys
key Escape : "\E"
key Tab : "\t"
key Return : "\r"
# Backspace and Delete codes are preserving CTRL-H.
key Backspace : "\x7f"
# cursor keys
key Up -Shift : "\EOA"
key Down -Shift : "\EOB"
key Right -Shift : "\EOC"
key Left -Shift : "\EOD"
# other grey PC keys
key Enter : "\r"
key Home : "\E[1~"
key Insert-Shift : "\E[2~"
key Delete : "\E[3~"
key End : "\E[4~"
key Prior -Shift : "\E[5~"
key Next -Shift : "\E[6~"
# function keys
key F1 : "\E[11~"
key F2 : "\E[12~"
key F3 : "\E[13~"
key F4 : "\E[14~"
key F5 : "\E[15~"
key F6 : "\E[17~"
key F7 : "\E[18~"
key F8 : "\E[19~"
key F9 : "\E[20~"
key F10 : "\E[21~"
key F11 : "\E[23~"
key F12 : "\E[24~"
# Work around dead keys
key Space +Control : "\x00"
# Some keys are used by konsole to cause operations.
# The scroll* operations refer to the history buffer.
key Up +Shift : scrollLineUp
key Prior +Shift : scrollPageUp
key Down +Shift : scrollLineDown
key Next +Shift : scrollPageDown
key ScrollLock : scrollLock
# keypad characters are not offered differently by Qt.

View File

@@ -1,164 +0,0 @@
# [linux.keytab] Konsole Keyboard Table (Linux console keys)
#
# --------------------------------------------------------------
# NOT TESTED, MAY NEED SOME CLEANUPS
keyboard "Linux console"
# --------------------------------------------------------------
#
# This configuration table allows to customize the
# meaning of the keys.
#
# The syntax is that each entry has the form :
#
# "key" Keyname { ("+"|"-") Modename } ":" (String|Operation)
#
# Keynames are those defined in <qnamespace.h> with the
# "Qt::Key_" removed. (We'd better insert the list here)
#
# Mode names are :
#
# - Shift
# - Alt
# - Control
#
# The VT100 emulation has two modes that can affect the
# sequences emitted by certain keys. These modes are
# under control of the client program.
#
# - Newline : effects Return and Enter key.
# - Application : effects Up and Down key.
#
# - Ansi : effects Up and Down key (This is for VT52, really).
#
# Operations are
#
# - scrollUpLine
# - scrollUpPage
# - scrollDownLine
# - scrollDownPage
#
# - emitSelection
#
# If the key is not found here, the text of the
# key event as provided by QT is emitted, possibly
# preceeded by ESC if the Alt key is pressed.
#
# --------------------------------------------------------------
key Escape : "\E"
key Tab : "\t"
# VT100 can add an extra \n after return.
# The NewLine mode is set by an escape sequence.
key Return-NewLine : "\r"
key Return+NewLine : "\r\n"
# Some desperately try to save the ^H.
key Backspace : "\x7f"
key Delete : "\E[3~"
# These codes are for the VT52 mode of VT100
# The Ansi mode (i.e. VT100 mode) is set by
# an escape sequence
key Up -Shift-Ansi : "\EA"
key Down -Shift-Ansi : "\EB"
key Right-Shift-Ansi : "\EC"
key Left -Shift-Ansi : "\ED"
# VT100 emits a mode bit together
# with the arrow keys.The AppCuKeys
# mode is set by an escape sequence.
key Up -Shift+Ansi+AppCuKeys : "\EOA"
key Down -Shift+Ansi+AppCuKeys : "\EOB"
key Right-Shift+Ansi+AppCuKeys : "\EOC"
key Left -Shift+Ansi+AppCuKeys : "\EOD"
key Up -Shift+Ansi-AppCuKeys : "\E[A"
key Down -Shift+Ansi-AppCuKeys : "\E[B"
key Right-Shift+Ansi-AppCuKeys : "\E[C"
key Left -Shift+Ansi-AppCuKeys : "\E[D"
# linux functions keys F1-F5 differ from xterm
key F1 : "\E[[A"
key F2 : "\E[[B"
key F3 : "\E[[C"
key F4 : "\E[[D"
key F5 : "\E[[E"
key F6 : "\E[17~"
key F7 : "\E[18~"
key F8 : "\E[19~"
key F9 : "\E[20~"
key F10 : "\E[21~"
key F11 : "\E[23~"
key F12 : "\E[24~"
key Home : "\E[1~"
key End : "\E[4~"
key Prior -Shift : "\E[5~"
key Next -Shift : "\E[6~"
key Insert-Shift : "\E[2~"
# Keypad-Enter. See comment on Return above.
key Enter+NewLine : "\r\n"
key Enter-NewLine : "\r"
key Space +Control : "\x00"
# linux term ctrl seq
key A +Control : "\x01"
key B +Control : "\x02"
key C +Control : "\x03"
key D +Control : "\x04"
key E +Control : "\x05"
key F +Control : "\x06"
key G +Control : "\x07"
key H +Control : "\x08"
key I +Control : "\x09"
key J +Control : "\x0a"
key K +Control : "\x0b"
key L +Control : "\x0c"
key M +Control : "\x0d"
key N +Control : "\x0e"
key O +Control : "\x0f"
key P +Control : "\x10"
key Q +Control : "\x11"
key R +Control : "\x12"
key S +Control : "\x13"
key T +Control : "\x14"
key U +Control : "\x15"
key V +Control : "\x16"
key W +Control : "\x17"
key X +Control : "\x18"
key Y +Control : "\x19"
key Z +Control : "\x1a"
# some of keys are used by konsole.
key Up +Shift : scrollLineUp
key Prior +Shift : scrollPageUp
key Down +Shift : scrollLineDown
key Next +Shift : scrollPageDown
key ScrollLock : scrollLock
#----------------------------------------------------------
# keypad characters as offered by Qt
# cannot be recognized as such.
#----------------------------------------------------------
# Following other strings as emitted by konsole.

Some files were not shown because too many files have changed in this diff Show More