CrtTextBox is an Avalonia C# project that enhances a standard TextBox control with a custom SKSL shader, giving it the appearance of a retro CRT screen. This effect adds a nostalgic touch to your UI with features like fish-eye distortion, scan lines, vignette, screen jitter, background noise, and a scrolling electron bar.
It makes use of a custom ShaderControl
control, allowing any SKSL shader code to be applied to a source Avalonia UI control.
The CrtTextBox
example demonstrate how to use it with a TextBox
, but any other source control can be used.
-
Retro CRT Look: The shader applies various effects to create a convincing retro CRT display, including:
- Fish-eye distortion
- Scan lines
- Vignette effect
- Screen jitter
- Background noise
- Scrolling electron bar
- Monitor 'surround' with screen reflection
-
Cross-Platform Compatibility: Built with Avalonia, ensuring compatibility across Windows, MacOS, and Linux.
-
Customizable: The shader can be easily integrated into any Avalonia application and modified to suit different visual styles.
- .NET compatible IDE such as JetBrains Rider or Visual Studio 2022.
- Basic knowledge of C# and Avalonia UI.
- Clone the repository from GitHub.
- Open the solution in your IDE.
- Build and run the project.
The main view is taken up with the shader code itself. Feel free to modify it and press F5
to apply changes. Right-click outside of the text area to switch Themes.
Check out the Themes
folder in the source tree. Modify the code to toggle features, or create your own theme from scratch.
The ShaderControl
object is a standalone class and can be copied into your own project, and applied to any control with any shader code.
- Add
ShaderControl
to your AXAML. - From the code-behind, set the
ControlSource
property to the UI control you wish to apply the shader to. - Set the
FPS
property, which determines the frequency the source control is sampled. - Set
ShaderUri
to point to the location of your SKSL shader code. Usecrt.sksl
as a reference.
Custom uniform
values can be passed into the shader code using ShaderControl.AddUniform(name, value)
.
CrtTextBox is an open-source project, and contributions are welcome. If you have ideas for new features, improvements, or bug fixes, feel free to submit a pull request. Please note that this is a side project, so responses might not be immediate.
- Created with help from the blog: Avalonia with Fragment Shaders
- ...based on work by Wiesław Šoltés.
The project is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
Follow me on Twitter for more updates: @deanthecoder.