diff --git a/app/SettingComponent.qml b/app/SettingComponent.qml index 5f6b852..79c4417 100644 --- a/app/SettingComponent.qml +++ b/app/SettingComponent.qml @@ -28,6 +28,7 @@ RowLayout { property double _value: 0.0 property double min_value: 0.0 property double max_value: 1.0 + property double stepSize: 0.01 id: setting_component anchors.left: parent.left @@ -43,7 +44,7 @@ RowLayout { } Slider{ id: slider - stepSize: 0.01 + stepSize: parent.stepSize minimumValue: min_value maximumValue: max_value onValueChanged: setting_component._value = slider.value; @@ -55,6 +56,6 @@ RowLayout { } Text{ id: textfield - text: Math.round(((_value - min_value) / (max_value - min_value)) * 100) + "%" + text: Math.round(((value - min_value) / (max_value - min_value)) * 100) + "%" } } diff --git a/app/SettingsWindow.qml b/app/SettingsWindow.qml index c80294a..1378dc5 100644 --- a/app/SettingsWindow.qml +++ b/app/SettingsWindow.qml @@ -138,6 +138,11 @@ ApplicationWindow { checked: shadersettings.scanlines onCheckedChanged: shadersettings.scanlines = checked; } + SettingComponent{ + name: "Motion Blur" + onValueChanged: shadersettings.motion_blur = value + _value: shadersettings.motion_blur + } SettingComponent{ name: "Noise" onValueChanged: shadersettings.noise_strength = value diff --git a/app/ShaderSettings.qml b/app/ShaderSettings.qml index bbdea5c..7bc1ef4 100644 --- a/app/ShaderSettings.qml +++ b/app/ShaderSettings.qml @@ -32,8 +32,9 @@ Item{ property real noise_strength: 0.1 property real screen_distortion: 0.15 property real glowing_line_strength: 0.4 + property real motion_blur: 0.65 - property bool scanlines: true + property bool scanlines: false property string frame_source: frames_list.get(frames_index).source property int frames_index: 2 @@ -112,6 +113,8 @@ Item{ glowing_line_strength = settings.glowing_line_strength ? settings.glowing_line_strength : glowing_line_strength; scanlines = settings.scanlines ? settings.scanlines : scanlines; + motion_blur = settings.motion_blur ? settings.motion_blur : motion_blur + frames_index = settings.frames_index ? settings.frames_index : frames_index; font_index = settings.font_index ? settings.font_index : font_index; @@ -130,7 +133,8 @@ Item{ scanlines: scanlines, frames_index: frames_index, font_index: font_index, - font_scaling: font_scaling + font_scaling: font_scaling, + motion_blur: motion_blur } console.log(JSON.stringify(settings)); @@ -153,21 +157,21 @@ Item{ ListModel{ - id: profileslist - ListElement{ - text: "Default" - obj_name: "DEFAULT" - obj_string: '{"ambient_light":0.3,"background_color":"#000000","font_color":"#00ff3b","font_index":0,"font_scaling":1,"frames_index":2,"glowing_line_strength":0.4,"noise_strength":0.1,"scanlines":true,"screen_distortion":0.15,"screen_flickering":0.07}' - } - ListElement{ - text: "Commodore 64" - obj_name: "COMMODORE64" - obj_string: '{"ambient_light":0.2,"background_color":"#5048b2","font_color":"#8bcad1","font_index":2,"font_scaling":1,"frames_index":1,"glowing_line_strength":0.2,"noise_strength":0.05,"scanlines":false,"screen_distortion":0.1,"screen_flickering":0.03}' - } - ListElement{ - text: "IBM Dos" - obj_name: "IBMDOS" - obj_string: '{"ambient_light":0.4,"background_color":"#000000","font_color":"#ffffff","font_index":3,"font_scaling":1,"frames_index":1,"glowing_line_strength":0,"noise_strength":0,"scanlines":false,"screen_distortion":0.05,"screen_flickering":0.00}' - } + id: profileslist + ListElement{ + text: "Default" + obj_name: "DEFAULT" + obj_string: '{"ambient_light":0.3,"background_color":"#000000","font_color":"#00ff3b","font_index":0,"font_scaling":1,"frames_index":2,"glowing_line_strength":0.4,"noise_strength":0.1,"scanlines":true,"screen_distortion":0.15,"screen_flickering":0.07}' + } + ListElement{ + text: "Commodore 64" + obj_name: "COMMODORE64" + obj_string: '{"ambient_light":0.2,"background_color":"#5048b2","font_color":"#8bcad1","font_index":2,"font_scaling":1,"frames_index":1,"glowing_line_strength":0.2,"noise_strength":0.05,"scanlines":false,"screen_distortion":0.1,"screen_flickering":0.03}' + } + ListElement{ + text: "IBM Dos" + obj_name: "IBMDOS" + obj_string: '{"ambient_light":0.4,"background_color":"#000000","font_color":"#ffffff","font_index":3,"font_scaling":1,"frames_index":1,"glowing_line_strength":0,"noise_strength":0,"scanlines":false,"screen_distortion":0.05,"screen_flickering":0.00}' + } } } diff --git a/app/Terminal.qml b/app/Terminal.qml index ec83572..778ed50 100644 --- a/app/Terminal.qml +++ b/app/Terminal.qml @@ -2,26 +2,71 @@ import QtQuick 2.0 import org.kde.konsole 0.1 -KTerminal { - font.pointSize: shadersettings.fontSize - font.family: shadersettings.font.name +Item{ + id: terminalContainer + property real blur: shadersettings.motion_blur + property real motionBlurCoefficient: (_minBlurCoefficient)*blur + (_maxBlurCoefficient)*(1.0-blur) + property real _minBlurCoefficient: 0.015 + property real _maxBlurCoefficient: 0.10 + KTerminal { + id: kterminal + font.pointSize: shadersettings.fontSize + font.family: shadersettings.font.name + width: parent.width + height: parent.height - colorScheme: "WhiteOnBlack" + colorScheme: "MyWhiteOnBlack" - session: KSession { - id: ksession - kbScheme: "linux" + session: KSession { + id: ksession + kbScheme: "linux" - onFinished: { - Qt.quit() + onFinished: { + Qt.quit() + } + } + + Component.onCompleted: { + font.pointSize = shadersettings.fontSize; + font.family = shadersettings.font.name; + forceActiveFocus(); } } - Component.onCompleted: { - font.pointSize = shadersettings.fontSize; - font.family = shadersettings.font.name; - console.log(shadersettings.font.name); - } + Loader{ + anchors.fill: parent + active: parent.blur !== 0 - Component.onDestruction: console.log("Destroy") + sourceComponent: Item{ + ShaderEffectSource{ + id: source + sourceItem: kterminal + hideSource: true + } + ShaderEffectSource{ + id: blurredSource + sourceItem: blurredterminal + recursive: true + live: true + } + ShaderEffect { + id: blurredterminal + anchors.fill: parent + property variant source: source + property variant blurredSource: blurredSource + z: 2 + fragmentShader: + "uniform lowp float qt_Opacity;" + + "uniform lowp sampler2D source;" + + "uniform lowp sampler2D blurredSource;" + + "varying highp vec2 qt_TexCoord0;" + + + "void main() {" + + " float sourceColor = texture2D(source, qt_TexCoord0).r * 512.0;" + + " float blurredSourceColor = texture2D(blurredSource, qt_TexCoord0).r * 512.0;" + + " gl_FragColor = vec4(vec3(floor(mix(blurredSourceColor, sourceColor, " + motionBlurCoefficient + "))) / 512.0, 1.0);" + + "}" + } + } + } } diff --git a/app/main.qml b/app/main.qml index e468129..a1082e5 100644 --- a/app/main.qml +++ b/app/main.qml @@ -98,10 +98,18 @@ ApplicationWindow{ Loader{ id: terminal + width: parent.width height: parent.height } + MouseArea{ + acceptedButtons: Qt.NoButton + anchors.fill: parent + onWheel: + wheel.angleDelta.y > 0 ? terminal.item.scrollUp() : terminal.item.scrollDown() + } + RadialGradient{ id: ambientreflection z: 2.0