Compare commits
1 Commits
1.0.x
...
ioprofiles
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
90546e49e8 |
4
.gitmodules
vendored
@@ -1,4 +0,0 @@
|
||||
[submodule "qmltermwidget"]
|
||||
path = qmltermwidget
|
||||
url = https://github.com/Swordfish90/qmltermwidget
|
||||
branch = 0.1.x
|
||||
134
README.md
@@ -1,59 +1,30 @@
|
||||
# cool-retro-term
|
||||
#cool-retro-term
|
||||
|
||||
|> Default Amber|C:\ IBM DOS|$ Default Green|
|
||||
|---|---|---|
|
||||
||||
|
||||
|
||||
## Description
|
||||
##Description
|
||||
cool-retro-term is a terminal emulator which mimics the look and feel of the old cathode tube screens.
|
||||
It has been designed to be eye-candy, customizable, and reasonably lightweight.
|
||||
|
||||
It uses the QML port of qtermwidget (Konsole) developed by me: https://github.com/Swordfish90/qmltermwidget .
|
||||
It uses the Konsole engine which is powerful and mature.
|
||||
|
||||
This terminal emulator works under Linux and macOS and requires Qt 5.2 or higher.
|
||||
This terminal emulator requires Qt 5.2 or higher to run.
|
||||
|
||||
## Screenshots
|
||||

|
||||

|
||||

|
||||
##Screenshots
|
||||

|
||||

|
||||

|
||||
|
||||
## Get cool-retro-term
|
||||
##Get cool-retro-term
|
||||
You can either build cool-retro-term yourself (see below) or walk the easy way and install one of these packages:
|
||||
|
||||
Fedora has the `cool-retro-term` in the offcial repositories. All you have to do is `sudo dnf install cool-retro-term`.
|
||||
|
||||
Users of openSUSE can grab a package from [Open Build Service](http://software.opensuse.org/package/cool-retro-term).
|
||||
Users of Fedora and openSUSE can grab a package from [Open Build Service](http://software.opensuse.org/package/cool-retro-term).
|
||||
|
||||
Arch users can install this [package](https://aur.archlinux.org/packages/cool-retro-term-git/) directly via the [AUR](https://aur.archlinux.org):
|
||||
|
||||
yaourt -S aur/cool-retro-term-git
|
||||
|
||||
or use:
|
||||
##Build instructions (Linux)
|
||||
|
||||
pacman -S cool-retro-term
|
||||
|
||||
to install precompiled from community repository.
|
||||
|
||||
Gentoo users can now install the second release "1.0.1" from a 3rd-party repository preferably via layman:
|
||||
|
||||
USE="git" emerge app-portage/layman
|
||||
wget https://www.gerczei.eu/files/gerczei.xml -O /etc/layman/overlays/gerczei.xml
|
||||
layman -f -a qt -a gerczei # those who've added the repo before 27/08/17 should remove, update and add it again as its source has changed
|
||||
ACCEPT_KEYWORDS="~*" emerge =x11-terms/cool-retro-term-1.0.1::gerczei
|
||||
|
||||
The live ebuild (version 9999-r1) tracking the bleeding-edge WIP codebase also remains available.
|
||||
|
||||
A word of warning: USE flags and keywords are to be added to portage's configuration files and every emerge operation should be executed with '-p' (short option for --pretend) appended to the command line first as per best practice!
|
||||
|
||||
Ubuntu users of 14.04 LTS (Trusty) up to 15.10 (Wily) can use [this PPA](https://launchpad.net/~bugs-launchpad-net-falkensweb).
|
||||
|
||||
Ubuntu 17.10 can use [this PPA](https://launchpad.net/%7Evantuz/+archive/ubuntu/cool-retro-term)
|
||||
|
||||
macOS users can grab the latest dmg from the release page: https://github.com/Swordfish90/cool-retro-term/releases
|
||||
|
||||
## Build instructions (Linux)
|
||||
|
||||
## Dependencies
|
||||
##Dependencies
|
||||
Make sure to install these first.
|
||||
|
||||
---
|
||||
@@ -64,44 +35,20 @@ Make sure to install these first.
|
||||
|
||||
---
|
||||
|
||||
**Ubuntu 16.10**
|
||||
**Debian Jessie**
|
||||
|
||||
sudo apt-get install build-essential qmlscene qt5-qmake qt5-default qtdeclarative5-dev qml-module-qtquick-controls qtdeclarative5-qtquick2-plugin libqt5qml-graphicaleffects qml-module-qtquick-dialogs qtdeclarative5-localstorage-plugin qtdeclarative5-window-plugin
|
||||
|
||||
---
|
||||
|
||||
**Ubuntu 17.04**
|
||||
|
||||
sudo apt install build-essential libqt5qml-graphicaleffects qml-module-qt-labs-folderlistmodel qml-module-qt-labs-settings qml-module-qtquick-controls qml-module-qtquick-dialogs qmlscene qt5-default qt5-qmake qtdeclarative5-dev qtdeclarative5-localstorage-plugin qtdeclarative5-qtquick2-plugin qtdeclarative5-window-plugin
|
||||
|
||||
---
|
||||
|
||||
**Ubuntu 17.10**
|
||||
|
||||
sudo apt-get install build-essential qml-module-qtgraphicaleffects qml-module-qt-labs-folderlistmodel qml-module-qt-labs-settings qml-module-qtquick-controls qml-module-qtquick-dialogs qmlscene qt5-default qt5-qmake qtdeclarative5-dev qtdeclarative5-localstorage-plugin qtdeclarative5-qtquick2-plugin qtdeclarative5-window-plugin
|
||||
|
||||
---
|
||||
|
||||
**Debian Stretch and Jessie**
|
||||
|
||||
sudo apt install build-essential qmlscene qt5-qmake qt5-default qtdeclarative5-dev qml-module-qtquick-controls qml-module-qtgraphicaleffects qml-module-qtquick-dialogs qml-module-qtquick-localstorage qml-module-qtquick-window2
|
||||
|
||||
---
|
||||
|
||||
**Debian Stretch**
|
||||
|
||||
sudo apt-get install build-essential qmlscene qt5-qmake qt5-default qtdeclarative5-dev qml-module-qtquick-controls qml-module-qtgraphicaleffects qml-module-qtquick-dialogs qml-module-qtquick-localstorage qml-module-qtquick-window2 qml-module-qt-labs-settings qml-module-qt-labs-folderlistmodel
|
||||
sudo apt-get install build-essential qmlscene qt5-qmake qt5-default qtdeclarative5-dev qml-module-qtquick-controls qml-module-qtgraphicaleffects qml-module-qtquick-dialogs qml-module-qtquick-localstorage qml-module-qtquick-window2
|
||||
|
||||
---
|
||||
|
||||
**Fedora**
|
||||
This command should install the known fedora dependencies:
|
||||
|
||||
sudo yum -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols redhat-rpm-config
|
||||
sudo yum -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols
|
||||
|
||||
or:
|
||||
|
||||
sudo dnf -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols redhat-rpm-config
|
||||
sudo dnf -y install qt5-qtbase qt5-qtbase-devel qt5-qtdeclarative qt5-qtdeclarative-devel qt5-qtgraphicaleffects qt5-qtquickcontrols
|
||||
|
||||
---
|
||||
|
||||
@@ -130,12 +77,12 @@ Install Qt directly from here http://qt-project.org/downloads . Once done export
|
||||
export PATH=/opt/Qt5.3.1/5.3/gcc_64/bin/:$PATH
|
||||
---
|
||||
|
||||
### Compile
|
||||
###Compile
|
||||
Once you installed all dependencies (Qt is installed and in your path) you need to compile and run the application:
|
||||
|
||||
```bash
|
||||
# Get it from GitHub
|
||||
git clone --recursive https://github.com/Swordfish90/cool-retro-term.git
|
||||
git clone https://github.com/Swordfish90/cool-retro-term.git
|
||||
|
||||
# Build it
|
||||
cd cool-retro-term
|
||||
@@ -147,39 +94,16 @@ qmake && make
|
||||
./cool-retro-term
|
||||
```
|
||||
|
||||
## Build instructions (macOS)
|
||||
##Build instructions (OSX)
|
||||
|
||||
1. Install [Xcode](https://developer.apple.com/xcode/) and agree to the licence agreement
|
||||
2. Enter the following commands into the terminal:
|
||||
brew install qt5
|
||||
git clone https://github.com/Swordfish90/cool-retro-term.git
|
||||
export CPPFLAGS="-I/usr/local/opt/qt5/include"
|
||||
export LDFLAGS="-L/usr/local/opt/qt5/lib"
|
||||
export PATH=/usr/local/opt/qt5/bin:$PATH
|
||||
cd cool-retro-term
|
||||
qmake && make
|
||||
open cool-retro-term.app
|
||||
|
||||
**Brew**
|
||||
|
||||
```sh
|
||||
brew install qt5
|
||||
git clone --recursive https://github.com/Swordfish90/cool-retro-term.git
|
||||
export CPPFLAGS="-I/usr/local/opt/qt5/include"
|
||||
export LDFLAGS="-L/usr/local/opt/qt5/lib"
|
||||
export PATH=/usr/local/opt/qt5/bin:$PATH
|
||||
cd cool-retro-term
|
||||
qmake && make
|
||||
mkdir cool-retro-term.app/Contents/PlugIns
|
||||
cp -r qmltermwidget/QMLTermWidget cool-retro-term.app/Contents/PlugIns
|
||||
open cool-retro-term.app
|
||||
```
|
||||
|
||||
**MacPorts**
|
||||
|
||||
```sh
|
||||
sudo port install qt5
|
||||
git clone --recursive https://github.com/Swordfish90/cool-retro-term.git
|
||||
cd cool-retro-term
|
||||
/opt/local/libexec/qt5/bin/qmake && make
|
||||
mkdir cool-retro-term.app/Contents/PlugIns
|
||||
cp -r qmltermwidget/QMLTermWidget cool-retro-term.app/Contents/PlugIns
|
||||
open cool-retro-term.app
|
||||
```
|
||||
|
||||
## Donations
|
||||
I made this project in my spare time because I love what I'm doing. If you are enjoying it and you want to buy me a beer click [here](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=flscogna%40gmail%2ecom&lc=IT&item_name=Filippo%20Scognamiglio¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted).
|
||||
|
||||
You can also add "bounties" on your favourite issues. More information on the [Bountysource](https://www.bountysource.com/teams/crt/issues) page.
|
||||
##Donations
|
||||
I made this project in my spare time because I love what I'm doing. If you are enjoying it and you want to buy me a beer click [here](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=flscogna%40gmail%2ecom&lc=IT&item_name=Filippo%20Scognamiglio¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted) .
|
||||
|
||||
50
app/FileIO.h
Normal file
@@ -0,0 +1,50 @@
|
||||
#ifndef FILEIO_H
|
||||
#define FILEIO_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QFile>
|
||||
#include <QTextStream>
|
||||
#include <QUrl>
|
||||
|
||||
class FileIO : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
FileIO() {}
|
||||
|
||||
public slots:
|
||||
bool write(const QString& sourceUrl, const QString& data) {
|
||||
if (sourceUrl.isEmpty())
|
||||
return false;
|
||||
|
||||
QUrl url(sourceUrl);
|
||||
QFile file(url.toLocalFile());
|
||||
if (!file.open(QFile::WriteOnly | QFile::Truncate))
|
||||
return false;
|
||||
|
||||
QTextStream out(&file);
|
||||
out << data;
|
||||
file.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
QString read(const QString& sourceUrl) {
|
||||
if (sourceUrl.isEmpty())
|
||||
return "";
|
||||
|
||||
QUrl url(sourceUrl);
|
||||
QFile file(url.toLocalFile());
|
||||
if (!file.open(QFile::ReadOnly))
|
||||
return "";
|
||||
|
||||
QTextStream in(&file);
|
||||
QString result = in.readAll();
|
||||
|
||||
file.close();
|
||||
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // FILEIO_H
|
||||
24
app/app.pro
@@ -1,13 +1,8 @@
|
||||
QT += qml quick widgets sql
|
||||
QT += qml quick widgets
|
||||
TARGET = cool-retro-term
|
||||
|
||||
DESTDIR = $$OUT_PWD/../
|
||||
|
||||
HEADERS += \
|
||||
fileio.h
|
||||
|
||||
SOURCES = main.cpp \
|
||||
fileio.cpp
|
||||
SOURCES = main.cpp
|
||||
|
||||
macx:ICON = icons/crt.icns
|
||||
|
||||
@@ -21,16 +16,5 @@ target.path += /usr/bin/
|
||||
|
||||
INSTALLS += target
|
||||
|
||||
# Install icons
|
||||
unix {
|
||||
icon32.files = icons/32x32/cool-retro-term.png
|
||||
icon32.path = /usr/share/icons/hicolor/32x32/apps
|
||||
icon64.files = icons/64x64/cool-retro-term.png
|
||||
icon64.path = /usr/share/icons/hicolor/64x64/apps
|
||||
icon128.files = icons/128x128/cool-retro-term.png
|
||||
icon128.path = /usr/share/icons/hicolor/128x128/apps
|
||||
icon256.files = icons/256x256/cool-retro-term.png
|
||||
icon256.path = /usr/share/icons/hicolor/256x256/apps
|
||||
|
||||
INSTALLS += icon32 icon64 icon128 icon256
|
||||
}
|
||||
HEADERS += \
|
||||
FileIO.h
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
#include "fileio.h"
|
||||
|
||||
FileIO::FileIO()
|
||||
{
|
||||
}
|
||||
|
||||
bool FileIO::write(const QString& sourceUrl, const QString& data) {
|
||||
if (sourceUrl.isEmpty())
|
||||
return false;
|
||||
|
||||
QUrl url(sourceUrl);
|
||||
QFile file(url.toLocalFile());
|
||||
if (!file.open(QFile::WriteOnly | QFile::Truncate))
|
||||
return false;
|
||||
|
||||
QTextStream out(&file);
|
||||
out << data;
|
||||
file.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
QString FileIO::read(const QString& sourceUrl) {
|
||||
if (sourceUrl.isEmpty())
|
||||
return "";
|
||||
|
||||
QUrl url(sourceUrl);
|
||||
QFile file(url.toLocalFile());
|
||||
if (!file.open(QFile::ReadOnly))
|
||||
return "";
|
||||
|
||||
QTextStream in(&file);
|
||||
QString result = in.readAll();
|
||||
|
||||
file.close();
|
||||
|
||||
return result;
|
||||
}
|
||||
21
app/fileio.h
@@ -1,21 +0,0 @@
|
||||
#ifndef FILEIO_H
|
||||
#define FILEIO_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QFile>
|
||||
#include <QTextStream>
|
||||
#include <QUrl>
|
||||
|
||||
class FileIO : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
FileIO();
|
||||
|
||||
public slots:
|
||||
bool write(const QString& sourceUrl, const QString& data);
|
||||
QString read(const QString& sourceUrl);
|
||||
};
|
||||
|
||||
#endif // FILEIO_H
|
||||
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
86
app/main.cpp
@@ -5,103 +5,51 @@
|
||||
#include <QStringList>
|
||||
|
||||
#include <QtWidgets/QApplication>
|
||||
#include <QIcon>
|
||||
|
||||
#include <QDebug>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <fileio.h>
|
||||
#include <FileIO.h>
|
||||
|
||||
QString getNamedArgument(QStringList args, QString name, QString defaultName)
|
||||
{
|
||||
|
||||
QString getNamedArgument(QStringList args, QString name) {
|
||||
int index = args.indexOf(name);
|
||||
return (index != -1) ? args[index + 1] : QString(defaultName);
|
||||
}
|
||||
|
||||
QString getNamedArgument(QStringList args, QString name)
|
||||
{
|
||||
return getNamedArgument(args, name, "");
|
||||
return (index != -1) ? args[index + 1] : QString("");
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
// Some environmental variable are necessary on certain platforms.
|
||||
|
||||
// This disables QT appmenu under Ubuntu, which is not working with QML apps.
|
||||
setenv("QT_QPA_PLATFORMTHEME", "", 1);
|
||||
|
||||
#if defined(Q_OS_MAC)
|
||||
// This allows UTF-8 characters usage in OSX.
|
||||
setenv("LC_CTYPE", "UTF-8", 1);
|
||||
#endif
|
||||
|
||||
QApplication app(argc, argv);
|
||||
// set application attributes
|
||||
// Has no effects, see https://bugreports.qt.io/browse/QTBUG-51293
|
||||
// app.setAttribute(Qt::AA_MacDontSwapCtrlAndMeta, true);
|
||||
|
||||
QQmlApplicationEngine engine;
|
||||
FileIO fileIO;
|
||||
|
||||
#if !defined(Q_OS_MAC)
|
||||
app.setWindowIcon(QIcon::fromTheme("cool-retro-term", QIcon(":../icons/32x32/cool-retro-term.png")));
|
||||
#else
|
||||
app.setWindowIcon(QIcon(":../icons/32x32/cool-retro-term.png"));
|
||||
#endif
|
||||
|
||||
// Manage command line arguments from the cpp side
|
||||
QStringList args = app.arguments();
|
||||
if (args.contains("-h") || args.contains("--help")) {
|
||||
// BUG: This usage help text goes to stderr, should go to stdout.
|
||||
// BUG: First line of output is surrounded by double quotes.
|
||||
qDebug() << "Usage: " + args.at(0) + " [--default-settings] [--workdir <dir>] [--program <prog>] [-p|--profile <prof>] [--fullscreen] [-h|--help]";
|
||||
qDebug() << " --default-settings Run cool-retro-term with the default settings";
|
||||
qDebug() << " --workdir <dir> Change working directory to 'dir'";
|
||||
qDebug() << " -e <cmd> Command to execute. This option will catch all following arguments, so use it as the last option.";
|
||||
qDebug() << " -T <title> Set window title to 'title'.";
|
||||
qDebug() << " --fullscreen Run cool-retro-term in fullscreen.";
|
||||
qDebug() << " -p|--profile <prof> Run cool-retro-term with the given profile.";
|
||||
qDebug() << " -h|--help Print this help.";
|
||||
qDebug() << " --verbose Print additional information such as profiles and settings.";
|
||||
qDebug() << " --default-settings Run cool-retro-term with the default settings";
|
||||
qDebug() << " --workdir <dir> Change working directory to 'dir'";
|
||||
qDebug() << " --program <prog> Run the 'prog' in the new terminal.";
|
||||
qDebug() << " --fullscreen Run cool-retro-term in fullscreen.";
|
||||
qDebug() << " -p|--profile <prof> Run cool-retro-term with the given profile.";
|
||||
qDebug() << " -h|--help Print this help.";
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (args.contains("-v") || args.contains("--version")) {
|
||||
qDebug() << "cool-retro-term 1.0.1";
|
||||
return 0;
|
||||
}
|
||||
engine.rootContext()->setContextProperty("workdir", getNamedArgument(args, "--workdir"));
|
||||
engine.rootContext()->setContextProperty("shellProgram", getNamedArgument(args, "--program"));
|
||||
|
||||
// Manage default command
|
||||
QStringList cmdList;
|
||||
if (args.contains("-e")) {
|
||||
cmdList << args.mid(args.indexOf("-e") + 1);
|
||||
}
|
||||
QVariant command(cmdList.empty() ? QVariant() : cmdList[0]);
|
||||
QVariant commandArgs(cmdList.size() <= 1 ? QVariant() : QVariant(cmdList.mid(1)));
|
||||
engine.rootContext()->setContextProperty("defaultCmd", command);
|
||||
engine.rootContext()->setContextProperty("defaultCmdArgs", commandArgs);
|
||||
|
||||
engine.rootContext()->setContextProperty("workdir", getNamedArgument(args, "--workdir", "$HOME"));
|
||||
engine.rootContext()->setContextProperty("fileIO", &fileIO);
|
||||
|
||||
engine.rootContext()->setContextProperty("devicePixelRatio", app.devicePixelRatio());
|
||||
// Used to read and write files
|
||||
FileIO fileIO;
|
||||
engine.rootContext()->setContextProperty("fileio", &fileIO);
|
||||
|
||||
// Manage import paths for Linux and OSX.
|
||||
QStringList importPathList = engine.importPathList();
|
||||
importPathList.prepend(QCoreApplication::applicationDirPath() + "/qmltermwidget");
|
||||
importPathList.prepend(QCoreApplication::applicationDirPath() + "/imports/");
|
||||
importPathList.prepend(QCoreApplication::applicationDirPath() + "/../PlugIns");
|
||||
importPathList.prepend(QCoreApplication::applicationDirPath() + "/../../../qmltermwidget");
|
||||
engine.setImportPathList(importPathList);
|
||||
|
||||
engine.load(QUrl(QStringLiteral ("qrc:/main.qml")));
|
||||
|
||||
if (engine.rootObjects().isEmpty()) {
|
||||
qDebug() << "Cannot load QML interface";
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// Quit the application when the engine closes.
|
||||
QObject::connect((QObject*) &engine, SIGNAL(quit()), (QObject*) &app, SLOT(quit()));
|
||||
engine.load(QUrl("qrc:/main.qml"));
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
|
||||
@@ -6,10 +6,8 @@ import QtQuick.Window 2.0
|
||||
Window{
|
||||
id: dialogwindow
|
||||
title: qsTr("About")
|
||||
width: 600
|
||||
height: 400
|
||||
|
||||
modality: Qt.ApplicationModal
|
||||
width: 450
|
||||
height: 300
|
||||
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
@@ -66,18 +64,20 @@ Window{
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
spacing: 10
|
||||
Image{
|
||||
Layout.fillWidth: true
|
||||
Item{
|
||||
Layout.fillHeight: true
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
fillMode: Image.PreserveAspectFit
|
||||
source: "images/crt256.png"
|
||||
smooth: true
|
||||
Layout.fillWidth: true
|
||||
Image{
|
||||
anchors.fill: parent
|
||||
fillMode: Image.PreserveAspectFit
|
||||
source: "images/crt256.png"
|
||||
smooth: true
|
||||
}
|
||||
}
|
||||
Text{
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: appSettings.version + "\n" +
|
||||
text: shadersettings.version + "\n" +
|
||||
qsTr("Author: ") + "Filippo Scognamiglio\n" +
|
||||
qsTr("Email: ") + "flscogna@gmail.com\n" +
|
||||
qsTr("Source: ") + "https://github.com/Swordfish90/cool-retro-term\n"
|
||||
|
||||
@@ -19,72 +19,67 @@
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.0
|
||||
|
||||
import "utils.js" as Utils
|
||||
|
||||
QtObject{
|
||||
property string version: "1.0.1"
|
||||
|
||||
// STATIC CONSTANTS ////////////////////////////////////////////////////////
|
||||
Item{
|
||||
property string version: "0.9"
|
||||
|
||||
readonly property real minimumFontScaling: 0.25
|
||||
readonly property real maximumFontScaling: 2.50
|
||||
|
||||
// GENERAL SETTINGS ///////////////////////////////////////////////////////
|
||||
|
||||
property int x: 100
|
||||
property int y: 100
|
||||
property int width: 1024
|
||||
property int height: 768
|
||||
// GENERAL SETTINGS ///////////////////////////////////////////////////
|
||||
|
||||
property bool fullscreen: false
|
||||
property bool showMenubar: true
|
||||
|
||||
property string wintitle: "cool-retro-term"
|
||||
|
||||
property real windowOpacity: 1.0
|
||||
property real ambientLight: 0.2
|
||||
property real ambient_light: 0.2
|
||||
property real contrast: 0.85
|
||||
property real brightness: 0.5
|
||||
|
||||
property bool showTerminalSize: true
|
||||
property real windowScaling: 1.0
|
||||
property bool show_terminal_size: true
|
||||
|
||||
property real fps: 24
|
||||
property bool verbose: false
|
||||
property real window_scaling: 1.0
|
||||
onWindow_scalingChanged: handleFontChanged();
|
||||
|
||||
onWindowScalingChanged: handleFontChanged();
|
||||
property real fps: 0
|
||||
|
||||
function mix(c1, c2, alpha){
|
||||
return Qt.rgba(c1.r * alpha + c2.r * (1-alpha),
|
||||
c1.g * alpha + c2.g * (1-alpha),
|
||||
c1.b * alpha + c2.b * (1-alpha),
|
||||
c1.a * alpha + c2.a * (1-alpha))
|
||||
}
|
||||
function strToColor(s){
|
||||
var r = parseInt(s.substring(1,3), 16) / 256;
|
||||
var g = parseInt(s.substring(3,5), 16) / 256;
|
||||
var b = parseInt(s.substring(5,7), 16) / 256;
|
||||
return Qt.rgba(r, g, b, 1.0);
|
||||
}
|
||||
|
||||
// PROFILE SETTINGS ///////////////////////////////////////////////////////
|
||||
|
||||
property bool useCustomCommand: false
|
||||
property string customCommand: ""
|
||||
property string _background_color: "#000000"
|
||||
property string _font_color: "#ff8100"
|
||||
property string saturated_color: mix(strToColor("#FFFFFF"), strToColor(_font_color), saturation_color * 0.5)
|
||||
property color font_color: mix(strToColor(saturated_color), strToColor(_background_color), 0.7 + (contrast * 0.3))
|
||||
property color background_color: mix(strToColor(_background_color), strToColor(saturated_color), 0.7 + (contrast * 0.3))
|
||||
|
||||
property string _backgroundColor: "#000000"
|
||||
property string _fontColor: "#ff8100"
|
||||
property string saturatedColor: Utils.mix(Utils.strToColor("#FFFFFF"), Utils.strToColor(_fontColor), saturationColor * 0.5)
|
||||
property color fontColor: Utils.mix(Utils.strToColor(saturatedColor), Utils.strToColor(_backgroundColor), 0.7 + (contrast * 0.3))
|
||||
property color backgroundColor: Utils.mix(Utils.strToColor(_backgroundColor), Utils.strToColor(saturatedColor), 0.7 + (contrast * 0.3))
|
||||
property real noise_strength: 0.1
|
||||
property real screen_distortion: 0.1
|
||||
property real glowing_line_strength: 0.2
|
||||
property real motion_blur: 0.40
|
||||
property real bloom_strength: 0.65
|
||||
|
||||
property real staticNoise: 0.1
|
||||
property real screenCurvature: 0.1
|
||||
property real glowingLine: 0.2
|
||||
property real burnIn: 0.40
|
||||
property real bloom: 0.65
|
||||
property real bloom_quality: 1.0
|
||||
|
||||
property real bloomQuality: 0.5
|
||||
property real burnInQuality: 0.5
|
||||
|
||||
property real chromaColor: 0.0
|
||||
property real saturationColor: 0.0
|
||||
property real chroma_color: 0.0
|
||||
property real saturation_color: 0.0
|
||||
|
||||
property real jitter: 0.18
|
||||
|
||||
property real horizontalSync: 0.08
|
||||
property real flickering: 0.1
|
||||
property real horizontal_sincronization: 0.08
|
||||
property real brightness_flickering: 0.1
|
||||
|
||||
property real rbgShift: 0.0
|
||||
property real rgb_shift: 0.0
|
||||
|
||||
readonly property int no_rasterization: 0
|
||||
readonly property int scanline_rasterization: 1
|
||||
@@ -92,21 +87,28 @@ QtObject{
|
||||
|
||||
property int rasterization: no_rasterization
|
||||
|
||||
property int scanline_quality: 3
|
||||
onScanline_qualityChanged: handleFontChanged();
|
||||
|
||||
ListModel{
|
||||
id: framelist
|
||||
ListElement{text: "No frame"; source: "./frames/NoFrame.qml"; reflections: false}
|
||||
ListElement{text: "Simple white frame"; source: "./frames/WhiteSimpleFrame.qml"; reflections: true}
|
||||
ListElement{text: "Rough black frame"; source: "./frames/BlackRoughFrame.qml"; reflections: true}
|
||||
}
|
||||
|
||||
property string frame_source: frames_list.get(frames_index).source
|
||||
property int frames_index: 1
|
||||
property var frames_list: framelist
|
||||
|
||||
|
||||
// FONTS //////////////////////////////////////////////////////////////////
|
||||
|
||||
property real fontScaling: 1.0
|
||||
property real fontWidth: 1.0
|
||||
signal terminalFontChanged(string fontSource, int pixelSize, int lineSpacing, real screenScaling)
|
||||
|
||||
property bool lowResolutionFont: false
|
||||
Loader{
|
||||
id: fontManager
|
||||
|
||||
property var fontNames: ["TERMINUS_SCALED", "COMMODORE_PET", "COMMODORE_PET"]
|
||||
property var fontlist: fontManager.item.fontlist
|
||||
|
||||
signal terminalFontChanged(string fontSource, int pixelSize, int lineSpacing, real screenScaling, real fontWidth)
|
||||
|
||||
signal initializedSettings()
|
||||
|
||||
property Loader fontManager: Loader{
|
||||
states: [
|
||||
State { when: rasterization == no_rasterization
|
||||
PropertyChanges {target: fontManager; source: "Fonts.qml" } },
|
||||
@@ -119,152 +121,95 @@ QtObject{
|
||||
onLoaded: handleFontChanged()
|
||||
}
|
||||
|
||||
property real fontScaling: 1.0
|
||||
onFontScalingChanged: handleFontChanged();
|
||||
onFontWidthChanged: handleFontChanged();
|
||||
|
||||
function getIndexByName(name) {
|
||||
for (var i = 0; i < fontlist.count; i++) {
|
||||
if (name === fontlist.get(i).name)
|
||||
return i;
|
||||
}
|
||||
return 0; // If the font is not available default to 0.
|
||||
}
|
||||
|
||||
function incrementScaling(){
|
||||
fontScaling = Math.min(fontScaling + 0.05, maximumFontScaling);
|
||||
fontScaling = Math.min(fontScaling + 0.05, 2.50);
|
||||
handleFontChanged();
|
||||
}
|
||||
|
||||
function decrementScaling(){
|
||||
fontScaling = Math.max(fontScaling - 0.05, minimumFontScaling);
|
||||
fontScaling = Math.max(fontScaling - 0.05, 0.50);
|
||||
handleFontChanged();
|
||||
}
|
||||
|
||||
property real fontWidth: 1.0
|
||||
onFontWidthChanged: handleFontChanged();
|
||||
|
||||
property var fontIndexes: [0,0,0]
|
||||
property var fontlist: fontManager.item.fontlist
|
||||
|
||||
function handleFontChanged(){
|
||||
if (!fontManager.item) return;
|
||||
|
||||
var index = getIndexByName(fontNames[rasterization]);
|
||||
if (index === undefined) return;
|
||||
|
||||
fontManager.item.selectedFontIndex = index;
|
||||
fontManager.item.scaling = fontScaling * windowScaling;
|
||||
if(!fontManager.item) return;
|
||||
fontManager.item.selectedFontIndex = fontIndexes[rasterization];
|
||||
fontManager.item.scaling = fontScaling * window_scaling;
|
||||
|
||||
var fontSource = fontManager.item.source;
|
||||
var pixelSize = fontManager.item.pixelSize;
|
||||
var lineSpacing = fontManager.item.lineSpacing;
|
||||
var screenScaling = fontManager.item.screenScaling;
|
||||
var fontWidth = fontManager.item.defaultFontWidth * appSettings.fontWidth;
|
||||
|
||||
lowResolutionFont = fontManager.item.lowResolutionFont;
|
||||
|
||||
terminalFontChanged(fontSource, pixelSize, lineSpacing, screenScaling, fontWidth);
|
||||
terminalFontChanged(fontSource, pixelSize, lineSpacing, screenScaling);
|
||||
}
|
||||
|
||||
// FRAMES /////////////////////////////////////////////////////////////////
|
||||
|
||||
property ListModel framesList: ListModel{
|
||||
ListElement{
|
||||
name: "NO_FRAME"
|
||||
text: "No frame"
|
||||
source: ""
|
||||
reflections: false
|
||||
}
|
||||
ListElement{
|
||||
name: "SIMPLE_WHITE_FRAME"
|
||||
text: "Simple white frame"
|
||||
source: "./frames/WhiteSimpleFrame.qml"
|
||||
reflections: true
|
||||
}
|
||||
ListElement{
|
||||
name: "ROUGH_BLACK_FRAME"
|
||||
text: "Rough black frame"
|
||||
source: "./frames/BlackRoughFrame.qml"
|
||||
reflections: true
|
||||
}
|
||||
}
|
||||
|
||||
function getFrameIndexByName(name) {
|
||||
for (var i = 0; i < framesList.count; i++) {
|
||||
if (name === framesList.get(i).name)
|
||||
return i;
|
||||
}
|
||||
return 0; // If the frame is not available default to 0.
|
||||
}
|
||||
|
||||
property string frameSource: "./frames/WhiteSimpleFrame.qml"
|
||||
property string frameName: "SIMPLE_WHITE_FRAME"
|
||||
|
||||
property bool _frameReflections: false
|
||||
property bool reflectionsAllowed: true
|
||||
property bool _frameReflections: true
|
||||
property bool reflectionsAllowed: framelist.get(frames_index).reflections
|
||||
property bool frameReflections: _frameReflections && reflectionsAllowed
|
||||
|
||||
onFrameNameChanged: {
|
||||
var index = getFrameIndexByName(frameName);
|
||||
frameSource = framesList.get(index).source;
|
||||
reflectionsAllowed = framesList.get(index).reflections;
|
||||
}
|
||||
property alias profiles_list: profileslist
|
||||
property int profiles_index: 0
|
||||
|
||||
// DB STORAGE /////////////////////////////////////////////////////////////
|
||||
|
||||
property Storage storage: Storage{ }
|
||||
|
||||
function stringify(obj) {
|
||||
var replacer = function(key, val) {
|
||||
return val.toFixed ? Number(val.toFixed(4)) : val;
|
||||
}
|
||||
return JSON.stringify(obj, replacer, 2);
|
||||
}
|
||||
Storage{id: storage}
|
||||
|
||||
function composeSettingsString(){
|
||||
var settings = {
|
||||
fps: fps,
|
||||
x: x,
|
||||
y: y,
|
||||
width: width,
|
||||
height: height,
|
||||
windowScaling: windowScaling,
|
||||
showTerminalSize: showTerminalSize,
|
||||
window_scaling: window_scaling,
|
||||
show_terminal_size: show_terminal_size,
|
||||
fontScaling: fontScaling,
|
||||
fontNames: fontNames,
|
||||
fontIndexes: fontIndexes,
|
||||
frameReflections: _frameReflections,
|
||||
showMenubar: showMenubar,
|
||||
bloomQuality: bloomQuality,
|
||||
burnInQuality: burnInQuality
|
||||
scanline_quality: scanline_quality,
|
||||
bloom_quality: bloom_quality
|
||||
}
|
||||
return stringify(settings);
|
||||
return JSON.stringify(settings);
|
||||
}
|
||||
|
||||
function composeProfileObject(){
|
||||
var settings = {
|
||||
backgroundColor: _backgroundColor,
|
||||
fontColor: _fontColor,
|
||||
flickering: flickering,
|
||||
horizontalSync: horizontalSync,
|
||||
staticNoise: staticNoise,
|
||||
chromaColor: chromaColor,
|
||||
saturationColor: saturationColor,
|
||||
screenCurvature: screenCurvature,
|
||||
glowingLine: glowingLine,
|
||||
frameName: frameName,
|
||||
burnIn: burnIn,
|
||||
bloom: bloom,
|
||||
var profile = {
|
||||
background_color: _background_color,
|
||||
font_color: _font_color,
|
||||
brightness_flickering: brightness_flickering,
|
||||
horizontal_sincronization: horizontal_sincronization,
|
||||
noise_strength: noise_strength,
|
||||
chroma_color: chroma_color,
|
||||
saturation_color: saturation_color,
|
||||
screen_distortion: screen_distortion,
|
||||
glowing_line_strength: glowing_line_strength,
|
||||
frames_index: frames_index,
|
||||
motion_blur: motion_blur,
|
||||
bloom_strength: bloom_strength,
|
||||
rasterization: rasterization,
|
||||
jitter: jitter,
|
||||
rbgShift: rbgShift,
|
||||
rgb_shift: rgb_shift,
|
||||
brightness: brightness,
|
||||
contrast: contrast,
|
||||
ambientLight: ambientLight,
|
||||
ambient_light: ambient_light,
|
||||
windowOpacity: windowOpacity,
|
||||
fontName: fontNames[rasterization],
|
||||
fontWidth: fontWidth,
|
||||
useCustomCommand: useCustomCommand,
|
||||
customCommand: customCommand
|
||||
fontIndex: fontIndexes[rasterization],
|
||||
fontWidth: fontWidth
|
||||
}
|
||||
return settings;
|
||||
return profile;
|
||||
}
|
||||
|
||||
function composeProfileString() {
|
||||
return stringify(composeProfileObject());
|
||||
function composeProfileString(){
|
||||
return JSON.stringify(composeProfileObject());
|
||||
}
|
||||
|
||||
function loadSettings(){
|
||||
@@ -277,8 +222,7 @@ QtObject{
|
||||
loadSettingsString(settingsString);
|
||||
loadProfileString(profileString);
|
||||
|
||||
if (verbose)
|
||||
console.log("Loading settings: " + settingsString + profileString);
|
||||
console.log("Loading settings: " + settingsString + profileString);
|
||||
}
|
||||
|
||||
function storeSettings(){
|
||||
@@ -288,73 +232,61 @@ QtObject{
|
||||
storage.setSetting("_CURRENT_SETTINGS", settingsString);
|
||||
storage.setSetting("_CURRENT_PROFILE", profileString);
|
||||
|
||||
if (verbose) {
|
||||
console.log("Storing settings: " + settingsString);
|
||||
console.log("Storing profile: " + profileString);
|
||||
}
|
||||
console.log("Storing settings: " + settingsString);
|
||||
console.log("Storing profile: " + profileString);
|
||||
}
|
||||
|
||||
function loadSettingsString(settingsString){
|
||||
var settings = JSON.parse(settingsString);
|
||||
|
||||
showTerminalSize = settings.showTerminalSize !== undefined ? settings.showTerminalSize : showTerminalSize
|
||||
show_terminal_size = settings.show_terminal_size !== undefined ? settings.show_terminal_size : show_terminal_size
|
||||
|
||||
fps = settings.fps !== undefined ? settings.fps: fps
|
||||
windowScaling = settings.windowScaling !== undefined ? settings.windowScaling : windowScaling
|
||||
window_scaling = settings.window_scaling !== undefined ? settings.window_scaling : window_scaling
|
||||
|
||||
x = settings.x !== undefined ? settings.x : x
|
||||
y = settings.y !== undefined ? settings.y : y
|
||||
width = settings.width !== undefined ? settings.width : width
|
||||
height = settings.height !== undefined ? settings.height : height
|
||||
|
||||
fontNames = settings.fontNames !== undefined ? settings.fontNames : fontNames
|
||||
fontIndexes = settings.fontIndexes !== undefined ? settings.fontIndexes : fontIndexes
|
||||
fontScaling = settings.fontScaling !== undefined ? settings.fontScaling : fontScaling
|
||||
|
||||
_frameReflections = settings.frameReflections !== undefined ? settings.frameReflections : _frameReflections;
|
||||
|
||||
showMenubar = settings.showMenubar !== undefined ? settings.showMenubar : showMenubar;
|
||||
|
||||
bloomQuality = settings.bloomQuality !== undefined ? settings.bloomQuality : bloomQuality;
|
||||
burnInQuality = settings.burnInQuality !== undefined ? settings.burnInQuality : burnInQuality;
|
||||
scanline_quality = settings.scanline_quality !== undefined ? settings.scanline_quality : scanline_quality;
|
||||
bloom_quality = settings.bloom_quality !== undefined ? settings.bloom_quality : bloom_quality;
|
||||
}
|
||||
|
||||
function loadProfileString(profileString){
|
||||
var settings = JSON.parse(profileString);
|
||||
|
||||
_backgroundColor = settings.backgroundColor !== undefined ? settings.backgroundColor : _backgroundColor;
|
||||
_fontColor = settings.fontColor !== undefined ? settings.fontColor : _fontColor;
|
||||
_background_color = settings.background_color !== undefined ? settings.background_color : _background_color;
|
||||
_font_color = settings.font_color !== undefined ? settings.font_color : _font_color;
|
||||
|
||||
horizontalSync = settings.horizontalSync !== undefined ? settings.horizontalSync : horizontalSync
|
||||
flickering = settings.flickering !== undefined ? settings.flickering : flickering;
|
||||
staticNoise = settings.staticNoise !== undefined ? settings.staticNoise : staticNoise;
|
||||
chromaColor = settings.chromaColor !== undefined ? settings.chromaColor : chromaColor;
|
||||
saturationColor = settings.saturationColor !== undefined ? settings.saturationColor : saturationColor;
|
||||
screenCurvature = settings.screenCurvature !== undefined ? settings.screenCurvature : screenCurvature;
|
||||
glowingLine = settings.glowingLine !== undefined ? settings.glowingLine : glowingLine;
|
||||
horizontal_sincronization = settings.horizontal_sincronization !== undefined ? settings.horizontal_sincronization : horizontal_sincronization
|
||||
brightness_flickering = settings.brightness_flickering !== undefined ? settings.brightness_flickering : brightness_flickering;
|
||||
noise_strength = settings.noise_strength !== undefined ? settings.noise_strength : noise_strength;
|
||||
chroma_color = settings.chroma_color !== undefined ? settings.chroma_color : chroma_color;
|
||||
saturation_color = settings.saturation_color !== undefined ? settings.saturation_color : saturation_color;
|
||||
screen_distortion = settings.screen_distortion !== undefined ? settings.screen_distortion : screen_distortion;
|
||||
glowing_line_strength = settings.glowing_line_strength !== undefined ? settings.glowing_line_strength : glowing_line_strength;
|
||||
|
||||
burnIn = settings.burnIn !== undefined ? settings.burnIn : burnIn
|
||||
bloom = settings.bloom !== undefined ? settings.bloom : bloom
|
||||
motion_blur = settings.motion_blur !== undefined ? settings.motion_blur : motion_blur
|
||||
bloom_strength = settings.bloom_strength !== undefined ? settings.bloom_strength : bloom_strength
|
||||
|
||||
frameName = settings.frameName !== undefined ? settings.frameName : frameName;
|
||||
frames_index = settings.frames_index !== undefined ? settings.frames_index : frames_index;
|
||||
|
||||
rasterization = settings.rasterization !== undefined ? settings.rasterization : rasterization;
|
||||
|
||||
jitter = settings.jitter !== undefined ? settings.jitter : jitter;
|
||||
|
||||
rbgShift = settings.rbgShift !== undefined ? settings.rbgShift : rbgShift;
|
||||
rgb_shift = settings.rgb_shift !== undefined ? settings.rgb_shift : rgb_shift;
|
||||
|
||||
ambientLight = settings.ambientLight !== undefined ? settings.ambientLight : ambientLight;
|
||||
ambient_light = settings.ambient_light !== undefined ? settings.ambient_light : ambient_light;
|
||||
contrast = settings.contrast !== undefined ? settings.contrast : contrast;
|
||||
brightness = settings.brightness !== undefined ? settings.brightness : brightness;
|
||||
windowOpacity = settings.windowOpacity !== undefined ? settings.windowOpacity : windowOpacity;
|
||||
|
||||
fontNames[rasterization] = settings.fontName !== undefined ? settings.fontName : fontNames[rasterization];
|
||||
fontIndexes[rasterization] = settings.fontIndex !== undefined ? settings.fontIndex : fontIndexes[rasterization];
|
||||
fontWidth = settings.fontWidth !== undefined ? settings.fontWidth : fontWidth;
|
||||
|
||||
useCustomCommand = settings.useCustomCommand !== undefined ? settings.useCustomCommand : useCustomCommand
|
||||
customCommand = settings.customCommand !== undefined ? settings.customCommand : customCommand
|
||||
|
||||
handleFontChanged();
|
||||
}
|
||||
|
||||
function storeCustomProfiles(){
|
||||
@@ -371,91 +303,89 @@ QtObject{
|
||||
var customProfiles = JSON.parse(customProfilesString);
|
||||
for (var i=0; i<customProfiles.length; i++) {
|
||||
var profile = customProfiles[i];
|
||||
|
||||
if (verbose)
|
||||
console.log("Loading custom profile: " + stringify(profile));
|
||||
|
||||
profilesList.append(profile);
|
||||
console.log("Loading custom profile: " + JSON.stringify(profile));
|
||||
profiles_list.append(profile);
|
||||
}
|
||||
}
|
||||
|
||||
function composeCustomProfilesString(){
|
||||
var customProfiles = []
|
||||
for(var i=0; i<profilesList.count; i++){
|
||||
var profile = profilesList.get(i);
|
||||
for(var i=0; i<profileslist.count; i++){
|
||||
var profile = profileslist.get(i);
|
||||
if(profile.builtin) continue;
|
||||
customProfiles.push({text: profile.text, obj_string: profile.obj_string, builtin: false})
|
||||
}
|
||||
return stringify(customProfiles);
|
||||
return JSON.stringify(customProfiles);
|
||||
}
|
||||
|
||||
function loadCurrentProfile(){
|
||||
loadProfile(profiles_index);
|
||||
}
|
||||
|
||||
function loadProfile(index){
|
||||
var profile = profilesList.get(index);
|
||||
var profile = profileslist.get(index);
|
||||
loadProfileString(profile.obj_string);
|
||||
}
|
||||
|
||||
function appendCustomProfile(name, profileString) {
|
||||
profilesList.append({text: name, obj_string: profileString, builtin: false});
|
||||
function addNewCustomProfile(name){
|
||||
var profileString = composeProfileString();
|
||||
profileslist.append({text: name, obj_string: profileString, builtin: false});
|
||||
}
|
||||
|
||||
// PROFILES ///////////////////////////////////////////////////////////////
|
||||
|
||||
property ListModel profilesList: ListModel{
|
||||
ListModel{
|
||||
id: profileslist
|
||||
ListElement{
|
||||
text: "Default Amber"
|
||||
obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0.65,"brightness":0.5,"flickering":0.1,"contrast":0.85,"fontName":"TERMINUS_SCALED","fontColor":"#ff8100","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0.2,"horizontalSync":0.16,"jitter":0.18,"burnIn":0.4,"staticNoise":0.1,"rasterization":0,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
|
||||
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.65,"brightness":0.5,"brightness_flickering":0.1,"contrast":0.85,"fontIndex":0,"font_color":"#ff8100","frames_index":1,"glowing_line_strength":0.2,"horizontal_sincronization":0.08,"jitter":0.18,"motion_blur":0.4,"noise_strength":0.1,"rasterization":0,"screen_distortion":0.1,"windowOpacity":1,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}'
|
||||
builtin: true
|
||||
}
|
||||
ListElement{
|
||||
text: "Default Green"
|
||||
obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0.4,"brightness":0.5,"flickering":0.1,"contrast":0.85,"fontName":"TERMINUS_SCALED","fontColor":"#0ccc68","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0.2,"horizontalSync":0.16,"jitter":0.18,"burnIn":0.45,"staticNoise":0.1,"rasterization":0,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
|
||||
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.4,"brightness":0.5,"brightness_flickering":0.1,"contrast":0.85,"fontIndex":0,"font_color":"#0ccc68","frames_index":1,"glowing_line_strength":0.2,"horizontal_sincronization":0.08,"jitter":0.18,"motion_blur":0.45,"noise_strength":0.1,"rasterization":0,"screen_distortion":0.1,"windowOpacity":1,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}'
|
||||
builtin: true
|
||||
}
|
||||
ListElement{
|
||||
text: "Default Scanlines"
|
||||
obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0.4,"brightness":0.5,"flickering":0.1,"contrast":0.85,"fontName":"COMMODORE_PET","fontColor":"#00ff5b","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0.2,"horizontalSync":0.14,"jitter":0.11,"burnIn":0.4,"staticNoise":0.05,"rasterization":1,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
|
||||
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.4,"brightness":0.5,"brightness_flickering":0.1,"contrast":0.85,"fontIndex":0,"font_color":"#00ff5b","frames_index":1,"glowing_line_strength":0.2,"horizontal_sincronization":0.07,"jitter":0.11,"motion_blur":0.4,"noise_strength":0.05,"rasterization":1,"screen_distortion":0.1,"windowOpacity":1,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}'
|
||||
builtin: true
|
||||
}
|
||||
ListElement{
|
||||
text: "Default Pixelated"
|
||||
obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0,"brightness":0.5,"flickering":0.2,"contrast":0.85,"fontName":"COMMODORE_PET","fontColor":"#ffffff","frameName":"ROUGH_BLACK_FRAME","glowingLine":0.2,"horizontalSync":0.2,"jitter":0,"burnIn":0.45,"staticNoise":0.19,"rasterization":2,"screenCurvature":0.05,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
|
||||
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.4,"brightness":0.5,"brightness_flickering":0.1,"contrast":0.85,"fontIndex":0,"font_color":"#ff8100","frames_index":1,"glowing_line_strength":0.2,"horizontal_sincronization":0.1,"jitter":0,"motion_blur":0.45,"noise_strength":0.14,"rasterization":2,"screen_distortion":0.05,"windowOpacity":1,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}'
|
||||
builtin: true
|
||||
}
|
||||
ListElement{
|
||||
text: "Apple ]["
|
||||
obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0.5,"brightness":0.5,"flickering":0.2,"contrast":0.85,"fontName":"APPLE_II","fontColor":"#2fff91","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0.22,"horizontalSync":0.16,"jitter":0.1,"burnIn":0.65,"staticNoise":0.08,"rasterization":1,"screenCurvature":0.18,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
|
||||
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.5,"brightness":0.5,"brightness_flickering":0.2,"contrast":0.85,"fontIndex":2,"font_color":"#2fff91","frames_index":1,"glowing_line_strength":0.22,"horizontal_sincronization":0.08,"jitter":0.1,"motion_blur":0.65,"noise_strength":0.08,"rasterization":1,"screen_distortion":0.18,"windowOpacity":1,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}'
|
||||
builtin: true
|
||||
}
|
||||
ListElement{
|
||||
text: "Vintage"
|
||||
obj_string: '{"ambientLight":0.5,"backgroundColor":"#000000","bloom":0.4,"brightness":0.5,"flickering":0.9,"contrast":0.80,"fontName":"COMMODORE_PET","fontColor":"#00ff3e","frameName":"ROUGH_BLACK_FRAME","glowingLine":0.3,"horizontalSync":0.42,"jitter":0.4,"burnIn":0.75,"staticNoise":0.2,"rasterization":1,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
|
||||
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.4,"brightness":0.5,"brightness_flickering":0.54,"contrast":0.85,"fontIndex":0,"font_color":"#00ff3e","frames_index":2,"glowing_line_strength":0.3,"horizontal_sincronization":0.2,"jitter":0.4,"motion_blur":0.75,"noise_strength":0.2,"rasterization":1,"screen_distortion":0.1,"windowOpacity":1,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}'
|
||||
builtin: true
|
||||
}
|
||||
ListElement{
|
||||
text: "IBM Dos"
|
||||
obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0.4,"brightness":0.5,"flickering":0.07,"contrast":0.85,"fontName":"IBM_DOS","fontColor":"#ffffff","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0.13,"horizontalSync":0,"jitter":0.16,"burnIn":0.3,"staticNoise":0.03,"rasterization":0,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":1,"saturationColor":0,"rbgShift":0.35,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
|
||||
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.4,"brightness":0.5,"brightness_flickering":0.07,"contrast":0.85,"fontIndex":7,"font_color":"#ffffff","frames_index":1,"glowing_line_strength":0.13,"horizontal_sincronization":0,"jitter":0.08,"motion_blur":0.3,"noise_strength":0.03,"rasterization":0,"screen_distortion":0.1,"windowOpacity":1,"chroma_color":1,"saturation_color":0,"rgb_shift":0.5,"fontWidth":1.0}'
|
||||
builtin: true
|
||||
}
|
||||
ListElement{
|
||||
text: "IBM 3278"
|
||||
obj_string: '{"ambientLight":0.1,"backgroundColor":"#000000","bloom":0.15,"brightness":0.5,"flickering":0,"contrast":0.85,"fontName":"IBM_3278","fontColor":"#0ccc68","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0,"horizontalSync":0,"jitter":0,"burnIn":0.6,"staticNoise":0,"rasterization":0,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
|
||||
builtin: true
|
||||
}
|
||||
ListElement{
|
||||
text: "Knight TV"
|
||||
obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0.45,"brightness":0.5,"burnIn":0.3,"chromaColor":0,"contrast":0.85,"customCommand":"","flickering":0.1,"fontColor":"#0ccc68","fontName":"Knight_TV","fontWidth":1,"frameName":"SIMPLE_WHITE_FRAME","glowingLine":0,"horizontalSync":0.16,"jitter":0,"rasterization":0,"rbgShift":0,"saturationColor":0,"screenCurvature":0.07,"staticNoise":0,"useCustomCommand":false,"windowOpacity":1}'
|
||||
obj_string: '{"ambient_light":0.1,"background_color":"#000000","bloom_strength":0.15,"brightness":0.5,"brightness_flickering":0,"contrast":0.95,"fontIndex":8,"font_color":"#0ccc68","frames_index":1,"glowing_line_strength":0,"horizontal_sincronization":0,"jitter":0,"motion_blur":0.6,"noise_strength":0,"rasterization":0,"screen_distortion":0.1,"windowOpacity":1,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}'
|
||||
builtin: true
|
||||
}
|
||||
ListElement{
|
||||
text: "Transparent Green"
|
||||
obj_string: '{"ambientLight":0.2,"backgroundColor":"#000000","bloom":0.45,"brightness":0.5,"flickering":0.20,"contrast":0.85,"fontName":"TERMINUS_SCALED","fontColor":"#0ccc68","frameName":"NO_FRAME","glowingLine":0.16,"horizontalSync":0.1,"jitter":0.20,"burnIn":0.25,"staticNoise":0.20,"rasterization":0,"screenCurvature":0.05,"windowOpacity":0.60,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
|
||||
obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.4549689440993788,"brightness":0.5,"brightness_flickering":0.20341614906832298,"contrast":0.85,"fontIndex":0,"font_color":"#0ccc68","frames_index":0,"glowing_line_strength":0.15993788819875776,"horizontal_sincronization":0.05045871559633028,"jitter":0.20341614906832298,"motion_blur":0.24999999999999997,"noise_strength":0.20031055900621117,"rasterization":0,"screen_distortion":0.05045871559633028,"windowOpacity":0.5956221198156681,"chroma_color":0,"saturation_color":0,"rgb_shift":0,"fontWidth":1.0}'
|
||||
builtin: true
|
||||
}
|
||||
}
|
||||
|
||||
function getProfileIndexByName(name) {
|
||||
for (var i = 0; i < profilesList.count; i++) {
|
||||
if(profilesList.get(i).text === name)
|
||||
for (var i = 0; i < profileslist.count; i++) {
|
||||
if(profileslist.get(i).text === name)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
@@ -464,9 +394,6 @@ QtObject{
|
||||
Component.onCompleted: {
|
||||
// Manage the arguments from the QML side.
|
||||
var args = Qt.application.arguments;
|
||||
if (args.indexOf("--verbose") !== -1) {
|
||||
verbose = true;
|
||||
}
|
||||
if (args.indexOf("--default-settings") === -1) {
|
||||
loadSettings();
|
||||
}
|
||||
@@ -486,23 +413,10 @@ QtObject{
|
||||
fullscreen = true;
|
||||
showMenubar = false;
|
||||
}
|
||||
|
||||
if (args.indexOf("-T") !== -1) {
|
||||
wintitle = args[args.indexOf("-T") + 1]
|
||||
}
|
||||
|
||||
initializedSettings();
|
||||
}
|
||||
Component.onDestruction: {
|
||||
storeSettings();
|
||||
storeCustomProfiles();
|
||||
//storage.dropSettings(); //DROPS THE SETTINGS!.. REMEMBER TO DISABLE ONCE ENABLED!!
|
||||
}
|
||||
|
||||
// VARS ///////////////////////////////////////////////////////////////////
|
||||
|
||||
property Label _sampleLabel: Label {
|
||||
text: "100%"
|
||||
}
|
||||
property real labelWidth: _sampleLabel.width
|
||||
}
|
||||
|
||||
@@ -31,12 +31,12 @@ MenuBar {
|
||||
title: qsTr("Profiles")
|
||||
visible: defaultMenuBar.visible
|
||||
Instantiator{
|
||||
model: appSettings.profilesList
|
||||
model: shadersettings.profiles_list
|
||||
delegate: MenuItem {
|
||||
text: model.text
|
||||
onTriggered: {
|
||||
appSettings.loadProfileString(obj_string);
|
||||
appSettings.handleFontChanged();
|
||||
shadersettings.loadProfileString(obj_string);
|
||||
shadersettings.handleFontChanged();
|
||||
}
|
||||
}
|
||||
onObjectAdded: profilesMenu.insertItem(index, object)
|
||||
|
||||
@@ -22,8 +22,6 @@ import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
|
||||
import "Components"
|
||||
|
||||
RowLayout {
|
||||
property alias name: check.text
|
||||
|
||||
@@ -37,6 +35,7 @@ RowLayout {
|
||||
id: setting_component
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
spacing: 25
|
||||
|
||||
onValueChanged: {
|
||||
check.checked = !(value == 0);
|
||||
@@ -46,7 +45,7 @@ RowLayout {
|
||||
|
||||
CheckBox{
|
||||
id: check
|
||||
implicitWidth: 160
|
||||
implicitWidth: 150
|
||||
onClicked: {
|
||||
if(!checked){
|
||||
checked = false;
|
||||
@@ -67,8 +66,16 @@ RowLayout {
|
||||
newValue(value);
|
||||
}
|
||||
}
|
||||
SizedLabel {
|
||||
anchors { top: parent.top; bottom: parent.bottom }
|
||||
text: Math.round(((value - min_value) / (max_value - min_value)) * 100) + "%"
|
||||
Text{
|
||||
id: textfield
|
||||
property string unformattedText: Math.round(((value - min_value) / (max_value - min_value)) * 100)
|
||||
text: formatNumber(unformattedText)
|
||||
}
|
||||
function formatNumber(num) {
|
||||
var n = "" + num;
|
||||
while (n.length < 3) {
|
||||
n = " " + n;
|
||||
}
|
||||
return n + "%";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,10 +22,8 @@ import QtQuick 2.2
|
||||
import QtQuick.Dialogs 1.1
|
||||
|
||||
Item {
|
||||
id: rootItem
|
||||
|
||||
signal colorSelected (color color)
|
||||
property color color
|
||||
property color button_color
|
||||
property string name
|
||||
|
||||
ColorDialog {
|
||||
@@ -35,13 +33,13 @@ Item {
|
||||
visible: false
|
||||
|
||||
//This is a workaround to a Qt 5.2 bug.
|
||||
onColorChanged: if (Qt.platform.os !== "osx") colorSelected(color)
|
||||
onAccepted: if (Qt.platform.os === "osx") colorSelected(color)
|
||||
onCurrentColorChanged: colorDialog.color = colorDialog.currentColor;
|
||||
onAccepted: colorSelected(color)
|
||||
}
|
||||
Rectangle{
|
||||
anchors.fill: parent
|
||||
radius: 10
|
||||
color: rootItem.color
|
||||
color: button_color
|
||||
border.color: "black"
|
||||
Glossy {}
|
||||
Rectangle {
|
||||
@@ -54,7 +52,7 @@ Item {
|
||||
Text{
|
||||
anchors.centerIn: parent
|
||||
z: parent.z + 1
|
||||
text: name + ": " + rootItem.color
|
||||
text: name + ": " + button_color
|
||||
}
|
||||
}
|
||||
MouseArea{
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
*
|
||||
* cool-retro-term is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.0
|
||||
|
||||
// This component is simply a label with a predefined size.
|
||||
// Used to improve alignment.
|
||||
|
||||
Item {
|
||||
property alias text: textfield.text
|
||||
width: appSettings.labelWidth
|
||||
Label{
|
||||
id: textfield
|
||||
anchors { right: parent.right; verticalCenter: parent.verticalCenter }
|
||||
}
|
||||
}
|
||||
@@ -20,80 +20,45 @@
|
||||
|
||||
import QtQuick 2.2
|
||||
|
||||
QtObject{
|
||||
Item{
|
||||
property int selectedFontIndex
|
||||
property real scaling
|
||||
property alias fontlist: fontlist
|
||||
property var _font: fontlist.get(selectedFontIndex)
|
||||
property var source: _font.source
|
||||
property int pixelSize: _font.pixelSize
|
||||
property int lineSpacing: _font.lineSpacing
|
||||
property real screenScaling: scaling * _font.baseScaling
|
||||
property real defaultFontWidth: fontlist.get(selectedFontIndex).fontWidth
|
||||
property bool lowResolutionFont: true
|
||||
|
||||
property ListModel fontlist: ListModel{
|
||||
ListModel{
|
||||
id: fontlist
|
||||
ListElement{
|
||||
name: "COMMODORE_PET"
|
||||
text: "Commodore PET (1977)"
|
||||
source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
|
||||
lineSpacing: 2
|
||||
pixelSize: 8
|
||||
baseScaling: 4.0
|
||||
fontWidth: 0.8
|
||||
}
|
||||
ListElement{
|
||||
name: "PROGGY_TINY"
|
||||
text: "Proggy Tiny (Modern)"
|
||||
source: "fonts/modern-proggy-tiny/ProggyTiny.ttf"
|
||||
lineSpacing: 1
|
||||
pixelSize: 16
|
||||
baseScaling: 4.0
|
||||
fontWidth: 0.9
|
||||
}
|
||||
ListElement{
|
||||
name: "TERMINUS_SCALED"
|
||||
text: "Terminus (Modern)"
|
||||
source: "fonts/modern-terminus/TerminusTTF-4.38.2.ttf"
|
||||
lineSpacing: 1
|
||||
pixelSize: 12
|
||||
baseScaling: 3.0
|
||||
fontWidth: 1.0
|
||||
}
|
||||
ListElement{
|
||||
name: "PRO_FONT_SCALED"
|
||||
text: "Pro Font (Modern)"
|
||||
source: "fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf"
|
||||
lineSpacing: 1
|
||||
pixelSize: 12
|
||||
baseScaling: 3.0
|
||||
fontWidth: 1.0
|
||||
}
|
||||
ListElement{
|
||||
name: "APPLE_II"
|
||||
text: "Apple ][ (1977)"
|
||||
source: "fonts/1977-apple2/PrintChar21.ttf"
|
||||
lineSpacing: 2
|
||||
pixelSize: 8
|
||||
baseScaling: 4.0
|
||||
fontWidth: 0.9
|
||||
}
|
||||
ListElement{
|
||||
name: "ATARI_400"
|
||||
text: "Atari 400-800 (1979)"
|
||||
source: "fonts/1979-atari-400-800/ATARI400800_original.TTF"
|
||||
lineSpacing: 3
|
||||
pixelSize: 8
|
||||
baseScaling: 4.0
|
||||
fontWidth: 0.8
|
||||
}
|
||||
ListElement{
|
||||
name: "COMMODORE_64"
|
||||
text: "Commodore 64 (1982)"
|
||||
source: "fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf"
|
||||
source: "fonts/1982-commodore64/C64_User_Mono_v1.0-STYLE.ttf"
|
||||
lineSpacing: 3
|
||||
pixelSize: 8
|
||||
baseScaling: 4.0
|
||||
fontWidth: 0.8
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,80 +20,45 @@
|
||||
|
||||
import QtQuick 2.2
|
||||
|
||||
QtObject{
|
||||
Item{
|
||||
property int selectedFontIndex
|
||||
property real scaling
|
||||
property alias fontlist: fontlist
|
||||
property var _font: fontlist.get(selectedFontIndex)
|
||||
property var source: _font.source
|
||||
property int pixelSize: _font.pixelSize
|
||||
property int lineSpacing: _font.lineSpacing
|
||||
property real screenScaling: scaling * _font.baseScaling
|
||||
property real defaultFontWidth: fontlist.get(selectedFontIndex).fontWidth
|
||||
property bool lowResolutionFont: true
|
||||
|
||||
property ListModel fontlist: ListModel{
|
||||
ListModel{
|
||||
id: fontlist
|
||||
ListElement{
|
||||
name: "COMMODORE_PET"
|
||||
text: "Commodore PET (1977)"
|
||||
source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
|
||||
lineSpacing: 2
|
||||
pixelSize: 8
|
||||
baseScaling: 4.0
|
||||
fontWidth: 0.7
|
||||
}
|
||||
ListElement{
|
||||
name: "PROGGY_TINY"
|
||||
text: "Proggy Tiny (Modern)"
|
||||
source: "fonts/modern-proggy-tiny/ProggyTiny.ttf"
|
||||
lineSpacing: 1
|
||||
pixelSize: 16
|
||||
baseScaling: 4.0
|
||||
fontWidth: 0.9
|
||||
}
|
||||
ListElement{
|
||||
name: "TERMINUS_SCALED"
|
||||
text: "Terminus (Modern)"
|
||||
source: "fonts/modern-terminus/TerminusTTF-4.38.2.ttf"
|
||||
lineSpacing: 1
|
||||
pixelSize: 12
|
||||
baseScaling: 3.0
|
||||
fontWidth: 1.0
|
||||
}
|
||||
ListElement{
|
||||
name: "PRO_FONT_SCALED"
|
||||
text: "Pro Font (Modern)"
|
||||
source: "fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf"
|
||||
lineSpacing: 1
|
||||
pixelSize: 12
|
||||
baseScaling: 3.0
|
||||
fontWidth: 1.0
|
||||
}
|
||||
ListElement{
|
||||
name: "APPLE_II"
|
||||
text: "Apple ][ (1977)"
|
||||
source: "fonts/1977-apple2/PrintChar21.ttf"
|
||||
lineSpacing: 2
|
||||
pixelSize: 8
|
||||
baseScaling: 4.0
|
||||
fontWidth: 0.8
|
||||
}
|
||||
ListElement{
|
||||
name: "ATARI_400"
|
||||
text: "Atari 400-800 (1979)"
|
||||
source: "fonts/1979-atari-400-800/ATARI400800_original.TTF"
|
||||
lineSpacing: 3
|
||||
pixelSize: 8
|
||||
baseScaling: 4.0
|
||||
fontWidth: 0.7
|
||||
}
|
||||
ListElement{
|
||||
name: "COMMODORE_64"
|
||||
text: "Commodore 64 (1982)"
|
||||
source: "fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf"
|
||||
source: "fonts/1982-commodore64/C64_User_Mono_v1.0-STYLE.ttf"
|
||||
lineSpacing: 3
|
||||
pixelSize: 8
|
||||
baseScaling: 4.0
|
||||
fontWidth: 0.7
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,199 +20,73 @@
|
||||
|
||||
import QtQuick 2.2
|
||||
|
||||
QtObject{
|
||||
Item{
|
||||
property int selectedFontIndex
|
||||
property real scaling
|
||||
property alias fontlist: fontlist
|
||||
property var source: fontlist.get(selectedFontIndex).source
|
||||
property var _font: fontlist.get(selectedFontIndex)
|
||||
property bool lowResolutionFont: _font.lowResolutionFont
|
||||
property int pixelSize: _font.pixelSize * scaling
|
||||
property int lineSpacing: pixelSize * _font.lineSpacing
|
||||
property real screenScaling: 1.0
|
||||
|
||||
property int pixelSize: lowResolutionFont
|
||||
? _font.pixelSize
|
||||
: _font.pixelSize * scaling
|
||||
//In this configuration lineSpacing is proportional to pixelSize.
|
||||
|
||||
property int lineSpacing: lowResolutionFont
|
||||
? _font.lineSpacing
|
||||
: pixelSize * _font.lineSpacing
|
||||
|
||||
property real screenScaling: lowResolutionFont
|
||||
? _font.baseScaling * scaling
|
||||
: 1.0
|
||||
|
||||
property real defaultFontWidth: fontlist.get(selectedFontIndex).fontWidth
|
||||
|
||||
// There are two kind of fonts: low resolution and high resolution.
|
||||
// Low resolution font sets the lowResolutionFont property to true.
|
||||
// They are rendered at a fixed pixel size and the texture is upscaled
|
||||
// to fill the screen (they are much faster to render).
|
||||
// High resolution fonts are instead drawn on a texture which has the
|
||||
// size of the screen, and the scaling directly controls their pixels size.
|
||||
// Those are slower to render but are not pixelated.
|
||||
|
||||
property ListModel fontlist: ListModel{
|
||||
ListModel{
|
||||
id: fontlist
|
||||
ListElement{
|
||||
name: "TERMINUS_SCALED"
|
||||
text: "Terminus (Modern)"
|
||||
source: "fonts/modern-terminus/TerminusTTF-4.38.2.ttf"
|
||||
lineSpacing: 1
|
||||
pixelSize: 12
|
||||
baseScaling: 3.0
|
||||
fontWidth: 1.0
|
||||
lowResolutionFont: true
|
||||
source: "fonts/modern-terminus/TerminusTTF-Bold-4.38.2.ttf"
|
||||
lineSpacing: 0.2
|
||||
pixelSize: 35
|
||||
}
|
||||
ListElement{
|
||||
name: "PRO_FONT_SCALED"
|
||||
text: "Pro Font (Modern)"
|
||||
source: "fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf"
|
||||
lineSpacing: 1
|
||||
pixelSize: 12
|
||||
baseScaling: 3.0
|
||||
fontWidth: 1.0
|
||||
lowResolutionFont: true
|
||||
}
|
||||
ListElement{
|
||||
name: "EXCELSIOR_SCALED"
|
||||
text: "Fixedsys Excelsior (Modern)"
|
||||
source: "fonts/modern-fixedsys-excelsior/FSEX301-L2.ttf"
|
||||
lineSpacing: 0
|
||||
pixelSize: 16
|
||||
baseScaling: 2.4
|
||||
fontWidth: 1.0
|
||||
lowResolutionFont: true
|
||||
}
|
||||
ListElement{
|
||||
name: "COMMODORE_PET_SCALED"
|
||||
text: "Commodore PET (1977)"
|
||||
source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
|
||||
lineSpacing: 2
|
||||
pixelSize: 8
|
||||
baseScaling: 3.5
|
||||
fontWidth: 0.7
|
||||
lowResolutionFont: true
|
||||
lineSpacing: 0.2
|
||||
pixelSize: 24
|
||||
}
|
||||
ListElement{
|
||||
name: "PROGGY_TINY_SCALED"
|
||||
text: "Proggy Tiny (Modern)"
|
||||
source: "fonts/modern-proggy-tiny/ProggyTiny.ttf"
|
||||
lineSpacing: 1
|
||||
pixelSize: 16
|
||||
baseScaling: 3.0
|
||||
fontWidth: 0.9
|
||||
lowResolutionFont: true
|
||||
text: "Commodore PET 2Y (1977)"
|
||||
source: "fonts/1977-commodore-pet/COMMODORE_PET_2y.ttf"
|
||||
lineSpacing: 0.2
|
||||
pixelSize: 32
|
||||
}
|
||||
ListElement{
|
||||
name: "APPLE_II_SCALED"
|
||||
text: "Apple ][ (1977)"
|
||||
source: "fonts/1977-apple2/PrintChar21.ttf"
|
||||
lineSpacing: 2
|
||||
pixelSize: 8
|
||||
baseScaling: 3.5
|
||||
fontWidth: 0.8
|
||||
lowResolutionFont: true
|
||||
lineSpacing: 0.2
|
||||
pixelSize: 24
|
||||
}
|
||||
ListElement{
|
||||
name: "ATARI_400_SCALED"
|
||||
text: "Atari 400-800 (1979)"
|
||||
source: "fonts/1979-atari-400-800/ATARI400800_original.TTF"
|
||||
lineSpacing: 3
|
||||
pixelSize: 8
|
||||
baseScaling: 3.5
|
||||
fontWidth: 0.7
|
||||
lowResolutionFont: true
|
||||
lineSpacing: 0.3
|
||||
pixelSize: 24
|
||||
}
|
||||
ListElement{
|
||||
name: "COMMODORE_64_SCALED"
|
||||
text: "Commodore 64 (1982)"
|
||||
source: "fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf"
|
||||
lineSpacing: 3
|
||||
pixelSize: 8
|
||||
baseScaling: 3.5
|
||||
fontWidth: 0.7
|
||||
lowResolutionFont: true
|
||||
source: "fonts/1982-commodore64/C64_User_Mono_v1.0-STYLE.ttf"
|
||||
lineSpacing: 0.3
|
||||
pixelSize: 24
|
||||
}
|
||||
ListElement{
|
||||
name: "ATARI_ST_SCALED"
|
||||
text: "Atari ST (1985)"
|
||||
source: "fonts/1985-atari-st/AtariST8x16SystemFont.ttf"
|
||||
lineSpacing: 3
|
||||
pixelSize: 16
|
||||
baseScaling: 2.0
|
||||
fontWidth: 1.0
|
||||
lowResolutionFont: true
|
||||
lineSpacing: 0.2
|
||||
pixelSize: 32
|
||||
}
|
||||
ListElement{
|
||||
name: "IBM_DOS"
|
||||
text: "IBM DOS (1985)"
|
||||
source: "fonts/1985-ibm-pc-vga/Perfect DOS VGA 437 Win.ttf"
|
||||
lineSpacing: 3
|
||||
pixelSize: 16
|
||||
baseScaling: 2.0
|
||||
fontWidth: 1.0
|
||||
lowResolutionFont: true
|
||||
source: "fonts/1985-ibm-pc-vga/Perfect DOS VGA 437.ttf"
|
||||
lineSpacing: 0.2
|
||||
pixelSize: 32
|
||||
}
|
||||
ListElement{
|
||||
name: "HERMIT"
|
||||
text: "HD: Hermit (Modern)"
|
||||
source: "fonts/modern-hermit/Hermit-medium.otf"
|
||||
lineSpacing: 0.05
|
||||
pixelSize: 28
|
||||
fontWidth: 1.0
|
||||
lowResolutionFont: false
|
||||
}
|
||||
ListElement{
|
||||
name: "TERMINUS"
|
||||
text: "HD: Terminus (Modern)"
|
||||
source: "fonts/modern-terminus/TerminusTTF-4.38.2.ttf"
|
||||
lineSpacing: 0.1
|
||||
pixelSize: 35
|
||||
fontWidth: 1.0
|
||||
lowResolutionFont: false
|
||||
}
|
||||
ListElement{
|
||||
name: "PRO_FONT"
|
||||
text: "HD: Pro Font (Modern)"
|
||||
source: "fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf"
|
||||
lineSpacing: 0.1
|
||||
pixelSize: 35
|
||||
fontWidth: 1.0
|
||||
lowResolutionFont: false
|
||||
}
|
||||
ListElement{
|
||||
name: "MONACO"
|
||||
text: "HD: Monaco (Modern)"
|
||||
source: "fonts/modern-monaco/monaco.ttf"
|
||||
lineSpacing: 0.1
|
||||
pixelSize: 30
|
||||
fontWidth: 1.0
|
||||
lowResolutionFont: false
|
||||
}
|
||||
ListElement{
|
||||
name: "INCONSOLATA"
|
||||
text: "HD: Inconsolata (Modern)"
|
||||
source: "fonts/modern-inconsolata/Inconsolata.otf"
|
||||
lineSpacing: 0.1
|
||||
pixelSize: 35
|
||||
fontWidth: 1.0
|
||||
lowResolutionFont: false
|
||||
}
|
||||
ListElement{
|
||||
name: "IBM_3278"
|
||||
text: "HD: IBM 3278 (1971)"
|
||||
text: "IBM 3278 (1971)"
|
||||
source: "fonts/1971-ibm-3278/3270Medium.ttf"
|
||||
lineSpacing: 0.2
|
||||
pixelSize: 32
|
||||
fontWidth: 1.0
|
||||
lowResolutionFont: false
|
||||
}
|
||||
ListElement{
|
||||
name: "Knight_TV"
|
||||
text: "Knight TV (1975)"
|
||||
source: "fonts/1975-knight-tv/KnightTVMedium.ttf"
|
||||
lineSpacing: 0.2
|
||||
pixelSize: 10
|
||||
fontWidth: 1.0
|
||||
baseScaling: 3.0
|
||||
lowResolutionFont: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,6 @@ Window{
|
||||
modality: Qt.ApplicationModal
|
||||
title: qsTr("Save new profile")
|
||||
|
||||
property alias profileName: namefield.text
|
||||
signal nameSelected(string name)
|
||||
|
||||
MessageDialog {
|
||||
@@ -46,9 +45,15 @@ Window{
|
||||
}
|
||||
|
||||
function validateName(name){
|
||||
var profile_list = appSettings.profilesList;
|
||||
var profile_list = shadersettings.profiles_list;
|
||||
if (name === "")
|
||||
return 1;
|
||||
|
||||
for (var i = 0; i < profile_list.count; i++){
|
||||
if(profile_list.get(i).text === name)
|
||||
return 2;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -77,6 +82,9 @@ Window{
|
||||
case 1:
|
||||
errorDialog.showError(qsTr("The name you inserted is empty. Please choose a different one."));
|
||||
break;
|
||||
case 2:
|
||||
errorDialog.showError(qsTr("The name you inserted already exists. Please choose a different one."));
|
||||
break;
|
||||
default:
|
||||
nameSelected(name);
|
||||
close();
|
||||
|
||||
@@ -19,55 +19,67 @@
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtGraphicalEffects 1.0
|
||||
import QtQuick.Controls 1.1
|
||||
|
||||
import QMLTermWidget 1.0
|
||||
|
||||
import "utils.js" as Utils
|
||||
import org.crt.konsole 0.1
|
||||
|
||||
Item{
|
||||
id: terminalContainer
|
||||
|
||||
property size virtualResolution: Qt.size(kterminal.width, kterminal.height)
|
||||
property alias mainTerminal: kterminal
|
||||
property ShaderEffectSource mainSource: kterminalSource
|
||||
property ShaderEffectSource blurredSource: blurredSourceLoader.item
|
||||
//Frame displacement properties. This makes the terminal the same size of the texture.
|
||||
property real dtop: frame.item.displacementTop
|
||||
property real dleft:frame.item.displacementLeft
|
||||
property real dright: frame.item.displacementRight
|
||||
property real dbottom: frame.item.displacementBottom
|
||||
|
||||
anchors.leftMargin: dleft
|
||||
anchors.rightMargin: dright
|
||||
anchors.topMargin: dtop
|
||||
anchors.bottomMargin: dbottom
|
||||
|
||||
property variant theSource: mBlur !== 0 ? blurredSourceLoader.item : kterminalSource
|
||||
property variant bloomSource: bloomSourceLoader.item
|
||||
property variant rasterizationSource: rasterizationEffectSource
|
||||
property variant staticNoiseSource: staticNoiseSource
|
||||
|
||||
property real fontWidth: 1.0
|
||||
property real screenScaling: 1.0
|
||||
property real scaleTexture: 1.0
|
||||
property alias title: ksession.title
|
||||
property alias kterminal: kterminal
|
||||
|
||||
anchors.leftMargin: frame.displacementLeft * appSettings.windowScaling
|
||||
anchors.rightMargin: frame.displacementRight * appSettings.windowScaling
|
||||
anchors.topMargin: frame.displacementTop * appSettings.windowScaling
|
||||
anchors.bottomMargin: frame.displacementBottom * appSettings.windowScaling
|
||||
signal sizeChanged
|
||||
onWidthChanged: sizeChanged()
|
||||
onHeightChanged: sizeChanged()
|
||||
|
||||
//Parameters for the burnIn effect.
|
||||
property real burnIn: appSettings.burnIn
|
||||
property real fps: appSettings.fps !== 0 ? appSettings.fps : 60
|
||||
property real burnInFadeTime: Utils.lint(_minBurnInFadeTime, _maxBurnInFadeTime, burnIn)
|
||||
property real motionBlurCoefficient: 1.0 / (fps * burnInFadeTime)
|
||||
property real _minBurnInFadeTime: 0.16
|
||||
property real _maxBurnInFadeTime: 1.6
|
||||
//The blur effect has to take into account the framerate
|
||||
property int fps: shadersettings.fps !== 0 ? shadersettings.fps : 60
|
||||
property real fpsAttenuation: Math.sqrt(60 / fps)
|
||||
property real mBlur: shadersettings.motion_blur
|
||||
property real motionBlurCoefficient: (_maxBlurCoefficient * mBlur + _minBlurCoefficient * (1 - mBlur))
|
||||
property real _minBlurCoefficient: 0.70
|
||||
property real _maxBlurCoefficient: 0.90
|
||||
|
||||
property real mBloom: shadersettings.bloom_strength
|
||||
property int mScanlines: shadersettings.rasterization
|
||||
onMScanlinesChanged: restartBlurredSource()
|
||||
|
||||
property size terminalSize: kterminal.terminalSize
|
||||
property size fontMetrics: kterminal.fontMetrics
|
||||
property size paintedTextSize
|
||||
|
||||
// Manage copy and paste
|
||||
Connections{
|
||||
target: copyAction
|
||||
onTriggered: kterminal.copyClipboard();
|
||||
onMBlurChanged: restartBlurredSource()
|
||||
|
||||
function restartBlurredSource(){
|
||||
if(!blurredSourceLoader.item) return;
|
||||
blurredSourceLoader.item.restartBlurSource();
|
||||
}
|
||||
Connections{
|
||||
target: pasteAction
|
||||
onTriggered: kterminal.pasteClipboard()
|
||||
function pasteClipboard(){
|
||||
kterminal.pasteClipboard();
|
||||
}
|
||||
function copyClipboard(){
|
||||
kterminal.copyClipboard();
|
||||
}
|
||||
|
||||
//When settings are updated sources need to be redrawn.
|
||||
Connections{
|
||||
target: appSettings
|
||||
target: shadersettings
|
||||
onFontScalingChanged: terminalContainer.updateSources();
|
||||
onFontWidthChanged: terminalContainer.updateSources();
|
||||
}
|
||||
@@ -78,142 +90,107 @@ Item{
|
||||
}
|
||||
function updateSources() {
|
||||
kterminal.update();
|
||||
kterminal.updateImage();
|
||||
}
|
||||
|
||||
QMLTermWidget {
|
||||
|
||||
KTerminal {
|
||||
id: kterminal
|
||||
width: Math.floor(parent.width / (screenScaling * fontWidth))
|
||||
height: Math.floor(parent.height / screenScaling)
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
|
||||
colorScheme: "cool-retro-term"
|
||||
|
||||
smooth: !appSettings.lowResolutionFont
|
||||
enableBold: false
|
||||
fullCursorHeight: true
|
||||
smooth: false
|
||||
|
||||
session: QMLTermSession {
|
||||
session: KSession {
|
||||
id: ksession
|
||||
kbScheme: "xterm"
|
||||
|
||||
onFinished: {
|
||||
Qt.quit()
|
||||
}
|
||||
}
|
||||
|
||||
QMLTermScrollbar {
|
||||
id: kterminalScrollbar
|
||||
terminal: kterminal
|
||||
anchors.margins: width * 0.5
|
||||
width: terminal.fontMetrics.width * 0.75
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
anchors.topMargin: 1
|
||||
anchors.bottomMargin: 1
|
||||
color: "white"
|
||||
radius: width * 0.25
|
||||
opacity: 0.7
|
||||
}
|
||||
}
|
||||
|
||||
FontLoader{ id: fontLoader }
|
||||
Text{id: fontMetrics; text: "B"; visible: false}
|
||||
|
||||
function handleFontChange(fontSource, pixelSize, lineSpacing, screenScaling, fontWidth){
|
||||
function handleFontChange(fontSource, pixelSize, lineSpacing, screenScaling){
|
||||
fontLoader.source = fontSource;
|
||||
|
||||
kterminal.antialiasText = !appSettings.lowResolutionFont;
|
||||
font.pixelSize = pixelSize;
|
||||
font.family = fontLoader.name;
|
||||
|
||||
terminalContainer.fontWidth = fontWidth;
|
||||
terminalContainer.screenScaling = screenScaling;
|
||||
scaleTexture = Math.max(1.0, Math.floor(screenScaling * appSettings.windowScaling));
|
||||
var fontWidth = 1.0 / shadersettings.fontWidth;
|
||||
|
||||
kterminal.lineSpacing = lineSpacing;
|
||||
width = Qt.binding(function() {return Math.floor(fontWidth * terminalContainer.width / screenScaling);});
|
||||
height = Qt.binding(function() {return Math.floor(terminalContainer.height / screenScaling);});
|
||||
|
||||
var scaleTexture = Math.max(Math.round(screenScaling / shadersettings.scanline_quality), 1.0);
|
||||
|
||||
kterminalSource.textureSize = Qt.binding(function () {
|
||||
return Qt.size(kterminal.width * scaleTexture, kterminal.height * scaleTexture);
|
||||
});
|
||||
|
||||
setLineSpacing(lineSpacing);
|
||||
update();
|
||||
restartBlurredSource();
|
||||
}
|
||||
function startSession() {
|
||||
appSettings.initializedSettings.disconnect(startSession);
|
||||
Component.onCompleted: {
|
||||
shadersettings.terminalFontChanged.connect(handleFontChange);
|
||||
|
||||
// Retrieve the variable set in main.cpp if arguments are passed.
|
||||
if (defaultCmd) {
|
||||
ksession.setShellProgram(defaultCmd);
|
||||
ksession.setArgs(defaultCmdArgs);
|
||||
} else if (appSettings.useCustomCommand) {
|
||||
var args = Utils.tokenizeCommandLine(appSettings.customCommand);
|
||||
ksession.setShellProgram(args[0]);
|
||||
ksession.setArgs(args.slice(1));
|
||||
} else if (!defaultCmd && Qt.platform.os === "osx") {
|
||||
// OSX Requires the following default parameters for auto login.
|
||||
ksession.setArgs(["-i", "-l"]);
|
||||
}
|
||||
|
||||
if (shellProgram)
|
||||
ksession.setShellProgram(shellProgram);
|
||||
if (workdir)
|
||||
ksession.initialWorkingDirectory = workdir;
|
||||
|
||||
ksession.startShellProgram();
|
||||
forceActiveFocus();
|
||||
}
|
||||
Component.onCompleted: {
|
||||
appSettings.terminalFontChanged.connect(handleFontChange);
|
||||
appSettings.initializedSettings.connect(startSession);
|
||||
}
|
||||
}
|
||||
Component {
|
||||
id: linuxContextMenu
|
||||
Menu{
|
||||
id: contextmenu
|
||||
MenuItem{action: copyAction}
|
||||
MenuItem{action: pasteAction}
|
||||
MenuSeparator{}
|
||||
MenuItem{action: fullscreenAction}
|
||||
MenuItem{action: showMenubarAction}
|
||||
MenuSeparator{visible: !appSettings.showMenubar}
|
||||
CRTMainMenuBar{visible: !appSettings.showMenubar}
|
||||
}
|
||||
Menu{
|
||||
id: contextmenu
|
||||
MenuItem{action: copyAction}
|
||||
MenuItem{action: pasteAction}
|
||||
MenuSeparator{visible: Qt.platform.os !== "osx"}
|
||||
MenuItem{action: fullscreenAction; visible: Qt.platform.os !== "osx"}
|
||||
MenuItem{action: showMenubarAction; visible: Qt.platform.os !== "osx"}
|
||||
MenuSeparator{visible: !shadersettings.showMenubar}
|
||||
CRTMainMenuBar{visible: !shadersettings.showMenubar}
|
||||
}
|
||||
Component {
|
||||
id: osxContextMenu
|
||||
Menu{
|
||||
id: contextmenu
|
||||
MenuItem{action: copyAction}
|
||||
MenuItem{action: pasteAction}
|
||||
}
|
||||
}
|
||||
Loader {
|
||||
id: menuLoader
|
||||
sourceComponent: (Qt.platform.os === "osx" ? osxContextMenu : linuxContextMenu)
|
||||
}
|
||||
property alias contextmenu: menuLoader.item
|
||||
|
||||
MouseArea{
|
||||
acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
|
||||
anchors.fill: parent
|
||||
cursorShape: kterminal.terminalUsesMouse ? Qt.ArrowCursor : Qt.IBeamCursor
|
||||
// This is incredibly ugly. All this file should be reorganized.
|
||||
width: (parent.width + dleft + dright) / shadersettings.window_scaling - dleft -dright
|
||||
height: (parent.height + dtop + dbottom) / shadersettings.window_scaling - dtop - dbottom
|
||||
onWheel:{
|
||||
if(wheel.modifiers & Qt.ControlModifier){
|
||||
wheel.angleDelta.y > 0 ? zoomIn.trigger() : zoomOut.trigger();
|
||||
} else {
|
||||
var coord = correctDistortion(wheel.x, wheel.y);
|
||||
kterminal.simulateWheel(coord.x, coord.y, wheel.buttons, wheel.modifiers, wheel.angleDelta);
|
||||
var lines = wheel.angleDelta.y > 0 ? -1 : 1;
|
||||
kterminal.scrollWheelEvent(coord, lines);
|
||||
}
|
||||
}
|
||||
onDoubleClicked: {
|
||||
var coord = correctDistortion(mouse.x, mouse.y);
|
||||
kterminal.simulateMouseDoubleClick(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers);
|
||||
kterminal.mouseDoubleClickEvent(coord, mouse.button, mouse.modifiers);
|
||||
}
|
||||
onPressed: {
|
||||
if((!kterminal.terminalUsesMouse || mouse.modifiers & Qt.ShiftModifier) && mouse.button == Qt.RightButton) {
|
||||
if((!kterminal.usesMouse || mouse.modifiers & Qt.ShiftModifier) && mouse.button == Qt.RightButton) {
|
||||
contextmenu.popup();
|
||||
} else {
|
||||
var coord = correctDistortion(mouse.x, mouse.y);
|
||||
kterminal.simulateMousePress(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers)
|
||||
kterminal.mousePressEvent(coord, mouse.button, mouse.modifiers)
|
||||
}
|
||||
}
|
||||
onReleased: {
|
||||
var coord = correctDistortion(mouse.x, mouse.y);
|
||||
kterminal.simulateMouseRelease(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers);
|
||||
kterminal.mouseReleaseEvent(coord, mouse.button, mouse.modifiers);
|
||||
}
|
||||
onPositionChanged: {
|
||||
var coord = correctDistortion(mouse.x, mouse.y);
|
||||
kterminal.simulateMouseMove(coord.x, coord.y, mouse.button, mouse.buttons, mouse.modifiers);
|
||||
kterminal.mouseMoveEvent(coord, mouse.button, mouse.buttons, mouse.modifiers);
|
||||
}
|
||||
|
||||
function correctDistortion(x, y){
|
||||
@@ -221,7 +198,7 @@ Item{
|
||||
y = y / height;
|
||||
|
||||
var cc = Qt.size(0.5 - x, 0.5 - y);
|
||||
var distortion = (cc.height * cc.height + cc.width * cc.width) * appSettings.screenCurvature;
|
||||
var distortion = (cc.height * cc.height + cc.width * cc.width) * shadersettings.screen_distortion;
|
||||
|
||||
return Qt.point((x - cc.width * (1+distortion) * distortion) * kterminal.width,
|
||||
(y - cc.height * (1+distortion) * distortion) * kterminal.height)
|
||||
@@ -232,17 +209,24 @@ Item{
|
||||
sourceItem: kterminal
|
||||
hideSource: true
|
||||
wrapMode: ShaderEffectSource.ClampToEdge
|
||||
visible: false
|
||||
textureSize: Qt.size(kterminal.width * scaleTexture, kterminal.height * scaleTexture);
|
||||
live: false
|
||||
|
||||
signal sourceUpdate
|
||||
|
||||
Connections{
|
||||
target: kterminal
|
||||
onUpdatedImage:{
|
||||
kterminalSource.scheduleUpdate();
|
||||
kterminalSource.sourceUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loader{
|
||||
id: blurredSourceLoader
|
||||
asynchronous: true
|
||||
active: burnIn !== 0
|
||||
active: mBlur !== 0
|
||||
|
||||
sourceComponent: ShaderEffectSource{
|
||||
property bool updateBurnIn: false
|
||||
|
||||
id: _blurredSourceEffect
|
||||
sourceItem: blurredTerminalLoader.item
|
||||
recursive: true
|
||||
@@ -250,80 +234,54 @@ Item{
|
||||
hideSource: true
|
||||
wrapMode: kterminalSource.wrapMode
|
||||
|
||||
visible: false
|
||||
|
||||
function restartBlurSource(){
|
||||
livetimer.restart();
|
||||
}
|
||||
|
||||
// This updates the burnin synched with the timer.
|
||||
Connections {
|
||||
target: updateBurnIn ? mainShader : null
|
||||
ignoreUnknownSignals: false
|
||||
onTimeChanged: _blurredSourceEffect.scheduleUpdate();
|
||||
}
|
||||
|
||||
Timer{
|
||||
id: livetimer
|
||||
|
||||
// The interval assumes 60 fps. This is the time needed burnout a white pixel.
|
||||
// We multiply 1.1 to have a little bit of margin over the theoretical value.
|
||||
// This solution is not extremely clean, but it's probably the best to avoid measuring fps.
|
||||
|
||||
interval: burnInFadeTime * 1000 * 1.1
|
||||
running: true
|
||||
onTriggered: _blurredSourceEffect.updateBurnIn = false;
|
||||
onRunningChanged: {
|
||||
running ?
|
||||
timeBinding.target = timeManager :
|
||||
timeBinding.target = null
|
||||
}
|
||||
}
|
||||
Connections{
|
||||
target: kterminal
|
||||
onImagePainted:{
|
||||
id: timeBinding
|
||||
target: timeManager
|
||||
onTimeChanged: {
|
||||
_blurredSourceEffect.scheduleUpdate();
|
||||
_blurredSourceEffect.updateBurnIn = true;
|
||||
}
|
||||
}
|
||||
Connections{
|
||||
target: kterminalSource
|
||||
onSourceUpdate:{
|
||||
livetimer.restart();
|
||||
}
|
||||
}
|
||||
// Restart blurred source settings change.
|
||||
Connections{
|
||||
target: appSettings
|
||||
onBurnInChanged: _blurredSourceEffect.restartBlurSource();
|
||||
onTerminalFontChanged: _blurredSourceEffect.restartBlurSource();
|
||||
onRasterizationChanged: _blurredSourceEffect.restartBlurSource();
|
||||
onBurnInQualityChanged: _blurredSourceEffect.restartBlurSource();
|
||||
}
|
||||
Connections {
|
||||
target: kterminalScrollbar
|
||||
onOpacityChanged: _blurredSourceEffect.restartBlurSource();
|
||||
target: shadersettings
|
||||
onScanline_qualityChanged: restartBlurredSource();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loader{
|
||||
id: blurredTerminalLoader
|
||||
|
||||
property int burnInScaling: scaleTexture * appSettings.burnInQuality
|
||||
|
||||
width: appSettings.lowResolutionFont
|
||||
? kterminal.width * Math.max(1, burnInScaling)
|
||||
: kterminal.width * scaleTexture * appSettings.burnInQuality
|
||||
height: appSettings.lowResolutionFont
|
||||
? kterminal.height * Math.max(1, burnInScaling)
|
||||
: kterminal.height * scaleTexture * appSettings.burnInQuality
|
||||
|
||||
active: burnIn !== 0
|
||||
width: kterminalSource.textureSize.width
|
||||
height: kterminalSource.textureSize.height
|
||||
active: mBlur !== 0
|
||||
asynchronous: true
|
||||
|
||||
sourceComponent: ShaderEffect {
|
||||
property variant txt_source: kterminalSource
|
||||
property variant blurredSource: blurredSourceLoader.item
|
||||
property real blurCoefficient: motionBlurCoefficient
|
||||
property real blurCoefficient: (1.0 - motionBlurCoefficient) * fpsAttenuation
|
||||
|
||||
blending: false
|
||||
|
||||
fragmentShader:
|
||||
"#ifdef GL_ES
|
||||
precision mediump float;
|
||||
#endif\n" +
|
||||
|
||||
"uniform lowp float qt_Opacity;" +
|
||||
"uniform lowp sampler2D txt_source;" +
|
||||
|
||||
@@ -338,14 +296,149 @@ Item{
|
||||
|
||||
"void main() {" +
|
||||
"vec2 coords = qt_TexCoord0;" +
|
||||
"vec3 origColor = texture2D(txt_source, coords).rgb;" +
|
||||
"vec3 blur_color = texture2D(blurredSource, coords).rgb - vec3(blurCoefficient);" +
|
||||
"vec3 color = min(origColor + blur_color, max(origColor, blur_color));" +
|
||||
"vec3 color = texture2D(txt_source, coords).rgb * 256.0;" +
|
||||
|
||||
"gl_FragColor = vec4(color, rgb2grey(color - origColor));" +
|
||||
"vec3 blur_color = texture2D(blurredSource, coords).rgb * 256.0;" +
|
||||
"blur_color = blur_color - blur_color * blurCoefficient;" +
|
||||
"color = step(vec3(1.0), color) * color + step(color, vec3(1.0)) * blur_color;" +
|
||||
|
||||
"gl_FragColor = vec4(floor(color) / 256.0, 1.0);" +
|
||||
"}"
|
||||
|
||||
onStatusChanged: if (log) console.log(log) //Print warning messages
|
||||
}
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// EFFECTS //////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// BLOOM ////////////////////////////////////////////////////////////////
|
||||
|
||||
Loader{
|
||||
property real scaling: shadersettings.bloom_quality * shadersettings.window_scaling
|
||||
id: bloomEffectLoader
|
||||
active: mBloom != 0
|
||||
asynchronous: true
|
||||
width: parent.width * scaling
|
||||
height: parent.height * scaling
|
||||
sourceComponent: FastBlur{
|
||||
radius: 48 * scaling
|
||||
source: kterminal
|
||||
transparentBorder: true
|
||||
}
|
||||
}
|
||||
Loader{
|
||||
id: bloomSourceLoader
|
||||
active: mBloom != 0
|
||||
asynchronous: true
|
||||
sourceComponent: ShaderEffectSource{
|
||||
id: _bloomEffectSource
|
||||
sourceItem: bloomEffectLoader.item
|
||||
hideSource: true
|
||||
live: false
|
||||
smooth: true
|
||||
Connections{
|
||||
target: kterminalSource
|
||||
onSourceUpdate: _bloomEffectSource.scheduleUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// NOISE ////////////////////////////////////////////////////////////////
|
||||
|
||||
ShaderEffect {
|
||||
id: staticNoiseEffect
|
||||
anchors.fill: parent
|
||||
property real element_size: shadersettings.rasterization == shadersettings.no_rasterization ? 2 : 1
|
||||
property size virtual_resolution: Qt.size(kterminal.width / element_size, kterminal.height / element_size)
|
||||
|
||||
blending: false
|
||||
|
||||
fragmentShader:
|
||||
"uniform lowp float qt_Opacity;
|
||||
varying highp vec2 qt_TexCoord0;
|
||||
uniform highp vec2 virtual_resolution;" +
|
||||
|
||||
"highp float noise(vec2 co)
|
||||
{
|
||||
highp float a = 12.9898;
|
||||
highp float b = 78.233;
|
||||
highp float c = 43758.5453;
|
||||
highp float dt= dot(co.xy ,vec2(a,b));
|
||||
highp float sn= mod(dt,3.14);
|
||||
return fract(sin(sn) * c);
|
||||
}
|
||||
|
||||
vec2 sw(vec2 p) {return vec2( floor(p.x) , floor(p.y) );}
|
||||
vec2 se(vec2 p) {return vec2( ceil(p.x) , floor(p.y) );}
|
||||
vec2 nw(vec2 p) {return vec2( floor(p.x) , ceil(p.y) );}
|
||||
vec2 ne(vec2 p) {return vec2( ceil(p.x) , ceil(p.y) );}
|
||||
|
||||
float smoothNoise(vec2 p) {
|
||||
vec2 inter = smoothstep(0., 1., fract(p));
|
||||
float s = mix(noise(sw(p)), noise(se(p)), inter.x);
|
||||
float n = mix(noise(nw(p)), noise(ne(p)), inter.x);
|
||||
return mix(s, n, inter.y);
|
||||
}" +
|
||||
|
||||
"void main() {" +
|
||||
"gl_FragColor.a = smoothNoise(qt_TexCoord0 * virtual_resolution);" +
|
||||
"}"
|
||||
|
||||
onStatusChanged: if (log) console.log(log) //Print warning messages
|
||||
}
|
||||
ShaderEffectSource{
|
||||
id: staticNoiseSource
|
||||
sourceItem: staticNoiseEffect
|
||||
textureSize: Qt.size(parent.width, parent.height)
|
||||
wrapMode: ShaderEffectSource.Repeat
|
||||
smooth: true
|
||||
hideSource: true
|
||||
}
|
||||
|
||||
// RASTERIZATION //////////////////////////////////////////////////////////
|
||||
|
||||
ShaderEffect {
|
||||
id: rasterizationEffect
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
property size virtual_resolution: Qt.size(kterminal.width, kterminal.height)
|
||||
|
||||
blending: false
|
||||
|
||||
fragmentShader:
|
||||
"uniform lowp float qt_Opacity;" +
|
||||
|
||||
"varying highp vec2 qt_TexCoord0;
|
||||
uniform highp vec2 virtual_resolution;
|
||||
|
||||
highp float getScanlineIntensity(vec2 coords) {
|
||||
highp float result = 1.0;" +
|
||||
|
||||
(mScanlines != shadersettings.no_rasterization ?
|
||||
"result *= abs(sin(coords.y * virtual_resolution.y * "+Math.PI+"));" : "") +
|
||||
(mScanlines == shadersettings.pixel_rasterization ?
|
||||
"result *= abs(sin(coords.x * virtual_resolution.x * "+Math.PI+"));" : "") + "
|
||||
|
||||
return result;
|
||||
}" +
|
||||
|
||||
"void main() {" +
|
||||
"highp float color = getScanlineIntensity(qt_TexCoord0);" +
|
||||
|
||||
"float distance = length(vec2(0.5) - qt_TexCoord0);" +
|
||||
"color = mix(color, 0.0, 1.2 * distance * distance);" +
|
||||
|
||||
"gl_FragColor.a = color;" +
|
||||
"}"
|
||||
|
||||
onStatusChanged: if (log) console.log(log) //Print warning messages
|
||||
}
|
||||
ShaderEffectSource{
|
||||
id: rasterizationEffectSource
|
||||
sourceItem: rasterizationEffect
|
||||
hideSource: true
|
||||
smooth: true
|
||||
wrapMode: ShaderEffectSource.Repeat
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,58 +28,57 @@ Tab{
|
||||
anchors.fill: parent
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
spacing: 2
|
||||
CheckableSlider{
|
||||
name: qsTr("Bloom")
|
||||
onNewValue: appSettings.bloom = newValue
|
||||
value: appSettings.bloom
|
||||
onNewValue: shadersettings.bloom_strength = newValue
|
||||
value: shadersettings.bloom_strength
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("BurnIn")
|
||||
onNewValue: appSettings.burnIn = newValue
|
||||
value: appSettings.burnIn
|
||||
name: qsTr("Motion Blur")
|
||||
onNewValue: shadersettings.motion_blur = newValue
|
||||
value: shadersettings.motion_blur
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Static Noise")
|
||||
onNewValue: appSettings.staticNoise = newValue
|
||||
value: appSettings.staticNoise
|
||||
name: qsTr("Noise")
|
||||
onNewValue: shadersettings.noise_strength = newValue
|
||||
value: shadersettings.noise_strength
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Jitter")
|
||||
onNewValue: appSettings.jitter = newValue
|
||||
value: appSettings.jitter
|
||||
onNewValue: shadersettings.jitter = newValue
|
||||
value: shadersettings.jitter
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Glow Line")
|
||||
onNewValue: appSettings.glowingLine = newValue;
|
||||
value: appSettings.glowingLine
|
||||
name: qsTr("Glow")
|
||||
onNewValue: shadersettings.glowing_line_strength = newValue;
|
||||
value: shadersettings.glowing_line_strength
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Screen Curvature")
|
||||
onNewValue: appSettings.screenCurvature = newValue;
|
||||
value: appSettings.screenCurvature;
|
||||
name: qsTr("Screen distortion")
|
||||
onNewValue: shadersettings.screen_distortion = newValue;
|
||||
value: shadersettings.screen_distortion;
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Ambient Light")
|
||||
onNewValue: appSettings.ambientLight = newValue;
|
||||
value: appSettings.ambientLight
|
||||
enabled: appSettings.framesIndex !== 0
|
||||
name: qsTr("Ambient light")
|
||||
onNewValue: shadersettings.ambient_light = newValue;
|
||||
value: shadersettings.ambient_light
|
||||
enabled: shadersettings.frames_index !== 0
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Flickering")
|
||||
onNewValue: appSettings.flickering = newValue;
|
||||
value: appSettings.flickering;
|
||||
name: qsTr("Brightness flickering")
|
||||
onNewValue: shadersettings.brightness_flickering = newValue;
|
||||
value: shadersettings.brightness_flickering;
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Horizontal Sync")
|
||||
onNewValue: appSettings.horizontalSync = newValue;
|
||||
value: appSettings.horizontalSync;
|
||||
name: qsTr("Horizontal flickering")
|
||||
onNewValue: shadersettings.horizontal_sincronization = newValue;
|
||||
value: shadersettings.horizontal_sincronization;
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("RGB Shift")
|
||||
onNewValue: appSettings.rbgShift = newValue;
|
||||
value: appSettings.rbgShift;
|
||||
enabled: appSettings.chromaColor !== 0
|
||||
name: qsTr("RGB shift")
|
||||
onNewValue: shadersettings.rgb_shift = newValue;
|
||||
value: shadersettings.rgb_shift;
|
||||
enabled: shadersettings.chroma_color !== 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,208 +27,140 @@ Tab{
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
GroupBox{
|
||||
anchors {left: parent.left; right: parent.right}
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
title: qsTr("Profile")
|
||||
RowLayout {
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
TableView {
|
||||
id: profilesView
|
||||
ComboBox{
|
||||
id: profilesbox
|
||||
Layout.fillWidth: true
|
||||
anchors { top: parent.top; bottom: parent.bottom; }
|
||||
model: appSettings.profilesList
|
||||
headerVisible: false
|
||||
TableViewColumn {
|
||||
title: qsTr("Profile")
|
||||
role: "text"
|
||||
width: parent.width * 0.5
|
||||
}
|
||||
onActivated: {
|
||||
appSettings.loadProfile(row);
|
||||
}
|
||||
model: shadersettings.profiles_list
|
||||
currentIndex: shadersettings.profiles_index
|
||||
}
|
||||
ColumnLayout {
|
||||
anchors { top: parent.top; bottom: parent.bottom }
|
||||
Layout.fillWidth: false
|
||||
RowLayout{
|
||||
Layout.fillWidth: true
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("New")
|
||||
onClicked: {
|
||||
insertname.profileName = "";
|
||||
insertname.show()
|
||||
}
|
||||
}
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
property alias currentIndex: profilesView.currentRow
|
||||
enabled: currentIndex >= 0
|
||||
text: qsTr("Load")
|
||||
onClicked: {
|
||||
var index = profilesView.currentRow;
|
||||
if (index >= 0)
|
||||
appSettings.loadProfile(index);
|
||||
shadersettings.profiles_index = profilesbox.currentIndex
|
||||
shadersettings.loadCurrentProfile();
|
||||
shadersettings.handleFontChanged();
|
||||
}
|
||||
}
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("Remove")
|
||||
property alias currentIndex: profilesView.currentRow
|
||||
|
||||
enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin
|
||||
text: qsTr("Save New Profile")
|
||||
onClicked: insertname.show()
|
||||
}
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("Remove Selected")
|
||||
enabled: !shadersettings.profiles_list.get(profilesbox.currentIndex).builtin
|
||||
onClicked: {
|
||||
appSettings.profilesList.remove(currentIndex);
|
||||
profilesView.selection.clear();
|
||||
|
||||
// TODO This is a very ugly workaround. The view didn't update on Qt 5.3.2.
|
||||
profilesView.model = 0;
|
||||
profilesView.model = appSettings.profilesList;
|
||||
shadersettings.profiles_list.remove(profilesbox.currentIndex)
|
||||
profilesbox.currentIndex = profilesbox.currentIndex - 1
|
||||
}
|
||||
}
|
||||
Item {
|
||||
// Spacing
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
}
|
||||
RowLayout{
|
||||
Layout.fillWidth: true
|
||||
Button{
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("Import")
|
||||
text: qsTr("Import From File")
|
||||
onClicked: {
|
||||
fileDialog.selectExisting = true;
|
||||
fileDialog.callBack = function (url) {loadFile(url);};
|
||||
fileDialog.open();
|
||||
}
|
||||
|
||||
function loadFile(url) {
|
||||
try {
|
||||
if (appSettings.verbose)
|
||||
console.log("Loading file: " + url);
|
||||
|
||||
var profileObject = JSON.parse(fileIO.read(url));
|
||||
var name = profileObject.name;
|
||||
|
||||
if (!name)
|
||||
throw "Profile doesn't have a name";
|
||||
|
||||
delete profileObject.name;
|
||||
|
||||
appSettings.appendCustomProfile(name, JSON.stringify(profileObject));
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
messageDialog.text = qsTr("There has been an error reading the file.")
|
||||
messageDialog.open();
|
||||
}
|
||||
console.log("Loading file: " + url);
|
||||
var profileStirng = fileio.read(url);
|
||||
shadersettings.loadProfileString(profileStirng);
|
||||
}
|
||||
}
|
||||
Button{
|
||||
property alias currentIndex: profilesView.currentRow
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
text: qsTr("Export")
|
||||
enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin
|
||||
text: qsTr("Export To File")
|
||||
onClicked: {
|
||||
fileDialog.selectExisting = false;
|
||||
fileDialog.callBack = function (url) {storeFile(url);};
|
||||
fileDialog.open();
|
||||
}
|
||||
|
||||
function storeFile(url) {
|
||||
try {
|
||||
var urlString = url.toString();
|
||||
|
||||
// Fix the extension if it's missing.
|
||||
var extension = urlString.substring(urlString.length - 5, urlString.length);
|
||||
var urlTail = (extension === ".json" ? "" : ".json");
|
||||
url += urlTail;
|
||||
|
||||
if (true)
|
||||
console.log("Storing file: " + url);
|
||||
|
||||
var profileObject = appSettings.profilesList.get(currentIndex);
|
||||
var profileSettings = JSON.parse(profileObject.obj_string);
|
||||
profileSettings["name"] = profileObject.text;
|
||||
|
||||
var result = fileIO.write(url, JSON.stringify(profileSettings, undefined, 2));
|
||||
if (!result)
|
||||
throw "The file could not be written.";
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
messageDialog.text = qsTr("There has been an error storing the file.")
|
||||
messageDialog.open();
|
||||
}
|
||||
console.log("Storing file: " + url);
|
||||
var profileObject = shadersettings.composeProfileObject();
|
||||
fileio.write(url, JSON.stringify(profileObject, undefined, 2));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GroupBox{
|
||||
anchors {left: parent.left; right: parent.right}
|
||||
title: qsTr("Command")
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
CheckBox{
|
||||
id: useCustomCommand
|
||||
text: qsTr("Use custom command instead of shell at startup")
|
||||
checked: appSettings.useCustomCommand
|
||||
onCheckedChanged: appSettings.useCustomCommand = checked
|
||||
InsertNameDialog{
|
||||
id: insertname
|
||||
onNameSelected: shadersettings.addNewCustomProfile(name)
|
||||
}
|
||||
// Workaround for QTBUG-31627 for pre 5.3.0
|
||||
Binding{
|
||||
target: useCustomCommand
|
||||
property: "checked"
|
||||
value: appSettings.useCustomCommand
|
||||
}
|
||||
TextField{
|
||||
id: customCommand
|
||||
anchors {left: parent.left; right: parent.right}
|
||||
text: appSettings.customCommand
|
||||
enabled: useCustomCommand.checked
|
||||
onEditingFinished: appSettings.customCommand = text
|
||||
Loader {
|
||||
property var callBack
|
||||
property bool selectExisting: false
|
||||
id: fileDialog
|
||||
|
||||
// Save text even if user forgets to press enter or unfocus
|
||||
function saveSetting() {
|
||||
appSettings.customCommand = text;
|
||||
sourceComponent: FileDialog{
|
||||
nameFilters: ["Json files (*.json)"]
|
||||
selectMultiple: false
|
||||
selectFolder: false
|
||||
selectExisting: fileDialog.selectExisting
|
||||
onAccepted: callBack(fileUrl);
|
||||
}
|
||||
|
||||
onSelectExistingChanged: reload()
|
||||
|
||||
function open() {
|
||||
item.open();
|
||||
}
|
||||
|
||||
function reload() {
|
||||
active = false;
|
||||
active = true;
|
||||
}
|
||||
Component.onCompleted: settings_window.closing.connect(saveSetting)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DIALOGS ////////////////////////////////////////////////////////////////
|
||||
InsertNameDialog{
|
||||
id: insertname
|
||||
onNameSelected: {
|
||||
appSettings.appendCustomProfile(name, appSettings.composeProfileString());
|
||||
GroupBox{
|
||||
title: qsTr("Lights")
|
||||
Layout.fillWidth: true
|
||||
GridLayout{
|
||||
anchors.fill: parent
|
||||
columns: 2
|
||||
Text{ text: qsTr("Brightness") }
|
||||
SimpleSlider{
|
||||
onValueChanged: shadersettings.brightness = value
|
||||
value: shadersettings.brightness
|
||||
}
|
||||
Text{ text: qsTr("Contrast") }
|
||||
SimpleSlider{
|
||||
onValueChanged: shadersettings.contrast = value
|
||||
value: shadersettings.contrast
|
||||
}
|
||||
Text{ text: qsTr("Opacity") }
|
||||
SimpleSlider{
|
||||
onValueChanged: shadersettings.windowOpacity = value
|
||||
value: shadersettings.windowOpacity
|
||||
}
|
||||
}
|
||||
}
|
||||
MessageDialog {
|
||||
id: messageDialog
|
||||
title: qsTr("File Error")
|
||||
onAccepted: {
|
||||
messageDialog.close();
|
||||
}
|
||||
}
|
||||
Loader {
|
||||
property var callBack
|
||||
property bool selectExisting: false
|
||||
id: fileDialog
|
||||
|
||||
sourceComponent: FileDialog{
|
||||
nameFilters: ["Json files (*.json)"]
|
||||
selectMultiple: false
|
||||
selectFolder: false
|
||||
selectExisting: fileDialog.selectExisting
|
||||
onAccepted: callBack(fileUrl);
|
||||
}
|
||||
|
||||
onSelectExistingChanged: reload()
|
||||
|
||||
function open() {
|
||||
item.open();
|
||||
}
|
||||
|
||||
function reload() {
|
||||
active = false;
|
||||
active = true;
|
||||
GroupBox{
|
||||
title: qsTr("Frame")
|
||||
Layout.fillWidth: true
|
||||
RowLayout{
|
||||
anchors.fill: parent
|
||||
ComboBox{
|
||||
id: framescombobox
|
||||
Layout.fillWidth: true
|
||||
model: shadersettings.frames_list
|
||||
currentIndex: shadersettings.frames_index
|
||||
onCurrentIndexChanged: shadersettings.frames_index = currentIndex
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,8 +22,6 @@ import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
|
||||
import "Components"
|
||||
|
||||
Tab{
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
@@ -36,39 +34,73 @@ Tab{
|
||||
anchors.fill: parent
|
||||
rows: 2
|
||||
columns: 3
|
||||
Label{text: qsTr("Effects FPS")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: fpsSlider
|
||||
onValueChanged: {
|
||||
if (enabled) {
|
||||
appSettings.fps = value !== 60 ? value + 1 : 0;
|
||||
}
|
||||
}
|
||||
stepSize: 1
|
||||
enabled: false
|
||||
Component.onCompleted: {
|
||||
minimumValue = 0;
|
||||
maximumValue = 60;
|
||||
value = appSettings.fps !== 0 ? appSettings.fps - 1 : 60;
|
||||
enabled = true;
|
||||
}
|
||||
CheckBox{
|
||||
property int fps: checked ? slider.value : 0
|
||||
onFpsChanged: shadersettings.fps = fps
|
||||
checked: shadersettings.fps !== 0
|
||||
text: qsTr("Limit FPS")
|
||||
}
|
||||
SizedLabel{text: appSettings.fps !== 0 ? appSettings.fps : qsTr("Max")}
|
||||
Label{text: qsTr("Texture Quality")}
|
||||
Slider{
|
||||
id: slider
|
||||
Layout.fillWidth: true
|
||||
stepSize: 1
|
||||
maximumValue: 60
|
||||
minimumValue: 1
|
||||
enabled: shadersettings.fps !== 0
|
||||
value: shadersettings.fps !== 0 ? shadersettings.fps : 60
|
||||
}
|
||||
Text{text: slider.value}
|
||||
Text{text: qsTr("Texture Quality")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: txtslider
|
||||
onValueChanged: if (enabled) appSettings.windowScaling = value;
|
||||
stepSize: 0.05
|
||||
enabled: false
|
||||
onValueChanged: shadersettings.window_scaling = value;
|
||||
value: shadersettings.window_scaling
|
||||
stepSize: 0.10
|
||||
Component.onCompleted: minimumValue = 0.3 //Without this value gets set to 0.5
|
||||
}
|
||||
Text{text: Math.round(txtslider.value * 100) + "%"}
|
||||
}
|
||||
}
|
||||
GroupBox{
|
||||
title: qsTr("Rasterization")
|
||||
Layout.fillWidth: true
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
GridLayout{
|
||||
id: scanlineQualityContainer
|
||||
anchors.fill: parent
|
||||
columns: 3
|
||||
property alias valsIndex: scanlineQualitySlider.value
|
||||
property var vals: [4,3,2]
|
||||
property var valsStrings: [
|
||||
qsTr("Low"),
|
||||
qsTr("Medium"),
|
||||
qsTr("High")
|
||||
]
|
||||
|
||||
onValsIndexChanged: shadersettings.scanline_quality = vals[valsIndex];
|
||||
|
||||
Text{text: qsTr("Scanlines Quality")}
|
||||
Slider{
|
||||
id: scanlineQualitySlider
|
||||
Layout.fillWidth: true
|
||||
onValueChanged: parent.valsIndex = value;
|
||||
stepSize: 1
|
||||
Component.onCompleted: {
|
||||
minimumValue = 0.25 //Without this value gets set to 0.5
|
||||
value = appSettings.windowScaling;
|
||||
enabled = true;
|
||||
minimumValue = 0;
|
||||
maximumValue = 2;
|
||||
value = parent.vals.indexOf(shadersettings.scanline_quality);
|
||||
}
|
||||
Connections{
|
||||
target: shadersettings
|
||||
onScanline_qualityChanged:
|
||||
scanlineQualityContainer.valsIndex = scanlineQualityContainer.vals.indexOf(shadersettings.scanline_quality);
|
||||
}
|
||||
}
|
||||
SizedLabel{text: Math.round(txtslider.value * 100) + "%"}
|
||||
Text{
|
||||
text: parent.valsStrings[parent.valsIndex];
|
||||
}
|
||||
}
|
||||
}
|
||||
GroupBox{
|
||||
@@ -79,45 +111,37 @@ Tab{
|
||||
GridLayout{
|
||||
id: bloomQualityContainer
|
||||
anchors.fill: parent
|
||||
Label{text: qsTr("Bloom Quality")}
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: bloomSlider
|
||||
onValueChanged: if (enabled) appSettings.bloomQuality = value;
|
||||
stepSize: 0.05
|
||||
enabled: false
|
||||
Component.onCompleted: {
|
||||
minimumValue = 0.25
|
||||
value = appSettings.bloomQuality;
|
||||
enabled = true;
|
||||
}
|
||||
}
|
||||
SizedLabel{text: Math.round(bloomSlider.value * 100) + "%"}
|
||||
}
|
||||
}
|
||||
GroupBox{
|
||||
title: qsTr("BurnIn")
|
||||
Layout.fillWidth: true
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
GridLayout{
|
||||
id: blurQualityContainer
|
||||
anchors.fill: parent
|
||||
columns: 3
|
||||
property alias valsIndex: bloomQualitySlider.value
|
||||
property var vals: [0.25, 0.50, 1.00]
|
||||
property var valsStrings: [
|
||||
qsTr("Low"),
|
||||
qsTr("Medium"),
|
||||
qsTr("High")
|
||||
]
|
||||
|
||||
Label{text: qsTr("BurnIn Quality")}
|
||||
onValsIndexChanged: shadersettings.bloom_quality = vals[valsIndex];
|
||||
|
||||
Text{text: qsTr("Bloom Quality")}
|
||||
Slider{
|
||||
id: bloomQualitySlider
|
||||
Layout.fillWidth: true
|
||||
id: burnInSlider
|
||||
onValueChanged: if (enabled) appSettings.burnInQuality = value;
|
||||
stepSize: 0.05
|
||||
enabled: false
|
||||
onValueChanged: parent.valsIndex = value;
|
||||
stepSize: 1
|
||||
Component.onCompleted: {
|
||||
minimumValue = 0.25
|
||||
value = appSettings.burnInQuality;
|
||||
enabled = true;
|
||||
minimumValue = 0;
|
||||
maximumValue = 2;
|
||||
value = parent.vals.indexOf(shadersettings.bloom_quality);
|
||||
}
|
||||
Connections{
|
||||
target: shadersettings
|
||||
onBloom_qualityChanged:
|
||||
bloomQualityContainer.valsIndex = bloomQualityContainer.vals.indexOf(shadersettings.bloom_quality);
|
||||
}
|
||||
}
|
||||
SizedLabel{text: Math.round(burnInSlider.value * 100) + "%"}
|
||||
Text{
|
||||
text: parent.valsStrings[parent.valsIndex];
|
||||
}
|
||||
}
|
||||
}
|
||||
GroupBox{
|
||||
@@ -126,9 +150,9 @@ Tab{
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
CheckBox{
|
||||
checked: appSettings._frameReflections
|
||||
checked: shadersettings._frameReflections
|
||||
text: qsTr("Frame Reflections")
|
||||
onCheckedChanged: appSettings._frameReflections = checked
|
||||
onCheckedChanged: shadersettings._frameReflections = checked
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 "Filippo Scognamiglio"
|
||||
* https://github.com/Swordfish90/cool-retro-term
|
||||
*
|
||||
* This file is part of cool-retro-term.
|
||||
*
|
||||
* cool-retro-term is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*******************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
import QtQuick.Dialogs 1.1
|
||||
|
||||
Tab{
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
GroupBox{
|
||||
title: qsTr("Rasterization Mode")
|
||||
Layout.fillWidth: true
|
||||
ComboBox {
|
||||
id: rasterizationBox
|
||||
property string selectedElement: model[currentIndex]
|
||||
anchors.fill: parent
|
||||
model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")]
|
||||
currentIndex: appSettings.rasterization
|
||||
onCurrentIndexChanged: {
|
||||
appSettings.rasterization = currentIndex
|
||||
}
|
||||
}
|
||||
}
|
||||
GroupBox{
|
||||
title: qsTr("Lights")
|
||||
Layout.fillWidth: true
|
||||
GridLayout{
|
||||
anchors.fill: parent
|
||||
columns: 2
|
||||
Label{ text: qsTr("Brightness") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings.brightness = value
|
||||
value: appSettings.brightness
|
||||
}
|
||||
Label{ text: qsTr("Contrast") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings.contrast = value
|
||||
value: appSettings.contrast
|
||||
}
|
||||
Label{ text: qsTr("Opacity") }
|
||||
SimpleSlider{
|
||||
onValueChanged: appSettings.windowOpacity = value
|
||||
value: appSettings.windowOpacity
|
||||
}
|
||||
}
|
||||
}
|
||||
GroupBox{
|
||||
title: qsTr("Frame")
|
||||
Layout.fillWidth: true
|
||||
RowLayout{
|
||||
anchors.fill: parent
|
||||
ComboBox{
|
||||
id: framescombobox
|
||||
Layout.fillWidth: true
|
||||
model: appSettings.framesList
|
||||
currentIndex: appSettings.framesIndex
|
||||
onActivated: {
|
||||
appSettings.frameName = appSettings.framesList.get(index).name;
|
||||
}
|
||||
function updateIndex(){
|
||||
var name = appSettings.frameName;
|
||||
var index = appSettings.getFrameIndexByName(name);
|
||||
if (index !== undefined)
|
||||
currentIndex = index;
|
||||
}
|
||||
Component.onCompleted: updateIndex();
|
||||
Connections {
|
||||
target: appSettings
|
||||
onFrameNameChanged: framescombobox.updateIndex();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,80 +22,80 @@ import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
|
||||
import "Components"
|
||||
|
||||
Tab{
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
GroupBox{
|
||||
property var rasterization: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")][appSettings.rasterization]
|
||||
title: qsTr("Font" + "(" + rasterization + ")")
|
||||
anchors { left: parent.left; right: parent.right }
|
||||
title: qsTr("Rasterization Mode")
|
||||
Layout.fillWidth: true
|
||||
ComboBox {
|
||||
id: rasterizationBox
|
||||
property string selectedElement: model[currentIndex]
|
||||
anchors.fill: parent
|
||||
model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")]
|
||||
currentIndex: shadersettings.rasterization
|
||||
onCurrentIndexChanged: {
|
||||
shadersettings.rasterization = currentIndex
|
||||
fontChanger.updateIndex();
|
||||
}
|
||||
}
|
||||
}
|
||||
GroupBox{
|
||||
title: qsTr("Font") + " (" + rasterizationBox.selectedElement + ")"
|
||||
Layout.fillWidth: true
|
||||
GridLayout{
|
||||
anchors.fill: parent
|
||||
columns: 2
|
||||
Label{ text: qsTr("Name") }
|
||||
Text{ text: qsTr("Name") }
|
||||
ComboBox{
|
||||
id: fontChanger
|
||||
Layout.fillWidth: true
|
||||
model: appSettings.fontlist
|
||||
model: shadersettings.fontlist
|
||||
currentIndex: updateIndex()
|
||||
onActivated: {
|
||||
var name = appSettings.fontlist.get(index).name;
|
||||
appSettings.fontNames[appSettings.rasterization] = name;
|
||||
appSettings.handleFontChanged();
|
||||
shadersettings.fontIndexes[shadersettings.rasterization] = index;
|
||||
shadersettings.handleFontChanged();
|
||||
}
|
||||
function updateIndex(){
|
||||
var name = appSettings.fontNames[appSettings.rasterization];
|
||||
var index = appSettings.getIndexByName(name);
|
||||
if (index !== undefined)
|
||||
currentIndex = index;
|
||||
currentIndex = shadersettings.fontIndexes[shadersettings.rasterization];
|
||||
}
|
||||
Connections{
|
||||
target: appSettings
|
||||
onTerminalFontChanged: fontChanger.updateIndex();
|
||||
}
|
||||
Component.onCompleted: updateIndex();
|
||||
}
|
||||
Label{ text: qsTr("Scaling") }
|
||||
Text{ text: qsTr("Scaling") }
|
||||
RowLayout{
|
||||
Layout.fillWidth: true
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: fontScalingChanger
|
||||
onValueChanged: if(enabled) appSettings.fontScaling = value
|
||||
onValueChanged: if(enabled) shadersettings.fontScaling = value
|
||||
stepSize: 0.05
|
||||
enabled: false // Another trick to fix initial bad behavior.
|
||||
Component.onCompleted: {
|
||||
minimumValue = appSettings.minimumFontScaling;
|
||||
maximumValue = appSettings.maximumFontScaling;
|
||||
value = appSettings.fontScaling;
|
||||
minimumValue = 0.5;
|
||||
maximumValue = 2.5;
|
||||
value = shadersettings.fontScaling;
|
||||
enabled = true;
|
||||
}
|
||||
Connections{
|
||||
target: appSettings
|
||||
onFontScalingChanged: fontScalingChanger.value = appSettings.fontScaling;
|
||||
target: shadersettings
|
||||
onFontScalingChanged: fontScalingChanger.value = shadersettings.fontScaling;
|
||||
}
|
||||
}
|
||||
SizedLabel{
|
||||
Text{
|
||||
text: Math.round(fontScalingChanger.value * 100) + "%"
|
||||
}
|
||||
}
|
||||
Label{ text: qsTr("Font Width") }
|
||||
Text{ text: qsTr("Font Width") }
|
||||
RowLayout{
|
||||
Layout.fillWidth: true
|
||||
Slider{
|
||||
Layout.fillWidth: true
|
||||
id: widthChanger
|
||||
onValueChanged: appSettings.fontWidth = value;
|
||||
value: appSettings.fontWidth
|
||||
onValueChanged: shadersettings.fontWidth = value;
|
||||
value: shadersettings.fontWidth
|
||||
stepSize: 0.05
|
||||
Component.onCompleted: {
|
||||
// This is needed to avoid unnecessary chnaged events.
|
||||
minimumValue = 0.5;
|
||||
maximumValue = 1.5;
|
||||
}
|
||||
Component.onCompleted: minimumValue = 0.5 //Without this value gets set to 0.5
|
||||
}
|
||||
SizedLabel{
|
||||
Text{
|
||||
text: Math.round(widthChanger.value * 100) + "%"
|
||||
}
|
||||
}
|
||||
@@ -103,38 +103,38 @@ Tab{
|
||||
}
|
||||
GroupBox{
|
||||
title: qsTr("Colors")
|
||||
anchors { left: parent.left; right: parent.right }
|
||||
Layout.fillWidth: true
|
||||
ColumnLayout{
|
||||
anchors.fill: parent
|
||||
ColumnLayout{
|
||||
Layout.fillWidth: true
|
||||
CheckableSlider{
|
||||
name: qsTr("Chroma Color")
|
||||
onNewValue: appSettings.chromaColor = newValue
|
||||
value: appSettings.chromaColor
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Saturation Color")
|
||||
onNewValue: appSettings.saturationColor = newValue
|
||||
value: appSettings.saturationColor
|
||||
enabled: appSettings.chromaColor !== 0
|
||||
}
|
||||
}
|
||||
RowLayout{
|
||||
Layout.fillWidth: true
|
||||
ColorButton{
|
||||
name: qsTr("Font")
|
||||
height: 50
|
||||
Layout.fillWidth: true
|
||||
onColorSelected: appSettings._fontColor = color;
|
||||
color: appSettings._fontColor
|
||||
onColorSelected: shadersettings._font_color = color;
|
||||
button_color: shadersettings._font_color
|
||||
}
|
||||
ColorButton{
|
||||
name: qsTr("Background")
|
||||
height: 50
|
||||
Layout.fillWidth: true
|
||||
onColorSelected: appSettings._backgroundColor = color;
|
||||
color: appSettings._backgroundColor
|
||||
onColorSelected: shadersettings._background_color = color;
|
||||
button_color: shadersettings._background_color
|
||||
}
|
||||
}
|
||||
ColumnLayout{
|
||||
Layout.fillWidth: true
|
||||
CheckableSlider{
|
||||
name: qsTr("Chroma Color")
|
||||
onNewValue: shadersettings.chroma_color = newValue
|
||||
value: shadersettings.chroma_color
|
||||
}
|
||||
CheckableSlider{
|
||||
name: qsTr("Saturation Color")
|
||||
onNewValue: shadersettings.saturation_color = newValue
|
||||
value: shadersettings.saturation_color
|
||||
enabled: shadersettings.chroma_color !== 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,8 +27,8 @@ import QtQuick.Dialogs 1.1
|
||||
Window {
|
||||
id: settings_window
|
||||
title: qsTr("Settings")
|
||||
width: 580
|
||||
height: 400
|
||||
width: 640
|
||||
height: 440
|
||||
|
||||
property int tabmargins: 15
|
||||
|
||||
@@ -42,12 +42,6 @@ Window {
|
||||
anchors.fill: parent
|
||||
anchors.margins: tabmargins
|
||||
}
|
||||
SettingsScreenTab{
|
||||
id: screenTab
|
||||
title: qsTr("Screen")
|
||||
anchors.fill: parent
|
||||
anchors.margins: tabmargins
|
||||
}
|
||||
SettingsTerminalTab{
|
||||
id: terminalTab
|
||||
title: qsTr("Terminal")
|
||||
|
||||
@@ -21,60 +21,40 @@
|
||||
import QtQuick 2.2
|
||||
import QtGraphicalEffects 1.0
|
||||
|
||||
import "utils.js" as Utils
|
||||
|
||||
ShaderEffect {
|
||||
property ShaderEffectSource source
|
||||
property ShaderEffectSource blurredSource
|
||||
property ShaderEffectSource bloomSource
|
||||
property color font_color: shadersettings.font_color
|
||||
property color background_color: shadersettings.background_color
|
||||
property variant source: terminal.theSource
|
||||
property variant bloomSource: terminal.bloomSource
|
||||
property variant rasterizationSource: terminal.rasterizationSource
|
||||
property variant noiseSource: terminal.staticNoiseSource
|
||||
property real bloom_strength: shadersettings.bloom_strength * 2.5
|
||||
|
||||
property color fontColor: appSettings.fontColor
|
||||
property color backgroundColor: appSettings.backgroundColor
|
||||
property real bloom: appSettings.bloom * 2.5
|
||||
property real jitter: shadersettings.jitter * 0.007
|
||||
|
||||
property real burnIn: appSettings.burnIn
|
||||
property real noise_strength: shadersettings.noise_strength
|
||||
property real screen_distorsion: shadersettings.screen_distortion
|
||||
property real glowing_line_strength: shadersettings.glowing_line_strength
|
||||
|
||||
property real jitter: appSettings.jitter * 0.007
|
||||
property real staticNoise: appSettings.staticNoise
|
||||
property size scaleNoiseSize: Qt.size((width) / (noiseTexture.width * appSettings.windowScaling * appSettings.fontScaling),
|
||||
(height) / (noiseTexture.height * appSettings.windowScaling * appSettings.fontScaling))
|
||||
property real chroma_color: shadersettings.chroma_color;
|
||||
|
||||
property real screenCurvature: appSettings.screenCurvature
|
||||
property real glowingLine: appSettings.glowingLine * 0.2
|
||||
property real rgb_shift: shadersettings.rgb_shift * 0.2
|
||||
|
||||
property real chromaColor: appSettings.chromaColor;
|
||||
property real brightness_flickering: shadersettings.brightness_flickering
|
||||
property real horizontal_sincronization: shadersettings.horizontal_sincronization
|
||||
|
||||
property real rbgShift: appSettings.rbgShift * 0.2
|
||||
property bool frameReflections: shadersettings.frameReflections
|
||||
|
||||
property real flickering: appSettings.flickering
|
||||
property real horizontalSync: appSettings.horizontalSync * 0.5
|
||||
property real disp_top: (frame.item.displacementTop * shadersettings.window_scaling) / height
|
||||
property real disp_bottom: (frame.item.displacementBottom * shadersettings.window_scaling) / height
|
||||
property real disp_left: (frame.item.displacementLeft * shadersettings.window_scaling) / width
|
||||
property real disp_right: (frame.item.displacementRight * shadersettings.window_scaling) / width
|
||||
|
||||
property bool frameReflections: appSettings.frameReflections
|
||||
property real screen_brightness: shadersettings.brightness * 1.5 + 0.5
|
||||
|
||||
property real disp_top: (frame.displacementTop * appSettings.windowScaling) / height
|
||||
property real disp_bottom: (frame.displacementBottom * appSettings.windowScaling) / height
|
||||
property real disp_left: (frame.displacementLeft * appSettings.windowScaling) / width
|
||||
property real disp_right: (frame.displacementRight * appSettings.windowScaling) / width
|
||||
|
||||
property real screen_brightness: appSettings.brightness * 1.5 + 0.5
|
||||
|
||||
// This is the average value of the abs(sin) function. Needed to avoid aliasing.
|
||||
readonly property real absSinAvg: 0.63661828335466886
|
||||
property size rasterizationSmooth: Qt.size(
|
||||
Utils.clamp(2.0 * virtual_resolution.width / (width * devicePixelRatio), 0.0, 1.0),
|
||||
Utils.clamp(2.0 * virtual_resolution.height / (height * devicePixelRatio), 0.0, 1.0))
|
||||
|
||||
property real dispX
|
||||
property real dispY
|
||||
property size virtual_resolution
|
||||
|
||||
TimeManager{
|
||||
id: timeManager
|
||||
enableTimer: terminalWindow.visible
|
||||
}
|
||||
|
||||
property alias time: timeManager.time
|
||||
property ShaderEffectSource noiseSource: noiseShaderSource
|
||||
property real time: timeManager.time
|
||||
property variant randomFunctionSource: randfuncsource
|
||||
|
||||
// If something goes wrong activate the fallback version of the shader.
|
||||
property bool fallBack: false
|
||||
@@ -83,19 +63,20 @@ ShaderEffect {
|
||||
|
||||
//Smooth random texture used for flickering effect.
|
||||
Image{
|
||||
id: noiseTexture
|
||||
source: "images/allNoise512.png"
|
||||
id: randtexture
|
||||
source: "frames/images/randfunction.png"
|
||||
width: 512
|
||||
height: 512
|
||||
fillMode: Image.Tile
|
||||
visible: false
|
||||
sourceSize.width: 512
|
||||
sourceSize.height: 256
|
||||
fillMode: Image.TileVertically
|
||||
}
|
||||
ShaderEffectSource{
|
||||
id: noiseShaderSource
|
||||
sourceItem: noiseTexture
|
||||
id: randfuncsource
|
||||
sourceItem: randtexture
|
||||
live: false
|
||||
hideSource: true
|
||||
wrapMode: ShaderEffectSource.Repeat
|
||||
visible: false
|
||||
smooth: true
|
||||
}
|
||||
|
||||
//Print the number with a reasonable precision for the shader.
|
||||
@@ -118,109 +99,78 @@ ShaderEffect {
|
||||
varying highp vec2 qt_TexCoord0;" +
|
||||
|
||||
(!fallBack ? "
|
||||
uniform sampler2D noiseSource;" : "") +
|
||||
uniform sampler2D randomFunctionSource;" : "") +
|
||||
|
||||
(!fallBack && flickering !== 0.0 ?"
|
||||
(!fallBack && brightness_flickering !== 0.0 ?"
|
||||
varying lowp float brightness;
|
||||
uniform lowp float flickering;" : "") +
|
||||
(!fallBack && horizontalSync !== 0.0 ?"
|
||||
uniform lowp float horizontalSync;
|
||||
varying lowp float distortionScale;
|
||||
varying lowp float distortionFreq;" : "") +
|
||||
|
||||
uniform lowp float brightness_flickering;" : "") +
|
||||
(!fallBack && horizontal_sincronization !== 0.0 ?"
|
||||
varying lowp float horizontal_distortion;
|
||||
uniform lowp float horizontal_sincronization;" : "") +
|
||||
"
|
||||
void main() {
|
||||
qt_TexCoord0.x = (qt_MultiTexCoord0.x - disp_left) / (1.0 - disp_left - disp_right);
|
||||
qt_TexCoord0.y = (qt_MultiTexCoord0.y - disp_top) / (1.0 - disp_top - disp_bottom);
|
||||
vec2 coords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));" +
|
||||
(!fallBack && brightness_flickering !== 0.0 ? "
|
||||
brightness = 1.0 + (texture2D(randomFunctionSource, coords).g - 0.5) * brightness_flickering;"
|
||||
: "") +
|
||||
|
||||
(!fallBack && (flickering !== 0.0 || horizontalSync !== 0.0) ?
|
||||
"vec4 initialNoiseTexel = texture2D(noiseSource, coords);"
|
||||
: "") +
|
||||
(!fallBack && flickering !== 0.0 ? "
|
||||
brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;"
|
||||
: "") +
|
||||
|
||||
(!fallBack && horizontalSync !== 0.0 ? "
|
||||
float randval = horizontalSync - initialNoiseTexel.r;
|
||||
distortionScale = step(0.0, randval) * randval * horizontalSync;
|
||||
distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
|
||||
(!fallBack && horizontal_sincronization !== 0.0 ? "
|
||||
float randval = 1.5 * texture2D(randomFunctionSource,(vec2(1.0) -coords) * 0.5).g;
|
||||
float negsinc = 1.0 - 0.6 * horizontal_sincronization;" + "
|
||||
horizontal_distortion = step(negsinc, randval) * (randval - negsinc) * 0.3*horizontal_sincronization;"
|
||||
: "") +
|
||||
|
||||
"gl_Position = qt_Matrix * qt_Vertex;
|
||||
}"
|
||||
|
||||
fragmentShader: "
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
#endif
|
||||
|
||||
uniform sampler2D source;
|
||||
uniform highp float qt_Opacity;
|
||||
uniform highp float time;
|
||||
varying highp vec2 qt_TexCoord0;
|
||||
|
||||
uniform highp vec4 fontColor;
|
||||
uniform highp vec4 backgroundColor;
|
||||
uniform lowp float screen_brightness;
|
||||
uniform highp vec4 font_color;
|
||||
uniform highp vec4 background_color;
|
||||
uniform highp sampler2D rasterizationSource;
|
||||
uniform lowp float screen_brightness;" +
|
||||
|
||||
uniform highp vec2 virtual_resolution;
|
||||
uniform highp vec2 rasterizationSmooth;
|
||||
uniform highp float dispX;
|
||||
uniform highp float dispY;" +
|
||||
|
||||
(bloom !== 0 ? "
|
||||
(bloom_strength !== 0 ? "
|
||||
uniform highp sampler2D bloomSource;
|
||||
uniform lowp float bloom;" : "") +
|
||||
(burnIn !== 0 ? "
|
||||
uniform sampler2D blurredSource;" : "") +
|
||||
(staticNoise !== 0 ? "
|
||||
uniform highp float staticNoise;" : "") +
|
||||
(((staticNoise !== 0 || jitter !== 0 || rbgShift)
|
||||
||(fallBack && (flickering || horizontalSync))) ? "
|
||||
uniform lowp sampler2D noiseSource;
|
||||
uniform highp vec2 scaleNoiseSize;" : "") +
|
||||
(screenCurvature !== 0 ? "
|
||||
uniform highp float screenCurvature;" : "") +
|
||||
(glowingLine !== 0 ? "
|
||||
uniform highp float glowingLine;" : "") +
|
||||
(chromaColor !== 0 ? "
|
||||
uniform lowp float chromaColor;" : "") +
|
||||
uniform lowp float bloom_strength;" : "") +
|
||||
(noise_strength !== 0 ? "
|
||||
uniform highp float noise_strength;" : "") +
|
||||
(noise_strength !== 0 || jitter !== 0 || rgb_shift ? "
|
||||
uniform lowp sampler2D noiseSource;" : "") +
|
||||
(screen_distorsion !== 0 ? "
|
||||
uniform highp float screen_distorsion;" : "") +
|
||||
(glowing_line_strength !== 0 ? "
|
||||
uniform highp float glowing_line_strength;" : "") +
|
||||
(chroma_color !== 0 ? "
|
||||
uniform lowp float chroma_color;" : "") +
|
||||
(jitter !== 0 ? "
|
||||
uniform lowp float jitter;" : "") +
|
||||
(rbgShift !== 0 ? "
|
||||
uniform lowp float rbgShift;" : "") +
|
||||
(rgb_shift !== 0 ? "
|
||||
uniform lowp float rgb_shift;" : "") +
|
||||
|
||||
(fallBack && horizontalSync !== 0 ? "
|
||||
uniform lowp float horizontalSync;" : "") +
|
||||
(fallBack && flickering !== 0.0 ?"
|
||||
uniform lowp float flickering;" : "") +
|
||||
(!fallBack && flickering !== 0 ? "
|
||||
varying lowp float brightness;"
|
||||
: "") +
|
||||
(!fallBack && horizontalSync !== 0 ? "
|
||||
varying lowp float distortionScale;
|
||||
varying lowp float distortionFreq;" : "") +
|
||||
(fallBack && (brightness_flickering || horizontal_sincronization) ? "
|
||||
uniform lowp sampler2D randomFunctionSource;" : "") +
|
||||
(fallBack && horizontal_sincronization !== 0 ? "
|
||||
uniform lowp float horizontal_sincronization;" : "") +
|
||||
(fallBack && brightness_flickering !== 0.0 ?"
|
||||
uniform lowp float brightness_flickering;" : "") +
|
||||
(!fallBack && brightness_flickering !== 0 ? "
|
||||
varying lowp float brightness;" : "") +
|
||||
(!fallBack && horizontal_sincronization !== 0 ? "
|
||||
varying lowp float horizontal_distortion;" : "") +
|
||||
|
||||
(glowingLine !== 0 ? "
|
||||
(glowing_line_strength !== 0 ? "
|
||||
float randomPass(vec2 coords){
|
||||
return fract(smoothstep(-120.0, 0.0, coords.y - (virtual_resolution.y + 120.0) * fract(time * 0.00015)));
|
||||
return fract(smoothstep(-0.2, 0.0, coords.y - 3.0 * fract(time * 0.0001))) * glowing_line_strength;
|
||||
}" : "") +
|
||||
|
||||
"highp float getScanlineIntensity(vec2 coords) {
|
||||
highp float result = 1.0;" +
|
||||
|
||||
(appSettings.rasterization != appSettings.no_rasterization ?
|
||||
"float val = abs(sin(coords.y * virtual_resolution.y * "+Math.PI+"));
|
||||
result *= mix(val, " + absSinAvg + ", rasterizationSmooth.y);" : "") +
|
||||
(appSettings.rasterization == appSettings.pixel_rasterization ?
|
||||
"val = abs(sin(coords.x * virtual_resolution.x * "+Math.PI+"));
|
||||
result *= mix(val, " + absSinAvg + ", rasterizationSmooth.x);" : "") + "
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
float rgb2grey(vec3 v){
|
||||
"float rgb2grey(vec3 v){
|
||||
return dot(v, vec3(0.21, 0.72, 0.04));
|
||||
}" +
|
||||
|
||||
@@ -228,97 +178,87 @@ ShaderEffect {
|
||||
"vec2 cc = vec2(0.5) - qt_TexCoord0;" +
|
||||
"float distance = length(cc);" +
|
||||
|
||||
//FallBack if there are problems
|
||||
(fallBack && (flickering !== 0.0 || horizontalSync !== 0.0) ?
|
||||
"vec2 initialCoords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));
|
||||
vec4 initialNoiseTexel = texture2D(noiseSource, initialCoords);"
|
||||
: "") +
|
||||
(fallBack && flickering !== 0.0 ? "
|
||||
float brightness = 1.0 + (initialNoiseTexel.g - 0.5) * flickering;"
|
||||
: "") +
|
||||
(fallBack && horizontalSync !== 0.0 ? "
|
||||
float randval = horizontalSync - initialNoiseTexel.r;
|
||||
float distortionScale = step(0.0, randval) * randval * horizontalSync;
|
||||
float distortionFreq = mix(4.0, 40.0, initialNoiseTexel.g);"
|
||||
//FallBack if there are problem
|
||||
(fallBack && (brightness_flickering || horizontal_sincronization) ? "
|
||||
vec2 randCoords = vec2(fract(time/(1024.0*2.0)), fract(time/(1024.0*1024.0)));" : "") +
|
||||
|
||||
(fallBack && brightness_flickering !== 0.0 ? "
|
||||
float brightness = 1.0 + (texture2D(randomFunctionSource, randCoords).g - 0.5) * brightness_flickering;"
|
||||
: "") +
|
||||
|
||||
(fallBack && horizontal_sincronization !== 0.0 ? "
|
||||
float randval = 1.5 * texture2D(randomFunctionSource,(vec2(1.0) - randCoords) * 0.5).g;
|
||||
float negsinc = 1.0 - 0.6 * horizontal_sincronization;" + "
|
||||
float horizontal_distortion = step(negsinc, randval) * (randval - negsinc) * 0.3*horizontal_sincronization;"
|
||||
: "") +
|
||||
|
||||
(staticNoise ? "
|
||||
float noise = staticNoise;" : "") +
|
||||
(noise_strength ? "
|
||||
float noise = noise_strength;" : "") +
|
||||
|
||||
(screenCurvature !== 0 ? "
|
||||
float distortion = dot(cc, cc) * screenCurvature;
|
||||
vec2 staticCoords = (qt_TexCoord0 - cc * (1.0 + distortion) * distortion);"
|
||||
(screen_distorsion !== 0 ? "
|
||||
float distortion = dot(cc, cc) * screen_distorsion;
|
||||
vec2 coords = (qt_TexCoord0 - cc * (1.0 + distortion) * distortion);"
|
||||
:"
|
||||
vec2 staticCoords = qt_TexCoord0;") +
|
||||
vec2 coords = qt_TexCoord0;") +
|
||||
|
||||
"vec2 coords = staticCoords;" +
|
||||
|
||||
(horizontalSync !== 0 ? "
|
||||
float dst = sin((coords.y + time * 0.001) * distortionFreq);
|
||||
coords.x += dst * distortionScale;" +
|
||||
(staticNoise ? "
|
||||
noise += distortionScale * 7.0;" : "")
|
||||
: "") +
|
||||
|
||||
(jitter !== 0 || staticNoise !== 0 ?
|
||||
"vec4 noiseTexel = texture2D(noiseSource, scaleNoiseSize * coords + vec2(fract(time / 51.0), fract(time / 237.0)));"
|
||||
(horizontal_sincronization !== 0 ? "
|
||||
float h_distortion = 0.5 * sin(time*0.001 + coords.y*10.0*fract(time/10.0));
|
||||
h_distortion += 0.5 * cos(time*0.04 + 0.03 + coords.y*50.0*fract(time/10.0 + 0.4));
|
||||
coords.x = coords.x + h_distortion * horizontal_distortion;" +
|
||||
(noise_strength ? "
|
||||
noise += horizontal_distortion;" : "")
|
||||
: "") +
|
||||
|
||||
(jitter !== 0 ? "
|
||||
vec2 offset = vec2(noiseTexel.b, noiseTexel.a) - vec2(0.5);
|
||||
vec2 offset = vec2(texture2D(noiseSource, coords + fract(time / 57.0)).a,
|
||||
texture2D(noiseSource, coords + fract(time / 251.0)).a) - 0.5;
|
||||
vec2 txt_coords = coords + offset * jitter;"
|
||||
: "vec2 txt_coords = coords;") +
|
||||
|
||||
"float color = 0.0;" +
|
||||
|
||||
(staticNoise !== 0 ? "
|
||||
float noiseVal = noiseTexel.a;
|
||||
(noise_strength !== 0 ? "
|
||||
float noiseVal = texture2D(noiseSource, qt_TexCoord0 + vec2(fract(time / 51.0), fract(time / 237.0))).a;
|
||||
color += noiseVal * noise * (1.0 - distance * 1.3);" : "") +
|
||||
|
||||
(glowingLine !== 0 ? "
|
||||
color += randomPass(coords * virtual_resolution) * glowingLine;" : "") +
|
||||
(glowing_line_strength !== 0 ? "
|
||||
color += randomPass(coords) * glowing_line_strength;" : "") +
|
||||
|
||||
"vec3 txt_color = texture2D(source, txt_coords).rgb;" +
|
||||
|
||||
(burnIn !== 0 ? "
|
||||
vec4 txt_blur = texture2D(blurredSource, txt_coords);
|
||||
txt_color = txt_color + txt_blur.rgb * txt_blur.a;"
|
||||
: "") +
|
||||
"vec3 txt_color = texture2D(source, txt_coords).rgb;
|
||||
float greyscale_color = rgb2grey(txt_color) + color;" +
|
||||
|
||||
"float greyscale_color = rgb2grey(txt_color) + color;" +
|
||||
|
||||
(chromaColor !== 0 ?
|
||||
(rbgShift !== 0 ? "
|
||||
(chroma_color !== 0 ?
|
||||
(rgb_shift !== 0 ? "
|
||||
float rgb_noise = abs(texture2D(noiseSource, vec2(fract(time/(1024.0 * 256.0)), fract(time/(1024.0*1024.0)))).a - 0.5);
|
||||
float rcolor = texture2D(source, txt_coords + vec2(0.1, 0.0) * rbgShift * rgb_noise).r;
|
||||
float bcolor = texture2D(source, txt_coords - vec2(0.1, 0.0) * rbgShift * rgb_noise).b;
|
||||
float rcolor = texture2D(source, txt_coords + vec2(0.1, 0.0) * rgb_shift * rgb_noise).r;
|
||||
float bcolor = texture2D(source, txt_coords - vec2(0.1, 0.0) * rgb_shift * rgb_noise).b;
|
||||
txt_color.r = rcolor;
|
||||
txt_color.b = bcolor;
|
||||
greyscale_color = 0.33 * (rcolor + bcolor);" : "") +
|
||||
|
||||
"vec3 mixedColor = mix(fontColor.rgb, txt_color * fontColor.rgb, chromaColor);
|
||||
vec3 finalBackColor = mix(backgroundColor.rgb, mixedColor, greyscale_color);
|
||||
vec3 finalColor = mix(finalBackColor, fontColor.rgb, color).rgb;"
|
||||
"vec3 mixedColor = mix(font_color.rgb, txt_color * font_color.rgb, chroma_color);
|
||||
vec3 finalBackColor = mix(background_color.rgb, mixedColor, greyscale_color);
|
||||
vec3 finalColor = mix(finalBackColor, font_color.rgb, color).rgb;"
|
||||
:
|
||||
"vec3 finalColor = mix(backgroundColor.rgb, fontColor.rgb, greyscale_color);") +
|
||||
"vec3 finalColor = mix(background_color.rgb, font_color.rgb, greyscale_color);") +
|
||||
|
||||
"finalColor *= getScanlineIntensity(coords);" +
|
||||
"finalColor *= texture2D(rasterizationSource, coords).a;" +
|
||||
|
||||
(bloom !== 0 ?
|
||||
(bloom_strength !== 0 ?
|
||||
"vec4 bloomFullColor = texture2D(bloomSource, coords);
|
||||
vec3 bloomColor = bloomFullColor.rgb;
|
||||
float bloomAlpha = bloomFullColor.a;" +
|
||||
(chromaColor !== 0 ?
|
||||
"bloomColor = fontColor.rgb * mix(vec3(rgb2grey(bloomColor)), bloomColor, chromaColor);"
|
||||
vec2 minBound = step(vec2(0.0), coords);
|
||||
vec2 maxBound = step(coords, vec2(1.0));
|
||||
float bloomAlpha = bloomFullColor.a * minBound.x * minBound.y * maxBound.x * maxBound.y;" +
|
||||
(chroma_color !== 0 ?
|
||||
"bloomColor = font_color.rgb * mix(vec3(rgb2grey(bloomColor)), bloomColor, chroma_color);"
|
||||
:
|
||||
"bloomColor = fontColor.rgb * rgb2grey(bloomColor);") +
|
||||
"finalColor += bloomColor * bloom * bloomAlpha;"
|
||||
"bloomColor = font_color.rgb * rgb2grey(bloomColor);") +
|
||||
"finalColor += bloomColor * bloom_strength * bloomAlpha;"
|
||||
: "") +
|
||||
|
||||
"finalColor *= smoothstep(-dispX, 0.0, staticCoords.x) - smoothstep(1.0, 1.0 + dispX, staticCoords.x);
|
||||
finalColor *= smoothstep(-dispY, 0.0, staticCoords.y) - smoothstep(1.0, 1.0 + dispY, staticCoords.y);" +
|
||||
|
||||
(flickering !== 0 ? "
|
||||
(brightness_flickering !== 0 ? "
|
||||
finalColor *= brightness;" : "") +
|
||||
|
||||
"gl_FragColor = vec4(finalColor * screen_brightness, qt_Opacity);" +
|
||||
|
||||
@@ -22,8 +22,6 @@ import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
|
||||
import "Components"
|
||||
|
||||
RowLayout {
|
||||
property alias value: slider.value
|
||||
property alias stepSize: slider.stepSize
|
||||
@@ -38,7 +36,15 @@ RowLayout {
|
||||
stepSize: parent.stepSize
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
SizedLabel{
|
||||
text: Math.round(value * maxMultiplier) + "%"
|
||||
Text{
|
||||
id: textfield
|
||||
text: formatNumber(Math.round(value * maxMultiplier))
|
||||
}
|
||||
function formatNumber(num) {
|
||||
var n = "" + num;
|
||||
while (n.length < 3) {
|
||||
n = " " + n;
|
||||
}
|
||||
return n + "%";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,11 +21,11 @@
|
||||
import QtQuick 2.2
|
||||
import QtQuick.LocalStorage 2.0
|
||||
|
||||
QtObject {
|
||||
Item {
|
||||
property bool initialized: false
|
||||
|
||||
function getDatabase() {
|
||||
return LocalStorage.openDatabaseSync("coolretroterm", "1.0", "StorageDatabase", 100000);
|
||||
return LocalStorage.openDatabaseSync("coololdterm", "1.0", "StorageDatabase", 100000);
|
||||
}
|
||||
|
||||
function initialize() {
|
||||
|
||||
@@ -1,132 +1,55 @@
|
||||
import QtQuick 2.2
|
||||
import QtGraphicalEffects 1.0
|
||||
|
||||
import "utils.js" as Utils
|
||||
Item{
|
||||
Item{
|
||||
id: scalableContent
|
||||
width: parent.width * shadersettings.window_scaling
|
||||
height: parent.height * shadersettings.window_scaling
|
||||
|
||||
ShaderTerminal{
|
||||
property alias title: terminal.title
|
||||
property alias terminalSize: terminal.terminalSize
|
||||
|
||||
id: mainShader
|
||||
opacity: appSettings.windowOpacity * 0.3 + 0.7
|
||||
|
||||
blending: false
|
||||
|
||||
source: terminal.mainSource
|
||||
blurredSource: terminal.blurredSource
|
||||
dispX: (12 / width) * appSettings.windowScaling
|
||||
dispY: (12 / height) * appSettings.windowScaling
|
||||
virtual_resolution: terminal.virtualResolution
|
||||
|
||||
Loader{
|
||||
id: frame
|
||||
anchors.fill: parent
|
||||
|
||||
property real displacementLeft: item ? item.displacementLeft : 0
|
||||
property real displacementTop: item ? item.displacementTop : 0
|
||||
property real displacementRight: item ? item.displacementRight : 0
|
||||
property real displacementBottom: item ? item.displacementBottom : 0
|
||||
|
||||
asynchronous: true
|
||||
visible: status === Loader.Ready
|
||||
|
||||
z: 2.1
|
||||
source: appSettings.frameSource
|
||||
}
|
||||
|
||||
PreprocessedTerminal{
|
||||
id: terminal
|
||||
anchors.fill: parent
|
||||
}
|
||||
|
||||
// EFFECTS ////////////////////////////////////////////////////////////////
|
||||
|
||||
Loader{
|
||||
id: bloomEffectLoader
|
||||
active: appSettings.bloom
|
||||
asynchronous: true
|
||||
width: parent.width * appSettings.bloomQuality
|
||||
height: parent.height * appSettings.bloomQuality
|
||||
|
||||
sourceComponent: FastBlur{
|
||||
radius: Utils.lint(16, 48, appSettings.bloomQuality * appSettings.windowScaling);
|
||||
source: terminal.mainSource
|
||||
transparentBorder: true
|
||||
Loader{
|
||||
id: frame
|
||||
anchors.fill: parent
|
||||
z: 2.1
|
||||
source: shadersettings.frame_source
|
||||
}
|
||||
PreprocessedTerminal{
|
||||
id: terminal
|
||||
anchors.fill: parent
|
||||
}
|
||||
ShaderTerminal{
|
||||
id: shadercontainer
|
||||
anchors.fill: parent
|
||||
opacity: shadersettings.windowOpacity * 0.3 + 0.7
|
||||
z: 1.9
|
||||
}
|
||||
}
|
||||
|
||||
// This is used to render the texture to a lower resolution then scale it up.
|
||||
Loader{
|
||||
id: bloomSourceLoader
|
||||
active: appSettings.bloom !== 0
|
||||
asynchronous: true
|
||||
id: scalableContentSource
|
||||
active: shadersettings.window_scaling < 1
|
||||
sourceComponent: ShaderEffectSource{
|
||||
id: _bloomEffectSource
|
||||
sourceItem: bloomEffectLoader.item
|
||||
sourceItem: scalableContent
|
||||
hideSource: true
|
||||
smooth: true
|
||||
visible: false
|
||||
}
|
||||
}
|
||||
Loader{
|
||||
active: shadersettings.window_scaling < 1
|
||||
anchors.fill: parent
|
||||
sourceComponent: ShaderEffect{
|
||||
property var source: scalableContentSource.item
|
||||
}
|
||||
}
|
||||
|
||||
bloomSource: bloomSourceLoader.item
|
||||
|
||||
// This shader might be useful in the future. Since we used it only for a couple
|
||||
// of calculations is probably best to move those in the main shader. If in the future
|
||||
// we need to store another fullScreen channel this might be handy.
|
||||
|
||||
// ShaderEffect {
|
||||
// id: rasterizationEffect
|
||||
// width: parent.width
|
||||
// height: parent.height
|
||||
// property real outColor: 0.0
|
||||
// property real dispX: (5 / width) * appSettings.windowScaling
|
||||
// property real dispY: (5 / height) * appSettings.windowScaling
|
||||
// property size virtual_resolution: terminal.virtualResolution
|
||||
|
||||
// blending: false
|
||||
|
||||
// fragmentShader:
|
||||
// "uniform lowp float qt_Opacity;" +
|
||||
|
||||
// "varying highp vec2 qt_TexCoord0;
|
||||
// uniform highp vec2 virtual_resolution;
|
||||
// uniform highp float dispX;
|
||||
// uniform highp float dispY;
|
||||
// uniform mediump float outColor;
|
||||
|
||||
// highp float getScanlineIntensity(vec2 coords) {
|
||||
// highp float result = 1.0;" +
|
||||
|
||||
// (appSettings.rasterization != appSettings.no_rasterization ?
|
||||
// "result *= abs(sin(coords.y * virtual_resolution.y * "+Math.PI+"));" : "") +
|
||||
// (appSettings.rasterization == appSettings.pixel_rasterization ?
|
||||
// "result *= abs(sin(coords.x * virtual_resolution.x * "+Math.PI+"));" : "") + "
|
||||
|
||||
// return result;
|
||||
// }" +
|
||||
|
||||
// "void main() {" +
|
||||
// "highp float color = getScanlineIntensity(qt_TexCoord0);" +
|
||||
|
||||
// "float distance = length(vec2(0.5) - qt_TexCoord0);" +
|
||||
// "color = mix(color, 0.0, 1.2 * distance * distance);" +
|
||||
|
||||
// "color *= outColor + smoothstep(0.00, dispX, qt_TexCoord0.x) * (1.0 - outColor);" +
|
||||
// "color *= outColor + smoothstep(0.00, dispY, qt_TexCoord0.y) * (1.0 - outColor);" +
|
||||
// "color *= outColor + (1.0 - smoothstep(1.00 - dispX, 1.00, qt_TexCoord0.x)) * (1.0 - outColor);" +
|
||||
// "color *= outColor + (1.0 - smoothstep(1.00 - dispY, 1.00, qt_TexCoord0.y)) * (1.0 - outColor);" +
|
||||
|
||||
// "gl_FragColor.a = color;" +
|
||||
// "}"
|
||||
|
||||
// onStatusChanged: if (log) console.log(log) //Print warning messages
|
||||
// }
|
||||
|
||||
// rasterizationSource: ShaderEffectSource{
|
||||
// id: rasterizationEffectSource
|
||||
// sourceItem: rasterizationEffect
|
||||
// hideSource: true
|
||||
// smooth: true
|
||||
// wrapMode: ShaderEffectSource.ClampToEdge
|
||||
// visible: false
|
||||
// }
|
||||
// Terminal size overlay. Shown when terminal size changes.
|
||||
Loader{
|
||||
id: sizeoverlayloader
|
||||
z: 3
|
||||
anchors.centerIn: parent
|
||||
active: shadersettings.show_terminal_size
|
||||
sourceComponent: SizeOverlay{
|
||||
terminalSize: terminal.terminalSize
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,13 +27,13 @@ Timer{
|
||||
NumberAnimation on time {
|
||||
from: 0
|
||||
to: 100000
|
||||
running: appSettings.fps === 0 && enableTimer
|
||||
running: shadersettings.fps === 0 && enableTimer
|
||||
duration: 100000
|
||||
loops: Animation.Infinite
|
||||
}
|
||||
|
||||
onTriggered: time += interval
|
||||
running: appSettings.fps !== 0 && enableTimer
|
||||
interval: Math.round(1000 / appSettings.fps)
|
||||
running: shadersettings.fps !== 0 && enableTimer
|
||||
interval: Math.round(1000 / shadersettings.fps)
|
||||
repeat: true
|
||||
}
|
||||
|
||||
@@ -1,49 +1,13 @@
|
||||
Copyright (c) 2011-2017, Ricardo Banffy.
|
||||
Copyright (c) 2011-2012, Ricardo Banffy.
|
||||
Copyright (c) 1993-2011, Paul Mattes.
|
||||
Copyright (c) 2004-2005, Don Russell.
|
||||
Copyright (c) 2004, Dick Altenbern.
|
||||
Copyright (c) 1990, Jeff Sparkes.
|
||||
Copyright (c) 1989, Georgia Tech Research Corporation (GTRC), Atlanta, GA 30332.
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Ricardo Banffy, Paul Mattes, Don Russell,
|
||||
Dick Altenbern, Jeff Sparkes, GTRC nor the names of their contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL RICARDO BANFFY, PAUL MATTES, DON RUSSELL, DICK ALTENBERN, JEFF
|
||||
SPARKES OR GTRC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
The Debian Logo glyph is based on the Debian Open Use Logo and is
|
||||
Copyright (c) 1999 Software in the Public Interest, Inc., and it is
|
||||
incorporated here under the terms of the Creative Commons
|
||||
Attribution-ShareAlike 3.0 Unported License. The logo is released
|
||||
under the terms of the GNU Lesser General Public License, version 3 or
|
||||
any later version, or, at your option, of the Creative Commons
|
||||
Attribution-ShareAlike 3.0 Unported License.
|
||||
|
||||
Ubuntu, the Ubuntu logo and the Circle of Friends symbol are
|
||||
registered trademarks of Canonical Ltd.
|
||||
|
||||
The Fontforge SFD font description file is optionally licensed under
|
||||
the SIL Open Font License v1.1 with no Reserved Font Name. This
|
||||
license is available with a FAQ at http://scripts.sil.org/OFL.
|
||||
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
Neither the 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.
|
||||
THIS SOFTWARE IS PROVIDED BY PAUL MATTES, DON RUSSELL, DICK ALTENBERN, JEFF SPARKES AND GTRC "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL PAUL MATTES, DON RUSSELL, DICK ALTENBERN, JEFF SPARKES OR GTRC BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
@@ -1,101 +1,73 @@
|
||||
3270font: A font for the nostalgic
|
||||
==================================
|
||||
https://github.com/rbanffy/3270font
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
A little bit of history
|
||||
-----------------------
|
||||
|
||||
This font is derived from the x3270 font, which, in turn, was
|
||||
translated from the one in Georgia Tech's 3270tool, which was itself
|
||||
hand-copied from a 3270 series terminal. I built it because I felt
|
||||
terminals deserve to be pretty. The .sfd font file contains a x3270
|
||||
bitmap font that was used for guidance.
|
||||
This font is derived from the x3270 font, which, in turn, was translated
|
||||
from the one in Georgia Tech's 3270tool, which was itself hand-copied
|
||||
from a 3270 terminal. I built it because I felt terminals deserve to be
|
||||
pretty. The .sfd font file contains a x3270 bitmap font that was used
|
||||
for guidance.
|
||||
|
||||

|
||||
|
||||
Getting it
|
||||
----------
|
||||
|
||||
If you are running Debian or Ubuntu and you don't want to mess with
|
||||
building your font files, you can simply `apt-get install fonts-3270`
|
||||
(It's available from the Debian
|
||||
(https://packages.debian.org/sid/fonts/fonts-3270) and Ubuntu
|
||||
(http://packages.ubuntu.com/zesty/fonts-3270) package repos at
|
||||
https://packages.debian.org/sid/fonts/fonts-3270 and
|
||||
http://packages.ubuntu.com/xenial/fonts/fonts-3270, although the
|
||||
packaged version may not be the latest version, but it's good enough for
|
||||
most purposes. For those who don't have the luxury of a proper
|
||||
system-managed package, Adobe Type 1, TTF, OTF and WOFF versions are
|
||||
available for download on
|
||||
http://s3.amazonaws.com/3270font/3270_fonts_d250fd9.zip (although this
|
||||
URL may not always reflect the latest version).
|
||||
|
||||

|
||||
![Using with the Cathode terminal program]
|
||||
(https://raw.github.com/wiki/rbanffy/3270font/cathode.png)
|
||||
|
||||
The format
|
||||
----------
|
||||
|
||||
The "source" file is edited using FontForge. You'll need it if you want
|
||||
to generate fonts for your platform. On most civilized operating
|
||||
systems, you can simply `apt-get install fontforge`, `yum install
|
||||
fontforge` or even `port install fontforge`. On others, you may need to
|
||||
grab your copy from http://fontforge.org/. I encourage you to drop by
|
||||
and read the tutorials.
|
||||
This font was built with FontForge. You'll need it if you want to
|
||||
generate fonts for your platform. On most civilized operating systems,
|
||||
you can simply `apt-get install fontforge`, `yum install fontforge` or
|
||||
even `port install fontforge`. On others, you may need to grab your copy
|
||||
from http://fontforge.org/. I encourage you to drop by and read the
|
||||
tutorials.
|
||||
|
||||

|
||||
![Powerline-shell compatible!]
|
||||
(https://raw.github.com/wiki/rbanffy/3270font/powerline.png)
|
||||
|
||||

|
||||
Adobe Type 1, TTF, OTF and WOFF versions are available for download on
|
||||
http://s3.amazonaws.com/rbanffy/3270_fonts.zip for those who would just
|
||||
like to use them.
|
||||
|
||||
If you are running Windows, you'll probably need something like
|
||||
Cygwin, but, in the end, the font works correctly (with some very
|
||||
minor hinting issues).
|
||||
![Using it on OSX]
|
||||
(https://raw.github.com/wiki/rbanffy/3270font/osx_terminal.png)
|
||||
|
||||

|
||||
|
||||
Generating usable font files
|
||||
----------------------------
|
||||
|
||||
The easiest way to generate the font files your computer can use is to
|
||||
run `make all` (if you are running Ubuntu or Debian, `make install` will
|
||||
install them too). Using `make help` will offer a handy list of options.
|
||||
Generating derived files
|
||||
------------------------
|
||||
|
||||
The script `generate_derived.pe` calls FontForge and generates
|
||||
PostScript, OTF, TTF and WOFF versions of the base font, as well as a
|
||||
slightly more condensed .sfd file with the base font narrowed to 488
|
||||
units, with no glyph rescaling (or cropping - we need to fix that) and
|
||||
its corresponding PostScript, TTF, OTF and WOFF versions.
|
||||
|
||||

|
||||
PostScript, OTF, TTF and WOFF versions of the base font, as well as a
|
||||
slightly more condensed .sfd file with the base font narrowed to 488
|
||||
units, with no glyph rescaling and its corresponding PostScript, TTF,
|
||||
OTF and WOFF versions.
|
||||
|
||||
Contributing
|
||||
------------
|
||||
|
||||
I fear GitHub's pull-request mechanism may not be very
|
||||
FontForge-friendly. If you want to contribute (there are a lot of
|
||||
missing glyphs, such as the APL set and most non-latin alphabets which
|
||||
most likely were never built into 3270 terminals), the best workflow
|
||||
would be to make add the encoding slots (if needed), add/make the
|
||||
changes, reencode it in "Unicode, Full", compact it and validate
|
||||
it. Check if the `git diff` command gives out something sensible (does
|
||||
not change things you didn't intend to) and make a pull request. If, in
|
||||
doubt, get in touch and we will figure out how to do it right.
|
||||
I don't think GitHub's pull-request mechanism is FontForge-friendly. If
|
||||
you want to contribute (there are a lot of missing glyphs, such as the
|
||||
APL set and most non-latin alphabets which most likely were never built
|
||||
into 3270 terminals), get in touch and we will figure out how to do it
|
||||
right.
|
||||
|
||||
Preserving history
|
||||
------------------
|
||||
|
||||
I regard the history of electronic computing a very important part of
|
||||
our civilization's history. Consider donating to entities that help
|
||||
preserve it, such as the Computer History Museum
|
||||
(http://www.computerhistory.org/), the IT History Society
|
||||
(http://ithistory.org/) and many others around the world. If you have a
|
||||
historically significant piece of technology in your closet or garage,
|
||||
consider contacting a local technology or industrial-design-oriented
|
||||
museum for advice.
|
||||
|
||||
Known problems
|
||||
--------------
|
||||
|
||||
Not all symbols in the 3270 charset have Unicode counterparts. When
|
||||
possible, they are duplicated in the Unicode space. The 3270-only
|
||||
symbols are at the end of the font, along with some glyphs useful for
|
||||
building others.
|
||||
|
||||
Please refer to http://x3270.bgp.nu/Charset.html for a complete map.
|
||||
I have received errors when installing the OTF, TTF, and PFM fonts on
|
||||
Windows 7 and 8 (didn't try others).
|
||||
|
||||
BIN
app/qml/fonts/1979-atari-400-800/ATARI400800_rounded.TTF
Normal file
@@ -1,94 +0,0 @@
|
||||
Copyright (c) 2013, Pablo Caro <me AT pcaro DOT es> - http://pcaro.es/
|
||||
with Reserved Font Name Hermit.
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
@@ -1,13 +0,0 @@
|
||||
monaco.ttf
|
||||
==========
|
||||
|
||||
The original monaco.ttf improved: add some special characters (which are from "DejaVu Sans Mono")
|
||||
|
||||
In my work environment, I need connect to Linux system from Windows system remotely using SecureCRT or Putty, and edit files using VIM tools. So I need one beautiful font in SecureCRT / Putty.
|
||||
|
||||
In windows system, there are some original fonts are beautiful, for example "Consolas", but they can't support some special characters, for example: ▸, ↪, ⌴. Because they are original fonts in my Windows, I don't want to modify them.
|
||||
|
||||
I get "Monaco" from web. It is tiny and beautiful. But it also can't support those special characters.
|
||||
|
||||
So I add the characters by myself and share it.
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
dopustz:-480
|
||||
@@ -1,22 +0,0 @@
|
||||
ProFont
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2014 Carl Osterwald, Stephen C. Gilardi, Andrew Welch
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
@@ -1,31 +0,0 @@
|
||||
WHAT IS THIS?
|
||||
|
||||
This is ProFont TrueType, converted to Windows TrueType format
|
||||
by Mike Smith, with some tweaks added by "ardu".
|
||||
|
||||
Modifications include:
|
||||
- A Euro character
|
||||
- Missing characters from the Latin 1 code page
|
||||
- Full support for CodePage 850. These are mostly the famous
|
||||
block/box characters you know from DOS. Very useful if you use
|
||||
Mightnight Commander through PuTTY.
|
||||
- Fixed metrics so that point size of 9 works correctly. Until now
|
||||
you had to select 7 to obtain the native point size of 9.
|
||||
- Added some quick&dirty hinting for point size of 9. Most characters
|
||||
now match closely the look of the bitmap version.
|
||||
Don't expect it to look good on anything else than Windows...
|
||||
|
||||
|
||||
|
||||
To get the full original Distribution, other ProFont builds
|
||||
and more information
|
||||
go to <http://tobiasjung.name/profont/>
|
||||
|
||||
|
||||
DISCLAIMER
|
||||
See LICENSE file
|
||||
|
||||
|
||||
Tobias Jung
|
||||
January 2014
|
||||
profont@tobiasjung.name
|
||||
@@ -1,7 +0,0 @@
|
||||
Copyright (c) 2004, 2005 Tristan Grimmer
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
@@ -14,11 +14,12 @@ TerminalFrame{
|
||||
imageSource: "../images/black-frame.png"
|
||||
normalsSource: "../images/black-frame-normals.png"
|
||||
|
||||
distortionCoefficient: 1.9
|
||||
|
||||
displacementLeft: 80.0
|
||||
displacementTop: 65.0
|
||||
displacementRight: 80.0
|
||||
displacementBottom: 65.0
|
||||
|
||||
staticDiffuseComponent: 1.0
|
||||
dinamycDiffuseComponent: 0.6
|
||||
shaderString: "FrameShader.qml"
|
||||
}
|
||||
|
||||
19
app/qml/frames/NoFrame.qml
Normal file
@@ -0,0 +1,19 @@
|
||||
import QtQuick 2.2
|
||||
import "utils"
|
||||
|
||||
TerminalFrame{
|
||||
id: frame
|
||||
z: 2.1
|
||||
anchors.fill: parent
|
||||
addedWidth: 0
|
||||
addedHeight: 0
|
||||
borderLeft: 0
|
||||
borderRight: 0
|
||||
borderTop: 0
|
||||
borderBottom: 0
|
||||
|
||||
displacementLeft: 0
|
||||
displacementTop: 0
|
||||
displacementRight: 0
|
||||
displacementBottom: 0
|
||||
}
|
||||
@@ -14,11 +14,12 @@ TerminalFrame{
|
||||
imageSource: "../images/screen-frame.png"
|
||||
normalsSource: "../images/screen-frame-normals.png"
|
||||
|
||||
distortionCoefficient: 1.5
|
||||
|
||||
displacementLeft: 55
|
||||
displacementTop: 50
|
||||
displacementRight: 55
|
||||
displacementBottom: 50
|
||||
|
||||
staticDiffuseComponent: 1.0
|
||||
dinamycDiffuseComponent: 0.6
|
||||
shaderString: "FrameShader.qml"
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.1 MiB |
BIN
app/qml/frames/images/randfunction.png
Normal file
|
After Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 498 KiB After Width: | Height: | Size: 507 KiB |
102
app/qml/frames/utils/FrameShader.qml
Normal file
@@ -0,0 +1,102 @@
|
||||
import QtQuick 2.2
|
||||
import QtGraphicalEffects 1.0
|
||||
|
||||
ShaderEffect{
|
||||
property variant source: framesource
|
||||
property variant normals: framesourcenormals
|
||||
property real screen_distorsion: shadersettings.screen_distortion * framecontainer.distortionCoefficient
|
||||
property real ambient_light: shadersettings.ambient_light
|
||||
property color font_color: shadersettings.font_color
|
||||
property color background_color: shadersettings.background_color
|
||||
property real brightness: shadersettings.brightness * 1.5 + 0.5
|
||||
|
||||
property bool frameReflections: shadersettings.frameReflections
|
||||
property variant lightSource: reflectionEffectSourceLoader.item
|
||||
|
||||
property real chroma_color: shadersettings.chroma_color
|
||||
|
||||
Loader{
|
||||
id: reflectionEffectLoader
|
||||
width: parent.width * 0.33
|
||||
height: parent.height * 0.33
|
||||
active: frameReflections
|
||||
|
||||
sourceComponent: FastBlur{
|
||||
id: frameReflectionEffect
|
||||
radius: 128
|
||||
source: terminal.kterminal
|
||||
smooth: false
|
||||
}
|
||||
}
|
||||
|
||||
Loader{
|
||||
id: reflectionEffectSourceLoader
|
||||
active: frameReflections
|
||||
sourceComponent: ShaderEffectSource{
|
||||
id: frameReflectionSource
|
||||
sourceItem: reflectionEffectLoader.item
|
||||
hideSource: true
|
||||
smooth: true
|
||||
}
|
||||
}
|
||||
|
||||
blending: true
|
||||
|
||||
fragmentShader: "
|
||||
uniform sampler2D source;
|
||||
uniform sampler2D normals;
|
||||
uniform highp float screen_distorsion;
|
||||
uniform highp float ambient_light;
|
||||
uniform highp float qt_Opacity;
|
||||
uniform lowp float chroma_color;" +
|
||||
|
||||
(frameReflections ?
|
||||
"uniform sampler2D lightSource;" : "") + "
|
||||
|
||||
uniform vec4 font_color;
|
||||
uniform vec4 background_color;
|
||||
varying lowp float brightness;
|
||||
|
||||
varying highp vec2 qt_TexCoord0;
|
||||
|
||||
vec2 distortCoordinates(vec2 coords){
|
||||
vec2 cc = coords - vec2(0.5);
|
||||
float dist = dot(cc, cc) * screen_distorsion;
|
||||
return (coords + cc * (1.0 + dist) * dist);
|
||||
}
|
||||
|
||||
float rgb2grey(vec3 v){
|
||||
return dot(v, vec3(0.21, 0.72, 0.04));
|
||||
}
|
||||
|
||||
void main(){
|
||||
vec2 coords = distortCoordinates(qt_TexCoord0);
|
||||
vec4 txt_color = texture2D(source, coords);
|
||||
vec4 txt_normal = texture2D(normals, coords);
|
||||
vec3 normal = normalize(txt_normal.rgb * 2.0 - 1.0);
|
||||
vec3 light_direction = normalize(vec3(0.5, 0.5, 0.0) - vec3(qt_TexCoord0, 0.0));
|
||||
|
||||
float dotProd = dot(normal, light_direction);" +
|
||||
|
||||
(frameReflections ? "
|
||||
vec3 realLightColor = texture2D(lightSource, coords).rgb;
|
||||
float screenLight = rgb2grey(realLightColor);
|
||||
float clampedDotProd = clamp(dotProd, 0.05, 1.0);
|
||||
float diffuseReflection = clamp(screenLight * 1.5 * clampedDotProd, 0.0, 0.35);
|
||||
float reflectionAlpha = mix(1.0, 0.90, dotProd);
|
||||
vec3 lightColor = mix(font_color.rgb * screenLight, font_color.rgb * realLightColor, chroma_color);"
|
||||
: "
|
||||
float diffuseReflection = 0.0;
|
||||
float reflectionAlpha = 1.0;
|
||||
vec3 lightColor = font_color.rgb;") + "
|
||||
|
||||
|
||||
vec3 back_color = background_color.rgb * (0.2 + 0.5 * dotProd);
|
||||
vec3 front_color = lightColor * (0.05 + diffuseReflection);
|
||||
|
||||
vec4 dark_color = vec4((back_color + front_color) * txt_normal.a, txt_normal.a * reflectionAlpha);
|
||||
gl_FragColor = mix(dark_color, txt_color, ambient_light);
|
||||
}"
|
||||
|
||||
onStatusChanged: if (log) console.log(log) //Print warning messages
|
||||
}
|
||||
23
app/qml/frames/utils/NoFrameShader.qml
Normal file
@@ -0,0 +1,23 @@
|
||||
import QtQuick 2.2
|
||||
|
||||
ShaderEffect{
|
||||
property variant source: framesource
|
||||
property real screen_distorsion: shadersettings.screen_distortion
|
||||
|
||||
fragmentShader: "
|
||||
uniform sampler2D source;
|
||||
uniform highp float screen_distorsion;
|
||||
varying highp vec2 qt_TexCoord0;
|
||||
|
||||
vec2 distortCoordinates(vec2 coords){
|
||||
vec2 cc = coords - vec2(0.5);
|
||||
float dist = dot(cc, cc) * screen_distorsion;
|
||||
return (coords + cc * (1.0 + dist) * dist);
|
||||
}
|
||||
|
||||
void main(){
|
||||
vec2 coords = distortCoordinates(qt_TexCoord0);
|
||||
float inside = texture2D(source, coords).a;
|
||||
gl_FragColor = vec4(vec3(0.0), inside);
|
||||
}"
|
||||
}
|
||||
@@ -1,12 +1,9 @@
|
||||
import QtQuick 2.2
|
||||
import QtGraphicalEffects 1.0
|
||||
|
||||
import "../../utils.js" as Utils
|
||||
|
||||
Item{
|
||||
id: framecontainer
|
||||
property int textureWidth: terminalContainer.width / appSettings.windowScaling
|
||||
property int textureHeight: terminalContainer.height / appSettings.windowScaling
|
||||
property int textureWidth: terminalWindow.width
|
||||
property int textureHeight: terminalWindow.height
|
||||
|
||||
property int addedWidth
|
||||
property int addedHeight
|
||||
@@ -24,9 +21,7 @@ Item{
|
||||
property real displacementRight
|
||||
property real displacementBottom
|
||||
|
||||
// Material coefficients
|
||||
property real staticDiffuseComponent: 0.7
|
||||
property real dinamycDiffuseComponent: 1.0
|
||||
property real distortionCoefficient
|
||||
|
||||
BorderImage{
|
||||
id: frameimage
|
||||
@@ -61,159 +56,17 @@ Item{
|
||||
sourceItem: frameimage
|
||||
hideSource: true
|
||||
textureSize: Qt.size(parent.width, parent.height)
|
||||
sourceRect: Qt.rect(-1, -1, frameimage.width + 2, frameimage.height + 2)
|
||||
visible: false
|
||||
}
|
||||
ShaderEffectSource{
|
||||
id: framesourcenormals
|
||||
sourceItem: framenormals
|
||||
hideSource: true
|
||||
textureSize: Qt.size(parent.width, parent.height)
|
||||
sourceRect: Qt.rect(-1, -1, framenormals.width + 2, framenormals.height + 2)
|
||||
visible: false
|
||||
}
|
||||
|
||||
// REFLECTIONS ////////////////////////////////////////////////////////////
|
||||
Loader{
|
||||
id: reflectionEffectLoader
|
||||
width: parent.width * 0.33
|
||||
height: parent.height * 0.33
|
||||
active: appSettings.frameReflections
|
||||
|
||||
sourceComponent: FastBlur{
|
||||
id: frameReflectionEffect
|
||||
radius: 128
|
||||
source: terminal.mainSource
|
||||
smooth: false
|
||||
}
|
||||
}
|
||||
|
||||
Loader{
|
||||
id: reflectionEffectSourceLoader
|
||||
active: appSettings.frameReflections
|
||||
sourceComponent: ShaderEffectSource{
|
||||
id: frameReflectionSource
|
||||
sourceItem: reflectionEffectLoader.item
|
||||
hideSource: true
|
||||
smooth: true
|
||||
visible: false
|
||||
}
|
||||
}
|
||||
|
||||
// This texture represent the static light component.
|
||||
ShaderEffect {
|
||||
id: staticLight
|
||||
property alias source: framesource
|
||||
property alias normals: framesourcenormals
|
||||
property real screenCurvature: appSettings.screenCurvature
|
||||
property size curvature_coefficients: Qt.size(width / mainShader.width, height / mainShader.height)
|
||||
property real ambientLight: appSettings.ambientLight * 0.9 + 0.1
|
||||
property color fontColor: appSettings.fontColor
|
||||
property color backgroundColor: appSettings.backgroundColor
|
||||
property color reflectionColor: Utils.mix(fontColor, backgroundColor, 0.2)
|
||||
property real diffuseComponent: staticDiffuseComponent
|
||||
|
||||
anchors.centerIn: parent
|
||||
width: parent.width + (addedWidth / textureWidth) * parent.width
|
||||
height: parent.height + (addedHeight / textureHeight) * parent.height
|
||||
|
||||
blending: true
|
||||
|
||||
fragmentShader: "
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
#endif
|
||||
|
||||
uniform highp sampler2D normals;
|
||||
uniform highp sampler2D source;
|
||||
uniform lowp float screenCurvature;
|
||||
uniform highp vec2 curvature_coefficients;
|
||||
uniform lowp float ambientLight;
|
||||
uniform highp float qt_Opacity;
|
||||
uniform lowp vec4 reflectionColor;
|
||||
uniform lowp float diffuseComponent;
|
||||
|
||||
varying highp vec2 qt_TexCoord0;
|
||||
|
||||
vec2 distortCoordinates(vec2 coords){
|
||||
vec2 cc = (coords - vec2(0.5)) * curvature_coefficients;
|
||||
float dist = dot(cc, cc) * screenCurvature;
|
||||
return (coords + cc * (1.0 + dist) * dist);
|
||||
}
|
||||
|
||||
float rgb2grey(vec3 v){
|
||||
return dot(v, vec3(0.21, 0.72, 0.04));
|
||||
}
|
||||
|
||||
void main(){
|
||||
vec2 coords = distortCoordinates(qt_TexCoord0);
|
||||
vec4 txtColor = texture2D(source, coords);
|
||||
vec4 txtNormal = texture2D(normals, coords);
|
||||
|
||||
vec3 normal = normalize(txtNormal.rgb * 2.0 - 1.0);
|
||||
vec2 lightDirection = normalize(vec2(0.5, 0.5) - coords);
|
||||
float dotProd = dot(normal, vec3(lightDirection, 0.0)) * diffuseComponent * txtNormal.a;
|
||||
|
||||
vec3 darkColor = dotProd * reflectionColor.rgb;
|
||||
gl_FragColor = vec4(mix(darkColor, txtColor.rgb, ambientLight), dotProd);
|
||||
}
|
||||
"
|
||||
|
||||
onStatusChanged: if (log) console.log(log) //Print warning messages
|
||||
}
|
||||
|
||||
ShaderEffectSource {
|
||||
id: staticLightSource
|
||||
sourceItem: staticLight
|
||||
hideSource: true
|
||||
anchors.fill: staticLight
|
||||
live: true
|
||||
}
|
||||
|
||||
Loader{
|
||||
id: dynamicLightLoader
|
||||
anchors.fill: staticLight
|
||||
active: appSettings.frameReflections
|
||||
sourceComponent: ShaderEffect {
|
||||
property ShaderEffectSource lightMask: staticLightSource
|
||||
property ShaderEffectSource reflectionSource: reflectionEffectSourceLoader.item
|
||||
property real diffuseComponent: dinamycDiffuseComponent
|
||||
property real chromaColor: appSettings.chromaColor
|
||||
property color fontColor: appSettings.fontColor
|
||||
|
||||
visible: true
|
||||
blending: true
|
||||
|
||||
fragmentShader: "
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
#endif
|
||||
|
||||
uniform sampler2D lightMask;
|
||||
uniform sampler2D reflectionSource;
|
||||
uniform lowp float diffuseComponent;
|
||||
uniform lowp float chromaColor;
|
||||
uniform highp vec4 fontColor;
|
||||
uniform highp float qt_Opacity;
|
||||
|
||||
varying highp vec2 qt_TexCoord0;
|
||||
|
||||
float rgb2grey(vec3 v){
|
||||
return dot(v, vec3(0.21, 0.72, 0.04));
|
||||
}
|
||||
|
||||
void main() {
|
||||
float alpha = texture2D(lightMask, qt_TexCoord0).a * diffuseComponent;
|
||||
vec3 reflectionColor = texture2D(reflectionSource, qt_TexCoord0).rgb;
|
||||
vec3 color = fontColor.rgb * rgb2grey(reflectionColor);" +
|
||||
(chromaColor !== 0 ?
|
||||
"color = mix(color, fontColor.rgb * reflectionColor, chromaColor);"
|
||||
: "") +
|
||||
"gl_FragColor = vec4(color, 1.0) * alpha;
|
||||
}
|
||||
"
|
||||
|
||||
onStatusChanged: if (log) console.log(log) //Print warning messages
|
||||
}
|
||||
source: shaderString
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 608 KiB |
@@ -28,44 +28,21 @@ ApplicationWindow{
|
||||
|
||||
width: 1024
|
||||
height: 768
|
||||
|
||||
// Save window properties automatically
|
||||
onXChanged: appSettings.x = x
|
||||
onYChanged: appSettings.y = y
|
||||
onWidthChanged: appSettings.width = width
|
||||
onHeightChanged: appSettings.height = height
|
||||
|
||||
// Load saved window geometry and show the window
|
||||
Component.onCompleted: {
|
||||
appSettings.handleFontChanged();
|
||||
|
||||
x = appSettings.x
|
||||
y = appSettings.y
|
||||
width = appSettings.width
|
||||
height = appSettings.height
|
||||
|
||||
visible = true
|
||||
}
|
||||
|
||||
minimumWidth: 320
|
||||
minimumHeight: 240
|
||||
|
||||
visible: false
|
||||
visible: true
|
||||
|
||||
property bool fullscreen: appSettings.fullscreen
|
||||
property bool fullscreen: shadersettings.fullscreen
|
||||
onFullscreenChanged: visibility = (fullscreen ? Window.FullScreen : Window.Windowed)
|
||||
|
||||
//Workaround: Without __contentItem a ugly thin border is visible.
|
||||
menuBar: CRTMainMenuBar{
|
||||
id: mainMenu
|
||||
visible: (Qt.platform.os === "osx" || appSettings.showMenubar)
|
||||
__contentItem.visible: mainMenu.visible
|
||||
}
|
||||
|
||||
property string wintitle: appSettings.wintitle
|
||||
//Workaround: if menubar is assigned ugly margins are visible.
|
||||
menuBar: Qt.platform.os === "osx"
|
||||
? defaultMenuBar
|
||||
: shadersettings.showMenubar ? defaultMenuBar : null
|
||||
|
||||
color: "#00000000"
|
||||
title: terminalContainer.title || qsTr(appSettings.wintitle)
|
||||
title: qsTr("cool-retro-term")
|
||||
|
||||
Action {
|
||||
id: showMenubarAction
|
||||
@@ -73,77 +50,72 @@ ApplicationWindow{
|
||||
enabled: Qt.platform.os !== "osx"
|
||||
shortcut: "Ctrl+Shift+M"
|
||||
checkable: true
|
||||
checked: appSettings.showMenubar
|
||||
onTriggered: appSettings.showMenubar = !appSettings.showMenubar
|
||||
checked: shadersettings.showMenubar
|
||||
onTriggered: shadersettings.showMenubar = !shadersettings.showMenubar
|
||||
}
|
||||
Action {
|
||||
id: fullscreenAction
|
||||
text: qsTr("Fullscreen")
|
||||
enabled: Qt.platform.os !== "osx"
|
||||
shortcut: "Alt+F11"
|
||||
onTriggered: appSettings.fullscreen = !appSettings.fullscreen;
|
||||
onTriggered: shadersettings.fullscreen = !shadersettings.fullscreen;
|
||||
checkable: true
|
||||
checked: appSettings.fullscreen
|
||||
checked: shadersettings.fullscreen
|
||||
}
|
||||
Action {
|
||||
id: quitAction
|
||||
text: qsTr("Quit")
|
||||
shortcut: "Ctrl+Shift+Q"
|
||||
onTriggered: Qt.quit();
|
||||
onTriggered: terminalWindow.close();
|
||||
}
|
||||
Action{
|
||||
id: showsettingsAction
|
||||
text: qsTr("Settings")
|
||||
onTriggered: {
|
||||
settingswindow.show();
|
||||
settingswindow.requestActivate();
|
||||
settingswindow.raise();
|
||||
}
|
||||
onTriggered: settingswindow.show();
|
||||
}
|
||||
Action{
|
||||
id: copyAction
|
||||
text: qsTr("Copy")
|
||||
shortcut: "Ctrl+Shift+C"
|
||||
onTriggered: terminal.copyClipboard()
|
||||
}
|
||||
Action{
|
||||
id: pasteAction
|
||||
text: qsTr("Paste")
|
||||
shortcut: "Ctrl+Shift+V"
|
||||
onTriggered: terminal.pasteClipboard()
|
||||
}
|
||||
Action{
|
||||
id: zoomIn
|
||||
text: qsTr("Zoom In")
|
||||
shortcut: "Ctrl++"
|
||||
onTriggered: appSettings.incrementScaling();
|
||||
onTriggered: shadersettings.incrementScaling();
|
||||
}
|
||||
Action{
|
||||
id: zoomOut
|
||||
text: qsTr("Zoom Out")
|
||||
shortcut: "Ctrl+-"
|
||||
onTriggered: appSettings.decrementScaling();
|
||||
onTriggered: shadersettings.decrementScaling();
|
||||
}
|
||||
Action{
|
||||
id: showAboutAction
|
||||
text: qsTr("About")
|
||||
onTriggered: {
|
||||
aboutDialog.show();
|
||||
aboutDialog.requestActivate();
|
||||
aboutDialog.raise();
|
||||
}
|
||||
}
|
||||
CRTMainMenuBar{
|
||||
id: defaultMenuBar
|
||||
}
|
||||
ApplicationSettings{
|
||||
id: appSettings
|
||||
id: shadersettings
|
||||
}
|
||||
TimeManager{
|
||||
id: timeManager
|
||||
enableTimer: terminalWindow.visible
|
||||
}
|
||||
TerminalContainer{
|
||||
id: terminalContainer
|
||||
y: appSettings.showMenubar ? 0 : -2 // Workaroud to hide the margin in the menubar.
|
||||
width: parent.width * appSettings.windowScaling
|
||||
height: (parent.height + Math.abs(y)) * appSettings.windowScaling
|
||||
|
||||
transform: Scale {
|
||||
xScale: 1 / appSettings.windowScaling
|
||||
yScale: 1 / appSettings.windowScaling
|
||||
}
|
||||
anchors.fill: parent
|
||||
}
|
||||
SettingsWindow{
|
||||
id: settingswindow
|
||||
@@ -153,18 +125,5 @@ ApplicationWindow{
|
||||
id: aboutDialog
|
||||
visible: false
|
||||
}
|
||||
Loader{
|
||||
anchors.centerIn: parent
|
||||
active: appSettings.showTerminalSize
|
||||
sourceComponent: SizeOverlay{
|
||||
z: 3
|
||||
terminalSize: terminalContainer.terminalSize
|
||||
}
|
||||
}
|
||||
onClosing: {
|
||||
// OSX Since we are currently supporting only one window
|
||||
// quit the application when it is closed.
|
||||
if (Qt.platform.os === "osx")
|
||||
Qt.quit()
|
||||
}
|
||||
Component.onCompleted: shadersettings.handleFontChanged();
|
||||
}
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>frames/BlackRoughFrame.qml</file>
|
||||
<file>frames/NoFrame.qml</file>
|
||||
<file>frames/images/black-frame.png</file>
|
||||
<file>frames/images/screen-frame-normals.png</file>
|
||||
<file>frames/images/black-frame-normals.png</file>
|
||||
<file>frames/images/screen-frame.png</file>
|
||||
<file>frames/images/black-frame-original.png</file>
|
||||
<file>frames/images/randfunction.png</file>
|
||||
<file>frames/images/screen-frame-original.png</file>
|
||||
<file>frames/WhiteSimpleFrame.qml</file>
|
||||
<file>frames/utils/FrameShader.qml</file>
|
||||
<file>frames/utils/NoFrameShader.qml</file>
|
||||
<file>frames/utils/TerminalFrame.qml</file>
|
||||
<file>SizeOverlay.qml</file>
|
||||
<file>ShaderTerminal.qml</file>
|
||||
@@ -28,30 +32,40 @@
|
||||
<file>main.qml</file>
|
||||
<file>SettingsTerminalTab.qml</file>
|
||||
<file>FontScanlines.qml</file>
|
||||
<file>fonts/1982-commodore64/C64_Pro_v1.0-STYLE.ttf</file>
|
||||
<file>fonts/1982-commodore64/license.txt</file>
|
||||
<file>fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf</file>
|
||||
<file>fonts/1982-commodore64/C64_Elite_Mono_v1.0-STYLE.ttf</file>
|
||||
<file>fonts/1982-commodore64/C64_User_Mono_v1.0-STYLE.ttf</file>
|
||||
<file>fonts/1982-commodore64/C64_User_v1.0-STYLE.ttf</file>
|
||||
<file>fonts/1977-apple2/FreeLicense.txt</file>
|
||||
<file>fonts/1977-apple2/PRNumber3.ttf</file>
|
||||
<file>fonts/1977-apple2/PrintChar21.ttf</file>
|
||||
<file>fonts/1971-ibm-3278/README.md</file>
|
||||
<file>fonts/1971-ibm-3278/LICENSE.txt</file>
|
||||
<file>fonts/1971-ibm-3278/3270Medium.ttf</file>
|
||||
<file>fonts/1975-knight-tv/KnightTVMedium.ttf</file>
|
||||
<file>fonts/1985-atari-st/AtariST8x16SystemFont.ttf</file>
|
||||
<file>fonts/modern-terminus/TerminusTTF-Bold-4.38.2.ttf</file>
|
||||
<file>fonts/modern-terminus/TerminusTTF-4.38.2.ttf</file>
|
||||
<file>fonts/1977-commodore-pet/FreeLicense.txt</file>
|
||||
<file>fonts/1977-commodore-pet/COMMODORE_PET_128_2y.ttf</file>
|
||||
<file>fonts/1977-commodore-pet/COMMODORE_PET.ttf</file>
|
||||
<file>fonts/1977-commodore-pet/COMMODORE_PET_64_2y.ttf</file>
|
||||
<file>fonts/1977-commodore-pet/COMMODORE_PET_2y.ttf</file>
|
||||
<file>fonts/1977-commodore-pet/COMMODORE_PET_64.ttf</file>
|
||||
<file>fonts/1977-commodore-pet/COMMODORE_PET_128.ttf</file>
|
||||
<file>fonts/1977-commodore-pet/COMMODORE_PET_2x.ttf</file>
|
||||
<file>fonts/1979-atari-400-800/ReadMe.rtf</file>
|
||||
<file>fonts/1979-atari-400-800/ATARI400800_original.TTF</file>
|
||||
<file>fonts/1979-atari-400-800/ATARI400800_squared.TTF</file>
|
||||
<file>fonts/1979-atari-400-800/ATARI400800_rounded.TTF</file>
|
||||
<file>fonts/1985-ibm-pc-vga/Perfect DOS VGA 437 Win.ttf</file>
|
||||
<file>fonts/1985-ibm-pc-vga/Perfect DOS VGA 437.ttf</file>
|
||||
<file>fonts/1985-ibm-pc-vga/dos437.txt</file>
|
||||
<file>Storage.qml</file>
|
||||
<file>CRTMainMenuBar.qml</file>
|
||||
<file>SettingsPerformanceTab.qml</file>
|
||||
<file>TerminalContainer.qml</file>
|
||||
<file>images/crt256.png</file>
|
||||
<file>utils.js</file>
|
||||
<file>images/allNoise512.png</file>
|
||||
<file>fonts/modern-proggy-tiny/ProggyTiny.ttf</file>
|
||||
<file>fonts/modern-pro-font-win-tweaked/ProFontWindows.ttf</file>
|
||||
<file>fonts/modern-monaco/monaco.ttf</file>
|
||||
<file>fonts/modern-hermit/Hermit-medium.otf</file>
|
||||
<file>fonts/modern-inconsolata/Inconsolata.otf</file>
|
||||
<file>SettingsScreenTab.qml</file>
|
||||
<file>fonts/modern-fixedsys-excelsior/FSEX301-L2.ttf</file>
|
||||
<file>../icons/32x32/cool-retro-term.png</file>
|
||||
<file>Components/SizedLabel.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
.pragma library
|
||||
function clamp(x, min, max) {
|
||||
if (x <= min)
|
||||
return min;
|
||||
if (x >= max)
|
||||
return max;
|
||||
return x;
|
||||
}
|
||||
function lint(a, b, t) {
|
||||
return (1 - t) * a + (t) * b;
|
||||
}
|
||||
function mix(c1, c2, alpha){
|
||||
return Qt.rgba(c1.r * alpha + c2.r * (1-alpha),
|
||||
c1.g * alpha + c2.g * (1-alpha),
|
||||
c1.b * alpha + c2.b * (1-alpha),
|
||||
c1.a * alpha + c2.a * (1-alpha))
|
||||
}
|
||||
function strToColor(s){
|
||||
var r = parseInt(s.substring(1,3), 16) / 256;
|
||||
var g = parseInt(s.substring(3,5), 16) / 256;
|
||||
var b = parseInt(s.substring(5,7), 16) / 256;
|
||||
return Qt.rgba(r, g, b, 1.0);
|
||||
}
|
||||
|
||||
/* Tokenizes a command into program and arguments, taking into account quoted
|
||||
* strings and backslashes.
|
||||
* Based on GLib's tokenizer, used by Gnome Terminal
|
||||
*/
|
||||
function tokenizeCommandLine(s){
|
||||
var args = [];
|
||||
var currentToken = "";
|
||||
var quoteChar = "";
|
||||
var escaped = false;
|
||||
var nextToken = function() {
|
||||
args.push(currentToken);
|
||||
currentToken = "";
|
||||
}
|
||||
var appendToCurrentToken = function(c) {
|
||||
currentToken += c;
|
||||
}
|
||||
|
||||
for (var i = 0; i < s.length; i++) {
|
||||
|
||||
// char followed by backslash, append literally
|
||||
if (escaped) {
|
||||
escaped = false;
|
||||
appendToCurrentToken(s[i]);
|
||||
|
||||
// char inside quotes, either close or append
|
||||
} else if (quoteChar) {
|
||||
escaped = s[i] === '\\';
|
||||
if (quoteChar === s[i]) {
|
||||
quoteChar = "";
|
||||
nextToken();
|
||||
} else if (!escaped) {
|
||||
appendToCurrentToken(s[i]);
|
||||
}
|
||||
|
||||
// regular char
|
||||
} else {
|
||||
escaped = s[i] === '\\';
|
||||
switch (s[i]) {
|
||||
case '\\':
|
||||
// begin escape
|
||||
break;
|
||||
case '\n':
|
||||
// newlines always delimits
|
||||
nextToken();
|
||||
break;
|
||||
case ' ':
|
||||
case '\t':
|
||||
// delimit on new whitespace
|
||||
if (currentToken) {
|
||||
nextToken();
|
||||
}
|
||||
break;
|
||||
case '\'':
|
||||
case '"':
|
||||
// begin quoted section
|
||||
quoteChar = s[i];
|
||||
break;
|
||||
default:
|
||||
appendToCurrentToken(s[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ignore last token if broken quotes/backslash
|
||||
if (currentToken && !escaped && !quoteChar) {
|
||||
nextToken();
|
||||
}
|
||||
|
||||
return args;
|
||||
}
|
||||
@@ -2,10 +2,10 @@
|
||||
Comment=Use the command line the old way
|
||||
Exec=cool-retro-term
|
||||
GenericName=Terminal emulator
|
||||
Icon=cool-retro-term
|
||||
Icon=utilities-terminal
|
||||
MimeType=
|
||||
Name=Cool Retro Term
|
||||
Categories=System;TerminalEmulator;
|
||||
Categories=Qt;System;Utility;TerminalEmulator;
|
||||
StartupNotify=true
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Keywords=shell;prompt;command;commandline;
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
TEMPLATE = subdirs
|
||||
|
||||
CONFIG += ordered
|
||||
|
||||
SUBDIRS += qmltermwidget
|
||||
SUBDIRS += app
|
||||
SUBDIRS += konsole-qml-plugin
|
||||
|
||||
desktop.files += cool-retro-term.desktop
|
||||
desktop.path += /usr/share/applications
|
||||
|
||||
15
konsole-qml-plugin/README
Normal file
@@ -0,0 +1,15 @@
|
||||
this is a repository for shared C++ QML plugin, offering access to
|
||||
terminal sessions.
|
||||
|
||||
if you want to add something, please ask the maintainer of this library first to
|
||||
make sure it's a good fit
|
||||
|
||||
the current maintainer is: Dmitry Zagnoyko <hiroshidi@gmail.com>
|
||||
|
||||
current plugin consist:
|
||||
- KTerminal: offers access to terminal session from qml
|
||||
- KSessions: offers access to pty(s) from C++ layer
|
||||
|
||||
Branched from:
|
||||
https://code.launchpad.net/~ubuntu-terminal-dev/ubuntu-terminal-app/plugin
|
||||
At revision 14
|
||||
@@ -0,0 +1,42 @@
|
||||
# example scheme for konsole
|
||||
|
||||
# the title is to appear in the menu.
|
||||
|
||||
title Black on Light Yellow
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 0 0 0 0 0 # regular foreground color (Black)
|
||||
color 1 255 255 221 1 0 # regular background color (Light Yellow)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
color 6 24 24 178 0 0 # regular color 4 Blue
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
color 9 178 178 178 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 0 0 0 0 1 # intensive foreground color
|
||||
color 11 255 255 221 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
@@ -0,0 +1,104 @@
|
||||
[Background]
|
||||
Bold=false
|
||||
Color=247,247,214
|
||||
Transparency=true
|
||||
MaxRandomHue=340
|
||||
|
||||
[BackgroundIntense]
|
||||
Bold=false
|
||||
Color=255,255,221
|
||||
Transparency=true
|
||||
|
||||
[Color0]
|
||||
Bold=false
|
||||
Color=0,0,0
|
||||
Transparency=false
|
||||
|
||||
[Color0Intense]
|
||||
Bold=false
|
||||
Color=104,104,104
|
||||
Transparency=false
|
||||
|
||||
[Color1]
|
||||
Bold=false
|
||||
Color=178,24,24
|
||||
Transparency=false
|
||||
|
||||
[Color1Intense]
|
||||
Bold=false
|
||||
Color=255,84,84
|
||||
Transparency=false
|
||||
|
||||
[Color2]
|
||||
Bold=false
|
||||
Color=24,178,24
|
||||
Transparency=false
|
||||
|
||||
[Color2Intense]
|
||||
Bold=false
|
||||
Color=84,255,84
|
||||
Transparency=false
|
||||
|
||||
[Color3]
|
||||
Bold=false
|
||||
Color=178,104,24
|
||||
Transparency=false
|
||||
|
||||
[Color3Intense]
|
||||
Bold=false
|
||||
Color=255,255,84
|
||||
Transparency=false
|
||||
|
||||
[Color4]
|
||||
Bold=false
|
||||
Color=24,24,178
|
||||
Transparency=false
|
||||
|
||||
[Color4Intense]
|
||||
Bold=false
|
||||
Color=84,84,255
|
||||
Transparency=false
|
||||
|
||||
[Color5]
|
||||
Bold=false
|
||||
Color=178,24,178
|
||||
Transparency=false
|
||||
|
||||
[Color5Intense]
|
||||
Bold=false
|
||||
Color=255,84,255
|
||||
Transparency=false
|
||||
|
||||
[Color6]
|
||||
Bold=false
|
||||
Color=24,178,178
|
||||
Transparency=false
|
||||
|
||||
[Color6Intense]
|
||||
Bold=false
|
||||
Color=84,255,255
|
||||
Transparency=false
|
||||
|
||||
[Color7]
|
||||
Bold=false
|
||||
Color=178,178,178
|
||||
Transparency=false
|
||||
|
||||
[Color7Intense]
|
||||
Bold=false
|
||||
Color=255,255,255
|
||||
Transparency=false
|
||||
|
||||
[Foreground]
|
||||
Bold=false
|
||||
Color=0,0,0
|
||||
Transparency=false
|
||||
|
||||
[ForegroundIntense]
|
||||
Bold=true
|
||||
Color=0,0,0
|
||||
Transparency=false
|
||||
|
||||
[General]
|
||||
Description=Black on Random Light
|
||||
Opacity=1
|
||||
42
konsole-qml-plugin/assets/color-schemes/BlackOnWhite.schema
Normal file
@@ -0,0 +1,42 @@
|
||||
# example scheme for konsole
|
||||
|
||||
# the title is to appear in the menu.
|
||||
|
||||
title Black on White
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 0 0 0 0 0 # regular foreground color (Black)
|
||||
color 1 255 255 255 1 0 # regular background color (White)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
color 6 24 24 178 0 0 # regular color 4 Blue
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
color 9 178 178 178 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 0 0 0 0 1 # intensive foreground color
|
||||
color 11 255 255 255 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
103
konsole-qml-plugin/assets/color-schemes/DarkPastels.colorscheme
Normal file
@@ -0,0 +1,103 @@
|
||||
[Background]
|
||||
Bold=false
|
||||
Color=44,44,44
|
||||
Transparency=false
|
||||
|
||||
[BackgroundIntense]
|
||||
Bold=true
|
||||
Color=44,44,44
|
||||
Transparency=false
|
||||
|
||||
[Color0]
|
||||
Bold=false
|
||||
Color=63,63,63
|
||||
Transparency=false
|
||||
|
||||
[Color0Intense]
|
||||
Bold=true
|
||||
Color=112,144,128
|
||||
Transparency=false
|
||||
|
||||
[Color1]
|
||||
Bold=false
|
||||
Color=112,80,80
|
||||
Transparency=false
|
||||
|
||||
[Color1Intense]
|
||||
Bold=true
|
||||
Color=220,163,163
|
||||
Transparency=false
|
||||
|
||||
[Color2]
|
||||
Bold=false
|
||||
Color=96,180,138
|
||||
Transparency=false
|
||||
|
||||
[Color2Intense]
|
||||
Bold=true
|
||||
Color=114,213,163
|
||||
Transparency=false
|
||||
|
||||
[Color3]
|
||||
Bold=false
|
||||
Color=223,175,143
|
||||
Transparency=false
|
||||
|
||||
[Color3Intense]
|
||||
Bold=true
|
||||
Color=240,223,175
|
||||
Transparency=false
|
||||
|
||||
[Color4]
|
||||
Bold=false
|
||||
Color=154,184,215
|
||||
Transparency=false
|
||||
|
||||
[Color4Intense]
|
||||
Bold=true
|
||||
Color=148,191,243
|
||||
Transparency=false
|
||||
|
||||
[Color5]
|
||||
Bold=false
|
||||
Color=220,140,195
|
||||
Transparency=false
|
||||
|
||||
[Color5Intense]
|
||||
Bold=true
|
||||
Color=236,147,211
|
||||
Transparency=false
|
||||
|
||||
[Color6]
|
||||
Bold=false
|
||||
Color=140,208,211
|
||||
Transparency=false
|
||||
|
||||
[Color6Intense]
|
||||
Bold=true
|
||||
Color=147,224,227
|
||||
Transparency=false
|
||||
|
||||
[Color7]
|
||||
Bold=false
|
||||
Color=220,220,204
|
||||
Transparency=false
|
||||
|
||||
[Color7Intense]
|
||||
Bold=true
|
||||
Color=255,255,255
|
||||
Transparency=false
|
||||
|
||||
[Foreground]
|
||||
Bold=false
|
||||
Color=220,220,204
|
||||
Transparency=false
|
||||
|
||||
[ForegroundIntense]
|
||||
Bold=true
|
||||
Color=220,220,204
|
||||
Transparency=false
|
||||
|
||||
[General]
|
||||
Description=Dark Pastels
|
||||
Opacity=1
|
||||
104
konsole-qml-plugin/assets/color-schemes/GreenOnBlack.colorscheme
Normal file
@@ -0,0 +1,104 @@
|
||||
|
||||
[Background]
|
||||
Bold=false
|
||||
Color=0,0,0
|
||||
Transparency=false
|
||||
|
||||
[BackgroundIntense]
|
||||
Bold=false
|
||||
Color=0,0,0
|
||||
Transparency=false
|
||||
|
||||
[Color0]
|
||||
Bold=false
|
||||
Color=0,0,0
|
||||
Transparency=false
|
||||
|
||||
[Color0Intense]
|
||||
Bold=false
|
||||
Color=104,104,104
|
||||
Transparency=false
|
||||
|
||||
[Color1]
|
||||
Bold=false
|
||||
Color=250,75,75
|
||||
Transparency=false
|
||||
|
||||
[Color1Intense]
|
||||
Bold=false
|
||||
Color=255,84,84
|
||||
Transparency=false
|
||||
|
||||
[Color2]
|
||||
Bold=false
|
||||
Color=24,178,24
|
||||
Transparency=false
|
||||
|
||||
[Color2Intense]
|
||||
Bold=false
|
||||
Color=84,255,84
|
||||
Transparency=false
|
||||
|
||||
[Color3]
|
||||
Bold=false
|
||||
Color=178,104,24
|
||||
Transparency=false
|
||||
|
||||
[Color3Intense]
|
||||
Bold=false
|
||||
Color=255,255,84
|
||||
Transparency=false
|
||||
|
||||
[Color4]
|
||||
Bold=false
|
||||
Color=92,167,251
|
||||
Transparency=false
|
||||
|
||||
[Color4Intense]
|
||||
Bold=false
|
||||
Color=84,84,255
|
||||
Transparency=false
|
||||
|
||||
[Color5]
|
||||
Bold=false
|
||||
Color=225,30,225
|
||||
Transparency=false
|
||||
|
||||
[Color5Intense]
|
||||
Bold=false
|
||||
Color=255,84,255
|
||||
Transparency=false
|
||||
|
||||
[Color6]
|
||||
Bold=false
|
||||
Color=24,178,178
|
||||
Transparency=false
|
||||
|
||||
[Color6Intense]
|
||||
Bold=false
|
||||
Color=84,255,255
|
||||
Transparency=false
|
||||
|
||||
[Color7]
|
||||
Bold=false
|
||||
Color=178,178,178
|
||||
Transparency=false
|
||||
|
||||
[Color7Intense]
|
||||
Bold=false
|
||||
Color=255,255,255
|
||||
Transparency=false
|
||||
|
||||
[Foreground]
|
||||
Bold=false
|
||||
Color=24,240,24
|
||||
Transparency=false
|
||||
|
||||
[ForegroundIntense]
|
||||
Bold=true
|
||||
Color=24,240,24
|
||||
Transparency=false
|
||||
|
||||
[General]
|
||||
Description=Green on Black
|
||||
Opacity=1
|
||||
100
konsole-qml-plugin/assets/color-schemes/Linux.colorscheme
Normal file
@@ -0,0 +1,100 @@
|
||||
[Background]
|
||||
Bold=false
|
||||
Color=0,0,0
|
||||
|
||||
[BackgroundIntense]
|
||||
Bold=false
|
||||
Color=104,104,104
|
||||
|
||||
[Color0]
|
||||
Bold=false
|
||||
Color=0,0,0
|
||||
|
||||
|
||||
[Color0Intense]
|
||||
Bold=false
|
||||
Color=104,104,104
|
||||
|
||||
|
||||
[Color1]
|
||||
Bold=false
|
||||
Color=178,24,24
|
||||
|
||||
|
||||
[Color1Intense]
|
||||
Bold=false
|
||||
Color=255,84,84
|
||||
|
||||
|
||||
[Color2]
|
||||
Bold=false
|
||||
Color=24,178,24
|
||||
|
||||
|
||||
[Color2Intense]
|
||||
Bold=false
|
||||
Color=84,255,84
|
||||
|
||||
|
||||
[Color3]
|
||||
Bold=false
|
||||
Color=178,104,24
|
||||
|
||||
|
||||
[Color3Intense]
|
||||
Bold=false
|
||||
Color=255,255,84
|
||||
|
||||
|
||||
[Color4]
|
||||
Bold=false
|
||||
Color=24,24,178
|
||||
|
||||
|
||||
[Color4Intense]
|
||||
Bold=false
|
||||
Color=84,84,255
|
||||
|
||||
|
||||
[Color5]
|
||||
Bold=false
|
||||
Color=178,24,178
|
||||
|
||||
|
||||
[Color5Intense]
|
||||
Bold=false
|
||||
Color=255,84,255
|
||||
|
||||
|
||||
[Color6]
|
||||
Bold=false
|
||||
Color=24,178,178
|
||||
|
||||
|
||||
[Color6Intense]
|
||||
Bold=false
|
||||
Color=84,255,255
|
||||
|
||||
|
||||
[Color7]
|
||||
Bold=false
|
||||
Color=178,178,178
|
||||
|
||||
|
||||
[Color7Intense]
|
||||
Bold=false
|
||||
Color=255,255,255
|
||||
|
||||
|
||||
[Foreground]
|
||||
Bold=false
|
||||
Color=178,178,178
|
||||
|
||||
|
||||
[ForegroundIntense]
|
||||
Bold=false
|
||||
Color=255,255,255
|
||||
|
||||
|
||||
[General]
|
||||
Description=Linux Colors
|
||||
42
konsole-qml-plugin/assets/color-schemes/WhiteOnBlack.schema
Normal file
@@ -0,0 +1,42 @@
|
||||
# example scheme for konsole
|
||||
|
||||
# the title is to appear in the menu.
|
||||
|
||||
title White on Black
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 255 255 255 0 0 # regular foreground color (White)
|
||||
color 1 0 0 0 1 0 # regular background color (Black)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
color 6 24 24 178 0 0 # regular color 4 Blue
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
color 9 178 178 178 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 255 255 255 0 1 # intensive foreground color
|
||||
color 11 0 0 0 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
@@ -0,0 +1,31 @@
|
||||
import sys
|
||||
|
||||
__, inpath, outpath = sys.argv
|
||||
|
||||
def interpolate(color, minim):
|
||||
return minim + (color / 255) * (255 - minim)
|
||||
|
||||
def rgb2grey(r, g, b):
|
||||
return round(0.21 * r + 0.72 * g + 0.07 * b)
|
||||
|
||||
infile = open(inpath, "r")
|
||||
outfile = open(outpath, "w")
|
||||
|
||||
lines = infile.readlines()
|
||||
|
||||
def process_line(line):
|
||||
if not line.startswith("color"): return line
|
||||
chunks = [l for l in line.split(" ") if l]
|
||||
color = rgb2grey(int(chunks[2]), int(chunks[3]), int(chunks[4]))
|
||||
if color != 0:
|
||||
color = int(interpolate(color, 5))
|
||||
chunks[2] = str(color)
|
||||
chunks[3] = str(color)
|
||||
chunks[4] = str(color)
|
||||
return ' '.join(chunks)
|
||||
|
||||
for l in (process_line(l) for l in lines):
|
||||
outfile.write(l + '\n')
|
||||
|
||||
infile.close()
|
||||
outfile.close()
|
||||
@@ -0,0 +1,85 @@
|
||||
# example scheme for konsole
|
||||
|
||||
|
||||
|
||||
# the title is to appear in the menu.
|
||||
|
||||
|
||||
|
||||
title White on Black
|
||||
|
||||
|
||||
|
||||
# foreground colors
|
||||
|
||||
|
||||
|
||||
# note that the default background color is flagged
|
||||
|
||||
# to become transparent when an image is present.
|
||||
|
||||
|
||||
|
||||
# slot transparent bold
|
||||
|
||||
# | | |
|
||||
|
||||
# V V--color--V V V
|
||||
|
||||
|
||||
|
||||
color 0 255 255 255 0 0 # regular foreground color (White)
|
||||
|
||||
color 1 0 0 0 1 0 # regular background color (Black)
|
||||
|
||||
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
|
||||
color 3 255 43 43 0 0 # regular color 1 Red
|
||||
|
||||
color 4 28 172 120 0 0 # regular color 2 Green
|
||||
|
||||
color 5 248 213 104 0 0 # regular color 3 Yellow
|
||||
|
||||
color 6 43 108 196 0 0 # regular color 4 Blue
|
||||
|
||||
color 7 255 29 206 0 0 # regular color 5 Magenta
|
||||
|
||||
color 8 24 167 181 0 0 # regular color 6 Cyan
|
||||
|
||||
color 9 179 179 179 0 0 # regular color 7 White
|
||||
|
||||
|
||||
|
||||
|
||||
# intensive colors
|
||||
|
||||
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
|
||||
|
||||
color 10 255 255 255 0 1 # intensive foreground color
|
||||
|
||||
color 11 0 0 0 1 0 # intensive background color
|
||||
|
||||
|
||||
|
||||
color 12 106 106 106 0 0 # intensive color 0
|
||||
|
||||
color 13 253 94 83 0 0 # intensive color 1
|
||||
|
||||
color 14 168 228 160 0 0 # intensive color 2
|
||||
|
||||
color 15 254 254 34 0 0 # intensive color 3
|
||||
|
||||
color 16 154 206 235 0 0 # intensive color 4
|
||||
|
||||
color 17 252 116 253 0 0 # intensive color 5
|
||||
|
||||
color 18 236 234 190 0 0 # intensive color 6
|
||||
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
# example scheme for konsole
|
||||
|
||||
# the title is to appear in the menu.
|
||||
|
||||
title Black on Light Color
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 0 0 0 0 0 # regular foreground color (Black)
|
||||
rcolor 1 30 255 1 0 # regular background color (Light Color)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
color 6 24 24 178 0 0 # regular color 4 Blue
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
color 9 178 178 178 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 0 0 0 0 1 # intensive foreground color
|
||||
color 11 255 255 221 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
@@ -0,0 +1,44 @@
|
||||
# example scheme for konsole
|
||||
|
||||
# the title is to appear in the menu.
|
||||
|
||||
title Marble
|
||||
|
||||
image tile Blkmarble.jpg
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 255 255 255 0 0 # regular foreground color (White)
|
||||
color 1 0 0 0 1 0 # regular background color (Black)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
color 6 24 24 178 0 0 # regular color 4 Blue
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
color 9 178 178 178 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 255 255 255 0 1 # intensive foreground color
|
||||
color 11 0 0 0 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
@@ -0,0 +1,47 @@
|
||||
# example scheme for konsole
|
||||
|
||||
# the title is to appear in the menu.
|
||||
|
||||
title Ugly 1
|
||||
|
||||
# add a wallpaper, if you like. Second word one of { tile,center,full }
|
||||
|
||||
image tile /opt/kde/share/wallpapers/dancy_pants.jpg
|
||||
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 0 0 0 0 0 # regular foreground color (Black)
|
||||
color 1 255 255 255 1 0 # regular background color (White)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 255 0 0 0 0 # regular color 1 Red
|
||||
color 4 0 255 0 0 0 # regular color 2 Green
|
||||
color 5 255 255 0 0 0 # regular color 3 Yellow
|
||||
color 6 0 0 255 0 0 # regular color 4 Blue
|
||||
color 7 255 0 255 0 0 # regular color 5 Magenta
|
||||
color 8 0 255 255 0 0 # regular color 6 Cyan
|
||||
color 9 255 255 255 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 0 0 0 0 1 # intensive foreground color
|
||||
color 11 255 255 255 1 1 # intensive background color
|
||||
|
||||
color 12 0 0 0 0 1 # intensive color 0
|
||||
color 13 255 0 0 0 1 # intensive color 1
|
||||
color 14 0 255 0 0 1 # intensive color 2
|
||||
color 15 255 255 0 0 1 # intensive color 3
|
||||
color 16 0 0 255 0 1 # intensive color 4
|
||||
color 17 255 0 255 0 1 # intensive color 5
|
||||
color 18 0 255 255 0 1 # intensive color 6
|
||||
color 19 255 255 255 0 1 # intensive color 7
|
||||
@@ -0,0 +1,42 @@
|
||||
# example scheme for konsole
|
||||
|
||||
# the title is to appear in the menu.
|
||||
|
||||
title Green on Black
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 24 240 24 0 0 # regular foreground color (Green)
|
||||
color 1 0 0 0 1 0 # regular background color (Black)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
color 6 24 24 178 0 0 # regular color 4 Blue
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
color 9 178 178 178 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 24 240 24 0 1 # intensive foreground color
|
||||
color 11 0 0 0 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
@@ -0,0 +1,49 @@
|
||||
# linux color schema for konsole
|
||||
|
||||
title Green Tint
|
||||
|
||||
transparency 0.3 0 150 0
|
||||
|
||||
# FIXME
|
||||
#
|
||||
# The flaw in this schema is that "blick" comes out on the
|
||||
# Linux console as intensive background, really.
|
||||
# Since this is not used in clients you'll hardly notice
|
||||
# it in practice.
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | red grn blu | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 178 178 178 0 0 # regular foreground color (White)
|
||||
color 1 0 0 0 1 0 # regular background color (Black)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
color 6 24 24 178 0 0 # regular color 4 Blue
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
color 9 178 178 178 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 255 255 255 0 0 # intensive foreground color
|
||||
color 11 104 104 104 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
@@ -0,0 +1,49 @@
|
||||
# linux color schema for konsole
|
||||
|
||||
title Green Tint with Transparent MC
|
||||
|
||||
transparency 0.3 0 150 0
|
||||
|
||||
# FIXME
|
||||
#
|
||||
# The flaw in this schema is that "blick" comes out on the
|
||||
# Linux console as intensive background, really.
|
||||
# Since this is not used in clients you'll hardly notice
|
||||
# it in practice.
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | red grn blu | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 178 178 178 0 0 # regular foreground color (White)
|
||||
color 1 0 0 0 1 0 # regular background color (Black)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
color 6 0 0 0 1 0 # regular color 4 Blue
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
color 9 178 178 178 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 255 255 255 0 0 # intensive foreground color
|
||||
color 11 104 104 104 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
@@ -0,0 +1,44 @@
|
||||
# example scheme for konsole
|
||||
|
||||
# the title is to appear in the menu.
|
||||
|
||||
title Paper
|
||||
|
||||
image tile Paper01.jpg
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 0 0 0 0 0 # regular foreground color (Black)
|
||||
color 1 255 255 255 1 0 # regular background color (White)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
color 6 24 24 178 0 0 # regular color 4 Blue
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
color 9 178 178 178 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 0 0 0 0 1 # intensive foreground color
|
||||
color 11 255 255 255 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
@@ -0,0 +1,47 @@
|
||||
# linux color schema for konsole
|
||||
|
||||
title Linux Colors
|
||||
|
||||
# FIXME
|
||||
#
|
||||
# The flaw in this schema is that "blick" comes out on the
|
||||
# Linux console as intensive background, really.
|
||||
# Since this is not used in clients you'll hardly notice
|
||||
# it in practice.
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | red grn blu | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 178 178 178 0 0 # regular foreground color (White)
|
||||
color 1 0 0 0 1 0 # regular background color (Black)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
color 6 24 24 178 0 0 # regular color 4 Blue
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
color 9 178 178 178 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 255 255 255 0 0 # intensive foreground color
|
||||
color 11 104 104 104 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
132
konsole-qml-plugin/assets/color-schemes/historic/README.Schema
Normal file
@@ -0,0 +1,132 @@
|
||||
[README.Schema]
|
||||
|
||||
The schemata offered in the Options/Schema menu are
|
||||
taken from from configurations files with a *.schema
|
||||
pattern either located in $KDEDIR/share/apps/konsole
|
||||
or ~/.kde/share/apps/konsole.
|
||||
|
||||
Schemata allow to configure the color set that konsole
|
||||
uses, together with some more information on rendition
|
||||
processing.
|
||||
|
||||
Syntax
|
||||
|
||||
File
|
||||
:: { [Line] ['#' Comment] '\n' }
|
||||
|
||||
Line
|
||||
:: "title" Title
|
||||
:: "image" Usage PathToPictureFile
|
||||
:: "transparency" Fade Red Green Blue
|
||||
:: "color" Slot Red Green Blue Transparent Bold
|
||||
:: "rcolor" Slot Saturation Value Transparent Bold
|
||||
:: "sysfg" Slot Transparent Bold
|
||||
:: "sysbg" Slot Transparent Bold
|
||||
|
||||
Meaning
|
||||
|
||||
- Title is the text to appear in the Option/Schema menu.
|
||||
It should be unique among all other schemata therefore.
|
||||
|
||||
- The "image" clause allows to place an image on the
|
||||
konsole's background.
|
||||
|
||||
- Usage can be either
|
||||
- "tile" - the image is tilewise replicated.
|
||||
- "center" - the image is centered.
|
||||
- "full" - the image is stretched to fit the window size.
|
||||
|
||||
- The Path of the picture can both be relative
|
||||
(to kde wallpapers) or absolute.
|
||||
|
||||
When a schema uses a background image (or transparency)
|
||||
one has to make at least one color slot transparent to
|
||||
achive any visible effect. Please read below about the
|
||||
"Transparent" field in color,sysbg,sysfg.
|
||||
|
||||
- The "transparency" clause picks and uses the background
|
||||
of the desktop as if it where an image together with
|
||||
a fade effect. This effect will fade the background
|
||||
to the specified color.
|
||||
|
||||
The "Fade" is a real value between 0 and 1, indicating
|
||||
the strength of the fade. A value of 0 will not change
|
||||
the image, a value of 1 will make it the fade color
|
||||
everywhere, and in between. This will make the "glas"
|
||||
of the window be of the color given in the clause and
|
||||
being more(1) or less(0) intransparent.
|
||||
|
||||
- The remaining clauses (color,sysbg,sysfg) are used
|
||||
to setup konsoles rendition system.
|
||||
|
||||
To this end, konsole offers 20 color slots.
|
||||
|
||||
Slot Meaning
|
||||
----- --------------------------
|
||||
0 regular foreground color
|
||||
1 regular background color
|
||||
2-9 regular bgr color 0-7
|
||||
10 intensive foreground color
|
||||
11 intensive background color
|
||||
12-19 intensive bgr color 0-7
|
||||
|
||||
The traditional meaning of the "bgr" color codes
|
||||
has a bitwise interpretation of an additive three
|
||||
primary color scheme inherited from early EGA
|
||||
color terminals.
|
||||
|
||||
Color Bits Colors
|
||||
----- ---- -------
|
||||
0 000 Black
|
||||
1 001 Red
|
||||
2 010 Green
|
||||
3 011 Yellow
|
||||
4 100 Blue
|
||||
5 101 Magenta
|
||||
6 110 Cyan
|
||||
7 111 White
|
||||
|
||||
One may or may not stick to this tradition.
|
||||
Konsole allows to assign colors freely to slots.
|
||||
|
||||
The slots fall apart into two groups, regular
|
||||
and intensive colors. The later are used when
|
||||
BOLD rendition is used by the client.
|
||||
|
||||
Each of the groups have a default fore- and
|
||||
background color and the said bgr colors.
|
||||
Normal terminal processing will simply use
|
||||
the default colors.
|
||||
|
||||
The color desired for a slot is indicated
|
||||
in the Red Green Blue fields of the color
|
||||
clause. Use the sysfg or the sysbg clause
|
||||
to indicate the default fore and background
|
||||
colors of the desktop.
|
||||
|
||||
To specify randomized color for a slot use
|
||||
the clause rcolor. The two parameters to it
|
||||
being Saturation - the amount of colour,
|
||||
and Value, the darkness of the colour.
|
||||
|
||||
To use transparency/images and to simulate
|
||||
the behavior of the xterm, one can supply
|
||||
two additional tags to each slot:
|
||||
- Transparent (0/1) meaning to show the
|
||||
background picture, if any.
|
||||
- Bold (0/1) to render characters bold.
|
||||
|
||||
|
||||
If you know about the escape codes, you might have
|
||||
noticed that intensive and bold rendition are sort
|
||||
of confused. This is inherited by the xterm which
|
||||
konsole is simulating.
|
||||
|
||||
One can use the colortest.sh script supplied
|
||||
with the konsole source distribution to test
|
||||
a schema.
|
||||
|
||||
The schema installed with konsole are more or
|
||||
less demonstrations and not really beauty,
|
||||
beside the Linux.schema, perhaps, which is
|
||||
made after the VGA colors.
|
||||
@@ -0,0 +1,44 @@
|
||||
# default scheme for konsole (only here for documentation purposes)
|
||||
|
||||
# the title is to appear in the menu.
|
||||
|
||||
title Konsole Defaults
|
||||
|
||||
# image tile /opt/kde/share/wallpapers/gray2.jpg
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 0 0 0 0 0 # regular foreground color (Black)
|
||||
color 1 255 255 255 1 0 # regular background color (White)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
color 6 24 24 178 0 0 # regular color 4 Blue
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
color 9 178 178 178 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 0 0 0 0 1 # intensive foreground color
|
||||
color 11 255 255 255 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
@@ -0,0 +1,49 @@
|
||||
# linux color schema for konsole
|
||||
|
||||
title Transparent Konsole
|
||||
|
||||
transparency 0.35 0 0 0
|
||||
|
||||
# FIXME
|
||||
#
|
||||
# The flaw in this schema is that "blick" comes out on the
|
||||
# Linux console as intensive background, really.
|
||||
# Since this is not used in clients you'll hardly notice
|
||||
# it in practice.
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | red grn blu | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 178 178 178 0 0 # regular foreground color (White)
|
||||
color 1 0 0 0 1 0 # regular background color (Black)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
color 6 24 24 178 0 0 # regular color 4 Blue
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
color 9 178 178 178 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 255 255 255 0 0 # intensive foreground color
|
||||
color 11 104 104 104 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
@@ -0,0 +1,51 @@
|
||||
# linux color schema for konsole
|
||||
|
||||
title Transparent for MC
|
||||
|
||||
transparency 0.35 0 0 0
|
||||
|
||||
# FIXME
|
||||
#
|
||||
# The flaw in this schema is that "blick" comes out on the
|
||||
# Linux console as intensive background, really.
|
||||
# Since this is not used in clients you'll hardly notice
|
||||
# it in practice.
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | red grn blu | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 178 178 178 0 0 # regular foreground color (White)
|
||||
color 1 0 0 0 1 0 # regular background color (Black)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
#color 6 24 24 178 0 0 # regular color 4 Blue
|
||||
color 6 0 0 0 1 0 # regular color 4 Blue
|
||||
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
color 9 178 178 178 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 255 255 255 0 0 # intensive foreground color
|
||||
color 11 104 104 104 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
@@ -0,0 +1,42 @@
|
||||
# linux color schema for konsole
|
||||
|
||||
title Transparent, Dark Background
|
||||
|
||||
transparency 0.75 0 0 0
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | red grn blu | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 255 255 255 0 0 # regular foreground color (White)
|
||||
color 1 0 0 0 1 0 # regular background color (Black)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
color 6 24 24 178 0 0 # regular color 4 Blue
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
color 9 178 178 178 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 255 255 255 0 0 # intensive foreground color
|
||||
color 11 104 104 104 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
@@ -0,0 +1,51 @@
|
||||
# linux color schema for konsole
|
||||
|
||||
title Transparent, Light Background
|
||||
|
||||
transparency 0.1 0 0 0
|
||||
|
||||
# This is a schema for very light backgrounds. It makes some
|
||||
# hacks about the colors to make Midnight Commander transparent
|
||||
# and with suitable colors.
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | red grn blu | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 50 50 50 0 0 # regular foreground color (DarkGray)
|
||||
color 1 200 200 200 1 0 # regular background color (White)
|
||||
|
||||
# color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 2 200 200 200 1 0 # regular background color (White)
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
#color 6 24 24 178 0 0 # regular color 4 Blue
|
||||
color 6 0 0 0 1 0 # regular color 4 Blue
|
||||
# Blue is transparent, to make MC transparent
|
||||
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
# color 9 178 178 178 0 0 # regular color 7 White
|
||||
color 9 50 50 50 0 0 # regular foreground color (DarkGray)
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 0 0 0 0 0 # intensive foreground color
|
||||
color 11 255 255 255 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
@@ -0,0 +1,46 @@
|
||||
# xterm color schema for konsole
|
||||
|
||||
# xterm colors can be configured (almost) like
|
||||
# konsole colors can. This is the uncustomized
|
||||
# xterm schema.
|
||||
# Please refere to your local xterm setup files
|
||||
# if this schema differs.
|
||||
|
||||
title XTerm Colors
|
||||
|
||||
# foreground colors -------------------------------
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | red grn blu | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 0 0 0 0 0 # regular foreground color (Black)
|
||||
color 1 255 255 255 1 0 # regular background color (White)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 205 0 0 0 0 # regular color 1 Red
|
||||
color 4 0 205 0 0 0 # regular color 2 Green
|
||||
color 5 205 205 0 0 0 # regular color 3 Yellow
|
||||
color 6 0 0 205 0 0 # regular color 4 Blue
|
||||
color 7 205 0 205 0 0 # regular color 5 Magenta
|
||||
color 8 0 205 205 0 0 # regular color 6 Cyan
|
||||
color 9 229 229 229 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors -------------------------------------------
|
||||
|
||||
# for some strange reason, intensive colors are bold, also.
|
||||
|
||||
color 10 77 77 77 0 1 # intensive foreground color
|
||||
color 11 255 255 255 1 1 # intensive background color
|
||||
|
||||
color 12 77 77 77 0 1 # intensive color 0
|
||||
color 13 255 0 0 0 1 # intensive color 1
|
||||
color 14 0 255 0 0 1 # intensive color 2
|
||||
color 15 255 255 0 0 1 # intensive color 3
|
||||
color 16 0 0 255 0 1 # intensive color 4
|
||||
color 17 255 0 255 0 1 # intensive color 5
|
||||
color 18 0 255 255 0 1 # intensive color 6
|
||||
color 19 255 255 255 0 1 # intensive color 7
|
||||
@@ -0,0 +1,44 @@
|
||||
# schema that uses system colors
|
||||
|
||||
# the title is to appear in the menu.
|
||||
|
||||
title System Colors
|
||||
|
||||
# image none
|
||||
|
||||
# foreground colors
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | | |
|
||||
# V V--color--V V V
|
||||
|
||||
sysfg 0 0 0 # regular foreground color (system)
|
||||
sysbg 1 1 0 # regular background color (system)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 178 24 24 0 0 # regular color 1 Red
|
||||
color 4 24 178 24 0 0 # regular color 2 Green
|
||||
color 5 178 104 24 0 0 # regular color 3 Yellow
|
||||
color 6 24 24 178 0 0 # regular color 4 Blue
|
||||
color 7 178 24 178 0 0 # regular color 5 Magenta
|
||||
color 8 24 178 178 0 0 # regular color 6 Cyan
|
||||
color 9 178 178 178 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors
|
||||
|
||||
# instead of changing the colors, we've flaged the text to become bold
|
||||
|
||||
color 10 0 0 0 0 1 # intensive foreground color
|
||||
color 11 255 255 255 1 0 # intensive background color
|
||||
|
||||
color 12 104 104 104 0 0 # intensive color 0
|
||||
color 13 255 84 84 0 0 # intensive color 1
|
||||
color 14 84 255 84 0 0 # intensive color 2
|
||||
color 15 255 255 84 0 0 # intensive color 3
|
||||
color 16 84 84 255 0 0 # intensive color 4
|
||||
color 17 255 84 255 0 0 # intensive color 5
|
||||
color 18 84 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
40
konsole-qml-plugin/assets/color-schemes/historic/vim.schema
Normal file
@@ -0,0 +1,40 @@
|
||||
# VIM-recommended color schema for konsole
|
||||
|
||||
# VIM (VI improved) in "help xiterm" recommends these colors for xterm.
|
||||
|
||||
title VIM Colors
|
||||
|
||||
# foreground colors -------------------------------
|
||||
|
||||
# note that the default background color is flagged
|
||||
# to become transparent when an image is present.
|
||||
|
||||
# slot transparent bold
|
||||
# | red grn blu | |
|
||||
# V V--color--V V V
|
||||
|
||||
color 0 0 0 0 0 0 # regular foreground color (Black)
|
||||
color 1 255 255 255 1 0 # regular background color (White)
|
||||
|
||||
color 2 0 0 0 0 0 # regular color 0 Black
|
||||
color 3 192 0 0 0 0 # regular color 1 Red
|
||||
color 4 0 128 0 0 0 # regular color 2 Green
|
||||
color 5 128 128 0 0 0 # regular color 3 Yellow
|
||||
color 6 0 0 192 0 0 # regular color 4 Blue
|
||||
color 7 192 0 192 0 0 # regular color 5 Magenta
|
||||
color 8 0 128 128 0 0 # regular color 6 Cyan
|
||||
color 9 192 192 192 0 0 # regular color 7 White
|
||||
|
||||
# intensive colors -------------------------------------------
|
||||
|
||||
color 10 77 77 77 0 1 # intensive foreground color
|
||||
color 11 255 255 255 1 1 # intensive background color
|
||||
|
||||
color 12 128 128 128 0 0 # intensive color 0
|
||||
color 13 255 96 96 0 0 # intensive color 1
|
||||
color 14 0 255 0 0 0 # intensive color 2
|
||||
color 15 255 255 0 0 0 # intensive color 3
|
||||
color 16 128 128 255 0 0 # intensive color 4
|
||||
color 17 255 64 255 0 0 # intensive color 5
|
||||
color 18 0 255 255 0 0 # intensive color 6
|
||||
color 19 255 255 255 0 0 # intensive color 7
|
||||
72
konsole-qml-plugin/assets/kb-layouts/README
Normal file
@@ -0,0 +1,72 @@
|
||||
[README.KeyTab]
|
||||
|
||||
The keytabs offered in the Options/Keyboard menu are
|
||||
taken from from configurations files with a *.keytab
|
||||
pattern either located in $KDEDIR/share/apps/konsole
|
||||
or ~/.kde/share/apps/konsole.
|
||||
|
||||
Keytabs allow to configure the behavior of konsole
|
||||
on keyboard events, especially for functions keys.
|
||||
Please have a look into the README.keyboard file, too.
|
||||
|
||||
The syntax is that each entry has the form :
|
||||
|
||||
"key" Keyname { ("+"|"-") Modename } ":" (String|Operation)
|
||||
|
||||
Keynames are those defined in <qnamespace.h> with the
|
||||
"Qt::Key_" prefix removed.
|
||||
|
||||
Mode names are:
|
||||
|
||||
- Shift : Shift Key pressed
|
||||
- Alt : Alt Key pressed
|
||||
- Control : Control Key pressed
|
||||
|
||||
( The VT100 emulation has modes that can affect the
|
||||
sequences emitted by certain keys. These modes are
|
||||
under control of the client program.
|
||||
|
||||
- Newline : effects Return and Enter key.
|
||||
- Application : effects Up and Down key.
|
||||
- Ansi : effects Up and Down key (This is for VT52, really).
|
||||
|
||||
Since sending a state to a program that has set the state
|
||||
itself is positivly wrong and obsolete design, better forget
|
||||
about this nasty detail. I may well remove this "feature"
|
||||
in a future clean up round. )
|
||||
|
||||
A "+" preceeding a Modename means the Key is pressed.
|
||||
A "-" preceeding a Modename means the Key is not pressed.
|
||||
If no mode is given it means don't care.
|
||||
|
||||
Note that the combination of Key and Modes (set/reset)
|
||||
has to be unique. This means, that
|
||||
|
||||
key A + Shift : "A"
|
||||
key A : "a"
|
||||
|
||||
will not accept the small letter "a" rule as expected,
|
||||
one has to add a "- Shift" to the last clause. Use
|
||||
the stdout/stderr dianostics of konsole when modifying
|
||||
keytabs to find problems like this.
|
||||
|
||||
Operations are
|
||||
|
||||
- scrollUpLine : scroll up one line in the history log
|
||||
- scrollUpPage : scroll up one page in the history log
|
||||
- scrollDownLine : scroll down one line in the history log
|
||||
- scrollDownPage : scroll down one page in the history log
|
||||
- emitClipboard : "paste" the current clipboard
|
||||
- emitSelection : "paste" the current selection
|
||||
|
||||
Strings have the syntax of C strings,
|
||||
one may use the following escapes:
|
||||
|
||||
- \E - escape
|
||||
- \\ - backslash
|
||||
- \" - double quote
|
||||
- \t - tab
|
||||
- \r - return
|
||||
- \n - newline
|
||||
- \b - backspace
|
||||
- \xHH - where HH are two hex digits
|
||||
169
konsole-qml-plugin/assets/kb-layouts/default.keytab
Normal file
@@ -0,0 +1,169 @@
|
||||
# [README.default.Keytab] Default Keyboard Table
|
||||
#
|
||||
# To customize your keyboard, copy this file to something
|
||||
# ending with .keytab and change it to meet you needs.
|
||||
# Please read the README.KeyTab and the README.keyboard
|
||||
# in this case.
|
||||
#
|
||||
# --------------------------------------------------------------
|
||||
|
||||
keyboard "Default (XFree 4)"
|
||||
|
||||
# --------------------------------------------------------------
|
||||
#
|
||||
# Note that this particular table is a "risc" version made to
|
||||
# ease customization without bothering with obsolete details.
|
||||
# See VT100.keytab for the more hairy stuff.
|
||||
#
|
||||
# --------------------------------------------------------------
|
||||
|
||||
# common keys
|
||||
|
||||
key Escape : "\E"
|
||||
|
||||
key Tab -Shift : "\t"
|
||||
key Tab +Shift+Ansi : "\E[Z"
|
||||
key Tab +Shift-Ansi : "\t"
|
||||
key Backtab +Ansi : "\E[Z"
|
||||
key Backtab -Ansi : "\t"
|
||||
|
||||
key Return-Shift-NewLine : "\r"
|
||||
key Return-Shift+NewLine : "\r\n"
|
||||
|
||||
key Return+Shift : "\EOM"
|
||||
|
||||
# Backspace and Delete codes are preserving CTRL-H.
|
||||
|
||||
key Backspace : "\x7f"
|
||||
|
||||
# Arrow keys in VT52 mode
|
||||
# shift up/down are reserved for scrolling.
|
||||
# shift left/right are reserved for switching between tabs (this is hardcoded).
|
||||
|
||||
key Up -Shift-Ansi : "\EA"
|
||||
key Down -Shift-Ansi : "\EB"
|
||||
key Right-Shift-Ansi : "\EC"
|
||||
key Left -Shift-Ansi : "\ED"
|
||||
|
||||
# Arrow keys in ANSI mode with Application - and Normal Cursor Mode)
|
||||
|
||||
key Up -Shift-AnyMod+Ansi+AppCuKeys : "\EOA"
|
||||
key Down -Shift-AnyMod+Ansi+AppCuKeys : "\EOB"
|
||||
key Right -Shift-AnyMod+Ansi+AppCuKeys : "\EOC"
|
||||
key Left -Shift-AnyMod+Ansi+AppCuKeys : "\EOD"
|
||||
|
||||
key Up -Shift-AnyMod+Ansi-AppCuKeys : "\E[A"
|
||||
key Down -Shift-AnyMod+Ansi-AppCuKeys : "\E[B"
|
||||
key Right -Shift-AnyMod+Ansi-AppCuKeys : "\E[C"
|
||||
key Left -Shift-AnyMod+Ansi-AppCuKeys : "\E[D"
|
||||
|
||||
key Up -Shift+AnyMod+Ansi : "\E[1;*A"
|
||||
key Down -Shift+AnyMod+Ansi : "\E[1;*B"
|
||||
key Right -Shift+AnyMod+Ansi : "\E[1;*C"
|
||||
key Left -Shift+AnyMod+Ansi : "\E[1;*D"
|
||||
|
||||
# Keypad keys with NumLock ON
|
||||
# (see "Numeric Keypad" section at http://www.nw.com/nw/WWW/products/wizcon/vt100.html )
|
||||
#
|
||||
# Not enabled for now because it breaks the keypad in Vim.
|
||||
#
|
||||
#key 0 +KeyPad+AppKeyPad : "\EOp"
|
||||
#key 1 +KeyPad+AppKeyPad : "\EOq"
|
||||
#key 2 +KeyPad+AppKeyPad : "\EOr"
|
||||
#key 3 +KeyPad+AppKeyPad : "\EOs"
|
||||
#key 4 +KeyPad+AppKeyPad : "\EOt"
|
||||
#key 5 +KeyPad+AppKeyPad : "\EOu"
|
||||
#key 6 +KeyPad+AppKeyPad : "\EOv"
|
||||
#key 7 +KeyPad+AppKeyPad : "\EOw"
|
||||
#key 8 +KeyPad+AppKeyPad : "\EOx"
|
||||
#key 9 +KeyPad+AppKeyPad : "\EOy"
|
||||
#key + +KeyPad+AppKeyPad : "\EOl"
|
||||
#key - +KeyPad+AppKeyPad : "\EOm"
|
||||
#key . +KeyPad+AppKeyPad : "\EOn"
|
||||
#key * +KeyPad+AppKeyPad : "\EOM"
|
||||
#key Enter +KeyPad+AppKeyPad : "\r"
|
||||
|
||||
# Keypad keys with NumLock Off
|
||||
key Up -Shift+Ansi+AppCuKeys+KeyPad : "\EOA"
|
||||
key Down -Shift+Ansi+AppCuKeys+KeyPad : "\EOB"
|
||||
key Right -Shift+Ansi+AppCuKeys+KeyPad : "\EOC"
|
||||
key Left -Shift+Ansi+AppCuKeys+KeyPad : "\EOD"
|
||||
|
||||
key Up -Shift+Ansi-AppCuKeys+KeyPad : "\E[A"
|
||||
key Down -Shift+Ansi-AppCuKeys+KeyPad : "\E[B"
|
||||
key Right -Shift+Ansi-AppCuKeys+KeyPad : "\E[C"
|
||||
key Left -Shift+Ansi-AppCuKeys+KeyPad : "\E[D"
|
||||
|
||||
key Home +AppCuKeys+KeyPad : "\EOH"
|
||||
key End +AppCuKeys+KeyPad : "\EOF"
|
||||
key Home -AppCuKeys+KeyPad : "\E[H"
|
||||
key End -AppCuKeys+KeyPad : "\E[F"
|
||||
|
||||
key Insert +KeyPad : "\E[2~"
|
||||
key Delete +KeyPad : "\E[3~"
|
||||
key Prior -Shift+KeyPad : "\E[5~"
|
||||
key Next -Shift+KeyPad : "\E[6~"
|
||||
|
||||
# other grey PC keys
|
||||
|
||||
key Enter+NewLine : "\r\n"
|
||||
key Enter-NewLine : "\r"
|
||||
|
||||
key Home -AnyMod-AppCuKeys : "\E[H"
|
||||
key End -AnyMod-AppCuKeys : "\E[F"
|
||||
key Home -AnyMod+AppCuKeys : "\EOH"
|
||||
key End -AnyMod+AppCuKeys : "\EOF"
|
||||
key Home +AnyMod : "\E[1;*H"
|
||||
key End +AnyMod : "\E[1;*F"
|
||||
|
||||
key Insert -AnyMod : "\E[2~"
|
||||
key Delete -AnyMod : "\E[3~"
|
||||
key Insert +AnyMod : "\E[2;*~"
|
||||
key Delete +AnyMod : "\E[3;*~"
|
||||
|
||||
key Prior -Shift-AnyMod : "\E[5~"
|
||||
key Next -Shift-AnyMod : "\E[6~"
|
||||
key Prior -Shift+AnyMod : "\E[5;*~"
|
||||
key Next -Shift+AnyMod : "\E[6;*~"
|
||||
|
||||
# Function keys
|
||||
key F1 -AnyMod : "\EOP"
|
||||
key F2 -AnyMod : "\EOQ"
|
||||
key F3 -AnyMod : "\EOR"
|
||||
key F4 -AnyMod : "\EOS"
|
||||
key F5 -AnyMod : "\E[15~"
|
||||
key F6 -AnyMod : "\E[17~"
|
||||
key F7 -AnyMod : "\E[18~"
|
||||
key F8 -AnyMod : "\E[19~"
|
||||
key F9 -AnyMod : "\E[20~"
|
||||
key F10 -AnyMod : "\E[21~"
|
||||
key F11 -AnyMod : "\E[23~"
|
||||
key F12 -AnyMod : "\E[24~"
|
||||
|
||||
key F1 +AnyMod : "\EO*P"
|
||||
key F2 +AnyMod : "\EO*Q"
|
||||
key F3 +AnyMod : "\EO*R"
|
||||
key F4 +AnyMod : "\EO*S"
|
||||
key F5 +AnyMod : "\E[15;*~"
|
||||
key F6 +AnyMod : "\E[17;*~"
|
||||
key F7 +AnyMod : "\E[18;*~"
|
||||
key F8 +AnyMod : "\E[19;*~"
|
||||
key F9 +AnyMod : "\E[20;*~"
|
||||
key F10 +AnyMod : "\E[21;*~"
|
||||
key F11 +AnyMod : "\E[23;*~"
|
||||
key F12 +AnyMod : "\E[24;*~"
|
||||
|
||||
# Work around dead keys
|
||||
|
||||
key Space +Control : "\x00"
|
||||
|
||||
# Some keys are used by konsole to cause operations.
|
||||
# The scroll* operations refer to the history buffer.
|
||||
|
||||
key Up +Shift-AppScreen : scrollLineUp
|
||||
key Prior +Shift-AppScreen : scrollPageUp
|
||||
key Down +Shift-AppScreen : scrollLineDown
|
||||
key Next +Shift-AppScreen : scrollPageDown
|
||||
|
||||
key ScrollLock : scrollLock
|
||||
|
||||
133
konsole-qml-plugin/assets/kb-layouts/historic/vt100.keytab
Normal file
@@ -0,0 +1,133 @@
|
||||
# [vt100.keytab] Konsole Keyboard Table (VT100 keys)
|
||||
#
|
||||
# --------------------------------------------------------------
|
||||
|
||||
keyboard "vt100 (historical)"
|
||||
|
||||
# --------------------------------------------------------------
|
||||
#
|
||||
# This configuration table allows to customize the
|
||||
# meaning of the keys.
|
||||
#
|
||||
# The syntax is that each entry has the form :
|
||||
#
|
||||
# "key" Keyname { ("+"|"-") Modename } ":" (String|Operation)
|
||||
#
|
||||
# Keynames are those defined in <qnamespace.h> with the
|
||||
# "Qt::Key_" removed. (We'd better insert the list here)
|
||||
#
|
||||
# Mode names are :
|
||||
#
|
||||
# - Shift
|
||||
# - Alt
|
||||
# - Control
|
||||
#
|
||||
# The VT100 emulation has two modes that can affect the
|
||||
# sequences emitted by certain keys. These modes are
|
||||
# under control of the client program.
|
||||
#
|
||||
# - Newline : effects Return and Enter key.
|
||||
# - Application : effects Up and Down key.
|
||||
#
|
||||
# - Ansi : effects Up and Down key (This is for VT52, really).
|
||||
#
|
||||
# Operations are
|
||||
#
|
||||
# - scrollUpLine
|
||||
# - scrollUpPage
|
||||
# - scrollDownLine
|
||||
# - scrollDownPage
|
||||
#
|
||||
# - emitSelection
|
||||
#
|
||||
# If the key is not found here, the text of the
|
||||
# key event as provided by QT is emitted, possibly
|
||||
# preceeded by ESC if the Alt key is pressed.
|
||||
#
|
||||
# --------------------------------------------------------------
|
||||
|
||||
key Escape : "\E"
|
||||
key Tab : "\t"
|
||||
|
||||
# VT100 can add an extra \n after return.
|
||||
# The NewLine mode is set by an escape sequence.
|
||||
|
||||
key Return-NewLine : "\r"
|
||||
key Return+NewLine : "\r\n"
|
||||
|
||||
# Some desperately try to save the ^H.
|
||||
|
||||
key Backspace : "\x7f"
|
||||
key Delete : "\E[3~"
|
||||
|
||||
# These codes are for the VT52 mode of VT100
|
||||
# The Ansi mode (i.e. VT100 mode) is set by
|
||||
# an escape sequence
|
||||
|
||||
key Up -Shift-Ansi : "\EA"
|
||||
key Down -Shift-Ansi : "\EB"
|
||||
key Right-Shift-Ansi : "\EC"
|
||||
key Left -Shift-Ansi : "\ED"
|
||||
|
||||
# VT100 emits a mode bit together
|
||||
# with the arrow keys.The AppCuKeys
|
||||
# mode is set by an escape sequence.
|
||||
|
||||
key Up -Shift+Ansi+AppCuKeys : "\EOA"
|
||||
key Down -Shift+Ansi+AppCuKeys : "\EOB"
|
||||
key Right-Shift+Ansi+AppCuKeys : "\EOC"
|
||||
key Left -Shift+Ansi+AppCuKeys : "\EOD"
|
||||
|
||||
key Up -Shift+Ansi-AppCuKeys : "\E[A"
|
||||
key Down -Shift+Ansi-AppCuKeys : "\E[B"
|
||||
key Right-Shift+Ansi-AppCuKeys : "\E[C"
|
||||
key Left -Shift+Ansi-AppCuKeys : "\E[D"
|
||||
|
||||
# function keys (FIXME: make pf1-pf4)
|
||||
|
||||
key F1 : "\E[11~"
|
||||
key F2 : "\E[12~"
|
||||
key F3 : "\E[13~"
|
||||
key F4 : "\E[14~"
|
||||
key F5 : "\E[15~"
|
||||
|
||||
key F6 : "\E[17~"
|
||||
key F7 : "\E[18~"
|
||||
key F8 : "\E[19~"
|
||||
key F9 : "\E[20~"
|
||||
key F10 : "\E[21~"
|
||||
key F11 : "\E[23~"
|
||||
key F12 : "\E[24~"
|
||||
|
||||
key Home : "\E[H"
|
||||
key End : "\E[F"
|
||||
|
||||
key Prior -Shift : "\E[5~"
|
||||
key Next -Shift : "\E[6~"
|
||||
key Insert-Shift : "\E[2~"
|
||||
|
||||
# Keypad-Enter. See comment on Return above.
|
||||
|
||||
key Enter+NewLine : "\r\n"
|
||||
key Enter-NewLine : "\r"
|
||||
|
||||
key Space +Control : "\x00"
|
||||
|
||||
# some of keys are used by konsole.
|
||||
|
||||
key Up +Shift : scrollLineUp
|
||||
key Prior +Shift : scrollPageUp
|
||||
key Down +Shift : scrollLineDown
|
||||
key Next +Shift : scrollPageDown
|
||||
|
||||
key ScrollLock : scrollLock
|
||||
|
||||
|
||||
#----------------------------------------------------------
|
||||
|
||||
# keypad characters as offered by Qt
|
||||
# cannot be recognized as such.
|
||||
|
||||
#----------------------------------------------------------
|
||||
|
||||
# Following other strings as emitted by konsole.
|
||||
71
konsole-qml-plugin/assets/kb-layouts/historic/x11r5.keytab
Normal file
@@ -0,0 +1,71 @@
|
||||
# [x11r5.Keytab] Keyboard Table for X11 R5
|
||||
|
||||
keyboard "XTerm (XFree 3.x.x)"
|
||||
|
||||
# --------------------------------------------------------------
|
||||
#
|
||||
# Note that this particular table is a "risc" version made to
|
||||
# ease customization without bothering with obsolete details.
|
||||
# See VT100.keytab for the more hairy stuff.
|
||||
#
|
||||
# --------------------------------------------------------------
|
||||
|
||||
# common keys
|
||||
|
||||
key Escape : "\E"
|
||||
key Tab : "\t"
|
||||
|
||||
key Return : "\r"
|
||||
|
||||
# Backspace and Delete codes are preserving CTRL-H.
|
||||
|
||||
key Backspace : "\x7f"
|
||||
|
||||
# cursor keys
|
||||
|
||||
key Up -Shift : "\EOA"
|
||||
key Down -Shift : "\EOB"
|
||||
key Right -Shift : "\EOC"
|
||||
key Left -Shift : "\EOD"
|
||||
|
||||
# other grey PC keys
|
||||
|
||||
key Enter : "\r"
|
||||
|
||||
key Home : "\E[1~"
|
||||
key Insert-Shift : "\E[2~"
|
||||
key Delete : "\E[3~"
|
||||
key End : "\E[4~"
|
||||
key Prior -Shift : "\E[5~"
|
||||
key Next -Shift : "\E[6~"
|
||||
|
||||
# function keys
|
||||
|
||||
key F1 : "\E[11~"
|
||||
key F2 : "\E[12~"
|
||||
key F3 : "\E[13~"
|
||||
key F4 : "\E[14~"
|
||||
key F5 : "\E[15~"
|
||||
key F6 : "\E[17~"
|
||||
key F7 : "\E[18~"
|
||||
key F8 : "\E[19~"
|
||||
key F9 : "\E[20~"
|
||||
key F10 : "\E[21~"
|
||||
key F11 : "\E[23~"
|
||||
key F12 : "\E[24~"
|
||||
|
||||
# Work around dead keys
|
||||
|
||||
key Space +Control : "\x00"
|
||||
|
||||
# Some keys are used by konsole to cause operations.
|
||||
# The scroll* operations refer to the history buffer.
|
||||
|
||||
key Up +Shift : scrollLineUp
|
||||
key Prior +Shift : scrollPageUp
|
||||
key Down +Shift : scrollLineDown
|
||||
key Next +Shift : scrollPageDown
|
||||
|
||||
key ScrollLock : scrollLock
|
||||
|
||||
# keypad characters are not offered differently by Qt.
|
||||