mirror of
				https://github.com/Swordfish90/cool-retro-term.git
				synced 2025-10-31 07:04:20 +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:
		| @@ -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 | 
		Reference in New Issue
	
	Block a user