diff --git a/qml/cool-old-term/ShaderSettings.qml b/qml/cool-old-term/ShaderSettings.qml index 80b6fde..b1539c3 100644 --- a/qml/cool-old-term/ShaderSettings.qml +++ b/qml/cool-old-term/ShaderSettings.qml @@ -1,9 +1,11 @@ import QtQuick 2.0 Item{ - property real noise_strength: 0.25 - property rect base_color: Qt.rect(1.0, 0.9, 0.0, 1.0) + property color background_color: "#000000" + property color font_color: "#ffff55" + + property real noise_strength: 0.1 property real screen_distortion: 0.15 - property real glowing_line_strength: 0.7 + property real glowing_line_strength: 0.4 //property real faulty_screen_prob: 1.0 } diff --git a/qml/cool-old-term/TerminalScreen.qml b/qml/cool-old-term/TerminalScreen.qml index 8ba120e..ca40c3b 100644 --- a/qml/cool-old-term/TerminalScreen.qml +++ b/qml/cool-old-term/TerminalScreen.qml @@ -11,8 +11,9 @@ TerminalScreen { property var lineComponent : Qt.createComponent("TerminalLine.qml") - font.family: "monospace" - font.pointSize: 17 + font.family: "Pet Me" + font.pointSize: 14 + //font.bold: true Text { id: fontMetricText @@ -25,7 +26,7 @@ TerminalScreen { Rectangle { id: background anchors.fill: parent - color: "black" + color: shadersettings.background_color } Connections { @@ -115,18 +116,18 @@ TerminalScreen { height: fontHeight x: 0 y: 0 - color: "white" - SequentialAnimation on opacity{ - NumberAnimation{from: 0; to: 1; duration: 500} - NumberAnimation{from: 1; to: 0; duration: 500} - loops: Animation.Infinite - } + color: shadersettings.font_color +// SequentialAnimation on opacity{ +// NumberAnimation{from: 0; to: 1; duration: 500} +// NumberAnimation{from: 1; to: 0; duration: 500} +// loops: Animation.Infinite +// } } Rectangle { id: flash anchors.fill: parent - color: "grey" + color: shadersettings.font_color opacity: 0 SequentialAnimation { id: flashAnimation diff --git a/qml/cool-old-term/TerminalText.qml b/qml/cool-old-term/TerminalText.qml index 0780b9a..cc51a80 100644 --- a/qml/cool-old-term/TerminalText.qml +++ b/qml/cool-old-term/TerminalText.qml @@ -48,7 +48,7 @@ ObjectDestructItem { id: textElement anchors.fill: parent text: objectHandle.text - color: "white" //objectHandle.foregroundColor + color: shadersettings.font_color font: textItem.font textFormat: Text.PlainText } diff --git a/qml/cool-old-term/main.qml b/qml/cool-old-term/main.qml index b85a15b..00be731 100644 --- a/qml/cool-old-term/main.qml +++ b/qml/cool-old-term/main.qml @@ -27,13 +27,14 @@ import QtQuick 2.1 import QtQuick.Window 2.1 import QtQuick.Controls 1.0 +import QtGraphicalEffects 1.0 ApplicationWindow{ id: mainwindow width: 1024 height: 768 - title: terminal.screen.title ? terminal.screen.title : qsTr("Terminal") + title: qsTr("Terminal") visible: true @@ -51,8 +52,9 @@ ApplicationWindow{ id: shadercontainer anchors.fill: parent blending: false - z: 10 - property rect base_color: shadersettings.base_color + z: 2 + property color font_color: shadersettings.font_color + property color background_color: shadersettings.background_color property variant source: theSource property size txt_Size: Qt.size(terminal.width, terminal.height) property real time: 0 @@ -60,6 +62,8 @@ ApplicationWindow{ property real noise_strength: shadersettings.noise_strength property real screen_distorsion: shadersettings.screen_distortion property real glowing_line_strength: shadersettings.glowing_line_strength + property real deltay: 1.0 / terminal.height + property real deltax: 1.0 / terminal.width //property real faulty_screen_prob: shadersettings.faulty_screen_prob NumberAnimation on time{ @@ -77,13 +81,16 @@ ApplicationWindow{ uniform highp vec2 txt_Size; varying highp vec2 qt_TexCoord0; - uniform highp vec4 base_color; + uniform highp vec4 font_color; + uniform highp vec4 background_color; uniform highp float noise_strength; uniform highp float screen_distorsion; uniform highp float glowing_line_strength; + uniform highp float deltax; + uniform highp float deltay; float rand(vec2 co, float time){ - return fract(sin(dot(co.xy ,vec2(1.129898 * time ,78.233))) * 43758.5453); + return fract(sin(dot(co.xy ,vec2(0.37898 * time ,0.78233))) * 437.5875453); } float stepNoise(vec2 p){ @@ -101,30 +108,40 @@ ApplicationWindow{ return (coords + cc * (1.0 + dist) * dist); } - float drawGlowEffect(vec2 pos){ - float dist = length(pos - vec2(0.5, 0.5)) * 1.5; - return 1.0 - dist; - } - float randomPass(vec2 coords){ return fract(smoothstep(-0.2, 0.0, coords.y - time * 0.03)) * glowing_line_strength; } + vec4 blurredColor(sampler2D source, vec2 coords){ + vec4 sum = vec4(0.0); + sum += texture2D(source, coords - vec2(-deltax, -deltay)) * 0.11; + sum += texture2D(source, coords - vec2(-deltax, 0.0)) * 0.11; + sum += texture2D(source, coords - vec2(-deltax, +deltay)) * 0.11; + sum += texture2D(source, coords - vec2(0.0, -deltay)) * 0.11; + sum += texture2D(source, coords - vec2(0.0, 0.0)) * 0.11; + sum += texture2D(source, coords - vec2(0.0, +deltay)) * 0.11; + sum += texture2D(source, coords - vec2(+deltax, -deltay)) * 0.11; + sum += texture2D(source, coords - vec2(+deltax, 0.0)) * 0.11; + sum += texture2D(source, coords - vec2(+deltax, +deltay)) * 0.11; + return sum; + } + void main() { vec2 coords = distortCoordinates(qt_TexCoord0); //Emulate faulty screen //coords.x = coords.x + sin(coords.y * 5.0) * 0.05 * step(faulty_screen_prob, rand(txt_Size, floor(time))); - vec4 color = texture2D(source, coords); + //vec4 color = texture2D(source, coords); + vec4 color = blurredColor(source, coords); float alpha = getScanlineIntensity(coords) * step(0.0, coords.x) * step(-1.0, -coords.x) * step(0.0, coords.y) * step(-1.0, -coords.y); - float glow = drawGlowEffect(qt_TexCoord0)*0.3; + //float alpha = 1.0; float noise = stepNoise(coords) * noise_strength; - float randomPass = randomPass(coords) * 0.3; - vec4 artificialColor = vec4((glow + randomPass), (glow + randomPass), (glow + randomPass), 0.0); - vec4 finalColor = base_color * color + artificialColor * base_color; + float randomPass = randomPass(coords) * glowing_line_strength; + vec4 added_color = (noise + randomPass) * font_color; + vec4 finalColor = color + added_color; - gl_FragColor = mix(finalColor, vec4(vec3(0.0), 1.0), 1.0 - alpha + noise); + gl_FragColor = mix(finalColor, background_color, 1.0 - alpha); }" } @@ -132,5 +149,20 @@ ApplicationWindow{ id: terminal width: mainwindow.width height: mainwindow.height + visible: false + + //FIXME: Ugly forced clear terminal at the beginning + Component.onCompleted: terminal.screen.sendKey("l", 76, 67108864); + } + + RadialGradient{ + z: 4 + anchors.fill: terminal + cached: true + opacity: 0.3 + gradient: Gradient{ + GradientStop{position: 0.0; color: shadersettings.font_color} + GradientStop{position: 0.7; color: shadersettings.background_color} + } } }