399 Commits

Author SHA1 Message Date
Aric Renzo
c7bb749d3d Updating docker build instructions. 2018-09-17 10:29:25 -04:00
Aric Renzo
8e5bc2ffca Updating README to use user settings in cool-retro-term. 2018-09-17 10:27:42 -04:00
Aric Renzo
a445ab4b86 removing extraneous comments and debugging. 2018-09-14 15:34:30 -04:00
Aric Renzo
90060c8d1f Cleaning up the Dockerfile. 2018-09-14 15:00:56 -04:00
Aric Renzo
af317fe39a Adding documentation and a cleaner dockerfile. 2018-09-14 15:00:44 -04:00
Aric Renzo
d25346e814 Adding initial commit for containerizing cool-retro-term 2018-09-13 15:37:05 -04:00
Filippo Scognamiglio
1cf6e2743b Merge pull request #432 from picospuch/master
Refine alt(meta) and ctrl behaviour for emacs on macos
2018-04-28 00:00:40 +02:00
spuch
68a5f0dd4b update submodule 2018-03-08 20:00:15 +08:00
spuch
654f8d0761 fix alt(meta), ctrl for emacs on macos 2018-03-06 17:33:30 +08:00
Filippo Scognamiglio
dd799cf5c0 Merge pull request #375 from tgerczei/master
Gentoo package version bump announced
2018-02-25 12:24:57 +01:00
Filippo Scognamiglio
b8be28619a Merge pull request #380 from leereilly/macOS-updated
macOS updates
2018-02-25 12:22:28 +01:00
Filippo Scognamiglio
ca012a1c80 Merge pull request #390 from suve/fixes-image-sizes-in-appdata-file
Make screenshot sizes in appdata XML match actual image sizes
2018-02-25 12:09:22 +01:00
Filippo Scognamiglio
50de42ec9f Merge pull request #391 from suve/improves-manpage
Improve manpage
2018-02-25 12:08:01 +01:00
Filippo Scognamiglio
38c9dd50ff Merge pull request #400 from hroncok/patch-1
cool-retro-term made it to Fedora official repos
2018-02-25 12:04:30 +01:00
Filippo Scognamiglio
27e4e3444a Merge pull request #401 from ways/master
Instrucitons for ubuntu 17.10. Fixes https://github.com/Swordfish90/c…
2018-02-25 12:03:41 +01:00
Filippo Scognamiglio
a8935da416 Merge branch 'master' into master 2018-02-25 12:03:13 +01:00
Filippo Scognamiglio
beb56c527b Merge pull request #405 from maiki/patch-1
Fix bad spacing and punctuation in readme
2018-02-25 11:55:31 +01:00
Filippo Scognamiglio
5e3caedaf6 Merge pull request #407 from mason1920/patch-1
Change apt-get to apt, and added stretch.
2018-02-25 11:54:23 +01:00
Filippo Scognamiglio
0be17716f5 Merge pull request #409 from haesbaert/master
Add a -T option that sets window title.
2018-02-25 11:53:42 +01:00
Filippo Scognamiglio
dda5fbc330 Increase baseScaling font for knight profile to improve consistency. 2018-02-25 11:50:23 +01:00
Filippo Scognamiglio
ffc16c6814 Merge branch 'larsbrinkhoff-knight' 2018-02-25 11:47:51 +01:00
Filippo Scognamiglio
705371d7ee Merge branch 'knight' of https://github.com/larsbrinkhoff/cool-retro-term into larsbrinkhoff-knight 2018-02-25 11:37:11 +01:00
Filippo Scognamiglio
7c7810836e Merge pull request #414 from avh-on1/patch-1
Add Debian Stretch build and run dependencies
2018-02-22 09:17:20 +01:00
Filippo Scognamiglio
af9c039dcb Merge pull request #419 from tomchiverton/patch-3
Ubuntu 17.10 PPA
2018-02-22 09:15:14 +01:00
Tom Chiverton
7325835c3f Ubuntu 17.10 PPA 2018-02-10 14:40:56 +00:00
Lars Brinkhoff
e7aa72a7ab Add a Knight TV profile. 2018-01-25 06:27:21 +01:00
Lars Brinkhoff
35c48de638 Add Knight TV font. As used by the MIT AI Lab. 2018-01-25 06:27:11 +01:00
Alex Von Hoene
ae50ed980f Added Debian Stretch dependencies
In addition to what Debian Jessie needs, Stretch also needs qml-module-qt-labs-settings and qml-module-qt-labs-folderlistmodel
These packages are not needed to build cool-retro-term, but they are needed to run it.
2018-01-15 16:43:55 -05:00
Alex Von Hoene
1d6f0445f7 add Debian Stretch to dependency instructions
I've confirmed that the same instructions for Jessie also work for Stretch
2018-01-15 16:31:30 -05:00
Christiano Haesbaert
799ef63b81 Add a -T option that sets window title.
`cool-retro-term -T myretrosession` sets window name to 'myretrosession'

This is useful especially for people who rely on wmctrl to change windows, now I
can do `wmctrl -a myretrocession` to focus on cool-retro-term.

-T was chosen since it matches classic xterm(1) and other terminal emulators
2018-01-06 20:20:45 +01:00
mason1920
6b22a0c03a Change apt-get to apt, and added stretch. 2018-01-02 11:45:08 -05:00
maiki
2d54638f49 Update readme
Periods, amirite?
2017-12-21 21:17:45 -08:00
Lars Falk-Petersen
8adec835f6 Instrucitons for ubuntu 17.10. Fixes https://github.com/Swordfish90/cool-retro-term/issues/396 2017-12-12 15:24:20 +01:00
Miro Hrončok
a34654a9a9 cool-retro-term made it to Fedora official repos 2017-12-12 00:37:25 +01:00
suve
b7c8108ad5 Improve manpage: add description and missing options, improve formatting 2017-11-06 21:51:16 +01:00
suve
c34c3c3654 Make screenshot sizes in appdata XML match actual image sizes 2017-11-05 00:04:45 +01:00
Lee Reilly
88988dd3e1 Add some GIFs? 2017-10-29 16:07:24 -07:00
Lee Reilly
351b98189f Updated OS X → macOS 2017-10-29 16:04:23 -07:00
Tamás Gérczei
e6a049c214 Gentoo package version bump announced 2017-10-27 21:00:53 +02:00
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
Filippo Scognamiglio
058bafe033 Finally added new shiny icon. 2014-10-11 14:54:41 +02:00
Filippo Scognamiglio
2dd4e0d841 Update README.md with OSX build instructions and donations link. 2014-10-11 13:26:14 +02:00
Filippo Scognamiglio
d603d9d54a Merge pull request #156 from jekader/debian-packaging
Adding debian packaging
2014-10-11 01:37:54 +02:00
Filippo Scognamiglio
568d278871 Merge pull request #155 from darkpioneer/master
Setting shortcut for "Show Menubar" action to Ctrl+Shift+M
2014-10-11 01:29:31 +02:00
Filippo Scognamiglio
438c50d775 Texture quality is actually working. (And also quite useful for high-dpi screens). 2014-10-11 01:24:20 +02:00
Jeka Der
8c08f63881 fixing lintian warnings 2014-10-10 22:12:37 +02:00
darkpioneer
71020e40a5 Update main.qml
Added keyboard shortcut to show menu bar again
2014-10-10 20:54:30 +01:00
Jeka Der
413a32f33f debian packaging, initial commit 2014-10-10 21:38:01 +02:00
Filippo Scognamiglio
d4ca781e90 Merge pull request #154 from Swordfish90/improveosx
Merge OSX specific issues.
2014-10-10 16:07:06 +02:00
Filippo Scognamiglio
539a5ed74f Add missing arguments when -i and -l when starting under OSX. Thanks to sirgatez. 2014-10-10 15:43:38 +02:00
Filippo Scognamiglio
093cead312 Fixed a couple of UI issues under osx. 2014-10-10 15:12:28 +02:00
Filippo Scognamiglio
c57ef45ce6 Add QML import directory for buldle. 2014-10-10 14:39:42 +02:00
Filippo Scognamiglio
8232543abc Merge pull request #152 from mikeu/master
Patch incorrect #elif directives to #else directives
2014-10-10 00:46:29 +02:00
Filippo Scognamiglio
29ec02b65e Add --fullscreen command line parameter. Fix some mistakes in --help. 2014-10-10 00:40:31 +02:00
Michael Underwood
0e765e427b Patch incorrect #elif directives to #else directives 2014-10-09 16:05:34 -06:00
Filippo Scognamiglio
1cbedb41d9 Merge pull request #150 from ttohin/feature/osx-build
Fix osx build
2014-10-09 22:20:44 +02:00
Anton Simakov
a78231eac5 Build for mac os without significant changes of master's code (insead of osx branch). A bit later I can provide signed binary build for osx. 2014-10-09 21:27:26 +04:00
Filippo Scognamiglio
9bd0ca74b6 Removed useless flag in main.qml. 2014-10-07 21:50:02 +02:00
Filippo Scognamiglio
800bbd359b Merge pull request #146 from gvy/master
drop dummy banana method
2014-10-06 15:29:00 +02:00
Michael Shigorin
10cc27e7cf drop dummy banana method
see also https://github.com/Swordfish90/cool-retro-term/issues/143
2014-10-06 13:44:33 +04:00
Filippo Scognamiglio
9deeb5e405 Merge pull request #137 from Swordfish90/unstable
Import latest changes from unstable.
2014-10-04 16:36:30 +02:00
Filippo Scognamiglio
614793ecd0 Added --workdir and --program flags. 2014-10-04 16:21:17 +02:00
Filippo Scognamiglio
a9ed10573b Plugin: export shell program to QML. 2014-10-04 15:26:09 +02:00
Filippo Scognamiglio
15a951288d Imported initial directory implementation from terminal-app. 2014-10-04 15:01:50 +02:00
Filippo Scognamiglio
f15440c3c3 Provide a fallback if samplers in vertex shader are not supported. 2014-10-04 14:09:49 +02:00
Filippo Scognamiglio
dab4b13bfd Adding command line parameters to reset the default settings and to change the initial profile. 2014-10-04 00:43:15 +02:00
Filippo Scognamiglio
f8db912f5f Merge pull request #131 from Swordfish90/2yscanlines
Much improved scanlines rendering. Font width can be customized. Redisigned settings. Bloom and scanline quality can be selected.
2014-09-30 14:45:56 +00:00
Filippo Scognamiglio
5cfee38329 Bloom effect is now updated manually as the others. 2014-09-30 16:33:22 +02:00
Filippo Scognamiglio
466fea495d Setting asynchronous in loaders. 2014-09-30 16:21:56 +02:00
Filippo Scognamiglio
ba77e21817 Bloom quality is now customizable in performance tab. 2014-09-30 00:57:57 +02:00
Filippo Scognamiglio
cc72a28ee3 Updating sources when font settings are changed. 2014-09-30 00:10:14 +02:00
Filippo Scognamiglio
e815fe2787 Setting scaling stepSize to 0.05 instead of 0.1. Refactored scaling handling. 2014-09-29 22:38:33 +02:00
Filippo Scognamiglio
2ff6c71c23 Adding adjustable scanline quality. Textures are now always smoothed. Terminal texture is now scaled (by integer factors) depending on the scaling level. 2014-09-29 21:26:41 +02:00
Filippo Scognamiglio
1dd633be0b Reorganize settings window. 2014-09-29 02:00:54 +02:00
Filippo Scognamiglio
d885f27e0b Font width is now stored and loaded. Profiles have been updated. 2014-09-29 01:41:43 +02:00
Filippo Scognamiglio
a08c738a65 Font width is customizable. Introducing non squared pixels resolutions. 2014-09-28 18:23:14 +02:00
Filippo Scognamiglio
14ab8942af Merge pull request #130 from gmmeyer/master
adds compiled files to the gitignore
2014-09-28 10:44:58 +02:00
Greg Meyer
9caae00db9 adds compiled files to the gitignore 2014-09-28 02:48:44 -04:00
Filippo Scognamiglio
4b87b6e5d6 Fix: update terminal image on resize and font change. 2014-09-23 10:45:48 +02:00
Filippo Scognamiglio
1febce3775 Add menubar in context menu when the application menubar is hidden. 2014-09-20 02:26:21 +02:00
Filippo Scognamiglio
d2b677a0e2 Adding profiles menu. 2014-09-20 00:19:05 +02:00
Filippo Scognamiglio
82df40591b Workaround for menubar margins. 2014-09-18 10:33:40 +02:00
Filippo Scognamiglio
774e4f5306 Merge pull request #118 from Swordfish90/simplifyimprove
Many simplifications and optimizations of the underlying structure. cool-retro-term is now faster, it has better rasterizations and pixel perfect mouse events.
2014-09-14 15:35:54 +02:00
Filippo Scognamiglio
19f6d85243 Real fix to bloom borders issues. Using Connections to update main source instead of live: true. 2014-09-14 14:33:08 +02:00
Filippo Scognamiglio
1be7987abe Terminal size and texture sizes are now comparable. Fixed formula for coordinates conversion: mouse input is now pixel perfect. 2014-09-14 02:43:48 +02:00
Filippo Scognamiglio
2dbe129857 Remove unused code and fix some indentations. 2014-09-14 01:14:12 +02:00
Filippo Scognamiglio
d1280f28c2 Use qFloor instead of qRound to compute the number of columns of the terminal. 2014-09-14 01:02:54 +02:00
Filippo Scognamiglio
53897f8186 Fix: bloom issues near the edges. 2014-09-14 01:00:38 +02:00
Filippo Scognamiglio
b4bf29dc9e Resore frames functionalities. 2014-09-14 00:45:34 +02:00
Filippo Scognamiglio
bc87df170b Fix smooth, reenable antialising and remove few useless lines. 2014-09-13 23:19:00 +02:00
Filippo Scognamiglio
67ea080c2e Great preprocessiong optimizations. Simpler code and big performance improvements. 2014-09-13 22:18:11 +02:00
Filippo Scognamiglio
7159b9e513 Merge pull request #115 from KAMiKAZOW/patch-1
Create cool-retro-term.appdata.xml
2014-09-11 20:14:28 +02:00
KAMiKAZOW
7931069302 Create cool-retro-term.appdata.xml
First attempt in an AppStream metadata file according to http://www.freedesktop.org/software/appstream/docs/chap-Quickstart.html

To do: A "make-release" script that fills in version number, timestamp, and changelog.
2014-09-11 17:08:06 +02:00
Filippo Scognamiglio
eb413f79e4 Fix the look of the block cursor at low resolutions. 2014-09-10 01:47:46 +02:00
Filippo Scognamiglio
7bd8b56657 Fix noise element sizes with different rasterizations. 2014-09-10 01:47:07 +02:00
Filippo Scognamiglio
c94e31f82a Scaling is now unified among rasterizations. 2014-09-10 01:14:10 +02:00
Filippo Scognamiglio
639fd53a19 Simplify the unholy overengineered mess of rasterization. 2014-09-10 00:59:53 +02:00
Filippo Scognamiglio
62b04ff491 Merge pull request #110 from KAMiKAZOW/patch-1
Update and rename cool-old-term.spec to cool-retro-term.spec
2014-09-08 20:38:10 +02:00
KAMiKAZOW
1e5c36a351 Update cool-retro-term.spec 2014-09-08 16:57:26 +02:00
KAMiKAZOW
c8fd4df6f3 Update cool-retro-term.spec
Condition not necessary after all… :-)
2014-09-08 16:52:00 +02:00
KAMiKAZOW
1928d57f46 Update and rename cool-old-term.spec to cool-retro-term.spec
Ported the spec file to CRT's new, way nicer build system.

PS: Many thanks to Glen Oakley <goakley123@gmail.com> and Doug Newgard <scimmia at archlinux dot info> whose workarounds were used previously.
2014-09-08 01:33:37 +02:00
Filippo Scognamiglio
39bb5f5ee9 Desktop file has now the correct name and is installable. 2014-09-04 12:03:57 +02:00
Filippo Scognamiglio
1cef3117cb Merge pull request #72 from KAMiKAZOW/patch-1
Create cool-old-term.desktop
2014-09-04 11:49:28 +02:00
Filippo Scognamiglio
61c34da01e Merge pull request #105 from Swordfish90/improvedbuild
Change build setup and name.
2014-09-04 01:01:56 +02:00
Filippo Scognamiglio
7687ccf3e8 Fix #88 . Plugin strings use utf8 instead of latin1. 2014-09-03 22:35:41 +02:00
Filippo Scognamiglio
b047dc9313 Rebranding the application cool-retro-term! 2014-09-03 22:19:34 +02:00
Filippo Scognamiglio
c4d016a0fd Update README.md to reflect reworked build. 2014-09-03 21:33:08 +02:00
Filippo Scognamiglio
ae0154935d Changed plugin name to avoid future conflicts. 2014-09-03 00:47:00 +02:00
Filippo Scognamiglio
dd238755c9 App is now installable with sudo make install. 2014-09-02 23:58:58 +02:00
Filippo Scognamiglio
5e07c98919 Refactoring of build system and use of native executable instead of qmlscene. 2014-09-02 22:52:12 +02:00
Filippo Scognamiglio
98b2511660 Merge pull request #103 from Swordfish90/improvemouse
Improved mouse behavior. Enabled mouse support for applications.
2014-08-30 01:38:58 +02:00
Filippo Scognamiglio
2ecff6276c Removed unuseful comments from TerminalDisplay.cpp 2014-08-30 01:22:39 +02:00
Filippo Scognamiglio
e8aee5412f Merge pull request #101 from JIghtuse/master
Fix initialization oreder in TerminalDisplay
2014-08-30 00:59:25 +02:00
Filippo Scognamiglio
7fa48f6c5d Merge pull request #102 from KAMiKAZOW/patch-7
Fix specfile serious bug: missing dependency
2014-08-30 00:58:04 +02:00
KAMiKAZOW
d81c120024 Fix specfile serious bug: qmlscene not installed
To run cool-old-term Qt5's qmlscene binary is required. The specfile, however, did not have QtDeclarative-devel as requirement specified.

I also made some adjustments to the BuildRequirements as "pkgconfig" is the recommended cross-distro way, hopefully enabling building cool-old-term under Mageia 5.
2014-08-29 23:31:37 +02:00
Boris Egorov
6a8cdbab4c Fix initialization oreder in TerminalDisplay
Data members need to be initialized in the order they were declared in
the class definition. This commit fixes compiler warnings.
2014-08-30 01:20:47 +07:00
Filippo Scognamiglio
bde7ed901c Context menu play nicely with application that needs mouse control. Enabling Ctrl+Wheel to control scaling. 2014-08-28 00:43:50 +02:00
Filippo Scognamiglio
f0aa9c423b Fixed double click behavior. 2014-08-27 23:59:21 +02:00
Filippo Scognamiglio
8313b2a2fd Fix mouse wheel behavior. 2014-08-27 23:42:45 +02:00
Filippo Scognamiglio
95dce399b5 Mouse use is now exposed to QML. 2014-08-27 23:14:57 +02:00
Filippo Scognamiglio
3eb836fd81 Allow applications to notify the terminal they use mouse. 2014-08-27 22:55:52 +02:00
Filippo Scognamiglio
a0bfe0f77f Much improved mouse emulation. 2014-08-27 21:53:15 +02:00
Filippo Scognamiglio
765c41307f Reimplementing mouse events. 2014-08-27 18:36:08 +02:00
Filippo Scognamiglio
46edda6d18 Fix: custom commands in keytab were ignored. Removed hardcoded key combinations. 2014-08-22 13:20:42 +02:00
Filippo Scognamiglio
09df72c3d2 Merge pull request #93 from yurivkhan/xterm-keytab
Xterm keytab
2014-08-21 11:29:09 +02:00
Yuri Khan
c305e32a47 Use xterm keytab 2014-08-20 17:48:50 +07:00
Yuri Khan
ad8818f811 Add xterm keytab 2014-08-20 17:48:43 +07:00
Yuri Khan
d3e1d9d158 Add a few more key names necessary for xterm keymap 2014-08-20 17:48:04 +07:00
Filippo Scognamiglio
f3e25d9c64 Merge pull request #89 from KAMiKAZOW/patch-5
Fix typo in README.md
2014-08-19 09:18:57 +02:00
KAMiKAZOW
d51e0cc32e Update README.md
Rm word that I left by accident
2014-08-14 07:57:41 +02:00
Filippo Scognamiglio
1c5bf4d3a8 Merge pull request #87 from KAMiKAZOW/patch-4
Update cool-old-term.spec
2014-08-13 16:55:00 +02:00
Filippo Scognamiglio
edfa71d3ac Merge pull request #86 from KAMiKAZOW/patch-3
Update README.md
2014-08-13 16:54:11 +02:00
KAMiKAZOW
9e47a366de Update cool-old-term.spec
Fix "Group", change URL to Github project where cool-old-term actually resides.
2014-08-13 03:50:05 +02:00
KAMiKAZOW
0bc4e061d0 Update README.md
Point to binary packages (and fix a small typo by the way)
2014-08-13 03:43:01 +02:00
Filippo Scognamiglio
14ef4e2613 Fix 84 : changed script shell to /bin/sh. 2014-08-12 22:45:22 +02:00
Filippo Scognamiglio
93c8c0f21f Revert to linux kb-scheme. 2014-08-12 22:44:21 +02:00
Filippo Scognamiglio
f6e3d518e4 Merge pull request #85 from 0-wiz-0/master
Fix NetBSD case with util.h.
2014-08-12 22:30:44 +02:00
Thomas Klausner
cad496b1fb Fix NetBSD case.
NetBSD provides util.h, not libutil.
2014-08-12 22:23:29 +02:00
Filippo Scognamiglio
f7354e54dc Fixing keytabs (thank you yurivkhan)! 2014-08-11 21:51:50 +02:00
Filippo Scognamiglio
d6288518c4 Added RGB shift effect. 2014-08-11 19:23:03 +02:00
Filippo Scognamiglio
abb485f828 Fixing checkable slider. It now behaves consistently and avoids binding loops. 2014-08-09 14:45:01 +02:00
KAMiKAZOW
6b1d09955f Update cool-old-term.desktop 2014-08-09 02:08:23 +02:00
Filippo Scognamiglio
1c97a08b8d Coefficients are now all passed as uniforms. This saves many shaders compilations when playing with settings. 2014-08-08 22:57:51 +02:00
Filippo Scognamiglio
589ebdc73f Merge branch 'master' of github.com:Swordifish90/cool-old-term 2014-08-08 15:12:43 +02:00
Filippo Scognamiglio
8b5da7535b Fix: Build instructions were not clear enough. 2014-08-08 15:11:53 +02:00
Filippo Scognamiglio
3bad3122f0 Merge pull request #74 from KAMiKAZOW/patch-2
Create README.md for new ibm font.
2014-08-08 14:53:35 +02:00
KAMiKAZOW
3f672e6ef3 Create README.md
Add https://raw.githubusercontent.com/rbanffy/3270font/master/README.md
2014-08-07 17:58:11 +02:00
Filippo Scognamiglio
70e4e285d7 Merge pull request #71 from rbanffy/master
Added IBM 3278-like terminal font
2014-08-07 12:44:09 +02:00
KAMiKAZOW
5a7e660812 Create cool-old-term.desktop
Create cool-old-term.desktop – so far only with a placeholder icon ("utilities-terminal") that should be available on any modern graphical Linux installation.
2014-08-07 07:15:24 +02:00
Ricardo Bánffy
428887cb8a Added IBM 3278-like terminal font (from https://github.com/rbanffy/3270font) 2014-08-07 00:13:59 -03:00
Filippo Scognamiglio
064e967810 Fix 61 . Removed Alt based combinations. 2014-08-07 00:33:40 +02:00
Filippo Scognamiglio
be0ccfa1ba Changing close shortcut. 2014-08-07 00:30:08 +02:00
Filippo Scognamiglio
cf1fed9bec Merge pull request #70 from Swordifish90/colorssupport
Add color support
2014-08-07 00:24:18 +02:00
Filippo Scognamiglio
307f640327 Capping saturation to 50% 2014-08-07 00:21:40 +02:00
Filippo Scognamiglio
40d34c2cca Fix: colors play nicely with frames reflections now. 2014-08-07 00:18:44 +02:00
Filippo Scognamiglio
7f5a47f8a4 Use offline saturation color. Better and a little bit faster. 2014-08-06 19:07:30 +02:00
Filippo Scognamiglio
2494bc0522 Merge pull request #55 from KAMiKAZOW/patch-1
Create cool-old-term.spec for rpm distros.
2014-08-04 01:59:01 +02:00
Filippo Scognamiglio
b70ea57122 Merge branch 'master' of github.com:Swordifish90/cool-old-term 2014-08-04 01:50:34 +02:00
Filippo Scognamiglio
3d705f7178 Fix 28 : Save New Profile is clearer. 2014-08-04 01:49:48 +02:00
Filippo Scognamiglio
1cd41ce0b9 Fix 27 : profile name is now validated. 2014-08-04 01:46:07 +02:00
KAMiKAZOW
eab0eec746 Rename rpm/cool-old-term.spec to packaging/rpm/cool-old-term.spec 2014-08-04 01:35:46 +02:00
KAMiKAZOW
17f605275e Update and rename cool-old-term.spec to rpm/cool-old-term.spec
Put specfile in a subdirectory and add a line that was missing before
2014-08-04 01:34:44 +02:00
Filippo Scognamiglio
f4771d4f37 Rewrite motion blur with colors. It now simpler. 2014-08-03 16:39:28 +02:00
Filippo Scognamiglio
445bb5bad5 Merge pull request #53 from cornelius/opensuse
Add instructions for compiling on openSUSE
2014-08-03 15:28:03 +02:00
Filippo Scognamiglio
1902e34d04 Fix issues between colors and bloom. 2014-08-03 14:52:29 +02:00
Filippo Scognamiglio
a7210c69ed Fix incorrect colors scheme. 2014-08-03 10:44:25 +02:00
Filippo Scognamiglio
4b4fabaee3 Fix issues between colors and motion blur. 2014-08-03 10:36:07 +02:00
Filippo Scognamiglio
876e6079d4 Fix: color layout in settings window. 2014-08-02 20:03:16 +02:00
KAMiKAZOW
b81818f74d Update cool-old-term.spec
Name fix
2014-08-01 16:43:41 +02:00
Cornelius Schumacher
0de719b67f Special Qt5 repo only needed for openSUSE 13.1 2014-08-01 16:38:29 +02:00
KAMiKAZOW
296c64eb73 Create cool-old-term.spec
Add a spec file to create RPM packages of cool-old-term.
Verified to work with both Fedora 20 and openSUSE Factory. Support for other RPM-based distros (Mageia comes to mind) is as easy as adding additional (Build)Requires conditions.
2014-08-01 16:33:50 +02:00
Filippo Scognamiglio
4cb3275498 Merge branch 'master' of https://github.com/firemark/cool-old-term into colorssupport 2014-08-01 10:42:19 +02:00
Cornelius Schumacher
c909779514 Add instructions for compiling on openSUSE 2014-08-01 00:45:38 +02:00
Firemark
e1ac0a35b4 Change colors in color scheme 2014-08-01 00:21:34 +02:00
Firemark
e3d8992a35 Add two settings to change colors. 2014-08-01 00:04:59 +02:00
Firemark
f167b4d447 support many colors in terminal 2014-07-31 22:41:54 +02:00
Firemark
0f3c78a8c7 modify shaders 2014-07-31 22:21:14 +02:00
229 changed files with 4210 additions and 32220 deletions

13
.gitignore vendored
View File

@@ -34,3 +34,16 @@ Makefile*
# Others
*.xcf
# Ubuntu SDk
*.excludes
*.json
# Excludes compiled files
imports
cool-retro-term
# Mac OSX
.DS_Store
*.app

3
.gitmodules vendored Normal file
View File

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

14
Dockerfile Normal file
View File

@@ -0,0 +1,14 @@
FROM ubuntu:18.04
#TODO: Clean up after installation and building
RUN apt-get update && apt-get install -y build-essential qml-module-qtgraphicaleffects qml-module-qt-labs-folderlistmodel qml-module-qt-labs-settings qml-module-qtquick-controls qml-module-qtquick-dialogs qmlscene qt5-default qt5-qmake qtdeclarative5-dev qtdeclarative5-localstorage-plugin qtdeclarative5-qtquick2-plugin qtdeclarative5-window-plugin
COPY . /app
WORKDIR /app
RUN qmake && make
RUN adduser user --home /home/user
WORKDIR /app
RUN chmod +x /app/cool-retro-term
USER user
ENTRYPOINT ["./cool-retro-term"]

207
README.md
View File

@@ -1,21 +1,59 @@
#cool-old-term
# cool-retro-term
##Description
cool-old-term is a terminal emulator which tries to mimic the look and feel of the old cathode tube screens.
|> Default Amber|C:\ IBM DOS|$ Default Green|
|---|---|---|
|![Default Amber Cool Retro Term](https://user-images.githubusercontent.com/121322/32070717-16708784-ba42-11e7-8572-a8fcc10d7f7d.gif)|![IBM DOS](https://user-images.githubusercontent.com/121322/32070716-16567e5c-ba42-11e7-9e64-ba96dfe9b64d.gif)|![Default Green Cool Retro Term](https://user-images.githubusercontent.com/121322/32070715-163a1c94-ba42-11e7-80bb-41fbf10fc634.gif)|
## Description
cool-retro-term is a terminal emulator which mimics the look and feel of the old cathode tube screens.
It has been designed to be eye-candy, customizable, and reasonably lightweight.
It now 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 macOS and requires Qt 5.2 or higher.
##Screenshots
![Image](<http://i.imgur.com/NUfvnlu.png>)
![Image](<http://i.imgur.com/4LpfLF8.png>)
![Image](<http://i.imgur.com/MMmM6Ht.png>)
## Screenshots
![Image](<http://i.imgur.com/I6wq1cC.png>)
![Image](<http://i.imgur.com/12EqlpL.png>)
![Image](<http://i.imgur.com/Lx0acQz.jpg>)
##Build instructions
## 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:
##Dependencies
Fedora has the `cool-retro-term` in the offcial repositories. All you have to do is `sudo dnf install cool-retro-term`.
Users of openSUSE can grab a package from [Open Build Service](http://software.opensuse.org/package/cool-retro-term).
Arch users can install this [package](https://aur.archlinux.org/packages/cool-retro-term-git/) directly via the [AUR](https://aur.archlinux.org):
yaourt -S aur/cool-retro-term-git
or use:
pacman -S cool-retro-term
to install precompiled from community repository.
Gentoo users can now install the second release "1.0.1" from a 3rd-party repository preferably via layman:
USE="git" emerge app-portage/layman
wget https://www.gerczei.eu/files/gerczei.xml -O /etc/layman/overlays/gerczei.xml
layman -f -a qt -a gerczei # those who've added the repo before 27/08/17 should remove, update and add it again as its source has changed
ACCEPT_KEYWORDS="~*" emerge =x11-terms/cool-retro-term-1.0.1::gerczei
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).
Ubuntu 17.10 can use [this PPA](https://launchpad.net/%7Evantuz/+archive/ubuntu/cool-retro-term)
macOS users can grab the latest dmg from the release page: https://github.com/Swordfish90/cool-retro-term/releases
## Build instructions (Linux)
## Dependencies
Make sure to install these first.
---
@@ -26,62 +64,147 @@ Make sure to install these first.
---
**Debian Jessie**
**Ubuntu 16.10**
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 qtdeclarative5-qtquick2-plugin libqt5qml-graphicaleffects qml-module-qtquick-dialogs qtdeclarative5-localstorage-plugin qtdeclarative5-window-plugin
---
**Ubuntu 17.04**
sudo apt install build-essential libqt5qml-graphicaleffects qml-module-qt-labs-folderlistmodel qml-module-qt-labs-settings qml-module-qtquick-controls qml-module-qtquick-dialogs qmlscene qt5-default qt5-qmake qtdeclarative5-dev qtdeclarative5-localstorage-plugin qtdeclarative5-qtquick2-plugin qtdeclarative5-window-plugin
---
**Ubuntu 17.10**
sudo apt-get install build-essential qml-module-qtgraphicaleffects qml-module-qt-labs-folderlistmodel qml-module-qt-labs-settings qml-module-qtquick-controls qml-module-qtquick-dialogs qmlscene qt5-default qt5-qmake qtdeclarative5-dev qtdeclarative5-localstorage-plugin qtdeclarative5-qtquick2-plugin qtdeclarative5-window-plugin
---
**Debian Stretch and Jessie**
sudo apt install build-essential qmlscene qt5-qmake qt5-default qtdeclarative5-dev qml-module-qtquick-controls qml-module-qtgraphicaleffects qml-module-qtquick-dialogs qml-module-qtquick-localstorage qml-module-qtquick-window2
---
**Debian Stretch**
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 qml-module-qt-labs-settings qml-module-qt-labs-folderlistmodel
---
**Fedora**
This command should install the known fedora dependencies:
```
sudo yum -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols
```
or:
```
sudo dnf -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols
```
Compile using the following:
```
git clone https://github.com/Swordifish90/cool-old-term.git
cd cool-old-term/konsole-qml-plugin
qmake-qt5 && make && make install
cd ..
./cool-old-term
```
sudo yum -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols redhat-rpm-config
or:
sudo dnf -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols redhat-rpm-config
---
**Arch Linux**
sudo pacman -S qt5-base qt5-declarative qt5-quickcontrols qt5-graphicaleffects
You can also install this [package](https://aur.archlinux.org/packages/cool-old-term-git/) directly via the [AUR](https://aur.archlinux.org):
yaourt -S aur/cool-old-term-git
---
**openSUSE**
Add repository with latest Qt 5 (this is only needed on openSUSE 13.1, Factory already has it):
sudo zypper ar http://download.opensuse.org/repositories/KDE:/Qt5/openSUSE_13.1/ KDE:Qt5
Install dependencies:
sudo zypper install libqt5-qtbase-devel libqt5-qtdeclarative-devel libqt5-qtquickcontrols libqt5-qtgraphicaleffects
---
**Docker**
Docker users running X-Server can run cool-retro-term in an isolated Docker container using the following command. Please note that hardware and x-server resources need to be mounted inside the container in order for the container to have access to hardware acceleration and X-server resources. Furthermore, preserving user profile settings within the cool-retro-term container requires a volume mount from your local home directory to the `user` home directory within the container:
```sh
#Create the application settings directory:
mkdir -p ~/.local/share/cool-retro-term
#Run cool-retro-term:
docker run -it --privileged --rm -e DISPLAY=$DISPLAY -e XDG_RUNTIME_DIR=/run/user/1000 -e XAUTHORITY=$XAUTHORITY -v /run/user/1000:/run/user/1000 -v /tmp/.X11-unix:/tmp/.X11-unix -v /dev/dri:/dev/dri -v ~/.local/share/cool-retro-term:/home/user/.local/share/cool-retro-term quay.io/aric49/crt:latest
```
**Anyone else**
Install Qt directly from here http://qt-project.org/downloads . Once done export them in you path (replace "_/opt/Qt5.3.1/5.3/gcc_64/bin_" with your correct folder):
export PATH=/opt/Qt5.3.1/5.3/gcc_64/bin/:$PATH
###Compile
Once you installed all dependencies (Qt is installed and in your path) you need to compile and run the application:
export PATH=/opt/Qt5.3.1/5.3/gcc_64/bin/:$PATH
---
### Compile
Once you installed all dependencies (Qt is installed and in your path) you need to compile and run the application:
```bash
# Get it from GitHub
git clone https://github.com/Swordifish90/cool-old-term.git
git clone --recursive https://github.com/Swordfish90/cool-retro-term.git
# Build it
cd cool-old-term
cd konsole-qml-plugin
qmake && make && make install
cd ..
cd cool-retro-term
# Compile (Fedora and OpenSUSE user should use qmake-qt5 instead of qmake)
qmake && make
# Have fun!
./cool-old-term
./cool-retro-term
```
## Build instructions (macOS)
1. Install [Xcode](https://developer.apple.com/xcode/) and agree to the licence agreement
2. Enter the following commands into the terminal:
**Brew**
```sh
brew install qt5
git clone --recursive https://github.com/Swordfish90/cool-retro-term.git
export CPPFLAGS="-I/usr/local/opt/qt5/include"
export LDFLAGS="-L/usr/local/opt/qt5/lib"
export PATH=/usr/local/opt/qt5/bin:$PATH
cd cool-retro-term
qmake && make
mkdir cool-retro-term.app/Contents/PlugIns
cp -r qmltermwidget/QMLTermWidget cool-retro-term.app/Contents/PlugIns
open cool-retro-term.app
```
**MacPorts**
```sh
sudo port install qt5
git clone --recursive https://github.com/Swordfish90/cool-retro-term.git
cd cool-retro-term
/opt/local/libexec/qt5/bin/qmake && make
mkdir cool-retro-term.app/Contents/PlugIns
cp -r qmltermwidget/QMLTermWidget cool-retro-term.app/Contents/PlugIns
open cool-retro-term.app
```
## Build Instructions Docker
Clone the primary repository with the `--recursive` flag, and perform a Docker build. Docker will automatically compile the code inside a Docker container. To run the docker container, you need to mount X-Server resources and your video card inside the Docker container so that Docker can initiate the GUI and successfully start cool-retro-term with hardware acceleration:
```sh
#Git clone
git clone --recursive https://github.com/Swordfish90/cool-retro-term.git
#Docker Build
docker build -t cool-retro-term:1
#Run the built image.
docker run -it --privileged --rm -e DISPLAY=$DISPLAY -e XDG_RUNTIME_DIR=/run/user/1000 -e XAUTHORITY=$XAUTHORITY -v /run/user/1000:/run/user/1000 -v /tmp/.X11-unix:/tmp/.X11-unix -v /dev/dri:/dev/dri -v ~/.local/share/cool-retro-term:/home/user/.local/share/cool-retro-term cool-retro-term:1
```
## 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).
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,359 +0,0 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
*
* This file is part of cool-old-term.
*
* cool-old-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
Item{
property string version: "0.9"
// GENERAL SETTINGS ///////////////////////////////////////////////////
property bool fullscreen: false
property bool showMenubar: true
property real windowOpacity: 1.0
property real ambient_light: 0.2
property real contrast: 0.85
property real brightness: 0.5
property bool show_terminal_size: true
property real window_scaling: 1.0
onWindow_scalingChanged: handleFontChanged();
property real fps: 0
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 ///////////////////////////////////////////////////////
property string _background_color: "#000000"
property string _font_color: "#ff8100"
property color font_color: mix(strToColor(_font_color), strToColor(_background_color), 0.7 + (contrast * 0.3))
property color background_color: mix(strToColor(_background_color), strToColor(_font_color), 0.7 + (contrast * 0.3))
property real noise_strength: 0.1
property real screen_distortion: 0.1
property real glowing_line_strength: 0.2
property real motion_blur: 0.40
property real bloom_strength: 0.65
property real jitter: 0.18
property real horizontal_sincronization: 0.08
property real brightness_flickering: 0.1
readonly property int no_rasterization: 0
readonly property int scanline_rasterization: 1
readonly property int pixel_rasterization: 2
property int rasterization: no_rasterization
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 //////////////////////////////////////////////////////////////////
signal terminalFontChanged(string fontSource, int pixelSize, int lineSpacing, size virtualCharSize)
Loader{
id: fontManager
states: [
State { when: rasterization == no_rasterization
PropertyChanges {target: fontManager; source: "Fonts.qml" } },
State { when: rasterization == scanline_rasterization
PropertyChanges {target: fontManager; source: "FontScanlines.qml" } },
State { when: rasterization == pixel_rasterization;
PropertyChanges {target: fontManager; source: "FontPixels.qml" } }
]
onLoaded: handleFontChanged()
}
signal fontScalingChanged
property var fontScalingList: fontManager.item.fontScalingList
property var fontScalingIndexes: [5,1,1]
function setScalingIndex(newScaling){
fontScalingIndexes[rasterization] = newScaling;
fontScalingChanged();
handleFontChanged();
}
function getScalingIndex(){
return fontScalingIndexes[rasterization];
}
property var fontIndexes: [0,0,0]
property var fontlist: fontManager.item.fontlist
function handleFontChanged(){
if(!fontManager.item) return;
fontManager.item.selectedFontIndex = fontIndexes[rasterization];
fontManager.item.selectedScalingIndex = fontScalingIndexes[rasterization];
var fontSource = fontManager.item.source;
var pixelSize = fontManager.item.pixelSize;
var lineSpacing = fontManager.item.lineSpacing;
var virtualCharSize = fontManager.item.virtualCharSize;
terminalFontChanged(fontSource, pixelSize, lineSpacing, virtualCharSize);
}
// FRAMES /////////////////////////////////////////////////////////////////
property bool _frameReflections: true
property bool reflectionsAllowed: framelist.get(frames_index).reflections
property bool frameReflections: _frameReflections && reflectionsAllowed
property alias profiles_list: profileslist
property int profiles_index: 0
// DB STORAGE /////////////////////////////////////////////////////////////
Storage{id: storage}
function composeSettingsString(){
var settings = {
fps: fps,
window_scaling: window_scaling,
show_terminal_size: show_terminal_size,
fontScalingIndexes: fontScalingIndexes,
fontIndexes: fontIndexes,
frameReflections: _frameReflections,
showMenubar: showMenubar
}
return JSON.stringify(settings);
}
function composeProfileString(){
var settings = {
background_color: _background_color,
font_color: _font_color,
brightness_flickering: brightness_flickering,
horizontal_sincronization: horizontal_sincronization,
noise_strength: noise_strength,
screen_distortion: screen_distortion,
glowing_line_strength: glowing_line_strength,
frames_index: frames_index,
motion_blur: motion_blur,
bloom_strength: bloom_strength,
rasterization: rasterization,
jitter: jitter,
brightness: brightness,
contrast: contrast,
ambient_light: ambient_light,
windowOpacity: windowOpacity,
fontIndex: fontIndexes[rasterization]
}
return JSON.stringify(settings);
}
function loadSettings(){
var settingsString = storage.getSetting("_CURRENT_SETTINGS");
var profileString = storage.getSetting("_CURRENT_PROFILE");
if(!settingsString) return;
if(!profileString) return;
loadSettingsString(settingsString);
loadProfileString(profileString);
console.log("Loading settings: " + settingsString + profileString);
}
function storeSettings(){
var settingsString = composeSettingsString();
var profileString = composeProfileString();
storage.setSetting("_CURRENT_SETTINGS", settingsString);
storage.setSetting("_CURRENT_PROFILE", profileString);
console.log("Storing settings: " + settingsString);
console.log("Storing profile: " + profileString);
}
function loadSettingsString(settingsString){
var settings = JSON.parse(settingsString);
show_terminal_size = settings.show_terminal_size !== undefined ? settings.show_terminal_size : show_terminal_size
fps = settings.fps !== undefined ? settings.fps: fps
window_scaling = settings.window_scaling !== undefined ? settings.window_scaling : window_scaling
fontIndexes = settings.fontIndexes !== undefined ? settings.fontIndexes : fontIndexes
fontScalingIndexes = settings.fontScalingIndexes !== undefined ? settings.fontScalingIndexes : fontScalingIndexes
_frameReflections = settings.frameReflections !== undefined ? settings.frameReflections : _frameReflections;
showMenubar = settings.showMenubar !== undefined ? settings.showMenubar : showMenubar;
}
function loadProfileString(profileString){
var settings = JSON.parse(profileString);
_background_color = settings.background_color !== undefined ? settings.background_color : _background_color;
_font_color = settings.font_color !== undefined ? settings.font_color : _font_color;
horizontal_sincronization = settings.horizontal_sincronization !== undefined ? settings.horizontal_sincronization : horizontal_sincronization
brightness_flickering = settings.brightness_flickering !== undefined ? settings.brightness_flickering : brightness_flickering;
noise_strength = settings.noise_strength !== undefined ? settings.noise_strength : noise_strength;
screen_distortion = settings.screen_distortion !== undefined ? settings.screen_distortion : screen_distortion;
glowing_line_strength = settings.glowing_line_strength !== undefined ? settings.glowing_line_strength : glowing_line_strength;
motion_blur = settings.motion_blur !== undefined ? settings.motion_blur : motion_blur
bloom_strength = settings.bloom_strength !== undefined ? settings.bloom_strength : bloom_strength
frames_index = settings.frames_index !== undefined ? settings.frames_index : frames_index;
rasterization = settings.rasterization !== undefined ? settings.rasterization : rasterization;
jitter = settings.jitter !== undefined ? settings.jitter : jitter;
ambient_light = settings.ambient_light !== undefined ? settings.ambient_light : ambient_light;
contrast = settings.contrast !== undefined ? settings.contrast : contrast;
brightness = settings.brightness !== undefined ? settings.brightness : brightness;
windowOpacity = settings.windowOpacity !== undefined ? settings.windowOpacity : windowOpacity;
fontIndexes[rasterization] = settings.fontIndex !== undefined ? settings.fontIndex : fontIndexes[rasterization];
}
function storeCustomProfiles(){
storage.setSetting("_CUSTOM_PROFILES", composeCustomProfilesString());
}
function loadCustomProfiles(){
var customProfileString = storage.getSetting("_CUSTOM_PROFILES");
if(customProfileString === undefined) customProfileString = "[]";
loadCustomProfilesString(customProfileString);
}
function loadCustomProfilesString(customProfilesString){
var customProfiles = JSON.parse(customProfilesString);
for (var i=0; i<customProfiles.length; i++) {
var profile = customProfiles[i];
console.log("Loading custom profile: " + JSON.stringify(profile));
profiles_list.append(profile);
}
}
function composeCustomProfilesString(){
var customProfiles = []
for(var i=0; i<profileslist.count; i++){
var profile = profileslist.get(i);
if(profile.builtin) continue;
customProfiles.push({text: profile.text, obj_string: profile.obj_string, builtin: false})
}
return JSON.stringify(customProfiles);
}
function loadCurrentProfile(){
loadProfile(profiles_index);
}
function loadProfile(index){
var profile = profileslist.get(index);
loadProfileString(profile.obj_string);
}
function addNewCustomProfile(name){
var profileString = composeProfileString();
profileslist.append({text: name, obj_string: profileString, builtin: false});
}
// PROFILES ///////////////////////////////////////////////////////////////
ListModel{
id: profileslist
ListElement{
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}'
builtin: true
}
ListElement{
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}'
builtin: true
}
ListElement{
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}'
builtin: true
}
ListElement{
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}'
builtin: true
}
ListElement{
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}'
builtin: true
}
ListElement{
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}'
builtin: true
}
ListElement{
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}'
builtin: true
}
ListElement{
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}'
builtin: true
}
}
Component.onCompleted: {
loadSettings();
loadCustomProfiles();
}
Component.onDestruction: {
storeSettings();
storeCustomProfiles();
//storage.dropSettings(); //DROPS THE SETTINGS!.. REMEMBER TO DISABLE ONCE ENABLED!!
}
}

View File

@@ -1,71 +0,0 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
*
* This file is part of cool-old-term.
*
* cool-old-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
Item{
property int selectedFontIndex
property int selectedScalingIndex
property alias fontlist: fontlist
property var _font: fontlist.get(selectedFontIndex)
property var _scaling: fontScalingList[selectedScalingIndex]
property var source: _font.source
property var fontScalingList: [0.75, 1.0, 1.25, 1.50, 1.75, 2.0, 2.25, 2.5]
property int pixelSize: _font.pixelSize * _scaling
property int lineSpacing: (_font.pixelSize / _font.virtualCharHeight) * _font.lineSpacing
property size virtualCharSize: Qt.size(_font.virtualCharWidth,
_font.virtualCharHeight)
ListModel{
id: fontlist
ListElement{
text: "Commodore PET (1977)"
source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
lineSpacing: 2
virtualCharWidth: 8
virtualCharHeight: 8
pixelSize: 32
}
ListElement{
text: "Apple ][ (1977)"
source: "fonts/1977-apple2/PrintChar21.ttf"
lineSpacing: 2
virtualCharWidth: 7
virtualCharHeight: 8
pixelSize: 32
}
ListElement{
text: "Atari 400-800 (1979)"
source: "fonts/1979-atari-400-800/ATARI400800_original.TTF"
lineSpacing: 3
virtualCharWidth: 8
virtualCharHeight: 8
pixelSize: 32
}
ListElement{
text: "Commodore 64 (1982)"
source: "fonts/1982-commodore64/C64_User_Mono_v1.0-STYLE.ttf"
lineSpacing: 3
virtualCharWidth: 8
virtualCharHeight: 8
pixelSize: 32
}
}
}

View File

@@ -1,79 +0,0 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
*
* This file is part of cool-old-term.
*
* cool-old-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
Item{
property int selectedFontIndex
property int selectedScalingIndex
property alias fontlist: fontlist
property var _font: fontlist.get(selectedFontIndex)
property var _scaling: fontScalingList[selectedScalingIndex]
property var source: _font.source
property var fontScalingList: [0.75, 1.0, 1.25, 1.50, 1.75, 2.0, 2.25, 2.50]
property int pixelSize: _font.pixelSize * _scaling
property int lineSpacing: (_font.pixelSize / _font.virtualCharHeight) * _font.lineSpacing
property size virtualCharSize: Qt.size(_font.virtualCharWidth,
_font.virtualCharHeight)
ListModel{
id: fontlist
ListElement{
text: "Commodore PET 2Y (1977)"
source: "fonts/1977-commodore-pet/COMMODORE_PET_2y.ttf"
lineSpacing: 2
virtualCharWidth: 4
virtualCharHeight: 8
pixelSize: 32
}
ListElement{
text: "Commodore PET (1977)"
source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
lineSpacing: 2
virtualCharWidth: 8
virtualCharHeight: 8
pixelSize: 32
}
ListElement{
text: "Apple ][ (1977)"
source: "fonts/1977-apple2/PrintChar21.ttf"
lineSpacing: 2
virtualCharWidth: 8
virtualCharHeight: 8
pixelSize: 32
}
ListElement{
text: "Atari 400-800 (1979)"
source: "fonts/1979-atari-400-800/ATARI400800_original.TTF"
lineSpacing: 3
virtualCharWidth: 8
virtualCharHeight: 8
pixelSize: 32
}
ListElement{
text: "Commodore 64 (1982)"
source: "fonts/1982-commodore64/C64_User_Mono_v1.0-STYLE.ttf"
lineSpacing: 3
virtualCharWidth: 8
virtualCharHeight: 8
pixelSize: 32
}
}
}

View File

@@ -1,87 +0,0 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
*
* This file is part of cool-old-term.
*
* cool-old-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
Item{
property int selectedFontIndex
property int selectedScalingIndex
property alias fontlist: fontlist
property var source: fontlist.get(selectedFontIndex).source
property var _font: fontlist.get(selectedFontIndex)
property var _scaling: fontScalingList[selectedScalingIndex]
property var fontScalingList: [0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5]
property int pixelSize: _font.pixelSize * _scaling
property int lineSpacing: pixelSize * _font.lineSpacing
//In this configuration lineSpacing is proportional to pixelSize.
ListModel{
id: fontlist
ListElement{
text: "Terminus (Modern)"
source: "fonts/modern-terminus/TerminusTTF-Bold-4.38.2.ttf"
lineSpacing: 0.2
pixelSize: 35
}
ListElement{
text: "Commodore PET (1977)"
source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
lineSpacing: 0.2
pixelSize: 24
}
ListElement{
text: "Commodore PET 2Y (1977)"
source: "fonts/1977-commodore-pet/COMMODORE_PET_2y.ttf"
lineSpacing: 0.2
pixelSize: 32
}
ListElement{
text: "Apple ][ (1977)"
source: "fonts/1977-apple2/PrintChar21.ttf"
lineSpacing: 0.2
pixelSize: 24
}
ListElement{
text: "Atari 400-800 (1979)"
source: "fonts/1979-atari-400-800/ATARI400800_original.TTF"
lineSpacing: 0.3
pixelSize: 24
}
ListElement{
text: "Commodore 64 (1982)"
source: "fonts/1982-commodore64/C64_User_Mono_v1.0-STYLE.ttf"
lineSpacing: 0.3
pixelSize: 24
}
ListElement{
text: "Atari ST (1985)"
source: "fonts/1985-atari-st/AtariST8x16SystemFont.ttf"
lineSpacing: 0.2
pixelSize: 32
}
ListElement{
text: "IBM DOS (1985)"
source: "fonts/1985-ibm-pc-vga/Perfect DOS VGA 437.ttf"
lineSpacing: 0.2
pixelSize: 32
}
}
}

View File

@@ -1,426 +0,0 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
*
* This file is part of cool-old-term.
*
* cool-old-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 QtGraphicalEffects 1.0
import QtQuick.Controls 1.1
import org.kde.konsole 0.1
Item{
id: terminalContainer
property variant theSource: finalSource
property variant bloomSource: bloomSourceLoader.item
property variant rasterizationSource: rasterizationEffectSource
property variant staticNoiseSource: staticNoiseSource
property alias kterminal: kterminal
signal sizeChanged
onWidthChanged: sizeChanged()
onHeightChanged: sizeChanged()
//The blur effect has to take into account the framerate
property int fps: shadersettings.fps !== 0 ? shadersettings.fps : 60
property real fpsAttenuation: Math.sqrt(60 / fps)
property real mBlur: shadersettings.motion_blur
property real motionBlurCoefficient: (_maxBlurCoefficient * mBlur + _minBlurCoefficient * (1 - mBlur))
property real _minBlurCoefficient: 0.70
property real _maxBlurCoefficient: 0.90
property size virtualPxSize: Qt.size(1,1)
property size virtual_resolution: Qt.size(width / virtualPxSize.width, height / virtualPxSize.height)
property real deltay: 0.5 / virtual_resolution.height
property real deltax: 0.5 / virtual_resolution.width
property real mBloom: shadersettings.bloom_strength
property int mScanlines: shadersettings.rasterization
onMScanlinesChanged: restartBlurredSource()
property size terminalSize: kterminal.terminalSize
property size paintedTextSize
onMBlurChanged: restartBlurredSource()
function restartBlurredSource(){
if(!blurredSource) return;
blurredSource.live = true;
livetimer.restart()
}
function pasteClipboard(){
kterminal.pasteClipboard();
}
function copyClipboard(){
kterminal.copyClipboard();
}
KTerminal {
id: kterminal
anchors.fill: parent
colorScheme: "cool-old-term"
session: KSession {
id: ksession
kbScheme: "linux"
onFinished: {
Qt.quit()
}
}
FontLoader{ id: fontLoader }
Text{id: fontMetrics; text: "B"; visible: false}
function getPaintedSize(pixelSize){
fontMetrics.font.family = fontLoader.name;
fontMetrics.font.pixelSize = pixelSize;
return Qt.size(fontMetrics.paintedWidth, fontMetrics.paintedHeight);
}
function isValid(size){
return size.width >= 0 && size.height >= 0;
}
function handleFontChange(fontSource, pixelSize, lineSpacing, virtualCharSize){
fontLoader.source = fontSource;
font.pixelSize = pixelSize * shadersettings.window_scaling;
font.family = fontLoader.name;
var paintedSize = getPaintedSize(pixelSize);
var charSize = isValid(virtualCharSize)
? virtualCharSize
: Qt.size(paintedSize.width / 2, paintedSize.height / 2);
var virtualPxSize = Qt.size((paintedSize.width / charSize.width) * shadersettings.window_scaling,
(paintedSize.height / charSize.height) * shadersettings.window_scaling)
terminalContainer.virtualPxSize = virtualPxSize;
setLineSpacing(lineSpacing * shadersettings.window_scaling);
restartBlurredSource();
}
Component.onCompleted: {
shadersettings.terminalFontChanged.connect(handleFontChange);
forceActiveFocus();
}
}
Menu{
id: contextmenu
MenuItem{action: copyAction}
MenuItem{action: pasteAction}
MenuSeparator{}
MenuItem{action: fullscreenAction}
MenuItem{action: showMenubarAction}
}
MouseArea{
acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
anchors.fill: parent
onWheel:{
var coord = correctDistortion(wheel.x, wheel.y);
var lines = wheel.angleDelta.y > 0 ? -2 : 2;
kterminal.scrollWheel(coord.width, coord.height, lines);
}
onClicked: {
if (mouse.button == Qt.RightButton){
contextmenu.popup();
} else if (mouse.button == Qt.MiddleButton){
kterminal.pasteSelection();
}
}
onDoubleClicked: {
if (mouse.button == Qt.LeftButton){
var coord = correctDistortion(mouse.x, mouse.y);
kterminal.mouseDoubleClick(coord.width, coord.height);
}
}
onPositionChanged: {
if (pressedButtons & Qt.LeftButton){
var coord = correctDistortion(mouse.x, mouse.y);
kterminal.mouseMove(coord.width, coord.height);
}
}
onPressed: {
if (mouse.button == Qt.LeftButton){
var coord = correctDistortion(mouse.x, mouse.y);
kterminal.mousePress(coord.width, coord.height);
}
}
onReleased: {
if (mouse.button == Qt.LeftButton){
var coord = correctDistortion(mouse.x, mouse.y);
kterminal.mouseRelease(coord.width, coord.height);
}
}
//Frame displacement properties
property real dtop: frame.item.displacementTop
property real dleft:frame.item.displacementLeft
property real dright: frame.item.displacementRight
property real dbottom: frame.item.displacementBottom
function correctDistortion(x, y){
x = x / width;
y = y / height;
x = (-dleft + x * (width + dleft + dright)) / width
y = (-dtop + y * (height + dtop + dbottom)) / height
var cc = Qt.size(0.5 - x, 0.5 - y);
var distortion = (cc.height * cc.height + cc.width * cc.width) * shadersettings.screen_distortion;
return Qt.size((x - cc.width * (1+distortion) * distortion) * width,
(y - cc.height * (1+distortion) * distortion) * height)
}
}
ShaderEffectSource{
id: source
sourceItem: kterminal
hideSource: true
smooth: false
}
ShaderEffectSource{
id: blurredSource
sourceItem: blurredterminal
recursive: true
live: false
hideSource: true
smooth: false
antialiasing: false
Timer{
id: livetimer
running: true
onRunningChanged: running ?
timeManager.onTimeChanged.connect(blurredSource.scheduleUpdate) :
timeManager.onTimeChanged.disconnect(blurredSource.scheduleUpdate)
Component.onCompleted: kterminal.updatedImage.connect(restart);
}
}
ShaderEffectSource{
id: finalSource
sourceItem: blurredterminal
sourceRect: frame.sourceRect
//format: ShaderEffectSource.Alpha
hideSource: true
}
ShaderEffect {
id: blurredterminal
anchors.fill: parent
property variant source: source
property variant blurredSource: (mBlur !== 0) ? blurredSource : undefined
property size virtual_resolution: parent.virtual_resolution
property size delta: Qt.size((mScanlines == shadersettings.pixel_rasterization ? deltax : 0),
mScanlines != shadersettings.no_rasterization ? deltay : 0)
blending: false
fragmentShader:
"uniform lowp float qt_Opacity;" +
"uniform lowp sampler2D source;" +
"uniform highp vec2 delta;" +
"varying highp vec2 qt_TexCoord0;
uniform highp vec2 virtual_resolution;" +
(mBlur !== 0 ?
"uniform lowp sampler2D blurredSource;"
: "") +
"void main() {" +
"vec2 coords = qt_TexCoord0;" +
(mScanlines != shadersettings.no_rasterization ? "
coords.y = floor(virtual_resolution.y * coords.y) / virtual_resolution.y;" +
(mScanlines == shadersettings.pixel_rasterization ? "
coords.x = floor(virtual_resolution.x * coords.x) / virtual_resolution.x;" : "")
: "") +
"coords = coords + delta;" +
"vec4 vcolor = texture2D(source, coords) * 256.0;
float color = vcolor.r * 0.21 + vcolor.g * 0.72 + vcolor.b + 0.04;" +
(mBlur !== 0 ?
"float blurredSourceColor = texture2D(blurredSource, coords).a * 256.0;" +
"blurredSourceColor = blurredSourceColor - blurredSourceColor * " + (1.0 - motionBlurCoefficient) * fpsAttenuation+ ";" +
"color = step(1.0, color) * color + step(color, 1.0) * blurredSourceColor;"
: "") +
"gl_FragColor.a = floor(color) / 256.0;" +
"}"
onStatusChanged: if (log) console.log(log) //Print warning messages
}
///////////////////////////////////////////////////////////////////////////
// EFFECTS //////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
// BLOOM ////////////////////////////////////////////////////////////////
Loader{
id: bloomEffectLoader
active: mBloom != 0
anchors.fill: parent
sourceComponent: FastBlur{
radius: 48
source: kterminal
transparentBorder: true
smooth: false
}
}
Loader{
id: bloomSourceLoader
active: mBloom != 0
sourceComponent: ShaderEffectSource{
sourceItem: bloomEffectLoader.item
hideSource: true
sourceRect: frame.sourceRect
smooth: false
}
}
// NOISE ////////////////////////////////////////////////////////////////
ShaderEffect {
id: staticNoiseEffect
anchors.fill: parent
property size virtual_resolution: terminalContainer.virtual_resolution
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
//format: ShaderEffectSource.Alpha
}
// RASTERIZATION //////////////////////////////////////////////////////////
ShaderEffect{
id: rasterizationContainer
width: frame.sourceRect.width
height: frame.sourceRect.height
property size offset: Qt.size(width - rasterizationEffect.width, height - rasterizationEffect.height)
property size txtRes: Qt.size(width, height)
blending: false
fragmentShader:
"uniform lowp float qt_Opacity;
uniform highp vec2 offset;
uniform highp vec2 txtRes;" +
"varying highp vec2 qt_TexCoord0;" +
"void main() {" +
"float color = 1.0;
color *= smoothstep(0.0, offset.x / txtRes.x, qt_TexCoord0.x);
color *= smoothstep(0.0, offset.y / txtRes.y, qt_TexCoord0.y);
color *= smoothstep(0.0, offset.x / txtRes.x, 1.0 - qt_TexCoord0.x);
color *= smoothstep(0.0, offset.y / txtRes.y, 1.0 - qt_TexCoord0.y);" +
"float distance = length(vec2(0.5) - qt_TexCoord0);" +
"color = mix(color, 0.0, 1.2 * distance * distance);" +
"gl_FragColor.a = color;" +
"}"
ShaderEffect {
id: rasterizationEffect
width: terminalContainer.width
height: terminalContainer.height
anchors.centerIn: parent
property size virtual_resolution: terminalContainer.virtual_resolution
blending: false
fragmentShader:
"uniform lowp float qt_Opacity;" +
"varying highp vec2 qt_TexCoord0;
uniform highp vec2 virtual_resolution;
float getScanlineIntensity(vec2 coords) {
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() {" +
"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
}
onStatusChanged: if (log) console.log(log) //Print warning messages
}
ShaderEffectSource{
id: rasterizationEffectSource
sourceItem: rasterizationContainer
hideSource: true
smooth: true
//format: ShaderEffectSource.Alpha
}
}

View File

@@ -1,79 +0,0 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
*
* This file is part of cool-old-term.
*
* cool-old-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
Tab{
GroupBox{
title: qsTr("Effects")
anchors.fill: parent
ColumnLayout{
anchors.fill: parent
CheckableSlider{
name: qsTr("Bloom")
onValueChanged: shadersettings.bloom_strength = value
_value: shadersettings.bloom_strength
}
CheckableSlider{
name: qsTr("Motion Blur")
onValueChanged: shadersettings.motion_blur = value
_value: shadersettings.motion_blur
}
CheckableSlider{
name: qsTr("Noise")
onValueChanged: shadersettings.noise_strength = value
_value: shadersettings.noise_strength
}
CheckableSlider{
name: qsTr("Jitter")
onValueChanged: shadersettings.jitter = value
_value: shadersettings.jitter
}
CheckableSlider{
name: qsTr("Glow")
onValueChanged: shadersettings.glowing_line_strength = value;
_value: shadersettings.glowing_line_strength
}
CheckableSlider{
name: qsTr("Screen distortion")
onValueChanged: shadersettings.screen_distortion = value;
_value: shadersettings.screen_distortion;
}
CheckableSlider{
name: qsTr("Ambient light")
onValueChanged: shadersettings.ambient_light = value;
_value: shadersettings.ambient_light
enabled: shadersettings.frames_index !== 0
}
CheckableSlider{
name: qsTr("Brightness flickering")
onValueChanged: shadersettings.brightness_flickering= value;
_value: shadersettings.brightness_flickering;
}
CheckableSlider{
name: qsTr("Horizontal flickering")
onValueChanged: shadersettings.horizontal_sincronization = value;
_value: shadersettings.horizontal_sincronization;
}
}
}
}

View File

@@ -1,141 +0,0 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
*
* This file is part of cool-old-term.
*
* cool-old-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
Tab{
ColumnLayout{
anchors.fill: parent
GroupBox{
Layout.fillWidth: true
title: qsTr("Profile")
ColumnLayout{
anchors.fill: parent
ComboBox{
id: profilesbox
Layout.fillWidth: true
model: shadersettings.profiles_list
currentIndex: shadersettings.profiles_index
}
RowLayout{
Layout.fillWidth: true
Button{
Layout.fillWidth: true
text: qsTr("Load")
onClicked: {
shadersettings.profiles_index = profilesbox.currentIndex
shadersettings.loadCurrentProfile();
shadersettings.handleFontChanged();
}
}
Button{
Layout.fillWidth: true
text: qsTr("Store current")
onClicked: insertname.show()
}
Button{
Layout.fillWidth: true
text: qsTr("Remove Selected")
enabled: !shadersettings.profiles_list.get(profilesbox.currentIndex).builtin
onClicked: {
shadersettings.profiles_list.remove(profilesbox.currentIndex)
profilesbox.currentIndex = profilesbox.currentIndex - 1
}
}
}
InsertNameDialog{
id: insertname
onNameSelected: shadersettings.addNewCustomProfile(name)
}
}
}
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("Performace")
Layout.fillWidth: true
Layout.columnSpan: 2
anchors.left: parent.left
anchors.right: parent.right
GridLayout{
anchors.fill: parent
rows: 3
columns: 3
CheckBox{
Layout.columnSpan: 3
checked: !shadersettings._frameReflections
text: qsTr("Disable reflections")
onCheckedChanged: shadersettings._frameReflections = !checked
enabled: shadersettings.reflectionsAllowed
}
CheckBox{
property int fps: checked ? slider.value : 0
onFpsChanged: shadersettings.fps = fps
checked: shadersettings.fps !== 0
text: qsTr("Limit FPS")
}
Slider{
id: slider
Layout.fillWidth: true
stepSize: 1
maximumValue: 60
minimumValue: 1
enabled: shadersettings.fps !== 0
value: shadersettings.fps !== 0 ? shadersettings.fps : 60
}
Text{text: slider.value}
Text{text: qsTr("Texture quality")}
Slider{
Layout.fillWidth: true
id: txtslider
onValueChanged: shadersettings.window_scaling = value;
value: shadersettings.window_scaling
tickmarksEnabled: true
stepSize: 0.25
Component.onCompleted: minimumValue = 0.5 //Without this value gets set to 0.5
}
Text{text: Math.round(txtslider.value * 100) + "%"}
}
}
}
}

View File

@@ -1,128 +0,0 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
*
* This file is part of cool-old-term.
*
* cool-old-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
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: shadersettings.rasterization
onCurrentIndexChanged: {
scalingChanger.enabled = false;
shadersettings.rasterization = currentIndex
fontChanger.updateIndex();
scalingChanger.updateIndex();
scalingChanger.enabled = true;
}
}
}
GroupBox{
title: qsTr("Font") + " (" + rasterizationBox.selectedElement + ")"
Layout.fillWidth: true
GridLayout{
anchors.fill: parent
columns: 2
Text{ text: qsTr("Name") }
ComboBox{
id: fontChanger
Layout.fillWidth: true
model: shadersettings.fontlist
currentIndex: updateIndex()
onActivated: {
shadersettings.fontIndexes[shadersettings.rasterization] = index;
shadersettings.handleFontChanged();
}
function updateIndex(){
currentIndex = shadersettings.fontIndexes[shadersettings.rasterization];
}
}
Text{ text: qsTr("Scaling") }
RowLayout{
Layout.fillWidth: true
Slider{
id: scalingChanger
Layout.fillWidth: true
minimumValue: 0
maximumValue: shadersettings.fontScalingList.length - 1
stepSize: 1
tickmarksEnabled: true
value: updateIndex()
onValueChanged: {
if(!enabled) return; //Ugly and hacky solution. Look for a better solution.
shadersettings.setScalingIndex(value);
}
function updateIndex(){
value = shadersettings.getScalingIndex();
}
Component.onCompleted: shadersettings.fontScalingChanged.connect(updateIndex);
}
Text{
text: shadersettings.fontScalingList[scalingChanger.value].toFixed(2)
}
}
}
}
GroupBox{
title: qsTr("Colors")
Layout.fillWidth: true
RowLayout{
anchors.fill: parent
ColorButton{
name: qsTr("Font")
height: 50
Layout.fillWidth: true
onColorSelected: shadersettings._font_color = color;
button_color: shadersettings._font_color
}
ColorButton{
name: qsTr("Background")
height: 50
Layout.fillWidth: true
onColorSelected: shadersettings._background_color = color;
button_color: shadersettings._background_color
}
}
}
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

@@ -1,200 +0,0 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
*
* This file is part of cool-old-term.
*
* cool-old-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 QtGraphicalEffects 1.0
ShaderEffect {
property color font_color: shadersettings.font_color
property color background_color: shadersettings.background_color
property variant source: terminal.theSource
property variant bloomSource: terminal.bloomSource
property variant rasterizationSource: terminal.rasterizationSource
property variant noiseSource: terminal.staticNoiseSource
property size txt_Size: Qt.size(frame.sourceRect.width, frame.sourceRect.height)
property real bloom: shadersettings.bloom_strength * 2.5
property int rasterization: shadersettings.rasterization
property real jitter: shadersettings.jitter * 0.007
property real noise_strength: shadersettings.noise_strength
property real screen_distorsion: shadersettings.screen_distortion
property real glowing_line_strength: shadersettings.glowing_line_strength
property real brightness_flickering: shadersettings.brightness_flickering
property real horizontal_sincronization: shadersettings.horizontal_sincronization
property bool frameReflections: shadersettings.frameReflections
property real disp_top: frame.item.displacementTop * shadersettings.window_scaling
property real disp_bottom: frame.item.displacementBottom * shadersettings.window_scaling
property real disp_left: frame.item.displacementLeft * shadersettings.window_scaling
property real disp_right: frame.item.displacementRight * shadersettings.window_scaling
property real brightness: shadersettings.brightness * 1.5 + 0.5
property real time: timeManager.time
property variant randomFunctionSource: randfuncsource
blending: false
//Smooth random texture used for flickering effect.
Image{
id: randtexture
source: "frames/images/randfunction.png"
width: 512
height: 512
sourceSize.width: 512
sourceSize.height: 256
fillMode: Image.TileVertically
}
ShaderEffectSource{
id: randfuncsource
sourceItem: randtexture
live: false
hideSource: true
wrapMode: ShaderEffectSource.Repeat
}
//Print the number with a reasonable precision for the shader.
function str(num){
return num.toFixed(8);
}
vertexShader: "
uniform highp mat4 qt_Matrix;
uniform highp float time;
uniform sampler2D randomFunctionSource;
uniform highp vec2 txt_Size;
attribute highp vec4 qt_Vertex;
attribute highp vec2 qt_MultiTexCoord0;
varying highp vec2 qt_TexCoord0;" +
(brightness_flickering !== 0.0 ?"
varying lowp float brightness;" : "") +
(horizontal_sincronization !== 0.0 ?"
varying lowp float horizontal_distortion;" : "") +
"
void main() {
qt_TexCoord0.x = -"+str(disp_left)+"/txt_Size.x + qt_MultiTexCoord0.x / ((txt_Size.x -("+str(disp_left+disp_right)+")) / txt_Size.x);" + "
qt_TexCoord0.y = -"+str(disp_top)+"/txt_Size.y + qt_MultiTexCoord0.y / ((txt_Size.y -("+str(disp_top+disp_bottom)+")) / txt_Size.y);" + "
vec2 coords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));" +
(brightness_flickering !== 0.0 ? "
brightness = 1.0 + (texture2D(randomFunctionSource, coords).g - 0.5) * "+str(brightness_flickering)+";"
: "") +
(horizontal_sincronization !== 0.0 ? "
float randval = 1.5 * texture2D(randomFunctionSource,(vec2(1.0) -coords) * 0.5).g;
float negsinc = 1.0 - "+str(0.6*horizontal_sincronization)+";
horizontal_distortion = step(negsinc, randval) * (randval - negsinc) * "+str(0.3*horizontal_sincronization)+";"
: "") +
"gl_Position = qt_Matrix * qt_Vertex;
}"
fragmentShader: "
uniform sampler2D source;
uniform highp float qt_Opacity;
uniform highp float time;
uniform highp vec2 txt_Size;
varying highp vec2 qt_TexCoord0;
uniform highp vec4 font_color;
uniform highp vec4 background_color;
uniform highp sampler2D rasterizationSource;" +
(bloom !== 0 ? "
uniform highp sampler2D bloomSource;" : "") +
(noise_strength !== 0 ? "
uniform highp float noise_strength;" : "") +
(noise_strength !== 0 || jitter !== 0 ? "
uniform lowp sampler2D noiseSource;" : "") +
(screen_distorsion !== 0 ? "
uniform highp float screen_distorsion;" : "")+
(glowing_line_strength !== 0 ? "
uniform highp float glowing_line_strength;" : "")+
(brightness_flickering !== 0 ? "
varying lowp float brightness;" : "") +
(horizontal_sincronization !== 0 ? "
varying lowp float horizontal_distortion;" : "") +
(glowing_line_strength !== 0 ? "
float randomPass(vec2 coords){
return fract(smoothstep(-0.2, 0.0, coords.y - 3.0 * fract(time * 0.0001))) * glowing_line_strength;
}" : "") +
"void main() {" +
"vec2 cc = vec2(0.5) - qt_TexCoord0;" +
"float distance = length(cc);" +
(noise_strength ? "
float noise = noise_strength;" : "") +
(screen_distorsion !== 0 ? "
float distortion = dot(cc, cc) * screen_distorsion;
vec2 coords = (qt_TexCoord0 - cc * (1.0 + distortion) * distortion);"
:"
vec2 coords = qt_TexCoord0;") +
(frameReflections ? "
vec2 inside = step(0.0, coords) - step(1.0, coords);
coords = abs(mod(floor(coords), 2.0) - fract(coords)) * clamp(inside.x + inside.y, 0.0, 1.0);" : "") +
(horizontal_sincronization !== 0 ? "
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));
coords.x = coords.x + h_distortion * horizontal_distortion;" +
(noise_strength ? "
noise += horizontal_distortion;" : "")
: "") +
(jitter !== 0 ? "
vec2 offset = vec2(texture2D(noiseSource, coords + fract(time / 57.0)).a,
texture2D(noiseSource, coords + fract(time / 251.0)).a) - 0.5;
vec2 txt_coords = coords + offset * "+str(jitter)+";"
: "vec2 txt_coords = coords;") +
"float color = texture2D(source, txt_coords).a;" +
(noise_strength !== 0 ? "
float noiseVal = texture2D(noiseSource, qt_TexCoord0 + vec2(fract(time / 51.0), fract(time / 237.0))).a;
color += noiseVal * noise * (1.0 - distance * 1.3);" : "") +
(glowing_line_strength !== 0 ? "
color += randomPass(coords) * glowing_line_strength;" : "") +
"vec3 finalColor = mix(background_color, font_color, color).rgb;" +
"finalColor *= texture2D(rasterizationSource, coords).a;" +
(bloom !== 0 ? "
finalColor += font_color.rgb * texture2D(bloomSource, coords).r *" + str(bloom) + ";" : "") +
(brightness_flickering !== 0 ? "
finalColor *= brightness;" : "") +
"gl_FragColor = vec4(finalColor *"+str(brightness)+", qt_Opacity);
}"
onStatusChanged: if (log) console.log(log) //Print warning messages
}

36
app/app.pro Normal file
View File

@@ -0,0 +1,36 @@
QT += qml quick widgets sql
TARGET = cool-retro-term
DESTDIR = $$OUT_PWD/../
HEADERS += \
fileio.h
SOURCES = main.cpp \
fileio.cpp
macx:ICON = icons/crt.icns
RESOURCES += qml/resources.qrc
#########################################
## INTALLS
#########################################
target.path += /usr/bin/
INSTALLS += target
# Install icons
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

@@ -1,28 +0,0 @@
import QtQuick 2.2
import "utils"
TerminalFrame{
id: frame
z: 2.1
anchors.fill: parent
addedWidth: 200
addedHeight: 370
borderLeft: 148
borderRight: 148
borderTop: 232
borderBottom: 232
imageSource: "../images/black-frame.png"
normalsSource: "../images/black-frame-normals.png"
rectX: 20
rectY: 20
distortionCoefficient: 1.9
displacementLeft: 70.0
displacementTop: 55.0
displacementRight: 50.0
displacementBottom: 38.0
shaderString: "FrameShader.qml"
}

View File

@@ -1,22 +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
rectX: 15
rectY: 15
displacementLeft: 0
displacementTop: 0
displacementRight: 0
displacementBottom: 0
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 507 KiB

View File

@@ -1,91 +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
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;" +
(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);
}
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 ? "
float screenLight = texture2D(lightSource, coords).r;
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);"
: "
float diffuseReflection = 0.0;
float reflectionAlpha = 1.0;") + "
vec3 back_color = background_color.rgb * (0.2 + 0.5 * dotProd);
vec3 front_color = font_color.rgb * (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,81 +0,0 @@
import QtQuick 2.2
Item{
id: framecontainer
property int textureWidth: terminalWindow.width
property int textureHeight: terminalWindow.height
property int addedWidth
property int addedHeight
property int borderLeft
property int borderRight
property int borderTop
property int borderBottom
property string imageSource
property string normalsSource
property string shaderString
//Value used to create the rect used to add the border to the texture
property real rectX
property real rectY
//Values used to displace the texture in the screen. Used to make reflections correct.
property real displacementLeft
property real displacementTop
property real displacementRight
property real displacementBottom
property real distortionCoefficient
property rect sourceRect: Qt.rect(-rectX * shadersettings.window_scaling,
-rectY * shadersettings.window_scaling,
terminal.width + 2*rectX * shadersettings.window_scaling,
terminal.height + 2*rectY * shadersettings.window_scaling)
BorderImage{
id: frameimage
anchors.centerIn: parent
width: textureWidth + addedWidth
height: textureHeight + addedHeight
border.bottom: borderBottom
border.top: borderTop
border.left: borderLeft
border.right: borderRight
source: imageSource
horizontalTileMode: BorderImage.Stretch
verticalTileMode: BorderImage.Stretch
}
BorderImage{
id: framenormals
anchors.fill: frameimage
border.bottom: borderBottom
border.top: borderTop
border.left: borderLeft
border.right: borderRight
source: normalsSource
horizontalTileMode: BorderImage.Stretch
verticalTileMode: BorderImage.Stretch
}
ShaderEffectSource{
id: framesource
sourceItem: frameimage
hideSource: true
textureSize: Qt.size(parent.width, parent.height)
}
ShaderEffectSource{
id: framesourcenormals
sourceItem: framenormals
hideSource: true
textureSize: Qt.size(parent.width, parent.height)
}
Loader{
anchors.centerIn: parent
width: parent.width + (addedWidth / textureWidth) * parent.width
height: parent.height + (addedHeight / textureHeight) * parent.height
source: shaderString
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
app/icons/crt.icns Normal file

Binary file not shown.

107
app/main.cpp Normal file
View File

@@ -0,0 +1,107 @@
#include <QtQml/QQmlApplicationEngine>
#include <QtGui/QGuiApplication>
#include <QQmlContext>
#include <QStringList>
#include <QtWidgets/QApplication>
#include <QIcon>
#include <QDebug>
#include <stdlib.h>
#include <fileio.h>
QString getNamedArgument(QStringList args, QString name, QString defaultName)
{
int index = args.indexOf(name);
return (index != -1) ? args[index + 1] : QString(defaultName);
}
QString getNamedArgument(QStringList args, QString name)
{
return getNamedArgument(args, name, "");
}
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);
#if defined(Q_OS_MAC)
// This allows UTF-8 characters usage in OSX.
setenv("LC_CTYPE", "UTF-8", 1);
#endif
QApplication app(argc, argv);
// set application attributes
// Has no effects, see https://bugreports.qt.io/browse/QTBUG-51293
// app.setAttribute(Qt::AA_MacDontSwapCtrlAndMeta, true);
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
QStringList args = app.arguments();
if (args.contains("-h") || args.contains("--help")) {
// BUG: This usage help text goes to stderr, should go to stdout.
// BUG: First line of output is surrounded by double quotes.
qDebug() << "Usage: " + args.at(0) + " [--default-settings] [--workdir <dir>] [--program <prog>] [-p|--profile <prof>] [--fullscreen] [-h|--help]";
qDebug() << " --default-settings Run cool-retro-term with the default settings";
qDebug() << " --workdir <dir> Change working directory to 'dir'";
qDebug() << " -e <cmd> Command to execute. This option will catch all following arguments, so use it as the last option.";
qDebug() << " -T <title> Set window title to 'title'.";
qDebug() << " --fullscreen Run cool-retro-term in fullscreen.";
qDebug() << " -p|--profile <prof> Run cool-retro-term with the given profile.";
qDebug() << " -h|--help Print this help.";
qDebug() << " --verbose Print additional information such as profiles and settings.";
return 0;
}
if (args.contains("-v") || args.contains("--version")) {
qDebug() << "cool-retro-term 1.0.1";
return 0;
}
// Manage default command
QStringList cmdList;
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.
QStringList importPathList = engine.importPathList();
importPathList.prepend(QCoreApplication::applicationDirPath() + "/qmltermwidget");
importPathList.prepend(QCoreApplication::applicationDirPath() + "/../PlugIns");
importPathList.prepend(QCoreApplication::applicationDirPath() + "/../../../qmltermwidget");
engine.setImportPathList(importPathList);
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();
}

View File

@@ -1,193 +0,0 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
*
* This file is part of cool-old-term.
*
* cool-old-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.Window 2.1
import QtQuick.Controls 1.1
import QtGraphicalEffects 1.0
import org.kde.konsole 0.1
ApplicationWindow{
id: terminalWindow
width: 1024
height: 768
minimumWidth: 320
minimumHeight: 240
property bool fullscreen: shadersettings.fullscreen
onFullscreenChanged: visibility = (fullscreen ? Window.FullScreen : Window.Windowed)
flags: Qt.WA_TranslucentBackground
color: "#00000000"
title: qsTr("cool-old-term")
Action {
id: showMenubarAction
text: qsTr("Show Menubar")
checkable: true
checked: shadersettings.showMenubar
onTriggered: shadersettings.showMenubar = !shadersettings.showMenubar
}
Action {
id: fullscreenAction
text: qsTr("&Fullscreen")
shortcut: "Alt+F11"
onTriggered: shadersettings.fullscreen = !shadersettings.fullscreen;
checkable: true
checked: shadersettings.fullscreen
}
Action {
id: quitAction
text: qsTr("&Quit")
shortcut: "Ctrl+Q"
onTriggered: terminalWindow.close();
}
Action{
id: showsettingsAction
text: qsTr("&Settings")
onTriggered: settingswindow.show();
}
Action{
id: copyAction
text: qsTr("&Copy")
shortcut: "Ctrl+Shift+C"
onTriggered: terminal.copyClipboard()
}
Action{
id: pasteAction
text: qsTr("&Paste")
shortcut: "Ctrl+Shift+V"
onTriggered: terminal.pasteClipboard()
}
Action{
id: zoomIn
text: qsTr("&Zoom In")
shortcut: "Ctrl++"
onTriggered: {
var oldScaling = shadersettings.fontScalingIndexes[shadersettings.rasterization];
var maxScalingIndex = shadersettings.fontScalingList.length - 1;
shadersettings.setScalingIndex(Math.min(oldScaling + 1, maxScalingIndex));
}
}
Action{
id: zoomOut
text: qsTr("&Zoom Out")
shortcut: "Ctrl+-"
onTriggered: {
var oldScaling = shadersettings.fontScalingIndexes[shadersettings.rasterization];
shadersettings.setScalingIndex(Math.max(oldScaling - 1, 0));
}
}
Action{
id: showAboutAction
text: qsTr("About")
onTriggered: {
aboutDialog.show();
}
}
menuBar: MenuBar {
id: menubar
Menu {
title: qsTr("File")
visible: shadersettings.showMenubar
MenuItem {action: quitAction}
}
Menu {
title: qsTr("Edit")
visible: shadersettings.showMenubar
MenuItem {action: copyAction}
MenuItem {action: pasteAction}
MenuSeparator{}
MenuItem {action: showsettingsAction}
}
Menu{
title: qsTr("View")
visible: shadersettings.showMenubar
MenuItem {action: fullscreenAction}
MenuItem {action: showMenubarAction}
MenuSeparator{}
MenuItem {action: zoomIn}
MenuItem {action: zoomOut}
}
Menu{
title: qsTr("Help")
visible: shadersettings.showMenubar
MenuItem {action: showAboutAction}
}
}
ApplicationSettings{
id: shadersettings
}
TimeManager{
id: timeManager
enableTimer: terminalWindow.visible
}
Item{
id: maincontainer
anchors.centerIn: parent
width: parent.width * shadersettings.window_scaling
height: parent.height * shadersettings.window_scaling
scale: 1.0 / shadersettings.window_scaling
smooth: false
antialiasing: false
opacity: shadersettings.windowOpacity * 0.3 + 0.7
Loader{
id: frame
anchors.fill: parent
property rect sourceRect: item.sourceRect
z: 2.1
source: shadersettings.frame_source
}
PreprocessedTerminal{
id: terminal
anchors.fill: parent
anchors.margins: 30
}
ShaderTerminal{
id: shadercontainer
anchors.fill: parent
z: 1.9
}
}
SettingsWindow{
id: settingswindow
visible: false
}
AboutDialog{
id: aboutDialog
visible: false
}
Loader{
id: sizeoverlayloader
z: 3
anchors.centerIn: parent
active: shadersettings.show_terminal_size
sourceComponent: SizeOverlay{
terminalSize: terminal.terminalSize
}
}
Component.onCompleted: shadersettings.handleFontChanged();
}

View File

@@ -6,8 +6,10 @@ import QtQuick.Window 2.0
Window{
id: dialogwindow
title: qsTr("About")
width: 450
height: 300
width: 600
height: 400
modality: Qt.ApplicationModal
ColumnLayout{
anchors.fill: parent
@@ -15,7 +17,7 @@ Window{
spacing: 15
Text {
anchors.horizontalCenter: parent.horizontalCenter
text: "cool-old-term"
text: "cool-retro-term"
font {bold: true; pointSize: 18}
}
Loader{
@@ -63,18 +65,22 @@ Window{
id: defaultComponent
ColumnLayout{
anchors.fill: parent
anchors.margins: 10
spacing: 10
Item{
Image{
Layout.fillWidth: true
Layout.fillHeight: true
anchors.horizontalCenter: parent.horizontalCenter
fillMode: Image.PreserveAspectFit
source: "images/crt256.png"
smooth: true
}
Text{
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
text: shadersettings.version + "\n" +
text: appSettings.version + "\n" +
qsTr("Author: ") + "Filippo Scognamiglio\n" +
qsTr("Email: ") + "flscogna@gmail.com\n" +
qsTr("Source: ") + "https://github.com/Swordifish90/cool-old-term\n"
qsTr("Email: ") + "flscogna@gmail.com\n" +
qsTr("Source: ") + "https://github.com/Swordfish90/cool-retro-term\n"
}
}
}
@@ -84,9 +90,9 @@ Window{
anchors.fill: parent
readOnly: true
text: "Copyright (c) 2013 Filippo Scognamiglio <flscogna@gmail.com>\n\n" +
"https://github.com/Swordifish90/cool-old-term\n\n" +
"https://github.com/Swordfish90/cool-retro-term\n\n" +
"cool-old-term is free software: you can redistribute it and/or modify " +
"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.\n\n" +

View File

@@ -0,0 +1,508 @@
/*******************************************************************************
* 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.0
import "utils.js" as Utils
QtObject{
property string version: "1.0.1"
// STATIC CONSTANTS ////////////////////////////////////////////////////////
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 showMenubar: true
property string wintitle: "cool-retro-term"
property real windowOpacity: 1.0
property real ambientLight: 0.2
property real contrast: 0.85
property real brightness: 0.5
property bool showTerminalSize: true
property real windowScaling: 1.0
property real fps: 24
property bool verbose: false
onWindowScalingChanged: handleFontChanged();
// PROFILE SETTINGS ///////////////////////////////////////////////////////
property bool useCustomCommand: false
property string customCommand: ""
property string _backgroundColor: "#000000"
property string _fontColor: "#ff8100"
property string saturatedColor: Utils.mix(Utils.strToColor("#FFFFFF"), Utils.strToColor(_fontColor), saturationColor * 0.5)
property color fontColor: Utils.mix(Utils.strToColor(saturatedColor), Utils.strToColor(_backgroundColor), 0.7 + (contrast * 0.3))
property color backgroundColor: Utils.mix(Utils.strToColor(_backgroundColor), Utils.strToColor(saturatedColor), 0.7 + (contrast * 0.3))
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 bloomQuality: 0.5
property real burnInQuality: 0.5
property real chromaColor: 0.0
property real saturationColor: 0.0
property real jitter: 0.18
property real horizontalSync: 0.08
property real flickering: 0.1
property real rbgShift: 0.0
readonly property int no_rasterization: 0
readonly property int scanline_rasterization: 1
readonly property int pixel_rasterization: 2
property int rasterization: no_rasterization
// FONTS //////////////////////////////////////////////////////////////////
property real fontScaling: 1.0
property real fontWidth: 1.0
property bool lowResolutionFont: false
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: [
State { when: rasterization == no_rasterization
PropertyChanges {target: fontManager; source: "Fonts.qml" } },
State { when: rasterization == scanline_rasterization
PropertyChanges {target: fontManager; source: "FontScanlines.qml" } },
State { when: rasterization == pixel_rasterization;
PropertyChanges {target: fontManager; source: "FontPixels.qml" } }
]
onLoaded: 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(){
fontScaling = Math.min(fontScaling + 0.05, maximumFontScaling);
handleFontChanged();
}
function decrementScaling(){
fontScaling = Math.max(fontScaling - 0.05, minimumFontScaling);
handleFontChanged();
}
function handleFontChanged(){
if (!fontManager.item) return;
var index = getIndexByName(fontNames[rasterization]);
if (index === undefined) return;
fontManager.item.selectedFontIndex = index;
fontManager.item.scaling = fontScaling * windowScaling;
var fontSource = fontManager.item.source;
var pixelSize = fontManager.item.pixelSize;
var lineSpacing = fontManager.item.lineSpacing;
var screenScaling = fontManager.item.screenScaling;
var fontWidth = fontManager.item.defaultFontWidth * appSettings.fontWidth;
lowResolutionFont = fontManager.item.lowResolutionFont;
terminalFontChanged(fontSource, pixelSize, lineSpacing, screenScaling, fontWidth);
}
// FRAMES /////////////////////////////////////////////////////////////////
property ListModel framesList: ListModel{
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
onFrameNameChanged: {
var index = getFrameIndexByName(frameName);
frameSource = framesList.get(index).source;
reflectionsAllowed = framesList.get(index).reflections;
}
// DB 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(){
var settings = {
fps: fps,
x: x,
y: y,
width: width,
height: height,
windowScaling: windowScaling,
showTerminalSize: showTerminalSize,
fontScaling: fontScaling,
fontNames: fontNames,
frameReflections: _frameReflections,
showMenubar: showMenubar,
bloomQuality: bloomQuality,
burnInQuality: burnInQuality
}
return stringify(settings);
}
function composeProfileObject(){
var settings = {
backgroundColor: _backgroundColor,
fontColor: _fontColor,
flickering: flickering,
horizontalSync: horizontalSync,
staticNoise: staticNoise,
chromaColor: chromaColor,
saturationColor: saturationColor,
screenCurvature: screenCurvature,
glowingLine: glowingLine,
frameName: frameName,
burnIn: burnIn,
bloom: bloom,
rasterization: rasterization,
jitter: jitter,
rbgShift: rbgShift,
brightness: brightness,
contrast: contrast,
ambientLight: ambientLight,
windowOpacity: windowOpacity,
fontName: fontNames[rasterization],
fontWidth: fontWidth,
useCustomCommand: useCustomCommand,
customCommand: customCommand
}
return settings;
}
function composeProfileString() {
return stringify(composeProfileObject());
}
function loadSettings(){
var settingsString = storage.getSetting("_CURRENT_SETTINGS");
var profileString = storage.getSetting("_CURRENT_PROFILE");
if(!settingsString) return;
if(!profileString) return;
loadSettingsString(settingsString);
loadProfileString(profileString);
if (verbose)
console.log("Loading settings: " + settingsString + profileString);
}
function storeSettings(){
var settingsString = composeSettingsString();
var profileString = composeProfileString();
storage.setSetting("_CURRENT_SETTINGS", settingsString);
storage.setSetting("_CURRENT_PROFILE", profileString);
if (verbose) {
console.log("Storing settings: " + settingsString);
console.log("Storing profile: " + profileString);
}
}
function loadSettingsString(settingsString){
var settings = JSON.parse(settingsString);
showTerminalSize = settings.showTerminalSize !== undefined ? settings.showTerminalSize : showTerminalSize
fps = settings.fps !== undefined ? settings.fps: fps
windowScaling = settings.windowScaling !== undefined ? settings.windowScaling : windowScaling
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
_frameReflections = settings.frameReflections !== undefined ? settings.frameReflections : _frameReflections;
showMenubar = settings.showMenubar !== undefined ? settings.showMenubar : showMenubar;
bloomQuality = settings.bloomQuality !== undefined ? settings.bloomQuality : bloomQuality;
burnInQuality = settings.burnInQuality !== undefined ? settings.burnInQuality : burnInQuality;
}
function loadProfileString(profileString){
var settings = JSON.parse(profileString);
_backgroundColor = settings.backgroundColor !== undefined ? settings.backgroundColor : _backgroundColor;
_fontColor = settings.fontColor !== undefined ? settings.fontColor : _fontColor;
horizontalSync = settings.horizontalSync !== undefined ? settings.horizontalSync : horizontalSync
flickering = settings.flickering !== undefined ? settings.flickering : flickering;
staticNoise = settings.staticNoise !== undefined ? settings.staticNoise : staticNoise;
chromaColor = settings.chromaColor !== undefined ? settings.chromaColor : chromaColor;
saturationColor = settings.saturationColor !== undefined ? settings.saturationColor : saturationColor;
screenCurvature = settings.screenCurvature !== undefined ? settings.screenCurvature : screenCurvature;
glowingLine = settings.glowingLine !== undefined ? settings.glowingLine : glowingLine;
burnIn = settings.burnIn !== undefined ? settings.burnIn : burnIn
bloom = settings.bloom !== undefined ? settings.bloom : bloom
frameName = settings.frameName !== undefined ? settings.frameName : frameName;
rasterization = settings.rasterization !== undefined ? settings.rasterization : rasterization;
jitter = settings.jitter !== undefined ? settings.jitter : jitter;
rbgShift = settings.rbgShift !== undefined ? settings.rbgShift : rbgShift;
ambientLight = settings.ambientLight !== undefined ? settings.ambientLight : ambientLight;
contrast = settings.contrast !== undefined ? settings.contrast : contrast;
brightness = settings.brightness !== undefined ? settings.brightness : brightness;
windowOpacity = settings.windowOpacity !== undefined ? settings.windowOpacity : windowOpacity;
fontNames[rasterization] = settings.fontName !== undefined ? settings.fontName : fontNames[rasterization];
fontWidth = settings.fontWidth !== undefined ? settings.fontWidth : fontWidth;
useCustomCommand = settings.useCustomCommand !== undefined ? settings.useCustomCommand : useCustomCommand
customCommand = settings.customCommand !== undefined ? settings.customCommand : customCommand
handleFontChanged();
}
function storeCustomProfiles(){
storage.setSetting("_CUSTOM_PROFILES", composeCustomProfilesString());
}
function loadCustomProfiles(){
var customProfileString = storage.getSetting("_CUSTOM_PROFILES");
if(customProfileString === undefined) customProfileString = "[]";
loadCustomProfilesString(customProfileString);
}
function loadCustomProfilesString(customProfilesString){
var customProfiles = JSON.parse(customProfilesString);
for (var i=0; i<customProfiles.length; i++) {
var profile = customProfiles[i];
if (verbose)
console.log("Loading custom profile: " + stringify(profile));
profilesList.append(profile);
}
}
function composeCustomProfilesString(){
var customProfiles = []
for(var i=0; i<profilesList.count; i++){
var profile = profilesList.get(i);
if(profile.builtin) continue;
customProfiles.push({text: profile.text, obj_string: profile.obj_string, builtin: false})
}
return stringify(customProfiles);
}
function loadProfile(index){
var profile = profilesList.get(index);
loadProfileString(profile.obj_string);
}
function appendCustomProfile(name, profileString) {
profilesList.append({text: name, obj_string: profileString, builtin: false});
}
// PROFILES ///////////////////////////////////////////////////////////////
property ListModel profilesList: ListModel{
ListElement{
text: "Default Amber"
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
}
ListElement{
text: "Default Green"
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
}
ListElement{
text: "Default Scanlines"
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
}
ListElement{
text: "Default Pixelated"
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
}
ListElement{
text: "Apple ]["
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
}
ListElement{
text: "Vintage"
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
}
ListElement{
text: "IBM Dos"
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
}
ListElement{
text: "IBM 3278"
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
}
ListElement{
text: "Knight TV"
obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0.45,"brightness":0.5,"burnIn":0.3,"chromaColor":0,"contrast":0.85,"customCommand":"","flickering":0.1,"fontColor":"#0ccc68","fontName":"Knight_TV","fontWidth":1,"frameName":"SIMPLE_WHITE_FRAME","glowingLine":0,"horizontalSync":0.16,"jitter":0,"rasterization":0,"rbgShift":0,"saturationColor":0,"screenCurvature":0.07,"staticNoise":0,"useCustomCommand":false,"windowOpacity":1}'
builtin: true
}
ListElement{
text: "Transparent Green"
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
}
}
function getProfileIndexByName(name) {
for (var i = 0; i < profilesList.count; i++) {
if(profilesList.get(i).text === name)
return i;
}
return -1;
}
Component.onCompleted: {
// Manage the arguments from the QML side.
var args = Qt.application.arguments;
if (args.indexOf("--verbose") !== -1) {
verbose = true;
}
if (args.indexOf("--default-settings") === -1) {
loadSettings();
}
loadCustomProfiles();
var profileArgPosition = args.indexOf("--profile");
if (profileArgPosition !== -1) {
var profileIndex = getProfileIndexByName(args[profileArgPosition + 1]);
if (profileIndex !== -1)
loadProfile(profileIndex);
else
console.log("Warning: selected profile is not valid; ignoring it");
}
if (args.indexOf("--fullscreen") !== -1) {
fullscreen = true;
showMenubar = false;
}
if (args.indexOf("-T") !== -1) {
wintitle = args[args.indexOf("-T") + 1]
}
initializedSettings();
}
Component.onDestruction: {
storeSettings();
storeCustomProfiles();
//storage.dropSettings(); //DROPS THE SETTINGS!.. REMEMBER TO DISABLE ONCE ENABLED!!
}
// VARS ///////////////////////////////////////////////////////////////////
property Label _sampleLabel: Label {
text: "100%"
}
property real labelWidth: _sampleLabel.width
}

View File

@@ -0,0 +1,51 @@
import QtQuick 2.2
import QtQuick.Controls 1.1
MenuBar {
id: defaultMenuBar
property bool visible: true
Menu {
title: qsTr("File")
visible: defaultMenuBar.visible
MenuItem {action: quitAction}
}
Menu {
title: qsTr("Edit")
visible: defaultMenuBar.visible
MenuItem {action: copyAction}
MenuItem {action: pasteAction}
MenuSeparator{visible: Qt.platform.os !== "osx"}
MenuItem {action: showsettingsAction}
}
Menu{
title: qsTr("View")
visible: defaultMenuBar.visible
MenuItem {action: fullscreenAction; visible: fullscreenAction.enabled}
MenuItem {action: showMenubarAction; visible: showMenubarAction.enabled}
MenuSeparator{visible: showMenubarAction.enabled}
MenuItem {action: zoomIn}
MenuItem {action: zoomOut}
}
Menu{
id: profilesMenu
title: qsTr("Profiles")
visible: defaultMenuBar.visible
Instantiator{
model: appSettings.profilesList
delegate: MenuItem {
text: model.text
onTriggered: {
appSettings.loadProfileString(obj_string);
appSettings.handleFontChanged();
}
}
onObjectAdded: profilesMenu.insertItem(index, object)
onObjectRemoved: profilesMenu.removeItem(object)
}
}
Menu{
title: qsTr("Help")
visible: defaultMenuBar.visible
MenuItem {action: showAboutAction}
}
}

View File

@@ -1,10 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-old-term.
* This file is part of cool-retro-term.
*
* cool-old-term is free software: you can redistribute it and/or modify
* 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.
@@ -22,42 +22,53 @@ import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import "Components"
RowLayout {
property bool enabled: true
property alias name: check.text
property double value: (check.checked) ? _value : 0.0
property alias _value: slider.value
property double value
property alias min_value: slider.minimumValue
property alias max_value: slider.maximumValue
property alias stepSize: slider.stepSize
signal newValue(real newValue);
id: setting_component
anchors.left: parent.left
anchors.right: parent.right
spacing: 25
onValueChanged: {
check.checked = !(value == 0);
if(check.checked)
slider.value = value;
}
CheckBox{
id: check
implicitWidth: 150
Component.onCompleted: checked = (_value !== 0);
enabled: parent.enabled
implicitWidth: 160
onClicked: {
if(!checked){
checked = false;
slider.enabled = false;
newValue(0);
} else {
checked = true;
newValue(slider.value);
slider.enabled = true;
}
}
}
Slider{
id: slider
stepSize: parent.stepSize
Layout.fillWidth: true
enabled: check.checked && parent.enabled
}
Text{
id: textfield
property string unformattedText: 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;
onValueChanged: {
newValue(value);
}
return n + "%";
}
SizedLabel {
anchors { top: parent.top; bottom: parent.bottom }
text: Math.round(((value - min_value) / (max_value - min_value)) * 100) + "%"
}
}

View File

@@ -1,10 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-old-term.
* This file is part of cool-retro-term.
*
* cool-old-term is free software: you can redistribute it and/or modify
* 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.
@@ -22,8 +22,10 @@ import QtQuick 2.2
import QtQuick.Dialogs 1.1
Item {
id: rootItem
signal colorSelected (color color)
property color button_color
property color color
property string name
ColorDialog {
@@ -33,13 +35,13 @@ Item {
visible: false
//This is a workaround to a Qt 5.2 bug.
onCurrentColorChanged: colorDialog.color = colorDialog.currentColor;
onAccepted: colorSelected(color)
onColorChanged: if (Qt.platform.os !== "osx") colorSelected(color)
onAccepted: if (Qt.platform.os === "osx") colorSelected(color)
}
Rectangle{
anchors.fill: parent
radius: 10
color: button_color
color: rootItem.color
border.color: "black"
Glossy {}
Rectangle {
@@ -52,7 +54,7 @@ Item {
Text{
anchors.centerIn: parent
z: parent.z + 1
text: name + ": " + button_color
text: name + ": " + rootItem.color
}
}
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 }
}
}

99
app/qml/FontPixels.qml Normal file
View File

@@ -0,0 +1,99 @@
/*******************************************************************************
* 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
QtObject{
property int selectedFontIndex
property real scaling
property var _font: fontlist.get(selectedFontIndex)
property var source: _font.source
property int pixelSize: _font.pixelSize
property int lineSpacing: _font.lineSpacing
property real screenScaling: scaling * _font.baseScaling
property real defaultFontWidth: fontlist.get(selectedFontIndex).fontWidth
property bool lowResolutionFont: true
property ListModel fontlist: ListModel{
ListElement{
name: "COMMODORE_PET"
text: "Commodore PET (1977)"
source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
lineSpacing: 2
pixelSize: 8
baseScaling: 4.0
fontWidth: 0.8
}
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)"
source: "fonts/1977-apple2/PrintChar21.ttf"
lineSpacing: 2
pixelSize: 8
baseScaling: 4.0
fontWidth: 0.9
}
ListElement{
name: "ATARI_400"
text: "Atari 400-800 (1979)"
source: "fonts/1979-atari-400-800/ATARI400800_original.TTF"
lineSpacing: 3
pixelSize: 8
baseScaling: 4.0
fontWidth: 0.8
}
ListElement{
name: "COMMODORE_64"
text: "Commodore 64 (1982)"
source: "fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 4.0
fontWidth: 0.8
}
}
}

99
app/qml/FontScanlines.qml Normal file
View File

@@ -0,0 +1,99 @@
/*******************************************************************************
* 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
QtObject{
property int selectedFontIndex
property real scaling
property var _font: fontlist.get(selectedFontIndex)
property var source: _font.source
property int pixelSize: _font.pixelSize
property int lineSpacing: _font.lineSpacing
property real screenScaling: scaling * _font.baseScaling
property real defaultFontWidth: fontlist.get(selectedFontIndex).fontWidth
property bool lowResolutionFont: true
property ListModel fontlist: ListModel{
ListElement{
name: "COMMODORE_PET"
text: "Commodore PET (1977)"
source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
lineSpacing: 2
pixelSize: 8
baseScaling: 4.0
fontWidth: 0.7
}
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)"
source: "fonts/1977-apple2/PrintChar21.ttf"
lineSpacing: 2
pixelSize: 8
baseScaling: 4.0
fontWidth: 0.8
}
ListElement{
name: "ATARI_400"
text: "Atari 400-800 (1979)"
source: "fonts/1979-atari-400-800/ATARI400800_original.TTF"
lineSpacing: 3
pixelSize: 8
baseScaling: 4.0
fontWidth: 0.7
}
ListElement{
name: "COMMODORE_64"
text: "Commodore 64 (1982)"
source: "fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 4.0
fontWidth: 0.7
}
}
}

218
app/qml/Fonts.qml Normal file
View File

@@ -0,0 +1,218 @@
/*******************************************************************************
* 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
QtObject{
property int selectedFontIndex
property real scaling
property var source: fontlist.get(selectedFontIndex).source
property var _font: fontlist.get(selectedFontIndex)
property bool lowResolutionFont: _font.lowResolutionFont
property int pixelSize: lowResolutionFont
? _font.pixelSize
: _font.pixelSize * scaling
property int lineSpacing: lowResolutionFont
? _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{
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
lowResolutionFont: true
}
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)"
source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
lineSpacing: 2
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.7
lowResolutionFont: true
}
ListElement{
name: "PROGGY_TINY_SCALED"
text: "Proggy Tiny (Modern)"
source: "fonts/modern-proggy-tiny/ProggyTiny.ttf"
lineSpacing: 1
pixelSize: 16
baseScaling: 3.0
fontWidth: 0.9
lowResolutionFont: true
}
ListElement{
name: "APPLE_II_SCALED"
text: "Apple ][ (1977)"
source: "fonts/1977-apple2/PrintChar21.ttf"
lineSpacing: 2
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.8
lowResolutionFont: true
}
ListElement{
name: "ATARI_400_SCALED"
text: "Atari 400-800 (1979)"
source: "fonts/1979-atari-400-800/ATARI400800_original.TTF"
lineSpacing: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.7
lowResolutionFont: true
}
ListElement{
name: "COMMODORE_64_SCALED"
text: "Commodore 64 (1982)"
source: "fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.7
lowResolutionFont: true
}
ListElement{
name: "ATARI_ST_SCALED"
text: "Atari ST (1985)"
source: "fonts/1985-atari-st/AtariST8x16SystemFont.ttf"
lineSpacing: 3
pixelSize: 16
baseScaling: 2.0
fontWidth: 1.0
lowResolutionFont: true
}
ListElement{
name: "IBM_DOS"
text: "IBM DOS (1985)"
source: "fonts/1985-ibm-pc-vga/Perfect DOS VGA 437 Win.ttf"
lineSpacing: 3
pixelSize: 16
baseScaling: 2.0
fontWidth: 1.0
lowResolutionFont: true
}
ListElement{
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"
lineSpacing: 0.2
pixelSize: 32
fontWidth: 1.0
lowResolutionFont: false
}
ListElement{
name: "Knight_TV"
text: "Knight TV (1975)"
source: "fonts/1975-knight-tv/KnightTVMedium.ttf"
lineSpacing: 0.2
pixelSize: 10
fontWidth: 1.0
baseScaling: 3.0
lowResolutionFont: true
}
}
}

View File

@@ -1,10 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-old-term.
* This file is part of cool-retro-term.
*
* cool-old-term is free software: you can redistribute it and/or modify
* 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.
@@ -22,16 +22,36 @@ import QtQuick 2.2
import QtQuick.Window 2.0
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.1
Window{
id: insertnamedialog
width: 400
height: 100
modality: Qt.ApplicationModal
title: qsTr("Save current profile")
title: qsTr("Save new profile")
property alias profileName: namefield.text
signal nameSelected(string name)
MessageDialog {
id: errorDialog
title: qsTr("Error")
visible: false
function showError(message){
text = message;
open();
}
}
function validateName(name){
var profile_list = appSettings.profilesList;
if (name === "")
return 1;
return 0;
}
ColumnLayout{
anchors.margins: 10
anchors.fill: parent
@@ -41,16 +61,26 @@ Window{
id: namefield
Layout.fillWidth: true
Component.onCompleted: forceActiveFocus()
onAccepted: okbutton.clickAction()
}
}
RowLayout{
anchors.right: parent.right
anchors.bottom: parent.bottom
Button{
id: okbutton
text: qsTr("OK")
onClicked: {
nameSelected(namefield.text);
close();
onClicked: clickAction()
function clickAction(){
var name = namefield.text;
switch(validateName(name)){
case 1:
errorDialog.showError(qsTr("The name you inserted is empty. Please choose a different one."));
break;
default:
nameSelected(name);
close();
}
}
}
Button{

View File

@@ -0,0 +1,351 @@
/*******************************************************************************
* 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 QMLTermWidget 1.0
import "utils.js" as Utils
Item{
id: terminalContainer
property size virtualResolution: Qt.size(kterminal.width, kterminal.height)
property alias mainTerminal: kterminal
property ShaderEffectSource mainSource: kterminalSource
property ShaderEffectSource blurredSource: blurredSourceLoader.item
property real fontWidth: 1.0
property real screenScaling: 1.0
property real scaleTexture: 1.0
property alias title: ksession.title
property alias kterminal: kterminal
anchors.leftMargin: frame.displacementLeft * appSettings.windowScaling
anchors.rightMargin: frame.displacementRight * appSettings.windowScaling
anchors.topMargin: frame.displacementTop * appSettings.windowScaling
anchors.bottomMargin: frame.displacementBottom * appSettings.windowScaling
//Parameters for the burnIn effect.
property real burnIn: appSettings.burnIn
property real fps: appSettings.fps !== 0 ? appSettings.fps : 60
property real burnInFadeTime: Utils.lint(_minBurnInFadeTime, _maxBurnInFadeTime, burnIn)
property real motionBlurCoefficient: 1.0 / (fps * burnInFadeTime)
property real _minBurnInFadeTime: 0.16
property real _maxBurnInFadeTime: 1.6
property size terminalSize: kterminal.terminalSize
property size fontMetrics: kterminal.fontMetrics
// Manage copy and paste
Connections{
target: copyAction
onTriggered: kterminal.copyClipboard();
}
Connections{
target: pasteAction
onTriggered: kterminal.pasteClipboard()
}
//When settings are updated sources need to be redrawn.
Connections{
target: appSettings
onFontScalingChanged: terminalContainer.updateSources();
onFontWidthChanged: terminalContainer.updateSources();
}
Connections{
target: terminalContainer
onWidthChanged: terminalContainer.updateSources();
onHeightChanged: terminalContainer.updateSources();
}
function updateSources() {
kterminal.update();
}
QMLTermWidget {
id: kterminal
width: Math.floor(parent.width / (screenScaling * fontWidth))
height: Math.floor(parent.height / screenScaling)
colorScheme: "cool-retro-term"
smooth: !appSettings.lowResolutionFont
enableBold: false
fullCursorHeight: true
session: QMLTermSession {
id: ksession
onFinished: {
Qt.quit()
}
}
QMLTermScrollbar {
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
}
}
FontLoader{ id: fontLoader }
function handleFontChange(fontSource, pixelSize, lineSpacing, screenScaling, fontWidth){
fontLoader.source = fontSource;
kterminal.antialiasText = !appSettings.lowResolutionFont;
font.pixelSize = pixelSize;
font.family = fontLoader.name;
terminalContainer.fontWidth = fontWidth;
terminalContainer.screenScaling = screenScaling;
scaleTexture = Math.max(1.0, Math.floor(screenScaling * appSettings.windowScaling));
kterminal.lineSpacing = lineSpacing;
}
function startSession() {
appSettings.initializedSettings.disconnect(startSession);
// Retrieve the variable set in main.cpp if arguments are passed.
if (defaultCmd) {
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)
ksession.initialWorkingDirectory = workdir;
ksession.startShellProgram();
forceActiveFocus();
}
Component.onCompleted: {
appSettings.terminalFontChanged.connect(handleFontChange);
appSettings.initializedSettings.connect(startSession);
}
}
Component {
id: linuxContextMenu
Menu{
id: contextmenu
MenuItem{action: copyAction}
MenuItem{action: pasteAction}
MenuSeparator{}
MenuItem{action: fullscreenAction}
MenuItem{action: showMenubarAction}
MenuSeparator{visible: !appSettings.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{
acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
anchors.fill: parent
cursorShape: kterminal.terminalUsesMouse ? Qt.ArrowCursor : Qt.IBeamCursor
onWheel:{
if(wheel.modifiers & Qt.ControlModifier){
wheel.angleDelta.y > 0 ? zoomIn.trigger() : zoomOut.trigger();
} else {
var coord = correctDistortion(wheel.x, wheel.y);
kterminal.simulateWheel(coord.x, coord.y, wheel.buttons, wheel.modifiers, wheel.angleDelta);
}
}
onDoubleClicked: {
var coord = correctDistortion(mouse.x, mouse.y);
kterminal.simulateMouseDoubleClick(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers);
}
onPressed: {
if((!kterminal.terminalUsesMouse || mouse.modifiers & Qt.ShiftModifier) && mouse.button == Qt.RightButton) {
contextmenu.popup();
} else {
var coord = correctDistortion(mouse.x, mouse.y);
kterminal.simulateMousePress(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers)
}
}
onReleased: {
var coord = correctDistortion(mouse.x, mouse.y);
kterminal.simulateMouseRelease(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers);
}
onPositionChanged: {
var coord = correctDistortion(mouse.x, mouse.y);
kterminal.simulateMouseMove(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers);
}
function correctDistortion(x, y){
x = x / width;
y = y / height;
var cc = Qt.size(0.5 - x, 0.5 - y);
var distortion = (cc.height * cc.height + cc.width * cc.width) * appSettings.screenCurvature;
return Qt.point((x - cc.width * (1+distortion) * distortion) * kterminal.width,
(y - cc.height * (1+distortion) * distortion) * kterminal.height)
}
}
ShaderEffectSource{
id: kterminalSource
sourceItem: kterminal
hideSource: true
wrapMode: ShaderEffectSource.ClampToEdge
visible: false
textureSize: Qt.size(kterminal.width * scaleTexture, kterminal.height * scaleTexture);
}
Loader{
id: blurredSourceLoader
asynchronous: true
active: burnIn !== 0
sourceComponent: ShaderEffectSource{
property bool updateBurnIn: false
id: _blurredSourceEffect
sourceItem: blurredTerminalLoader.item
recursive: true
live: false
hideSource: true
wrapMode: kterminalSource.wrapMode
visible: false
function restartBlurSource(){
livetimer.restart();
}
// This updates the burnin synched with the timer.
Connections {
target: updateBurnIn ? mainShader : null
ignoreUnknownSignals: false
onTimeChanged: _blurredSourceEffect.scheduleUpdate();
}
Timer{
id: livetimer
// The interval assumes 60 fps. This is the time needed burnout a white pixel.
// We multiply 1.1 to have a little bit of margin over the theoretical value.
// This solution is not extremely clean, but it's probably the best to avoid measuring fps.
interval: burnInFadeTime * 1000 * 1.1
running: true
onTriggered: _blurredSourceEffect.updateBurnIn = false;
}
Connections{
target: kterminal
onImagePainted:{
_blurredSourceEffect.scheduleUpdate();
_blurredSourceEffect.updateBurnIn = true;
livetimer.restart();
}
}
// Restart blurred source settings change.
Connections{
target: appSettings
onBurnInChanged: _blurredSourceEffect.restartBlurSource();
onTerminalFontChanged: _blurredSourceEffect.restartBlurSource();
onRasterizationChanged: _blurredSourceEffect.restartBlurSource();
onBurnInQualityChanged: _blurredSourceEffect.restartBlurSource();
}
Connections {
target: kterminalScrollbar
onOpacityChanged: _blurredSourceEffect.restartBlurSource();
}
}
}
Loader{
id: blurredTerminalLoader
property int burnInScaling: scaleTexture * appSettings.burnInQuality
width: appSettings.lowResolutionFont
? kterminal.width * Math.max(1, burnInScaling)
: kterminal.width * scaleTexture * appSettings.burnInQuality
height: appSettings.lowResolutionFont
? kterminal.height * Math.max(1, burnInScaling)
: kterminal.height * scaleTexture * appSettings.burnInQuality
active: burnIn !== 0
asynchronous: true
sourceComponent: ShaderEffect {
property variant txt_source: kterminalSource
property variant blurredSource: blurredSourceLoader.item
property real blurCoefficient: motionBlurCoefficient
blending: false
fragmentShader:
"#ifdef GL_ES
precision mediump float;
#endif\n" +
"uniform lowp float qt_Opacity;" +
"uniform lowp sampler2D txt_source;" +
"varying highp vec2 qt_TexCoord0;
uniform lowp sampler2D blurredSource;
uniform highp float blurCoefficient;" +
"float rgb2grey(vec3 v){
return dot(v, vec3(0.21, 0.72, 0.04));
}" +
"void main() {" +
"vec2 coords = qt_TexCoord0;" +
"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));" +
"gl_FragColor = vec4(color, rgb2grey(color - origColor));" +
"}"
onStatusChanged: if (log) console.log(log) //Print warning messages
}
}
}

View File

@@ -0,0 +1,86 @@
/*******************************************************************************
* 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
Tab{
GroupBox{
title: qsTr("Effects")
anchors.fill: parent
ColumnLayout{
anchors.fill: parent
spacing: 2
CheckableSlider{
name: qsTr("Bloom")
onNewValue: appSettings.bloom = newValue
value: appSettings.bloom
}
CheckableSlider{
name: qsTr("BurnIn")
onNewValue: appSettings.burnIn = newValue
value: appSettings.burnIn
}
CheckableSlider{
name: qsTr("Static Noise")
onNewValue: appSettings.staticNoise = newValue
value: appSettings.staticNoise
}
CheckableSlider{
name: qsTr("Jitter")
onNewValue: appSettings.jitter = newValue
value: appSettings.jitter
}
CheckableSlider{
name: qsTr("Glow Line")
onNewValue: appSettings.glowingLine = newValue;
value: appSettings.glowingLine
}
CheckableSlider{
name: qsTr("Screen Curvature")
onNewValue: appSettings.screenCurvature = newValue;
value: appSettings.screenCurvature;
}
CheckableSlider{
name: qsTr("Ambient Light")
onNewValue: appSettings.ambientLight = newValue;
value: appSettings.ambientLight
enabled: appSettings.framesIndex !== 0
}
CheckableSlider{
name: qsTr("Flickering")
onNewValue: appSettings.flickering = newValue;
value: appSettings.flickering;
}
CheckableSlider{
name: qsTr("Horizontal Sync")
onNewValue: appSettings.horizontalSync = newValue;
value: appSettings.horizontalSync;
}
CheckableSlider{
name: qsTr("RGB Shift")
onNewValue: appSettings.rbgShift = newValue;
value: appSettings.rbgShift;
enabled: appSettings.chromaColor !== 0
}
}
}
}

View File

@@ -0,0 +1,235 @@
/*******************************************************************************
* 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{
anchors {left: parent.left; right: parent.right}
Layout.fillWidth: true
Layout.fillHeight: true
title: qsTr("Profile")
RowLayout {
anchors.fill: parent
TableView {
id: profilesView
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{
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")
onClicked: {
var index = profilesView.currentRow;
if (index >= 0)
appSettings.loadProfile(index);
}
}
Button{
Layout.fillWidth: true
text: qsTr("Remove")
property alias currentIndex: profilesView.currentRow
enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin
onClicked: {
appSettings.profilesList.remove(currentIndex);
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
}
Button{
Layout.fillWidth: true
text: qsTr("Import")
onClicked: {
fileDialog.selectExisting = true;
fileDialog.callBack = function (url) {loadFile(url);};
fileDialog.open();
}
function loadFile(url) {
try {
if (appSettings.verbose)
console.log("Loading file: " + url);
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{
property alias currentIndex: profilesView.currentRow
Layout.fillWidth: true
text: qsTr("Export")
enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin
onClicked: {
fileDialog.selectExisting = false;
fileDialog.callBack = function (url) {storeFile(url);};
fileDialog.open();
}
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);
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{
id: insertname
onNameSelected: {
appSettings.appendCustomProfile(name, appSettings.composeProfileString());
}
}
MessageDialog {
id: messageDialog
title: qsTr("File Error")
onAccepted: {
messageDialog.close();
}
}
Loader {
property var callBack
property bool selectExisting: false
id: fileDialog
sourceComponent: FileDialog{
nameFilters: ["Json files (*.json)"]
selectMultiple: false
selectFolder: false
selectExisting: fileDialog.selectExisting
onAccepted: callBack(fileUrl);
}
onSelectExistingChanged: reload()
function open() {
item.open();
}
function reload() {
active = false;
active = true;
}
}
}
}

View File

@@ -0,0 +1,135 @@
/*******************************************************************************
* 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 "Components"
Tab{
ColumnLayout{
anchors.fill: parent
GroupBox{
title: qsTr("General")
Layout.fillWidth: true
anchors.left: parent.left
anchors.right: parent.right
GridLayout{
anchors.fill: parent
rows: 2
columns: 3
Label{text: qsTr("Effects FPS")}
Slider{
Layout.fillWidth: true
id: fpsSlider
onValueChanged: {
if (enabled) {
appSettings.fps = value !== 60 ? value + 1 : 0;
}
}
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{
Layout.fillWidth: true
id: txtslider
onValueChanged: if (enabled) appSettings.windowScaling = value;
stepSize: 0.05
enabled: false
Component.onCompleted: {
minimumValue = 0.25 //Without this value gets set to 0.5
value = appSettings.windowScaling;
enabled = true;
}
}
SizedLabel{text: Math.round(txtslider.value * 100) + "%"}
}
}
GroupBox{
title: qsTr("Bloom")
Layout.fillWidth: true
anchors.left: parent.left
anchors.right: parent.right
GridLayout{
id: bloomQualityContainer
anchors.fill: parent
Label{text: qsTr("Bloom Quality")}
Slider{
Layout.fillWidth: true
id: bloomSlider
onValueChanged: if (enabled) appSettings.bloomQuality = value;
stepSize: 0.05
enabled: false
Component.onCompleted: {
minimumValue = 0.25
value = appSettings.bloomQuality;
enabled = true;
}
}
SizedLabel{text: Math.round(bloomSlider.value * 100) + "%"}
}
}
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{
title: qsTr("Frame")
Layout.fillWidth: true
anchors.left: parent.left
anchors.right: parent.right
CheckBox{
checked: appSettings._frameReflections
text: qsTr("Frame Reflections")
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

@@ -0,0 +1,143 @@
/*******************************************************************************
* 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 "Components"
Tab{
ColumnLayout{
anchors.fill: parent
GroupBox{
property var rasterization: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")][appSettings.rasterization]
title: qsTr("Font" + "(" + rasterization + ")")
anchors { left: parent.left; right: parent.right }
GridLayout{
anchors.fill: parent
columns: 2
Label{ text: qsTr("Name") }
ComboBox{
id: fontChanger
Layout.fillWidth: true
model: appSettings.fontlist
onActivated: {
var name = appSettings.fontlist.get(index).name;
appSettings.fontNames[appSettings.rasterization] = name;
appSettings.handleFontChanged();
}
function updateIndex(){
var name = appSettings.fontNames[appSettings.rasterization];
var index = appSettings.getIndexByName(name);
if (index !== undefined)
currentIndex = index;
}
Connections{
target: appSettings
onTerminalFontChanged: fontChanger.updateIndex();
}
Component.onCompleted: updateIndex();
}
Label{ text: qsTr("Scaling") }
RowLayout{
Layout.fillWidth: true
Slider{
Layout.fillWidth: true
id: fontScalingChanger
onValueChanged: if(enabled) appSettings.fontScaling = value
stepSize: 0.05
enabled: false // Another trick to fix initial bad behavior.
Component.onCompleted: {
minimumValue = appSettings.minimumFontScaling;
maximumValue = appSettings.maximumFontScaling;
value = appSettings.fontScaling;
enabled = true;
}
Connections{
target: appSettings
onFontScalingChanged: fontScalingChanger.value = appSettings.fontScaling;
}
}
SizedLabel{
text: Math.round(fontScalingChanger.value * 100) + "%"
}
}
Label{ text: qsTr("Font Width") }
RowLayout{
Layout.fillWidth: true
Slider{
Layout.fillWidth: true
id: widthChanger
onValueChanged: appSettings.fontWidth = value;
value: appSettings.fontWidth
stepSize: 0.05
Component.onCompleted: {
// This is needed to avoid unnecessary chnaged events.
minimumValue = 0.5;
maximumValue = 1.5;
}
}
SizedLabel{
text: Math.round(widthChanger.value * 100) + "%"
}
}
}
}
GroupBox{
title: qsTr("Colors")
anchors { left: parent.left; right: parent.right }
ColumnLayout{
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{
Layout.fillWidth: true
ColorButton{
name: qsTr("Font")
height: 50
Layout.fillWidth: true
onColorSelected: appSettings._fontColor = color;
color: appSettings._fontColor
}
ColorButton{
name: qsTr("Background")
height: 50
Layout.fillWidth: true
onColorSelected: appSettings._backgroundColor = color;
color: appSettings._backgroundColor
}
}
}
}
}
}

View File

@@ -1,10 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-old-term.
* This file is part of cool-retro-term.
*
* cool-old-term is free software: you can redistribute it and/or modify
* 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.
@@ -27,28 +27,44 @@ import QtQuick.Dialogs 1.1
Window {
id: settings_window
title: qsTr("Settings")
width: 640
height: 450
width: 580
height: 400
property int tabmargins: 15
TabView{
id: tabView
anchors.fill: parent
anchors.margins: 10
SettingsGeneralTab{
id: generalTab
title: qsTr("General")
anchors.fill: parent
anchors.margins: tabmargins
}
SettingsScreenTab{
id: screenTab
title: qsTr("Screen")
anchors.fill: parent
anchors.margins: tabmargins
}
SettingsTerminalTab{
id: terminalTab
title: qsTr("Terminal")
anchors.fill: parent
anchors.margins: tabmargins
}
SettingsEffectsTab{
id: effectsTab
title: qsTr("Effects")
anchors.fill: parent
anchors.margins: tabmargins
}
SettingsPerformanceTab{
id: performanceTab
title: qsTr("Performance")
anchors.fill: parent
anchors.margins: tabmargins
}
}
}

337
app/qml/ShaderTerminal.qml Normal file
View File

@@ -0,0 +1,337 @@
/*******************************************************************************
* 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 QtGraphicalEffects 1.0
import "utils.js" as Utils
ShaderEffect {
property ShaderEffectSource source
property ShaderEffectSource blurredSource
property ShaderEffectSource bloomSource
property color fontColor: appSettings.fontColor
property color backgroundColor: appSettings.backgroundColor
property real bloom: appSettings.bloom * 2.5
property real burnIn: appSettings.burnIn
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 screenCurvature: appSettings.screenCurvature
property real glowingLine: appSettings.glowingLine * 0.2
property real chromaColor: appSettings.chromaColor;
property real rbgShift: appSettings.rbgShift * 0.2
property real flickering: appSettings.flickering
property real horizontalSync: appSettings.horizontalSync * 0.5
property bool frameReflections: appSettings.frameReflections
property real disp_top: (frame.displacementTop * appSettings.windowScaling) / height
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.
property bool fallBack: false
blending: false
//Smooth random texture used for flickering effect.
Image{
id: noiseTexture
source: "images/allNoise512.png"
width: 512
height: 512
fillMode: Image.Tile
visible: false
}
ShaderEffectSource{
id: noiseShaderSource
sourceItem: noiseTexture
wrapMode: ShaderEffectSource.Repeat
visible: false
smooth: true
}
//Print the number with a reasonable precision for the shader.
function str(num){
return num.toFixed(8);
}
vertexShader: "
uniform highp mat4 qt_Matrix;
uniform highp float time;
uniform highp float disp_left;
uniform highp float disp_right;
uniform highp float disp_top;
uniform highp float disp_bottom;
attribute highp vec4 qt_Vertex;
attribute highp vec2 qt_MultiTexCoord0;
varying highp vec2 qt_TexCoord0;" +
(!fallBack ? "
uniform sampler2D noiseSource;" : "") +
(!fallBack && flickering !== 0.0 ?"
varying lowp float brightness;
uniform lowp float flickering;" : "") +
(!fallBack && horizontalSync !== 0.0 ?"
uniform lowp float horizontalSync;
varying lowp float distortionScale;
varying lowp float distortionFreq;" : "") +
"
void main() {
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);
vec2 coords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));" +
(!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 && horizontalSync !== 0.0 ? "
float randval = horizontalSync - initialNoiseTexel.r;
distortionScale = step(0.0, randval) * randval * horizontalSync;
distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
: "") +
"gl_Position = qt_Matrix * qt_Vertex;
}"
fragmentShader: "
#ifdef GL_ES
precision mediump float;
#endif
uniform sampler2D source;
uniform highp float qt_Opacity;
uniform highp float time;
varying highp vec2 qt_TexCoord0;
uniform highp vec4 fontColor;
uniform highp vec4 backgroundColor;
uniform lowp float screen_brightness;
uniform highp vec2 virtual_resolution;
uniform highp vec2 rasterizationSmooth;
uniform highp float dispX;
uniform highp float dispY;" +
(bloom !== 0 ? "
uniform highp sampler2D bloomSource;
uniform lowp float bloom;" : "") +
(burnIn !== 0 ? "
uniform sampler2D blurredSource;" : "") +
(staticNoise !== 0 ? "
uniform highp float staticNoise;" : "") +
(((staticNoise !== 0 || jitter !== 0 || rbgShift)
||(fallBack && (flickering || horizontalSync))) ? "
uniform lowp sampler2D noiseSource;
uniform highp vec2 scaleNoiseSize;" : "") +
(screenCurvature !== 0 ? "
uniform highp float screenCurvature;" : "") +
(glowingLine !== 0 ? "
uniform highp float glowingLine;" : "") +
(chromaColor !== 0 ? "
uniform lowp float chromaColor;" : "") +
(jitter !== 0 ? "
uniform lowp float jitter;" : "") +
(rbgShift !== 0 ? "
uniform lowp float rbgShift;" : "") +
(fallBack && horizontalSync !== 0 ? "
uniform lowp float horizontalSync;" : "") +
(fallBack && flickering !== 0.0 ?"
uniform lowp float flickering;" : "") +
(!fallBack && flickering !== 0 ? "
varying lowp float brightness;"
: "") +
(!fallBack && horizontalSync !== 0 ? "
varying lowp float distortionScale;
varying lowp float distortionFreq;" : "") +
(glowingLine !== 0 ? "
float randomPass(vec2 coords){
return fract(smoothstep(-120.0, 0.0, coords.y - (virtual_resolution.y + 120.0) * fract(time * 0.00015)));
}" : "") +
"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));
}" +
"void main() {" +
"vec2 cc = vec2(0.5) - qt_TexCoord0;" +
"float distance = length(cc);" +
//FallBack if there are problems
(fallBack && (flickering !== 0.0 || horizontalSync !== 0.0) ?
"vec2 initialCoords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));
vec4 initialNoiseTexel = texture2D(noiseSource, initialCoords);"
: "") +
(fallBack && flickering !== 0.0 ? "
float brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;"
: "") +
(fallBack && horizontalSync !== 0.0 ? "
float randval = horizontalSync - initialNoiseTexel.r;
float distortionScale = step(0.0, randval) * randval * horizontalSync;
float distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
: "") +
(staticNoise ? "
float noise = staticNoise;" : "") +
(screenCurvature !== 0 ? "
float distortion = dot(cc, cc) * screenCurvature;
vec2 staticCoords = (qt_TexCoord0 - cc * (1.0 + distortion) * distortion);"
:"
vec2 staticCoords = qt_TexCoord0;") +
"vec2 coords = staticCoords;" +
(horizontalSync !== 0 ? "
float dst = sin((coords.y + time * 0.001) * distortionFreq);
coords.x += dst * distortionScale;" +
(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 ? "
vec2 offset = vec2(noiseTexel.b, noiseTexel.a) - vec2(0.5);
vec2 txt_coords = coords + offset * jitter;"
: "vec2 txt_coords = coords;") +
"float color = 0.0;" +
(staticNoise !== 0 ? "
float noiseVal = noiseTexel.a;
color += noiseVal * noise * (1.0 - distance * 1.3);" : "") +
(glowingLine !== 0 ? "
color += randomPass(coords * virtual_resolution) * glowingLine;" : "") +
"vec3 txt_color = texture2D(source, txt_coords).rgb;" +
(burnIn !== 0 ? "
vec4 txt_blur = texture2D(blurredSource, txt_coords);
txt_color = txt_color + txt_blur.rgb * txt_blur.a;"
: "") +
"float greyscale_color = rgb2grey(txt_color) + color;" +
(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 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) * rbgShift * rgb_noise).b;
txt_color.r = rcolor;
txt_color.b = bcolor;
greyscale_color = 0.33 * (rcolor + bcolor);" : "") +
"vec3 mixedColor = mix(fontColor.rgb, txt_color * fontColor.rgb, chromaColor);
vec3 finalBackColor = mix(backgroundColor.rgb, mixedColor, greyscale_color);
vec3 finalColor = mix(finalBackColor, fontColor.rgb, color).rgb;"
:
"vec3 finalColor = mix(backgroundColor.rgb, fontColor.rgb, greyscale_color);") +
"finalColor *= getScanlineIntensity(coords);" +
(bloom !== 0 ?
"vec4 bloomFullColor = texture2D(bloomSource, coords);
vec3 bloomColor = bloomFullColor.rgb;
float bloomAlpha = bloomFullColor.a;" +
(chromaColor !== 0 ?
"bloomColor = fontColor.rgb * mix(vec3(rgb2grey(bloomColor)), bloomColor, chromaColor);"
:
"bloomColor = fontColor.rgb * rgb2grey(bloomColor);") +
"finalColor += bloomColor * bloom * bloomAlpha;"
: "") +
"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;" : "") +
"gl_FragColor = vec4(finalColor * screen_brightness, qt_Opacity);" +
"}"
onStatusChanged: {
// Print warning messages
if (log)
console.log(log);
// Activate fallback mode
if (status == ShaderEffect.Error) {
fallBack = true;
}
}
}

View File

@@ -1,10 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-old-term.
* This file is part of cool-retro-term.
*
* cool-old-term is free software: you can redistribute it and/or modify
* 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.
@@ -22,6 +22,8 @@ import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import "Components"
RowLayout {
property alias value: slider.value
property alias stepSize: slider.stepSize
@@ -36,15 +38,7 @@ RowLayout {
stepSize: parent.stepSize
Layout.fillWidth: true
}
Text{
id: textfield
text: formatNumber(Math.round(value * maxMultiplier))
}
function formatNumber(num) {
var n = "" + num;
while (n.length < 3) {
n = " " + n;
}
return n + "%";
SizedLabel{
text: Math.round(value * maxMultiplier) + "%"
}
}

View File

@@ -1,10 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-old-term.
* This file is part of cool-retro-term.
*
* cool-old-term is free software: you can redistribute it and/or modify
* 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.

View File

@@ -1,10 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-old-term.
* This file is part of cool-retro-term.
*
* cool-old-term is free software: you can redistribute it and/or modify
* 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.
@@ -21,11 +21,11 @@
import QtQuick 2.2
import QtQuick.LocalStorage 2.0
Item {
QtObject {
property bool initialized: false
function getDatabase() {
return LocalStorage.openDatabaseSync("coololdterm", "1.0", "StorageDatabase", 100000);
return LocalStorage.openDatabaseSync("coolretroterm", "1.0", "StorageDatabase", 100000);
}
function initialize() {

View File

@@ -0,0 +1,132 @@
import QtQuick 2.2
import QtGraphicalEffects 1.0
import "utils.js" as Utils
ShaderTerminal{
property alias title: terminal.title
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{
id: frame
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
source: appSettings.frameSource
}
PreprocessedTerminal{
id: terminal
anchors.fill: parent
}
// EFFECTS ////////////////////////////////////////////////////////////////
Loader{
id: bloomEffectLoader
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{
id: _bloomEffectSource
sourceItem: bloomEffectLoader.item
hideSource: true
smooth: true
visible: false
}
}
bloomSource: bloomSourceLoader.item
// This shader might be useful in the future. Since we used it only for a couple
// of calculations is probably best to move those in the main shader. If in the future
// we need to store another fullScreen channel this might be handy.
// ShaderEffect {
// 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

@@ -1,10 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-old-term.
* This file is part of cool-retro-term.
*
* cool-old-term is free software: you can redistribute it and/or modify
* 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.
@@ -27,13 +27,13 @@ Timer{
NumberAnimation on time {
from: 0
to: 100000
running: shadersettings.fps === 0 && enableTimer
running: appSettings.fps === 0 && enableTimer
duration: 100000
loops: Animation.Infinite
}
onTriggered: time += interval
running: shadersettings.fps !== 0 && enableTimer
interval: Math.round(1000 / shadersettings.fps)
running: appSettings.fps !== 0 && enableTimer
interval: Math.round(1000 / appSettings.fps)
repeat: true
}

Binary file not shown.

View File

@@ -0,0 +1,49 @@
Copyright (c) 2011-2017, Ricardo Banffy.
Copyright (c) 1993-2011, Paul Mattes.
Copyright (c) 2004-2005, Don Russell.
Copyright (c) 2004, Dick Altenbern.
Copyright (c) 1990, Jeff Sparkes.
Copyright (c) 1989, Georgia Tech Research Corporation (GTRC), Atlanta, GA 30332.
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.
* 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

@@ -0,0 +1,101 @@
3270font: A font for the nostalgic
==================================
![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
-----------------------
This font is derived from the x3270 font, which, in turn, was
translated from the one in Georgia Tech's 3270tool, which was itself
hand-copied from a 3270 series terminal. I built it because I felt
terminals deserve to be pretty. The .sfd font file contains a x3270
bitmap font that was used for guidance.
![Using with the cool-old-tern (now cool-retro-term) terminal program](
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 "source" file is edited using FontForge. You'll need it if you want
to generate fonts for your platform. On most civilized operating
systems, you can simply `apt-get install fontforge`, `yum install
fontforge` or even `port install fontforge`. On others, you may need to
grab your copy from http://fontforge.org/. I encourage you to drop by
and read the tutorials.
![Powerline-shell compatible!](
https://raw.githubusercontent.com/wiki/rbanffy/3270font/powerline.png)
![Using it on OSX (don't forget to turn antialiasing on)](https://raw.githubusercontent.com/wiki/rbanffy/3270font/osx_terminal.png)
If you are running Windows, you'll probably need something like
Cygwin, but, in the end, the font works correctly (with some very
minor hinting issues).
![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
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
units, with no glyph rescaling (or cropping - we need to fix that) and
its corresponding PostScript, TTF, OTF and WOFF versions.
![For your favorite editor](
https://raw.githubusercontent.com/wiki/rbanffy/3270font/symbols.png)
Contributing
------------
I fear GitHub's pull-request mechanism may not be very
FontForge-friendly. If you want to contribute (there are a lot of
missing glyphs, such as the APL set and most non-latin alphabets which
most likely were never built into 3270 terminals), the best workflow
would be to make add the encoding slots (if needed), add/make the
changes, reencode it in "Unicode, Full", compact it and validate
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.
Known problems
--------------
Not all symbols in the 3270 charset have Unicode counterparts. When
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.

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.

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