1 Commits

Author SHA1 Message Date
Filippo Scognamiglio
90546e49e8 Initial (already working) implementation of json profile import/export. 2014-10-11 18:43:50 +02:00
167 changed files with 26338 additions and 1938 deletions

3
.gitmodules vendored
View File

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

View File

@@ -4,14 +4,14 @@
cool-retro-term is a terminal emulator which mimics the look and feel of the old cathode tube screens.
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 OSX and requires Qt 5.2 or higher.
This terminal emulator requires Qt 5.2 or higher to run.
##Screenshots
![Image](<http://i.imgur.com/I6wq1cC.png>)
![Image](<http://i.imgur.com/12EqlpL.png>)
![Image](<http://i.imgur.com/Lx0acQz.jpg>)
![Image](<http://i.imgur.com/NUfvnlu.png>)
![Image](<http://i.imgur.com/4LpfLF8.png>)
![Image](<http://i.imgur.com/MMmM6Ht.png>)
##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:
@@ -22,19 +22,6 @@ Arch users can install this [package](https://aur.archlinux.org/packages/cool-re
yaourt -S aur/cool-retro-term-git
Gentoo users can install from a 3rd-party repository preferably via layman:
# USE="subversion git" emerge app-portage/layman
# wget --no-check-certificate https://www.gerczei.eu/files/gerczei.xml -O /etc/layman/overlays/gerczei.xml
# layman -f -a qt -a gerczei
# ACCEPT_KEYWORDS="~*" emerge x11-terms/cool-retro-term::gerczei
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) can use [this PPA](https://launchpad.net/~bugs-launchpad-net-falkensweb)
OSX users can grab the latest dmg from the release page: https://github.com/Swordfish90/cool-retro-term/releases
##Build instructions (Linux)
##Dependencies
@@ -95,7 +82,7 @@ Once you installed all dependencies (Qt is installed and in your path) you need
```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
@@ -109,21 +96,14 @@ qmake && make
##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:
```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
```
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
##Donations
I made this project in my spare time because I love what I'm doing. If you are enjoying it and you want to buy me a beer click [here](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=flscogna%40gmail%2ecom&lc=IT&item_name=Filippo%20Scognamiglio&currency_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted) .

50
app/FileIO.h Normal file
View 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

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -5,86 +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);
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")) {
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() << " --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 informations 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;
}
// 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"));
engine.rootContext()->setContextProperty("shellProgram", getNamedArgument(args, "--program"));
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("qrc:/main.qml"));
// Quit the application when the engine closes.
QObject::connect((QObject*) &engine, SIGNAL(quit()), (QObject*) &app, SLOT(quit()));
return app.exec();
}

View File

@@ -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"

View File

@@ -19,62 +19,67 @@
*******************************************************************************/
import QtQuick 2.2
import QtQuick.Controls 1.0
import "utils.js" as Utils
QtObject{
property string version: "1.0.0"
// STATIC CONSTANTS ////////////////////////////////////////////////////////
Item{
property string version: "0.9"
readonly property real minimumFontScaling: 0.25
readonly property real maximumFontScaling: 2.50
// GENERAL SETTINGS ///////////////////////////////////////////////////////
// GENERAL SETTINGS ///////////////////////////////////////////////////
property bool fullscreen: false
property bool showMenubar: true
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 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 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 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 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 bloomQuality: 0.5
property real burnInQuality: 0.5
property real bloom_quality: 1.0
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
@@ -82,19 +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)
property Loader fontManager: Loader{
states: [
State { when: rasterization == no_rasterization
PropertyChanges {target: fontManager; source: "Fonts.qml" } },
@@ -107,146 +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,
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],
fontIndex: fontIndexes[rasterization],
fontWidth: fontWidth
}
return settings;
return profile;
}
function composeProfileString() {
return stringify(composeProfileObject());
function composeProfileString(){
return JSON.stringify(composeProfileObject());
}
function loadSettings(){
@@ -259,8 +222,7 @@ QtObject{
loadSettingsString(settingsString);
loadProfileString(profileString);
if (verbose)
console.log("Loading settings: " + settingsString + profileString);
console.log("Loading settings: " + settingsString + profileString);
}
function storeSettings(){
@@ -270,65 +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
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;
handleFontChanged();
}
function storeCustomProfiles(){
@@ -345,86 +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}'
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}'
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}'
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}'
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}'
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}'
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}'
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}'
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}'
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;
@@ -433,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();
}
@@ -461,11 +419,4 @@ QtObject{
storeCustomProfiles();
//storage.dropSettings(); //DROPS THE SETTINGS!.. REMEMBER TO DISABLE ONCE ENABLED!!
}
// VARS ///////////////////////////////////////////////////////////////////
property Label _sampleLabel: Label {
text: "100%"
}
property real labelWidth: _sampleLabel.width
}

View File

@@ -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)

View File

@@ -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 + "%";
}
}

View File

@@ -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{

View File

@@ -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 predifined size.
// Used to improve alignment.
Item {
property alias text: textfield.text
width: appSettings.labelWidth
Label{
id: textfield
anchors { right: parent.right; verticalCenter: parent.verticalCenter }
}
}

View File

@@ -20,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
}
}
}

View File

@@ -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
}
}
}

View File

@@ -20,198 +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: "ENVY_CODE_R"
text: "HD: Envy Code R (Modern)"
source: "fonts/modern-envy-code-r/Envy Code R.ttf"
lineSpacing: 0.1
pixelSize: 30
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
}
}
}

View File

@@ -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();

View File

@@ -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,69 +90,57 @@ 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();
}
Component.onCompleted: {
appSettings.terminalFontChanged.connect(handleFontChange);
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 (!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;
@@ -148,64 +148,49 @@ Item{
forceActiveFocus();
}
}
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){
@@ -213,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)
@@ -224,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
@@ -242,72 +234,50 @@ 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
@@ -326,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
}
}

View File

@@ -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
}
}
}

View File

@@ -27,174 +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));
}
}
}
InsertNameDialog{
id: insertname
onNameSelected: shadersettings.addNewCustomProfile(name)
}
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;
}
}
}
}
// 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
}
}
}
}

View File

@@ -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
}
}
}

View File

@@ -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();
}
}
}
}
}
}

View File

@@ -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
}
}
}

View File

@@ -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")

View File

@@ -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,33 +99,27 @@ 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;
@@ -156,67 +131,46 @@ ShaderEffect {
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));
}" +
@@ -224,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);" +

View File

@@ -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 + "%";
}
}

View File

@@ -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() {

View File

@@ -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
}
}
}

View File

@@ -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
}

View File

@@ -1,16 +0,0 @@
Envy Code R (coding font) preview #7.2
======================================
Envy Code R is a fully-scalable monospaced font designed for programming and command prompts.
There are three variants including in the archive - Regular, Bold and Italic. A large number of additional symbols outside the ASCII range and provided which covers most of the Windows/ISO 1252 codepage, MacOS Roman and a number of other Central European pages.
This archive also contains a folder named 'Visual Studio Italics-as-bold' which contains the Regular and Italic fonts again with an alternate name of 'Envy Code R VS' and with the Italic variant set to identify itself as bold. This allows you to utilise italics within Visual Studio's syntax highlighter by choosing bold everywhere you want italics - great for comments or strings!
If you wish to use Envy Code R as a font for your Windows Command Prompt run the included .reg registry file and reboot, then choose Properties from the Command Prompt to set it.
Please send feedback to damien@envytech.co.uk and be sure to visit http://damieng.com/fonts/envy-code-r for updates and more information.
[)amien
Damien Guard, May 2008.
Copyright <20> 2006-2008 Envy Technologies Ltd. Free to use but redistribution prohibited.

View 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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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

View File

@@ -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.

View File

@@ -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"
}

View 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
}

View File

@@ -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"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 498 KiB

After

Width:  |  Height:  |  Size: 507 KiB

View 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
}

View 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);
}"
}

View File

@@ -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,151 +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: "
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: "
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
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 608 KiB

View File

@@ -33,18 +33,16 @@ ApplicationWindow{
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
}
//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("cool-retro-term")
title: qsTr("cool-retro-term")
Action {
id: showMenubarAction
@@ -52,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: Qt.platform.os === "osx" ? StandardKey.Copy : "Ctrl+Shift+C"
shortcut: "Ctrl+Shift+C"
onTriggered: terminal.copyClipboard()
}
Action{
id: pasteAction
text: qsTr("Paste")
shortcut: Qt.platform.os === "osx" ? StandardKey.Paste : "Ctrl+Shift+V"
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
@@ -132,19 +125,5 @@ ApplicationWindow{
id: aboutDialog
visible: false
}
Loader{
anchors.centerIn: parent
active: appSettings.showTerminalSize
sourceComponent: SizeOverlay{
z: 3
terminalSize: terminalContainer.terminalSize
}
}
Component.onCompleted: appSettings.handleFontChanged();
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();
}

View File

@@ -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/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-envy-code-r/Envy Code R.ttf</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>

View File

@@ -1,23 +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);
}

View File

@@ -2,7 +2,7 @@
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=Qt;System;Utility;TerminalEmulator;

View File

@@ -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
View 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

View File

@@ -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

View File

@@ -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

View 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

View 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

View 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

View 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

View 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

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View 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.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View 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

View 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

View 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

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