1
0
mirror of https://github.com/Swordfish90/cool-retro-term.git synced 2025-04-13 06:10:53 +01:00

Settings window seems to work nicely.

This commit is contained in:
Filippo Scognamiglio 2014-06-25 14:29:10 +02:00
parent 9795b5d9d2
commit 372bceb186
5 changed files with 71 additions and 69 deletions

View File

@ -10,28 +10,38 @@ Tab{
Layout.fillWidth: true Layout.fillWidth: true
ComboBox { ComboBox {
id: rasterizationBox id: rasterizationBox
property string selectedElement: model[currentIndex]
anchors.fill: parent anchors.fill: parent
model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")] model: [qsTr("Default"), qsTr("Scanlines"), qsTr("Pixels")]
currentIndex: shadersettings.rasterization currentIndex: shadersettings.rasterization
onCurrentIndexChanged: shadersettings.rasterization = currentIndex onCurrentIndexChanged: {
scalingChanger.enabled = false;
shadersettings.rasterization = currentIndex
fontChanger.updateIndex();
scalingChanger.updateIndex();
scalingChanger.enabled = true;
}
} }
} }
GroupBox{ GroupBox{
title: qsTr("Font") title: qsTr("Font") + " (" + rasterizationBox.selectedElement + ")"
Layout.fillWidth: true Layout.fillWidth: true
GridLayout{ GridLayout{
anchors.fill: parent anchors.fill: parent
columns: 2 columns: 2
Text{ text: qsTr("Name") } Text{ text: qsTr("Name") }
ComboBox{ ComboBox{
id: fontChanged id: fontChanger
Layout.fillWidth: true Layout.fillWidth: true
model: shadersettings.fontlist model: shadersettings.fontlist
currentIndex: shadersettings.fontIndexes[shadersettings.rasterization] currentIndex: updateIndex()
onCurrentIndexChanged: { onActivated: {
shadersettings.fontIndexes[shadersettings.rasterization] = currentIndex; shadersettings.fontIndexes[shadersettings.rasterization] = index;
shadersettings.handleFontChanged(); shadersettings.handleFontChanged();
} }
function updateIndex(){
currentIndex = shadersettings.fontIndexes[shadersettings.rasterization];
}
} }
Text{ text: qsTr("Scaling") } Text{ text: qsTr("Scaling") }
RowLayout{ RowLayout{
@ -42,12 +52,16 @@ Tab{
minimumValue: 0 minimumValue: 0
maximumValue: shadersettings.fontScalingList.length - 1 maximumValue: shadersettings.fontScalingList.length - 1
stepSize: 1 stepSize: 1
value: shadersettings.fontScalingIndexes[shadersettings.rasterization] tickmarksEnabled: true
value: updateIndex()
onValueChanged: { onValueChanged: {
if(!enabled) return; //Ugly and hacky solution. Look for a better solution.
shadersettings.fontScalingIndexes[shadersettings.rasterization] = value; shadersettings.fontScalingIndexes[shadersettings.rasterization] = value;
console.log(shadersettings.fontScalingIndexes);
shadersettings.handleFontChanged(); shadersettings.handleFontChanged();
} }
function updateIndex(){
value = shadersettings.fontScalingIndexes[shadersettings.rasterization];
}
} }
Text{ Text{
text: shadersettings.fontScalingList[scalingChanger.value].toFixed(2) text: shadersettings.fontScalingList[scalingChanger.value].toFixed(2)

View File

@ -70,17 +70,23 @@ Item{
readonly property int pixel_rasterization: 2 readonly property int pixel_rasterization: 2
property int rasterization: no_rasterization property int rasterization: no_rasterization
onRasterizationChanged: handleFontChanged()
ListModel{
id: framelist
ListElement{text: "No frame"; source: "./frames/NoFrame.qml"; reflections: false}
ListElement{text: "Simple white frame"; source: "./frames/WhiteSimpleFrame.qml"; reflections: true}
ListElement{text: "Rough black frame"; source: "./frames/BlackRoughFrame.qml"; reflections: true}
}
property string frame_source: frames_list.get(frames_index).source property string frame_source: frames_list.get(frames_index).source
property int frames_index: 1 property int frames_index: 1
property var frames_list: framelist property var frames_list: framelist
signal terminalFontChanged
signal terminalFontChanged(string fontSource, int pixelSize, int lineSpacing, size virtualCharSize)
Loader{ Loader{
id: fontManager id: fontManager
onSourceChanged: console.log(source)
states: [ states: [
State { when: rasterization == no_rasterization State { when: rasterization == no_rasterization
@ -94,38 +100,23 @@ Item{
onLoaded: handleFontChanged() onLoaded: handleFontChanged()
} }
Text{id: fontMetrics; text: "B"; visible: false}
FontLoader{
property int pixelSize
property real lineSpacing
property size paintedSize
property size virtualCharSize
id: currentfont
}
property var fontlist: fontManager.item.fontlist property var fontlist: fontManager.item.fontlist
property var fontScalingList: fontManager.item.fontScalingList property var fontScalingList: fontManager.item.fontScalingList
property alias font: currentfont
property var fontIndexes: [0,1,1] property var fontIndexes: [1,1,1]
property var fontScalingIndexes: [5,1,1] property var fontScalingIndexes: [5,1,1]
function handleFontChanged(){ function handleFontChanged(){
if(!fontManager.item) return; if(!fontManager.item) return;
fontManager.item.selectedFontIndex = fontIndexes[rasterization]; fontManager.item.selectedFontIndex = fontIndexes[rasterization];
fontManager.item.selectedScalingIndex = fontScalingIndexes[rasterization]; fontManager.item.selectedScalingIndex = fontScalingIndexes[rasterization];
currentfont.source = fontManager.item.source;
currentfont.pixelSize = fontManager.item.pixelSize; var fontSource = fontManager.item.source;
currentfont.lineSpacing = fontManager.item.lineSpacing; var pixelSize = fontManager.item.pixelSize;
fontMetrics.font = currentfont.name; var lineSpacing = fontManager.item.lineSpacing;
fontMetrics.font.pixelSize = currentfont.pixelSize; var virtualCharSize = fontManager.item.virtualCharSize;
currentfont.paintedSize = Qt.size(fontMetrics.paintedWidth, fontMetrics.paintedHeight)
currentfont.virtualCharSize = fontManager.item.virtualCharSize !== undefined ? terminalFontChanged(fontSource, pixelSize, lineSpacing, virtualCharSize);
fontManager.item.virtualCharSize :
Qt.size(currentfont.paintedSize.width * 0.5,
currentfont.paintedSize.height * 0.5);
terminalFontChanged();
} }
property bool frame_reflections: true property bool frame_reflections: true
@ -134,13 +125,6 @@ Item{
property alias profiles_list: profileslist property alias profiles_list: profileslist
property int profiles_index: 0 property int profiles_index: 0
ListModel{
id: framelist
ListElement{text: "No frame"; source: "./frames/NoFrame.qml"; reflections: false}
ListElement{text: "Simple white frame"; source: "./frames/WhiteSimpleFrame.qml"; reflections: true}
ListElement{text: "Rough black frame"; source: "./frames/BlackRoughFrame.qml"; reflections: true}
}
Storage{id: storage} Storage{id: storage}
function composeSettingsString(){ function composeSettingsString(){
@ -151,7 +135,8 @@ Item{
brightness: brightness, brightness: brightness,
contrast: contrast, contrast: contrast,
ambient_light: ambient_light, ambient_light: ambient_light,
font_scaling_index: font_scaling_index, fontScalingIndexes: fontScalingIndexes,
fontIndexes: fontIndexes
} }
return JSON.stringify(settings); return JSON.stringify(settings);
} }
@ -166,11 +151,11 @@ Item{
screen_distortion: screen_distortion, screen_distortion: screen_distortion,
glowing_line_strength: glowing_line_strength, glowing_line_strength: glowing_line_strength,
frames_index: frames_index, frames_index: frames_index,
font_index: font_index,
motion_blur: motion_blur, motion_blur: motion_blur,
bloom_strength: bloom_strength, bloom_strength: bloom_strength,
rasterization: rasterization, rasterization: rasterization,
jitter: jitter jitter: jitter,
fontIndex: fontIndexes[rasterization]
} }
return JSON.stringify(settings); return JSON.stringify(settings);
} }
@ -211,7 +196,8 @@ Item{
fps = settings.fps !== undefined ? settings.fps: fps fps = settings.fps !== undefined ? settings.fps: fps
window_scaling = settings.window_scaling ? settings.window_scaling : window_scaling window_scaling = settings.window_scaling ? settings.window_scaling : window_scaling
//font_scaling_index = settings.font_scaling_index !== undefined ? settings.font_scaling_index: font_scaling_index; fontIndexes = settings.fontIndexes ? settings.fontIndexes : fontIndexes
fontScalingIndexes = settings.fontScalingIndexes ? settings.fontScalingIndexes : fontScalingIndexes
} }
function loadProfileString(profileString){ function loadProfileString(profileString){
@ -231,11 +217,11 @@ Item{
frames_index = settings.frames_index !== undefined ? settings.frames_index : frames_index; frames_index = settings.frames_index !== undefined ? settings.frames_index : frames_index;
//font_index = settings.font_index !== undefined ? settings.font_index : font_index;
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;
fontIndexes[rasterization] = settings.fontIndex ? settings.fontIndex : fontIndexes[rasterization];
} }
function storeCustomProfiles(){ function storeCustomProfiles(){

View File

@ -56,8 +56,6 @@ Item{
property size terminalSize: kterminal.terminalSize property size terminalSize: kterminal.terminalSize
property size paintedTextSize property size paintedTextSize
onPaintedTextSizeChanged: console.log(paintedTextSize)
//Force reload of the blursource when settings change //Force reload of the blursource when settings change
onMBlurChanged: restartBlurredSource() onMBlurChanged: restartBlurredSource()
@ -76,8 +74,6 @@ Item{
KTerminal { KTerminal {
id: kterminal id: kterminal
anchors.fill: parent anchors.fill: parent
font.pixelSize: shadersettings.font.pixelSize
font.family: shadersettings.font.name
colorScheme: "MyWhiteOnBlack" colorScheme: "MyWhiteOnBlack"
@ -90,33 +86,38 @@ Item{
} }
} }
function handleFontChange(){ FontLoader{ id: fontLoader }
var newFont = shadersettings.font; Text{id: fontMetrics; text: "B"; visible: false}
var font_size = newFont.pixelSize * shadersettings.window_scaling;
font.pixelSize = font_size;
font.family = newFont.name;
var virtualCharSize = newFont.virtualCharSize; function getPaintedSize(pixelSize){
var virtualPxSize = Qt.size(newFont.paintedSize.width / virtualCharSize.width, fontMetrics.font.family = fontLoader.name;
newFont.paintedSize.height / virtualCharSize.height) fontMetrics.font.pixelSize = pixelSize;
return Qt.size(fontMetrics.paintedWidth, fontMetrics.paintedHeight);
}
function isValid(size){
return size.width >= 0 && size.height >= 0;
}
var scanline_spacing = shadersettings.font.lineSpacing; function handleFontChange(fontSource, pixelSize, lineSpacing, virtualCharSize){
var line_spacing = Math.round(scanline_spacing); fontLoader.source = fontSource;
font.pixelSize = pixelSize * shadersettings.window_scaling;
font.family = fontLoader.name;
console.log(kterminal.paintedFontSize) var paintedSize = getPaintedSize(pixelSize);
var charSize = isValid(virtualCharSize)
? virtualCharSize
: Qt.size(paintedSize.width / 2, paintedSize.height / 2);
// console.log("Font height: " + fontMetrics.paintedHeight) var virtualPxSize = Qt.size(paintedSize.width / charSize.width,
// console.log("Scanline Height: " + scanline_height) paintedSize.height / charSize.height)
// console.log("Line Spacing: " + line_spacing)
terminalContainer.virtualPxSize = virtualPxSize; terminalContainer.virtualPxSize = virtualPxSize;
setLineSpacing(newFont.lineSpacing); setLineSpacing(lineSpacing);
restartBlurredSource(); restartBlurredSource();
} }
Component.onCompleted: { Component.onCompleted: {
shadersettings.terminalFontChanged.connect(handleFontChange); shadersettings.terminalFontChanged.connect(handleFontChange);
handleFontChange();
forceActiveFocus(); forceActiveFocus();
} }
} }

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.0.1, 2014-06-24T10:46:32. --> <!-- Written by QtCreator 3.0.1, 2014-06-25T13:18:19. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>ProjectExplorer.Project.ActiveTarget</variable> <variable>ProjectExplorer.Project.ActiveTarget</variable>

View File

@ -159,4 +159,5 @@ ApplicationWindow{
terminalSize: terminal.terminalSize terminalSize: terminal.terminalSize
} }
} }
Component.onCompleted: shadersettings.handleFontChanged();
} }