mirror of
https://github.com/Swordfish90/cool-retro-term.git
synced 2025-01-31 02:01:19 +00:00
New frame! Drawn using a shader, it is now possible to distort the frame
according to screen distortion (also added the setting)...
This commit is contained in:
parent
d5222b1302
commit
8bba1d6957
@ -67,6 +67,11 @@ ApplicationWindow {
|
|||||||
onValueChanged: shadersettings.ambient_light = value;
|
onValueChanged: shadersettings.ambient_light = value;
|
||||||
Component.onCompleted: _value = shadersettings.ambient_light
|
Component.onCompleted: _value = shadersettings.ambient_light
|
||||||
}
|
}
|
||||||
|
SettingComponent{
|
||||||
|
name: "Screen distortion"
|
||||||
|
onValueChanged: shadersettings.screen_distortion = value;
|
||||||
|
Component.onCompleted: _value = shadersettings.screen_distortion;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,7 @@ ApplicationWindow{
|
|||||||
title: qsTr("Terminal")
|
title: qsTr("Terminal")
|
||||||
|
|
||||||
menuBar: MenuBar {
|
menuBar: MenuBar {
|
||||||
|
id: menubar
|
||||||
Menu {
|
Menu {
|
||||||
title: qsTr("File")
|
title: qsTr("File")
|
||||||
MenuItem { text: "Close"; onTriggered: mainwindow.close()}
|
MenuItem { text: "Close"; onTriggered: mainwindow.close()}
|
||||||
@ -57,19 +58,26 @@ ApplicationWindow{
|
|||||||
|
|
||||||
visible: true
|
visible: true
|
||||||
|
|
||||||
|
Item{
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.topMargin: 30 //Fix the constant
|
||||||
ShaderSettings{
|
ShaderSettings{
|
||||||
id: shadersettings
|
id: shadersettings
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderEffectSource{
|
ShaderEffectSource{
|
||||||
|
property double offset_top: 0.03
|
||||||
|
property double offset_bottom: 0.04
|
||||||
id: theSource
|
id: theSource
|
||||||
sourceItem: terminal
|
sourceItem: terminal
|
||||||
//sourceRect: Qt.rect(-20, -20, terminal.width + 40, terminal.height + 40)
|
sourceRect: Qt.rect(-offset_top * terminal.width, -offset_top * terminal.height, terminal.width + offset_bottom * terminal.width, terminal.height + offset_bottom * terminal.height)
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderEffect {
|
ShaderEffect {
|
||||||
id: shadercontainer
|
id: shadercontainer
|
||||||
anchors.fill: terminal
|
width: parent.width
|
||||||
|
height: parent.height
|
||||||
|
anchors.centerIn: parent
|
||||||
blending: true
|
blending: true
|
||||||
z: 2
|
z: 2
|
||||||
property color font_color: shadersettings.font_color
|
property color font_color: shadersettings.font_color
|
||||||
@ -172,23 +180,52 @@ ApplicationWindow{
|
|||||||
vec4 added_color = (noise + randomPass) * font_color;
|
vec4 added_color = (noise + randomPass) * font_color;
|
||||||
vec4 finalColor = color + added_color;
|
vec4 finalColor = color + added_color;
|
||||||
finalColor = mix(finalColor, background_color, 1.0 - scanline_alpha);
|
finalColor = mix(finalColor, background_color, 1.0 - scanline_alpha);
|
||||||
gl_FragColor = vec4(finalColor.rgb * inside, inside);
|
gl_FragColor = vec4(finalColor.rgb, 1.0);
|
||||||
}"
|
}"
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle{
|
ShaderEffect{
|
||||||
z: 1
|
z: 2.1
|
||||||
anchors.fill: parent
|
width: parent.width * 1.05
|
||||||
color: "black"
|
height: parent.height * 1.05
|
||||||
|
anchors.centerIn: parent
|
||||||
|
|
||||||
|
property variant source: framesource
|
||||||
|
property real screen_distorsion: shadersettings.screen_distortion - 0.22
|
||||||
|
property real ambient_light: shadersettings.ambient_light
|
||||||
|
|
||||||
|
fragmentShader: "
|
||||||
|
uniform sampler2D source;
|
||||||
|
uniform highp float screen_distorsion;
|
||||||
|
uniform highp float ambient_light;
|
||||||
|
|
||||||
|
varying highp vec2 qt_TexCoord0;
|
||||||
|
|
||||||
|
vec2 distortCoordinates(vec2 coords){
|
||||||
|
vec2 cc = coords - vec2(0.5);
|
||||||
|
float dist = dot(cc, cc) * screen_distorsion;
|
||||||
|
return (coords + cc * (1.0 + dist) * dist);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main(){
|
||||||
|
vec2 coords = distortCoordinates(qt_TexCoord0);
|
||||||
|
vec4 txt_color = texture2D(source, coords);
|
||||||
|
vec4 final_color = mix(txt_color, vec4(vec3(0.0), 1.0), 1.0 - ambient_light);
|
||||||
|
gl_FragColor = vec4(final_color.rgb, txt_color.a);
|
||||||
|
}"
|
||||||
|
}
|
||||||
|
|
||||||
|
ShaderEffectSource{
|
||||||
|
id: framesource
|
||||||
|
sourceItem: frame
|
||||||
|
hideSource: true
|
||||||
|
live: false
|
||||||
}
|
}
|
||||||
|
|
||||||
Image{
|
Image{
|
||||||
id: frame
|
id: frame
|
||||||
source: "../images/frame.png"
|
source: "../images/squared_frame.png"
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
width: parent.width * 1.05
|
|
||||||
height: parent.height * 1.05
|
|
||||||
z: 10
|
|
||||||
visible: true
|
visible: true
|
||||||
opacity: shadersettings.ambient_light
|
opacity: shadersettings.ambient_light
|
||||||
}
|
}
|
||||||
@ -196,8 +233,8 @@ ApplicationWindow{
|
|||||||
TerminalScreen {
|
TerminalScreen {
|
||||||
id: terminal
|
id: terminal
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
width: mainwindow.width * 0.95
|
width: mainwindow.width
|
||||||
height: mainwindow.height * 0.93
|
height: mainwindow.height
|
||||||
visible: false
|
visible: false
|
||||||
|
|
||||||
//FIXME: Ugly forced clear terminal at the beginning
|
//FIXME: Ugly forced clear terminal at the beginning
|
||||||
@ -208,10 +245,11 @@ ApplicationWindow{
|
|||||||
z: 4
|
z: 4
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
cached: true
|
cached: true
|
||||||
opacity: 0.25
|
opacity: 0.2
|
||||||
gradient: Gradient{
|
gradient: Gradient{
|
||||||
GradientStop{position: 0.0; color: shadersettings.font_color}
|
GradientStop{position: 0.0; color: shadersettings.font_color}
|
||||||
GradientStop{position: 1.0; color: shadersettings.background_color}
|
GradientStop{position: 1.0; color: shadersettings.background_color}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
BIN
qml/images/squared_frame.png
Normal file
BIN
qml/images/squared_frame.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 676 KiB |
Loading…
x
Reference in New Issue
Block a user