b140299e50
Co-authored-by: mrange <marten_range@hotmail.com> I loved the pixel shaders in #7058, but that PR needed a bit of polish to be ready for ingestion. This PR is almost _exactly_ that PR, with some small changes. * It adds a new pre-profile setting `"experimental.pixelShaderPath"`, which lets the user set a pixel shader to use with the Terminal. - CHANGED FROM #7058: It does _not_ add any built-in shaders. - CHANGED FROM #7058: it will _override_ `experimental.retroTerminalEffect` * It adds a bunch of sample shaders in `samples/shaders`. Included: - A NOP shader as a base to build from. - An "invert" shader that inverts the colors, as a simple example - An "grayscale" shader that converts all colors to grayscale, as a simple example - An "raster bars" shader that draws some colored bars on the screen with a drop shadow, as a more involved example - The original retro terminal effects, as a more involved example - It also includes a broken shader, as an example of what heppens when the shader fails to compile - CHANGED FROM #7058: It does _not_ add the "retroII" shader we were all worried about. * When a shader fails to be found or fails to compile, we'll display an error dialog to the user with a relevant error message. - CHANGED FROM #7058: Originally, #7058 would display "error bars" on the screen. I've removed that, and had the Terminal disable the shader entirely then. * Renames the `toggleRetroEffect` action to `toggleShaderEffect`. (`toggleRetroEffect` is now an alias to `toggleShaderEffect`). This action will turn the shader OR the retro effects on/off. `toggleShaderEffect` works the way you'd expect it to, but the mental math on _how_ is a little weird. The logic is basically: ``` useShader = shaderEffectsEnabled ? (pixelShaderProvided ? pixelShader : (retroEffectEnabled ? retroEffect : null ) ) : null ``` and `toggleShaderEffect` toggles `shaderEffectsEnabled`. * If you've got both a shader and retro enabled, `toggleShaderEffect` will toggle between the shader on/off. * If you've got a shader and retro disabled, `toggleShaderEffect` will toggle between the shader on/off. References #6191 References #7058 Closes #7013 Closes #3930 "Add setting to retro terminal shader to control blur radius, color" Closes #3929 "Add setting to retro terminal shader to enable drawing scanlines" - At this point, just roll your own version of the shader.
117 lines
4.6 KiB
Plaintext
117 lines
4.6 KiB
Plaintext
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
|
|
import "IMouseWheelListener.idl";
|
|
import "IControlSettings.idl";
|
|
|
|
namespace Microsoft.Terminal.TerminalControl
|
|
{
|
|
delegate void TitleChangedEventArgs(String newTitle);
|
|
delegate void FontSizeChangedEventArgs(Int32 width, Int32 height, Boolean isInitialChange);
|
|
delegate void ScrollPositionChangedEventArgs(Int32 viewTop, Int32 viewHeight, Int32 bufferLength);
|
|
|
|
// C++/winrt makes it difficult to share this idl between two projects,
|
|
// Instead, we just pin the uuid and include it in both TermControl and App
|
|
// If you update this one, please update TerminalApp\IDirectKeyListener.idl.
|
|
// If you change this interface, please update the guid.
|
|
// If you press F7 or Alt and get a runtime error, go make sure both copies are the same.
|
|
[uuid("0ddf4edc-3fda-4dee-97ca-a417ee3dd510")] interface IDirectKeyListener {
|
|
Boolean OnDirectKeyEvent(UInt32 vkey, UInt8 scanCode, Boolean down);
|
|
};
|
|
|
|
[flags]
|
|
enum CopyFormat
|
|
{
|
|
HTML = 0x1,
|
|
RTF = 0x2,
|
|
All = 0xffffffff
|
|
};
|
|
|
|
runtimeclass CopyToClipboardEventArgs
|
|
{
|
|
String Text { get; };
|
|
String Html { get; };
|
|
String Rtf { get; };
|
|
Windows.Foundation.IReference<CopyFormat> Formats { get; };
|
|
}
|
|
|
|
runtimeclass PasteFromClipboardEventArgs
|
|
{
|
|
void HandleClipboardData(String data);
|
|
}
|
|
|
|
runtimeclass OpenHyperlinkEventArgs
|
|
{
|
|
String Uri { get; };
|
|
}
|
|
|
|
enum NoticeLevel
|
|
{
|
|
Debug = 10,
|
|
Info = 20,
|
|
Warning = 30,
|
|
Error = 40,
|
|
};
|
|
|
|
runtimeclass NoticeEventArgs
|
|
{
|
|
NoticeLevel Level { get; };
|
|
String Message { get; };
|
|
}
|
|
|
|
[default_interface] runtimeclass TermControl : Windows.UI.Xaml.Controls.UserControl, IDirectKeyListener, IMouseWheelListener
|
|
{
|
|
TermControl(Microsoft.Terminal.TerminalControl.IControlSettings settings, Microsoft.Terminal.TerminalConnection.ITerminalConnection connection);
|
|
|
|
static Windows.Foundation.Size GetProposedDimensions(Microsoft.Terminal.TerminalControl.IControlSettings settings, UInt32 dpi);
|
|
|
|
void UpdateSettings(Microsoft.Terminal.TerminalControl.IControlSettings newSettings);
|
|
|
|
Microsoft.Terminal.TerminalControl.IControlSettings Settings { get; };
|
|
|
|
event TitleChangedEventArgs TitleChanged;
|
|
event FontSizeChangedEventArgs FontSizeChanged;
|
|
event Windows.Foundation.TypedEventHandler<TermControl, CopyToClipboardEventArgs> CopyToClipboard;
|
|
event Windows.Foundation.TypedEventHandler<TermControl, PasteFromClipboardEventArgs> PasteFromClipboard;
|
|
event Windows.Foundation.TypedEventHandler<TermControl, OpenHyperlinkEventArgs> OpenHyperlink;
|
|
event Windows.Foundation.TypedEventHandler<TermControl, Object> SetTaskbarProgress;
|
|
event Windows.Foundation.TypedEventHandler<TermControl, NoticeEventArgs> RaiseNotice;
|
|
event Windows.Foundation.TypedEventHandler<Object, Object> WarningBell;
|
|
|
|
event Windows.Foundation.TypedEventHandler<TermControl, Windows.UI.Xaml.RoutedEventArgs> Initialized;
|
|
// This is an event handler forwarder for the underlying connection.
|
|
// We expose this and ConnectionState here so that it might eventually be data bound.
|
|
event Windows.Foundation.TypedEventHandler<TermControl, IInspectable> ConnectionStateChanged;
|
|
Microsoft.Terminal.TerminalConnection.ConnectionState ConnectionState { get; };
|
|
|
|
String Title { get; };
|
|
|
|
Boolean CopySelectionToClipboard(Boolean singleLine, Windows.Foundation.IReference<CopyFormat> formats);
|
|
void PasteTextFromClipboard();
|
|
void Close();
|
|
Windows.Foundation.Size CharacterDimensions { get; };
|
|
Windows.Foundation.Size MinimumSize { get; };
|
|
Single SnapDimensionToGrid(Boolean widthOrHeight, Single dimension);
|
|
|
|
void ScrollViewport(Int32 viewTop);
|
|
Int32 GetScrollOffset();
|
|
Int32 GetViewHeight();
|
|
event ScrollPositionChangedEventArgs ScrollPositionChanged;
|
|
|
|
void CreateSearchBoxControl();
|
|
|
|
void AdjustFontSize(Int32 fontSizeDelta);
|
|
void ResetFontSize();
|
|
|
|
void ToggleShaderEffects();
|
|
void SendInput(String input);
|
|
|
|
void TaskbarProgressChanged();
|
|
UInt64 TaskbarState { get; };
|
|
UInt64 TaskbarProgress { get; };
|
|
|
|
Windows.Foundation.IReference<Windows.UI.Color> TabColor { get; };
|
|
event Windows.Foundation.TypedEventHandler<Object, Object> TabColorChanged;
|
|
}
|
|
}
|