1
0
mirror of https://github.com/Swordfish90/cool-retro-term.git synced 2025-01-18 12:15:27 +00:00

Improve QML syntax and update license headers.

This commit is contained in:
Filippo Scognamiglio 2021-06-30 22:49:03 +02:00
parent 205a152350
commit 701cb540e5
29 changed files with 1119 additions and 942 deletions

View File

@ -1,3 +1,22 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
*
* cool-retro-term is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.1
@ -18,7 +37,10 @@ Window{
Text {
Layout.alignment: Qt.AlignHCenter
text: "cool-retro-term"
font {bold: true; pointSize: 18}
font {
bold: true
pointSize: 18
}
}
Loader {
id: mainContent
@ -41,7 +63,7 @@ Window{
}
}
]
Component.onCompleted: mainContent.state = "Default";
Component.onCompleted: mainContent.state = "Default"
}
Item {
Layout.fillWidth: true
@ -50,13 +72,14 @@ Window{
anchors.left: parent.left
text: qsTr("License")
onClicked: {
mainContent.state == "Default" ? mainContent.state = "License" : mainContent.state = "Default"
mainContent.state == "Default" ? mainContent.state
= "License" : mainContent.state = "Default"
}
}
Button {
anchors.right: parent.right
text: qsTr("Close")
onClicked: dialogwindow.close();
onClicked: dialogwindow.close()
}
}
}
@ -77,10 +100,10 @@ Window{
Text {
Layout.alignment: Qt.AlignCenter
horizontalAlignment: Text.AlignHCenter
text: appSettings.version + "\n" +
qsTr("Author: ") + "Filippo Scognamiglio\n" +
qsTr("Email: ") + "flscogna@gmail.com\n" +
qsTr("Source: ") + "https://github.com/Swordfish90/cool-retro-term\n"
text: appSettings.version + "\n" + qsTr(
"Author: ") + "Filippo Scognamiglio\n" + qsTr(
"Email: ") + "flscogna@gmail.com\n" + qsTr(
"Source: ") + "https://github.com/Swordfish90/cool-retro-term\n"
}
}
}
@ -92,21 +115,18 @@ Window{
TextArea {
readOnly: true
wrapMode: TextEdit.Wrap
text: "Copyright (c) 2013 Filippo Scognamiglio <flscogna@gmail.com>\n\n" +
"https://github.com/Swordfish90/cool-retro-term\n\n" +
"cool-retro-term is free software: you can redistribute it and/or modify " +
"it under the terms of the GNU General Public License as published by " +
"the Free Software Foundation, either version 3 of the License, or " +
"(at your option) any later version.\n\n" +
"This program is distributed in the hope that it will be useful, " +
"but WITHOUT ANY WARRANTY; without even the implied warranty of " +
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the " +
"GNU General Public License for more details.\n\n" +
"You should have received a copy of the GNU General Public License " +
"along with this program. If not, see <http://www.gnu.org/licenses/>."
text: "Copyright (c) 2013-2021 Filippo Scognamiglio <flscogna@gmail.com>\n\n"
+ "https://github.com/Swordfish90/cool-retro-term\n\n" +
"cool-retro-term is free software: you can redistribute it and/or modify "
+ "it under the terms of the GNU General Public License as published by "
+ "the Free Software Foundation, either version 3 of the License, or "
+ "(at your option) any later version.\n\n" +
"This program is distributed in the hope that it will be useful, "
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of "
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the "
+ "GNU General Public License for more details.\n\n" +
"You should have received a copy of the GNU General Public License "
+ "along with this program. If not, see <http://www.gnu.org/licenses/>."
}
}
}

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,7 +17,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
import QtQuick.Controls 2.0
@ -28,7 +27,6 @@ QtObject{
readonly property int profileVersion: 2
// STATIC CONSTANTS ////////////////////////////////////////////////////////
readonly property real screenCurvatureSize: 0.4
readonly property real minimumFontScaling: 0.25
readonly property real maximumFontScaling: 2.50
@ -37,7 +35,6 @@ QtObject{
readonly property real maxBurnInFadeTime: 1600
// GENERAL SETTINGS ///////////////////////////////////////////////////////
property int x: 100
property int y: 100
property int width: 1024
@ -61,10 +58,9 @@ QtObject{
property bool blinkingCursor: false
onWindowScalingChanged: handleFontChanged();
onWindowScalingChanged: handleFontChanged()
// PROFILE SETTINGS ///////////////////////////////////////////////////////
property real windowOpacity: 1.0
property real ambientLight: 0.2
property real contrast: 0.80
@ -75,9 +71,16 @@ QtObject{
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 saturatedColor: Utils.mix(Utils.strToColor("#FFFFFF"),
Utils.strToColor(_fontColor),
saturationColor * 0.5)
property color fontColor: Utils.mix(Utils.strToColor(saturatedColor),
Utils.strToColor(_backgroundColor),
0.7 + (contrast * 0.3))
property color backgroundColor: Utils.mix(Utils.strToColor(
_backgroundColor),
Utils.strToColor(saturatedColor),
0.7 + (contrast * 0.3))
property real staticNoise: 0.12
property real screenCurvature: 0.3
@ -105,7 +108,6 @@ QtObject{
property int rasterization: no_rasterization
// FONTS //////////////////////////////////////////////////////////////////
readonly property real baseFontScaling: 0.75
property real fontScaling: 1.0
property real totalFontScaling: baseFontScaling * fontScaling
@ -119,16 +121,31 @@ QtObject{
signal terminalFontChanged(string fontFamily, int pixelSize, int lineSpacing, real screenScaling, real fontWidth)
signal initializedSettings()
signal initializedSettings
property Loader fontManager: Loader {
states: [
State { when: rasterization == no_rasterization
PropertyChanges {target: fontManager; source: "Fonts.qml" } },
State { when: rasterization == scanline_rasterization
PropertyChanges {target: fontManager; source: "FontScanlines.qml" } },
State { when: rasterization == pixel_rasterization;
PropertyChanges {target: fontManager; source: "FontPixels.qml" } }
State {
when: rasterization == no_rasterization
PropertyChanges {
target: fontManager
source: "Fonts.qml"
}
},
State {
when: rasterization == scanline_rasterization
PropertyChanges {
target: fontManager
source: "FontScanlines.qml"
}
},
State {
when: rasterization == pixel_rasterization
PropertyChanges {
target: fontManager
source: "FontPixels.qml"
}
}
]
onLoaded: handleFontChanged()
@ -136,151 +153,158 @@ QtObject{
property FontLoader fontLoader: FontLoader {}
onTotalFontScalingChanged: handleFontChanged();
onFontWidthChanged: handleFontChanged();
onTotalFontScalingChanged: handleFontChanged()
onFontWidthChanged: handleFontChanged()
function getIndexByName(name) {
for (var i = 0; i < fontlist.count; i++) {
var requestedName = fontlist.get(i).name;
var requestedName = fontlist.get(i).name
if (name === requestedName)
return i;
return i
}
return 0; // If the font is not available default to 0.
return 0 // If the font is not available default to 0.
}
function incrementScaling() {
fontScaling = Math.min(fontScaling + 0.05, maximumFontScaling);
handleFontChanged();
fontScaling = Math.min(fontScaling + 0.05, maximumFontScaling)
handleFontChanged()
}
function decrementScaling() {
fontScaling = Math.max(fontScaling - 0.05, minimumFontScaling);
handleFontChanged();
fontScaling = Math.max(fontScaling - 0.05, minimumFontScaling)
handleFontChanged()
}
function handleFontChanged() {
if (!fontManager.item) return;
if (!fontManager.item)
return
var index = getIndexByName(fontNames[rasterization]);
if (index === undefined) return;
var index = getIndexByName(fontNames[rasterization])
if (index === undefined)
return
fontManager.item.selectedFontIndex = index;
fontManager.item.scaling = totalFontScaling;
fontManager.item.selectedFontIndex = index
fontManager.item.scaling = totalFontScaling
var fontSource = fontManager.item.source;
var pixelSize = fontManager.item.pixelSize;
var lineSpacing = fontManager.item.lineSpacing;
var screenScaling = fontManager.item.screenScaling;
var fontWidth = fontManager.item.defaultFontWidth * appSettings.fontWidth;
var fontFamily = fontManager.item.family;
var isSystemFont = fontManager.item.isSystemFont;
var fontSource = fontManager.item.source
var pixelSize = fontManager.item.pixelSize
var lineSpacing = fontManager.item.lineSpacing
var screenScaling = fontManager.item.screenScaling
var fontWidth = fontManager.item.defaultFontWidth * appSettings.fontWidth
var fontFamily = fontManager.item.family
var isSystemFont = fontManager.item.isSystemFont
lowResolutionFont = fontManager.item.lowResolutionFont;
lowResolutionFont = fontManager.item.lowResolutionFont
if (!isSystemFont) {
fontLoader.source = fontSource;
fontFamily = fontLoader.name;
fontLoader.source = fontSource
fontFamily = fontLoader.name
}
terminalFontChanged(fontFamily, pixelSize, lineSpacing, screenScaling, fontWidth);
terminalFontChanged(fontFamily, pixelSize, lineSpacing, screenScaling,
fontWidth)
}
property Storage storage: Storage {}
function stringify(obj) {
var replacer = function (key, val) {
return val.toFixed ? Number(val.toFixed(4)) : val;
return val.toFixed ? Number(val.toFixed(4)) : val
}
return JSON.stringify(obj, replacer, 2);
return JSON.stringify(obj, replacer, 2)
}
function composeSettingsString() {
var settings = {
fps: fps,
x: x,
y: y,
width: width,
height: height,
windowScaling: windowScaling,
showTerminalSize: showTerminalSize,
fontScaling: fontScaling,
fontNames: fontNames,
showMenubar: showMenubar,
bloomQuality: bloomQuality,
burnInQuality: burnInQuality,
useCustomCommand: useCustomCommand,
customCommand: customCommand,
useFastBurnIn: useFastBurnIn,
blinkingCursor: blinkingCursor
"fps": fps,
"x": x,
"y": y,
"width": width,
"height": height,
"windowScaling": windowScaling,
"showTerminalSize": showTerminalSize,
"fontScaling": fontScaling,
"fontNames": fontNames,
"showMenubar": showMenubar,
"bloomQuality": bloomQuality,
"burnInQuality": burnInQuality,
"useCustomCommand": useCustomCommand,
"customCommand": customCommand,
"useFastBurnIn": useFastBurnIn,
"blinkingCursor": blinkingCursor
}
return stringify(settings);
return stringify(settings)
}
function composeProfileObject() {
var settings = {
backgroundColor: _backgroundColor,
fontColor: _fontColor,
flickering: flickering,
horizontalSync: horizontalSync,
staticNoise: staticNoise,
chromaColor: chromaColor,
saturationColor: saturationColor,
screenCurvature: screenCurvature,
glowingLine: glowingLine,
burnIn: burnIn,
bloom: bloom,
rasterization: rasterization,
jitter: jitter,
rbgShift: rbgShift,
brightness: brightness,
contrast: contrast,
ambientLight: ambientLight,
windowOpacity: windowOpacity,
fontName: fontNames[rasterization],
fontWidth: fontWidth,
margin: _margin
"backgroundColor": _backgroundColor,
"fontColor": _fontColor,
"flickering": flickering,
"horizontalSync": horizontalSync,
"staticNoise": staticNoise,
"chromaColor": chromaColor,
"saturationColor": saturationColor,
"screenCurvature": screenCurvature,
"glowingLine": glowingLine,
"burnIn": burnIn,
"bloom": bloom,
"rasterization": rasterization,
"jitter": jitter,
"rbgShift": rbgShift,
"brightness": brightness,
"contrast": contrast,
"ambientLight": ambientLight,
"windowOpacity": windowOpacity,
"fontName": fontNames[rasterization],
"fontWidth": fontWidth,
"margin": _margin
}
return settings;
return settings
}
function composeProfileString() {
return stringify(composeProfileObject());
return stringify(composeProfileObject())
}
function loadSettings() {
var settingsString = storage.getSetting("_CURRENT_SETTINGS");
var profileString = storage.getSetting("_CURRENT_PROFILE");
var settingsString = storage.getSetting("_CURRENT_SETTINGS")
var profileString = storage.getSetting("_CURRENT_PROFILE")
if(!settingsString) return;
if(!profileString) return;
if (!settingsString)
return
if (!profileString)
return
loadSettingsString(settingsString);
loadProfileString(profileString);
loadSettingsString(settingsString)
loadProfileString(profileString)
if (verbose)
console.log("Loading settings: " + settingsString + profileString);
console.log("Loading settings: " + settingsString + profileString)
}
function storeSettings() {
var settingsString = composeSettingsString();
var profileString = composeProfileString();
var settingsString = composeSettingsString()
var profileString = composeProfileString()
storage.setSetting("_CURRENT_SETTINGS", settingsString);
storage.setSetting("_CURRENT_PROFILE", profileString);
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);
var settings = JSON.parse(settingsString)
showTerminalSize = settings.showTerminalSize !== undefined ? settings.showTerminalSize : showTerminalSize
showTerminalSize = settings.showTerminalSize
!== undefined ? settings.showTerminalSize : showTerminalSize
fps = settings.fps !== undefined ? settings.fps : fps
windowScaling = settings.windowScaling !== undefined ? settings.windowScaling : windowScaling
windowScaling = settings.windowScaling
!== undefined ? settings.windowScaling : windowScaling
x = settings.x !== undefined ? settings.x : x
y = settings.y !== undefined ? settings.y : y
@ -290,99 +314,119 @@ QtObject{
fontNames = settings.fontNames !== undefined ? settings.fontNames : fontNames
fontScaling = settings.fontScaling !== undefined ? settings.fontScaling : fontScaling
showMenubar = settings.showMenubar !== undefined ? settings.showMenubar : showMenubar;
showMenubar = settings.showMenubar !== undefined ? settings.showMenubar : showMenubar
bloomQuality = settings.bloomQuality !== undefined ? settings.bloomQuality : bloomQuality;
burnInQuality = settings.burnInQuality !== undefined ? settings.burnInQuality : burnInQuality;
bloomQuality = settings.bloomQuality !== undefined ? settings.bloomQuality : bloomQuality
burnInQuality = settings.burnInQuality
!== undefined ? settings.burnInQuality : burnInQuality
useCustomCommand = settings.useCustomCommand !== undefined ? settings.useCustomCommand : useCustomCommand
customCommand = settings.customCommand !== undefined ? settings.customCommand : customCommand
useCustomCommand = settings.useCustomCommand
!== undefined ? settings.useCustomCommand : useCustomCommand
customCommand = settings.customCommand
!== undefined ? settings.customCommand : customCommand
useFastBurnIn = settings.useFastBurnIn !== undefined ? settings.useFastBurnIn : useFastBurnIn;
useFastBurnIn = settings.useFastBurnIn
!== undefined ? settings.useFastBurnIn : useFastBurnIn
blinkingCursor = settings.blinkingCursor !== undefined ? settings.blinkingCursor : blinkingCursor
blinkingCursor = settings.blinkingCursor
!== undefined ? settings.blinkingCursor : blinkingCursor
}
function loadProfileString(profileString) {
var settings = JSON.parse(profileString);
var settings = JSON.parse(profileString)
_backgroundColor = settings.backgroundColor !== undefined ? settings.backgroundColor : _backgroundColor;
_fontColor = settings.fontColor !== undefined ? settings.fontColor : _fontColor;
_backgroundColor = settings.backgroundColor
!== undefined ? settings.backgroundColor : _backgroundColor
_fontColor = settings.fontColor !== undefined ? settings.fontColor : _fontColor
horizontalSync = settings.horizontalSync !== undefined ? settings.horizontalSync : horizontalSync
flickering = settings.flickering !== undefined ? settings.flickering : flickering;
staticNoise = settings.staticNoise !== undefined ? settings.staticNoise : staticNoise;
chromaColor = settings.chromaColor !== undefined ? settings.chromaColor : chromaColor;
saturationColor = settings.saturationColor !== undefined ? settings.saturationColor : saturationColor;
screenCurvature = settings.screenCurvature !== undefined ? settings.screenCurvature : screenCurvature;
glowingLine = settings.glowingLine !== undefined ? settings.glowingLine : glowingLine;
horizontalSync = settings.horizontalSync
!== undefined ? settings.horizontalSync : horizontalSync
flickering = settings.flickering !== undefined ? settings.flickering : flickering
staticNoise = settings.staticNoise !== undefined ? settings.staticNoise : staticNoise
chromaColor = settings.chromaColor !== undefined ? settings.chromaColor : chromaColor
saturationColor = settings.saturationColor
!== undefined ? settings.saturationColor : saturationColor
screenCurvature = settings.screenCurvature
!== undefined ? settings.screenCurvature : screenCurvature
glowingLine = settings.glowingLine !== undefined ? settings.glowingLine : glowingLine
burnIn = settings.burnIn !== undefined ? settings.burnIn : burnIn
bloom = settings.bloom !== undefined ? settings.bloom : bloom
rasterization = settings.rasterization !== undefined ? settings.rasterization : rasterization;
rasterization = settings.rasterization
!== undefined ? settings.rasterization : rasterization
jitter = settings.jitter !== undefined ? settings.jitter : jitter;
jitter = settings.jitter !== undefined ? settings.jitter : jitter
rbgShift = settings.rbgShift !== undefined ? settings.rbgShift : rbgShift;
rbgShift = settings.rbgShift !== undefined ? settings.rbgShift : rbgShift
ambientLight = settings.ambientLight !== undefined ? settings.ambientLight : ambientLight;
contrast = settings.contrast !== undefined ? settings.contrast : contrast;
brightness = settings.brightness !== undefined ? settings.brightness : brightness;
windowOpacity = settings.windowOpacity !== undefined ? settings.windowOpacity : windowOpacity;
ambientLight = settings.ambientLight !== undefined ? settings.ambientLight : ambientLight
contrast = settings.contrast !== undefined ? settings.contrast : contrast
brightness = settings.brightness !== undefined ? settings.brightness : brightness
windowOpacity = settings.windowOpacity
!== undefined ? settings.windowOpacity : windowOpacity
fontNames[rasterization] = settings.fontName !== undefined ? settings.fontName : fontNames[rasterization];
fontWidth = settings.fontWidth !== undefined ? settings.fontWidth : fontWidth;
fontNames[rasterization] = settings.fontName
!== undefined ? settings.fontName : fontNames[rasterization]
fontWidth = settings.fontWidth !== undefined ? settings.fontWidth : fontWidth
_margin = settings.margin !== undefined ? settings.margin : _margin;
_margin = settings.margin !== undefined ? settings.margin : _margin
handleFontChanged();
handleFontChanged()
}
function storeCustomProfiles() {
storage.setSetting("_CUSTOM_PROFILES", composeCustomProfilesString());
storage.setSetting("_CUSTOM_PROFILES", composeCustomProfilesString())
}
function loadCustomProfiles() {
var customProfileString = storage.getSetting("_CUSTOM_PROFILES");
if(customProfileString === undefined) customProfileString = "[]";
loadCustomProfilesString(customProfileString);
var customProfileString = storage.getSetting("_CUSTOM_PROFILES")
if (customProfileString === undefined)
customProfileString = "[]"
loadCustomProfilesString(customProfileString)
}
function loadCustomProfilesString(customProfilesString) {
var customProfiles = JSON.parse(customProfilesString);
var customProfiles = JSON.parse(customProfilesString)
for (var i = 0; i < customProfiles.length; i++) {
var profile = customProfiles[i];
var profile = customProfiles[i]
if (verbose)
console.log("Loading custom profile: " + stringify(profile));
console.log("Loading custom profile: " + stringify(profile))
profilesList.append(profile);
profilesList.append(profile)
}
}
function composeCustomProfilesString() {
var customProfiles = []
for (var i = 0; i < profilesList.count; i++) {
var profile = profilesList.get(i);
if(profile.builtin) continue;
customProfiles.push({text: profile.text, obj_string: profile.obj_string, builtin: false})
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 stringify(customProfiles)
}
function loadProfile(index) {
var profile = profilesList.get(index);
loadProfileString(profile.obj_string);
var profile = profilesList.get(index)
loadProfileString(profile.obj_string)
}
function appendCustomProfile(name, profileString) {
profilesList.append({text: name, obj_string: profileString, builtin: false});
profilesList.append({
"text": name,
"obj_string": profileString,
"builtin": false
})
}
// PROFILES ///////////////////////////////////////////////////////////////
property ListModel profilesList: ListModel {
ListElement {
text: "Default Amber"
@ -413,8 +457,7 @@ QtObject{
}
ListElement {
text: "Monochrome Green"
obj_string: '
{
obj_string: '{
"ambientLight": 0.2,
"backgroundColor": "#000000",
"bloom": 0.5538,
@ -441,8 +484,7 @@ QtObject{
}
ListElement {
text: "Green Scanlines"
obj_string: '
{
obj_string: '{
"ambientLight": 0,
"backgroundColor": "#000000",
"bloom": 0.6,
@ -469,8 +511,7 @@ QtObject{
}
ListElement {
text: "Default Pixelated"
obj_string: '
{
obj_string: '{
"ambientLight": 0,
"backgroundColor": "#000000",
"bloom": 0.4045,
@ -497,8 +538,7 @@ QtObject{
}
ListElement {
text: "Apple ]["
obj_string:
'{
obj_string: '{
"ambientLight": 0.3038,
"backgroundColor": "#000000",
"bloom": 0.5,
@ -525,8 +565,7 @@ QtObject{
}
ListElement {
text: "Vintage"
obj_string: '
{
obj_string: '{
"ambientLight": 0.5,
"backgroundColor": "#000000",
"bloom": 0.4983,
@ -553,8 +592,7 @@ QtObject{
}
ListElement {
text: "IBM Dos"
obj_string:
'{
obj_string: '{
"ambientLight": 0.151,
"backgroundColor": "#000000",
"bloom": 0.2969,
@ -581,8 +619,7 @@ QtObject{
}
ListElement {
text: "IBM 3278"
obj_string:
'{
obj_string: '{
"ambientLight": 0.1,
"backgroundColor": "#000000",
"bloom": 0.2969,
@ -609,8 +646,7 @@ QtObject{
}
ListElement {
text: "Futuristic"
obj_string:
'{
obj_string: '{
"ambientLight": 0,
"backgroundColor": "#000000",
"bloom": 0.5017,
@ -640,51 +676,51 @@ QtObject{
function getProfileIndexByName(name) {
for (var i = 0; i < profilesList.count; i++) {
if (profilesList.get(i).text === name)
return i;
return i
}
return -1;
return -1
}
Component.onCompleted: {
// Manage the arguments from the QML side.
var args = Qt.application.arguments;
var args = Qt.application.arguments
if (args.indexOf("--verbose") !== -1) {
verbose = true;
verbose = true
}
if (args.indexOf("--default-settings") === -1) {
loadSettings();
loadSettings()
}
loadCustomProfiles();
loadCustomProfiles()
var profileArgPosition = args.indexOf("--profile");
var profileArgPosition = args.indexOf("--profile")
if (profileArgPosition !== -1) {
var profileIndex = getProfileIndexByName(args[profileArgPosition + 1]);
var profileIndex = getProfileIndexByName(
args[profileArgPosition + 1])
if (profileIndex !== -1)
loadProfile(profileIndex);
loadProfile(profileIndex)
else
console.log("Warning: selected profile is not valid; ignoring it");
console.log("Warning: selected profile is not valid; ignoring it")
}
if (args.indexOf("--fullscreen") !== -1) {
fullscreen = true;
showMenubar = false;
fullscreen = true
showMenubar = false
}
if (args.indexOf("-T") !== -1) {
wintitle = args[args.indexOf("-T") + 1]
}
initializedSettings();
initializedSettings()
}
Component.onDestruction: {
storeSettings();
storeCustomProfiles();
storeSettings()
storeCustomProfiles()
// storage.dropSettings(); //DROPS THE SETTINGS!.. REMEMBER TO DISABLE ONCE ENABLED!!
}
// VARS ///////////////////////////////////////////////////////////////////
property Label _sampleLabel: Label {
text: "100%"
}

View File

@ -1,3 +1,22 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
*
* cool-retro-term is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.0
import "utils.js" as Utils

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,7 +17,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.1
@ -32,15 +31,15 @@ RowLayout {
property alias max_value: slider.to
property alias stepSize: slider.stepSize
signal newValue(real newValue);
signal newValue(real newValue)
id: setting_component
Layout.fillWidth: true
onValueChanged: {
check.checked = !(value == 0);
check.checked = !(value == 0)
if (check.checked)
slider.value = value;
slider.value = value
}
CheckBox {
@ -48,13 +47,13 @@ RowLayout {
implicitWidth: 160
onClicked: {
if (!checked) {
checked = false;
slider.enabled = false;
newValue(0);
checked = false
slider.enabled = false
newValue(0)
} else {
checked = true;
newValue(slider.value);
slider.enabled = true;
checked = true
newValue(slider.value)
slider.enabled = true
}
}
}
@ -63,10 +62,11 @@ RowLayout {
stepSize: parent.stepSize
Layout.fillWidth: true
onValueChanged: {
newValue(value);
newValue(value)
}
}
SizedLabel {
text: Math.round(((value - min_value) / (max_value - min_value)) * 100) + "%"
text: Math.round(
((value - min_value) / (max_value - min_value)) * 100) + "%"
}
}

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,7 +17,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
import QtQuick.Dialogs 1.1
@ -35,8 +34,10 @@ 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)
onColorChanged: if (Qt.platform.os !== "osx")
colorSelected(color)
onAccepted: if (Qt.platform.os === "osx")
colorSelected(color)
}
Rectangle {
anchors.fill: parent
@ -58,6 +59,6 @@ Item {
}
MouseArea {
anchors.fill: parent
onClicked: colorDialog.visible = true;
onClicked: colorDialog.visible = true
}
}

View File

@ -1,5 +1,7 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,15 +19,12 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
// This component is simply a label with a predefined size.
// Used to improve alignment.
Label {
id: textfield
Layout.minimumWidth: appSettings.labelWidth

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,7 +17,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
QtObject {

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,7 +17,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
QtObject {

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,7 +17,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
QtObject {
@ -27,17 +26,11 @@ QtObject{
property var _font: fontlist.get(selectedFontIndex)
property bool lowResolutionFont: _font.lowResolutionFont
property int pixelSize: lowResolutionFont
? _font.pixelSize
: _font.pixelSize * scaling
property int pixelSize: lowResolutionFont ? _font.pixelSize : _font.pixelSize * scaling
property int lineSpacing: lowResolutionFont
? _font.lineSpacing
: pixelSize * _font.lineSpacing
property int lineSpacing: lowResolutionFont ? _font.lineSpacing : pixelSize * _font.lineSpacing
property real screenScaling: lowResolutionFont
? _font.baseScaling * scaling
: 1.0
property real screenScaling: lowResolutionFont ? _font.baseScaling * scaling : 1.0
property real defaultFontWidth: fontlist.get(selectedFontIndex).fontWidth
@ -52,7 +45,6 @@ QtObject{
// High resolution fonts are instead drawn on a texture which has the
// size of the screen, and the scaling directly controls their pixels size.
// Those are slower to render but are not pixelated.
property ListModel fontlist: ListModel {
ListElement {
name: "TERMINUS_SCALED"
@ -234,7 +226,7 @@ QtObject{
Component.onCompleted: addSystemFonts()
function addSystemFonts() {
var families = monospaceSystemFonts;
var families = monospaceSystemFonts
for (var i = 0; i < families.length; i++) {
if (verbose) {
console.log("Adding system font: ", families[i])
@ -245,16 +237,16 @@ QtObject{
function convertToListElement(family) {
return {
name: "System: " + family,
text: qsTr("System: ") + family,
source: "",
lineSpacing: 0.1,
pixelSize: 30,
fontWidth: 1.0,
baseScaling: 1.0,
lowResolutionFont: false,
isSystemFont: true,
family: family
"name": "System: " + family,
"text": qsTr("System: ") + family,
"source": "",
"lineSpacing": 0.1,
"pixelSize": 30,
"fontWidth": 1.0,
"baseScaling": 1.0,
"lowResolutionFont": false,
"isSystemFont": true,
"family": family
}
}
}

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,7 +17,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
import QtQuick.Window 2.0
import QtQuick.Controls 2.0
@ -40,23 +39,25 @@ Window{
visible: false
function showError(message) {
text = message;
open();
text = message
open()
}
}
function validateName(name) {
var profile_list = appSettings.profilesList;
var profile_list = appSettings.profilesList
if (name === "")
return 1;
return 0;
return 1
return 0
}
ColumnLayout {
anchors.margins: 10
anchors.fill: parent
RowLayout {
Label{text: qsTr("Name")}
Label {
text: qsTr("Name")
}
TextField {
id: namefield
Layout.fillWidth: true
@ -71,14 +72,15 @@ Window{
text: qsTr("OK")
onClicked: clickAction()
function clickAction() {
var name = namefield.text;
var name = namefield.text
switch (validateName(name)) {
case 1:
errorDialog.showError(qsTr("The name you inserted is empty. Please choose a different one."));
break;
errorDialog.showError(
qsTr("The name you inserted is empty. Please choose a different one."))
break
default:
nameSelected(name);
close();
nameSelected(name)
close()
}
}
}

View File

@ -1,3 +1,22 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
*
* cool-retro-term is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.0
import "utils.js" as Utils

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,7 +17,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.1
@ -53,9 +52,10 @@ ColumnLayout{
// Save text even if user forgets to press enter or unfocus
function saveSetting() {
appSettings.customCommand = text;
appSettings.customCommand = text
}
Component.onCompleted: settings_window.closing.connect(saveSetting)
Component.onCompleted: settings_window.closing.connect(
saveSetting)
}
}
}
@ -67,74 +67,93 @@ ColumnLayout{
anchors.fill: parent
columns: 4
Label{text: qsTr("Effects FPS")}
Label {
text: qsTr("Effects FPS")
}
Slider {
Layout.fillWidth: true
Layout.columnSpan: 2
id: fpsSlider
onValueChanged: {
if (enabled) {
appSettings.fps = value !== 60 ? value + 1 : 0;
appSettings.fps = value !== 60 ? value + 1 : 0
}
}
stepSize: 1
enabled: false
Component.onCompleted: {
from = 0;
to = 60;
value = appSettings.fps !== 0 ? appSettings.fps - 1 : 60;
enabled = true;
from = 0
to = 60
value = appSettings.fps !== 0 ? appSettings.fps - 1 : 60
enabled = true
}
}
Label{text: appSettings.fps !== 0 ? appSettings.fps : qsTr("Max")}
Label{text: qsTr("Texture Quality")}
Label {
text: appSettings.fps !== 0 ? appSettings.fps : qsTr("Max")
}
Label {
text: qsTr("Texture Quality")
}
Slider {
id: txtslider
Layout.fillWidth: true
Layout.columnSpan: 2
onValueChanged: if (enabled) appSettings.windowScaling = value;
onValueChanged: if (enabled)
appSettings.windowScaling = value
stepSize: 0.05
enabled: false
Component.onCompleted: {
from = 0.25 //Without this value gets set to 0.5
value = appSettings.windowScaling;
enabled = true;
value = appSettings.windowScaling
enabled = true
}
}
Label{text: Math.round(txtslider.value * 100) + "%"}
Label {
text: Math.round(txtslider.value * 100) + "%"
}
Label{text: qsTr("Bloom Quality")}
Label {
text: qsTr("Bloom Quality")
}
Slider {
Layout.fillWidth: true
Layout.columnSpan: 2
id: bloomSlider
onValueChanged: if (enabled) appSettings.bloomQuality = value;
onValueChanged: if (enabled)
appSettings.bloomQuality = value
stepSize: 0.05
enabled: false
Component.onCompleted: {
from = 0.25
value = appSettings.bloomQuality;
enabled = true;
value = appSettings.bloomQuality
enabled = true
}
}
Label{text: Math.round(bloomSlider.value * 100) + "%"}
Label {
text: Math.round(bloomSlider.value * 100) + "%"
}
Label{text: qsTr("BurnIn Quality")}
Label {
text: qsTr("BurnIn Quality")
}
Slider {
Layout.fillWidth: true
id: burnInSlider
Layout.columnSpan: 2
onValueChanged: if (enabled) appSettings.burnInQuality = value;
onValueChanged: if (enabled)
appSettings.burnInQuality = value
stepSize: 0.05
enabled: false
Component.onCompleted: {
from = 0.25
value = appSettings.burnInQuality;
enabled = true;
value = appSettings.burnInQuality
enabled = true
}
}
Label{text: Math.round(burnInSlider.value * 100) + "%"}
Label {
text: Math.round(burnInSlider.value * 100) + "%"
}
CheckBox {
Layout.columnSpan: 2
text: qsTr("Burnin optimization (Might display timing artifacts)")

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,7 +17,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.1
@ -54,34 +53,34 @@ ColumnLayout{
}
CheckableSlider {
name: qsTr("Glow Line")
onNewValue: appSettings.glowingLine = newValue;
onNewValue: appSettings.glowingLine = newValue
value: appSettings.glowingLine
}
CheckableSlider {
name: qsTr("Screen Curvature")
onNewValue: appSettings.screenCurvature = newValue;
value: appSettings.screenCurvature;
onNewValue: appSettings.screenCurvature = newValue
value: appSettings.screenCurvature
}
CheckableSlider {
name: qsTr("Ambient Light")
onNewValue: appSettings.ambientLight = newValue;
onNewValue: appSettings.ambientLight = newValue
value: appSettings.ambientLight
enabled: appSettings.framesIndex !== 0
}
CheckableSlider {
name: qsTr("Flickering")
onNewValue: appSettings.flickering = newValue;
value: appSettings.flickering;
onNewValue: appSettings.flickering = newValue
value: appSettings.flickering
}
CheckableSlider {
name: qsTr("Horizontal Sync")
onNewValue: appSettings.horizontalSync = newValue;
value: appSettings.horizontalSync;
onNewValue: appSettings.horizontalSync = newValue
value: appSettings.horizontalSync
}
CheckableSlider {
name: qsTr("RGB Shift")
onNewValue: appSettings.rbgShift = newValue;
value: appSettings.rbgShift;
onNewValue: appSettings.rbgShift = newValue
value: appSettings.rbgShift
}
}
}

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,7 +17,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.1
@ -56,7 +55,7 @@ ColumnLayout{
Layout.fillWidth: true
text: qsTr("Save")
onClicked: {
insertname.profileName = "";
insertname.profileName = ""
insertname.show()
}
}
@ -66,9 +65,9 @@ ColumnLayout{
enabled: currentIndex >= 0
text: qsTr("Load")
onClicked: {
var index = currentIndex;
var index = currentIndex
if (index >= 0)
appSettings.loadProfile(index);
appSettings.loadProfile(index)
}
}
Button {
@ -76,14 +75,15 @@ ColumnLayout{
text: qsTr("Remove")
property alias currentIndex: profilesView.currentIndex
enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin
enabled: currentIndex >= 0 && !appSettings.profilesList.get(
currentIndex).builtin
onClicked: {
appSettings.profilesList.remove(currentIndex);
profilesView.selection.clear();
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;
profilesView.model = 0
profilesView.model = appSettings.profilesList
}
}
Item {
@ -94,31 +94,36 @@ ColumnLayout{
Layout.fillWidth: true
text: qsTr("Import")
onClicked: {
fileDialog.selectExisting = true;
fileDialog.callBack = function (url) {loadFile(url);};
fileDialog.open();
fileDialog.selectExisting = true
fileDialog.callBack = function (url) {
loadFile(url)
}
fileDialog.open()
}
function loadFile(url) {
try {
if (appSettings.verbose)
console.log("Loading file: " + url);
console.log("Loading file: " + url)
var profileObject = JSON.parse(fileIO.read(url));
var name = profileObject.name;
var profileObject = JSON.parse(fileIO.read(url))
var name = profileObject.name
if (!name)
throw "Profile doesn't have a name";
throw "Profile doesn't have a name"
var version = profileObject.version !== undefined ? profileObject.version : 1;
var version = profileObject.version
!== undefined ? profileObject.version : 1
if (version !== appSettings.profileVersion)
throw "This profile is not supported on this version of CRT.";
throw "This profile is not supported on this version of CRT."
delete profileObject.name;
delete profileObject.name
appSettings.appendCustomProfile(name, JSON.stringify(profileObject));
appSettings.appendCustomProfile(name,
JSON.stringify(
profileObject))
} catch (err) {
messageDialog.text = qsTr(err)
messageDialog.open();
messageDialog.open()
}
}
}
@ -128,36 +133,45 @@ ColumnLayout{
Layout.fillWidth: true
text: qsTr("Export")
enabled: currentIndex >= 0 && !appSettings.profilesList.get(currentIndex).builtin
enabled: currentIndex >= 0 && !appSettings.profilesList.get(
currentIndex).builtin
onClicked: {
fileDialog.selectExisting = false;
fileDialog.callBack = function (url) {storeFile(url);};
fileDialog.open();
fileDialog.selectExisting = false
fileDialog.callBack = function (url) {
storeFile(url)
}
fileDialog.open()
}
function storeFile(url) {
try {
var urlString = url.toString();
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;
var extension = urlString.substring(
urlString.length - 5, urlString.length)
var urlTail = (extension === ".json" ? "" : ".json")
url += urlTail
if (true)
console.log("Storing file: " + url);
console.log("Storing file: " + url)
var profileObject = appSettings.profilesList.get(currentIndex);
var profileSettings = JSON.parse(profileObject.obj_string);
profileSettings["name"] = profileObject.text;
profileSettings["version"] = appSettings.profileVersion;
var profileObject = appSettings.profilesList.get(
currentIndex)
var profileSettings = JSON.parse(
profileObject.obj_string)
profileSettings["name"] = profileObject.text
profileSettings["version"] = appSettings.profileVersion
var result = fileIO.write(url, JSON.stringify(profileSettings, undefined, 2));
var result = fileIO.write(url, JSON.stringify(
profileSettings,
undefined, 2))
if (!result)
throw "The file could not be written.";
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(err)
messageDialog.text = qsTr(
"There has been an error storing the file.")
messageDialog.open()
}
}
}
@ -171,22 +185,30 @@ ColumnLayout{
GridLayout {
anchors.fill: parent
columns: 2
Label{ text: qsTr("Brightness") }
Label {
text: qsTr("Brightness")
}
SimpleSlider {
onValueChanged: appSettings.brightness = value
value: appSettings.brightness
}
Label{ text: qsTr("Contrast") }
Label {
text: qsTr("Contrast")
}
SimpleSlider {
onValueChanged: appSettings.contrast = value
value: appSettings.contrast
}
Label{ text: qsTr("Margin") }
Label {
text: qsTr("Margin")
}
SimpleSlider {
onValueChanged: appSettings._margin = value
value: appSettings._margin
}
Label{ text: qsTr("Opacity") }
Label {
text: qsTr("Opacity")
}
SimpleSlider {
onValueChanged: appSettings.windowOpacity = value
value: appSettings.windowOpacity
@ -198,14 +220,15 @@ ColumnLayout{
InsertNameDialog {
id: insertname
onNameSelected: {
appSettings.appendCustomProfile(name, appSettings.composeProfileString());
appSettings.appendCustomProfile(name,
appSettings.composeProfileString())
}
}
MessageDialog {
id: messageDialog
title: qsTr("File Error")
onAccepted: {
messageDialog.close();
messageDialog.close()
}
}
Loader {
@ -218,18 +241,18 @@ ColumnLayout{
selectMultiple: false
selectFolder: false
selectExisting: fileDialog.selectExisting
onAccepted: callBack(fileUrl);
onAccepted: callBack(fileUrl)
}
onSelectExistingChanged: reload()
function open() {
item.open();
item.open()
}
function reload() {
active = false;
active = true;
active = false
active = true
}
}
}

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,7 +17,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.1
@ -33,7 +32,9 @@ ColumnLayout{
GridLayout {
anchors.fill: parent
columns: 2
Label { text: qsTr("Rasterization") }
Label {
text: qsTr("Rasterization")
}
ComboBox {
id: rasterizationBox
@ -46,30 +47,34 @@ ColumnLayout{
appSettings.rasterization = currentIndex
}
}
Label{ text: qsTr("Name") }
Label {
text: qsTr("Name")
}
ComboBox {
id: fontChanger
Layout.fillWidth: true
model: appSettings.fontlist
textRole: "text"
onActivated: {
var name = appSettings.fontlist.get(index).name;
appSettings.fontNames[appSettings.rasterization] = name;
appSettings.handleFontChanged();
var name = appSettings.fontlist.get(index).name
appSettings.fontNames[appSettings.rasterization] = name
appSettings.handleFontChanged()
}
function updateIndex() {
var name = appSettings.fontNames[appSettings.rasterization];
var index = appSettings.getIndexByName(name);
var name = appSettings.fontNames[appSettings.rasterization]
var index = appSettings.getIndexByName(name)
if (index !== undefined)
currentIndex = index;
currentIndex = index
}
Connections {
target: appSettings
onTerminalFontChanged: fontChanger.updateIndex();
onTerminalFontChanged: fontChanger.updateIndex()
}
Component.onCompleted: updateIndex();
Component.onCompleted: updateIndex()
}
Label {
text: qsTr("Scaling")
}
Label{ text: qsTr("Scaling") }
RowLayout {
Layout.fillWidth: true
Slider {
@ -78,20 +83,22 @@ ColumnLayout{
onValueChanged: appSettings.fontScaling = value
value: appSettings.fontScaling
stepSize: 0.05
from: appSettings.minimumFontScaling;
to: appSettings.maximumFontScaling;
from: appSettings.minimumFontScaling
to: appSettings.maximumFontScaling
}
SizedLabel {
text: Math.round(fontScalingChanger.value * 100) + "%"
}
}
Label{ text: qsTr("Font Width") }
Label {
text: qsTr("Font Width")
}
RowLayout {
Layout.fillWidth: true
Slider {
Layout.fillWidth: true
id: widthChanger
onValueChanged: appSettings.fontWidth = value;
onValueChanged: appSettings.fontWidth = value
value: appSettings.fontWidth
stepSize: 0.05
from: 0.5
@ -146,14 +153,14 @@ ColumnLayout{
name: qsTr("Font")
height: 50
Layout.fillWidth: true
onColorSelected: appSettings._fontColor = color;
onColorSelected: appSettings._fontColor = color
color: appSettings._fontColor
}
ColorButton {
name: qsTr("Background")
height: 50
Layout.fillWidth: true
onColorSelected: appSettings._backgroundColor = color;
onColorSelected: appSettings._backgroundColor = color
color: appSettings._backgroundColor
}
}

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,7 +17,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.1

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,12 +17,12 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
Rectangle {
property size terminalSize
property real topOpacity: 0.6
width: textSize.width * 2
height: textSize.height * 2
radius: 5
@ -31,7 +31,11 @@ Rectangle{
color: "black"
opacity: sizetimer.running ? 0.6 : 0.0
Behavior on opacity{NumberAnimation{duration: 200}}
Behavior on opacity {
NumberAnimation {
duration: 200
}
}
onTerminalSizeChanged: sizetimer.restart()

View File

@ -1,3 +1,23 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
*
* cool-retro-term is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.0
import "utils.js" as Utils
@ -6,12 +26,10 @@ Loader {
property ShaderEffectSource source: item ? item.source : null
active: !appSettings.useFastBurnIn && appSettings.burnIn !== 0
anchors.fill: parent
sourceComponent: Item {
property alias source: burnInSourceEffect
property int burnInScaling: scaleTexture * appSettings.burnInQuality
ShaderEffectSource {

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -27,7 +27,7 @@ QtObject {
property bool initialized: false
function getDatabase() {
return LocalStorage.openDatabaseSync("coolretroterm" + dbMajorVersion, dbMinorVersion, "StorageDatabase", 100000);
return LocalStorage.openDatabaseSync("coolretroterm" + dbMajorVersion, dbMinorVersion, "StorageDatabase", 100000)
}
function initialize() {
@ -35,9 +35,10 @@ QtObject {
db.transaction(
function(tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS settings(setting TEXT UNIQUE, value TEXT)');
});
}
)
initialized = true;
initialized = true
}
function setSetting(setting, value) {
@ -45,7 +46,8 @@ QtObject {
var db = getDatabase();
var res = "";
db.transaction(function(tx) {
db.transaction(
function(tx) {
var rs = tx.executeSql('INSERT OR REPLACE INTO settings VALUES (?,?);', [setting,value]);
//console.log(rs.rowsAffected)
if (rs.rowsAffected > 0) {
@ -54,23 +56,25 @@ QtObject {
res = "Error";
}
}
);
)
// The function returns OK if it was successful, or Error if it wasn't
return res;
return res
}
function getSetting(setting) {
if(!initialized) initialize();
var db = getDatabase();
var res = "";
db.transaction(function(tx) {
db.transaction(
function(tx) {
var rs = tx.executeSql('SELECT value FROM settings WHERE setting=?;', [setting]);
if (rs.rows.length > 0) {
res = rs.rows.item(0).value;
} else {
res = undefined;
}
})
}
)
return res
}
@ -79,6 +83,7 @@ QtObject {
db.transaction(
function(tx) {
tx.executeSql('DROP TABLE settings');
});
}
)
}
}

View File

@ -1,3 +1,22 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
*
* cool-retro-term is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
import QtGraphicalEffects 1.0
@ -26,7 +45,6 @@ ShaderTerminal {
}
// EFFECTS ////////////////////////////////////////////////////////////////
Loader {
id: bloomEffectLoader
active: appSettings.bloom
@ -35,7 +53,7 @@ ShaderTerminal {
height: parent.height * appSettings.bloomQuality
sourceComponent: FastBlur {
radius: Utils.lint(16, 64, appSettings.bloomQuality);
radius: Utils.lint(16, 64, appSettings.bloomQuality)
source: terminal.mainSource
transparentBorder: true
}
@ -54,71 +72,4 @@ ShaderTerminal {
}
bloomSource: bloomSourceLoader.item
// NewTerminalFrame {
// id: terminalFrame
// anchors.fill: parent
// blending: true
// }
// This shader might be useful in the future. Since we used it only for a couple
// of calculations is probably best to move those in the main shader. If in the future
// we need to store another fullScreen channel this might be handy.
// ShaderEffect {
// id: rasterizationEffect
// width: parent.width
// height: parent.height
// property real outColor: 0.0
// property real dispX: (5 / width) * appSettings.windowScaling
// property real dispY: (5 / height) * appSettings.windowScaling
// property size virtual_resolution: terminal.virtualResolution
// blending: false
// fragmentShader:
// "uniform lowp float qt_Opacity;" +
// "varying highp vec2 qt_TexCoord0;
// uniform highp vec2 virtual_resolution;
// uniform highp float dispX;
// uniform highp float dispY;
// uniform mediump float outColor;
// highp float getScanlineIntensity(vec2 coords) {
// highp float result = 1.0;" +
// (appSettings.rasterization != appSettings.no_rasterization ?
// "result *= abs(sin(coords.y * virtual_resolution.y * "+Math.PI+"));" : "") +
// (appSettings.rasterization == appSettings.pixel_rasterization ?
// "result *= abs(sin(coords.x * virtual_resolution.x * "+Math.PI+"));" : "") + "
// return result;
// }" +
// "void main() {" +
// "highp float color = getScanlineIntensity(qt_TexCoord0);" +
// "float distance = length(vec2(0.5) - qt_TexCoord0);" +
// "color = mix(color, 0.0, 1.2 * distance * distance);" +
// "color *= outColor + smoothstep(0.00, dispX, qt_TexCoord0.x) * (1.0 - outColor);" +
// "color *= outColor + smoothstep(0.00, dispY, qt_TexCoord0.y) * (1.0 - outColor);" +
// "color *= outColor + (1.0 - smoothstep(1.00 - dispX, 1.00, qt_TexCoord0.x)) * (1.0 - outColor);" +
// "color *= outColor + (1.0 - smoothstep(1.00 - dispY, 1.00, qt_TexCoord0.y)) * (1.0 - outColor);" +
// "gl_FragColor.a = color;" +
// "}"
// onStatusChanged: if (log) console.log(log) //Print warning messages
// }
// rasterizationSource: ShaderEffectSource{
// id: rasterizationEffectSource
// sourceItem: rasterizationEffect
// hideSource: true
// smooth: true
// wrapMode: ShaderEffectSource.ClampToEdge
// visible: false
// }
}

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,7 +17,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
Timer {

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2013 "Filippo Scognamiglio"
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
@ -17,7 +17,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
import QtQuick.Window 2.1
import QtQuick.Controls 2.3
@ -78,7 +77,7 @@ ApplicationWindow{
text: qsTr("Fullscreen")
enabled: Qt.platform.os !== "osx"
shortcut: "Alt+F11"
onTriggered: appSettings.fullscreen = !appSettings.fullscreen;
onTriggered: appSettings.fullscreen = !appSettings.fullscreen
checkable: true
checked: appSettings.fullscreen
}
@ -86,15 +85,15 @@ ApplicationWindow{
id: quitAction
text: qsTr("Quit")
shortcut: "Ctrl+Shift+Q"
onTriggered: Qt.quit();
onTriggered: Qt.quit()
}
Action {
id: showsettingsAction
text: qsTr("Settings")
onTriggered: {
settingswindow.show();
settingswindow.requestActivate();
settingswindow.raise();
settingswindow.show()
settingswindow.requestActivate()
settingswindow.raise()
}
}
Action {
@ -111,21 +110,21 @@ ApplicationWindow{
id: zoomIn
text: qsTr("Zoom In")
shortcut: "Ctrl++"
onTriggered: appSettings.incrementScaling();
onTriggered: appSettings.incrementScaling()
}
Action {
id: zoomOut
text: qsTr("Zoom Out")
shortcut: "Ctrl+-"
onTriggered: appSettings.decrementScaling();
onTriggered: appSettings.decrementScaling()
}
Action {
id: showAboutAction
text: qsTr("About")
onTriggered: {
aboutDialog.show();
aboutDialog.requestActivate();
aboutDialog.raise();
aboutDialog.show()
aboutDialog.requestActivate()
aboutDialog.raise()
}
}
ApplicationSettings {

View File

@ -17,15 +17,20 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
import QtQuick.Controls 2.3
Menu {
id: contextmenu
MenuItem { action: copyAction }
MenuItem { action: pasteAction }
MenuItem { action: showsettingsAction }
MenuItem {
action: copyAction
}
MenuItem {
action: pasteAction
}
MenuItem {
action: showsettingsAction
}
MenuSeparator {}
@ -37,17 +42,33 @@ Menu{
}
Menu {
title: qsTr("Edit")
MenuItem {action: copyAction}
MenuItem {action: pasteAction}
MenuItem {
action: copyAction
}
MenuItem {
action: pasteAction
}
MenuSeparator {}
MenuItem {action: showsettingsAction}
MenuItem {
action: showsettingsAction
}
}
Menu {
title: qsTr("View")
MenuItem {action: fullscreenAction; visible: fullscreenAction.enabled}
MenuItem {action: showMenubarAction; visible: showMenubarAction.enabled}
MenuItem {action: zoomIn}
MenuItem {action: zoomOut}
MenuItem {
action: fullscreenAction
visible: fullscreenAction.enabled
}
MenuItem {
action: showMenubarAction
visible: showMenubarAction.enabled
}
MenuItem {
action: zoomIn
}
MenuItem {
action: zoomOut
}
}
Menu {
id: profilesMenu
@ -57,8 +78,8 @@ Menu{
delegate: MenuItem {
text: model.text
onTriggered: {
appSettings.loadProfileString(obj_string);
appSettings.handleFontChanged();
appSettings.loadProfileString(obj_string)
appSettings.handleFontChanged()
}
}
onObjectAdded: profilesMenu.insertItem(index, object)
@ -67,6 +88,8 @@ Menu{
}
Menu {
title: qsTr("Help")
MenuItem {action: showAboutAction}
MenuItem {
action: showAboutAction
}
}
}

View File

@ -17,12 +17,15 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
import QtQuick.Controls 2.3
Menu {
id: contextmenu
MenuItem { action: copyAction }
MenuItem { action: pasteAction }
MenuItem {
action: copyAction
}
MenuItem {
action: pasteAction
}
}

View File

@ -17,7 +17,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
import QtQuick 2.2
import QtQuick.Controls 2.3
@ -27,21 +26,39 @@ MenuBar {
Menu {
title: qsTr("File")
MenuItem {action: quitAction}
MenuItem {
action: quitAction
}
}
Menu {
title: qsTr("Edit")
MenuItem {action: copyAction}
MenuItem {action: pasteAction}
MenuItem {
action: copyAction
}
MenuItem {
action: pasteAction
}
MenuSeparator {}
MenuItem {action: showsettingsAction}
MenuItem {
action: showsettingsAction
}
}
Menu {
title: qsTr("View")
MenuItem {action: fullscreenAction; visible: fullscreenAction.enabled}
MenuItem {action: showMenubarAction; visible: showMenubarAction.enabled}
MenuItem {action: zoomIn}
MenuItem {action: zoomOut}
MenuItem {
action: fullscreenAction
visible: fullscreenAction.enabled
}
MenuItem {
action: showMenubarAction
visible: showMenubarAction.enabled
}
MenuItem {
action: zoomIn
}
MenuItem {
action: zoomOut
}
}
Menu {
id: profilesMenu
@ -51,8 +68,8 @@ MenuBar {
delegate: MenuItem {
text: model.text
onTriggered: {
appSettings.loadProfileString(obj_string);
appSettings.handleFontChanged();
appSettings.loadProfileString(obj_string)
appSettings.handleFontChanged()
}
}
onObjectAdded: profilesMenu.insertItem(index, object)
@ -61,6 +78,8 @@ MenuBar {
}
Menu {
title: qsTr("Help")
MenuItem {action: showAboutAction}
MenuItem {
action: showAboutAction
}
}
}

View File

@ -1,3 +1,23 @@
/*******************************************************************************
* Copyright (c) 2013-2021 "Filippo Scognamiglio"
* https://github.com/Swordfish90/cool-retro-term
*
* This file is part of cool-retro-term.
*
* cool-retro-term is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
.pragma library
function clamp(x, min, max) {
if (x <= min)
@ -6,15 +26,18 @@ function clamp(x, min, 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;