diff --git a/app/qml/ApplicationSettings.qml b/app/qml/ApplicationSettings.qml
index 350bc41..66327bf 100644
--- a/app/qml/ApplicationSettings.qml
+++ b/app/qml/ApplicationSettings.qml
@@ -69,6 +69,8 @@ Item{
property real motion_blur: 0.40
property real bloom_strength: 0.65
+ property real bloom_quality: 1.0
+
property real chroma_color: 0.0
property real saturation_color: 0.0
@@ -85,6 +87,9 @@ Item{
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}
@@ -116,27 +121,29 @@ Item{
onLoaded: handleFontChanged()
}
- signal fontScalingChanged
- property var fontScalingList: [0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5]
- property int fontScalingIndex: 5
+ property real fontScaling: 1.0
+ onFontScalingChanged: handleFontChanged();
- function setScalingIndex(newScaling){
- fontScalingIndex = newScaling;
- fontScalingChanged();
+ function incrementScaling(){
+ fontScaling = Math.min(fontScaling + 0.05, 2.50);
handleFontChanged();
}
- function getScalingIndex(){
- return fontScalingIndex;
+ function decrementScaling(){
+ 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;
fontManager.item.selectedFontIndex = fontIndexes[rasterization];
- fontManager.item.scaling = fontScalingList[fontScalingIndex];
+ fontManager.item.scaling = fontScaling;
var fontSource = fontManager.item.source;
var pixelSize = fontManager.item.pixelSize;
@@ -164,10 +171,12 @@ Item{
fps: fps,
window_scaling: window_scaling,
show_terminal_size: show_terminal_size,
- fontScalingIndex: fontScalingIndex,
+ fontScaling: fontScaling,
fontIndexes: fontIndexes,
frameReflections: _frameReflections,
- showMenubar: showMenubar
+ showMenubar: showMenubar,
+ scanline_quality: scanline_quality,
+ bloom_quality: bloom_quality
}
return JSON.stringify(settings);
}
@@ -193,7 +202,8 @@ Item{
contrast: contrast,
ambient_light: ambient_light,
windowOpacity: windowOpacity,
- fontIndex: fontIndexes[rasterization]
+ fontIndex: fontIndexes[rasterization],
+ fontWidth: fontWidth
}
return JSON.stringify(settings);
}
@@ -231,11 +241,14 @@ Item{
window_scaling = settings.window_scaling !== undefined ? settings.window_scaling : window_scaling
fontIndexes = settings.fontIndexes !== undefined ? settings.fontIndexes : fontIndexes
- fontScalingIndex = settings.fontScalingIndex !== undefined ? settings.fontScalingIndex : fontScalingIndex
+ fontScaling = settings.fontScaling !== undefined ? settings.fontScaling : fontScaling
_frameReflections = settings.frameReflections !== undefined ? settings.frameReflections : _frameReflections;
showMenubar = settings.showMenubar !== undefined ? settings.showMenubar : showMenubar;
+
+ 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){
@@ -269,6 +282,7 @@ Item{
windowOpacity = settings.windowOpacity !== undefined ? settings.windowOpacity : windowOpacity;
fontIndexes[rasterization] = settings.fontIndex !== undefined ? settings.fontIndex : fontIndexes[rasterization];
+ fontWidth = settings.fontWidth !== undefined ? settings.fontWidth : fontWidth;
}
function storeCustomProfiles(){
@@ -320,47 +334,47 @@ Item{
id: profileslist
ListElement{
text: "Default Amber"
- obj_string: '{"ambient_light":0.2,"background_color":"#000000","bloom_strength":0.65,"brightness":0.5,"brightness_flickering":0.1,"contrast":0.85,"fontIndex":0,"font_color":"#ff8100","frames_index":1,"glowing_line_strength":0.2,"horizontal_sincronization":0.08,"jitter":0.18,"motion_blur":0.4,"noise_strength":0.1,"rasterization":0,"screen_distortion":0.1,"windowOpacity":1,"chroma_color":0,"saturation_color":0,"rgb_shift":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: '{"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}'
+ 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: '{"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}'
+ 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: '{"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}'
+ 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: '{"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}'
+ 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: '{"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}'
+ 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: '{"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}'
+ 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: '{"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}'
+ 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: '{"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}'
+ 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
}
}
diff --git a/app/qml/FontPixels.qml b/app/qml/FontPixels.qml
index 4c0afbd..9f5143f 100644
--- a/app/qml/FontPixels.qml
+++ b/app/qml/FontPixels.qml
@@ -32,13 +32,6 @@ Item{
ListModel{
id: fontlist
- ListElement{
- text: "Commodore PET 2Y (1977)"
- source: "fonts/1977-commodore-pet/COMMODORE_PET_2y.ttf"
- lineSpacing: 2
- pixelSize: 16
- baseScaling: 3.0
- }
ListElement{
text: "Commodore PET (1977)"
source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
diff --git a/app/qml/FontScanlines.qml b/app/qml/FontScanlines.qml
index 4c0afbd..9f5143f 100644
--- a/app/qml/FontScanlines.qml
+++ b/app/qml/FontScanlines.qml
@@ -32,13 +32,6 @@ Item{
ListModel{
id: fontlist
- ListElement{
- text: "Commodore PET 2Y (1977)"
- source: "fonts/1977-commodore-pet/COMMODORE_PET_2y.ttf"
- lineSpacing: 2
- pixelSize: 16
- baseScaling: 3.0
- }
ListElement{
text: "Commodore PET (1977)"
source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
diff --git a/app/qml/PreprocessedTerminal.qml b/app/qml/PreprocessedTerminal.qml
index 5d6118a..0c0d033 100644
--- a/app/qml/PreprocessedTerminal.qml
+++ b/app/qml/PreprocessedTerminal.qml
@@ -77,6 +77,23 @@ Item{
kterminal.copyClipboard();
}
+ //When settings are updated sources need to be redrawn.
+ Connections{
+ target: shadersettings
+ onFontScalingChanged: terminalContainer.updateSources();
+ onFontWidthChanged: terminalContainer.updateSources();
+ }
+ Connections{
+ target: terminalContainer
+ onWidthChanged: terminalContainer.updateSources();
+ onHeightChanged: terminalContainer.updateSources();
+ }
+ function updateSources() {
+ kterminal.update();
+ kterminal.updateImage();
+ }
+
+
KTerminal {
id: kterminal
width: parent.width
@@ -84,6 +101,8 @@ Item{
colorScheme: "cool-retro-term"
+ smooth: false
+
session: KSession {
id: ksession
kbScheme: "xterm"
@@ -93,9 +112,6 @@ Item{
}
}
- onWidthChanged: update();
- onHeightChanged: update();
-
FontLoader{ id: fontLoader }
Text{id: fontMetrics; text: "B"; visible: false}
@@ -104,9 +120,17 @@ Item{
font.pixelSize = pixelSize;
font.family = fontLoader.name;
- width = Qt.binding(function() {return Math.floor(terminalContainer.width / screenScaling);});
+ var fontWidth = 1.0 / shadersettings.fontWidth;
+
+ 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();
@@ -174,7 +198,6 @@ Item{
id: kterminalSource
sourceItem: kterminal
hideSource: true
- smooth: mScanlines == shadersettings.no_rasterization
wrapMode: ShaderEffectSource.ClampToEdge
live: false
@@ -190,6 +213,7 @@ Item{
}
Loader{
id: blurredSourceLoader
+ asynchronous: true
active: mBlur !== 0
sourceComponent: ShaderEffectSource{
@@ -200,8 +224,6 @@ Item{
hideSource: true
wrapMode: kterminalSource.wrapMode
- smooth: mScanlines == shadersettings.no_rasterization
-
function restartBlurSource(){
livetimer.restart();
}
@@ -228,13 +250,19 @@ Item{
livetimer.restart();
}
}
+ Connections{
+ target: shadersettings
+ onScanline_qualityChanged: restartBlurredSource();
+ }
}
}
Loader{
id: blurredTerminalLoader
- anchors.fill: kterminal
+ width: kterminalSource.textureSize.width
+ height: kterminalSource.textureSize.height
active: mBlur !== 0
+ asynchronous: true
sourceComponent: ShaderEffect {
property variant txt_source: kterminalSource
@@ -277,23 +305,32 @@ Item{
// BLOOM ////////////////////////////////////////////////////////////////
Loader{
+ property real scaling: shadersettings.bloom_quality
id: bloomEffectLoader
active: mBloom != 0
- anchors.fill: parent
+ asynchronous: true
+ width: parent.width * scaling
+ height: parent.height * scaling
sourceComponent: FastBlur{
- radius: 48
+ radius: 48 * scaling
source: kterminal
transparentBorder: true
- smooth: false
}
}
Loader{
id: bloomSourceLoader
active: mBloom != 0
+ asynchronous: true
sourceComponent: ShaderEffectSource{
+ id: _bloomEffectSource
sourceItem: bloomEffectLoader.item
hideSource: true
- smooth: false
+ live: false
+ smooth: true
+ Connections{
+ target: kterminalSource
+ onSourceUpdate: _bloomEffectSource.scheduleUpdate();
+ }
}
}
diff --git a/app/qml/SettingsGeneralTab.qml b/app/qml/SettingsGeneralTab.qml
index c4ea35a..8c6cb47 100644
--- a/app/qml/SettingsGeneralTab.qml
+++ b/app/qml/SettingsGeneralTab.qml
@@ -92,49 +92,17 @@ Tab{
}
}
GroupBox{
- title: qsTr("Performace")
+ title: qsTr("Frame")
Layout.fillWidth: true
- Layout.columnSpan: 2
- anchors.left: parent.left
- anchors.right: parent.right
- GridLayout{
+ RowLayout{
anchors.fill: parent
- rows: 3
- columns: 3
- CheckBox{
- Layout.columnSpan: 3
- checked: !shadersettings._frameReflections
- text: qsTr("Disable reflections")
- onCheckedChanged: shadersettings._frameReflections = !checked
- enabled: shadersettings.reflectionsAllowed
- }
- CheckBox{
- property int fps: checked ? slider.value : 0
- onFpsChanged: shadersettings.fps = fps
- checked: shadersettings.fps !== 0
- text: qsTr("Limit FPS")
- }
- Slider{
- id: slider
+ ComboBox{
+ id: framescombobox
Layout.fillWidth: true
- stepSize: 1
- maximumValue: 60
- minimumValue: 1
- enabled: shadersettings.fps !== 0
- value: shadersettings.fps !== 0 ? shadersettings.fps : 60
+ model: shadersettings.frames_list
+ currentIndex: shadersettings.frames_index
+ onCurrentIndexChanged: shadersettings.frames_index = currentIndex
}
- Text{text: slider.value}
- Text{text: qsTr("Texture quality")}
- Slider{
- Layout.fillWidth: true
- id: txtslider
- onValueChanged: shadersettings.window_scaling = value;
- value: shadersettings.window_scaling
- tickmarksEnabled: true
- stepSize: 0.25
- Component.onCompleted: minimumValue = 0.5 //Without this value gets set to 0.5
- }
- Text{text: Math.round(txtslider.value * 100) + "%"}
}
}
}
diff --git a/app/qml/SettingsPerformanceTab.qml b/app/qml/SettingsPerformanceTab.qml
new file mode 100644
index 0000000..a0963b8
--- /dev/null
+++ b/app/qml/SettingsPerformanceTab.qml
@@ -0,0 +1,160 @@
+/*******************************************************************************
+* 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 .
+*******************************************************************************/
+
+import QtQuick 2.2
+import QtQuick.Controls 1.1
+import QtQuick.Layouts 1.1
+
+Tab{
+ ColumnLayout{
+ anchors.fill: parent
+ GroupBox{
+ title: qsTr("General")
+ Layout.fillWidth: true
+ anchors.left: parent.left
+ anchors.right: parent.right
+ GridLayout{
+ anchors.fill: parent
+ rows: 2
+ columns: 3
+ CheckBox{
+ property int fps: checked ? slider.value : 0
+ onFpsChanged: shadersettings.fps = fps
+ checked: shadersettings.fps !== 0
+ text: qsTr("Limit FPS")
+ }
+ Slider{
+ id: slider
+ Layout.fillWidth: true
+ stepSize: 1
+ maximumValue: 60
+ minimumValue: 1
+ enabled: shadersettings.fps !== 0
+ value: shadersettings.fps !== 0 ? shadersettings.fps : 60
+ }
+ Text{text: slider.value}
+ Text{text: qsTr("Texture Quality")}
+ Slider{
+ Layout.fillWidth: true
+ id: txtslider
+ onValueChanged: shadersettings.window_scaling = value;
+ value: shadersettings.window_scaling
+ tickmarksEnabled: true
+ stepSize: 0.25
+ Component.onCompleted: minimumValue = 0.5 //Without this value gets set to 0.5
+ }
+ Text{text: Math.round(txtslider.value * 100) + "%"}
+ }
+ }
+ 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;
+ maximumValue = 2;
+ value = parent.vals.indexOf(shadersettings.scanline_quality);
+ }
+ Connections{
+ target: shadersettings
+ onScanline_qualityChanged:
+ scanlineQualityContainer.valsIndex = scanlineQualityContainer.vals.indexOf(shadersettings.scanline_quality);
+ }
+ }
+ Text{
+ text: parent.valsStrings[parent.valsIndex];
+ }
+ }
+ }
+ GroupBox{
+ title: qsTr("Bloom")
+ Layout.fillWidth: true
+ anchors.left: parent.left
+ anchors.right: parent.right
+ GridLayout{
+ id: bloomQualityContainer
+ 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")
+ ]
+
+ onValsIndexChanged: shadersettings.bloom_quality = vals[valsIndex];
+
+ Text{text: qsTr("Bloom Quality")}
+ Slider{
+ id: bloomQualitySlider
+ Layout.fillWidth: true
+ onValueChanged: parent.valsIndex = value;
+ stepSize: 1
+ Component.onCompleted: {
+ minimumValue = 0;
+ maximumValue = 2;
+ value = parent.vals.indexOf(shadersettings.bloom_quality);
+ }
+ Connections{
+ target: shadersettings
+ onBloom_qualityChanged:
+ bloomQualityContainer.valsIndex = bloomQualityContainer.vals.indexOf(shadersettings.bloom_quality);
+ }
+ }
+ Text{
+ text: parent.valsStrings[parent.valsIndex];
+ }
+ }
+ }
+ GroupBox{
+ title: qsTr("Frame")
+ Layout.fillWidth: true
+ anchors.left: parent.left
+ anchors.right: parent.right
+ CheckBox{
+ checked: shadersettings._frameReflections
+ text: qsTr("Frame Reflections")
+ onCheckedChanged: shadersettings._frameReflections = checked
+ }
+ }
+ }
+}
diff --git a/app/qml/SettingsTerminalTab.qml b/app/qml/SettingsTerminalTab.qml
index 22c6084..02799dc 100644
--- a/app/qml/SettingsTerminalTab.qml
+++ b/app/qml/SettingsTerminalTab.qml
@@ -35,11 +35,8 @@ Tab{
model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")]
currentIndex: shadersettings.rasterization
onCurrentIndexChanged: {
- scalingChanger.enabled = false;
shadersettings.rasterization = currentIndex
fontChanger.updateIndex();
- scalingChanger.updateIndex();
- scalingChanger.enabled = true;
}
}
}
@@ -67,24 +64,39 @@ Tab{
RowLayout{
Layout.fillWidth: true
Slider{
- id: scalingChanger
Layout.fillWidth: true
- minimumValue: 0
- maximumValue: shadersettings.fontScalingList.length - 1
- stepSize: 1
- tickmarksEnabled: true
- value: updateIndex()
- onValueChanged: {
- if(!enabled) return; //Ugly and hacky solution. Look for a better solution.
- shadersettings.setScalingIndex(value);
+ id: fontScalingChanger
+ onValueChanged: if(enabled) shadersettings.fontScaling = value
+ stepSize: 0.05
+ enabled: false // Another trick to fix initial bad behavior.
+ Component.onCompleted: {
+ minimumValue = 0.5;
+ maximumValue = 2.5;
+ value = shadersettings.fontScaling;
+ enabled = true;
}
- function updateIndex(){
- value = shadersettings.getScalingIndex();
+ Connections{
+ target: shadersettings
+ onFontScalingChanged: fontScalingChanger.value = shadersettings.fontScaling;
}
- Component.onCompleted: shadersettings.fontScalingChanged.connect(updateIndex);
}
Text{
- text: shadersettings.fontScalingList[scalingChanger.value].toFixed(2)
+ text: Math.round(fontScalingChanger.value * 100) + "%"
+ }
+ }
+ Text{ text: qsTr("Font Width") }
+ RowLayout{
+ Layout.fillWidth: true
+ Slider{
+ Layout.fillWidth: true
+ id: widthChanger
+ onValueChanged: shadersettings.fontWidth = value;
+ value: shadersettings.fontWidth
+ stepSize: 0.05
+ Component.onCompleted: minimumValue = 0.5 //Without this value gets set to 0.5
+ }
+ Text{
+ text: Math.round(widthChanger.value * 100) + "%"
}
}
}
@@ -127,19 +139,5 @@ Tab{
}
}
}
- 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
- }
- }
- }
}
}
diff --git a/app/qml/SettingsWindow.qml b/app/qml/SettingsWindow.qml
index e7ab486..7726402 100644
--- a/app/qml/SettingsWindow.qml
+++ b/app/qml/SettingsWindow.qml
@@ -28,27 +28,37 @@ Window {
id: settings_window
title: qsTr("Settings")
width: 640
- height: 450
+ height: 440
property int tabmargins: 15
TabView{
+ id: tabView
anchors.fill: parent
anchors.margins: 10
SettingsGeneralTab{
+ id: generalTab
title: qsTr("General")
anchors.fill: parent
anchors.margins: tabmargins
}
SettingsTerminalTab{
+ id: terminalTab
title: qsTr("Terminal")
anchors.fill: parent
anchors.margins: tabmargins
}
SettingsEffectsTab{
+ id: effectsTab
title: qsTr("Effects")
anchors.fill: parent
anchors.margins: tabmargins
}
+ SettingsPerformanceTab{
+ id: performanceTab
+ title: qsTr("Performance")
+ anchors.fill: parent
+ anchors.margins: tabmargins
+ }
}
}
diff --git a/app/qml/main.qml b/app/qml/main.qml
index 96bf53e..8b0089b 100644
--- a/app/qml/main.qml
+++ b/app/qml/main.qml
@@ -85,20 +85,13 @@ ApplicationWindow{
id: zoomIn
text: qsTr("Zoom In")
shortcut: "Ctrl++"
- onTriggered: {
- var oldScaling = shadersettings.fontScalingIndex;
- var maxScalingIndex = shadersettings.fontScalingList.length - 1;
- shadersettings.setScalingIndex(Math.min(oldScaling + 1, maxScalingIndex));
- }
+ onTriggered: shadersettings.incrementScaling();
}
Action{
id: zoomOut
text: qsTr("Zoom Out")
shortcut: "Ctrl+-"
- onTriggered: {
- var oldScaling = shadersettings.fontScalingIndex;
- shadersettings.setScalingIndex(Math.max(oldScaling - 1, 0));
- }
+ onTriggered: shadersettings.decrementScaling();
}
Action{
id: showAboutAction
diff --git a/app/qml/resources.qrc b/app/qml/resources.qrc
index a9df1ff..dfc44ca 100644
--- a/app/qml/resources.qrc
+++ b/app/qml/resources.qrc
@@ -64,5 +64,6 @@
fonts/1985-ibm-pc-vga/dos437.txt
Storage.qml
CRTMainMenuBar.qml
+ SettingsPerformanceTab.qml