├── .gitignore ├── .gitmodules ├── README.md ├── app ├── app.pro ├── fileio.cpp ├── fileio.h ├── icons │ ├── 128x128 │ │ └── cool-retro-term.png │ ├── 256x256 │ │ └── cool-retro-term.png │ ├── 32x32 │ │ └── cool-retro-term.png │ ├── 64x64 │ │ └── cool-retro-term.png │ └── crt.icns ├── main.cpp └── qml │ ├── AboutDialog.qml │ ├── ApplicationSettings.qml │ ├── CRTMainMenuBar.qml │ ├── CheckableSlider.qml │ ├── ColorButton.qml │ ├── Components │ └── SizedLabel.qml │ ├── FontPixels.qml │ ├── FontScanlines.qml │ ├── Fonts.qml │ ├── Glossy.qml │ ├── InsertNameDialog.qml │ ├── PreprocessedTerminal.qml │ ├── SettingsEffectsTab.qml │ ├── SettingsGeneralTab.qml │ ├── SettingsPerformanceTab.qml │ ├── SettingsScreenTab.qml │ ├── SettingsTerminalTab.qml │ ├── SettingsWindow.qml │ ├── ShaderTerminal.qml │ ├── SimpleSlider.qml │ ├── SizeOverlay.qml │ ├── Storage.qml │ ├── TerminalContainer.qml │ ├── TimeManager.qml │ ├── fonts │ ├── 1971-ibm-3278 │ │ ├── 3270Medium.ttf │ │ ├── LICENSE.txt │ │ └── README.md │ ├── 1977-apple2 │ │ ├── FreeLicense.txt │ │ ├── PRNumber3.ttf │ │ └── PrintChar21.ttf │ ├── 1977-commodore-pet │ │ ├── COMMODORE_PET.ttf │ │ ├── COMMODORE_PET_128.ttf │ │ ├── COMMODORE_PET_128_2y.ttf │ │ ├── COMMODORE_PET_2x.ttf │ │ ├── COMMODORE_PET_2y.ttf │ │ ├── COMMODORE_PET_64.ttf │ │ ├── COMMODORE_PET_64_2y.ttf │ │ └── FreeLicense.txt │ ├── 1979-atari-400-800 │ │ ├── ATARI400800_original.TTF │ │ ├── ATARI400800_squared.TTF │ │ └── ReadMe.rtf │ ├── 1982-commodore64 │ │ ├── C64_Elite_Mono_v1.0-STYLE.ttf │ │ ├── C64_Pro_Mono_v1.0-STYLE.ttf │ │ ├── C64_Pro_v1.0-STYLE.ttf │ │ ├── C64_User_Mono_v1.0-STYLE.ttf │ │ ├── C64_User_v1.0-STYLE.ttf │ │ └── license.txt │ ├── 1985-atari-st │ │ └── AtariST8x16SystemFont.ttf │ ├── 1985-ibm-pc-vga │ │ ├── Perfect DOS VGA 437 Win.ttf │ │ ├── Perfect DOS VGA 437.ttf │ │ └── dos437.txt │ ├── modern-fixedsys-excelsior │ │ └── FSEX301-L2.ttf │ ├── modern-hermit │ │ ├── Hermit-bold.otf │ │ ├── Hermit-light.otf │ │ ├── Hermit-medium.otf │ │ └── LICENSE │ ├── modern-inconsolata │ │ └── Inconsolata.otf │ ├── modern-monaco │ │ ├── README │ │ └── monaco.ttf │ ├── modern-pro-font-win-tweaked │ │ ├── ._LICENSE │ │ ├── ._readme.txt │ │ ├── Comments for ProFontWindows │ │ ├── LICENSE │ │ ├── ProFontWindows.ttf │ │ └── readme.txt │ ├── modern-proggy-tiny │ │ ├── Licence.txt │ │ └── ProggyTiny.ttf │ └── modern-terminus │ │ ├── TerminusTTF-4.38.2.ttf │ │ └── TerminusTTF-Bold-4.38.2.ttf │ ├── frames │ ├── BlackRoughFrame.qml │ ├── WhiteSimpleFrame.qml │ ├── images │ │ ├── black-frame-normals.png │ │ ├── black-frame-original.png │ │ ├── black-frame.png │ │ ├── screen-frame-normals.png │ │ ├── screen-frame-original.png │ │ └── screen-frame.png │ └── utils │ │ └── TerminalFrame.qml │ ├── images │ ├── allNoise512.png │ └── crt256.png │ ├── main.qml │ ├── resources.qrc │ └── utils.js ├── cool-retro-term.desktop ├── cool-retro-term.pro ├── gpl-2.0.txt ├── gpl-3.0.txt └── packaging ├── appdata └── cool-retro-term.appdata.xml ├── debian ├── .gitignore ├── changelog ├── compat ├── control ├── cool-retro-term.1 ├── copyright ├── rules ├── source │ └── format └── watch └── rpm └── cool-retro-term.spec /.gitignore: -------------------------------------------------------------------------------- 1 | # C++ objects and libs 2 | 3 | *.slo 4 | *.lo 5 | *.o 6 | *.a 7 | *.la 8 | *.lai 9 | *.so 10 | *.dll 11 | *.dylib 12 | 13 | # Qt-es 14 | 15 | /.qmake.cache 16 | /.qmake.stash 17 | *.pro.user 18 | *.pro.user.* 19 | *.moc 20 | moc_*.cpp 21 | qrc_*.cpp 22 | ui_*.h 23 | Makefile* 24 | *-build-* 25 | 26 | # QtCreator 27 | 28 | *.autosave 29 | 30 | # QtCtreator Qml 31 | *.qmlproject.user 32 | *.qmlproject.user.* 33 | 34 | # Others 35 | 36 | *.xcf 37 | 38 | # Ubuntu SDk 39 | *.excludes 40 | *.json 41 | 42 | # Excludes compiled files 43 | imports 44 | cool-retro-term 45 | 46 | # Mac OSX 47 | 48 | .DS_Store 49 | *.app 50 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "qmltermwidget"] 2 | path = qmltermwidget 3 | url = https://github.com/Swordfish90/qmltermwidget 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #cool-retro-term 2 | 3 | ##Description 4 | cool-retro-term is a terminal emulator which mimics the look and feel of the old cathode tube screens. 5 | It has been designed to be eye-candy, customizable, and reasonably lightweight. 6 | 7 | It uses the QML port of qtermwidget (Konsole) developed by me: https://github.com/Swordfish90/qmltermwidget . 8 | 9 | This terminal emulator works under Linux and OSX and requires Qt 5.2 or higher. 10 | 11 | ##Screenshots 12 | ![Image]() 13 | ![Image]() 14 | ![Image]() 15 | 16 | ##Get cool-retro-term 17 | You can either build cool-retro-term yourself (see below) or walk the easy way and install one of these packages: 18 | 19 | Users of Fedora and openSUSE can grab a package from [Open Build Service](http://software.opensuse.org/package/cool-retro-term). 20 | 21 | Arch users can install this [package](https://aur.archlinux.org/packages/cool-retro-term-git/) directly via the [AUR](https://aur.archlinux.org): 22 | 23 | yaourt -S aur/cool-retro-term-git 24 | 25 | or use: 26 | 27 | pacman -S cool-retro-term 28 | 29 | to install precompiled from community repository. 30 | 31 | Gentoo users can now install the first release "1.0" from a 3rd-party repository preferably via layman: 32 | 33 | USE="subversion git" emerge app-portage/layman 34 | wget https://www.gerczei.eu/files/gerczei.xml -O /etc/layman/overlays/gerczei.xml 35 | layman -f -a qt -a gerczei # those who've added the repo already should sync instead via 'layman -s gerczei' 36 | ACCEPT_KEYWORDS="~*" emerge =x11-terms/cool-retro-term-1.0.0-r1::gerczei 37 | 38 | The live ebuild (version 9999-r1) tracking the bleeding-edge WIP codebase also remains available. 39 | 40 | A word of warning: USE flags and keywords are to be added to portage's configuration files and every emerge operation should be executed with '-p' (short option for --pretend) appended to the command line first as per best practice! 41 | 42 | Ubuntu users of 14.04 LTS (Trusty) up to 15.10 (Wily) can use [this PPA](https://launchpad.net/~bugs-launchpad-net-falkensweb) 43 | 44 | OSX users can grab the latest dmg from the release page: https://github.com/Swordfish90/cool-retro-term/releases 45 | 46 | ##Build instructions (Linux) 47 | 48 | ##Dependencies 49 | Make sure to install these first. 50 | 51 | --- 52 | 53 | **Ubuntu 14.04** 54 | 55 | 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 56 | 57 | --- 58 | 59 | **Ubuntu 16.10** 60 | 61 | sudo apt-get install build-essential qmlscene qt5-qmake qt5-default qtdeclarative5-dev qml-module-qtquick-controls qtdeclarative5-qtquick2-plugin libqt5qml-graphicaleffects qml-module-qtquick-dialogs qtdeclarative5-localstorage-plugin qtdeclarative5-window-plugin 62 | 63 | --- 64 | 65 | **Debian Jessie** 66 | 67 | 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 68 | 69 | --- 70 | 71 | **Fedora** 72 | This command should install the known fedora dependencies: 73 | 74 | sudo yum -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols redhat-rpm-config 75 | 76 | or: 77 | 78 | sudo dnf -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols redhat-rpm-config 79 | 80 | --- 81 | 82 | **Arch Linux** 83 | 84 | sudo pacman -S qt5-base qt5-declarative qt5-quickcontrols qt5-graphicaleffects 85 | 86 | --- 87 | 88 | **openSUSE** 89 | 90 | Add repository with latest Qt 5 (this is only needed on openSUSE 13.1, Factory already has it): 91 | 92 | sudo zypper ar http://download.opensuse.org/repositories/KDE:/Qt5/openSUSE_13.1/ KDE:Qt5 93 | 94 | Install dependencies: 95 | 96 | sudo zypper install libqt5-qtbase-devel libqt5-qtdeclarative-devel libqt5-qtquickcontrols libqt5-qtgraphicaleffects 97 | 98 | --- 99 | 100 | **Anyone else** 101 | 102 | 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): 103 | 104 | export PATH=/opt/Qt5.3.1/5.3/gcc_64/bin/:$PATH 105 | --- 106 | 107 | ###Compile 108 | Once you installed all dependencies (Qt is installed and in your path) you need to compile and run the application: 109 | 110 | ```bash 111 | # Get it from GitHub 112 | git clone --recursive https://github.com/Swordfish90/cool-retro-term.git 113 | 114 | # Build it 115 | cd cool-retro-term 116 | 117 | # Compile (Fedora and OpenSUSE user should use qmake-qt5 instead of qmake) 118 | qmake && make 119 | 120 | # Have fun! 121 | ./cool-retro-term 122 | ``` 123 | 124 | ##Build instructions (OSX) 125 | 126 | 1. Install [Xcode](https://developer.apple.com/xcode/) and agree to the licence agreement 127 | 2. Enter the following commands into the terminal: 128 | 129 | **Brew** 130 | 131 | ```sh 132 | brew install qt5 133 | git clone --recursive https://github.com/Swordfish90/cool-retro-term.git 134 | export CPPFLAGS="-I/usr/local/opt/qt5/include" 135 | export LDFLAGS="-L/usr/local/opt/qt5/lib" 136 | export PATH=/usr/local/opt/qt5/bin:$PATH 137 | cd cool-retro-term 138 | qmake && make 139 | mkdir cool-retro-term.app/Contents/PlugIns 140 | cp -r qmltermwidget/QMLTermWidget cool-retro-term.app/Contents/PlugIns 141 | open cool-retro-term.app 142 | ``` 143 | 144 | **MacPorts** 145 | 146 | ```sh 147 | sudo port install qt5 148 | git clone --recursive https://github.com/Swordfish90/cool-retro-term.git 149 | cd cool-retro-term 150 | /opt/local/libexec/qt5/bin/qmake && make 151 | mkdir cool-retro-term.app/Contents/PlugIns 152 | cp -r qmltermwidget/QMLTermWidget cool-retro-term.app/Contents/PlugIns 153 | open cool-retro-term.app 154 | ``` 155 | 156 | ##Donations 157 | I made this project in my spare time because I love what I'm doing. If you are enjoying it and you want to buy me a beer click [here](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=flscogna%40gmail%2ecom&lc=IT&item_name=Filippo%20Scognamiglio¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted) . 158 | 159 | You can also add "bounties" on your favourite issues. More information on the [Bountysource](https://www.bountysource.com/teams/crt/issues) page. 160 | -------------------------------------------------------------------------------- /app/app.pro: -------------------------------------------------------------------------------- 1 | QT += qml quick widgets sql 2 | TARGET = cool-retro-term 3 | 4 | DESTDIR = $$OUT_PWD/../ 5 | 6 | HEADERS += \ 7 | fileio.h 8 | 9 | SOURCES = main.cpp \ 10 | fileio.cpp 11 | 12 | macx:ICON = icons/crt.icns 13 | 14 | RESOURCES += qml/resources.qrc 15 | 16 | ######################################### 17 | ## INTALLS 18 | ######################################### 19 | 20 | target.path += /usr/bin/ 21 | 22 | INSTALLS += target 23 | 24 | # Install icons 25 | unix { 26 | icon32.files = icons/32x32/cool-retro-term.png 27 | icon32.path = /usr/share/icons/hicolor/32x32/apps 28 | icon64.files = icons/64x64/cool-retro-term.png 29 | icon64.path = /usr/share/icons/hicolor/64x64/apps 30 | icon128.files = icons/128x128/cool-retro-term.png 31 | icon128.path = /usr/share/icons/hicolor/128x128/apps 32 | icon256.files = icons/256x256/cool-retro-term.png 33 | icon256.path = /usr/share/icons/hicolor/256x256/apps 34 | 35 | INSTALLS += icon32 icon64 icon128 icon256 36 | } 37 | -------------------------------------------------------------------------------- /app/fileio.cpp: -------------------------------------------------------------------------------- 1 | #include "fileio.h" 2 | 3 | FileIO::FileIO() 4 | { 5 | } 6 | 7 | bool FileIO::write(const QString& sourceUrl, const QString& data) { 8 | if (sourceUrl.isEmpty()) 9 | return false; 10 | 11 | QUrl url(sourceUrl); 12 | QFile file(url.toLocalFile()); 13 | if (!file.open(QFile::WriteOnly | QFile::Truncate)) 14 | return false; 15 | 16 | QTextStream out(&file); 17 | out << data; 18 | file.close(); 19 | return true; 20 | } 21 | 22 | QString FileIO::read(const QString& sourceUrl) { 23 | if (sourceUrl.isEmpty()) 24 | return ""; 25 | 26 | QUrl url(sourceUrl); 27 | QFile file(url.toLocalFile()); 28 | if (!file.open(QFile::ReadOnly)) 29 | return ""; 30 | 31 | QTextStream in(&file); 32 | QString result = in.readAll(); 33 | 34 | file.close(); 35 | 36 | return result; 37 | } 38 | -------------------------------------------------------------------------------- /app/fileio.h: -------------------------------------------------------------------------------- 1 | #ifndef FILEIO_H 2 | #define FILEIO_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | class FileIO : public QObject 10 | { 11 | Q_OBJECT 12 | 13 | public: 14 | FileIO(); 15 | 16 | public slots: 17 | bool write(const QString& sourceUrl, const QString& data); 18 | QString read(const QString& sourceUrl); 19 | }; 20 | 21 | #endif // FILEIO_H 22 | -------------------------------------------------------------------------------- /app/icons/128x128/cool-retro-term.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/icons/128x128/cool-retro-term.png -------------------------------------------------------------------------------- /app/icons/256x256/cool-retro-term.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/icons/256x256/cool-retro-term.png -------------------------------------------------------------------------------- /app/icons/32x32/cool-retro-term.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/icons/32x32/cool-retro-term.png -------------------------------------------------------------------------------- /app/icons/64x64/cool-retro-term.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/icons/64x64/cool-retro-term.png -------------------------------------------------------------------------------- /app/icons/crt.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/icons/crt.icns -------------------------------------------------------------------------------- /app/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | 10 | #include 11 | #include 12 | 13 | #include 14 | 15 | QString getNamedArgument(QStringList args, QString name, QString defaultName) 16 | { 17 | int index = args.indexOf(name); 18 | return (index != -1) ? args[index + 1] : QString(defaultName); 19 | } 20 | 21 | QString getNamedArgument(QStringList args, QString name) 22 | { 23 | return getNamedArgument(args, name, ""); 24 | } 25 | 26 | int main(int argc, char *argv[]) 27 | { 28 | // Some environmental variable are necessary on certain platforms. 29 | 30 | // This disables QT appmenu under Ubuntu, which is not working with QML apps. 31 | setenv("QT_QPA_PLATFORMTHEME", "", 1); 32 | 33 | #if defined(Q_OS_MAC) 34 | // This allows UTF-8 characters usage in OSX. 35 | setenv("LC_CTYPE", "UTF-8", 1); 36 | #endif 37 | 38 | QApplication app(argc, argv); 39 | QQmlApplicationEngine engine; 40 | FileIO fileIO; 41 | 42 | #if !defined(Q_OS_MAC) 43 | app.setWindowIcon(QIcon::fromTheme("cool-retro-term", QIcon(":../icons/32x32/cool-retro-term.png"))); 44 | #else 45 | app.setWindowIcon(QIcon(":../icons/32x32/cool-retro-term.png")); 46 | #endif 47 | 48 | // Manage command line arguments from the cpp side 49 | QStringList args = app.arguments(); 50 | if (args.contains("-h") || args.contains("--help")) { 51 | // BUG: This usage help text goes to stderr, should go to stdout. 52 | // BUG: First line of output is surrounded by double quotes. 53 | qDebug() << "Usage: " + args.at(0) + " [--default-settings] [--workdir ] [--program ] [-p|--profile ] [--fullscreen] [-h|--help]"; 54 | qDebug() << " --default-settings Run cool-retro-term with the default settings"; 55 | qDebug() << " --workdir Change working directory to 'dir'"; 56 | qDebug() << " -e Command to execute. This option will catch all following arguments, so use it as the last option."; 57 | qDebug() << " --fullscreen Run cool-retro-term in fullscreen."; 58 | qDebug() << " -p|--profile Run cool-retro-term with the given profile."; 59 | qDebug() << " -h|--help Print this help."; 60 | qDebug() << " --verbose Print additional information such as profiles and settings."; 61 | return 0; 62 | } 63 | 64 | if (args.contains("-v") || args.contains("--version")) { 65 | qDebug() << "cool-retro-term 1.0"; 66 | return 0; 67 | } 68 | 69 | // Manage default command 70 | QStringList cmdList; 71 | if (args.contains("-e")) { 72 | cmdList << args.mid(args.indexOf("-e") + 1); 73 | } 74 | QVariant command(cmdList.empty() ? QVariant() : cmdList[0]); 75 | QVariant commandArgs(cmdList.size() <= 1 ? QVariant() : QVariant(cmdList.mid(1))); 76 | engine.rootContext()->setContextProperty("defaultCmd", command); 77 | engine.rootContext()->setContextProperty("defaultCmdArgs", commandArgs); 78 | 79 | engine.rootContext()->setContextProperty("workdir", getNamedArgument(args, "--workdir", "$HOME")); 80 | engine.rootContext()->setContextProperty("fileIO", &fileIO); 81 | 82 | engine.rootContext()->setContextProperty("devicePixelRatio", app.devicePixelRatio()); 83 | 84 | // Manage import paths for Linux and OSX. 85 | QStringList importPathList = engine.importPathList(); 86 | importPathList.prepend(QCoreApplication::applicationDirPath() + "/qmltermwidget"); 87 | importPathList.prepend(QCoreApplication::applicationDirPath() + "/../PlugIns"); 88 | importPathList.prepend(QCoreApplication::applicationDirPath() + "/../../../qmltermwidget"); 89 | engine.setImportPathList(importPathList); 90 | 91 | engine.load(QUrl(QStringLiteral ("qrc:/main.qml"))); 92 | 93 | if (engine.rootObjects().isEmpty()) { 94 | qDebug() << "Cannot load QML interface"; 95 | return EXIT_FAILURE; 96 | } 97 | 98 | // Quit the application when the engine closes. 99 | QObject::connect((QObject*) &engine, SIGNAL(quit()), (QObject*) &app, SLOT(quit())); 100 | 101 | return app.exec(); 102 | } 103 | -------------------------------------------------------------------------------- /app/qml/AboutDialog.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.2 2 | import QtQuick.Controls 1.1 3 | import QtQuick.Layouts 1.1 4 | import QtQuick.Window 2.0 5 | 6 | Window{ 7 | id: dialogwindow 8 | title: qsTr("About") 9 | width: 600 10 | height: 400 11 | 12 | modality: Qt.ApplicationModal 13 | 14 | ColumnLayout{ 15 | anchors.fill: parent 16 | anchors.margins: 15 17 | spacing: 15 18 | Text { 19 | anchors.horizontalCenter: parent.horizontalCenter 20 | text: "cool-retro-term" 21 | font {bold: true; pointSize: 18} 22 | } 23 | Loader{ 24 | id: mainContent 25 | Layout.fillHeight: true 26 | Layout.fillWidth: true 27 | 28 | states: [ 29 | State { 30 | name: "Default" 31 | PropertyChanges { 32 | target: mainContent 33 | sourceComponent: defaultComponent 34 | } 35 | }, 36 | State { 37 | name: "License" 38 | PropertyChanges { 39 | target: mainContent 40 | sourceComponent: licenseComponent 41 | } 42 | } 43 | ] 44 | Component.onCompleted: mainContent.state = "Default"; 45 | } 46 | Item{ 47 | Layout.fillWidth: true 48 | height: childrenRect.height 49 | Button{ 50 | anchors.left: parent.left 51 | text: qsTr("License") 52 | onClicked: { 53 | mainContent.state == "Default" ? mainContent.state = "License" : mainContent.state = "Default" 54 | } 55 | } 56 | Button{ 57 | anchors.right: parent.right 58 | text: qsTr("Close") 59 | onClicked: dialogwindow.close(); 60 | } 61 | } 62 | } 63 | // MAIN COMPONENTS //////////////////////////////////////////////////////// 64 | Component{ 65 | id: defaultComponent 66 | ColumnLayout{ 67 | anchors.fill: parent 68 | spacing: 10 69 | Image{ 70 | Layout.fillWidth: true 71 | Layout.fillHeight: true 72 | anchors.horizontalCenter: parent.horizontalCenter 73 | fillMode: Image.PreserveAspectFit 74 | source: "images/crt256.png" 75 | smooth: true 76 | } 77 | Text{ 78 | anchors.horizontalCenter: parent.horizontalCenter 79 | horizontalAlignment: Text.AlignHCenter 80 | text: appSettings.version + "\n" + 81 | qsTr("Author: ") + "Filippo Scognamiglio\n" + 82 | qsTr("Email: ") + "flscogna@gmail.com\n" + 83 | qsTr("Source: ") + "https://github.com/Swordfish90/cool-retro-term\n" 84 | } 85 | } 86 | } 87 | Component{ 88 | id: licenseComponent 89 | TextArea{ 90 | anchors.fill: parent 91 | readOnly: true 92 | text: "Copyright (c) 2013 Filippo Scognamiglio \n\n" + 93 | "https://github.com/Swordfish90/cool-retro-term\n\n" + 94 | 95 | "cool-retro-term is free software: you can redistribute it and/or modify " + 96 | "it under the terms of the GNU General Public License as published by " + 97 | "the Free Software Foundation, either version 3 of the License, or " + 98 | "(at your option) any later version.\n\n" + 99 | 100 | "This program is distributed in the hope that it will be useful, " + 101 | "but WITHOUT ANY WARRANTY; without even the implied warranty of " + 102 | "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the " + 103 | "GNU General Public License for more details.\n\n" + 104 | 105 | "You should have received a copy of the GNU General Public License " + 106 | "along with this program. If not, see ." 107 | } 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /app/qml/CRTMainMenuBar.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.2 2 | import QtQuick.Controls 1.1 3 | 4 | MenuBar { 5 | id: defaultMenuBar 6 | property bool visible: true 7 | Menu { 8 | title: qsTr("File") 9 | visible: defaultMenuBar.visible 10 | MenuItem {action: quitAction} 11 | } 12 | Menu { 13 | title: qsTr("Edit") 14 | visible: defaultMenuBar.visible 15 | MenuItem {action: copyAction} 16 | MenuItem {action: pasteAction} 17 | MenuSeparator{visible: Qt.platform.os !== "osx"} 18 | MenuItem {action: showsettingsAction} 19 | } 20 | Menu{ 21 | title: qsTr("View") 22 | visible: defaultMenuBar.visible 23 | MenuItem {action: fullscreenAction; visible: fullscreenAction.enabled} 24 | MenuItem {action: showMenubarAction; visible: showMenubarAction.enabled} 25 | MenuSeparator{visible: showMenubarAction.enabled} 26 | MenuItem {action: zoomIn} 27 | MenuItem {action: zoomOut} 28 | } 29 | Menu{ 30 | id: profilesMenu 31 | title: qsTr("Profiles") 32 | visible: defaultMenuBar.visible 33 | Instantiator{ 34 | model: appSettings.profilesList 35 | delegate: MenuItem { 36 | text: model.text 37 | onTriggered: { 38 | appSettings.loadProfileString(obj_string); 39 | appSettings.handleFontChanged(); 40 | } 41 | } 42 | onObjectAdded: profilesMenu.insertItem(index, object) 43 | onObjectRemoved: profilesMenu.removeItem(object) 44 | } 45 | } 46 | Menu{ 47 | title: qsTr("Help") 48 | visible: defaultMenuBar.visible 49 | MenuItem {action: showAboutAction} 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/qml/CheckableSlider.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | import QtQuick.Controls 1.1 23 | import QtQuick.Layouts 1.1 24 | 25 | import "Components" 26 | 27 | RowLayout { 28 | property alias name: check.text 29 | 30 | property double value 31 | property alias min_value: slider.minimumValue 32 | property alias max_value: slider.maximumValue 33 | property alias stepSize: slider.stepSize 34 | 35 | signal newValue(real newValue); 36 | 37 | id: setting_component 38 | anchors.left: parent.left 39 | anchors.right: parent.right 40 | 41 | onValueChanged: { 42 | check.checked = !(value == 0); 43 | if(check.checked) 44 | slider.value = value; 45 | } 46 | 47 | CheckBox{ 48 | id: check 49 | implicitWidth: 160 50 | onClicked: { 51 | if(!checked){ 52 | checked = false; 53 | slider.enabled = false; 54 | newValue(0); 55 | } else { 56 | checked = true; 57 | newValue(slider.value); 58 | slider.enabled = true; 59 | } 60 | } 61 | } 62 | Slider{ 63 | id: slider 64 | stepSize: parent.stepSize 65 | Layout.fillWidth: true 66 | onValueChanged: { 67 | newValue(value); 68 | } 69 | } 70 | SizedLabel { 71 | anchors { top: parent.top; bottom: parent.bottom } 72 | text: Math.round(((value - min_value) / (max_value - min_value)) * 100) + "%" 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /app/qml/ColorButton.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | import QtQuick.Dialogs 1.1 23 | 24 | Item { 25 | id: rootItem 26 | 27 | signal colorSelected (color color) 28 | property color color 29 | property string name 30 | 31 | ColorDialog { 32 | id: colorDialog 33 | title: qsTr("Choose a color") 34 | modality: Qt.ApplicationModal 35 | visible: false 36 | 37 | //This is a workaround to a Qt 5.2 bug. 38 | onColorChanged: if (Qt.platform.os !== "osx") colorSelected(color) 39 | onAccepted: if (Qt.platform.os === "osx") colorSelected(color) 40 | } 41 | Rectangle{ 42 | anchors.fill: parent 43 | radius: 10 44 | color: rootItem.color 45 | border.color: "black" 46 | Glossy {} 47 | Rectangle { 48 | anchors.fill: parent 49 | anchors.margins: parent.height * 0.25 50 | radius: parent.radius 51 | color: "white" 52 | opacity: 0.5 53 | } 54 | Text{ 55 | anchors.centerIn: parent 56 | z: parent.z + 1 57 | text: name + ": " + rootItem.color 58 | } 59 | } 60 | MouseArea{ 61 | anchors.fill: parent 62 | onClicked: colorDialog.visible = true; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /app/qml/Components/SizedLabel.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | 22 | import QtQuick 2.0 23 | import QtQuick.Controls 1.0 24 | 25 | // This component is simply a label with a predefined size. 26 | // Used to improve alignment. 27 | 28 | Item { 29 | property alias text: textfield.text 30 | width: appSettings.labelWidth 31 | Label{ 32 | id: textfield 33 | anchors { right: parent.right; verticalCenter: parent.verticalCenter } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/qml/FontPixels.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | 23 | QtObject{ 24 | property int selectedFontIndex 25 | property real scaling 26 | property var _font: fontlist.get(selectedFontIndex) 27 | property var source: _font.source 28 | property int pixelSize: _font.pixelSize 29 | property int lineSpacing: _font.lineSpacing 30 | property real screenScaling: scaling * _font.baseScaling 31 | property real defaultFontWidth: fontlist.get(selectedFontIndex).fontWidth 32 | property bool lowResolutionFont: true 33 | 34 | property ListModel fontlist: ListModel{ 35 | ListElement{ 36 | name: "COMMODORE_PET" 37 | text: "Commodore PET (1977)" 38 | source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf" 39 | lineSpacing: 2 40 | pixelSize: 8 41 | baseScaling: 4.0 42 | fontWidth: 0.8 43 | } 44 | ListElement{ 45 | name: "PROGGY_TINY" 46 | text: "Proggy Tiny (Modern)" 47 | source: "fonts/modern-proggy-tiny/ProggyTiny.ttf" 48 | lineSpacing: 1 49 | pixelSize: 16 50 | baseScaling: 4.0 51 | fontWidth: 0.9 52 | } 53 | ListElement{ 54 | name: "TERMINUS_SCALED" 55 | text: "Terminus (Modern)" 56 | source: "fonts/modern-terminus/TerminusTTF-4.38.2.ttf" 57 | lineSpacing: 1 58 | pixelSize: 12 59 | baseScaling: 3.0 60 | fontWidth: 1.0 61 | } 62 | ListElement{ 63 | name: "PRO_FONT_SCALED" 64 | text: "Pro Font (Modern)" 65 | source: "fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf" 66 | lineSpacing: 1 67 | pixelSize: 12 68 | baseScaling: 3.0 69 | fontWidth: 1.0 70 | } 71 | ListElement{ 72 | name: "APPLE_II" 73 | text: "Apple ][ (1977)" 74 | source: "fonts/1977-apple2/PrintChar21.ttf" 75 | lineSpacing: 2 76 | pixelSize: 8 77 | baseScaling: 4.0 78 | fontWidth: 0.9 79 | } 80 | ListElement{ 81 | name: "ATARI_400" 82 | text: "Atari 400-800 (1979)" 83 | source: "fonts/1979-atari-400-800/ATARI400800_original.TTF" 84 | lineSpacing: 3 85 | pixelSize: 8 86 | baseScaling: 4.0 87 | fontWidth: 0.8 88 | } 89 | ListElement{ 90 | name: "COMMODORE_64" 91 | text: "Commodore 64 (1982)" 92 | source: "fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf" 93 | lineSpacing: 3 94 | pixelSize: 8 95 | baseScaling: 4.0 96 | fontWidth: 0.8 97 | } 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /app/qml/FontScanlines.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | 23 | QtObject{ 24 | property int selectedFontIndex 25 | property real scaling 26 | property var _font: fontlist.get(selectedFontIndex) 27 | property var source: _font.source 28 | property int pixelSize: _font.pixelSize 29 | property int lineSpacing: _font.lineSpacing 30 | property real screenScaling: scaling * _font.baseScaling 31 | property real defaultFontWidth: fontlist.get(selectedFontIndex).fontWidth 32 | property bool lowResolutionFont: true 33 | 34 | property ListModel fontlist: ListModel{ 35 | ListElement{ 36 | name: "COMMODORE_PET" 37 | text: "Commodore PET (1977)" 38 | source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf" 39 | lineSpacing: 2 40 | pixelSize: 8 41 | baseScaling: 4.0 42 | fontWidth: 0.7 43 | } 44 | ListElement{ 45 | name: "PROGGY_TINY" 46 | text: "Proggy Tiny (Modern)" 47 | source: "fonts/modern-proggy-tiny/ProggyTiny.ttf" 48 | lineSpacing: 1 49 | pixelSize: 16 50 | baseScaling: 4.0 51 | fontWidth: 0.9 52 | } 53 | ListElement{ 54 | name: "TERMINUS_SCALED" 55 | text: "Terminus (Modern)" 56 | source: "fonts/modern-terminus/TerminusTTF-4.38.2.ttf" 57 | lineSpacing: 1 58 | pixelSize: 12 59 | baseScaling: 3.0 60 | fontWidth: 1.0 61 | } 62 | ListElement{ 63 | name: "PRO_FONT_SCALED" 64 | text: "Pro Font (Modern)" 65 | source: "fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf" 66 | lineSpacing: 1 67 | pixelSize: 12 68 | baseScaling: 3.0 69 | fontWidth: 1.0 70 | } 71 | ListElement{ 72 | name: "APPLE_II" 73 | text: "Apple ][ (1977)" 74 | source: "fonts/1977-apple2/PrintChar21.ttf" 75 | lineSpacing: 2 76 | pixelSize: 8 77 | baseScaling: 4.0 78 | fontWidth: 0.8 79 | } 80 | ListElement{ 81 | name: "ATARI_400" 82 | text: "Atari 400-800 (1979)" 83 | source: "fonts/1979-atari-400-800/ATARI400800_original.TTF" 84 | lineSpacing: 3 85 | pixelSize: 8 86 | baseScaling: 4.0 87 | fontWidth: 0.7 88 | } 89 | ListElement{ 90 | name: "COMMODORE_64" 91 | text: "Commodore 64 (1982)" 92 | source: "fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf" 93 | lineSpacing: 3 94 | pixelSize: 8 95 | baseScaling: 4.0 96 | fontWidth: 0.7 97 | } 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /app/qml/Fonts.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | 23 | QtObject{ 24 | property int selectedFontIndex 25 | property real scaling 26 | property var source: fontlist.get(selectedFontIndex).source 27 | property var _font: fontlist.get(selectedFontIndex) 28 | property bool lowResolutionFont: _font.lowResolutionFont 29 | 30 | property int pixelSize: lowResolutionFont 31 | ? _font.pixelSize 32 | : _font.pixelSize * scaling 33 | 34 | property int lineSpacing: lowResolutionFont 35 | ? _font.lineSpacing 36 | : pixelSize * _font.lineSpacing 37 | 38 | property real screenScaling: lowResolutionFont 39 | ? _font.baseScaling * scaling 40 | : 1.0 41 | 42 | property real defaultFontWidth: fontlist.get(selectedFontIndex).fontWidth 43 | 44 | // There are two kind of fonts: low resolution and high resolution. 45 | // Low resolution font sets the lowResolutionFont property to true. 46 | // They are rendered at a fixed pixel size and the texture is upscaled 47 | // to fill the screen (they are much faster to render). 48 | // High resolution fonts are instead drawn on a texture which has the 49 | // size of the screen, and the scaling directly controls their pixels size. 50 | // Those are slower to render but are not pixelated. 51 | 52 | property ListModel fontlist: ListModel{ 53 | ListElement{ 54 | name: "TERMINUS_SCALED" 55 | text: "Terminus (Modern)" 56 | source: "fonts/modern-terminus/TerminusTTF-4.38.2.ttf" 57 | lineSpacing: 1 58 | pixelSize: 12 59 | baseScaling: 3.0 60 | fontWidth: 1.0 61 | lowResolutionFont: true 62 | } 63 | ListElement{ 64 | name: "PRO_FONT_SCALED" 65 | text: "Pro Font (Modern)" 66 | source: "fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf" 67 | lineSpacing: 1 68 | pixelSize: 12 69 | baseScaling: 3.0 70 | fontWidth: 1.0 71 | lowResolutionFont: true 72 | } 73 | ListElement{ 74 | name: "EXCELSIOR_SCALED" 75 | text: "Fixedsys Excelsior (Modern)" 76 | source: "fonts/modern-fixedsys-excelsior/FSEX301-L2.ttf" 77 | lineSpacing: 0 78 | pixelSize: 16 79 | baseScaling: 2.4 80 | fontWidth: 1.0 81 | lowResolutionFont: true 82 | } 83 | ListElement{ 84 | name: "COMMODORE_PET_SCALED" 85 | text: "Commodore PET (1977)" 86 | source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf" 87 | lineSpacing: 2 88 | pixelSize: 8 89 | baseScaling: 3.5 90 | fontWidth: 0.7 91 | lowResolutionFont: true 92 | } 93 | ListElement{ 94 | name: "PROGGY_TINY_SCALED" 95 | text: "Proggy Tiny (Modern)" 96 | source: "fonts/modern-proggy-tiny/ProggyTiny.ttf" 97 | lineSpacing: 1 98 | pixelSize: 16 99 | baseScaling: 3.0 100 | fontWidth: 0.9 101 | lowResolutionFont: true 102 | } 103 | ListElement{ 104 | name: "APPLE_II_SCALED" 105 | text: "Apple ][ (1977)" 106 | source: "fonts/1977-apple2/PrintChar21.ttf" 107 | lineSpacing: 2 108 | pixelSize: 8 109 | baseScaling: 3.5 110 | fontWidth: 0.8 111 | lowResolutionFont: true 112 | } 113 | ListElement{ 114 | name: "ATARI_400_SCALED" 115 | text: "Atari 400-800 (1979)" 116 | source: "fonts/1979-atari-400-800/ATARI400800_original.TTF" 117 | lineSpacing: 3 118 | pixelSize: 8 119 | baseScaling: 3.5 120 | fontWidth: 0.7 121 | lowResolutionFont: true 122 | } 123 | ListElement{ 124 | name: "COMMODORE_64_SCALED" 125 | text: "Commodore 64 (1982)" 126 | source: "fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf" 127 | lineSpacing: 3 128 | pixelSize: 8 129 | baseScaling: 3.5 130 | fontWidth: 0.7 131 | lowResolutionFont: true 132 | } 133 | ListElement{ 134 | name: "ATARI_ST_SCALED" 135 | text: "Atari ST (1985)" 136 | source: "fonts/1985-atari-st/AtariST8x16SystemFont.ttf" 137 | lineSpacing: 3 138 | pixelSize: 16 139 | baseScaling: 2.0 140 | fontWidth: 1.0 141 | lowResolutionFont: true 142 | } 143 | ListElement{ 144 | name: "IBM_DOS" 145 | text: "IBM DOS (1985)" 146 | source: "fonts/1985-ibm-pc-vga/Perfect DOS VGA 437 Win.ttf" 147 | lineSpacing: 3 148 | pixelSize: 16 149 | baseScaling: 2.0 150 | fontWidth: 1.0 151 | lowResolutionFont: true 152 | } 153 | ListElement{ 154 | name: "HERMIT" 155 | text: "HD: Hermit (Modern)" 156 | source: "fonts/modern-hermit/Hermit-medium.otf" 157 | lineSpacing: 0.05 158 | pixelSize: 28 159 | fontWidth: 1.0 160 | lowResolutionFont: false 161 | } 162 | ListElement{ 163 | name: "TERMINUS" 164 | text: "HD: Terminus (Modern)" 165 | source: "fonts/modern-terminus/TerminusTTF-4.38.2.ttf" 166 | lineSpacing: 0.1 167 | pixelSize: 35 168 | fontWidth: 1.0 169 | lowResolutionFont: false 170 | } 171 | ListElement{ 172 | name: "PRO_FONT" 173 | text: "HD: Pro Font (Modern)" 174 | source: "fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf" 175 | lineSpacing: 0.1 176 | pixelSize: 35 177 | fontWidth: 1.0 178 | lowResolutionFont: false 179 | } 180 | ListElement{ 181 | name: "MONACO" 182 | text: "HD: Monaco (Modern)" 183 | source: "fonts/modern-monaco/monaco.ttf" 184 | lineSpacing: 0.1 185 | pixelSize: 30 186 | fontWidth: 1.0 187 | lowResolutionFont: false 188 | } 189 | ListElement{ 190 | name: "INCONSOLATA" 191 | text: "HD: Inconsolata (Modern)" 192 | source: "fonts/modern-inconsolata/Inconsolata.otf" 193 | lineSpacing: 0.1 194 | pixelSize: 35 195 | fontWidth: 1.0 196 | lowResolutionFont: false 197 | } 198 | ListElement{ 199 | name: "IBM_3278" 200 | text: "HD: IBM 3278 (1971)" 201 | source: "fonts/1971-ibm-3278/3270Medium.ttf" 202 | lineSpacing: 0.2 203 | pixelSize: 32 204 | fontWidth: 1.0 205 | lowResolutionFont: false 206 | } 207 | } 208 | } 209 | -------------------------------------------------------------------------------- /app/qml/Glossy.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.2 2 | 3 | Rectangle { 4 | anchors.centerIn: parent 5 | width: parent.width - parent.border.width 6 | height: parent.height - parent.border.width 7 | radius:parent.radius - parent.border.width/2 8 | smooth: true 9 | 10 | border.width: parent.border.width/2 11 | border.color: "#22FFFFFF" 12 | 13 | gradient: Gradient { 14 | GradientStop { position: 0; color: "#88FFFFFF" } 15 | GradientStop { position: .1; color: "#55FFFFFF" } 16 | GradientStop { position: .5; color: "#33FFFFFF" } 17 | GradientStop { position: .501; color: "#11000000" } 18 | GradientStop { position: .8; color: "#11FFFFFF" } 19 | GradientStop { position: 1; color: "#55FFFFFF" } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/qml/InsertNameDialog.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | import QtQuick.Window 2.0 23 | import QtQuick.Controls 1.1 24 | import QtQuick.Layouts 1.1 25 | import QtQuick.Dialogs 1.1 26 | 27 | Window{ 28 | id: insertnamedialog 29 | width: 400 30 | height: 100 31 | modality: Qt.ApplicationModal 32 | title: qsTr("Save new profile") 33 | 34 | property alias profileName: namefield.text 35 | signal nameSelected(string name) 36 | 37 | MessageDialog { 38 | id: errorDialog 39 | title: qsTr("Error") 40 | visible: false 41 | 42 | function showError(message){ 43 | text = message; 44 | open(); 45 | } 46 | } 47 | 48 | function validateName(name){ 49 | var profile_list = appSettings.profilesList; 50 | if (name === "") 51 | return 1; 52 | return 0; 53 | } 54 | 55 | ColumnLayout{ 56 | anchors.margins: 10 57 | anchors.fill: parent 58 | RowLayout{ 59 | Label{text: qsTr("Name")} 60 | TextField{ 61 | id: namefield 62 | Layout.fillWidth: true 63 | Component.onCompleted: forceActiveFocus() 64 | onAccepted: okbutton.clickAction() 65 | } 66 | } 67 | RowLayout{ 68 | anchors.right: parent.right 69 | anchors.bottom: parent.bottom 70 | Button{ 71 | id: okbutton 72 | text: qsTr("OK") 73 | onClicked: clickAction() 74 | function clickAction(){ 75 | var name = namefield.text; 76 | switch(validateName(name)){ 77 | case 1: 78 | errorDialog.showError(qsTr("The name you inserted is empty. Please choose a different one.")); 79 | break; 80 | default: 81 | nameSelected(name); 82 | close(); 83 | } 84 | } 85 | } 86 | Button{ 87 | text: qsTr("Cancel") 88 | onClicked: close() 89 | } 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /app/qml/PreprocessedTerminal.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | import QtQuick.Controls 1.1 23 | 24 | import QMLTermWidget 1.0 25 | 26 | import "utils.js" as Utils 27 | 28 | Item{ 29 | id: terminalContainer 30 | 31 | property size virtualResolution: Qt.size(kterminal.width, kterminal.height) 32 | property alias mainTerminal: kterminal 33 | property ShaderEffectSource mainSource: kterminalSource 34 | property ShaderEffectSource blurredSource: blurredSourceLoader.item 35 | 36 | property real fontWidth: 1.0 37 | property real screenScaling: 1.0 38 | property real scaleTexture: 1.0 39 | property alias title: ksession.title 40 | property alias kterminal: kterminal 41 | 42 | anchors.leftMargin: frame.displacementLeft * appSettings.windowScaling 43 | anchors.rightMargin: frame.displacementRight * appSettings.windowScaling 44 | anchors.topMargin: frame.displacementTop * appSettings.windowScaling 45 | anchors.bottomMargin: frame.displacementBottom * appSettings.windowScaling 46 | 47 | //Parameters for the burnIn effect. 48 | property real burnIn: appSettings.burnIn 49 | property real fps: appSettings.fps !== 0 ? appSettings.fps : 60 50 | property real burnInFadeTime: Utils.lint(_minBurnInFadeTime, _maxBurnInFadeTime, burnIn) 51 | property real motionBlurCoefficient: 1.0 / (fps * burnInFadeTime) 52 | property real _minBurnInFadeTime: 0.16 53 | property real _maxBurnInFadeTime: 1.6 54 | 55 | property size terminalSize: kterminal.terminalSize 56 | property size fontMetrics: kterminal.fontMetrics 57 | 58 | // Manage copy and paste 59 | Connections{ 60 | target: copyAction 61 | onTriggered: kterminal.copyClipboard(); 62 | } 63 | Connections{ 64 | target: pasteAction 65 | onTriggered: kterminal.pasteClipboard() 66 | } 67 | 68 | //When settings are updated sources need to be redrawn. 69 | Connections{ 70 | target: appSettings 71 | onFontScalingChanged: terminalContainer.updateSources(); 72 | onFontWidthChanged: terminalContainer.updateSources(); 73 | } 74 | Connections{ 75 | target: terminalContainer 76 | onWidthChanged: terminalContainer.updateSources(); 77 | onHeightChanged: terminalContainer.updateSources(); 78 | } 79 | function updateSources() { 80 | kterminal.update(); 81 | } 82 | 83 | QMLTermWidget { 84 | id: kterminal 85 | width: Math.floor(parent.width / (screenScaling * fontWidth)) 86 | height: Math.floor(parent.height / screenScaling) 87 | 88 | colorScheme: "cool-retro-term" 89 | 90 | smooth: !appSettings.lowResolutionFont 91 | enableBold: false 92 | fullCursorHeight: true 93 | 94 | session: QMLTermSession { 95 | id: ksession 96 | 97 | onFinished: { 98 | Qt.quit() 99 | } 100 | } 101 | 102 | QMLTermScrollbar { 103 | id: kterminalScrollbar 104 | terminal: kterminal 105 | anchors.margins: width * 0.5 106 | width: terminal.fontMetrics.width * 0.75 107 | Rectangle { 108 | anchors.fill: parent 109 | anchors.topMargin: 1 110 | anchors.bottomMargin: 1 111 | color: "white" 112 | radius: width * 0.25 113 | opacity: 0.7 114 | } 115 | } 116 | 117 | FontLoader{ id: fontLoader } 118 | 119 | function handleFontChange(fontSource, pixelSize, lineSpacing, screenScaling, fontWidth){ 120 | fontLoader.source = fontSource; 121 | 122 | kterminal.antialiasText = !appSettings.lowResolutionFont; 123 | font.pixelSize = pixelSize; 124 | font.family = fontLoader.name; 125 | 126 | terminalContainer.fontWidth = fontWidth; 127 | terminalContainer.screenScaling = screenScaling; 128 | scaleTexture = Math.max(1.0, Math.floor(screenScaling * appSettings.windowScaling)); 129 | 130 | kterminal.lineSpacing = lineSpacing; 131 | } 132 | function startSession() { 133 | appSettings.initializedSettings.disconnect(startSession); 134 | 135 | // Retrieve the variable set in main.cpp if arguments are passed. 136 | if (defaultCmd) { 137 | ksession.setShellProgram(defaultCmd); 138 | ksession.setArgs(defaultCmdArgs); 139 | } else if (appSettings.useCustomCommand) { 140 | var args = Utils.tokenizeCommandLine(appSettings.customCommand); 141 | ksession.setShellProgram(args[0]); 142 | ksession.setArgs(args.slice(1)); 143 | } else if (!defaultCmd && Qt.platform.os === "osx") { 144 | // OSX Requires the following default parameters for auto login. 145 | ksession.setArgs(["-i", "-l"]); 146 | } 147 | 148 | if (workdir) 149 | ksession.initialWorkingDirectory = workdir; 150 | 151 | ksession.startShellProgram(); 152 | forceActiveFocus(); 153 | } 154 | Component.onCompleted: { 155 | appSettings.terminalFontChanged.connect(handleFontChange); 156 | appSettings.initializedSettings.connect(startSession); 157 | } 158 | } 159 | Component { 160 | id: linuxContextMenu 161 | Menu{ 162 | id: contextmenu 163 | MenuItem{action: copyAction} 164 | MenuItem{action: pasteAction} 165 | MenuSeparator{} 166 | MenuItem{action: fullscreenAction} 167 | MenuItem{action: showMenubarAction} 168 | MenuSeparator{visible: !appSettings.showMenubar} 169 | CRTMainMenuBar{visible: !appSettings.showMenubar} 170 | } 171 | } 172 | Component { 173 | id: osxContextMenu 174 | Menu{ 175 | id: contextmenu 176 | MenuItem{action: copyAction} 177 | MenuItem{action: pasteAction} 178 | } 179 | } 180 | Loader { 181 | id: menuLoader 182 | sourceComponent: (Qt.platform.os === "osx" ? osxContextMenu : linuxContextMenu) 183 | } 184 | property alias contextmenu: menuLoader.item 185 | 186 | MouseArea{ 187 | acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton 188 | anchors.fill: parent 189 | cursorShape: kterminal.terminalUsesMouse ? Qt.ArrowCursor : Qt.IBeamCursor 190 | onWheel:{ 191 | if(wheel.modifiers & Qt.ControlModifier){ 192 | wheel.angleDelta.y > 0 ? zoomIn.trigger() : zoomOut.trigger(); 193 | } else { 194 | var coord = correctDistortion(wheel.x, wheel.y); 195 | kterminal.simulateWheel(coord.x, coord.y, wheel.buttons, wheel.modifiers, wheel.angleDelta); 196 | } 197 | } 198 | onDoubleClicked: { 199 | var coord = correctDistortion(mouse.x, mouse.y); 200 | kterminal.simulateMouseDoubleClick(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers); 201 | } 202 | onPressed: { 203 | if((!kterminal.terminalUsesMouse || mouse.modifiers & Qt.ShiftModifier) && mouse.button == Qt.RightButton) { 204 | contextmenu.popup(); 205 | } else { 206 | var coord = correctDistortion(mouse.x, mouse.y); 207 | kterminal.simulateMousePress(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers) 208 | } 209 | } 210 | onReleased: { 211 | var coord = correctDistortion(mouse.x, mouse.y); 212 | kterminal.simulateMouseRelease(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers); 213 | } 214 | onPositionChanged: { 215 | var coord = correctDistortion(mouse.x, mouse.y); 216 | kterminal.simulateMouseMove(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers); 217 | } 218 | 219 | function correctDistortion(x, y){ 220 | x = x / width; 221 | y = y / height; 222 | 223 | var cc = Qt.size(0.5 - x, 0.5 - y); 224 | var distortion = (cc.height * cc.height + cc.width * cc.width) * appSettings.screenCurvature; 225 | 226 | return Qt.point((x - cc.width * (1+distortion) * distortion) * kterminal.width, 227 | (y - cc.height * (1+distortion) * distortion) * kterminal.height) 228 | } 229 | } 230 | ShaderEffectSource{ 231 | id: kterminalSource 232 | sourceItem: kterminal 233 | hideSource: true 234 | wrapMode: ShaderEffectSource.ClampToEdge 235 | visible: false 236 | textureSize: Qt.size(kterminal.width * scaleTexture, kterminal.height * scaleTexture); 237 | } 238 | Loader{ 239 | id: blurredSourceLoader 240 | asynchronous: true 241 | active: burnIn !== 0 242 | 243 | sourceComponent: ShaderEffectSource{ 244 | property bool updateBurnIn: false 245 | 246 | id: _blurredSourceEffect 247 | sourceItem: blurredTerminalLoader.item 248 | recursive: true 249 | live: false 250 | hideSource: true 251 | wrapMode: kterminalSource.wrapMode 252 | 253 | visible: false 254 | 255 | function restartBlurSource(){ 256 | livetimer.restart(); 257 | } 258 | 259 | // This updates the burnin synched with the timer. 260 | Connections { 261 | target: updateBurnIn ? mainShader : null 262 | ignoreUnknownSignals: false 263 | onTimeChanged: _blurredSourceEffect.scheduleUpdate(); 264 | } 265 | 266 | Timer{ 267 | id: livetimer 268 | 269 | // The interval assumes 60 fps. This is the time needed burnout a white pixel. 270 | // We multiply 1.1 to have a little bit of margin over the theoretical value. 271 | // This solution is not extremely clean, but it's probably the best to avoid measuring fps. 272 | 273 | interval: burnInFadeTime * 1000 * 1.1 274 | running: true 275 | onTriggered: _blurredSourceEffect.updateBurnIn = false; 276 | } 277 | Connections{ 278 | target: kterminal 279 | onImagePainted:{ 280 | _blurredSourceEffect.scheduleUpdate(); 281 | _blurredSourceEffect.updateBurnIn = true; 282 | livetimer.restart(); 283 | } 284 | } 285 | // Restart blurred source settings change. 286 | Connections{ 287 | target: appSettings 288 | onBurnInChanged: _blurredSourceEffect.restartBlurSource(); 289 | onTerminalFontChanged: _blurredSourceEffect.restartBlurSource(); 290 | onRasterizationChanged: _blurredSourceEffect.restartBlurSource(); 291 | onBurnInQualityChanged: _blurredSourceEffect.restartBlurSource(); 292 | } 293 | Connections { 294 | target: kterminalScrollbar 295 | onOpacityChanged: _blurredSourceEffect.restartBlurSource(); 296 | } 297 | } 298 | } 299 | 300 | Loader{ 301 | id: blurredTerminalLoader 302 | 303 | property int burnInScaling: scaleTexture * appSettings.burnInQuality 304 | 305 | width: appSettings.lowResolutionFont 306 | ? kterminal.width * Math.max(1, burnInScaling) 307 | : kterminal.width * scaleTexture * appSettings.burnInQuality 308 | height: appSettings.lowResolutionFont 309 | ? kterminal.height * Math.max(1, burnInScaling) 310 | : kterminal.height * scaleTexture * appSettings.burnInQuality 311 | 312 | active: burnIn !== 0 313 | asynchronous: true 314 | 315 | sourceComponent: ShaderEffect { 316 | property variant txt_source: kterminalSource 317 | property variant blurredSource: blurredSourceLoader.item 318 | property real blurCoefficient: motionBlurCoefficient 319 | 320 | blending: false 321 | 322 | fragmentShader: 323 | "#ifdef GL_ES 324 | precision mediump float; 325 | #endif\n" + 326 | 327 | "uniform lowp float qt_Opacity;" + 328 | "uniform lowp sampler2D txt_source;" + 329 | 330 | "varying highp vec2 qt_TexCoord0; 331 | 332 | uniform lowp sampler2D blurredSource; 333 | uniform highp float blurCoefficient;" + 334 | 335 | "float rgb2grey(vec3 v){ 336 | return dot(v, vec3(0.21, 0.72, 0.04)); 337 | }" + 338 | 339 | "void main() {" + 340 | "vec2 coords = qt_TexCoord0;" + 341 | "vec3 origColor = texture2D(txt_source, coords).rgb;" + 342 | "vec3 blur_color = texture2D(blurredSource, coords).rgb - vec3(blurCoefficient);" + 343 | "vec3 color = min(origColor + blur_color, max(origColor, blur_color));" + 344 | 345 | "gl_FragColor = vec4(color, rgb2grey(color - origColor));" + 346 | "}" 347 | 348 | onStatusChanged: if (log) console.log(log) //Print warning messages 349 | } 350 | } 351 | } 352 | -------------------------------------------------------------------------------- /app/qml/SettingsEffectsTab.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | import QtQuick.Controls 1.1 23 | import QtQuick.Layouts 1.1 24 | 25 | Tab{ 26 | GroupBox{ 27 | title: qsTr("Effects") 28 | anchors.fill: parent 29 | ColumnLayout{ 30 | anchors.fill: parent 31 | spacing: 2 32 | CheckableSlider{ 33 | name: qsTr("Bloom") 34 | onNewValue: appSettings.bloom = newValue 35 | value: appSettings.bloom 36 | } 37 | CheckableSlider{ 38 | name: qsTr("BurnIn") 39 | onNewValue: appSettings.burnIn = newValue 40 | value: appSettings.burnIn 41 | } 42 | CheckableSlider{ 43 | name: qsTr("Static Noise") 44 | onNewValue: appSettings.staticNoise = newValue 45 | value: appSettings.staticNoise 46 | } 47 | CheckableSlider{ 48 | name: qsTr("Jitter") 49 | onNewValue: appSettings.jitter = newValue 50 | value: appSettings.jitter 51 | } 52 | CheckableSlider{ 53 | name: qsTr("Glow Line") 54 | onNewValue: appSettings.glowingLine = newValue; 55 | value: appSettings.glowingLine 56 | } 57 | CheckableSlider{ 58 | name: qsTr("Screen Curvature") 59 | onNewValue: appSettings.screenCurvature = newValue; 60 | value: appSettings.screenCurvature; 61 | } 62 | CheckableSlider{ 63 | name: qsTr("Ambient Light") 64 | onNewValue: appSettings.ambientLight = newValue; 65 | value: appSettings.ambientLight 66 | enabled: appSettings.framesIndex !== 0 67 | } 68 | CheckableSlider{ 69 | name: qsTr("Flickering") 70 | onNewValue: appSettings.flickering = newValue; 71 | value: appSettings.flickering; 72 | } 73 | CheckableSlider{ 74 | name: qsTr("Horizontal Sync") 75 | onNewValue: appSettings.horizontalSync = newValue; 76 | value: appSettings.horizontalSync; 77 | } 78 | CheckableSlider{ 79 | name: qsTr("RGB Shift") 80 | onNewValue: appSettings.rbgShift = newValue; 81 | value: appSettings.rbgShift; 82 | enabled: appSettings.chromaColor !== 0 83 | } 84 | } 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /app/qml/SettingsGeneralTab.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | import QtQuick.Controls 1.1 23 | import QtQuick.Layouts 1.1 24 | import QtQuick.Dialogs 1.1 25 | 26 | Tab{ 27 | ColumnLayout{ 28 | anchors.fill: parent 29 | GroupBox{ 30 | anchors {left: parent.left; right: parent.right} 31 | Layout.fillWidth: true 32 | Layout.fillHeight: true 33 | title: qsTr("Profile") 34 | RowLayout { 35 | anchors.fill: parent 36 | TableView { 37 | id: profilesView 38 | Layout.fillWidth: true 39 | anchors { top: parent.top; bottom: parent.bottom; } 40 | model: appSettings.profilesList 41 | headerVisible: false 42 | TableViewColumn { 43 | title: qsTr("Profile") 44 | role: "text" 45 | width: parent.width * 0.5 46 | } 47 | onActivated: { 48 | appSettings.loadProfile(row); 49 | } 50 | } 51 | ColumnLayout { 52 | anchors { top: parent.top; bottom: parent.bottom } 53 | Layout.fillWidth: false 54 | Button{ 55 | Layout.fillWidth: true 56 | text: qsTr("New") 57 | onClicked: { 58 | insertname.profileName = ""; 59 | insertname.show() 60 | } 61 | } 62 | Button{ 63 | Layout.fillWidth: true 64 | property alias currentIndex: profilesView.currentRow 65 | enabled: currentIndex >= 0 66 | text: qsTr("Load") 67 | onClicked: { 68 | var index = profilesView.currentRow; 69 | if (index >= 0) 70 | appSettings.loadProfile(index); 71 | } 72 | } 73 | Button{ 74 | Layout.fillWidth: true 75 | text: qsTr("Remove") 76 | property alias currentIndex: profilesView.currentRow 77 | 78 | enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin 79 | onClicked: { 80 | appSettings.profilesList.remove(currentIndex); 81 | profilesView.selection.clear(); 82 | 83 | // TODO This is a very ugly workaround. The view didn't update on Qt 5.3.2. 84 | profilesView.model = 0; 85 | profilesView.model = appSettings.profilesList; 86 | } 87 | } 88 | Item { 89 | // Spacing 90 | Layout.fillHeight: true 91 | } 92 | Button{ 93 | Layout.fillWidth: true 94 | text: qsTr("Import") 95 | onClicked: { 96 | fileDialog.selectExisting = true; 97 | fileDialog.callBack = function (url) {loadFile(url);}; 98 | fileDialog.open(); 99 | } 100 | function loadFile(url) { 101 | try { 102 | if (appSettings.verbose) 103 | console.log("Loading file: " + url); 104 | 105 | var profileObject = JSON.parse(fileIO.read(url)); 106 | var name = profileObject.name; 107 | 108 | if (!name) 109 | throw "Profile doesn't have a name"; 110 | 111 | delete profileObject.name; 112 | 113 | appSettings.appendCustomProfile(name, JSON.stringify(profileObject)); 114 | } catch (err) { 115 | console.log(err); 116 | messageDialog.text = qsTr("There has been an error reading the file.") 117 | messageDialog.open(); 118 | } 119 | } 120 | } 121 | Button{ 122 | property alias currentIndex: profilesView.currentRow 123 | 124 | Layout.fillWidth: true 125 | 126 | text: qsTr("Export") 127 | enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin 128 | onClicked: { 129 | fileDialog.selectExisting = false; 130 | fileDialog.callBack = function (url) {storeFile(url);}; 131 | fileDialog.open(); 132 | } 133 | function storeFile(url) { 134 | try { 135 | var urlString = url.toString(); 136 | 137 | // Fix the extension if it's missing. 138 | var extension = urlString.substring(urlString.length - 5, urlString.length); 139 | var urlTail = (extension === ".json" ? "" : ".json"); 140 | url += urlTail; 141 | 142 | if (true) 143 | console.log("Storing file: " + url); 144 | 145 | var profileObject = appSettings.profilesList.get(currentIndex); 146 | var profileSettings = JSON.parse(profileObject.obj_string); 147 | profileSettings["name"] = profileObject.text; 148 | 149 | var result = fileIO.write(url, JSON.stringify(profileSettings, undefined, 2)); 150 | if (!result) 151 | throw "The file could not be written."; 152 | } catch (err) { 153 | console.log(err); 154 | messageDialog.text = qsTr("There has been an error storing the file.") 155 | messageDialog.open(); 156 | } 157 | } 158 | } 159 | } 160 | } 161 | } 162 | 163 | GroupBox{ 164 | anchors {left: parent.left; right: parent.right} 165 | title: qsTr("Command") 166 | ColumnLayout { 167 | anchors.fill: parent 168 | CheckBox{ 169 | id: useCustomCommand 170 | text: qsTr("Use custom command instead of shell at startup") 171 | checked: appSettings.useCustomCommand 172 | onCheckedChanged: appSettings.useCustomCommand = checked 173 | } 174 | // Workaround for QTBUG-31627 for pre 5.3.0 175 | Binding{ 176 | target: useCustomCommand 177 | property: "checked" 178 | value: appSettings.useCustomCommand 179 | } 180 | TextField{ 181 | id: customCommand 182 | anchors {left: parent.left; right: parent.right} 183 | text: appSettings.customCommand 184 | enabled: useCustomCommand.checked 185 | onEditingFinished: appSettings.customCommand = text 186 | 187 | // Save text even if user forgets to press enter or unfocus 188 | function saveSetting() { 189 | appSettings.customCommand = text; 190 | } 191 | Component.onCompleted: settings_window.closing.connect(saveSetting) 192 | } 193 | } 194 | } 195 | 196 | // DIALOGS //////////////////////////////////////////////////////////////// 197 | InsertNameDialog{ 198 | id: insertname 199 | onNameSelected: { 200 | appSettings.appendCustomProfile(name, appSettings.composeProfileString()); 201 | } 202 | } 203 | MessageDialog { 204 | id: messageDialog 205 | title: qsTr("File Error") 206 | onAccepted: { 207 | messageDialog.close(); 208 | } 209 | } 210 | Loader { 211 | property var callBack 212 | property bool selectExisting: false 213 | id: fileDialog 214 | 215 | sourceComponent: FileDialog{ 216 | nameFilters: ["Json files (*.json)"] 217 | selectMultiple: false 218 | selectFolder: false 219 | selectExisting: fileDialog.selectExisting 220 | onAccepted: callBack(fileUrl); 221 | } 222 | 223 | onSelectExistingChanged: reload() 224 | 225 | function open() { 226 | item.open(); 227 | } 228 | 229 | function reload() { 230 | active = false; 231 | active = true; 232 | } 233 | } 234 | } 235 | } 236 | -------------------------------------------------------------------------------- /app/qml/SettingsPerformanceTab.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | import QtQuick.Controls 1.1 23 | import QtQuick.Layouts 1.1 24 | 25 | import "Components" 26 | 27 | Tab{ 28 | ColumnLayout{ 29 | anchors.fill: parent 30 | GroupBox{ 31 | title: qsTr("General") 32 | Layout.fillWidth: true 33 | anchors.left: parent.left 34 | anchors.right: parent.right 35 | GridLayout{ 36 | anchors.fill: parent 37 | rows: 2 38 | columns: 3 39 | Label{text: qsTr("Effects FPS")} 40 | Slider{ 41 | Layout.fillWidth: true 42 | id: fpsSlider 43 | onValueChanged: { 44 | if (enabled) { 45 | appSettings.fps = value !== 60 ? value + 1 : 0; 46 | } 47 | } 48 | stepSize: 1 49 | enabled: false 50 | Component.onCompleted: { 51 | minimumValue = 0; 52 | maximumValue = 60; 53 | value = appSettings.fps !== 0 ? appSettings.fps - 1 : 60; 54 | enabled = true; 55 | } 56 | } 57 | SizedLabel{text: appSettings.fps !== 0 ? appSettings.fps : qsTr("Max")} 58 | Label{text: qsTr("Texture Quality")} 59 | Slider{ 60 | Layout.fillWidth: true 61 | id: txtslider 62 | onValueChanged: if (enabled) appSettings.windowScaling = value; 63 | stepSize: 0.05 64 | enabled: false 65 | Component.onCompleted: { 66 | minimumValue = 0.25 //Without this value gets set to 0.5 67 | value = appSettings.windowScaling; 68 | enabled = true; 69 | } 70 | } 71 | SizedLabel{text: Math.round(txtslider.value * 100) + "%"} 72 | } 73 | } 74 | GroupBox{ 75 | title: qsTr("Bloom") 76 | Layout.fillWidth: true 77 | anchors.left: parent.left 78 | anchors.right: parent.right 79 | GridLayout{ 80 | id: bloomQualityContainer 81 | anchors.fill: parent 82 | Label{text: qsTr("Bloom Quality")} 83 | Slider{ 84 | Layout.fillWidth: true 85 | id: bloomSlider 86 | onValueChanged: if (enabled) appSettings.bloomQuality = value; 87 | stepSize: 0.05 88 | enabled: false 89 | Component.onCompleted: { 90 | minimumValue = 0.25 91 | value = appSettings.bloomQuality; 92 | enabled = true; 93 | } 94 | } 95 | SizedLabel{text: Math.round(bloomSlider.value * 100) + "%"} 96 | } 97 | } 98 | GroupBox{ 99 | title: qsTr("BurnIn") 100 | Layout.fillWidth: true 101 | anchors.left: parent.left 102 | anchors.right: parent.right 103 | GridLayout{ 104 | id: blurQualityContainer 105 | anchors.fill: parent 106 | 107 | Label{text: qsTr("BurnIn Quality")} 108 | Slider{ 109 | Layout.fillWidth: true 110 | id: burnInSlider 111 | onValueChanged: if (enabled) appSettings.burnInQuality = value; 112 | stepSize: 0.05 113 | enabled: false 114 | Component.onCompleted: { 115 | minimumValue = 0.25 116 | value = appSettings.burnInQuality; 117 | enabled = true; 118 | } 119 | } 120 | SizedLabel{text: Math.round(burnInSlider.value * 100) + "%"} 121 | } 122 | } 123 | GroupBox{ 124 | title: qsTr("Frame") 125 | Layout.fillWidth: true 126 | anchors.left: parent.left 127 | anchors.right: parent.right 128 | CheckBox{ 129 | checked: appSettings._frameReflections 130 | text: qsTr("Frame Reflections") 131 | onCheckedChanged: appSettings._frameReflections = checked 132 | } 133 | } 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /app/qml/SettingsScreenTab.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | import QtQuick.Controls 1.1 23 | import QtQuick.Layouts 1.1 24 | import QtQuick.Dialogs 1.1 25 | 26 | Tab{ 27 | ColumnLayout{ 28 | anchors.fill: parent 29 | GroupBox{ 30 | title: qsTr("Rasterization Mode") 31 | Layout.fillWidth: true 32 | ComboBox { 33 | id: rasterizationBox 34 | property string selectedElement: model[currentIndex] 35 | anchors.fill: parent 36 | model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")] 37 | currentIndex: appSettings.rasterization 38 | onCurrentIndexChanged: { 39 | appSettings.rasterization = currentIndex 40 | } 41 | } 42 | } 43 | GroupBox{ 44 | title: qsTr("Lights") 45 | Layout.fillWidth: true 46 | GridLayout{ 47 | anchors.fill: parent 48 | columns: 2 49 | Label{ text: qsTr("Brightness") } 50 | SimpleSlider{ 51 | onValueChanged: appSettings.brightness = value 52 | value: appSettings.brightness 53 | } 54 | Label{ text: qsTr("Contrast") } 55 | SimpleSlider{ 56 | onValueChanged: appSettings.contrast = value 57 | value: appSettings.contrast 58 | } 59 | Label{ text: qsTr("Opacity") } 60 | SimpleSlider{ 61 | onValueChanged: appSettings.windowOpacity = value 62 | value: appSettings.windowOpacity 63 | } 64 | } 65 | } 66 | GroupBox{ 67 | title: qsTr("Frame") 68 | Layout.fillWidth: true 69 | RowLayout{ 70 | anchors.fill: parent 71 | ComboBox{ 72 | id: framescombobox 73 | Layout.fillWidth: true 74 | model: appSettings.framesList 75 | currentIndex: appSettings.framesIndex 76 | onActivated: { 77 | appSettings.frameName = appSettings.framesList.get(index).name; 78 | } 79 | function updateIndex(){ 80 | var name = appSettings.frameName; 81 | var index = appSettings.getFrameIndexByName(name); 82 | if (index !== undefined) 83 | currentIndex = index; 84 | } 85 | Component.onCompleted: updateIndex(); 86 | Connections { 87 | target: appSettings 88 | onFrameNameChanged: framescombobox.updateIndex(); 89 | } 90 | } 91 | } 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /app/qml/SettingsTerminalTab.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | import QtQuick.Controls 1.1 23 | import QtQuick.Layouts 1.1 24 | 25 | import "Components" 26 | 27 | Tab{ 28 | ColumnLayout{ 29 | anchors.fill: parent 30 | GroupBox{ 31 | property var rasterization: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")][appSettings.rasterization] 32 | title: qsTr("Font" + "(" + rasterization + ")") 33 | anchors { left: parent.left; right: parent.right } 34 | GridLayout{ 35 | anchors.fill: parent 36 | columns: 2 37 | Label{ text: qsTr("Name") } 38 | ComboBox{ 39 | id: fontChanger 40 | Layout.fillWidth: true 41 | model: appSettings.fontlist 42 | onActivated: { 43 | var name = appSettings.fontlist.get(index).name; 44 | appSettings.fontNames[appSettings.rasterization] = name; 45 | appSettings.handleFontChanged(); 46 | } 47 | function updateIndex(){ 48 | var name = appSettings.fontNames[appSettings.rasterization]; 49 | var index = appSettings.getIndexByName(name); 50 | if (index !== undefined) 51 | currentIndex = index; 52 | } 53 | Connections{ 54 | target: appSettings 55 | onTerminalFontChanged: fontChanger.updateIndex(); 56 | } 57 | Component.onCompleted: updateIndex(); 58 | } 59 | Label{ text: qsTr("Scaling") } 60 | RowLayout{ 61 | Layout.fillWidth: true 62 | Slider{ 63 | Layout.fillWidth: true 64 | id: fontScalingChanger 65 | onValueChanged: if(enabled) appSettings.fontScaling = value 66 | stepSize: 0.05 67 | enabled: false // Another trick to fix initial bad behavior. 68 | Component.onCompleted: { 69 | minimumValue = appSettings.minimumFontScaling; 70 | maximumValue = appSettings.maximumFontScaling; 71 | value = appSettings.fontScaling; 72 | enabled = true; 73 | } 74 | Connections{ 75 | target: appSettings 76 | onFontScalingChanged: fontScalingChanger.value = appSettings.fontScaling; 77 | } 78 | } 79 | SizedLabel{ 80 | text: Math.round(fontScalingChanger.value * 100) + "%" 81 | } 82 | } 83 | Label{ text: qsTr("Font Width") } 84 | RowLayout{ 85 | Layout.fillWidth: true 86 | Slider{ 87 | Layout.fillWidth: true 88 | id: widthChanger 89 | onValueChanged: appSettings.fontWidth = value; 90 | value: appSettings.fontWidth 91 | stepSize: 0.05 92 | Component.onCompleted: { 93 | // This is needed to avoid unnecessary chnaged events. 94 | minimumValue = 0.5; 95 | maximumValue = 1.5; 96 | } 97 | } 98 | SizedLabel{ 99 | text: Math.round(widthChanger.value * 100) + "%" 100 | } 101 | } 102 | } 103 | } 104 | GroupBox{ 105 | title: qsTr("Colors") 106 | anchors { left: parent.left; right: parent.right } 107 | ColumnLayout{ 108 | anchors.fill: parent 109 | ColumnLayout{ 110 | Layout.fillWidth: true 111 | CheckableSlider{ 112 | name: qsTr("Chroma Color") 113 | onNewValue: appSettings.chromaColor = newValue 114 | value: appSettings.chromaColor 115 | } 116 | CheckableSlider{ 117 | name: qsTr("Saturation Color") 118 | onNewValue: appSettings.saturationColor = newValue 119 | value: appSettings.saturationColor 120 | enabled: appSettings.chromaColor !== 0 121 | } 122 | } 123 | RowLayout{ 124 | Layout.fillWidth: true 125 | ColorButton{ 126 | name: qsTr("Font") 127 | height: 50 128 | Layout.fillWidth: true 129 | onColorSelected: appSettings._fontColor = color; 130 | color: appSettings._fontColor 131 | } 132 | ColorButton{ 133 | name: qsTr("Background") 134 | height: 50 135 | Layout.fillWidth: true 136 | onColorSelected: appSettings._backgroundColor = color; 137 | color: appSettings._backgroundColor 138 | } 139 | } 140 | } 141 | } 142 | } 143 | } 144 | -------------------------------------------------------------------------------- /app/qml/SettingsWindow.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | import QtQuick.Controls 1.1 23 | import QtQuick.Window 2.1 24 | import QtQuick.Layouts 1.1 25 | import QtQuick.Dialogs 1.1 26 | 27 | Window { 28 | id: settings_window 29 | title: qsTr("Settings") 30 | width: 580 31 | height: 400 32 | 33 | property int tabmargins: 15 34 | 35 | TabView{ 36 | id: tabView 37 | anchors.fill: parent 38 | anchors.margins: 10 39 | SettingsGeneralTab{ 40 | id: generalTab 41 | title: qsTr("General") 42 | anchors.fill: parent 43 | anchors.margins: tabmargins 44 | } 45 | SettingsScreenTab{ 46 | id: screenTab 47 | title: qsTr("Screen") 48 | anchors.fill: parent 49 | anchors.margins: tabmargins 50 | } 51 | SettingsTerminalTab{ 52 | id: terminalTab 53 | title: qsTr("Terminal") 54 | anchors.fill: parent 55 | anchors.margins: tabmargins 56 | } 57 | SettingsEffectsTab{ 58 | id: effectsTab 59 | title: qsTr("Effects") 60 | anchors.fill: parent 61 | anchors.margins: tabmargins 62 | } 63 | SettingsPerformanceTab{ 64 | id: performanceTab 65 | title: qsTr("Performance") 66 | anchors.fill: parent 67 | anchors.margins: tabmargins 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /app/qml/ShaderTerminal.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | import QtGraphicalEffects 1.0 23 | 24 | import "utils.js" as Utils 25 | 26 | ShaderEffect { 27 | property ShaderEffectSource source 28 | property ShaderEffectSource blurredSource 29 | property ShaderEffectSource bloomSource 30 | 31 | property color fontColor: appSettings.fontColor 32 | property color backgroundColor: appSettings.backgroundColor 33 | property real bloom: appSettings.bloom * 2.5 34 | 35 | property real burnIn: appSettings.burnIn 36 | 37 | property real jitter: appSettings.jitter * 0.007 38 | property real staticNoise: appSettings.staticNoise 39 | property size scaleNoiseSize: Qt.size((width) / (noiseTexture.width * appSettings.windowScaling * appSettings.fontScaling), 40 | (height) / (noiseTexture.height * appSettings.windowScaling * appSettings.fontScaling)) 41 | 42 | property real screenCurvature: appSettings.screenCurvature 43 | property real glowingLine: appSettings.glowingLine * 0.2 44 | 45 | property real chromaColor: appSettings.chromaColor; 46 | 47 | property real rbgShift: appSettings.rbgShift * 0.2 48 | 49 | property real flickering: appSettings.flickering 50 | property real horizontalSync: appSettings.horizontalSync * 0.5 51 | 52 | property bool frameReflections: appSettings.frameReflections 53 | 54 | property real disp_top: (frame.displacementTop * appSettings.windowScaling) / height 55 | property real disp_bottom: (frame.displacementBottom * appSettings.windowScaling) / height 56 | property real disp_left: (frame.displacementLeft * appSettings.windowScaling) / width 57 | property real disp_right: (frame.displacementRight * appSettings.windowScaling) / width 58 | 59 | property real screen_brightness: appSettings.brightness * 1.5 + 0.5 60 | 61 | // This is the average value of the abs(sin) function. Needed to avoid aliasing. 62 | readonly property real absSinAvg: 0.63661828335466886 63 | property size rasterizationSmooth: Qt.size( 64 | Utils.clamp(2.0 * virtual_resolution.width / (width * devicePixelRatio), 0.0, 1.0), 65 | Utils.clamp(2.0 * virtual_resolution.height / (height * devicePixelRatio), 0.0, 1.0)) 66 | 67 | property real dispX 68 | property real dispY 69 | property size virtual_resolution 70 | 71 | TimeManager{ 72 | id: timeManager 73 | enableTimer: terminalWindow.visible 74 | } 75 | 76 | property alias time: timeManager.time 77 | property ShaderEffectSource noiseSource: noiseShaderSource 78 | 79 | // If something goes wrong activate the fallback version of the shader. 80 | property bool fallBack: false 81 | 82 | blending: false 83 | 84 | //Smooth random texture used for flickering effect. 85 | Image{ 86 | id: noiseTexture 87 | source: "images/allNoise512.png" 88 | width: 512 89 | height: 512 90 | fillMode: Image.Tile 91 | visible: false 92 | } 93 | ShaderEffectSource{ 94 | id: noiseShaderSource 95 | sourceItem: noiseTexture 96 | wrapMode: ShaderEffectSource.Repeat 97 | visible: false 98 | smooth: true 99 | } 100 | 101 | //Print the number with a reasonable precision for the shader. 102 | function str(num){ 103 | return num.toFixed(8); 104 | } 105 | 106 | vertexShader: " 107 | uniform highp mat4 qt_Matrix; 108 | uniform highp float time; 109 | 110 | uniform highp float disp_left; 111 | uniform highp float disp_right; 112 | uniform highp float disp_top; 113 | uniform highp float disp_bottom; 114 | 115 | attribute highp vec4 qt_Vertex; 116 | attribute highp vec2 qt_MultiTexCoord0; 117 | 118 | varying highp vec2 qt_TexCoord0;" + 119 | 120 | (!fallBack ? " 121 | uniform sampler2D noiseSource;" : "") + 122 | 123 | (!fallBack && flickering !== 0.0 ?" 124 | varying lowp float brightness; 125 | uniform lowp float flickering;" : "") + 126 | (!fallBack && horizontalSync !== 0.0 ?" 127 | uniform lowp float horizontalSync; 128 | varying lowp float distortionScale; 129 | varying lowp float distortionFreq;" : "") + 130 | 131 | " 132 | void main() { 133 | qt_TexCoord0.x = (qt_MultiTexCoord0.x - disp_left) / (1.0 - disp_left - disp_right); 134 | qt_TexCoord0.y = (qt_MultiTexCoord0.y - disp_top) / (1.0 - disp_top - disp_bottom); 135 | vec2 coords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));" + 136 | 137 | (!fallBack && (flickering !== 0.0 || horizontalSync !== 0.0) ? 138 | "vec4 initialNoiseTexel = texture2D(noiseSource, coords);" 139 | : "") + 140 | (!fallBack && flickering !== 0.0 ? " 141 | brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;" 142 | : "") + 143 | 144 | (!fallBack && horizontalSync !== 0.0 ? " 145 | float randval = horizontalSync - initialNoiseTexel.r; 146 | distortionScale = step(0.0, randval) * randval * horizontalSync; 147 | distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);" 148 | : "") + 149 | 150 | "gl_Position = qt_Matrix * qt_Vertex; 151 | }" 152 | 153 | fragmentShader: " 154 | #ifdef GL_ES 155 | precision mediump float; 156 | #endif 157 | 158 | uniform sampler2D source; 159 | uniform highp float qt_Opacity; 160 | uniform highp float time; 161 | varying highp vec2 qt_TexCoord0; 162 | 163 | uniform highp vec4 fontColor; 164 | uniform highp vec4 backgroundColor; 165 | uniform lowp float screen_brightness; 166 | 167 | uniform highp vec2 virtual_resolution; 168 | uniform highp vec2 rasterizationSmooth; 169 | uniform highp float dispX; 170 | uniform highp float dispY;" + 171 | 172 | (bloom !== 0 ? " 173 | uniform highp sampler2D bloomSource; 174 | uniform lowp float bloom;" : "") + 175 | (burnIn !== 0 ? " 176 | uniform sampler2D blurredSource;" : "") + 177 | (staticNoise !== 0 ? " 178 | uniform highp float staticNoise;" : "") + 179 | (((staticNoise !== 0 || jitter !== 0 || rbgShift) 180 | ||(fallBack && (flickering || horizontalSync))) ? " 181 | uniform lowp sampler2D noiseSource; 182 | uniform highp vec2 scaleNoiseSize;" : "") + 183 | (screenCurvature !== 0 ? " 184 | uniform highp float screenCurvature;" : "") + 185 | (glowingLine !== 0 ? " 186 | uniform highp float glowingLine;" : "") + 187 | (chromaColor !== 0 ? " 188 | uniform lowp float chromaColor;" : "") + 189 | (jitter !== 0 ? " 190 | uniform lowp float jitter;" : "") + 191 | (rbgShift !== 0 ? " 192 | uniform lowp float rbgShift;" : "") + 193 | 194 | (fallBack && horizontalSync !== 0 ? " 195 | uniform lowp float horizontalSync;" : "") + 196 | (fallBack && flickering !== 0.0 ?" 197 | uniform lowp float flickering;" : "") + 198 | (!fallBack && flickering !== 0 ? " 199 | varying lowp float brightness;" 200 | : "") + 201 | (!fallBack && horizontalSync !== 0 ? " 202 | varying lowp float distortionScale; 203 | varying lowp float distortionFreq;" : "") + 204 | 205 | (glowingLine !== 0 ? " 206 | float randomPass(vec2 coords){ 207 | return fract(smoothstep(-120.0, 0.0, coords.y - (virtual_resolution.y + 120.0) * fract(time * 0.00015))); 208 | }" : "") + 209 | 210 | "highp float getScanlineIntensity(vec2 coords) { 211 | highp float result = 1.0;" + 212 | 213 | (appSettings.rasterization != appSettings.no_rasterization ? 214 | "float val = abs(sin(coords.y * virtual_resolution.y * "+Math.PI+")); 215 | result *= mix(val, " + absSinAvg + ", rasterizationSmooth.y);" : "") + 216 | (appSettings.rasterization == appSettings.pixel_rasterization ? 217 | "val = abs(sin(coords.x * virtual_resolution.x * "+Math.PI+")); 218 | result *= mix(val, " + absSinAvg + ", rasterizationSmooth.x);" : "") + " 219 | 220 | return result; 221 | } 222 | 223 | float rgb2grey(vec3 v){ 224 | return dot(v, vec3(0.21, 0.72, 0.04)); 225 | }" + 226 | 227 | "void main() {" + 228 | "vec2 cc = vec2(0.5) - qt_TexCoord0;" + 229 | "float distance = length(cc);" + 230 | 231 | //FallBack if there are problems 232 | (fallBack && (flickering !== 0.0 || horizontalSync !== 0.0) ? 233 | "vec2 initialCoords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0))); 234 | vec4 initialNoiseTexel = texture2D(noiseSource, initialCoords);" 235 | : "") + 236 | (fallBack && flickering !== 0.0 ? " 237 | float brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;" 238 | : "") + 239 | (fallBack && horizontalSync !== 0.0 ? " 240 | float randval = horizontalSync - initialNoiseTexel.r; 241 | float distortionScale = step(0.0, randval) * randval * horizontalSync; 242 | float distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);" 243 | : "") + 244 | 245 | (staticNoise ? " 246 | float noise = staticNoise;" : "") + 247 | 248 | (screenCurvature !== 0 ? " 249 | float distortion = dot(cc, cc) * screenCurvature; 250 | vec2 staticCoords = (qt_TexCoord0 - cc * (1.0 + distortion) * distortion);" 251 | :" 252 | vec2 staticCoords = qt_TexCoord0;") + 253 | 254 | "vec2 coords = staticCoords;" + 255 | 256 | (horizontalSync !== 0 ? " 257 | float dst = sin((coords.y + time * 0.001) * distortionFreq); 258 | coords.x += dst * distortionScale;" + 259 | (staticNoise ? " 260 | noise += distortionScale * 7.0;" : "") 261 | : "") + 262 | 263 | (jitter !== 0 || staticNoise !== 0 ? 264 | "vec4 noiseTexel = texture2D(noiseSource, scaleNoiseSize * coords + vec2(fract(time / 51.0), fract(time / 237.0)));" 265 | : "") + 266 | 267 | (jitter !== 0 ? " 268 | vec2 offset = vec2(noiseTexel.b, noiseTexel.a) - vec2(0.5); 269 | vec2 txt_coords = coords + offset * jitter;" 270 | : "vec2 txt_coords = coords;") + 271 | 272 | "float color = 0.0;" + 273 | 274 | (staticNoise !== 0 ? " 275 | float noiseVal = noiseTexel.a; 276 | color += noiseVal * noise * (1.0 - distance * 1.3);" : "") + 277 | 278 | (glowingLine !== 0 ? " 279 | color += randomPass(coords * virtual_resolution) * glowingLine;" : "") + 280 | 281 | "vec3 txt_color = texture2D(source, txt_coords).rgb;" + 282 | 283 | (burnIn !== 0 ? " 284 | vec4 txt_blur = texture2D(blurredSource, txt_coords); 285 | txt_color = txt_color + txt_blur.rgb * txt_blur.a;" 286 | : "") + 287 | 288 | "float greyscale_color = rgb2grey(txt_color) + color;" + 289 | 290 | (chromaColor !== 0 ? 291 | (rbgShift !== 0 ? " 292 | float rgb_noise = abs(texture2D(noiseSource, vec2(fract(time/(1024.0 * 256.0)), fract(time/(1024.0*1024.0)))).a - 0.5); 293 | float rcolor = texture2D(source, txt_coords + vec2(0.1, 0.0) * rbgShift * rgb_noise).r; 294 | float bcolor = texture2D(source, txt_coords - vec2(0.1, 0.0) * rbgShift * rgb_noise).b; 295 | txt_color.r = rcolor; 296 | txt_color.b = bcolor; 297 | greyscale_color = 0.33 * (rcolor + bcolor);" : "") + 298 | 299 | "vec3 mixedColor = mix(fontColor.rgb, txt_color * fontColor.rgb, chromaColor); 300 | vec3 finalBackColor = mix(backgroundColor.rgb, mixedColor, greyscale_color); 301 | vec3 finalColor = mix(finalBackColor, fontColor.rgb, color).rgb;" 302 | : 303 | "vec3 finalColor = mix(backgroundColor.rgb, fontColor.rgb, greyscale_color);") + 304 | 305 | "finalColor *= getScanlineIntensity(coords);" + 306 | 307 | (bloom !== 0 ? 308 | "vec4 bloomFullColor = texture2D(bloomSource, coords); 309 | vec3 bloomColor = bloomFullColor.rgb; 310 | float bloomAlpha = bloomFullColor.a;" + 311 | (chromaColor !== 0 ? 312 | "bloomColor = fontColor.rgb * mix(vec3(rgb2grey(bloomColor)), bloomColor, chromaColor);" 313 | : 314 | "bloomColor = fontColor.rgb * rgb2grey(bloomColor);") + 315 | "finalColor += bloomColor * bloom * bloomAlpha;" 316 | : "") + 317 | 318 | "finalColor *= smoothstep(-dispX, 0.0, staticCoords.x) - smoothstep(1.0, 1.0 + dispX, staticCoords.x); 319 | finalColor *= smoothstep(-dispY, 0.0, staticCoords.y) - smoothstep(1.0, 1.0 + dispY, staticCoords.y);" + 320 | 321 | (flickering !== 0 ? " 322 | finalColor *= brightness;" : "") + 323 | 324 | "gl_FragColor = vec4(finalColor * screen_brightness, qt_Opacity);" + 325 | "}" 326 | 327 | onStatusChanged: { 328 | // Print warning messages 329 | if (log) 330 | console.log(log); 331 | 332 | // Activate fallback mode 333 | if (status == ShaderEffect.Error) { 334 | fallBack = true; 335 | } 336 | } 337 | } 338 | -------------------------------------------------------------------------------- /app/qml/SimpleSlider.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | import QtQuick.Controls 1.1 23 | import QtQuick.Layouts 1.1 24 | 25 | import "Components" 26 | 27 | RowLayout { 28 | property alias value: slider.value 29 | property alias stepSize: slider.stepSize 30 | property alias minimumValue: slider.minimumValue 31 | property alias maximumValue: slider.maximumValue 32 | property real maxMultiplier: 100 33 | 34 | id: setting_component 35 | spacing: 10 36 | Slider{ 37 | id: slider 38 | stepSize: parent.stepSize 39 | Layout.fillWidth: true 40 | } 41 | SizedLabel{ 42 | text: Math.round(value * maxMultiplier) + "%" 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/qml/SizeOverlay.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | 23 | Rectangle{ 24 | property size terminalSize 25 | property real topOpacity: 0.6 26 | width: textSize.width * 2 27 | height: textSize.height * 2 28 | radius: 5 29 | border.width: 2 30 | border.color: "white" 31 | color: "black" 32 | opacity: sizetimer.running ? 0.6 : 0.0 33 | 34 | Behavior on opacity{NumberAnimation{duration: 200}} 35 | 36 | onTerminalSizeChanged: sizetimer.restart() 37 | 38 | Text{ 39 | id: textSize 40 | anchors.centerIn: parent 41 | color: "white" 42 | text: terminalSize.width + "x" + terminalSize.height 43 | } 44 | Timer{ 45 | id: sizetimer 46 | interval: 1000 47 | running: false 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/qml/Storage.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | import QtQuick.LocalStorage 2.0 23 | 24 | QtObject { 25 | property bool initialized: false 26 | 27 | function getDatabase() { 28 | return LocalStorage.openDatabaseSync("coolretroterm", "1.0", "StorageDatabase", 100000); 29 | } 30 | 31 | function initialize() { 32 | var db = getDatabase(); 33 | db.transaction( 34 | function(tx) { 35 | tx.executeSql('CREATE TABLE IF NOT EXISTS settings(setting TEXT UNIQUE, value TEXT)'); 36 | }); 37 | 38 | initialized = true; 39 | } 40 | 41 | function setSetting(setting, value) { 42 | if(!initialized) initialize(); 43 | 44 | var db = getDatabase(); 45 | var res = ""; 46 | db.transaction(function(tx) { 47 | var rs = tx.executeSql('INSERT OR REPLACE INTO settings VALUES (?,?);', [setting,value]); 48 | //console.log(rs.rowsAffected) 49 | if (rs.rowsAffected > 0) { 50 | res = "OK"; 51 | } else { 52 | res = "Error"; 53 | } 54 | } 55 | ); 56 | // The function returns “OK” if it was successful, or “Error” if it wasn't 57 | return res; 58 | } 59 | 60 | function getSetting(setting) { 61 | if(!initialized) initialize(); 62 | var db = getDatabase(); 63 | var res=""; 64 | db.transaction(function(tx) { 65 | var rs = tx.executeSql('SELECT value FROM settings WHERE setting=?;', [setting]); 66 | if (rs.rows.length > 0) { 67 | res = rs.rows.item(0).value; 68 | } else { 69 | res = undefined; 70 | } 71 | }) 72 | return res 73 | } 74 | 75 | function dropSettings(){ 76 | var db = getDatabase(); 77 | db.transaction( 78 | function(tx) { 79 | tx.executeSql('DROP TABLE settings'); 80 | }); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /app/qml/TerminalContainer.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.2 2 | import QtGraphicalEffects 1.0 3 | 4 | import "utils.js" as Utils 5 | 6 | ShaderTerminal{ 7 | property alias title: terminal.title 8 | property alias terminalSize: terminal.terminalSize 9 | 10 | id: mainShader 11 | opacity: appSettings.windowOpacity * 0.3 + 0.7 12 | 13 | blending: false 14 | 15 | source: terminal.mainSource 16 | blurredSource: terminal.blurredSource 17 | dispX: (12 / width) * appSettings.windowScaling 18 | dispY: (12 / height) * appSettings.windowScaling 19 | virtual_resolution: terminal.virtualResolution 20 | 21 | Loader{ 22 | id: frame 23 | anchors.fill: parent 24 | 25 | property real displacementLeft: item ? item.displacementLeft : 0 26 | property real displacementTop: item ? item.displacementTop : 0 27 | property real displacementRight: item ? item.displacementRight : 0 28 | property real displacementBottom: item ? item.displacementBottom : 0 29 | 30 | asynchronous: true 31 | visible: status === Loader.Ready 32 | 33 | z: 2.1 34 | source: appSettings.frameSource 35 | } 36 | 37 | PreprocessedTerminal{ 38 | id: terminal 39 | anchors.fill: parent 40 | } 41 | 42 | // EFFECTS //////////////////////////////////////////////////////////////// 43 | 44 | Loader{ 45 | id: bloomEffectLoader 46 | active: appSettings.bloom 47 | asynchronous: true 48 | width: parent.width * appSettings.bloomQuality 49 | height: parent.height * appSettings.bloomQuality 50 | 51 | sourceComponent: FastBlur{ 52 | radius: Utils.lint(16, 48, appSettings.bloomQuality * appSettings.windowScaling); 53 | source: terminal.mainSource 54 | transparentBorder: true 55 | } 56 | } 57 | Loader{ 58 | id: bloomSourceLoader 59 | active: appSettings.bloom !== 0 60 | asynchronous: true 61 | sourceComponent: ShaderEffectSource{ 62 | id: _bloomEffectSource 63 | sourceItem: bloomEffectLoader.item 64 | hideSource: true 65 | smooth: true 66 | visible: false 67 | } 68 | } 69 | 70 | bloomSource: bloomSourceLoader.item 71 | 72 | // This shader might be useful in the future. Since we used it only for a couple 73 | // of calculations is probably best to move those in the main shader. If in the future 74 | // we need to store another fullScreen channel this might be handy. 75 | 76 | // ShaderEffect { 77 | // id: rasterizationEffect 78 | // width: parent.width 79 | // height: parent.height 80 | // property real outColor: 0.0 81 | // property real dispX: (5 / width) * appSettings.windowScaling 82 | // property real dispY: (5 / height) * appSettings.windowScaling 83 | // property size virtual_resolution: terminal.virtualResolution 84 | 85 | // blending: false 86 | 87 | // fragmentShader: 88 | // "uniform lowp float qt_Opacity;" + 89 | 90 | // "varying highp vec2 qt_TexCoord0; 91 | // uniform highp vec2 virtual_resolution; 92 | // uniform highp float dispX; 93 | // uniform highp float dispY; 94 | // uniform mediump float outColor; 95 | 96 | // highp float getScanlineIntensity(vec2 coords) { 97 | // highp float result = 1.0;" + 98 | 99 | // (appSettings.rasterization != appSettings.no_rasterization ? 100 | // "result *= abs(sin(coords.y * virtual_resolution.y * "+Math.PI+"));" : "") + 101 | // (appSettings.rasterization == appSettings.pixel_rasterization ? 102 | // "result *= abs(sin(coords.x * virtual_resolution.x * "+Math.PI+"));" : "") + " 103 | 104 | // return result; 105 | // }" + 106 | 107 | // "void main() {" + 108 | // "highp float color = getScanlineIntensity(qt_TexCoord0);" + 109 | 110 | // "float distance = length(vec2(0.5) - qt_TexCoord0);" + 111 | // "color = mix(color, 0.0, 1.2 * distance * distance);" + 112 | 113 | // "color *= outColor + smoothstep(0.00, dispX, qt_TexCoord0.x) * (1.0 - outColor);" + 114 | // "color *= outColor + smoothstep(0.00, dispY, qt_TexCoord0.y) * (1.0 - outColor);" + 115 | // "color *= outColor + (1.0 - smoothstep(1.00 - dispX, 1.00, qt_TexCoord0.x)) * (1.0 - outColor);" + 116 | // "color *= outColor + (1.0 - smoothstep(1.00 - dispY, 1.00, qt_TexCoord0.y)) * (1.0 - outColor);" + 117 | 118 | // "gl_FragColor.a = color;" + 119 | // "}" 120 | 121 | // onStatusChanged: if (log) console.log(log) //Print warning messages 122 | // } 123 | 124 | // rasterizationSource: ShaderEffectSource{ 125 | // id: rasterizationEffectSource 126 | // sourceItem: rasterizationEffect 127 | // hideSource: true 128 | // smooth: true 129 | // wrapMode: ShaderEffectSource.ClampToEdge 130 | // visible: false 131 | // } 132 | } 133 | -------------------------------------------------------------------------------- /app/qml/TimeManager.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | 23 | Timer{ 24 | default property bool enableTimer: false 25 | property real time 26 | 27 | NumberAnimation on time { 28 | from: 0 29 | to: 100000 30 | running: appSettings.fps === 0 && enableTimer 31 | duration: 100000 32 | loops: Animation.Infinite 33 | } 34 | 35 | onTriggered: time += interval 36 | running: appSettings.fps !== 0 && enableTimer 37 | interval: Math.round(1000 / appSettings.fps) 38 | repeat: true 39 | } 40 | -------------------------------------------------------------------------------- /app/qml/fonts/1971-ibm-3278/3270Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1971-ibm-3278/3270Medium.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1971-ibm-3278/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-2016, Ricardo Banffy. 2 | Copyright (c) 1993-2011, Paul Mattes. 3 | Copyright (c) 2004-2005, Don Russell. 4 | Copyright (c) 2004, Dick Altenbern. 5 | Copyright (c) 1990, Jeff Sparkes. 6 | Copyright (c) 1989, Georgia Tech Research Corporation (GTRC), Atlanta, GA 30332. 7 | All rights reserved. 8 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 9 | 10 | Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 11 | 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. 12 | Neither the names of Ricardo Banffy, Paul Mattes, Don Russell, Dick Altenbern, Jeff Sparkes, GTRC nor the names of their contributors may be used to endorse or promote products derived from this software without specific prior written permission. 13 | THIS SOFTWARE IS PROVIDED BY RICARDO BANFFY, PAUL MATTES, DON RUSSELL, DICK ALTENBERN, JEFF SPARKES AND GTRC "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 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. 14 | 15 | 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. 16 | -------------------------------------------------------------------------------- /app/qml/fonts/1971-ibm-3278/README.md: -------------------------------------------------------------------------------- 1 | 3270font: A font for the nostalgic 2 | ================================== 3 | 4 | ![Travis-CI](https://api.travis-ci.org/rbanffy/3270font.svg) 5 | 6 | ![Screenshot](https://raw.githubusercontent.com/wiki/rbanffy/3270font/emacs.png) 7 | 8 | ![Sample](https://raw.githubusercontent.com/wiki/rbanffy/3270font/3270Medium_sample.png) 9 | 10 | A little bit of history 11 | ----------------------- 12 | 13 | This font is derived from the x3270 font, which, in turn, was 14 | translated from the one in Georgia Tech's 3270tool, which was itself 15 | hand-copied from a 3270 series terminal. I built it because I felt 16 | terminals deserve to be pretty. The .sfd font file contains a x3270 17 | bitmap font that was used for guidance. 18 | 19 | ![Using with the cool-old-tern (now cool-retro-term) terminal program] 20 | (https://raw.githubusercontent.com/wiki/rbanffy/3270font/cool-retro-term.png) 21 | 22 | Getting it 23 | ---------- 24 | 25 | If you are running Debian or Ubuntu and you don't want to mess with 26 | building your font files, you can simply `apt-get install fonts-3270` 27 | (It's available from the Debian and Ubuntu package repos at 28 | https://packages.debian.org/sid/fonts/fonts-3270 and 29 | http://packages.ubuntu.com/xenial/fonts/fonts-3270, although the 30 | packaged version may not be the latest version, but it's good enough for 31 | most purposes. For those who don't have the luxury of a proper 32 | system-managed package, Adobe Type 1, TTF, OTF and WOFF versions are 33 | available for download on 34 | http://s3.amazonaws.com/3270font/3270_fonts_ef53755.zip (although this 35 | URL may not always reflect the latest version). 36 | 37 | ![ASCII is so 60's] 38 | (https://raw.githubusercontent.com/wiki/rbanffy/3270font/cyrillic.png) 39 | 40 | The format 41 | ---------- 42 | 43 | The "source" file is edited using FontForge. You'll need it if you want 44 | to generate fonts for your platform. On most civilized operating 45 | systems, you can simply `apt-get install fontforge`, `yum install 46 | fontforge` or even `port install fontforge`. On others, you may need to 47 | grab your copy from http://fontforge.org/. I encourage you to drop by 48 | and read the tutorials. 49 | 50 | ![Powerline-shell compatible!] 51 | (https://raw.githubusercontent.com/wiki/rbanffy/3270font/powerline.png) 52 | 53 | ![Using it on OSX (don't forget to turn antialiasing on)] 54 | (https://raw.githubusercontent.com/wiki/rbanffy/3270font/osx_terminal.png) 55 | 56 | If you are running Windows, you'll probably need something like 57 | Cygwin, but, in the end, the font works correctly (with some very 58 | minor hinting issues). 59 | 60 | ![Works on Windows] 61 | (https://raw.githubusercontent.com/wiki/rbanffy/3270font/windows_7.png) 62 | 63 | Generating usable font files 64 | ---------------------------- 65 | 66 | The easiest way to generate the font files your computer can use is to 67 | run `make all` (if you are running Ubuntu or Debian, `make install` will 68 | install them too). Using `make help` will offer a handy list of options. 69 | 70 | The script `generate_derived.pe` calls FontForge and generates 71 | PostScript, OTF, TTF and WOFF versions of the base font, as well as a 72 | slightly more condensed .sfd file with the base font narrowed to 488 73 | units, with no glyph rescaling (or cropping - we need to fix that) and 74 | its corresponding PostScript, TTF, OTF and WOFF versions. 75 | 76 | ![For your favorite editor] 77 | (https://raw.githubusercontent.com/wiki/rbanffy/3270font/symbols.png) 78 | 79 | Contributing 80 | ------------ 81 | 82 | I fear GitHub's pull-request mechanism may not be very 83 | FontForge-friendly. If you want to contribute (there are a lot of 84 | missing glyphs, such as the APL set and most non-latin alphabets which 85 | most likely were never built into 3270 terminals), the best workflow 86 | would be to make add the encoding slots (if needed), add/make the 87 | changes, reencode it in "Unicode, Full", compact it and validate 88 | it. Check if the `git diff` command gives out something sensible (does 89 | not change things you didn't intend to) and make a pull request. If, in 90 | doubt, get in touch and we will figure out how to do it right. 91 | 92 | Known problems 93 | -------------- 94 | 95 | Not all symbols in the 3270 charset have Unicode counterparts. When 96 | possible, they are duplicated in the Unicode space. The 3270-only 97 | symbols are at the end of the font, along with some glyphs useful for 98 | building others. 99 | 100 | Please refer to http://x3270.bgp.nu/Charset.html for a complete map. 101 | -------------------------------------------------------------------------------- /app/qml/fonts/1977-apple2/FreeLicense.txt: -------------------------------------------------------------------------------- 1 | KREATIVE SOFTWARE RELAY FONTS FREE USE LICENSE 2 | version 1.2f 3 | 4 | Permission is hereby granted, free of charge, to any person or entity (the "User") obtaining a copy of the included font files (the "Software") produced by Kreative Software, to utilize, display, embed, or redistribute the Software, subject to the following conditions: 5 | 6 | 1. The User may not sell copies of the Software for a fee. 7 | 8 | 1a. The User may give away copies of the Software free of charge provided this license and any documentation is included verbatim and credit is given to Kreative Korporation or Kreative Software. 9 | 10 | 2. The User may not modify, reverse-engineer, or create any derivative works of the Software. 11 | 12 | 3. Any Software carrying the following font names or variations thereof is not covered by this license and may not be used under the terms of this license: Jewel Hill, Miss Diode n Friends, This is Beckie's font! 13 | 14 | 3a. Any Software carrying a font name ending with the string "Pro CE" is not covered by this license and may not be used under the terms of this license. 15 | 16 | 4. This license becomes null and void if any of the above conditions are not met. 17 | 18 | 5. Kreative Software reserves the right to change this license at any time without notice. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE SOFTWARE OR FROM OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /app/qml/fonts/1977-apple2/PRNumber3.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1977-apple2/PRNumber3.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1977-apple2/PrintChar21.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1977-apple2/PrintChar21.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1977-commodore-pet/COMMODORE_PET.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1977-commodore-pet/COMMODORE_PET.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1977-commodore-pet/COMMODORE_PET_128.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1977-commodore-pet/COMMODORE_PET_128.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1977-commodore-pet/COMMODORE_PET_128_2y.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1977-commodore-pet/COMMODORE_PET_128_2y.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1977-commodore-pet/COMMODORE_PET_2x.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1977-commodore-pet/COMMODORE_PET_2x.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1977-commodore-pet/COMMODORE_PET_2y.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1977-commodore-pet/COMMODORE_PET_2y.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1977-commodore-pet/COMMODORE_PET_64.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1977-commodore-pet/COMMODORE_PET_64.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1977-commodore-pet/COMMODORE_PET_64_2y.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1977-commodore-pet/COMMODORE_PET_64_2y.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1977-commodore-pet/FreeLicense.txt: -------------------------------------------------------------------------------- 1 | KREATIVE SOFTWARE RELAY FONTS FREE USE LICENSE 2 | version 1.2f 3 | 4 | Permission is hereby granted, free of charge, to any person or entity (the "User") obtaining a copy of the included font files (the "Software") produced by Kreative Software, to utilize, display, embed, or redistribute the Software, subject to the following conditions: 5 | 6 | 1. The User may not sell copies of the Software for a fee. 7 | 8 | 1a. The User may give away copies of the Software free of charge provided this license and any documentation is included verbatim and credit is given to Kreative Korporation or Kreative Software. 9 | 10 | 2. The User may not modify, reverse-engineer, or create any derivative works of the Software. 11 | 12 | 3. Any Software carrying the following font names or variations thereof is not covered by this license and may not be used under the terms of this license: Jewel Hill, Miss Diode n Friends, This is Beckie's font! 13 | 14 | 3a. Any Software carrying a font name ending with the string "Pro CE" is not covered by this license and may not be used under the terms of this license. 15 | 16 | 4. This license becomes null and void if any of the above conditions are not met. 17 | 18 | 5. Kreative Software reserves the right to change this license at any time without notice. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE SOFTWARE OR FROM OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /app/qml/fonts/1979-atari-400-800/ATARI400800_original.TTF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1979-atari-400-800/ATARI400800_original.TTF -------------------------------------------------------------------------------- /app/qml/fonts/1979-atari-400-800/ATARI400800_squared.TTF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1979-atari-400-800/ATARI400800_squared.TTF -------------------------------------------------------------------------------- /app/qml/fonts/1979-atari-400-800/ReadMe.rtf: -------------------------------------------------------------------------------- 1 | {\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;}} 2 | {\colortbl\red0\green0\blue0;\red0\green0\blue255;} 3 | \deflang1033\pard\plain\f2\fs24\cf1 Atari Classic TrueType Fonts \plain\f2\fs24\cf0 4 | \par \plain\f4\fs16\cf0 (Windows Version 1.1) 5 | \par Created by Mark Simonson (v.1.0-1998, v.1.1-2001) 6 | \par marksim@bitstream.net 7 | \par Website: Mac/Atari Fusion--Atari Home Computer Resources for Mac Users 8 | \par http://www2.bitstream.net/~marksim/atarimac/ 9 | \par Macintosh version also available. 10 | \par 11 | \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.) 12 | \par 13 | \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. 14 | \par 15 | \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.) 16 | \par 17 | \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. 18 | \par 19 | \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). 20 | \par 21 | \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. 22 | \par 23 | \par \plain\f4\fs16\cf0\b ATASCII CHARACTER SET TABLES 24 | \par \plain\f4\fs16\cf0 25 | \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). 26 | \par 27 | \par 28 | \par \plain\f4\fs16\cf0\b TABLE 1: ATASCII Character Dump Block 29 | \par \plain\f4\fs16\cf0 30 | \par All characters (ATASCII $00 thru $FF) 16 characters per 31 | \par line. 32 | \par 33 | \par 34 | \par \plain\f2\fs12\cf0 \'01\'02\'03\'04\'05\'06\'07\'08\tab 35 | \par \'0b\'0c 36 | \par \'0e\'0f 37 | \par \'10\'11\'12\'13\'14\'15\'16\'17\'18\'19\'1a\'1b\'1c\'1d\'1e\'1f 38 | \par !"#$%&'()*+,-./ 39 | \par 0123456789:;<=>? 40 | \par @ABCDEFGHIJKLMNO 41 | \par PQRSTUVWXYZ[\\]^_ 42 | \par `abcdefghijklmno 43 | \par pqrstuvwxyz\{|\}~ 44 | \par \'80\'81\'82\'83\'84\'85\'86\'87\'88\'89\'8a\'8b\'8c\'8d\'8e\'8f 45 | \par \'90''""\bullet \endash \emdash \'98\'99\'9a \'9c\'9d\'9e\'9f 46 | \par \~\'a1\'a2\'a3\'a4\'a5\'a6\'a7\'a8\'a9\'aa\'ab\'ac\'ad\'ae\'af 47 | \par \'b0\'b1\'b2\'b3\'b4\'b5\'b6\'b7\'b8\'b9\'ba\'bb\'bc\'bd\'be\'bf 48 | \par \'c0\'c1\'c2\'c3\'c4\'c5\'c6\'c7\'c8\'c9\'ca\'cb\'cc\'cd\'ce\'cf 49 | \par \'d0\'d1\'d2\'d3\'d4\'d5\'d6\'d7\'d8\'d9\'da\'db\'dc\'dd\'de\'df 50 | \par \'e0\'e1\'e2\'e3\'e4\'e5\'e6\'e7\'e8\'e9\'ea\'eb\'ec\'ed\'ee\'ef 51 | \par \'f0\'f1\'f2\'f3\'f4\'f5\'f6\'f7\'f8\'f9\'fa\'fb\'fc\'fd\'fe\'ff 52 | \par \plain\f4\fs16\cf0 53 | \par 54 | \par \plain\f4\fs16\cf0\b TABLE 2: ATASCII Character Dump List 55 | \par \plain\f4\fs16\cf0 56 | \par All characters (ATASCII $00 thru $FF) one character per 57 | \par line with hexadecimal value indicated on the left. 58 | \par 59 | \par \plain\f2\fs12\cf0 00= 60 | \par 01=\'01 61 | \par 02=\'02 62 | \par 03=\'03 63 | \par 04=\'04 64 | \par 05=\'05 65 | \par 06=\'06 66 | \par 07=\'07 67 | \par 08=\'08 68 | \par 09=\tab 69 | \par 0A= 70 | \par 71 | \par 0B=\'0b 72 | \par 0C=\'0c 73 | \par 0D= 74 | \par 0E=\'0e 75 | \par 0F=\'0f 76 | \par 10=\'10 77 | \par 11=\'11 78 | \par 12=\'12 79 | \par 13=\'13 80 | \par 14=\'14 81 | \par 15=\'15 82 | \par 16=\'16 83 | \par 17=\'17 84 | \par 18=\'18 85 | \par 19=\'19 86 | \par 1A=\'1a 87 | \par 1B=\'1b 88 | \par 1C=\'1c 89 | \par 1D=\'1d 90 | \par 1E=\'1e 91 | \par 1F=\'1f 92 | \par 20= 93 | \par 21=! 94 | \par 22=" 95 | \par 23=# 96 | \par 24=$ 97 | \par 25=% 98 | \par 26=& 99 | \par 27=' 100 | \par 28=( 101 | \par 29=) 102 | \par 2A=* 103 | \par 2B=+ 104 | \par 2C=, 105 | \par 2D=- 106 | \par 2E=. 107 | \par 2F=/ 108 | \par 30=0 109 | \par 31=1 110 | \par 32=2 111 | \par 33=3 112 | \par 34=4 113 | \par 35=5 114 | \par 36=6 115 | \par 37=7 116 | \par 38=8 117 | \par 39=9 118 | \par 3A=: 119 | \par 3B=; 120 | \par 3C=< 121 | \par 3D== 122 | \par 3E=> 123 | \par 3F=? 124 | \par 40=@ 125 | \par 41=A 126 | \par 42=B 127 | \par 43=C 128 | \par 44=D 129 | \par 45=E 130 | \par 46=F 131 | \par 47=G 132 | \par 48=H 133 | \par 49=I 134 | \par 4A=J 135 | \par 4B=K 136 | \par 4C=L 137 | \par 4D=M 138 | \par 4E=N 139 | \par 4F=O 140 | \par 50=P 141 | \par 51=Q 142 | \par 52=R 143 | \par 53=S 144 | \par 54=T 145 | \par 55=U 146 | \par 56=V 147 | \par 57=W 148 | \par 58=X 149 | \par 59=Y 150 | \par 5A=Z 151 | \par 5B=[ 152 | \par 5C=\\ 153 | \par 5D=] 154 | \par 5E=^ 155 | \par 5F=_ 156 | \par 60=` 157 | \par 61=a 158 | \par 62=b 159 | \par 63=c 160 | \par 64=d 161 | \par 65=e 162 | \par 66=f 163 | \par 67=g 164 | \par 68=h 165 | \par 69=i 166 | \par 6A=j 167 | \par 6B=k 168 | \par 6C=l 169 | \par 6D=m 170 | \par 6E=n 171 | \par 6F=o 172 | \par 70=p 173 | \par 71=q 174 | \par 72=r 175 | \par 73=s 176 | \par 74=t 177 | \par 75=u 178 | \par 76=v 179 | \par 77=w 180 | \par 78=x 181 | \par 79=y 182 | \par 7A=z 183 | \par 7B=\{ 184 | \par 7C=| 185 | \par 7D=\} 186 | \par 7E=~ 187 | \par 7F= 188 | \par 80=\'80 189 | \par 81=\'81 190 | \par 82=\'82 191 | \par 83=\'83 192 | \par 84=\'84 193 | \par 85=\'85 194 | \par 86=\'86 195 | \par 87=\'87 196 | \par 88=\'88 197 | \par 89=\'89 198 | \par 8A=\'8a 199 | \par 8B=\'8b 200 | \par 8C=\'8c 201 | \par 8D=\'8d 202 | \par 8E=\'8e 203 | \par 8F=\'8f 204 | \par 90=\'90 205 | \par 91=' 206 | \par 92=' 207 | \par 93=" 208 | \par 94=" 209 | \par 95=\bullet 210 | \par 96=\endash 211 | \par 97=\emdash 212 | \par 98=\'98 213 | \par 99=\'99 214 | \par 9A=\'9a 215 | \par 9B= 216 | \par 9C=\'9c 217 | \par 9D=\'9d 218 | \par 9E=\'9e 219 | \par 9F=\'9f 220 | \par A0=\~ 221 | \par A1=\'a1 222 | \par A2=\'a2 223 | \par A3=\'a3 224 | \par A4=\'a4 225 | \par A5=\'a5 226 | \par A6=\'a6 227 | \par A7=\'a7 228 | \par A8=\'a8 229 | \par A9=\'a9 230 | \par AA=\'aa 231 | \par AB=\'ab 232 | \par AC=\'ac 233 | \par AD=\'ad 234 | \par AE=\'ae 235 | \par AF=\'af 236 | \par B0=\'b0 237 | \par B1=\'b1 238 | \par B2=\'b2 239 | \par B3=\'b3 240 | \par B4=\'b4 241 | \par B5=\'b5 242 | \par B6=\'b6 243 | \par B7=\'b7 244 | \par B8=\'b8 245 | \par B9=\'b9 246 | \par BA=\'ba 247 | \par BB=\'bb 248 | \par BC=\'bc 249 | \par BD=\'bd 250 | \par BE=\'be 251 | \par BF=\'bf 252 | \par C0=\'c0 253 | \par C1=\'c1 254 | \par C2=\'c2 255 | \par C3=\'c3 256 | \par C4=\'c4 257 | \par C5=\'c5 258 | \par C6=\'c6 259 | \par C7=\'c7 260 | \par C8=\'c8 261 | \par C9=\'c9 262 | \par CA=\'ca 263 | \par CB=\'cb 264 | \par CC=\'cc 265 | \par CD=\'cd 266 | \par CE=\'ce 267 | \par CF=\'cf 268 | \par D0=\'d0 269 | \par D1=\'d1 270 | \par D2=\'d2 271 | \par D3=\'d3 272 | \par D4=\'d4 273 | \par D5=\'d5 274 | \par D6=\'d6 275 | \par D7=\'d7 276 | \par D8=\'d8 277 | \par D9=\'d9 278 | \par DA=\'da 279 | \par DB=\'db 280 | \par DC=\'dc 281 | \par DD=\'dd 282 | \par DE=\'de 283 | \par DF=\'df 284 | \par E0=\'e0 285 | \par E1=\'e1 286 | \par E2=\'e2 287 | \par E3=\'e3 288 | \par E4=\'e4 289 | \par E5=\'e5 290 | \par E6=\'e6 291 | \par E7=\'e7 292 | \par E8=\'e8 293 | \par E9=\'e9 294 | \par EA=\'ea 295 | \par EB=\'eb 296 | \par EC=\'ec 297 | \par ED=\'ed 298 | \par EE=\'ee 299 | \par EF=\'ef 300 | \par F0=\'f0 301 | \par F1=\'f1 302 | \par F2=\'f2 303 | \par F3=\'f3 304 | \par F4=\'f4 305 | \par F5=\'f5 306 | \par F6=\'f6 307 | \par F7=\'f7 308 | \par F8=\'f8 309 | \par F9=\'f9 310 | \par FA=\'fa 311 | \par FB=\'fb 312 | \par FC=\'fc 313 | \par FD=\'fd 314 | \par FE=\'fe 315 | \par FF=\'ff 316 | \par } 317 | -------------------------------------------------------------------------------- /app/qml/fonts/1982-commodore64/C64_Elite_Mono_v1.0-STYLE.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1982-commodore64/C64_Elite_Mono_v1.0-STYLE.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1982-commodore64/C64_Pro_v1.0-STYLE.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1982-commodore64/C64_Pro_v1.0-STYLE.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1982-commodore64/C64_User_Mono_v1.0-STYLE.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1982-commodore64/C64_User_Mono_v1.0-STYLE.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1982-commodore64/C64_User_v1.0-STYLE.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1982-commodore64/C64_User_v1.0-STYLE.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1982-commodore64/license.txt: -------------------------------------------------------------------------------- 1 | 2 | Fonts in this package are (c) 2010 Style. 3 | 4 | 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". 5 | 6 | At all times the most recent version of this license can be found at "http://style64.org/c64-truetype/license". 7 | -------------------------------------------------------------------------------- /app/qml/fonts/1985-atari-st/AtariST8x16SystemFont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1985-atari-st/AtariST8x16SystemFont.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1985-ibm-pc-vga/Perfect DOS VGA 437 Win.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1985-ibm-pc-vga/Perfect DOS VGA 437 Win.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1985-ibm-pc-vga/Perfect DOS VGA 437.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1985-ibm-pc-vga/Perfect DOS VGA 437.ttf -------------------------------------------------------------------------------- /app/qml/fonts/1985-ibm-pc-vga/dos437.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/1985-ibm-pc-vga/dos437.txt -------------------------------------------------------------------------------- /app/qml/fonts/modern-fixedsys-excelsior/FSEX301-L2.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/modern-fixedsys-excelsior/FSEX301-L2.ttf -------------------------------------------------------------------------------- /app/qml/fonts/modern-hermit/Hermit-bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/modern-hermit/Hermit-bold.otf -------------------------------------------------------------------------------- /app/qml/fonts/modern-hermit/Hermit-light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/modern-hermit/Hermit-light.otf -------------------------------------------------------------------------------- /app/qml/fonts/modern-hermit/Hermit-medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/modern-hermit/Hermit-medium.otf -------------------------------------------------------------------------------- /app/qml/fonts/modern-hermit/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013, Pablo Caro - http://pcaro.es/ 2 | with Reserved Font Name Hermit. 3 | 4 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 5 | This license is copied below, and is also available with a FAQ at: 6 | http://scripts.sil.org/OFL 7 | 8 | 9 | ----------------------------------------------------------- 10 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 11 | ----------------------------------------------------------- 12 | 13 | PREAMBLE 14 | The goals of the Open Font License (OFL) are to stimulate worldwide 15 | development of collaborative font projects, to support the font creation 16 | efforts of academic and linguistic communities, and to provide a free and 17 | open framework in which fonts may be shared and improved in partnership 18 | with others. 19 | 20 | The OFL allows the licensed fonts to be used, studied, modified and 21 | redistributed freely as long as they are not sold by themselves. The 22 | fonts, including any derivative works, can be bundled, embedded, 23 | redistributed and/or sold with any software provided that any reserved 24 | names are not used by derivative works. The fonts and derivatives, 25 | however, cannot be released under any other type of license. The 26 | requirement for fonts to remain under this license does not apply 27 | to any document created using the fonts or their derivatives. 28 | 29 | DEFINITIONS 30 | "Font Software" refers to the set of files released by the Copyright 31 | Holder(s) under this license and clearly marked as such. This may 32 | include source files, build scripts and documentation. 33 | 34 | "Reserved Font Name" refers to any names specified as such after the 35 | copyright statement(s). 36 | 37 | "Original Version" refers to the collection of Font Software components as 38 | distributed by the Copyright Holder(s). 39 | 40 | "Modified Version" refers to any derivative made by adding to, deleting, 41 | or substituting -- in part or in whole -- any of the components of the 42 | Original Version, by changing formats or by porting the Font Software to a 43 | new environment. 44 | 45 | "Author" refers to any designer, engineer, programmer, technical 46 | writer or other person who contributed to the Font Software. 47 | 48 | PERMISSION & CONDITIONS 49 | Permission is hereby granted, free of charge, to any person obtaining 50 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 51 | redistribute, and sell modified and unmodified copies of the Font 52 | Software, subject to the following conditions: 53 | 54 | 1) Neither the Font Software nor any of its individual components, 55 | in Original or Modified Versions, may be sold by itself. 56 | 57 | 2) Original or Modified Versions of the Font Software may be bundled, 58 | redistributed and/or sold with any software, provided that each copy 59 | contains the above copyright notice and this license. These can be 60 | included either as stand-alone text files, human-readable headers or 61 | in the appropriate machine-readable metadata fields within text or 62 | binary files as long as those fields can be easily viewed by the user. 63 | 64 | 3) No Modified Version of the Font Software may use the Reserved Font 65 | Name(s) unless explicit written permission is granted by the corresponding 66 | Copyright Holder. This restriction only applies to the primary font name as 67 | presented to the users. 68 | 69 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 70 | Software shall not be used to promote, endorse or advertise any 71 | Modified Version, except to acknowledge the contribution(s) of the 72 | Copyright Holder(s) and the Author(s) or with their explicit written 73 | permission. 74 | 75 | 5) The Font Software, modified or unmodified, in part or in whole, 76 | must be distributed entirely under this license, and must not be 77 | distributed under any other license. The requirement for fonts to 78 | remain under this license does not apply to any document created 79 | using the Font Software. 80 | 81 | TERMINATION 82 | This license becomes null and void if any of the above conditions are 83 | not met. 84 | 85 | DISCLAIMER 86 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 87 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 88 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 89 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 90 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 91 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 92 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 93 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 94 | OTHER DEALINGS IN THE FONT SOFTWARE. 95 | -------------------------------------------------------------------------------- /app/qml/fonts/modern-inconsolata/Inconsolata.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/modern-inconsolata/Inconsolata.otf -------------------------------------------------------------------------------- /app/qml/fonts/modern-monaco/README: -------------------------------------------------------------------------------- 1 | monaco.ttf 2 | ========== 3 | 4 | The original monaco.ttf improved: add some special characters (which are from "DejaVu Sans Mono") 5 | 6 | In my work environment, I need connect to Linux system from Windows system remotely using SecureCRT or Putty, and edit files using VIM tools. So I need one beautiful font in SecureCRT / Putty. 7 | 8 | In windows system, there are some original fonts are beautiful, for example "Consolas", but they can't support some special characters, for example: ▸, ↪, ⌴. Because they are original fonts in my Windows, I don't want to modify them. 9 | 10 | I get "Monaco" from web. It is tiny and beautiful. But it also can't support those special characters. 11 | 12 | So I add the characters by myself and share it. 13 | 14 | -------------------------------------------------------------------------------- /app/qml/fonts/modern-monaco/monaco.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/modern-monaco/monaco.ttf -------------------------------------------------------------------------------- /app/qml/fonts/modern-pro-font-win-tweaked/._LICENSE: -------------------------------------------------------------------------------- 1 |  & TxMt -------------------------------------------------------------------------------- /app/qml/fonts/modern-pro-font-win-tweaked/._readme.txt: -------------------------------------------------------------------------------- 1 |  & TxMt -------------------------------------------------------------------------------- /app/qml/fonts/modern-pro-font-win-tweaked/Comments for ProFontWindows: -------------------------------------------------------------------------------- 1 | dopustz:-480 -------------------------------------------------------------------------------- /app/qml/fonts/modern-pro-font-win-tweaked/LICENSE: -------------------------------------------------------------------------------- 1 | ProFont 2 | MIT License 3 | 4 | Copyright (c) 2014 Carl Osterwald, Stephen C. Gilardi, Andrew Welch 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. -------------------------------------------------------------------------------- /app/qml/fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf -------------------------------------------------------------------------------- /app/qml/fonts/modern-pro-font-win-tweaked/readme.txt: -------------------------------------------------------------------------------- 1 | WHAT IS THIS? 2 | 3 | This is ProFont TrueType, converted to Windows TrueType format 4 | by Mike Smith, with some tweaks added by "ardu". 5 | 6 | Modifications include: 7 | - A Euro character 8 | - Missing characters from the Latin 1 code page 9 | - Full support for CodePage 850. These are mostly the famous 10 | block/box characters you know from DOS. Very useful if you use 11 | Mightnight Commander through PuTTY. 12 | - Fixed metrics so that point size of 9 works correctly. Until now 13 | you had to select 7 to obtain the native point size of 9. 14 | - Added some quick&dirty hinting for point size of 9. Most characters 15 | now match closely the look of the bitmap version. 16 | Don't expect it to look good on anything else than Windows... 17 | 18 | 19 | 20 | To get the full original Distribution, other ProFont builds 21 | and more information 22 | go to 23 | 24 | 25 | DISCLAIMER 26 | See LICENSE file 27 | 28 | 29 | Tobias Jung 30 | January 2014 31 | profont@tobiasjung.name 32 | -------------------------------------------------------------------------------- /app/qml/fonts/modern-proggy-tiny/Licence.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2004, 2005 Tristan Grimmer 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /app/qml/fonts/modern-proggy-tiny/ProggyTiny.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/modern-proggy-tiny/ProggyTiny.ttf -------------------------------------------------------------------------------- /app/qml/fonts/modern-terminus/TerminusTTF-4.38.2.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/modern-terminus/TerminusTTF-4.38.2.ttf -------------------------------------------------------------------------------- /app/qml/fonts/modern-terminus/TerminusTTF-Bold-4.38.2.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/fonts/modern-terminus/TerminusTTF-Bold-4.38.2.ttf -------------------------------------------------------------------------------- /app/qml/frames/BlackRoughFrame.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.2 2 | import "utils" 3 | 4 | TerminalFrame{ 5 | id: frame 6 | z: 2.1 7 | anchors.fill: parent 8 | addedWidth: 200 9 | addedHeight: 370 10 | borderLeft: 170 11 | borderRight: 170 12 | borderTop: 250 13 | borderBottom: 250 14 | imageSource: "../images/black-frame.png" 15 | normalsSource: "../images/black-frame-normals.png" 16 | 17 | displacementLeft: 80.0 18 | displacementTop: 65.0 19 | displacementRight: 80.0 20 | displacementBottom: 65.0 21 | 22 | staticDiffuseComponent: 1.0 23 | dinamycDiffuseComponent: 0.6 24 | } 25 | -------------------------------------------------------------------------------- /app/qml/frames/WhiteSimpleFrame.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.2 2 | import "utils" 3 | 4 | TerminalFrame{ 5 | id: frame 6 | z: 2.1 7 | anchors.fill: parent 8 | addedWidth: 140 9 | addedHeight: 140 10 | borderLeft: 116 11 | borderRight: 116 12 | borderTop: 116 13 | borderBottom: 116 14 | imageSource: "../images/screen-frame.png" 15 | normalsSource: "../images/screen-frame-normals.png" 16 | 17 | displacementLeft: 55 18 | displacementTop: 50 19 | displacementRight: 55 20 | displacementBottom: 50 21 | 22 | staticDiffuseComponent: 1.0 23 | dinamycDiffuseComponent: 0.6 24 | } 25 | -------------------------------------------------------------------------------- /app/qml/frames/images/black-frame-normals.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/frames/images/black-frame-normals.png -------------------------------------------------------------------------------- /app/qml/frames/images/black-frame-original.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/frames/images/black-frame-original.png -------------------------------------------------------------------------------- /app/qml/frames/images/black-frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/frames/images/black-frame.png -------------------------------------------------------------------------------- /app/qml/frames/images/screen-frame-normals.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/frames/images/screen-frame-normals.png -------------------------------------------------------------------------------- /app/qml/frames/images/screen-frame-original.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/frames/images/screen-frame-original.png -------------------------------------------------------------------------------- /app/qml/frames/images/screen-frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/frames/images/screen-frame.png -------------------------------------------------------------------------------- /app/qml/frames/utils/TerminalFrame.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.2 2 | import QtGraphicalEffects 1.0 3 | 4 | import "../../utils.js" as Utils 5 | 6 | Item{ 7 | id: framecontainer 8 | property int textureWidth: terminalContainer.width / appSettings.windowScaling 9 | property int textureHeight: terminalContainer.height / appSettings.windowScaling 10 | 11 | property int addedWidth 12 | property int addedHeight 13 | property int borderLeft 14 | property int borderRight 15 | property int borderTop 16 | property int borderBottom 17 | property string imageSource 18 | property string normalsSource 19 | property string shaderString 20 | 21 | //Values used to displace the texture in the screen. Used to make reflections correct. 22 | property real displacementLeft 23 | property real displacementTop 24 | property real displacementRight 25 | property real displacementBottom 26 | 27 | // Material coefficients 28 | property real staticDiffuseComponent: 0.7 29 | property real dinamycDiffuseComponent: 1.0 30 | 31 | BorderImage{ 32 | id: frameimage 33 | anchors.centerIn: parent 34 | width: textureWidth + addedWidth 35 | height: textureHeight + addedHeight 36 | 37 | border.bottom: borderBottom 38 | border.top: borderTop 39 | border.left: borderLeft 40 | border.right: borderRight 41 | 42 | source: imageSource 43 | horizontalTileMode: BorderImage.Stretch 44 | verticalTileMode: BorderImage.Stretch 45 | } 46 | BorderImage{ 47 | id: framenormals 48 | anchors.fill: frameimage 49 | 50 | border.bottom: borderBottom 51 | border.top: borderTop 52 | border.left: borderLeft 53 | border.right: borderRight 54 | 55 | source: normalsSource 56 | horizontalTileMode: BorderImage.Stretch 57 | verticalTileMode: BorderImage.Stretch 58 | } 59 | ShaderEffectSource{ 60 | id: framesource 61 | sourceItem: frameimage 62 | hideSource: true 63 | textureSize: Qt.size(parent.width, parent.height) 64 | sourceRect: Qt.rect(-1, -1, frameimage.width + 2, frameimage.height + 2) 65 | visible: false 66 | } 67 | ShaderEffectSource{ 68 | id: framesourcenormals 69 | sourceItem: framenormals 70 | hideSource: true 71 | textureSize: Qt.size(parent.width, parent.height) 72 | sourceRect: Qt.rect(-1, -1, framenormals.width + 2, framenormals.height + 2) 73 | visible: false 74 | } 75 | 76 | // REFLECTIONS //////////////////////////////////////////////////////////// 77 | Loader{ 78 | id: reflectionEffectLoader 79 | width: parent.width * 0.33 80 | height: parent.height * 0.33 81 | active: appSettings.frameReflections 82 | 83 | sourceComponent: FastBlur{ 84 | id: frameReflectionEffect 85 | radius: 128 86 | source: terminal.mainSource 87 | smooth: false 88 | } 89 | } 90 | 91 | Loader{ 92 | id: reflectionEffectSourceLoader 93 | active: appSettings.frameReflections 94 | sourceComponent: ShaderEffectSource{ 95 | id: frameReflectionSource 96 | sourceItem: reflectionEffectLoader.item 97 | hideSource: true 98 | smooth: true 99 | visible: false 100 | } 101 | } 102 | 103 | // This texture represent the static light component. 104 | ShaderEffect { 105 | id: staticLight 106 | property alias source: framesource 107 | property alias normals: framesourcenormals 108 | property real screenCurvature: appSettings.screenCurvature 109 | property size curvature_coefficients: Qt.size(width / mainShader.width, height / mainShader.height) 110 | property real ambientLight: appSettings.ambientLight * 0.9 + 0.1 111 | property color fontColor: appSettings.fontColor 112 | property color backgroundColor: appSettings.backgroundColor 113 | property color reflectionColor: Utils.mix(fontColor, backgroundColor, 0.2) 114 | property real diffuseComponent: staticDiffuseComponent 115 | 116 | anchors.centerIn: parent 117 | width: parent.width + (addedWidth / textureWidth) * parent.width 118 | height: parent.height + (addedHeight / textureHeight) * parent.height 119 | 120 | blending: true 121 | 122 | fragmentShader: " 123 | #ifdef GL_ES 124 | precision mediump float; 125 | #endif 126 | 127 | uniform highp sampler2D normals; 128 | uniform highp sampler2D source; 129 | uniform lowp float screenCurvature; 130 | uniform highp vec2 curvature_coefficients; 131 | uniform lowp float ambientLight; 132 | uniform highp float qt_Opacity; 133 | uniform lowp vec4 reflectionColor; 134 | uniform lowp float diffuseComponent; 135 | 136 | varying highp vec2 qt_TexCoord0; 137 | 138 | vec2 distortCoordinates(vec2 coords){ 139 | vec2 cc = (coords - vec2(0.5)) * curvature_coefficients; 140 | float dist = dot(cc, cc) * screenCurvature; 141 | return (coords + cc * (1.0 + dist) * dist); 142 | } 143 | 144 | float rgb2grey(vec3 v){ 145 | return dot(v, vec3(0.21, 0.72, 0.04)); 146 | } 147 | 148 | void main(){ 149 | vec2 coords = distortCoordinates(qt_TexCoord0); 150 | vec4 txtColor = texture2D(source, coords); 151 | vec4 txtNormal = texture2D(normals, coords); 152 | 153 | vec3 normal = normalize(txtNormal.rgb * 2.0 - 1.0); 154 | vec2 lightDirection = normalize(vec2(0.5, 0.5) - coords); 155 | float dotProd = dot(normal, vec3(lightDirection, 0.0)) * diffuseComponent * txtNormal.a; 156 | 157 | vec3 darkColor = dotProd * reflectionColor.rgb; 158 | gl_FragColor = vec4(mix(darkColor, txtColor.rgb, ambientLight), dotProd); 159 | } 160 | " 161 | 162 | onStatusChanged: if (log) console.log(log) //Print warning messages 163 | } 164 | 165 | ShaderEffectSource { 166 | id: staticLightSource 167 | sourceItem: staticLight 168 | hideSource: true 169 | anchors.fill: staticLight 170 | live: true 171 | } 172 | 173 | Loader{ 174 | id: dynamicLightLoader 175 | anchors.fill: staticLight 176 | active: appSettings.frameReflections 177 | sourceComponent: ShaderEffect { 178 | property ShaderEffectSource lightMask: staticLightSource 179 | property ShaderEffectSource reflectionSource: reflectionEffectSourceLoader.item 180 | property real diffuseComponent: dinamycDiffuseComponent 181 | property real chromaColor: appSettings.chromaColor 182 | property color fontColor: appSettings.fontColor 183 | 184 | visible: true 185 | blending: true 186 | 187 | fragmentShader: " 188 | #ifdef GL_ES 189 | precision mediump float; 190 | #endif 191 | 192 | uniform sampler2D lightMask; 193 | uniform sampler2D reflectionSource; 194 | uniform lowp float diffuseComponent; 195 | uniform lowp float chromaColor; 196 | uniform highp vec4 fontColor; 197 | uniform highp float qt_Opacity; 198 | 199 | varying highp vec2 qt_TexCoord0; 200 | 201 | float rgb2grey(vec3 v){ 202 | return dot(v, vec3(0.21, 0.72, 0.04)); 203 | } 204 | 205 | void main() { 206 | float alpha = texture2D(lightMask, qt_TexCoord0).a * diffuseComponent; 207 | vec3 reflectionColor = texture2D(reflectionSource, qt_TexCoord0).rgb; 208 | vec3 color = fontColor.rgb * rgb2grey(reflectionColor);" + 209 | (chromaColor !== 0 ? 210 | "color = mix(color, fontColor.rgb * reflectionColor, chromaColor);" 211 | : "") + 212 | "gl_FragColor = vec4(color, 1.0) * alpha; 213 | } 214 | " 215 | 216 | onStatusChanged: if (log) console.log(log) //Print warning messages 217 | } 218 | } 219 | } 220 | -------------------------------------------------------------------------------- /app/qml/images/allNoise512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/images/allNoise512.png -------------------------------------------------------------------------------- /app/qml/images/crt256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BaiXiongjun/Fallout-UOS-Linux-shell/e48719fa44e5307df71dbd0fad234f8a6a53f863/app/qml/images/crt256.png -------------------------------------------------------------------------------- /app/qml/main.qml: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2013 "Filippo Scognamiglio" 3 | * https://github.com/Swordfish90/cool-retro-term 4 | * 5 | * This file is part of cool-retro-term. 6 | * 7 | * cool-retro-term is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | *******************************************************************************/ 20 | 21 | import QtQuick 2.2 22 | import QtQuick.Window 2.1 23 | import QtQuick.Controls 1.1 24 | import QtGraphicalEffects 1.0 25 | 26 | ApplicationWindow{ 27 | id: terminalWindow 28 | 29 | width: 1024 30 | height: 768 31 | 32 | // Save window properties automatically 33 | onXChanged: appSettings.x = x 34 | onYChanged: appSettings.y = y 35 | onWidthChanged: appSettings.width = width 36 | onHeightChanged: appSettings.height = height 37 | 38 | // Load saved window geometry and show the window 39 | Component.onCompleted: { 40 | appSettings.handleFontChanged(); 41 | 42 | x = appSettings.x 43 | y = appSettings.y 44 | width = appSettings.width 45 | height = appSettings.height 46 | 47 | visible = true 48 | } 49 | 50 | minimumWidth: 320 51 | minimumHeight: 240 52 | 53 | visible: false 54 | 55 | property bool fullscreen: appSettings.fullscreen 56 | onFullscreenChanged: visibility = (fullscreen ? Window.FullScreen : Window.Windowed) 57 | 58 | //Workaround: Without __contentItem a ugly thin border is visible. 59 | menuBar: CRTMainMenuBar{ 60 | id: mainMenu 61 | visible: (Qt.platform.os === "osx" || appSettings.showMenubar) 62 | __contentItem.visible: mainMenu.visible 63 | } 64 | 65 | color: "#00000000" 66 | title: terminalContainer.title || qsTr("cool-retro-term") 67 | 68 | Action { 69 | id: showMenubarAction 70 | text: qsTr("Show Menubar") 71 | enabled: Qt.platform.os !== "osx" 72 | shortcut: "Ctrl+Shift+M" 73 | checkable: true 74 | checked: appSettings.showMenubar 75 | onTriggered: appSettings.showMenubar = !appSettings.showMenubar 76 | } 77 | Action { 78 | id: fullscreenAction 79 | text: qsTr("Fullscreen") 80 | enabled: Qt.platform.os !== "osx" 81 | shortcut: "Alt+F11" 82 | onTriggered: appSettings.fullscreen = !appSettings.fullscreen; 83 | checkable: true 84 | checked: appSettings.fullscreen 85 | } 86 | Action { 87 | id: quitAction 88 | text: qsTr("Quit") 89 | shortcut: "Ctrl+Shift+Q" 90 | onTriggered: Qt.quit(); 91 | } 92 | Action{ 93 | id: showsettingsAction 94 | text: qsTr("Settings") 95 | onTriggered: { 96 | settingswindow.show(); 97 | settingswindow.requestActivate(); 98 | settingswindow.raise(); 99 | } 100 | } 101 | Action{ 102 | id: copyAction 103 | text: qsTr("Copy") 104 | shortcut: Qt.platform.os === "osx" ? StandardKey.Copy : "Ctrl+Shift+C" 105 | } 106 | Action{ 107 | id: pasteAction 108 | text: qsTr("Paste") 109 | shortcut: Qt.platform.os === "osx" ? StandardKey.Paste : "Ctrl+Shift+V" 110 | } 111 | Action{ 112 | id: zoomIn 113 | text: qsTr("Zoom In") 114 | shortcut: "Ctrl++" 115 | onTriggered: appSettings.incrementScaling(); 116 | } 117 | Action{ 118 | id: zoomOut 119 | text: qsTr("Zoom Out") 120 | shortcut: "Ctrl+-" 121 | onTriggered: appSettings.decrementScaling(); 122 | } 123 | Action{ 124 | id: showAboutAction 125 | text: qsTr("About") 126 | onTriggered: { 127 | aboutDialog.show(); 128 | aboutDialog.requestActivate(); 129 | aboutDialog.raise(); 130 | } 131 | } 132 | ApplicationSettings{ 133 | id: appSettings 134 | } 135 | TerminalContainer{ 136 | id: terminalContainer 137 | y: appSettings.showMenubar ? 0 : -2 // Workaroud to hide the margin in the menubar. 138 | width: parent.width * appSettings.windowScaling 139 | height: (parent.height + Math.abs(y)) * appSettings.windowScaling 140 | 141 | transform: Scale { 142 | xScale: 1 / appSettings.windowScaling 143 | yScale: 1 / appSettings.windowScaling 144 | } 145 | } 146 | SettingsWindow{ 147 | id: settingswindow 148 | visible: false 149 | } 150 | AboutDialog{ 151 | id: aboutDialog 152 | visible: false 153 | } 154 | Loader{ 155 | anchors.centerIn: parent 156 | active: appSettings.showTerminalSize 157 | sourceComponent: SizeOverlay{ 158 | z: 3 159 | terminalSize: terminalContainer.terminalSize 160 | } 161 | } 162 | onClosing: { 163 | // OSX Since we are currently supporting only one window 164 | // quit the application when it is closed. 165 | if (Qt.platform.os === "osx") 166 | Qt.quit() 167 | } 168 | } 169 | -------------------------------------------------------------------------------- /app/qml/resources.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | frames/BlackRoughFrame.qml 4 | frames/images/black-frame.png 5 | frames/images/screen-frame-normals.png 6 | frames/images/black-frame-normals.png 7 | frames/images/screen-frame.png 8 | frames/images/black-frame-original.png 9 | frames/images/screen-frame-original.png 10 | frames/WhiteSimpleFrame.qml 11 | frames/utils/TerminalFrame.qml 12 | SizeOverlay.qml 13 | ShaderTerminal.qml 14 | CheckableSlider.qml 15 | ApplicationSettings.qml 16 | SettingsWindow.qml 17 | Fonts.qml 18 | FontPixels.qml 19 | SettingsGeneralTab.qml 20 | PreprocessedTerminal.qml 21 | TimeManager.qml 22 | SimpleSlider.qml 23 | ColorButton.qml 24 | Glossy.qml 25 | AboutDialog.qml 26 | InsertNameDialog.qml 27 | SettingsEffectsTab.qml 28 | main.qml 29 | SettingsTerminalTab.qml 30 | FontScanlines.qml 31 | fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf 32 | fonts/1977-apple2/PrintChar21.ttf 33 | fonts/1971-ibm-3278/3270Medium.ttf 34 | fonts/1985-atari-st/AtariST8x16SystemFont.ttf 35 | fonts/modern-terminus/TerminusTTF-4.38.2.ttf 36 | fonts/1977-commodore-pet/COMMODORE_PET.ttf 37 | fonts/1979-atari-400-800/ATARI400800_original.TTF 38 | fonts/1985-ibm-pc-vga/Perfect DOS VGA 437 Win.ttf 39 | Storage.qml 40 | CRTMainMenuBar.qml 41 | SettingsPerformanceTab.qml 42 | TerminalContainer.qml 43 | images/crt256.png 44 | utils.js 45 | images/allNoise512.png 46 | fonts/modern-proggy-tiny/ProggyTiny.ttf 47 | fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf 48 | fonts/modern-monaco/monaco.ttf 49 | fonts/modern-hermit/Hermit-medium.otf 50 | fonts/modern-inconsolata/Inconsolata.otf 51 | SettingsScreenTab.qml 52 | fonts/modern-fixedsys-excelsior/FSEX301-L2.ttf 53 | ../icons/32x32/cool-retro-term.png 54 | Components/SizedLabel.qml 55 | 56 | 57 | -------------------------------------------------------------------------------- /app/qml/utils.js: -------------------------------------------------------------------------------- 1 | .pragma library 2 | function clamp(x, min, max) { 3 | if (x <= min) 4 | return min; 5 | if (x >= max) 6 | return max; 7 | return x; 8 | } 9 | function lint(a, b, t) { 10 | return (1 - t) * a + (t) * b; 11 | } 12 | function mix(c1, c2, alpha){ 13 | return Qt.rgba(c1.r * alpha + c2.r * (1-alpha), 14 | c1.g * alpha + c2.g * (1-alpha), 15 | c1.b * alpha + c2.b * (1-alpha), 16 | c1.a * alpha + c2.a * (1-alpha)) 17 | } 18 | function strToColor(s){ 19 | var r = parseInt(s.substring(1,3), 16) / 256; 20 | var g = parseInt(s.substring(3,5), 16) / 256; 21 | var b = parseInt(s.substring(5,7), 16) / 256; 22 | return Qt.rgba(r, g, b, 1.0); 23 | } 24 | 25 | /* Tokenizes a command into program and arguments, taking into account quoted 26 | * strings and backslashes. 27 | * Based on GLib's tokenizer, used by Gnome Terminal 28 | */ 29 | function tokenizeCommandLine(s){ 30 | var args = []; 31 | var currentToken = ""; 32 | var quoteChar = ""; 33 | var escaped = false; 34 | var nextToken = function() { 35 | args.push(currentToken); 36 | currentToken = ""; 37 | } 38 | var appendToCurrentToken = function(c) { 39 | currentToken += c; 40 | } 41 | 42 | for (var i = 0; i < s.length; i++) { 43 | 44 | // char followed by backslash, append literally 45 | if (escaped) { 46 | escaped = false; 47 | appendToCurrentToken(s[i]); 48 | 49 | // char inside quotes, either close or append 50 | } else if (quoteChar) { 51 | escaped = s[i] === '\\'; 52 | if (quoteChar === s[i]) { 53 | quoteChar = ""; 54 | nextToken(); 55 | } else if (!escaped) { 56 | appendToCurrentToken(s[i]); 57 | } 58 | 59 | // regular char 60 | } else { 61 | escaped = s[i] === '\\'; 62 | switch (s[i]) { 63 | case '\\': 64 | // begin escape 65 | break; 66 | case '\n': 67 | // newlines always delimits 68 | nextToken(); 69 | break; 70 | case ' ': 71 | case '\t': 72 | // delimit on new whitespace 73 | if (currentToken) { 74 | nextToken(); 75 | } 76 | break; 77 | case '\'': 78 | case '"': 79 | // begin quoted section 80 | quoteChar = s[i]; 81 | break; 82 | default: 83 | appendToCurrentToken(s[i]); 84 | } 85 | } 86 | } 87 | 88 | // ignore last token if broken quotes/backslash 89 | if (currentToken && !escaped && !quoteChar) { 90 | nextToken(); 91 | } 92 | 93 | return args; 94 | } 95 | -------------------------------------------------------------------------------- /cool-retro-term.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Comment=Use the command line the old way 3 | Exec=cool-retro-term 4 | GenericName=Terminal emulator 5 | Icon=cool-retro-term 6 | Name=Cool Retro Term 7 | Categories=System;TerminalEmulator; 8 | StartupNotify=true 9 | Terminal=false 10 | Type=Application 11 | Keywords=shell;prompt;command;commandline; 12 | -------------------------------------------------------------------------------- /cool-retro-term.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | 3 | CONFIG += ordered 4 | 5 | SUBDIRS += qmltermwidget 6 | SUBDIRS += app 7 | 8 | desktop.files += cool-retro-term.desktop 9 | desktop.path += /usr/share/applications 10 | 11 | INSTALLS += desktop 12 | -------------------------------------------------------------------------------- /gpl-2.0.txt: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | 294 | Copyright (C) 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | , 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | -------------------------------------------------------------------------------- /packaging/appdata/cool-retro-term.appdata.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | cool-retro-term.desktop 5 | MIT 6 | GPL-3.0+ 7 | Cool Retro Term 8 | Terminal emulator with an old school look and feel 9 | 10 | 11 |

12 | cool-retro-term is a terminal emulator which tries to mimic the look and feel of the old cathode tube screens. It has been designed to be eye-candy, customizable, and reasonably lightweight. 13 |

14 |
15 | 16 | 17 | 18 | Default amber look 19 | https://camo.githubusercontent.com/2443e662e95733ba6ae331f391f6ec036d1ee7fd/687474703a2f2f692e696d6775722e636f6d2f4e5566766e6c752e706e67 20 | 21 | 22 | Apple II look 23 | https://camo.githubusercontent.com/44a19842d532555c7b02bf6b4b4684add9edf18c/687474703a2f2f692e696d6775722e636f6d2f4d4d6d4d3648742e706e67 24 | 25 | 26 | 27 | https://github.com/Swordfish90/cool-retro-term 28 | 29 | 30 | cool-retro-term 31 | 32 | 33 | 34 | 35 | 36 |

First release

37 |
38 |
39 |
40 |
41 | -------------------------------------------------------------------------------- /packaging/debian/.gitignore: -------------------------------------------------------------------------------- 1 | /*.debhelper.log 2 | /*.substvars 3 | /cool-retro-term/ 4 | /files 5 | -------------------------------------------------------------------------------- /packaging/debian/changelog: -------------------------------------------------------------------------------- 1 | cool-retro-term (0.9-2) UNRELEASED; urgency=medium 2 | 3 | * Adding missing dependencies 4 | 5 | -- Jeka Der Sun, 12 Oct 2014 18:00:00 +0200 6 | 7 | cool-retro-term (0.9-1) UNRELEASED; urgency=medium 8 | 9 | * Initial release. 10 | 11 | -- Jeka Der Fri, 10 Oct 2014 19:58:29 +0200 12 | -------------------------------------------------------------------------------- /packaging/debian/compat: -------------------------------------------------------------------------------- 1 | 9 2 | -------------------------------------------------------------------------------- /packaging/debian/control: -------------------------------------------------------------------------------- 1 | Source: cool-retro-term 2 | Maintainer: Jeka Der 3 | Section: x11 4 | Priority: optional 5 | Standards-Version: 3.9.6 6 | Homepage: https://github.com/Swordfish90/cool-retro-term 7 | Vcs-Git: git://github.com/barak/cool-retro-term.git 8 | Vcs-Browser: https://github.com/barak/cool-retro-term 9 | Build-Depends: debhelper (>= 9), qmlscene, 10 | qt5-qmake, qtdeclarative5-dev, qml-module-qtquick-controls, 11 | qml-module-qtgraphicaleffects, qml-module-qtquick-dialogs, 12 | qml-module-qtquick-localstorage, qml-module-qtquick-window2 13 | 14 | Package: cool-retro-term 15 | Architecture: any 16 | Replaces: cool-old-term 17 | Provides: x-terminal-emulator 18 | Depends: qml-module-qtquick-controls, qml-module-qtgraphicaleffects, 19 | qml-module-qtquick-dialogs, qml-module-qtquick-localstorage, 20 | qml-module-qtquick-window2, ${shlibs:Depends}, ${misc:Depends} 21 | Description: terminal emulator which mimics old screens 22 | cool-retro-term is a terminal emulator which mimics the look and feel 23 | of the old cathode tube screens. It has been designed to be eye-candy, 24 | customizable, and reasonably lightweight. 25 | -------------------------------------------------------------------------------- /packaging/debian/cool-retro-term.1: -------------------------------------------------------------------------------- 1 | .TH cool-retro-term 1 "August 22 2016" 2 | .SH NAME 3 | cool-retro-term \- terminal emulator mimicing the old cathode display 4 | .SH SYNOPSIS 5 | "Usage: ./cool\-retro\-term [\-\-default\-settings] [\-\-workdir ] [\-\-program ] [\-p|\-\-profile ] [\-\-fullscreen] [\-h|\-\-help]" 6 | .SH DESCRIPTION 7 | This manual page documents briefly the 8 | .B cool-retro-term 9 | command. 10 | .SH OPTIONS 11 | .TP 12 | \fB\-\-default\-settings\fR 13 | Run cool\-retro\-term with the default settings 14 | .TP 15 | \fB\-\-workdir\fR 16 | Change working directory to 'dir' 17 | .TP 18 | \fB\-e\fR 19 | Command to execute. This option will catch all following arguments, so use it as the last option. 20 | .TP 21 | \fB\-\-fullscreen\fR 22 | Run cool\-retro\-term in fullscreen. 23 | .HP 24 | \fB\-p\fR|\-\-profile Run cool\-retro\-term with the given profile. 25 | .TP 26 | \fB\-h\fR|\-\-help 27 | Print this help. 28 | .TP 29 | \fB\-\-verbose\fR 30 | Print additional informations such as profiles and settings. 31 | .PP 32 | -------------------------------------------------------------------------------- /packaging/debian/copyright: -------------------------------------------------------------------------------- 1 | Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ 2 | Upstream-Name: cool-retro-term 3 | Upstream-Contact: Filippo Scognamiglio 4 | Source: https://github.com/Swordfish90/cool-retro-term 5 | 6 | Files: * 7 | Copyright: 2014 Filippo Scognamiglio 8 | License: GPL-3 9 | On Debian systems, the full text of the GNU General Public 10 | License version 3 can be found in the file 11 | `/usr/share/common-licenses/GPL-3'. 12 | 13 | 14 | -------------------------------------------------------------------------------- /packaging/debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | %: 3 | dh $@ 4 | 5 | -------------------------------------------------------------------------------- /packaging/debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (quilt) 2 | -------------------------------------------------------------------------------- /packaging/debian/watch: -------------------------------------------------------------------------------- 1 | version=4 2 | opts="filenamemangle=s%(?:.*?)?v?(\d[\d.]*)\.tar\.gz%-$1.tar.gz%" \ 3 | https://github.com/Swordfish90/cool-retro-term/tags \ 4 | (?:.*?/)?v?(\d[\d.]*)\.tar\.gz debian uupdate 5 | -------------------------------------------------------------------------------- /packaging/rpm/cool-retro-term.spec: -------------------------------------------------------------------------------- 1 | # 2 | # spec file for package cool-retro-term 3 | # 4 | # Copyright © 2014 Markus S. 5 | # 6 | # This program is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # This program is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with this program. If not, see . 18 | 19 | Name: cool-retro-term 20 | Summary: Cool Retro Terminal 21 | Version: 1.0 22 | Release: 0%{?dist} 23 | Group: System/X11/Terminals 24 | License: GPL-3.0+ 25 | URL: https://github.com/Swordfish90/cool-retro-term 26 | 27 | # For this spec file to work, the cool-retro-term sources must be located 28 | # in a directory named cool-retro-term-0.9 (with "0.9" being the version 29 | # number defined above). 30 | # If the sources are compressed in another format than .tar.xz, change the 31 | # file extension accordingly. 32 | Source0: %{name}-%{version}.tar.xz 33 | 34 | BuildRequires: pkgconfig(Qt5Core) 35 | BuildRequires: pkgconfig(Qt5Declarative) 36 | BuildRequires: pkgconfig(Qt5Gui) 37 | BuildRequires: pkgconfig(Qt5Quick) 38 | BuildRequires: desktop-file-utils 39 | 40 | # Package names only verified with Fedora and openSUSE. 41 | # Should the packages in your distro be named dirrerently, 42 | # see http://en.opensuse.org/openSUSE:Build_Service_cross_distribution_howto 43 | %if 0%{?fedora} 44 | Requires: qt5-qtbase 45 | Requires: qt5-qtbase-gui 46 | Requires: qt5-qtdeclarative 47 | Requires: qt5-qtgraphicaleffects 48 | Requires: qt5-qtquickcontrols 49 | %endif 50 | 51 | %if 0%{?suse_version} 52 | Requires: libqt5-qtquickcontrols 53 | Requires: libqt5-qtbase 54 | Requires: libQt5Gui5 55 | Requires: libqt5-qtdeclarative 56 | Requires: libqt5-qtgraphicaleffects 57 | %endif 58 | 59 | %description 60 | cool-retro-term is a terminal emulator which tries to mimic the look and feel 61 | of the old cathode tube screens. It has been designed to be eye-candy, 62 | customizable, and reasonably lightweight. 63 | 64 | %prep 65 | %setup -q 66 | 67 | %build 68 | qmake-qt5 69 | make %{?_smp_mflags} 70 | 71 | %install 72 | # Work around weird qmake behaviour: http://davmac.wordpress.com/2007/02/21/qts-qmake/ 73 | make INSTALL_ROOT=%{buildroot} install 74 | 75 | desktop-file-install \ 76 | --dir=${RPM_BUILD_ROOT}%{_datadir}/applications \ 77 | %{name}.desktop 78 | 79 | %files 80 | %defattr(-,root,root,-) 81 | %doc gpl-2.0.txt gpl-3.0.txt README.md 82 | %{_bindir}/%{name} 83 | %{_libdir}/qt5/qml/ 84 | %{_datadir}/applications/%{name}.desktop 85 | %{_datadir}/icons/hicolor/*/*/* 86 | 87 | %clean 88 | rm -rf %{buildroot} 89 | 90 | %changelog 91 | * Sun Sep 7 14:03:35 UTC 2014 - kamikazow@web.de 92 | - cool-old-term has been renamed to cool-retro-term 93 | - Ported the spec file to CRT's new, way nicer build system 94 | 95 | * Fri Aug 29 20:56:20 UTC 2014 - kamikazow@web.de 96 | - Fixed: QtDeclarative-devel is required for "qmlscene" binary 97 | 98 | * Fri Aug 1 14:09:35 UTC 2014 - kamikazow@web.de 99 | - First build 100 | - cool-old-term 0.9 101 | --------------------------------------------------------------------------------