Compare commits

..

631 Commits
osx ... master

Author SHA1 Message Date
b98408dd32 Merge pull request 'Revert "Make the burn-in look more like the real thing."' (#862) from revert-burnin into master
Reviewed-on: #862
2024-10-15 08:30:14 +02:00
36054434a5 Revert "Make the burn-in look more like the real thing."
This reverts commit 27ca6b3f73fffce73931b3c6912f6a8aaddb50bc.
2024-10-15 08:29:09 +02:00
d9e41c27ef Merge pull request 'Add intellij to the gitignore' (#861) from update-gitignore into master
Reviewed-on: #861
2024-10-14 18:28:42 +02:00
8e8f8e4706 Add intellij to the gitignore 2024-10-14 18:28:23 +02:00
edb1a6f9e1 Merge pull request 'Shift+Insert -> paste selection' (#702) from agreppin/kb-shift-insert into master
Reviewed-on: #702
2024-10-11 11:08:02 +02:00
Alain Greppin
33723db314 Shift+Insert -> paste selection 2024-10-11 11:06:35 +02:00
4bc440e906 Merge pull request 'Document the --version option' (#706) from njhanley/document-version-option into master
Reviewed-on: #706
2024-10-11 11:03:07 +02:00
Nick Hanley
27b248d851 Document the --version option 2024-10-11 11:02:46 +02:00
e3c2e024bb Merge pull request 'Hide visible scrolling in background staticNoise' (#768) from aaronkollasch/random-static-noise into master
Reviewed-on: #768
2024-10-11 10:57:00 +02:00
Aaron Kollasch
b69610d7f3 Hide visible scrolling in static noise
Randomize vertical position of staticNoise texel and add to
existing scrolling of noise texture (both horizontal and vertical;
faster in vertical direction)
2024-10-11 10:56:16 +02:00
92a768d6f1 Merge pull request 'Terminal frame color customization and optional glossiness' (#760) from forestbeasts/bettergloss into master
Reviewed-on: #760
2024-10-11 10:53:47 +02:00
Frost
5ecd7d754d Add frame color/gloss to the default profiles 2024-10-11 10:52:41 +02:00
Frost
e3161f64f6 Add frame gloss setting
Lets you turn off the bright reflections.
2024-10-11 10:52:41 +02:00
Frost
5b0b091ab6 Add frame color setting
It's saved in the profile, and defaults to white.
2024-10-11 10:52:41 +02:00
Frost
4fdf28fb79 Add reflections to frame for better glossiness
I mean, it's how it works in the real world; it's added to the frame's base color, not occluded by the frame.
2024-10-11 10:52:41 +02:00
49213a1cf0 Merge pull request 'Fix visual bug on nvidia' (#859) from nvidia-patch into master
Reviewed-on: #859
2024-10-11 10:52:27 +02:00
e30db231f6 Fix visual bug on nvidia
https://gitlab.archlinux.org/archlinux/packaging/packages/cool-retro-term/-/blob/main/0001-nvidia-fix.patch?ref_type=heads
2024-10-11 10:52:01 +02:00
6609c4867f Merge pull request 'Use new line char instead of flushing the output' (#792) from mystuffs/master into master
Reviewed-on: #792
2024-10-11 10:49:37 +02:00
rilysh
84c5e8bca6 use newline char instead flushing 2024-10-11 10:49:14 +02:00
1a25749315 Merge pull request 'Fix typo in app.pro' (#801) from eltociear/patch-1 into master
Reviewed-on: #801
2024-10-11 10:48:48 +02:00
Ikko Eltociear Ashimine
3852f5995d Fix typo in app.pro
INTALLS -> INSTALLS
2024-10-11 10:48:22 +02:00
9093b7a16e Merge pull request 'typo: IBM Dos to IBM DOS' (#858) from rename-ibm-dos into master
Reviewed-on: #858
2024-10-11 10:47:57 +02:00
afead1c2c0 typo: IBM Dos to IBM DOS 2024-10-11 10:47:06 +02:00
1b2572f381 Merge pull request 'Make the burn-in look more like a real terminal.' (#845) from j3pic/more-accurate-burn-in into master
Reviewed-on: #845
2024-10-11 10:44:39 +02:00
Jeremy Phelps
27ca6b3f73 Make the burn-in look more like the real thing.
Exponential decay instead of linear.
2024-06-14 04:26:52 -04:00
Filippo Scognamiglio
f157648d1e
Merge pull request #711 from razziel89/feature/appimage-in-github-actions
Feature/appimage in GitHub actions
2022-03-31 07:18:37 +02:00
Torsten Sachse
d4baaeccfc Undo unneeded code changes 2022-03-29 08:22:59 +02:00
Torsten Sachse
d412b66c6e Add github action for building an appimage 2022-03-29 08:16:02 +02:00
Filippo Scognamiglio
74ae511f92 Bump version. Yeeee 2022-01-29 15:15:52 +01:00
Filippo Scognamiglio
a3fbafe4ae
Update README.md 2022-01-29 15:10:08 +01:00
Filippo Scognamiglio
8a45fbe9ed Tweak settings window and label sizes. 2022-01-16 09:40:20 +01:00
Filippo Scognamiglio
01c7929ee3 Increase size of settings window. 2022-01-12 21:11:58 +01:00
Filippo Scognamiglio
2261af17d7 Restore legacy Connection slots. Restore compilation on Qt 5.12. 2022-01-12 21:08:58 +01:00
Filippo Scognamiglio
41f34c3992 Disable Fusion style which has issues with dark themes. 2022-01-12 21:00:11 +01:00
Filippo Scognamiglio
36b1cd2dde Add github funding links. 2022-01-09 15:11:08 +01:00
Filippo Scognamiglio
80374b3ec6
Update README.md 2022-01-09 15:08:15 +01:00
Filippo Scognamiglio
bc00d1e45f Bump version. 2022-01-09 14:08:36 +01:00
Filippo Scognamiglio
6ddb507247
Merge pull request #694 from Swordfish90/osx-fixes
MacOS improvements
2022-01-09 10:56:30 +01:00
Filippo Scognamiglio
b0f3b8f3d0 Update QMLTermWidget submodule. 2022-01-09 10:53:35 +01:00
Filippo Scognamiglio
06e7191056 Disable Qt5 Connections warnings. 2022-01-09 10:47:02 +01:00
Filippo Scognamiglio
997131ba64 Tiny fixes to burn-in. 2022-01-08 23:15:29 +01:00
Filippo Scognamiglio
ef9f412e5f Clip profiles list. 2022-01-08 22:36:02 +01:00
Filippo Scognamiglio
7b69d41c60 Remove slow burn-in effect. 2022-01-08 22:32:42 +01:00
Filippo Scognamiglio
552947f507 Improve burn-in timings. 2022-01-08 22:20:44 +01:00
Filippo Scognamiglio
f69f2df63c More Connections refactorings. 2022-01-03 21:06:33 +01:00
Filippo Scognamiglio
aa270067f6 Improve settings window. 2022-01-03 20:56:49 +01:00
Filippo Scognamiglio
28977313da UI/UX fixes for OSX version. 2022-01-03 18:43:07 +01:00
Filippo Scognamiglio
cfe35d7795
Merge pull request #665 from Swordfish90/unstable
Improve rasterization and terminal frame. Some refactoring.
2021-07-15 23:43:06 +02:00
Filippo Scognamiglio
4abbe332db Improve terminal frame and expose frame size setting. 2021-07-15 23:20:42 +02:00
Filippo Scognamiglio
3104abd4ad Add subpixel rasterization. 2021-07-07 00:09:10 +02:00
Filippo Scognamiglio
7714f7b503 Improve rasterization rendering and add LCD rasterization (with subpixels). 2021-07-03 16:14:02 +02:00
Dmytro Pashchenko
9d06f10a9b
some grammar fixes (#636) 2021-07-01 23:14:53 +02:00
Mizumoto Ryohei
8c27f7683b
update brew command (#664)
* update brew command

* Update README.md
2021-07-01 23:12:26 +02:00
Filippo Scognamiglio
bf1a491789
Merge pull request #638 from amake/patch-1
Mention MacPorts in readme
2021-07-01 23:10:42 +02:00
Filippo Scognamiglio
701cb540e5 Improve QML syntax and update license headers. 2021-06-30 22:49:03 +02:00
Filippo Scognamiglio
0f18a0349a
Merge pull request #589 from rbanffy/master
Update 3270 font to 2.3.1
2021-06-30 08:49:39 +02:00
Filippo Scognamiglio
205a152350
Merge pull request #662 from Swordfish90/unstable
Migrate to QtQuick.Controls 2.x
2021-06-30 08:45:24 +02:00
Filippo Scognamiglio
dae1a56691 Migrate from QtQuick.Controls 1.x to QtQuick.Controls 2.x. Updated QMLTermWidget submodule. 2021-06-30 08:33:31 +02:00
Ricardo Bánffy
39181f42cf Update font version to 2.3.1 2021-03-25 09:52:21 +00:00
Aaron Madlon-Kay
3d706ad1a7
Mention MacPorts in readme 2021-01-27 14:42:57 +09:00
Ricardo Bánffy
a31b77e5bc Update 3270 font with version 2.0.4.
See https://github.com/rbanffy/3270font/tree/v2.0.4 for changes.
2020-05-17 12:29:24 +01:00
Ricardo Bánffy
b417643415 Renamed 3270 font to latest binary version 2020-05-17 12:21:13 +01:00
Filippo Scognamiglio
dac2b4ff16
Merge pull request #560 from ayazhafiz/docs/homebrew
Add installation instructions using Homebrew
2020-05-09 17:00:35 +02:00
Filippo Scognamiglio
2d12b0c747 Bump qmltermwidget submodule. 2020-05-09 16:51:36 +02:00
Filippo Scognamiglio
5fe26edaa6
Merge pull request #540 from kklemon/support-blinking-cursor
Add blinking cursor support
2020-05-09 16:37:49 +02:00
Filippo Scognamiglio
a736cfd548
Merge pull request #569 from barak/master
get --help and --version to write to stdout
2020-05-09 16:36:45 +02:00
Filippo Scognamiglio
5af4214daa
Merge pull request #566 from tgerczei/master
now packaged in the official repository
2020-05-09 16:32:14 +02:00
Barak A. Pearlmutter
98ef7b329a allow --help/-h/--version/-v options without graphics 2020-05-08 16:29:51 +01:00
Barak A. Pearlmutter
b0e1962fa7 send cool-retro-term --help and --version to stdout 2020-05-08 16:29:51 +01:00
Barak A. Pearlmutter
83684e8882 squelch ugly quotes on 1st line of cool-retro-term --usage 2020-05-08 16:29:51 +01:00
Barak A. Pearlmutter
1ed7d077a9 git ignore app/moc_predefs.h 2020-05-08 16:29:51 +01:00
Filippo Scognamiglio
ba4b36618f
Merge pull request #546 from jayk/master
Yaourt is deprecated, use trizen instead for arch instructions
2020-05-06 18:44:52 +02:00
Filippo Scognamiglio
af647a4bad
Merge pull request #584 from pwwiur/patch-1
Adding snap install method
2020-05-06 18:34:41 +02:00
Filippo Scognamiglio
b719530ef0
Merge pull request #576 from AutumnalAntlers/ReadMe-Changes
Update Readme.md to include directions to settings
2020-05-06 18:33:33 +02:00
Amir Fo
530d61d67e
Adding snap install method
Adding snap install method which is supported in most of the distros and is easy!
2020-05-04 20:58:13 +04:30
AutumnalAntlers
3d76bcb48c
Update Readme.md to include directions to settings
Several users of OS's without titlebars or window decor have expressed confusion at how one change's their theme (in this case, via the context menu). Mentioning how to access the menu in the Readme will make the settings more accessible and prevent any future confusion. It might be more appropriate to create a "Use" heading exploring features such as Performance settings, but for the sake of brevity, I've just inserted a mention at the end of the description, before more OS-specific install instructions.
2020-03-22 11:40:40 -07:00
Tamás Gérczei
70ce2f1f3c
now packaged in the official repository 2019-12-28 09:35:08 +01:00
ayazhafiz
21a190a1aa
Add installation instructions using Homebrew
I was not aware there was a [Homebrew cask](https://github.com/Homebrew/homebrew-cask/blob/master/Casks/cool-retro-term.rb) for this
project, which simplifies installation on macOS. This commit adds
documentation for installing the app via Homebrew.
2019-11-25 10:20:36 -06:00
Jay Kuri
a88d222709
Merge pull request #1 from jayk/trizen-not-yaourt
Update Readme - Trizen for Arch - Yaourt is deprecated.
2019-08-23 13:47:44 -06:00
Jay Kuri
b2defceae5
Update Readme - Trizen for Arch - Yaourt is deprecated.
yaourt is deprecated.  Use trizen instead.  The command line arguments are identical to yaourt, for easy migration.
2019-08-23 13:47:28 -06:00
Kristian
8d7565ffc4 Disable blinking cursor by default 2019-07-20 16:51:10 +02:00
Kristian
9960b25dff Add support for blinking cursor 2019-07-08 15:21:17 +02:00
Kristian
411c116deb Update qmltermwidget submodule 2019-07-08 15:20:56 +02:00
Filippo Scognamiglio
64e007f1fd Update qmltermwidget submodule with CTRL+SPACE fix. 2019-06-18 22:16:23 +02:00
Filippo Scognamiglio
c62fc365db
Merge pull request #509 from 0mp/patch-2
Add FreeBSD installation instructions
2019-04-20 23:14:23 +02:00
Filippo Scognamiglio
e7e630bd5d
Merge pull request #524 from Haradric/patch-1
Update README.md
2019-04-20 23:13:34 +02:00
Filippo Scognamiglio
7d77175fbb
Merge pull request #521 from tgerczei/master
new ebuild available for 1.1.1
2019-04-20 23:12:46 +02:00
Haradric
f033553972
Update README.md
added installation method via Hombrew
2019-04-16 12:27:22 +03:00
Tamás Gérczei
ae1ed044ba
new ebuild available for 1.1.1 2019-04-01 21:07:15 +02:00
Filippo Scognamiglio
35d601c7a7
Add two missing qt dependencies to snapcraft.yaml 2019-03-27 18:56:44 +01:00
Filippo Scognamiglio
f89aeec374
Merge pull request #512 from timm0e/patch-1
Fix typo in README.md
2019-02-17 17:35:20 +01:00
timm0e
42c3b4b42e
Fix typo in README.md 2019-02-17 15:32:08 +01:00
Mateusz Piotrowski
322fc31396
Add FreeBSD installation instructions 2019-02-12 10:44:58 +01:00
Filippo Scognamiglio
6e4d5cfddd
Merge pull request #503 from mclang/patch-1
Adds installation instruction for Solus
2019-02-02 17:44:58 +01:00
mclang
d81485a8bf
Adds installation instruction for Solus 2019-02-01 15:09:17 +02:00
Filippo Scognamiglio
a9260d956c Remove snapcraft plugs. Not used for classic confinement. 2019-01-30 20:05:53 +01:00
Filippo Scognamiglio
025bb560bc
Update README.md 2019-01-22 21:49:21 +01:00
Filippo Scognamiglio
cdd1488e13 Print system font log only when verbose is enabled. 2019-01-19 21:08:57 +01:00
Filippo Scognamiglio
b8b2644969 Fix snap package launcher and expose in path qml directory. 2019-01-19 15:03:58 +01:00
Filippo Scognamiglio
09b5c0a5d0 Update snap package to use core18. 2019-01-18 00:34:34 +01:00
Filippo Scognamiglio
1ed66f3aa2 Update snapcraft file. 2019-01-17 22:47:38 +01:00
Filippo Scognamiglio
3b4d5d1c3f Bump version number. 2019-01-17 22:24:32 +01:00
Filippo Scognamiglio
f98fd5a7ad Fix font slider misbehaving. 2019-01-17 22:23:54 +01:00
Filippo Scognamiglio
b961109623 Use a single version name. 2019-01-17 22:03:25 +01:00
Filippo Scognamiglio
8f0d1023a4 Use threaded renderer by default in linux. This improves performances. 2019-01-17 21:47:59 +01:00
Filippo Scognamiglio
79773ba95c
Merge pull request #499 from Swordfish90/old-burnin
Reintroduce optional old burnin and improve highdpi support.
2019-01-17 21:35:24 +01:00
Filippo Scognamiglio
ff3f02fb8c Improve highdpi support. 2019-01-09 19:26:02 +01:00
Filippo Scognamiglio
0af2b20b3a Settings optin for old burinin version. It seems to be working better on osx. 2019-01-09 19:01:11 +01:00
Filippo Scognamiglio
b026fe357e
Merge pull request #495 from refacto/master
correct version number output with --version
2019-01-07 21:33:47 +01:00
Sascha Paunovic
ade36c013b correct version number output with --version 2019-01-07 12:24:53 +01:00
Filippo Scognamiglio
54a6a7f590
Merge pull request #494 from probonopd/patch-2
Update usr/share/metainfo
2019-01-04 22:46:58 +01:00
probonopd
20728e4a0f
usr/share/metainfo
As per https://www.freedesktop.org/software/appstream/docs/chap-Quickstart.html#sect-Quickstart-DesktopApps, usr/share/metainfo should be used
2019-01-04 18:53:09 +00:00
Filippo Scognamiglio
afa456f6b3
Merge pull request #493 from probonopd/patch-2
Fix #336 and upload to GitHub Releases
2019-01-04 19:29:25 +01:00
probonopd
3fbfb77430
Upload to GitHub Releases
Need to set a GITHUB_TOKEN environment variable in https://travis-ci.org/Swordfish90/cool-retro-term/settings
2019-01-03 11:04:35 +00:00
probonopd
051bcb62c6
Fix #336 2019-01-03 10:54:43 +00:00
Filippo Scognamiglio
d2c57eed6d
Merge pull request #336 from probonopd/patch-1
Generate AppImage of each build on Travis CI
2019-01-02 23:58:39 +01:00
Filippo Scognamiglio
f2f38c0e0d Fixes issue #491. 2019-01-02 22:01:57 +01:00
Filippo Scognamiglio
4046bdbc6a
Merge pull request #488 from tgerczei/master
new ebuild available for 1.1.0
2018-12-19 21:56:50 +01:00
Tamás Gérczei
c83cc206fd
new ebuild available for 1.1.0 2018-12-19 18:15:10 +01:00
Filippo Scognamiglio
41ac14fbd3
Merge pull request #482 from dagostinelli/patch-1
Update README.md
2018-12-19 09:30:27 +01:00
Filippo Scognamiglio
e4c1cad1a7
Update README.md 2018-12-18 23:40:24 +01:00
Filippo Scognamiglio
863c1ac27a Reduce horizontal sync possible minimum value. 2018-12-18 23:09:06 +01:00
Filippo Scognamiglio
c85eba617c Revert "Change burnin masking function to max. Should preseve darker colors."
This reverts commit 3cee1866634567c025c5ddd17a85272073ef514c.
2018-12-18 23:03:52 +01:00
Filippo Scognamiglio
dcb7b7c309 Reduce horizontal sync maximum strength. 2018-12-17 19:44:28 +01:00
Filippo Scognamiglio
3cee186663 Change burnin masking function to max. Should preseve darker colors. 2018-12-17 19:21:26 +01:00
Filippo Scognamiglio
06afe507f6 Change the way margin is used. This slightly improves quality. 2018-12-17 19:09:19 +01:00
Filippo Scognamiglio
4268d4d770 Remove comment. 2018-12-17 19:06:49 +01:00
Filippo Scognamiglio
d61dae5ab4 Let's reenable smoothing in burnin to see which artifact is actually better. 2018-12-17 00:36:22 +01:00
Filippo Scognamiglio
b5f39c1d53 Force integer values for new margins. 2018-12-17 00:10:26 +01:00
Filippo Scognamiglio
767a61b86e Improve settings layout. 2018-12-16 23:46:05 +01:00
Filippo Scognamiglio
0d3c0a2233 Allow screen margin customization. 2018-12-16 22:30:03 +01:00
Filippo Scognamiglio
0431103a1d Move frame to separate framebuffer. This fixes some glitches in terminal
frame.
2018-12-15 18:27:35 +01:00
Filippo Scognamiglio
633e4e642c
Merge pull request #487 from Swordfish90/framebuffer
Separate dynamic effects (the one based on time) from static ones. This caches a lot of computations and reduce resource consumption.
2018-12-03 22:18:43 +01:00
Filippo Scognamiglio
77dc82a381 Unload frame when not needed. 2018-12-03 19:28:50 +01:00
Filippo Scognamiglio
44a63d4aaa Change default curvature values. 2018-12-03 17:12:41 +01:00
Filippo Scognamiglio
5b3297f916 Tweak some shader constants. 2018-12-03 16:55:44 +01:00
Filippo Scognamiglio
41413d4712 Rearrange settings window. 2018-12-03 16:39:20 +01:00
Filippo Scognamiglio
fd2e5ce71e Reduce default fps to 20. It looks good with new burnin and saves some gpu. 2018-12-03 16:06:48 +01:00
Filippo Scognamiglio
e9ddd7d3b8 Split effects into static (cached) and dynamic computed at every frame. 2018-12-03 14:58:34 +01:00
Filippo Scognamiglio
da6795f002 Use window scaling parameter for framebuffer size. 2018-12-03 12:43:40 +01:00
Filippo Scognamiglio
f497bb4b44 First wrong framebuffer implementation. 2018-12-02 19:57:24 +01:00
Filippo Scognamiglio
4aea85649f Merge branch 'master' of https://github.com/Swordfish90/cool-retro-term 2018-12-01 19:56:13 +01:00
Filippo Scognamiglio
c56672dd04 Remove useless frame settings. 2018-12-01 19:24:36 +01:00
Filippo Scognamiglio
c2dc1cd65f Add inner screen shadow. Various overall frame improvements. 2018-12-01 19:16:33 +01:00
Filippo Scognamiglio
555783af4c First implementation of imageless frame. 2018-11-30 00:57:59 +01:00
Filippo Scognamiglio
b9ffae25e3
Merge pull request #427 from suve/add-T-option-to-man-page
Add the -T option to the debian man page
2018-11-26 22:55:03 +01:00
Filippo Scognamiglio
0f89936e01 Merge branch 'master' of https://github.com/Swordfish90/cool-retro-term 2018-11-26 22:53:22 +01:00
Filippo Scognamiglio
6ecccb3fe1 Update with v2.0.0 - new glyphs, better hinting 2018-11-26 22:50:56 +01:00
Filippo Scognamiglio
2e003b56ea Merge branch 'master' of https://github.com/rbanffy/cool-retro-term into rbanffy-master 2018-11-26 22:50:38 +01:00
Filippo Scognamiglio
a705418b6f
Merge pull request #470 from mason1920/master
Update README.md
2018-11-26 22:48:17 +01:00
Filippo Scognamiglio
9767eb9d7f
Merge pull request #337 from alexmyczko/patch-5
update change log for a first upload (sponsoring)
2018-11-26 22:45:55 +01:00
Filippo Scognamiglio
450b15944f Change version and description of snap package. 2018-11-26 22:31:14 +01:00
Filippo Scognamiglio
1fa7cb2afa
Merge pull request #431 from kz6fittycent/master
Snap for Cool-Retro-Term
2018-11-26 22:27:28 +01:00
Filippo Scognamiglio
d2415ff5f9 Update qmltermwidget submodule. 2018-11-25 09:10:18 +01:00
Filippo Scognamiglio
cdbe8d73f6 Bump version code. 2018-11-24 21:59:26 +01:00
Filippo Scognamiglio
38ae86f315 Custom command should be a setting not a profile. 2018-11-24 21:58:40 +01:00
Filippo Scognamiglio
100201d23c Update defualt profiles. 2018-11-24 21:51:41 +01:00
Darryl T. Agostinelli
db7a7f38f7
Update README.md
Make it easier for the eye to pick up the instructions for the various Linux distros.  Presently, the eye skips over them and all you see are the Ubuntu things.  Also adjusted the help text a little.
2018-11-23 19:13:39 -06:00
Filippo Scognamiglio
677ad5c54b Fixed fontColor conversion applied two times. 2018-11-23 22:53:24 +01:00
Filippo Scognamiglio
b8e3cd5d64 Limit screen curvature effect. 2018-11-23 22:35:48 +01:00
Filippo Scognamiglio
dead1197bd Hide by default menubar on linux. 2018-11-23 22:00:28 +01:00
Filippo Scognamiglio
a2455daa6c Avoid border artifacts on burn in effect. 2018-11-23 21:09:10 +01:00
kz6fittycent
ddff1fc455
Update snapcraft.yaml 2018-11-21 11:20:55 -06:00
Filippo Scognamiglio
82f2bd6231 Fix a couple of issues with burnIn. 2018-11-21 18:18:18 +01:00
Filippo Scognamiglio
cc7c13e17f Handle database and profile upgrade for new versions. 2018-11-21 18:11:01 +01:00
Filippo Scognamiglio
04a64e1312 Revert "Handle db upgrades and prepare work for old profiles deprecation."
This reverts commit 6fb8ceb5010357cf1a8d2ae305305a793b3b33a8.
2018-11-21 18:01:49 +01:00
kz6fittycent
bfecd9ebc6
Update snapcraft.yaml 2018-11-21 11:01:11 -06:00
Filippo Scognamiglio
6fb8ceb501 Handle db upgrades and prepare work for old profiles deprecation. 2018-11-18 23:24:42 +01:00
Filippo Scognamiglio
8124d101ad Update terminus font. 2018-11-18 19:42:30 +01:00
Filippo Scognamiglio
de8602847e Scanlines no longer affect background. Less artifacts at low fontSize values. 2018-11-18 19:10:52 +01:00
kz6fittycent
9d1ca1986d
Update snapcraft.yaml 2018-11-17 21:25:35 -06:00
kz6fittycent
a0312ff604
Update snapcraft.yaml 2018-11-17 21:24:57 -06:00
Filippo Scognamiglio
6f04513faa Increase maximum amount of bloom allowed. 2018-11-17 23:45:42 +01:00
Filippo Scognamiglio
a747f55423 Make font sizes more consistent. 2018-11-17 23:42:06 +01:00
Filippo Scognamiglio
d27e6569a0 Reduce default font size. 2018-11-17 23:17:36 +01:00
kz6fittycent
135ed0bf8b
Update snapcraft.yaml 2018-11-16 18:10:02 -06:00
kz6fittycent
67ac27c054
Update snapcraft.yaml 2018-11-16 17:49:22 -06:00
Filippo Scognamiglio
4e123d747a Revert "Add subpixels rasterization and improve existing ones."
Use something similar to what we had before, avoiding heavy texture
fetches."

This reverts commit 293b05fec6cf6b5cbd8e2a689f7e82c40483c811.
2018-11-13 21:57:50 +01:00
Filippo Scognamiglio
9df470acfc Change mask value to use greyscale color instead of max channel. 2018-11-12 23:43:37 +01:00
Filippo Scognamiglio
af8edc72f4 Fix division by zero when no effects were selected. 2018-11-09 21:17:05 +01:00
Filippo Scognamiglio
2b2ae66b8d Fix small issue with burnin masking. 2018-11-09 21:06:13 +01:00
Filippo Scognamiglio
0a95c5dff3 Fix screen brightness consistency in some scenarios. 2018-11-08 23:55:56 +01:00
Filippo Scognamiglio
56e1d80cf4 Make jitter stronger on the x axis. 2018-11-08 18:36:25 +01:00
Filippo Scognamiglio
65432fd317 Fix masking issue with new burn in. 2018-11-08 18:26:27 +01:00
Filippo Scognamiglio
2ec21f5eba Unload burnin effect when not in use. 2018-11-08 18:21:33 +01:00
Filippo Scognamiglio
92e82c203f Important burn-in optimization. It is much lighter on resources. 2018-11-07 22:42:29 +01:00
Filippo Scognamiglio
272bc5fe89 Fix wrong gamma colors when using chroma. 2018-11-06 01:09:44 +01:00
Filippo Scognamiglio
e8d5efd3b3 Slightly change rgb shift values. 2018-11-06 01:08:45 +01:00
Filippo Scognamiglio
8b1a0a5b8e Further improve rgbShift effect. Now can be enabled without chroma color. 2018-11-05 02:03:12 +01:00
Filippo Scognamiglio
293b05fec6 Add subpixels rasterization and improve existing ones. 2018-11-05 00:16:52 +01:00
Filippo Scognamiglio
37ba495354 Improve bloom effect. This is more pronounced in very bright areas. 2018-11-01 23:35:55 +01:00
Filippo Scognamiglio
a2e689a0dc RGB Shift effect now looks much better. 2018-10-28 23:54:56 +01:00
Filippo Scognamiglio
2ea119fb31 Fix some alignment related warnings. 2018-10-28 01:08:21 +02:00
Filippo Scognamiglio
162f59d220 Update and replace fonts. 2018-10-28 00:51:00 +02:00
Filippo Scognamiglio
880c5e722e Slight improvements to brunin look. 2018-10-27 22:29:38 +02:00
Filippo Scognamiglio
82efa28703 Fix wrong bottom texture clamping. 2018-10-27 22:16:11 +02:00
Filippo Scognamiglio
c091a90cea Slight improvements to burnin and rgb shift effects. 2018-10-22 23:30:17 +02:00
Filippo Scognamiglio
e4c014c1a8 Initial support for system monospace fonts. 2018-10-22 00:17:49 +02:00
Filippo Scognamiglio
fe4704d0f6 Track unstable qmltermwidget branch. 2018-10-18 09:43:29 +02:00
mason1920
9ea797b00b
Update README.md 2018-08-22 02:15:02 -04:00
Ricardo Bánffy
683f202191 Update with v2.0.0 - new glyphs, better hinting 2018-08-12 20:14:17 +01: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
kz6fittycent
2375aefebb
Update snapcraft.yaml 2018-03-09 17:31:00 -06:00
kz6fittycent
1e04f66a11
Update snapcraft.yaml 2018-03-09 17:24:25 -06:00
kz6fittycent
f8bd483139
Update snapcraft.yaml 2018-03-09 17:06:31 -06:00
kz6fittycent
3548ce84c1
Update snapcraft.yaml 2018-03-09 17:06:19 -06:00
kz6fittycent
90b68f9987
Update snapcraft.yaml 2018-03-09 16:39:16 -06:00
kz6fittycent
44e895ee08
Delete snapcraft.yaml 2018-03-09 16:29:00 -06:00
kz6fittycent
8032547fd0
merging stuff 2018-03-09 16:28:44 -06:00
kz6fittycent
a34dc35f0f
Update snapcraft.yaml 2018-03-09 16:21:18 -06: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
kz6fittycent
942ff8bf4a
Preparing for PR. 2018-03-06 01:17:45 -06:00
suve
e2c4392c6d Fix alphabetically incorrect ordering of options in man page 2018-02-25 12:40:46 +01:00
suve
7e771b1cfc Add a description of the -T option to the man page 2018-02-25 12:40:42 +01: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
kz6fittycent
51d59cc90b Create snapcraft.yaml 2017-10-24 18:53:53 -05: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
probonopd
4bff6efe97 Update .travis.yml 2017-04-03 23:07:30 +02:00
probonopd
c514dc7a24 See if we still need 2 runs 2017-04-03 22:55:45 +02:00
Alex
32e95185ad update copyright years 2017-03-30 16:34:53 +02:00
probonopd
24754edb6a Use linuxdeployqt-continuous-x86_64.AppImage for now 2017-03-17 21:05:44 +01:00
probonopd
79fbb76524 Try to reduce workarounds fpr 2017-03-17 21:02:20 +01:00
Alex
bbe61e4443 update change log for a first upload (sponsoring)
how it should be for a first official Debian package
2017-02-28 17:18:57 +01:00
probonopd
b85aede966 Update .travis.yml 2017-02-25 01:27:19 +01:00
probonopd
c66ca6e44f Update .travis.yml 2017-02-25 01:20:00 +01:00
probonopd
a192024fef Update .travis.yml 2017-02-25 01:12:13 +01:00
probonopd
918df9098a Update .travis.yml 2017-02-25 01:06:42 +01:00
probonopd
c9271bfa36 Update .travis.yml 2017-02-25 01:01:39 +01:00
probonopd
fa162c818b Update .travis.yml 2017-02-25 00:56:00 +01:00
probonopd
ff976e3ec2 Update .travis.yml 2017-02-25 00:55:46 +01:00
probonopd
17c5651305 Update .travis.yml 2017-02-25 00:50:41 +01:00
probonopd
7c7b049ba1 Update .travis.yml 2017-02-25 00:49:16 +01:00
probonopd
0823fe8b3d find /opt/qt58/ | grep QtGraphicalEffects 2017-02-19 21:43:34 +01:00
probonopd
e787fd0fb5 Update .travis.yml 2017-02-19 20:11:53 +01:00
probonopd
650497bff4 Debug why some qml imports do not get deployed 2017-02-19 18:45:29 +01:00
probonopd
2f25bd30b0 linuxdeployqt-3-x86_64.AppImage 2017-02-19 18:38:16 +01:00
probonopd
d58157a450 -qmldir=./app/qml/ -qmldir=./qmltermwidget/ 2017-02-19 18:32:44 +01:00
probonopd
9d049bd041 Use linuxdeployqt-3-x86_64.AppImage 2017-02-19 18:24:35 +01:00
probonopd
988222b711 Upload to transfer.sh 2017-02-19 18:23:31 +01:00
probonopd
f42bd3036f Install libgl1-mesa-dev 2017-02-19 18:08:53 +01:00
probonopd
297239fb5c Install libgl-dev 2017-02-19 18:05:37 +01:00
probonopd
dbd46d44aa Update .travis.yml 2017-02-19 18:01:29 +01:00
probonopd
254f4d6e92 Create .travis.yml 2017-02-19 17:56:57 +01: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
247 changed files with 6401 additions and 27680 deletions

4
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,4 @@
# These are supported funding model platforms
patreon: swordfish90
custom: ['https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=flscogna%40gmail.com&item_name=Support+CRT&currency_code=EUR&source=url']

98
.github/workflows/appimage.yml vendored Normal file
View File

@ -0,0 +1,98 @@
name: "ci"
on:
push:
tags: "**"
workflow_dispatch:
defaults:
run:
shell: bash
jobs:
appimage:
runs-on: ubuntu-18.04
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
submodules: true
- name: Install dependencies
run: |
sudo add-apt-repository -y ppa:beineri/opt-qt-5.15.2-bionic
sudo apt-get update -qq
sudo apt-get install -y \
build-essential make wget libgl1-mesa-dev \
qt515declarative qt515graphicaleffects \
qt515quickcontrols qt515quickcontrols2
- name: Download QT appimage builder
run: |
wget -c -O linuxdeployqt.AppImage \
https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage
chmod a+x linuxdeployqt.AppImage
- name: Build project
run: |
source /opt/qt*/bin/qt*-env.sh && \
qmake -v && \
qmake CONFIG+=release PREFIX=/usr && \
make -j$(nproc)
- name: Install to appdir
run: |
source /opt/qt*/bin/qt*-env.sh && \
make INSTALL_ROOT=appdir -j$(nproc) install
- name: Extract version number
run: |
# Extract version for linuxdeployqt to name the file. Use the tag as
# release name but remove prefix.
echo "VERSION=$(echo '${{ github.ref }}' | sed 's;.*/;;')" >> $GITHUB_ENV
- name: Build appimage directory
run: |
mkdir -p \
appdir/usr/bin \
appdir/usr/lib \
appdir/usr/share/applications \
appdir/usr/share/metainfo \
appdir/usr/share/icons/hicolor/128x128/apps
cp cool-retro-term appdir/usr/bin/
cp cool-retro-term.desktop appdir/usr/share/applications/
cp packaging/appdata/cool-retro-term.appdata.xml appdir/usr/share/metainfo/
cp app/icons/128x128/cool-retro-term.png appdir/usr/share/icons/hicolor/128x128/apps/
cp -r ./app/qml appdir/usr/
# Workaround for https://github.com/probonopd/linuxdeployqt/issues/78
cp -r ./qmltermwidget/QMLTermWidget appdir/usr/qml/
find appdir | sort
- name: Build appimage
run: |
source /opt/qt*/bin/qt*-env.sh && \
./linuxdeployqt.AppImage appdir/usr/share/applications/cool-retro-term.desktop \
-verbose=1 -appimage \
-qmldir=./app/qml/ \
-qmldir=./qmltermwidget/
env:
# Unset environment variables
QTDIR:
QT_PLUGIN_PATH:
LD_LIBRARY_PATH:
- name: Upload release
uses: softprops/action-gh-release@v1
with:
body: appimage release
files: ./**/Cool_Retro_Term-*-x86_64.AppImage
- name: Clean up
if: always()
run: |
find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq
make clean
rm -rf appdir

17
.gitignore vendored
View File

@ -18,6 +18,7 @@
*.pro.user.*
*.moc
moc_*.cpp
moc_*.h
qrc_*.cpp
ui_*.h
Makefile*
@ -35,4 +36,18 @@ Makefile*
*.xcf
/imports/
# Ubuntu SDk
*.excludes
*.json
# Excludes compiled files
imports
cool-retro-term
# Mac OSX
.DS_Store
*.app
# IntelliJ
.idea

4
.gitmodules vendored Normal file
View File

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

37
.travis.yml Normal file
View File

@ -0,0 +1,37 @@
sudo: required
dist: trusty
language: c++
install:
- sudo add-apt-repository -y ppa:beineri/opt-qt58-trusty
- sudo apt-get update -qq
- sudo apt-get -y install build-essential qt58declarative qt58graphicaleffects qt58quickcontrols libgl1-mesa-dev
- source /opt/qt*/bin/qt*-env.sh
script:
- qmake CONFIG+=release PREFIX=/usr
- make -j$(nproc)
- mkdir -p appdir/usr/share/metainfo appdir/usr/bin
- cp packaging/appdata/cool-retro-term.appdata.xml appdir/usr/share/metainfo/
- cp cool-retro-term appdir/usr/bin/
- cp ./cool-retro-term.desktop appdir/
- cp ./app/icons/128x128/cool-retro-term.png appdir/
- cp -r ./app/qml appdir/usr/
- cp -r ./qmltermwidget/QMLTermWidget appdir/usr/qml/ # Workaround for https://github.com/probonopd/linuxdeployqt/issues/78
- wget -c https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage
- chmod a+x linuxdeployqt-*.AppImage
- unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
- export VERSION=$(git rev-parse --short HEAD) # linuxdeployqt uses this for naming the file
- ./linuxdeployqt-*.AppImage appdir/usr/bin/cool-retro-term -qmldir=./app/qml/ -qmldir=./qmltermwidget/ # -verbose=3 2>&1 | grep "path:" -C 3
- ./linuxdeployqt-*.AppImage appdir/usr/bin/cool-retro-term -qmldir=./app/qml/ -qmldir=./qmltermwidget/ -verbose=2 -appimage
after_success:
- find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq
- # curl --upload-file Cool*.AppImage https://transfer.sh/Cool_Retro_Term-git.$(git rev-parse --short HEAD)-x86_64.AppImage
- wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh
- bash upload.sh Cool*.AppImage*
branches:
except:
- # Do not build tags that we create when we upload to GitHub Releases
- /^(?i:continuous)/

109
README.md
View File

@ -1,101 +1,30 @@
#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): 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 Qt5. It's suggested that you stick to the latest LTS version.
##Screenshots
![Image](<http://i.imgur.com/NUfvnlu.png>)
![Image](<http://i.imgur.com/4LpfLF8.png>)
![Image](<http://i.imgur.com/MMmM6Ht.png>)
Settings such as colors, fonts, and effects can be accessed via context menu.
##Build instructions
## Screenshots
![Image](<https://i.imgur.com/TNumkDn.png>)
![Image](<https://i.imgur.com/hfjWOM4.png>)
![Image](<https://i.imgur.com/GYRDPzJ.jpg>)
##Dependencies
Make sure to install these first.
## Install
---
If you want to get a hold of the latest version, just go to the Releases page and grab the latest AppImage (Linux) or dmg (macOS).
**Ubuntu 14.04**
Alternatively, most distributions such as Ubuntu, Fedora or Arch already package cool-retro-term in their official repositories.
sudo apt-get install build-essential qmlscene qt5-qmake qt5-default qtdeclarative5-dev qtdeclarative5-controls-plugin qtdeclarative5-qtquick2-plugin libqt5qml-graphicaleffects qtdeclarative5-dialogs-plugin qtdeclarative5-localstorage-plugin qtdeclarative5-window-plugin
## Building
---
**Debian Jessie**
sudo apt-get install build-essential qmlscene qt5-qmake qt5-default qtdeclarative5-dev qml-module-qtquick-controls qml-module-qtgraphicaleffects qml-module-qtquick-dialogs qml-module-qtquick-localstorage qml-module-qtquick-window2
---
**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
```
---
**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
---
**OS X**
brew install qt5
export CPPFLAGS="-I/usr/local/opt/qt5/include"
export LDFLAGS="-L/usr/local/opt/qt5/lib"
export PATH=/usr/local/opt/qt5/bin:$PATH
git clone https://github.com/Swordifish90/cool-old-term.git
git checkout osx
qmake && make && make install
# Have fun!
./cool-old-term
---
**Anyone else**
Install Qt directly from here http://qt-project.org/downloads . Once done export them in you path (replace "_/opt/Qt5.3.1/5.3/gcc_64/bin_" with your correct folder):
export PATH=/opt/Qt5.3.1/5.3/gcc_64/bin/:$PATH
###Compile
Once you installed all dependencies (Qt is installed and in your path) you need to compile and run the application:
```bash
# Get it from GitHub
git clone https://github.com/Swordifish90/cool-old-term.git
# Build it
cd cool-old-term
cd konsole-qml-plugin
qmake && make && make install
cd ..
# Have fun!
./cool-old-term
```
Check out the wiki and follow the instructions on how to build it on [Linux](https://github.com/Swordfish90/cool-retro-term/wiki/Build-Instructions-(Linux)) and [macOS](https://github.com/Swordfish90/cool-retro-term/wiki/Build-Instructions-(macOS)).

View File

@ -1,103 +0,0 @@
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import QtQuick.Window 2.0
Window{
id: dialogwindow
title: qsTr("About")
width: 450
height: 300
ColumnLayout{
anchors.fill: parent
anchors.margins: 15
spacing: 15
Text {
anchors.horizontalCenter: parent.horizontalCenter
text: "cool-old-term"
font {bold: true; pointSize: 18}
}
Loader{
id: mainContent
Layout.fillHeight: true
Layout.fillWidth: true
states: [
State {
name: "Default"
PropertyChanges {
target: mainContent
sourceComponent: defaultComponent
}
},
State {
name: "License"
PropertyChanges {
target: mainContent
sourceComponent: licenseComponent
}
}
]
Component.onCompleted: mainContent.state = "Default";
}
Item{
Layout.fillWidth: true
height: childrenRect.height
Button{
anchors.left: parent.left
text: qsTr("License")
onClicked: {
mainContent.state == "Default" ? mainContent.state = "License" : mainContent.state = "Default"
}
}
Button{
anchors.right: parent.right
text: qsTr("Close")
onClicked: dialogwindow.close();
}
}
}
// MAIN COMPONENTS ////////////////////////////////////////////////////////
Component{
id: defaultComponent
ColumnLayout{
anchors.fill: parent
anchors.margins: 10
spacing: 10
Item{
Layout.fillHeight: true
}
Text{
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
text: shadersettings.version + "\n" +
qsTr("Author: ") + "Filippo Scognamiglio\n" +
qsTr("Email: ") + "flscogna@gmail.com\n" +
qsTr("Source: ") + "https://github.com/Swordifish90/cool-old-term\n"
}
}
}
Component{
id: licenseComponent
TextArea{
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" +
"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.\n\n" +
"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.\n\n" +
"You should have received a copy of the GNU General Public License " +
"along with this program. If not, see <http://www.gnu.org/licenses/>."
}
}
}

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,63 +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
RowLayout {
property bool enabled: true
property alias name: check.text
property double value: (check.checked) ? _value : 0.0
property alias _value: slider.value
property alias min_value: slider.minimumValue
property alias max_value: slider.maximumValue
property alias stepSize: slider.stepSize
id: setting_component
anchors.left: parent.left
anchors.right: parent.right
spacing: 25
CheckBox{
id: check
implicitWidth: 150
Component.onCompleted: checked = (_value !== 0);
enabled: parent.enabled
}
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;
}
return n + "%";
}
}

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,21 +0,0 @@
import QtQuick 2.2
Rectangle {
anchors.centerIn: parent
width: parent.width - parent.border.width
height: parent.height - parent.border.width
radius:parent.radius - parent.border.width/2
smooth: true
border.width: parent.border.width/2
border.color: "#22FFFFFF"
gradient: Gradient {
GradientStop { position: 0; color: "#88FFFFFF" }
GradientStop { position: .1; color: "#55FFFFFF" }
GradientStop { position: .5; color: "#33FFFFFF" }
GradientStop { position: .501; color: "#11000000" }
GradientStop { position: .8; color: "#11FFFFFF" }
GradientStop { position: 1; color: "#55FFFFFF" }
}
}

View File

@ -1,62 +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.0
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
Window{
id: insertnamedialog
width: 400
height: 100
modality: Qt.ApplicationModal
title: qsTr("Save current profile")
signal nameSelected(string name)
ColumnLayout{
anchors.margins: 10
anchors.fill: parent
RowLayout{
Label{text: qsTr("Name")}
TextField{
id: namefield
Layout.fillWidth: true
Component.onCompleted: forceActiveFocus()
}
}
RowLayout{
anchors.right: parent.right
anchors.bottom: parent.bottom
Button{
text: qsTr("OK")
onClicked: {
nameSelected(namefield.text);
close();
}
}
Button{
text: qsTr("Cancel")
onClicked: close()
}
}
}
}

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,54 +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.Window 2.1
import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.1
Window {
id: settings_window
title: qsTr("Settings")
width: 640
height: 450
property int tabmargins: 15
TabView{
anchors.fill: parent
anchors.margins: 10
SettingsGeneralTab{
title: qsTr("General")
anchors.fill: parent
anchors.margins: tabmargins
}
SettingsTerminalTab{
title: qsTr("Terminal")
anchors.fill: parent
anchors.margins: tabmargins
}
SettingsEffectsTab{
title: qsTr("Effects")
anchors.fill: parent
anchors.margins: tabmargins
}
}
}

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
}

38
app/app.pro Normal file
View File

@ -0,0 +1,38 @@
QT += qml quick widgets sql quickcontrols2
TARGET = cool-retro-term
DESTDIR = $$OUT_PWD/../
HEADERS += \
fileio.h \
monospacefontmanager.h
SOURCES = main.cpp \
fileio.cpp \
monospacefontmanager.cpp
macx:ICON = icons/crt.icns
RESOURCES += qml/resources.qrc
#########################################
## INSTALLS
#########################################
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,317 +0,0 @@
{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fmodern\fprq1 Atari Classic Chunky;}{\f3\froman Times New Roman;}{\f4\fswiss\fprq2 Arial;}}
{\colortbl\red0\green0\blue0;\red0\green0\blue255;}
\deflang1033\pard\plain\f2\fs24\cf1 Atari Classic TrueType Fonts \plain\f2\fs24\cf0
\par \plain\f4\fs16\cf0 (Windows Version 1.1)
\par Created by Mark Simonson (v.1.0-1998, v.1.1-2001)
\par marksim@bitstream.net
\par Website: Mac/Atari Fusion--Atari Home Computer Resources for Mac Users
\par http://www2.bitstream.net/~marksim/atarimac/
\par Macintosh version also available.
\par
\par With these fonts installed, you can view and print Atari text files in any text editor that allows you to change fonts (WordPad, for example). Tip: In order to get the correct line breaks, you will need to change the ATASCII return character (155) to the DOS LF character. (In the Character Map accessory, the ATASCII return is the blank character that comes just before the inverse up-arrow.)
\par
\par There are three different fonts. \plain\f4\fs16\cf0\b Atari Classic Chunky \plain\f4\fs16\cf0 is a pixel-for-pixel copy of the original ATASCII character set. \plain\f4\fs16\cf0\b Atari Classic Smooth \plain\f4\fs16\cf0 interprets the pixel aliasing (stair steps) as diagonal lines. \plain\f4\fs16\cf0\b Atari Classic Extrasmooth \plain\f4\fs16\cf0 refines this idea further with the addition of curves. \plain\f4\fs16\cf0\b Smooth\plain\f4\fs16\cf0 and \plain\f4\fs16\cf0\b Extrasmooth\plain\f4\fs16\cf0 were designed for better appearance and legibility at larger sizes and on print-outs. Use the one that looks best to you.
\par
\par These fonts will tend to look uneven at font sizes that do not correspond to the 8-by-8 pixel grid that the characters are based on. Because Windows assumes 96ppi screen resolution, they will look best in a font size that is a multiple of 6 (i.e., 6pt, 12pt, 18pt, etc.). (In Windows, 6 points = 8 pixels.)
\par
\par The Atari Classic TrueType fonts duplicate the ATASCII character set on a low-level basis. Unlike a normal Windows font, ATASCII utilizes all character codes from $00 to $FF (0 to 255). The lower half are normal characters; the upper half are inverse versions of the lower half. The basic ASCII characters ($00 to $7F) correspond fairly closely except for the first 32, which don't normally contain characters in a Windows font.
\par
\par Due to differences between the way Windows and the Atari use character codes, not all characters will display properly in Windows. In fact, some characters will not display at all (though they do exist in the font). Unfortunately, this is due to certain character codes being reserved in Windows and there doesn't appear to be any way to work around it. The character codes affected are: $00-$1F (0-31), $7F-$81 (127-129), $8D-$90 (141-144), $9D (157), and $9F (158).
\par
\par Not all characters can be typed from the keyboard. You can however copy characters as needed from this document (see tables below). The Character Map desk accessory can help also.
\par
\par \plain\f4\fs16\cf0\b ATASCII CHARACTER SET TABLES
\par \plain\f4\fs16\cf0
\par In order to see the ATASCII character set with these tables, the Atari Classic TrueType fonts must be installed. Characters that are not displayed properly are due to character code usage differences between ATASCII and Windows (see above).
\par
\par
\par \plain\f4\fs16\cf0\b TABLE 1: ATASCII Character Dump Block
\par \plain\f4\fs16\cf0
\par All characters (ATASCII $00 thru $FF) 16 characters per
\par line.
\par
\par
\par \plain\f2\fs12\cf0 \'01\'02\'03\'04\'05\'06\'07\'08\tab
\par \'0b\'0c
\par \'0e\'0f
\par \'10\'11\'12\'13\'14\'15\'16\'17\'18\'19\'1a\'1b\'1c\'1d\'1e\'1f
\par !"#$%&'()*+,-./
\par 0123456789:;<=>?
\par @ABCDEFGHIJKLMNO
\par PQRSTUVWXYZ[\\]^_
\par `abcdefghijklmno
\par pqrstuvwxyz\{|\}~
\par \'80\'81\'82\'83\'84\'85\'86\'87\'88\'89\'8a\'8b\'8c\'8d\'8e\'8f
\par \'90''""\bullet \endash \emdash \'98\'99\'9a \'9c\'9d\'9e\'9f
\par \~\'a1\'a2\'a3\'a4\'a5\'a6\'a7\'a8\'a9\'aa\'ab\'ac\'ad\'ae\'af
\par \'b0\'b1\'b2\'b3\'b4\'b5\'b6\'b7\'b8\'b9\'ba\'bb\'bc\'bd\'be\'bf
\par \'c0\'c1\'c2\'c3\'c4\'c5\'c6\'c7\'c8\'c9\'ca\'cb\'cc\'cd\'ce\'cf
\par \'d0\'d1\'d2\'d3\'d4\'d5\'d6\'d7\'d8\'d9\'da\'db\'dc\'dd\'de\'df
\par \'e0\'e1\'e2\'e3\'e4\'e5\'e6\'e7\'e8\'e9\'ea\'eb\'ec\'ed\'ee\'ef
\par \'f0\'f1\'f2\'f3\'f4\'f5\'f6\'f7\'f8\'f9\'fa\'fb\'fc\'fd\'fe\'ff
\par \plain\f4\fs16\cf0
\par
\par \plain\f4\fs16\cf0\b TABLE 2: ATASCII Character Dump List
\par \plain\f4\fs16\cf0
\par All characters (ATASCII $00 thru $FF) one character per
\par line with hexadecimal value indicated on the left.
\par
\par \plain\f2\fs12\cf0 00=
\par 01=\'01
\par 02=\'02
\par 03=\'03
\par 04=\'04
\par 05=\'05
\par 06=\'06
\par 07=\'07
\par 08=\'08
\par 09=\tab
\par 0A=
\par
\par 0B=\'0b
\par 0C=\'0c
\par 0D=
\par 0E=\'0e
\par 0F=\'0f
\par 10=\'10
\par 11=\'11
\par 12=\'12
\par 13=\'13
\par 14=\'14
\par 15=\'15
\par 16=\'16
\par 17=\'17
\par 18=\'18
\par 19=\'19
\par 1A=\'1a
\par 1B=\'1b
\par 1C=\'1c
\par 1D=\'1d
\par 1E=\'1e
\par 1F=\'1f
\par 20=
\par 21=!
\par 22="
\par 23=#
\par 24=$
\par 25=%
\par 26=&
\par 27='
\par 28=(
\par 29=)
\par 2A=*
\par 2B=+
\par 2C=,
\par 2D=-
\par 2E=.
\par 2F=/
\par 30=0
\par 31=1
\par 32=2
\par 33=3
\par 34=4
\par 35=5
\par 36=6
\par 37=7
\par 38=8
\par 39=9
\par 3A=:
\par 3B=;
\par 3C=<
\par 3D==
\par 3E=>
\par 3F=?
\par 40=@
\par 41=A
\par 42=B
\par 43=C
\par 44=D
\par 45=E
\par 46=F
\par 47=G
\par 48=H
\par 49=I
\par 4A=J
\par 4B=K
\par 4C=L
\par 4D=M
\par 4E=N
\par 4F=O
\par 50=P
\par 51=Q
\par 52=R
\par 53=S
\par 54=T
\par 55=U
\par 56=V
\par 57=W
\par 58=X
\par 59=Y
\par 5A=Z
\par 5B=[
\par 5C=\\
\par 5D=]
\par 5E=^
\par 5F=_
\par 60=`
\par 61=a
\par 62=b
\par 63=c
\par 64=d
\par 65=e
\par 66=f
\par 67=g
\par 68=h
\par 69=i
\par 6A=j
\par 6B=k
\par 6C=l
\par 6D=m
\par 6E=n
\par 6F=o
\par 70=p
\par 71=q
\par 72=r
\par 73=s
\par 74=t
\par 75=u
\par 76=v
\par 77=w
\par 78=x
\par 79=y
\par 7A=z
\par 7B=\{
\par 7C=|
\par 7D=\}
\par 7E=~
\par 7F=
\par 80=\'80
\par 81=\'81
\par 82=\'82
\par 83=\'83
\par 84=\'84
\par 85=\'85
\par 86=\'86
\par 87=\'87
\par 88=\'88
\par 89=\'89
\par 8A=\'8a
\par 8B=\'8b
\par 8C=\'8c
\par 8D=\'8d
\par 8E=\'8e
\par 8F=\'8f
\par 90=\'90
\par 91='
\par 92='
\par 93="
\par 94="
\par 95=\bullet
\par 96=\endash
\par 97=\emdash
\par 98=\'98
\par 99=\'99
\par 9A=\'9a
\par 9B=
\par 9C=\'9c
\par 9D=\'9d
\par 9E=\'9e
\par 9F=\'9f
\par A0=\~
\par A1=\'a1
\par A2=\'a2
\par A3=\'a3
\par A4=\'a4
\par A5=\'a5
\par A6=\'a6
\par A7=\'a7
\par A8=\'a8
\par A9=\'a9
\par AA=\'aa
\par AB=\'ab
\par AC=\'ac
\par AD=\'ad
\par AE=\'ae
\par AF=\'af
\par B0=\'b0
\par B1=\'b1
\par B2=\'b2
\par B3=\'b3
\par B4=\'b4
\par B5=\'b5
\par B6=\'b6
\par B7=\'b7
\par B8=\'b8
\par B9=\'b9
\par BA=\'ba
\par BB=\'bb
\par BC=\'bc
\par BD=\'bd
\par BE=\'be
\par BF=\'bf
\par C0=\'c0
\par C1=\'c1
\par C2=\'c2
\par C3=\'c3
\par C4=\'c4
\par C5=\'c5
\par C6=\'c6
\par C7=\'c7
\par C8=\'c8
\par C9=\'c9
\par CA=\'ca
\par CB=\'cb
\par CC=\'cc
\par CD=\'cd
\par CE=\'ce
\par CF=\'cf
\par D0=\'d0
\par D1=\'d1
\par D2=\'d2
\par D3=\'d3
\par D4=\'d4
\par D5=\'d5
\par D6=\'d6
\par D7=\'d7
\par D8=\'d8
\par D9=\'d9
\par DA=\'da
\par DB=\'db
\par DC=\'dc
\par DD=\'dd
\par DE=\'de
\par DF=\'df
\par E0=\'e0
\par E1=\'e1
\par E2=\'e2
\par E3=\'e3
\par E4=\'e4
\par E5=\'e5
\par E6=\'e6
\par E7=\'e7
\par E8=\'e8
\par E9=\'e9
\par EA=\'ea
\par EB=\'eb
\par EC=\'ec
\par ED=\'ed
\par EE=\'ee
\par EF=\'ef
\par F0=\'f0
\par F1=\'f1
\par F2=\'f2
\par F3=\'f3
\par F4=\'f4
\par F5=\'f5
\par F6=\'f6
\par F7=\'f7
\par F8=\'f8
\par F9=\'f9
\par FA=\'fa
\par FB=\'fb
\par FC=\'fc
\par FD=\'fd
\par FE=\'fe
\par FF=\'ff
\par }

View File

@ -1,6 +0,0 @@
Fonts in this package are (c) 2010 Style.
You MAY NOT: sell this font; include/redistribute this font in any font collection regardless of pricing; provide the font for direct download from any web site. You MAY: link to "http://style64.org/c64-truetype" in order for others to download and install the font; embed this font or its .eot and .woff variants without any modification and using the same filename it was provided with for display on any web site using @font-face rules; use this font in static images and vector art; include this font without any modification and using the same filename it was provided with as part of a software package but ONLY if said software package is freely provided to end users. You may also contact us to negotiate a (possibly commercial) license for your use outside of these guidelines at "http://style64.org/contact-style".
At all times the most recent version of this license can be found at "http://style64.org/c64-truetype/license".

View File

@ -1,72 +0,0 @@
/
/(_____________ ____
\ /______)\ | |
:\ | / \:| |:::::::::: : .. . : .. . . :. .
\_____| / | \| |______
___ / ________ \... . . .
\______________ \ | | /.. . . . . .
\ |__| /
--x--x-----x----\______ |-/_____/-x--x-xx--x-- - -x -- - - -- - - -
. . . . . . . . . . . .\____|. . . . . .
-------------------------------------------------------------------------------
>> perfect dos vga 437 - general information >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-------------------------------------------------------------------------------
"Perfect DOS VGA 437" and "Perfect DOS VGA 437 Win" are truetype fonts
designed to emulate the MS-DOS/Text mode standard font, used on VGA monitors,
with the 437 Codepage (standard US/International). This is a "bitmap" font,
meaning it emulates a bitmap font and can only be used at a given size (8 or
multiples of it like 16, 24, 32, etc). It's optimized for Flash too, so it
won't produce antialias if used at round positions.
There are two fonts available. "Perfect DOS VGA 437" uses the original DOS
codepage 437. It should be used, for example, if you're opening DOS ASCII
files on notepad or another windows-based editor. Since it's faithful to the
original DOS codes, it won't accent correctly in windows ("é" would produce
something different, not an "e" with an acute).
There's also "Perfect DOS VGA 437 Win" which is the exactly same font adapted
to a windows codepage. This should use accented characters correctly but won't
work if you're opening a DOS-based text file.
UPDATE: this is a new version, updated in august/2008. It has fixed leading
metrics for Mac systems.
-------------------------------------------------------------------------------
>> perfect dos vga 437 - creation process >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-------------------------------------------------------------------------------
This font was created to be used on a Flash-based ANSi viewer I'm working. To
create it, I created a small Quick Basic program to write all characters on
screen,
CLS
FOR l = 0 TO 255
charWrite 1 + (l MOD 20), 1 + (l \ 20) * 6 + (l MOD 2), LTRIM$(RTRIM$(STR$(l))) + CHR$(l)
NEXT
SUB charWrite (lin, col, char$)
DEF SEG = &HB800
FOR i = 1 TO LEN(char$)
POKE ((lin - 1) * 160) + ((col - 2 + i) * 2), ASC(MID$(char$, i, 1))
IF (i = LEN(char$)) THEN POKE ((lin - 1) * 160) + ((col - 2 + i) * 2) + 1, 113
NEXT
END SUB
Then captured the text screen using SCREEN THIEF (a very, very old screen
capture TSR program which converts text screens to images accurately). I then
recreated the font polygon by polygon on Fontlab, while looking at the image
on Photoshop. No conversion took place.
-------------------------------------------------------------------------------
>> author >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-------------------------------------------------------------------------------
zeh fernando remembers the old days. SMASH DAH FUCKING ENTAH.
http://www.fatorcaos.com.br
rorshack ^ maiden brazil
-------------------------------------------------------------------------------
^zehPULLSdahTRICK^kudosOUTtoWHOkeepsITreal^smashDAHfuckingENTAH!!!^lowres4ever^
-------------------------------------------------------------------------------

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
}

View File

@ -1,28 +0,0 @@
import QtQuick 2.2
import "utils"
TerminalFrame{
id: frame
z: 2.1
anchors.fill: parent
addedWidth: 140
addedHeight: 140
borderLeft: 116
borderRight: 116
borderTop: 116
borderBottom: 116
imageSource: "../images/screen-frame.png"
normalsSource: "../images/screen-frame-normals.png"
rectX: 15
rectY: 15
distortionCoefficient: 1.5
displacementLeft: 45
displacementTop: 40
displacementRight: 38.0
displacementBottom: 28.0
shaderString: "FrameShader.qml"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 507 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 571 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 811 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.

127
app/main.cpp Normal file
View File

@ -0,0 +1,127 @@
#include <QtQml/QQmlApplicationEngine>
#include <QtGui/QGuiApplication>
#include <QQmlContext>
#include <QStringList>
#include <QtWidgets/QApplication>
#include <QIcon>
#include <QQuickStyle>
#include <QDebug>
#include <stdlib.h>
#include <QFontDatabase>
#include <QLoggingCategory>
#include <fileio.h>
#include <monospacefontmanager.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);
// Disable Connections slot warnings
QLoggingCategory::setFilterRules("qt.qml.connections.warning=false");
#if defined (Q_OS_LINUX)
setenv("QSG_RENDER_LOOP", "threaded", 0);
#endif
#if defined(Q_OS_MAC)
// This allows UTF-8 characters usage in OSX.
setenv("LC_CTYPE", "UTF-8", 1);
#endif
if (argc>1 && (!strcmp(argv[1],"-h") || !strcmp(argv[1],"--help"))) {
QTextStream cout(stdout, QIODevice::WriteOnly);
cout << "Usage: " << argv[0] << " [--default-settings] [--workdir <dir>] [--program <prog>] [-p|--profile <prof>] [--fullscreen] [-h|--help]" << '\n';
cout << " --default-settings Run cool-retro-term with the default settings" << '\n';
cout << " --workdir <dir> Change working directory to 'dir'" << '\n';
cout << " -e <cmd> Command to execute. This option will catch all following arguments, so use it as the last option." << '\n';
cout << " -T <title> Set window title to 'title'." << '\n';
cout << " --fullscreen Run cool-retro-term in fullscreen." << '\n';
cout << " -p|--profile <prof> Run cool-retro-term with the given profile." << '\n';
cout << " -h|--help Print this help." << '\n';
cout << " --verbose Print additional information such as profiles and settings." << '\n';
cout << " -v|--version Print the program name and version." << '\n';
return 0;
}
QString appVersion("1.2.0");
if (argc>1 && (!strcmp(argv[1],"-v") || !strcmp(argv[1],"--version"))) {
QTextStream cout(stdout, QIODevice::WriteOnly);
cout << "cool-retro-term " << appVersion << '\n';
return 0;
}
QApplication app(argc, argv);
app.setAttribute(Qt::AA_MacDontSwapCtrlAndMeta, true);
QQmlApplicationEngine engine;
FileIO fileIO;
MonospaceFontManager monospaceFontManager;
#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
app.setOrganizationName("cool-retro-term");
app.setOrganizationDomain("cool-retro-term");
// Manage command line arguments from the cpp side
QStringList args = app.arguments();
// 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("appVersion", appVersion);
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("monospaceSystemFonts", monospaceFontManager.retrieveMonospaceFonts());
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

@ -0,0 +1,25 @@
#include "monospacefontmanager.h"
#include <QDebug>
MonospaceFontManager::MonospaceFontManager(QObject *parent) : QObject(parent)
{
}
QStringList MonospaceFontManager::retrieveMonospaceFonts() {
QStringList result;
QFontDatabase fontDatabase;
QStringList fontFamilies = fontDatabase.families();
for (int i = 0; i < fontFamilies.size(); i++) {
QString fontFamily = fontFamilies[i];
QFont font(fontFamily);
if (fontDatabase.isFixedPitch(font.family())) {
result.append(fontFamily);
}
}
return result;
}

View File

@ -0,0 +1,15 @@
#ifndef MONOSPACEFONTMANAGER_H
#define MONOSPACEFONTMANAGER_H
#include <QObject>
#include <QFontDatabase>
class MonospaceFontManager : public QObject
{
Q_OBJECT
public:
explicit MonospaceFontManager(QObject *parent = nullptr);
Q_INVOKABLE QStringList retrieveMonospaceFonts();
};
#endif // MONOSPACEFONTMANAGER_H

133
app/qml/AboutDialog.qml Normal file
View File

@ -0,0 +1,133 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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 2.2
import QtQuick.Layouts 1.1
import QtQuick.Window 2.0
Window {
id: dialogwindow
title: qsTr("About")
width: 600
height: 400
modality: Qt.ApplicationModal
ColumnLayout {
anchors.fill: parent
anchors.margins: 15
spacing: 15
Text {
Layout.alignment: Qt.AlignHCenter
text: "cool-retro-term"
font {
bold: true
pointSize: 18
}
}
Loader {
id: mainContent
Layout.fillHeight: true
Layout.fillWidth: true
states: [
State {
name: "Default"
PropertyChanges {
target: mainContent
sourceComponent: defaultComponent
}
},
State {
name: "License"
PropertyChanges {
target: mainContent
sourceComponent: licenseComponent
}
}
]
Component.onCompleted: mainContent.state = "Default"
}
Item {
Layout.fillWidth: true
height: childrenRect.height
Button {
anchors.left: parent.left
text: qsTr("License")
onClicked: {
mainContent.state == "Default" ? mainContent.state
= "License" : mainContent.state = "Default"
}
}
Button {
anchors.right: parent.right
text: qsTr("Close")
onClicked: dialogwindow.close()
}
}
}
// MAIN COMPONENTS ////////////////////////////////////////////////////////
Component {
id: defaultComponent
ColumnLayout {
anchors.fill: parent
spacing: 10
Image {
Layout.fillWidth: true
Layout.fillHeight: true
Layout.alignment: Qt.AlignHCenter
fillMode: Image.PreserveAspectFit
source: "images/crt256.png"
smooth: true
}
Text {
Layout.alignment: Qt.AlignCenter
horizontalAlignment: Text.AlignHCenter
text: appSettings.version + "\n" + qsTr(
"Author: ") + "Filippo Scognamiglio\n" + qsTr(
"Email: ") + "flscogna@gmail.com\n" + qsTr(
"Source: ") + "https://github.com/Swordfish90/cool-retro-term\n"
}
}
}
Component {
id: licenseComponent
ScrollView {
anchors.fill: parent
clip: true
TextArea {
readOnly: true
wrapMode: TextEdit.Wrap
text: "Copyright (c) 2013-2021 Filippo Scognamiglio <flscogna@gmail.com>\n\n"
+ "https://github.com/Swordfish90/cool-retro-term\n\n" +
"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" +
"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.\n\n" +
"You should have received a copy of the GNU General Public License "
+ "along with this program. If not, see <http://www.gnu.org/licenses/>."
}
}
}
}

View File

@ -0,0 +1,781 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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 2.0
import "utils.js" as Utils
QtObject {
readonly property string version: appVersion
readonly property int profileVersion: 2
// STATIC CONSTANTS ////////////////////////////////////////////////////////
readonly property real screenCurvatureSize: 0.4
readonly property real minimumFontScaling: 0.25
readonly property real maximumFontScaling: 2.50
readonly property real minBurnInFadeTime: 160
readonly property real maxBurnInFadeTime: 1600
property bool isMacOS: Qt.platform.os === "osx"
// 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: false
property string wintitle: "cool-retro-term"
property bool showTerminalSize: true
property real windowScaling: 1.0
property real fps: 20
property bool verbose: false
property real bloomQuality: 0.5
property real burnInQuality: 0.5
property bool blinkingCursor: false
onWindowScalingChanged: handleFontChanged()
// PROFILE SETTINGS ///////////////////////////////////////////////////////
property real windowOpacity: 1.0
property real ambientLight: 0.2
property real contrast: 0.80
property real brightness: 0.5
property bool useCustomCommand: false
property string customCommand: ""
property string _backgroundColor: "#000000"
property string _fontColor: "#ff8100"
property string _frameColor: "#ffffff"
property string saturatedColor: Utils.mix(Utils.strToColor("#FFFFFF"),
Utils.strToColor(_fontColor),
saturationColor * 0.5)
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 color frameColor: Utils.strToColor(_frameColor)
property real staticNoise: 0.12
property real screenCurvature: 0.3
property real glowingLine: 0.2
property real burnIn: 0.25
property real bloom: 0.55
property real chromaColor: 0.25
property real saturationColor: 0.25
property real frameGloss: 0
property real jitter: 0.2
property real horizontalSync: 0.08
property real flickering: 0.1
property real rbgShift: 0.0
property real _margin: 0.5
property real _frameMargin: 0.5
property real margin: Utils.lint(1.0, 20.0, _margin)
property real frameMargin: Utils.lint(1.0, 50.0, _frameMargin)
property real totalMargin: frameMargin + margin
readonly property int no_rasterization: 0
readonly property int scanline_rasterization: 1
readonly property int pixel_rasterization: 2
readonly property int subpixel_rasterization: 3
property int rasterization: no_rasterization
// FONTS //////////////////////////////////////////////////////////////////
readonly property real baseFontScaling: 0.75
property real fontScaling: 1.0
property real totalFontScaling: baseFontScaling * fontScaling
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 fontFamily, 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"
}
},
State {
when: rasterization == subpixel_rasterization
PropertyChanges {
target: fontManager
source: "FontPixels.qml"
}
}
]
onLoaded: handleFontChanged()
}
property FontLoader fontLoader: FontLoader {}
onTotalFontScalingChanged: handleFontChanged()
onFontWidthChanged: handleFontChanged()
function getIndexByName(name) {
for (var i = 0; i < fontlist.count; i++) {
var requestedName = fontlist.get(i).name
if (name === requestedName)
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 = totalFontScaling
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
var fontFamily = fontManager.item.family
var isSystemFont = fontManager.item.isSystemFont
lowResolutionFont = fontManager.item.lowResolutionFont
if (!isSystemFont) {
fontLoader.source = fontSource
fontFamily = fontLoader.name
}
terminalFontChanged(fontFamily, pixelSize, lineSpacing, screenScaling,
fontWidth)
}
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,
"showMenubar": showMenubar,
"bloomQuality": bloomQuality,
"burnInQuality": burnInQuality,
"useCustomCommand": useCustomCommand,
"customCommand": customCommand
}
return stringify(settings)
}
function composeProfileObject() {
var settings = {
"backgroundColor": _backgroundColor,
"fontColor": _fontColor,
"frameColor": _frameColor,
"flickering": flickering,
"horizontalSync": horizontalSync,
"staticNoise": staticNoise,
"chromaColor": chromaColor,
"saturationColor": saturationColor,
"frameGloss": frameGloss,
"screenCurvature": screenCurvature,
"glowingLine": glowingLine,
"burnIn": burnIn,
"bloom": bloom,
"rasterization": rasterization,
"jitter": jitter,
"rbgShift": rbgShift,
"brightness": brightness,
"contrast": contrast,
"ambientLight": ambientLight,
"windowOpacity": windowOpacity,
"fontName": fontNames[rasterization],
"fontWidth": fontWidth,
"margin": _margin,
"blinkingCursor": blinkingCursor,
"frameMargin": _frameMargin,
}
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
showMenubar = settings.showMenubar !== undefined ? settings.showMenubar : showMenubar
bloomQuality = settings.bloomQuality !== undefined ? settings.bloomQuality : bloomQuality
burnInQuality = settings.burnInQuality
!== undefined ? settings.burnInQuality : burnInQuality
useCustomCommand = settings.useCustomCommand
!== undefined ? settings.useCustomCommand : useCustomCommand
customCommand = settings.customCommand
!== undefined ? settings.customCommand : customCommand
}
function loadProfileString(profileString) {
var settings = JSON.parse(profileString)
_backgroundColor = settings.backgroundColor
!== undefined ? settings.backgroundColor : _backgroundColor
_fontColor = settings.fontColor !== undefined ? settings.fontColor : _fontColor
_frameColor = settings.frameColor !== undefined ? settings.frameColor : _frameColor
horizontalSync = settings.horizontalSync
!== undefined ? settings.horizontalSync : horizontalSync
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
frameGloss = settings.frameGloss !== undefined ? settings.frameGloss : frameGloss
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
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
_margin = settings.margin !== undefined ? settings.margin : _margin
_frameMargin = settings.frameMargin !== undefined ? settings.frameMargin : _frameMargin
blinkingCursor = settings.blinkingCursor !== undefined ? settings.blinkingCursor : blinkingCursor
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.2,
"backgroundColor": "#000000",
"bloom": 0.5538,
"brightness": 0.5,
"burnIn": 0.2517,
"chromaColor": 0.2483,
"contrast": 0.7959,
"flickering": 0.1,
"fontColor": "#ff8100",
"fontName": "TERMINUS_SCALED",
"fontWidth": 1,
"glowingLine": 0.2,
"horizontalSync": 0.08,
"jitter": 0.1997,
"rasterization": 0,
"rbgShift": 0,
"saturationColor": 0.2483,
"screenCurvature": 0.3,
"frameColor": "#ffffff",
"frameGloss": 0,
"staticNoise": 0.1198,
"windowOpacity": 1,
"margin": 0.5,
"blinkingCursor": false,
"frameMargin": 0.1
}'
builtin: true
}
ListElement {
text: "Monochrome Green"
obj_string: '{
"ambientLight": 0.2,
"backgroundColor": "#000000",
"bloom": 0.5538,
"brightness": 0.5,
"burnIn": 0.2517,
"chromaColor": 0.0,
"contrast": 0.7959,
"flickering": 0.1,
"fontColor": "#0ccc68",
"fontName": "TERMINUS_SCALED",
"fontWidth": 1,
"glowingLine": 0.2,
"horizontalSync": 0.08,
"jitter": 0.1997,
"rasterization": 0,
"rbgShift": 0,
"saturationColor": 0.0,
"screenCurvature": 0.3,
"frameColor": "#ffffff",
"frameGloss": 0,
"staticNoise": 0.1198,
"windowOpacity": 1,
"margin": 0.5,
"blinkingCursor": false,
"frameMargin": 0.1
}'
builtin: true
}
ListElement {
text: "Green Scanlines"
obj_string: '{
"ambientLight": 0,
"backgroundColor": "#000000",
"bloom": 0.6,
"brightness": 0.5,
"burnIn": 0.3,
"chromaColor": 0.5,
"contrast": 0.6,
"flickering": 0.1,
"fontColor": "#7cff4f",
"fontName": "PRO_FONT_SCALED",
"fontWidth": 1,
"glowingLine": 0.2,
"horizontalSync": 0.151,
"jitter": 0.11,
"rasterization": 1,
"rbgShift": 0,
"saturationColor": 0.5,
"screenCurvature": 0.3,
"frameColor": "#ffffff",
"frameGloss": 0,
"staticNoise": 0.15,
"windowOpacity": 1,
"margin": 0.5,
"blinkingCursor": false,
"frameMargin": 0.1
}'
builtin: true
}
ListElement {
text: "Default Pixelated"
obj_string: '{
"ambientLight": 0,
"backgroundColor": "#000000",
"bloom": 0.4045,
"brightness": 0.6041,
"burnIn": 0.1024,
"chromaColor": 0.7517,
"contrast": 0.7473,
"flickering": 0.1962,
"fontColor": "#ffffff",
"fontName": "COMMODORE_PET",
"fontWidth": 1,
"glowingLine": 0.2,
"horizontalSync": 0.151,
"jitter": 0,
"rasterization": 2,
"rbgShift": 0,
"saturationColor": 0,
"screenCurvature": 0,
"frameColor": "#ffffff",
"frameGloss": 0,
"staticNoise": 0.15,
"windowOpacity": 1,
"margin": 0.5,
"blinkingCursor": false,
"frameMargin": 0.1
}'
builtin: true
}
ListElement {
text: "Apple ]["
obj_string: '{
"ambientLight": 0.3038,
"backgroundColor": "#000000",
"bloom": 0.5,
"brightness": 0.5,
"burnIn": 0.5017,
"chromaColor": 0,
"contrast": 0.85,
"flickering": 0.2,
"fontColor": "#00d56d",
"fontName": "APPLE_II",
"fontWidth": 1,
"glowingLine": 0.22,
"horizontalSync": 0.16,
"jitter": 0.1,
"rasterization": 1,
"rbgShift": 0,
"saturationColor": 0,
"screenCurvature": 0.5,
"frameColor": "#ffffff",
"frameGloss": 0,
"staticNoise": 0.099,
"windowOpacity": 1,
"margin": 0.5,
"blinkingCursor": false,
"frameMargin": 0.2
}'
builtin: true
}
ListElement {
text: "Vintage"
obj_string: '{
"ambientLight": 0.5,
"backgroundColor": "#000000",
"bloom": 0.4983,
"brightness": 0.5014,
"burnIn": 0.4983,
"chromaColor": 0,
"contrast": 0.7473,
"flickering": 0.9,
"fontColor": "#00ff3e",
"fontName": "COMMODORE_PET",
"fontWidth": 1,
"glowingLine": 0.3,
"horizontalSync": 0.42,
"jitter": 0.4,
"rasterization": 1,
"rbgShift": 0.2969,
"saturationColor": 0,
"screenCurvature": 0.5,
"frameColor": "#ffffff",
"frameGloss": 0,
"staticNoise": 0.2969,
"windowOpacity": 1,
"margin": 0.5,
"blinkingCursor": false,
"frameMargin": 0.5
}'
builtin: true
}
ListElement {
text: "IBM DOS"
obj_string: '{
"ambientLight": 0.151,
"backgroundColor": "#000000",
"bloom": 0.2969,
"brightness": 0.5,
"burnIn": 0.0469,
"chromaColor": 1,
"contrast": 0.85,
"flickering": 0.0955,
"fontColor": "#ffffff",
"fontName": "IBM_DOS",
"fontWidth": 1,
"glowingLine": 0.1545,
"horizontalSync": 0,
"jitter": 0.1545,
"rasterization": 0,
"rbgShift": 0.3524,
"saturationColor": 0,
"screenCurvature": 0.4,
"frameColor": "#ffffff",
"frameGloss": 0,
"staticNoise": 0.0503,
"windowOpacity": 1,
"margin": 0.5,
"blinkingCursor": false,
"frameMargin": 0.2
}'
builtin: true
}
ListElement {
text: "IBM 3278"
obj_string: '{
"ambientLight": 0.1,
"backgroundColor": "#000000",
"bloom": 0.2969,
"brightness": 0.5,
"burnIn": 0.6,
"chromaColor": 0,
"contrast": 0.85,
"flickering": 0,
"fontColor": "#0ccc68",
"fontName": "IBM_3278",
"fontWidth": 1,
"glowingLine": 0,
"horizontalSync": 0,
"jitter": 0,
"rasterization": 0,
"rbgShift": 0,
"saturationColor": 0,
"screenCurvature": 0.2,
"frameColor": "#ffffff",
"frameGloss": 0,
"staticNoise": 0,
"windowOpacity": 1,
"margin": 0.5,
"blinkingCursor": false,
"frameMargin": 0.1
}'
builtin: true
}
ListElement {
text: "Futuristic"
obj_string: '{
"ambientLight": 0,
"backgroundColor": "#000000",
"bloom": 0.5017,
"brightness": 0.5014,
"burnIn": 0.0955,
"chromaColor": 1,
"contrast": 0.85,
"flickering": 0.2,
"fontColor": "#729fcf",
"fontName": "TERMINUS",
"fontWidth": 1,
"glowingLine": 0.1476,
"horizontalSync": 0,
"jitter": 0.099,
"rasterization": 0,
"rbgShift": 0,
"saturationColor": 0.4983,
"screenCurvature": 0,
"frameColor": "#ffffff",
"frameGloss": 0,
"staticNoise": 0.0955,
"windowOpacity": 0.7,
"margin": 0.1,
"blinkingCursor": false,
"frameMargin": 0
}'
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
}

161
app/qml/BurnInEffect.qml Normal file
View File

@ -0,0 +1,161 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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 "utils.js" as Utils
Loader {
id: burnInEffect
property ShaderEffectSource source: item ? item.source : null
property real lastUpdate: 0
property real prevLastUpdate: 0
property real burnIn: appSettings.burnIn
property real burnInFadeTime: 1 / Utils.lint(_minBurnInFadeTime, _maxBurnInFadeTime, burnIn)
property real _minBurnInFadeTime: appSettings.minBurnInFadeTime
property real _maxBurnInFadeTime: appSettings.maxBurnInFadeTime
active: appSettings.burnIn !== 0
anchors.fill: parent
function completelyUpdate() {
let newTime = timeManager.time
if (newTime > lastUpdate) {
prevLastUpdate = lastUpdate
lastUpdate = newTime
}
item.source.scheduleUpdate()
}
function restartBlurSource() {
prevLastUpdate = timeManager.time
lastUpdate = prevLastUpdate
completelyUpdate()
}
sourceComponent: Item {
property alias source: burnInEffectSource
ShaderEffectSource {
id: burnInEffectSource
anchors.fill: parent
sourceItem: burnInShaderEffect
live: false
recursive: true
hideSource: true
wrapMode: ShaderEffectSource.ClampToEdge
format: ShaderEffectSource.RGBA
smooth: true
visible: false
Connections {
target: kterminal
onImagePainted: {
completelyUpdate()
}
}
// Restart blurred source settings change.
Connections {
target: appSettings
onBurnInChanged: {
burnInEffect.restartBlurSource()
}
onTerminalFontChanged: {
burnInEffect.restartBlurSource()
}
onRasterizationChanged: {
burnInEffect.restartBlurSource()
}
onBurnInQualityChanged: {
burnInEffect.restartBlurSource()
}
}
}
ShaderLibrary {
id: shaderLibrary
}
ShaderEffect {
id: burnInShaderEffect
property variant txt_source: kterminalSource
property variant burnInSource: burnInEffectSource
property real burnInTime: burnInFadeTime
property real lastUpdate: burnInEffect.lastUpdate
property real prevLastUpdate: burnInEffect.prevLastUpdate
anchors.fill: parent
blending: false
fragmentShader:
"#ifdef GL_ES
precision mediump float;
#endif\n" +
"uniform lowp float qt_Opacity;" +
"uniform lowp sampler2D txt_source;" +
"varying highp vec2 qt_TexCoord0;
uniform lowp sampler2D burnInSource;
uniform highp float burnInTime;
uniform highp float lastUpdate;
uniform highp float prevLastUpdate;" +
shaderLibrary.rgb2grey +
"void main() {
vec2 coords = qt_TexCoord0;
vec3 txtColor = texture2D(txt_source, coords).rgb;
vec4 accColor = texture2D(burnInSource, coords);
float prevMask = accColor.a;
float currMask = rgb2grey(txtColor);
highp float blurDecay = clamp((lastUpdate - prevLastUpdate) * burnInTime, 0.0, 1.0);
blurDecay = max(0.0, blurDecay - prevMask);
vec3 blurColor = accColor.rgb - vec3(blurDecay);
vec3 color = max(blurColor, txtColor);
gl_FragColor = vec4(color, currMask);
}
"
onStatusChanged: if (log) console.log(log) //Print warning messages
}
}
}

View File

@ -0,0 +1,72 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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 2.0
import QtQuick.Layouts 1.1
import "Components"
RowLayout {
property alias name: check.text
property double value
property alias min_value: slider.from
property alias max_value: slider.to
property alias stepSize: slider.stepSize
signal newValue(real newValue)
id: setting_component
Layout.fillWidth: true
onValueChanged: {
check.checked = !(value == 0)
if (check.checked)
slider.value = value
}
CheckBox {
id: check
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
onValueChanged: {
newValue(value)
}
}
SizedLabel {
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
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* 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.
@ -17,13 +17,14 @@
* 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.Dialogs 1.1
Item {
signal colorSelected (color color)
property color button_color
id: rootItem
signal colorSelected(color color)
property color color
property string name
ColorDialog {
@ -33,15 +34,14 @@ Item {
visible: false
//This is a workaround to a Qt 5.2 bug.
onCurrentColorChanged: colorDialog.color = colorDialog.currentColor;
onAccepted: colorSelected(color)
onColorChanged: if (!appSettings.isMacOS) colorSelected(color)
onAccepted: if (appSettings.isMacOS) colorSelected(color)
}
Rectangle{
Rectangle {
anchors.fill: parent
radius: 10
color: button_color
border.color: "black"
Glossy {}
color: rootItem.color
Rectangle {
anchors.fill: parent
anchors.margins: parent.height * 0.25
@ -49,14 +49,14 @@ Item {
color: "white"
opacity: 0.5
}
Text{
Text {
anchors.centerIn: parent
z: parent.z + 1
text: name + ": " + button_color
text: name + ": " + rootItem.color
}
}
MouseArea{
MouseArea {
anchors.fill: parent
onClicked: colorDialog.visible = true;
onClicked: colorDialog.visible = true
}
}

View File

@ -0,0 +1,32 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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 2.0
import QtQuick.Layouts 1.0
// This component is simply a label with a predefined size.
// Used to improve alignment.
Label {
id: textfield
Layout.minimumWidth: appSettings.labelWidth
width: appSettings.labelWidth
}

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

@ -0,0 +1,107 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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/PetMe.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.8
}
ListElement {
name: "IBM_PC"
text: "IBM PC (1981)"
source: "fonts/1981-ibm-pc/PxPlus_IBM_BIOS.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.8
}
ListElement {
name: "PROGGY_TINY"
text: "Proggy Tiny (Modern)"
source: "fonts/modern-proggy-tiny/ProggyTiny.ttf"
lineSpacing: 1
pixelSize: 16
baseScaling: 3.3
fontWidth: 0.9
}
ListElement {
name: "TERMINUS_SCALED"
text: "Terminus (Modern)"
source: "fonts/modern-terminus/TerminusTTF-4.46.0.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: 3.5
fontWidth: 0.9
}
ListElement {
name: "ATARI_400"
text: "Atari 400-800 (1979)"
source: "fonts/1979-atari-400-800/AtariClassic-Regular.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.8
}
ListElement {
name: "COMMODORE_64"
text: "Commodore 64 (1982)"
source: "fonts/1982-commodore64/C64_Pro_Mono-STYLE.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.8
}
}
}

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

@ -0,0 +1,107 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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/PetMe.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.7
}
ListElement {
name: "IBM_PC"
text: "IBM PC (1981)"
source: "fonts/1981-ibm-pc/PxPlus_IBM_BIOS.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.8
}
ListElement {
name: "PROGGY_TINY"
text: "Proggy Tiny (Modern)"
source: "fonts/modern-proggy-tiny/ProggyTiny.ttf"
lineSpacing: 1
pixelSize: 16
baseScaling: 3.3
fontWidth: 0.9
}
ListElement {
name: "TERMINUS_SCALED"
text: "Terminus (Modern)"
source: "fonts/modern-terminus/TerminusTTF-4.46.0.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: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.8
}
ListElement {
name: "ATARI_400"
text: "Atari 400-800 (1979)"
source: "fonts/1979-atari-400-800/AtariClassic-Regular.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.7
}
ListElement {
name: "COMMODORE_64"
text: "Commodore 64 (1982)"
source: "fonts/1982-commodore64/C64_Pro_Mono-STYLE.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.7
}
}
}

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

@ -0,0 +1,252 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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
property string family: fontlist.get(selectedFontIndex).family
property bool isSystemFont: fontlist.get(selectedFontIndex).isSystemFont
// 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.46.0.ttf"
lineSpacing: 1
pixelSize: 12
baseScaling: 3.0
fontWidth: 1.0
lowResolutionFont: true
isSystemFont: false
family: ""
}
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
isSystemFont: false
family: ""
}
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
isSystemFont: false
family: ""
}
ListElement {
name: "COMMODORE_PET_SCALED"
text: "Commodore PET (1977)"
source: "fonts/1977-commodore-pet/PetMe.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.7
lowResolutionFont: true
isSystemFont: false
family: ""
}
ListElement {
name: "PROGGY_TINY_SCALED"
text: "Proggy Tiny (Modern)"
source: "fonts/modern-proggy-tiny/ProggyTiny.ttf"
lineSpacing: 1
pixelSize: 16
baseScaling: 3.3
fontWidth: 0.9
lowResolutionFont: true
isSystemFont: false
family: ""
}
ListElement {
name: "APPLE_II_SCALED"
text: "Apple ][ (1977)"
source: "fonts/1977-apple2/PrintChar21.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.8
lowResolutionFont: true
isSystemFont: false
family: ""
}
ListElement {
name: "ATARI_400_SCALED"
text: "Atari 400-800 (1979)"
source: "fonts/1979-atari-400-800/AtariClassic-Regular.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.7
lowResolutionFont: true
isSystemFont: false
family: ""
}
ListElement {
name: "IBM_PC_SCALED"
text: "IBM PC (1981)"
source: "fonts/1981-ibm-pc/PxPlus_IBM_BIOS.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.8
lowResolutionFont: true
isSystemFont: false
family: ""
}
ListElement {
name: "COMMODORE_64_SCALED"
text: "Commodore 64 (1982)"
source: "fonts/1982-commodore64/C64_Pro_Mono-STYLE.ttf"
lineSpacing: 3
pixelSize: 8
baseScaling: 3.5
fontWidth: 0.7
lowResolutionFont: true
isSystemFont: false
family: ""
}
ListElement {
name: "IBM_DOS"
text: "IBM DOS (1985)"
source: "fonts/1985-ibm-pc-vga/PxPlus_IBM_VGA8.ttf"
lineSpacing: 3
pixelSize: 16
baseScaling: 2.0
fontWidth: 1.0
lowResolutionFont: true
isSystemFont: false
family: ""
}
ListElement {
name: "HERMIT"
text: "HD: Hermit (Modern)"
source: "fonts/modern-hermit/Hermit-medium.otf"
lineSpacing: 0.05
pixelSize: 27
fontWidth: 1.0
lowResolutionFont: false
isSystemFont: false
family: ""
}
ListElement {
name: "TERMINUS"
text: "HD: Terminus (Modern)"
source: "fonts/modern-terminus/TerminusTTF-4.46.0.ttf"
lineSpacing: 0.1
pixelSize: 35
fontWidth: 1.0
lowResolutionFont: false
isSystemFont: false
family: ""
}
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
isSystemFont: false
family: ""
}
ListElement {
name: "INCONSOLATA"
text: "HD: Inconsolata (Modern)"
source: "fonts/modern-inconsolata/Inconsolata.otf"
lineSpacing: 0.1
pixelSize: 35
fontWidth: 1.0
lowResolutionFont: false
isSystemFont: false
family: ""
}
ListElement {
name: "IBM_3278"
text: "HD: IBM 3278 (1971)"
source: "fonts/1971-ibm-3278/3270-Regular.ttf"
lineSpacing: 0.2
pixelSize: 32
fontWidth: 1.0
lowResolutionFont: false
isSystemFont: false
family: ""
}
}
Component.onCompleted: addSystemFonts()
function addSystemFonts() {
var families = monospaceSystemFonts
for (var i = 0; i < families.length; i++) {
if (verbose) {
console.log("Adding system font: ", families[i])
}
fontlist.append(convertToListElement(families[i]))
}
}
function convertToListElement(family) {
return {
"name": "System: " + family,
"text": qsTr("System: ") + family,
"source": "",
"lineSpacing": 0.1,
"pixelSize": 30,
"fontWidth": 1.0,
"baseScaling": 1.0,
"lowResolutionFont": false,
"isSystemFont": true,
"family": family
}
}
}

View File

@ -0,0 +1,93 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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.Window 2.0
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.1
Window {
id: insertnamedialog
width: 400
height: 100
modality: Qt.ApplicationModal
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
RowLayout {
Label {
text: qsTr("Name")
}
TextField {
id: namefield
Layout.fillWidth: true
Component.onCompleted: forceActiveFocus()
onAccepted: okbutton.clickAction()
}
}
RowLayout {
Layout.alignment: Qt.AlignBottom | Qt.AlignRight
Button {
id: okbutton
text: qsTr("OK")
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 {
text: qsTr("Cancel")
onClicked: close()
}
}
}
}

View File

@ -0,0 +1,286 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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 2.0
import QMLTermWidget 1.0
import "menus"
import "utils.js" as Utils
Item{
id: terminalContainer
property size virtualResolution: Qt.size(kterminal.totalWidth, kterminal.totalHeight)
property alias mainTerminal: kterminal
property ShaderEffectSource mainSource: kterminalSource
property BurnInEffect burnInEffect: burnInEffect
property real fontWidth: 1.0
property real screenScaling: 1.0
property real scaleTexture: 1.0
property alias title: ksession.title
property alias kterminal: kterminal
property 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()
}
}
Connections {
target: pasteActionAlt
onTriggered: {
kterminal.pasteSelection()
}
}
//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()
}
}
Connections {
target: terminalWindow
onActiveChanged: {
kterminal.forceActiveFocus()
}
}
function updateSources() {
kterminal.update()
}
QMLTermWidget {
id: kterminal
property int textureResolutionScale: appSettings.lowResolutionFont ? devicePixelRatio : 1
property int margin: appSettings.totalMargin / screenScaling
property int totalWidth: Math.floor(parent.width / (screenScaling * fontWidth))
property int totalHeight: Math.floor(parent.height / screenScaling)
property int rawWidth: totalWidth - 2 * margin
property int rawHeight: totalHeight - 2 * margin
textureSize: Qt.size(width / textureResolutionScale, height / textureResolutionScale)
width: ensureMultiple(rawWidth, devicePixelRatio)
height: ensureMultiple(rawHeight, devicePixelRatio)
/** Ensure size is a multiple of factor. This is needed for pixel perfect scaling on highdpi screens. */
function ensureMultiple(size, factor) {
return Math.round(size / factor) * factor;
}
colorScheme: "cool-retro-term"
smooth: !appSettings.lowResolutionFont
enableBold: false
fullCursorHeight: true
blinkingCursor: appSettings.blinkingCursor
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
}
}
function handleFontChanged(fontFamily, pixelSize, lineSpacing, screenScaling, fontWidth) {
kterminal.antialiasText = !appSettings.lowResolutionFont;
font.pixelSize = pixelSize;
font.family = fontFamily;
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 && appSettings.isMacOS) {
// 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(handleFontChanged);
appSettings.initializedSettings.connect(startSession);
appSettings.handleFontChanged()
}
}
Component {
id: shortContextMenu
ShortContextMenu { }
}
Component {
id: fullContextMenu
FullContextMenu { }
}
Loader {
id: menuLoader
sourceComponent: (appSettings.isMacOS || appSettings.showMenubar ? shortContextMenu : fullContextMenu)
}
property alias contextmenu: menuLoader.item
MouseArea {
property real margin: appSettings.totalMargin
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 - margin) / width;
y = (y - margin) / height;
var cc = Qt.size(0.5 - x, 0.5 - y);
var distortion = (cc.height * cc.height + cc.width * cc.width) * appSettings.screenCurvature * appSettings.screenCurvatureSize;
return Qt.point((x - cc.width * (1+distortion) * distortion) * (kterminal.totalWidth),
(y - cc.height * (1+distortion) * distortion) * (kterminal.totalHeight))
}
}
ShaderEffectSource{
id: kterminalSource
sourceItem: kterminal
hideSource: true
wrapMode: ShaderEffectSource.Repeat
visible: false
textureSize: Qt.size(kterminal.totalWidth * scaleTexture, kterminal.totalHeight * scaleTexture)
sourceRect: Qt.rect(-kterminal.margin, -kterminal.margin, kterminal.totalWidth, kterminal.totalHeight)
}
Item {
id: burnInContainer
property int burnInScaling: scaleTexture * appSettings.burnInQuality
width: Math.round(appSettings.lowResolutionFont
? kterminal.totalWidth * Math.max(1, burnInScaling)
: kterminal.totalWidth * scaleTexture * appSettings.burnInQuality)
height: Math.round(appSettings.lowResolutionFont
? kterminal.totalHeight * Math.max(1, burnInScaling)
: kterminal.totalHeight * scaleTexture * appSettings.burnInQuality)
BurnInEffect {
id: burnInEffect
}
}
}

View File

@ -0,0 +1,159 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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 2.0
import QtQuick.Layouts 1.1
import QtQml 2.0
import "Components"
ColumnLayout {
GroupBox {
Layout.fillWidth: true
title: qsTr("Command")
ColumnLayout {
anchors.fill: parent
CheckBox {
id: useCustomCommand
text: qsTr("Use custom command instead of shell at startup")
checked: appSettings.useCustomCommand
onCheckedChanged: appSettings.useCustomCommand = checked
}
// Workaround for QTBUG-31627 for pre 5.3.0
Binding {
target: useCustomCommand
property: "checked"
value: appSettings.useCustomCommand
}
TextField {
id: customCommand
Layout.fillWidth: true
text: appSettings.customCommand
enabled: useCustomCommand.checked
onEditingFinished: appSettings.customCommand = text
// Save text even if user forgets to press enter or unfocus
function saveSetting() {
appSettings.customCommand = text
}
Component.onCompleted: settings_window.closing.connect(
saveSetting)
}
}
}
GroupBox {
title: qsTr("Performance")
Layout.fillWidth: true
GridLayout {
anchors.fill: parent
columns: 4
Label {
text: qsTr("Effects FPS")
}
Slider {
Layout.fillWidth: true
Layout.columnSpan: 2
id: fpsSlider
onValueChanged: {
if (enabled) {
appSettings.fps = value !== 60 ? value + 1 : 0
}
}
stepSize: 1
enabled: false
Component.onCompleted: {
from = 0
to = 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 {
id: txtslider
Layout.fillWidth: true
Layout.columnSpan: 2
onValueChanged: if (enabled)
appSettings.windowScaling = value
stepSize: 0.05
enabled: false
Component.onCompleted: {
from = 0.25 //Without this value gets set to 0.5
value = appSettings.windowScaling
enabled = true
}
}
SizedLabel {
text: Math.round(txtslider.value * 100) + "%"
}
Label {
text: qsTr("Bloom Quality")
}
Slider {
Layout.fillWidth: true
Layout.columnSpan: 2
id: bloomSlider
onValueChanged: if (enabled)
appSettings.bloomQuality = value
stepSize: 0.05
enabled: false
Component.onCompleted: {
from = 0.25
value = appSettings.bloomQuality
enabled = true
}
}
SizedLabel {
text: Math.round(bloomSlider.value * 100) + "%"
}
Label {
text: qsTr("BurnIn Quality")
}
Slider {
Layout.fillWidth: true
id: burnInSlider
Layout.columnSpan: 2
onValueChanged: if (enabled)
appSettings.burnInQuality = value
stepSize: 0.05
enabled: false
Component.onCompleted: {
from = 0.25
value = appSettings.burnInQuality
enabled = true
}
}
SizedLabel {
text: Math.round(burnInSlider.value * 100) + "%"
}
}
}
}

View File

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

View File

@ -0,0 +1,268 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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 2.4
import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.1
ColumnLayout {
GroupBox {
Layout.fillWidth: true
title: qsTr("Profile")
RowLayout {
anchors.fill: parent
ListView {
id: profilesView
Layout.fillWidth: true
Layout.fillHeight: true
model: appSettings.profilesList
clip: true
delegate: Rectangle {
width: label.width
height: label.height
color: (index == profilesView.currentIndex) ? palette.highlight : palette.base
Label {
id: label
text: appSettings.profilesList.get(index).text
MouseArea {
anchors.fill: parent
onClicked: profilesView.currentIndex = index
onDoubleClicked: appSettings.loadProfile(index)
}
}
}
}
ColumnLayout {
Layout.fillHeight: true
Layout.fillWidth: false
Button {
Layout.fillWidth: true
text: qsTr("Save")
onClicked: {
insertname.profileName = ""
insertname.show()
}
}
Button {
Layout.fillWidth: true
property alias currentIndex: profilesView.currentIndex
enabled: currentIndex >= 0
text: qsTr("Load")
onClicked: {
var index = currentIndex
if (index >= 0)
appSettings.loadProfile(index)
}
}
Button {
Layout.fillWidth: true
text: qsTr("Remove")
property alias currentIndex: profilesView.currentIndex
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"
var version = profileObject.version
!== undefined ? profileObject.version : 1
if (version !== appSettings.profileVersion)
throw "This profile is not supported on this version of CRT."
delete profileObject.name
appSettings.appendCustomProfile(name,
JSON.stringify(
profileObject))
} catch (err) {
messageDialog.text = qsTr(err)
messageDialog.open()
}
}
}
Button {
property alias currentIndex: profilesView.currentIndex
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
profileSettings["version"] = appSettings.profileVersion
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 {
title: qsTr("Screen")
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("Margin")
}
SimpleSlider {
onValueChanged: appSettings._margin = value
value: appSettings._margin
}
Label {
text: qsTr("Frame size")
}
SimpleSlider {
onValueChanged: appSettings._frameMargin = value
value: appSettings._frameMargin
}
Label {
text: qsTr("Opacity")
visible: !appSettings.isMacOS
}
SimpleSlider {
onValueChanged: appSettings.windowOpacity = value
value: appSettings.windowOpacity
visible: !appSettings.isMacOS
}
}
}
// 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,184 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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 2.1
import QtQuick.Layouts 1.1
import QtQml 2.0
import "Components"
ColumnLayout {
GroupBox {
title: qsTr("Font")
Layout.fillWidth: true
GridLayout {
anchors.fill: parent
columns: 2
Label {
text: qsTr("Rasterization")
}
ComboBox {
id: rasterizationBox
property string selectedElement: model[currentIndex]
Layout.fillWidth: true
model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels"), qsTr("Sub-Pixels")]
currentIndex: appSettings.rasterization
onCurrentIndexChanged: {
appSettings.rasterization = currentIndex
}
}
Label {
text: qsTr("Name")
}
ComboBox {
id: fontChanger
Layout.fillWidth: true
model: appSettings.fontlist
textRole: "text"
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: appSettings.fontScaling = value
value: appSettings.fontScaling
stepSize: 0.05
from: appSettings.minimumFontScaling
to: appSettings.maximumFontScaling
}
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
from: 0.5
to: 1.5
}
SizedLabel {
text: Math.round(widthChanger.value * 100) + "%"
}
}
}
}
GroupBox {
title: qsTr("Cursor")
Layout.fillWidth: true
ColumnLayout {
anchors.fill: parent
CheckBox {
id: blinkingCursor
text: qsTr("Blinking Cursor")
checked: appSettings.blinkingCursor
onCheckedChanged: appSettings.blinkingCursor = checked
}
Binding {
target: blinkingCursor
property: "checked"
value: appSettings.blinkingCursor
}
}
}
GroupBox {
title: qsTr("Colors")
Layout.fillWidth: true
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
}
CheckableSlider {
name: qsTr("Frame Gloss")
onNewValue: appSettings.frameGloss = newValue
value: appSettings.frameGloss
}
}
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
}
ColorButton {
name: qsTr("Frame")
height: 50
Layout.fillWidth: true
onColorSelected: appSettings._frameColor = color
color: appSettings._frameColor
}
}
}
}
}

View File

@ -0,0 +1,75 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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 2.1
import QtQuick.Window 2.1
import QtQuick.Layouts 1.3
import QtQuick.Dialogs 1.1
Window {
id: settings_window
title: qsTr("Settings")
width: 640
height: 640
property int tabmargins: 15
Item {
anchors { fill: parent; margins: tabmargins }
TabBar {
id: bar
anchors { left: parent.left; right: parent.right; top: parent.top; }
TabButton {
text: qsTr("General")
}
TabButton {
text: qsTr("Terminal")
}
TabButton {
text: qsTr("Effects")
}
TabButton {
text: qsTr("Advanced")
}
}
Frame {
anchors {
top: bar.bottom
left: parent.left
right: parent.right
bottom: parent.bottom
}
StackLayout {
anchors.fill: parent
currentIndex: bar.currentIndex
SettingsGeneralTab { }
SettingsTerminalTab { }
SettingsEffectsTab { }
SettingsAdvancedTab { }
}
}
}
}

91
app/qml/ShaderLibrary.qml Normal file
View File

@ -0,0 +1,91 @@
import QtQuick 2.0
QtObject {
property string rasterizationShader:
(appSettings.rasterization === appSettings.no_rasterization ? "
lowp vec3 applyRasterization(vec2 screenCoords, lowp vec3 texel, vec2 virtualResolution, float intensity) {
return texel;
}" : "") +
(appSettings.rasterization === appSettings.scanline_rasterization ? "
#define INTENSITY 0.30
#define BRIGHTBOOST 0.30
lowp vec3 applyRasterization(vec2 screenCoords, lowp vec3 texel, vec2 virtualResolution, float intensity) {
lowp vec3 pixelHigh = ((1.0 + BRIGHTBOOST) - (0.2 * texel)) * texel;
lowp vec3 pixelLow = ((1.0 - INTENSITY) + (0.1 * texel)) * texel;
vec2 coords = fract(screenCoords * virtualResolution) * 2.0 - vec2(1.0);
lowp float mask = 1.0 - abs(coords.y);
lowp vec3 rasterizationColor = mix(pixelLow, pixelHigh, mask);
return mix(texel, rasterizationColor, intensity);
}" : "") +
(appSettings.rasterization === appSettings.pixel_rasterization ? "
#define INTENSITY 0.30
#define BRIGHTBOOST 0.30
lowp vec3 applyRasterization(vec2 screenCoords, lowp vec3 texel, vec2 virtualResolution, float intensity) {
lowp vec3 result = texel;
lowp vec3 pixelHigh = ((1.0 + BRIGHTBOOST) - (0.2 * texel)) * texel;
lowp vec3 pixelLow = ((1.0 - INTENSITY) + (0.1 * texel)) * texel;
vec2 coords = fract(screenCoords * virtualResolution) * 2.0 - vec2(1.0);
coords = coords * coords;
lowp float mask = 1.0 - coords.x - coords.y;
lowp vec3 rasterizationColor = mix(pixelLow, pixelHigh, mask);
return mix(texel, rasterizationColor, intensity);
}" : "") +
(appSettings.rasterization === appSettings.subpixel_rasterization ? "
#define INTENSITY 0.30
#define BRIGHTBOOST 0.30
#define SUBPIXELS 3.0
const vec3 offsets = vec3(3.141592654) * vec3(1.0/2.0,1.0/2.0 - 2.0/3.0,1.0/2.0-4.0/3.0);
lowp vec3 applyRasterization(vec2 screenCoords, lowp vec3 texel, vec2 virtualResolution, float intensity) {
vec2 omega = vec2(3.141592654) * vec2(2.0) * virtualResolution;
vec2 angle = screenCoords * omega;
vec3 xfactors = (SUBPIXELS + sin(angle.x + offsets)) / (SUBPIXELS + 1.0);
lowp vec3 result = texel * xfactors;
lowp vec3 pixelHigh = ((1.0 + BRIGHTBOOST) - (0.2 * result)) * result;
lowp vec3 pixelLow = ((1.0 - INTENSITY) + (0.1 * result)) * result;
vec2 coords = fract(screenCoords * virtualResolution) * 2.0 - vec2(1.0);
lowp float mask = 1.0 - abs(coords.y);
lowp vec3 rasterizationColor = mix(pixelLow, pixelHigh, mask);
return mix(texel, rasterizationColor, intensity);
}" : "") +
"\n\n"
property string min2: "
float min2(vec2 v) {
return min(v.x, v.y);
}\n\n"
property string rgb2grey: "
float rgb2grey(vec3 v) {
return dot(v, vec3(0.21, 0.72, 0.04));
}\n\n"
property string max2: "
float max2(vec2 v) {
return max(v.x, v.y);
}\n\n"
property string prod2: "
float prod2(vec2 v) {
return v.x * v.y;
}\n\n"
property string sum2: "
float sum2(vec2 v) {
return v.x + v.y;
}\n\n"
}

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

@ -0,0 +1,532 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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
Item {
property ShaderEffectSource source
property BurnInEffect burnInEffect
property ShaderEffectSource bloomSource
property color fontColor: appSettings.fontColor
property color backgroundColor: appSettings.backgroundColor
property real screenCurvature: appSettings.screenCurvature * appSettings.screenCurvatureSize
property real chromaColor: appSettings.chromaColor
property real ambientLight: appSettings.ambientLight * 0.2
property real frameGloss: appSettings.frameGloss
property size virtualResolution
property size screenResolution
property real _screenDensity: Math.min(
screenResolution.width / virtualResolution.width,
screenResolution.height / virtualResolution.height
)
ShaderEffect {
id: dynamicShader
property ShaderLibrary shaderLibrary: ShaderLibrary { }
property ShaderEffectSource screenBuffer: frameBuffer
property ShaderEffectSource burnInSource: burnInEffect.source
property ShaderEffectSource frameSource: terminalFrameLoader.item
property color fontColor: parent.fontColor
property color backgroundColor: parent.backgroundColor
property real screenCurvature: parent.screenCurvature
property real chromaColor: parent.chromaColor
property real ambientLight: parent.ambientLight
property real frameGloss: parent.frameGloss
property real flickering: appSettings.flickering
property real horizontalSync: appSettings.horizontalSync
property real horizontalSyncStrength: Utils.lint(0.05, 0.35, horizontalSync)
property real glowingLine: appSettings.glowingLine * 0.2
// Fast burnin properties
property real burnIn: appSettings.burnIn
property real burnInLastUpdate: burnInEffect.lastUpdate
property real burnInTime: burnInEffect.burnInFadeTime
property real jitter: appSettings.jitter
property size jitterDisplacement: Qt.size(0.007 * jitter, 0.002 * jitter)
property real shadowLength: 0.25 * screenCurvature * Utils.lint(0.50, 1.5, ambientLight)
property real staticNoise: appSettings.staticNoise
property size scaleNoiseSize: Qt.size((width * 0.75) / (noiseTexture.width * appSettings.windowScaling * appSettings.totalFontScaling),
(height * 0.75) / (noiseTexture.height * appSettings.windowScaling * appSettings.totalFontScaling))
property size virtualResolution: parent.virtualResolution
// Rasterization might display oversamping issues if virtual resolution is close to physical display resolution.
// We progressively disable rasterization from 4x up to 2x resolution.
property real rasterizationIntensity: Utils.smoothstep(2.0, 4.0, _screenDensity)
property real displayTerminalFrame: appSettings._frameMargin > 0 || appSettings.screenCurvature > 0
property real time: timeManager.time
property ShaderEffectSource noiseSource: noiseShaderSource
// If something goes wrong activate the fallback version of the shader.
property bool fallBack: false
anchors.fill: parent
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;
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 horizontalSyncStrength;
varying lowp float distortionScale;
varying lowp float distortionFreq;" : "") +
"
void main() {
qt_TexCoord0 = qt_MultiTexCoord0;
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 = horizontalSyncStrength - initialNoiseTexel.r;
distortionScale = step(0.0, randval) * randval * horizontalSyncStrength;
distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
: "") +
"gl_Position = qt_Matrix * qt_Vertex;
}"
fragmentShader: "
#ifdef GL_ES
precision mediump float;
#endif
uniform sampler2D screenBuffer;
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 shadowLength;
uniform lowp float frameGloss;
uniform highp vec2 virtualResolution;
uniform lowp float rasterizationIntensity;\n" +
(burnIn !== 0 ? "
uniform sampler2D burnInSource;
uniform highp float burnInLastUpdate;
uniform highp float burnInTime;" : "") +
(staticNoise !== 0 ? "
uniform highp float staticNoise;" : "") +
(((staticNoise !== 0 || jitter !== 0) ||(fallBack && (flickering || horizontalSync))) ? "
uniform lowp sampler2D noiseSource;
uniform highp vec2 scaleNoiseSize;" : "") +
(displayTerminalFrame ? "
uniform lowp sampler2D frameSource;" : "") +
(screenCurvature !== 0 ? "
uniform highp float screenCurvature;" : "") +
(glowingLine !== 0 ? "
uniform highp float glowingLine;" : "") +
(chromaColor !== 0 ? "
uniform lowp float chromaColor;" : "") +
(jitter !== 0 ? "
uniform lowp vec2 jitterDisplacement;" : "") +
(ambientLight !== 0 ? "
uniform lowp float ambientLight;" : "") +
(fallBack && horizontalSync !== 0 ? "
uniform lowp float horizontalSyncStrength;" : "") +
(fallBack && flickering !== 0.0 ?"
uniform lowp float flickering;" : "") +
(!fallBack && flickering !== 0 ? "
varying lowp float brightness;"
: "") +
(!fallBack && horizontalSync !== 0 ? "
varying lowp float distortionScale;
varying lowp float distortionFreq;" : "") +
(glowingLine !== 0 ? "
float randomPass(vec2 coords){
return fract(smoothstep(-120.0, 0.0, coords.y - (virtualResolution.y + 120.0) * fract(time * 0.00015)));
}" : "") +
shaderLibrary.min2 +
shaderLibrary.rgb2grey +
shaderLibrary.rasterizationShader +
"
float isInScreen(vec2 v) {
return min2(step(0.0, v) - step(1.0, v));
}
vec2 barrel(vec2 v, vec2 cc) {" +
(screenCurvature !== 0 ? "
float distortion = dot(cc, cc) * screenCurvature;
return (v - cc * (1.0 + distortion) * distortion);"
:
"return v;") +
"}" +
"vec3 convertWithChroma(vec3 inColor) {
vec3 outColor = inColor;" +
(chromaColor !== 0 ?
"outColor = fontColor.rgb * mix(vec3(rgb2grey(inColor)), inColor, chromaColor);"
:
"outColor = fontColor.rgb * rgb2grey(inColor);") +
" return outColor;
}" +
//pseudo-random vector
//https://stackoverflow.com/a/10625698
"float random( vec2 p )
{
vec2 K1 = vec2(
23.14069263277926, // e^pi (Gelfond's constant)
2.665144142690225 // 2^sqrt(2) (Gelfond-Schneider constant)
);
return fract( cos( dot(p,K1) ) * 12345.6789 );
}" +
"void main() {" +
"vec2 cc = vec2(0.5) - qt_TexCoord0;" +
"float distance = length(cc);" +
//FallBack if there are problems
(fallBack && (flickering !== 0.0 || horizontalSync !== 0.0) ?
"vec2 initialCoords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));
vec4 initialNoiseTexel = texture2D(noiseSource, initialCoords);"
: "") +
(fallBack && flickering !== 0.0 ? "
float brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;"
: "") +
(fallBack && horizontalSync !== 0.0 ? "
float randval = horizontalSyncStrength - initialNoiseTexel.r;
float distortionScale = step(0.0, randval) * randval * horizontalSyncStrength;
float distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
: "") +
(staticNoise ? "
float noise = staticNoise;" : "") +
(screenCurvature !== 0 ? "
vec2 staticCoords = barrel(qt_TexCoord0, cc);"
:"
vec2 staticCoords = qt_TexCoord0;") +
"vec2 coords = qt_TexCoord0;" +
(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(0.0, random(vec2(fract(time / 237.0), 822.9582)))
+ vec2(fract(time / 31.0), fract(time / 177.0))
);"
: "") +
(jitter !== 0 ? "
vec2 offset = vec2(noiseTexel.b, noiseTexel.a) - vec2(0.5);
vec2 txt_coords = coords + offset * jitterDisplacement;"
: "vec2 txt_coords = coords;") +
"float color = 0.0001;" +
(staticNoise !== 0 ? "
float noiseVal = noiseTexel.a;
color += noiseVal * noise * (1.0 - distance * 1.3);" : "") +
(glowingLine !== 0 ? "
color += randomPass(coords * virtualResolution) * glowingLine;" : "") +
"vec3 txt_color = texture2D(screenBuffer, txt_coords).rgb;" +
(burnIn !== 0 ? "
vec4 txt_blur = texture2D(burnInSource, staticCoords);
float blurDecay = clamp((time - burnInLastUpdate) * burnInTime, 0.0, 1.0);
vec3 burnInColor = 0.65 * (txt_blur.rgb - vec3(blurDecay));
txt_color = max(txt_color, convertWithChroma(burnInColor));"
: "") +
"txt_color += fontColor.rgb * vec3(color);" +
"txt_color = applyRasterization(staticCoords, txt_color, virtualResolution, rasterizationIntensity);\n" +
"vec3 finalColor = txt_color;" +
(flickering !== 0 ? "
finalColor *= brightness;" : "") +
(ambientLight !== 0 ? "
finalColor += vec3(ambientLight) * (1.0 - distance) * (1.0 - distance);" : "") +
(displayTerminalFrame ?
"vec4 frameColor = texture2D(frameSource, qt_TexCoord0);
finalColor = mix(finalColor, frameColor.rgb + (finalColor*frameGloss), frameColor.a);"
: "") +
"gl_FragColor = vec4(finalColor, qt_Opacity);" +
"}"
onStatusChanged: {
// Print warning messages
if (log)
console.log(log);
// Activate fallback mode
if (status == ShaderEffect.Error) {
fallBack = true;
}
}
}
Loader {
id: terminalFrameLoader
active: dynamicShader.displayTerminalFrame
width: staticShader.width
height: staticShader.height
sourceComponent: ShaderEffectSource {
sourceItem: terminalFrame
hideSource: true
visible: false
format: ShaderEffectSource.RGBA
TerminalFrame {
id: terminalFrame
blending: false
anchors.fill: parent
}
}
}
ShaderLibrary {
id: shaderLibrary
}
ShaderEffect {
id: staticShader
width: parent.width * appSettings.windowScaling
height: parent.height * appSettings.windowScaling
property ShaderEffectSource source: parent.source
property ShaderEffectSource bloomSource: parent.bloomSource
property color fontColor: parent.fontColor
property color backgroundColor: parent.backgroundColor
property real bloom: appSettings.bloom * 2.5
property real screenCurvature: parent.screenCurvature
property real chromaColor: appSettings.chromaColor;
property real rbgShift: (appSettings.rbgShift / width) * appSettings.totalFontScaling // TODO FILIPPO width here is wrong.
property int rasterization: appSettings.rasterization
property real screen_brightness: Utils.lint(0.5, 1.5, appSettings.brightness)
property real ambientLight: parent.ambientLight
property size virtualResolution: parent.virtualResolution
blending: false
visible: false
//Print the number with a reasonable precision for the shader.
function str(num){
return num.toFixed(8);
}
fragmentShader: "
#ifdef GL_ES
precision mediump float;
#endif
uniform sampler2D source;
uniform highp float qt_Opacity;
varying highp vec2 qt_TexCoord0;
uniform highp vec4 fontColor;
uniform highp vec4 backgroundColor;
uniform lowp float screen_brightness;
uniform highp vec2 virtualResolution;" +
(bloom !== 0 ? "
uniform highp sampler2D bloomSource;
uniform lowp float bloom;" : "") +
(screenCurvature !== 0 ? "
uniform highp float screenCurvature;" : "") +
(chromaColor !== 0 ? "
uniform lowp float chromaColor;" : "") +
(rbgShift !== 0 ? "
uniform lowp float rbgShift;" : "") +
(ambientLight !== 0 ? "
uniform lowp float ambientLight;" : "") +
shaderLibrary.min2 +
shaderLibrary.sum2 +
shaderLibrary.rgb2grey +
"vec3 convertWithChroma(vec3 inColor) {
vec3 outColor = inColor;" +
(chromaColor !== 0 ?
"outColor = fontColor.rgb * mix(vec3(rgb2grey(inColor)), inColor, chromaColor);"
:
"outColor = fontColor.rgb * rgb2grey(inColor);") +
" return outColor;
}" +
shaderLibrary.rasterizationShader +
"void main() {" +
"vec2 cc = vec2(0.5) - qt_TexCoord0;" +
(screenCurvature !== 0 ? "
float distortion = dot(cc, cc) * screenCurvature;
vec2 curvatureCoords = (qt_TexCoord0 - cc * (1.0 + distortion) * distortion);
vec2 txt_coords = - 2.0 * curvatureCoords + 3.0 * step(vec2(0.0), curvatureCoords) * curvatureCoords - 3.0 * step(vec2(1.0), curvatureCoords) * curvatureCoords;"
:"
vec2 txt_coords = qt_TexCoord0;") +
"vec3 txt_color = texture2D(source, txt_coords).rgb;" +
(rbgShift !== 0 ? "
vec2 displacement = vec2(12.0, 0.0) * rbgShift;
vec3 rightColor = texture2D(source, txt_coords + displacement).rgb;
vec3 leftColor = texture2D(source, txt_coords - displacement).rgb;
txt_color.r = leftColor.r * 0.10 + rightColor.r * 0.30 + txt_color.r * 0.60;
txt_color.g = leftColor.g * 0.20 + rightColor.g * 0.20 + txt_color.g * 0.60;
txt_color.b = leftColor.b * 0.30 + rightColor.b * 0.10 + txt_color.b * 0.60;
" : "") +
"txt_color += vec3(0.0001);" +
"float greyscale_color = rgb2grey(txt_color);" +
(screenCurvature !== 0 ? "
float reflectionMask = sum2(step(vec2(0.0), curvatureCoords) - step(vec2(1.0), curvatureCoords));
reflectionMask = clamp(reflectionMask, 0.0, 1.0);"
:
"float reflectionMask = 1.0;") +
(chromaColor !== 0 ?
"vec3 foregroundColor = mix(fontColor.rgb, txt_color * fontColor.rgb / greyscale_color, chromaColor);
vec3 finalColor = mix(backgroundColor.rgb, foregroundColor, greyscale_color * reflectionMask);"
:
"vec3 finalColor = mix(backgroundColor.rgb, fontColor.rgb, greyscale_color * reflectionMask);") +
(bloom !== 0 ?
"vec4 bloomFullColor = texture2D(bloomSource, txt_coords);
vec3 bloomColor = bloomFullColor.rgb;
float bloomAlpha = bloomFullColor.a;
bloomColor = convertWithChroma(bloomColor);
finalColor += clamp(bloomColor * bloom * bloomAlpha, 0.0, 0.5);"
: "") +
"finalColor *= screen_brightness;" +
"gl_FragColor = vec4(finalColor, qt_Opacity);" +
"}"
onStatusChanged: {
// Print warning messages
if (log) console.log(log);
}
}
ShaderEffectSource {
id: frameBuffer
visible: false
sourceItem: staticShader
hideSource: true
}
}

View File

@ -1,10 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* 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.
@ -17,34 +17,27 @@
* 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.Controls 2.0
import QtQuick.Layouts 1.1
import "Components"
RowLayout {
property alias value: slider.value
property alias stepSize: slider.stepSize
property alias minimumValue: slider.minimumValue
property alias maximumValue: slider.maximumValue
property alias minimumValue: slider.from
property alias maximumValue: slider.to
property real maxMultiplier: 100
id: setting_component
spacing: 10
Slider{
Slider {
id: slider
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
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* 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.
@ -17,12 +17,12 @@
* 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
Rectangle{
Rectangle {
property size terminalSize
property real topOpacity: 0.6
width: textSize.width * 2
height: textSize.height * 2
radius: 5
@ -31,17 +31,21 @@ Rectangle{
color: "black"
opacity: sizetimer.running ? 0.6 : 0.0
Behavior on opacity{NumberAnimation{duration: 200}}
Behavior on opacity {
NumberAnimation {
duration: 200
}
}
onTerminalSizeChanged: sizetimer.restart()
Text{
Text {
id: textSize
anchors.centerIn: parent
color: "white"
text: terminalSize.width + "x" + terminalSize.height
}
Timer{
Timer {
id: sizetimer
interval: 1000
running: false

View File

@ -1,10 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* 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,13 @@
import QtQuick 2.2
import QtQuick.LocalStorage 2.0
Item {
QtObject {
readonly property string dbMajorVersion: "1"
readonly property string dbMinorVersion: "1.0"
property bool initialized: false
function getDatabase() {
return LocalStorage.openDatabaseSync("coololdterm", "1.0", "StorageDatabase", 100000);
return LocalStorage.openDatabaseSync("coolretroterm" + dbMajorVersion, dbMinorVersion, "StorageDatabase", 100000)
}
function initialize() {
@ -33,43 +35,47 @@ Item {
db.transaction(
function(tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS settings(setting TEXT UNIQUE, value TEXT)');
});
}
)
initialized = true;
initialized = true
}
function setSetting(setting, value) {
if(!initialized) initialize();
if(!initialized) initialize();
var db = getDatabase();
var res = "";
db.transaction(function(tx) {
var rs = tx.executeSql('INSERT OR REPLACE INTO settings VALUES (?,?);', [setting,value]);
//console.log(rs.rowsAffected)
if (rs.rowsAffected > 0) {
var db = getDatabase();
var res = "";
db.transaction(
function(tx) {
var rs = tx.executeSql('INSERT OR REPLACE INTO settings VALUES (?,?);', [setting,value]);
//console.log(rs.rowsAffected)
if (rs.rowsAffected > 0) {
res = "OK";
} else {
} else {
res = "Error";
}
}
);
}
}
)
// The function returns OK if it was successful, or Error if it wasn't
return res;
return res
}
function getSetting(setting) {
if(!initialized) initialize();
var db = getDatabase();
var res="";
db.transaction(function(tx) {
var rs = tx.executeSql('SELECT value FROM settings WHERE setting=?;', [setting]);
if (rs.rows.length > 0) {
res = rs.rows.item(0).value;
} else {
res = undefined;
}
})
return res
if(!initialized) initialize();
var db = getDatabase();
var res = "";
db.transaction(
function(tx) {
var rs = tx.executeSql('SELECT value FROM settings WHERE setting=?;', [setting]);
if (rs.rows.length > 0) {
res = rs.rows.item(0).value;
} else {
res = undefined;
}
}
)
return res
}
function dropSettings(){
@ -77,6 +83,7 @@ Item {
db.transaction(
function(tx) {
tx.executeSql('DROP TABLE settings');
});
}
)
}
}

View File

@ -0,0 +1,80 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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
ShaderTerminal {
property alias title: terminal.title
property alias terminalSize: terminal.terminalSize
property real devicePixelRatio: terminalWindow.screen.devicePixelRatio
id: mainShader
opacity: appSettings.windowOpacity * 0.3 + 0.7
source: terminal.mainSource
burnInEffect: terminal.burnInEffect
virtualResolution: terminal.virtualResolution
screenResolution: Qt.size(
terminalWindow.width * devicePixelRatio * appSettings.windowScaling,
terminalWindow.height * devicePixelRatio * appSettings.windowScaling
)
TimeManager {
id: timeManager
enableTimer: terminalWindow.visible
}
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, 64, appSettings.bloomQuality)
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
}

104
app/qml/TerminalFrame.qml Normal file
View File

@ -0,0 +1,104 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "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 "utils.js" as Utils
ShaderEffect {
property color _frameColor: appSettings.frameColor
property color _backgroundColor: appSettings.backgroundColor
property color _fontColor: appSettings.fontColor
property color _lightColor: Utils.mix(_fontColor, _backgroundColor, 0.2)
property real _ambientLight: Utils.lint(0.2, 0.8, appSettings.ambientLight)
property color frameColor: Utils.mix(_frameColor, _lightColor, _ambientLight)
property real screenCurvature: appSettings.screenCurvature * appSettings.screenCurvatureSize
// Coefficient of the log curve used to approximate shadowing
property real screenShadowCoeff: Utils.lint(20.0, 10.0, _ambientLight)
property real frameShadowCoeff: Utils.lint(20.0, 10.0, _ambientLight)
property size margin: Qt.size(
appSettings.frameMargin / width * appSettings.windowScaling,
appSettings.frameMargin / height * appSettings.windowScaling
)
ShaderLibrary {
id: shaderLibrary
}
fragmentShader: "
#ifdef GL_ES
precision mediump float;
#endif
uniform lowp float screenCurvature;
uniform lowp float screenShadowCoeff;
uniform lowp float frameShadowCoeff;
uniform highp float qt_Opacity;
uniform lowp vec4 frameColor;
uniform mediump vec2 margin;
varying highp vec2 qt_TexCoord0;
vec2 distortCoordinates(vec2 coords){
vec2 cc = (coords - vec2(0.5));
float dist = dot(cc, cc) * screenCurvature;
return (coords + cc * (1.0 + dist) * dist);
}
" +
shaderLibrary.max2 +
shaderLibrary.min2 +
shaderLibrary.prod2 +
shaderLibrary.sum2 +
"
vec2 positiveLog(vec2 x) {
return clamp(log(x), vec2(0.0), vec2(100.0));
}
void main() {
vec2 staticCoords = qt_TexCoord0;
vec2 coords = distortCoordinates(staticCoords) * (vec2(1.0) + margin * 2.0) - margin;
vec2 vignetteCoords = staticCoords * (1.0 - staticCoords.yx);
float vignette = pow(prod2(vignetteCoords) * 15.0, 0.25);
vec3 color = frameColor.rgb * vec3(1.0 - vignette);
float alpha = 0.0;
float frameShadow = max2(positiveLog(-coords * frameShadowCoeff + vec2(1.0)) + positiveLog(coords * frameShadowCoeff - (vec2(frameShadowCoeff) - vec2(1.0))));
frameShadow = clamp(sqrt(frameShadow), 0.0, 1.0);
color *= frameShadow;
alpha = sum2(1.0 - step(vec2(0.0), coords) + step(vec2(1.0), coords));
alpha = clamp(alpha, 0.0, 1.0);
alpha *= mix(1.0, 0.9, frameShadow);
float screenShadow = 1.0 - prod2(positiveLog(coords * screenShadowCoeff + vec2(1.0)) * positiveLog(-coords * screenShadowCoeff + vec2(screenShadowCoeff + 1.0)));
alpha = max(0.8 * screenShadow, alpha);
gl_FragColor = vec4(color * alpha, alpha);
}
"
onStatusChanged: if (log) console.log(log) //Print warning messages
}

View File

@ -1,10 +1,10 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* https://github.com/Swordifish90/cool-old-term
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* 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.
@ -17,23 +17,22 @@
* 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
Timer{
Timer {
default property bool enableTimer: false
property real time
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,121 @@
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_4cfe95c.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 most non-latin alphabets which most likely were
never built into 3270 terminals), the best workflow would probably be to
add the encoding slots (if needed), add/make the changes, remove the
unchanged glyphs and save it as a different file. If, in doubt, get in
touch and we will figure out how to do it right.
In order to generate the sample image and the grids for FontForge,
you'll need a Python 3 environment with PIL or pillow installed. The
requirements.txt file lists everything you need to do it.
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.
Future improvements
-------------------
A grid generator is provided for producing various grid sizes for the
font. Those grids are not used yet, but they are intended to be used to
align font features to provide better rendering at common font size
choices. The captures below exemplify these choices:
![x3270 with 32 pixel font (used as bitmap template for the font)](
https://raw.githubusercontent.com/wiki/rbanffy/3270font/measurements_x3270_32.png)
![x3270 with 20 pixel font](
https://raw.githubusercontent.com/wiki/rbanffy/3270font/measurements_x3270_20.png)
![Gnome Terminal on Ubuntu 17.10](
https://raw.githubusercontent.com/wiki/rbanffy/3270font/measurements_gnome_terminal.png)

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