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:
Filippo Scognamiglio 2013-12-23 03:14:12 +01:00
parent d5222b1302
commit 8bba1d6957
3 changed files with 119 additions and 76 deletions

View File

@ -67,6 +67,11 @@ ApplicationWindow {
onValueChanged: shadersettings.ambient_light = value;
Component.onCompleted: _value = shadersettings.ambient_light
}
SettingComponent{
name: "Screen distortion"
onValueChanged: shadersettings.screen_distortion = value;
Component.onCompleted: _value = shadersettings.screen_distortion;
}
}
}
}

View File

@ -37,6 +37,7 @@ ApplicationWindow{
title: qsTr("Terminal")
menuBar: MenuBar {
id: menubar
Menu {
title: qsTr("File")
MenuItem { text: "Close"; onTriggered: mainwindow.close()}
@ -57,19 +58,26 @@ ApplicationWindow{
visible: true
Item{
anchors.fill: parent
anchors.topMargin: 30 //Fix the constant
ShaderSettings{
id: shadersettings
}
ShaderEffectSource{
property double offset_top: 0.03
property double offset_bottom: 0.04
id: theSource
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 {
id: shadercontainer
anchors.fill: terminal
width: parent.width
height: parent.height
anchors.centerIn: parent
blending: true
z: 2
property color font_color: shadersettings.font_color
@ -172,23 +180,52 @@ ApplicationWindow{
vec4 added_color = (noise + randomPass) * font_color;
vec4 finalColor = color + added_color;
finalColor = mix(finalColor, background_color, 1.0 - scanline_alpha);
gl_FragColor = vec4(finalColor.rgb * inside, inside);
gl_FragColor = vec4(finalColor.rgb, 1.0);
}"
}
Rectangle{
z: 1
anchors.fill: parent
color: "black"
ShaderEffect{
z: 2.1
width: parent.width * 1.05
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{
id: frame
source: "../images/frame.png"
source: "../images/squared_frame.png"
anchors.centerIn: parent
width: parent.width * 1.05
height: parent.height * 1.05
z: 10
visible: true
opacity: shadersettings.ambient_light
}
@ -196,8 +233,8 @@ ApplicationWindow{
TerminalScreen {
id: terminal
anchors.centerIn: parent
width: mainwindow.width * 0.95
height: mainwindow.height * 0.93
width: mainwindow.width
height: mainwindow.height
visible: false
//FIXME: Ugly forced clear terminal at the beginning
@ -208,10 +245,11 @@ ApplicationWindow{
z: 4
anchors.fill: parent
cached: true
opacity: 0.25
opacity: 0.2
gradient: Gradient{
GradientStop{position: 0.0; color: shadersettings.font_color}
GradientStop{position: 1.0; color: shadersettings.background_color}
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 KiB