diff --git a/src/cascadia/TerminalApp/ActionAndArgs.cpp b/src/cascadia/TerminalApp/ActionAndArgs.cpp index 9ba804b384d..f0c40bcf5c3 100644 --- a/src/cascadia/TerminalApp/ActionAndArgs.cpp +++ b/src/cascadia/TerminalApp/ActionAndArgs.cpp @@ -28,6 +28,7 @@ static constexpr std::string_view SplitPaneKey{ "splitPane" }; static constexpr std::string_view ResizePaneKey{ "resizePane" }; static constexpr std::string_view MoveFocusKey{ "moveFocus" }; static constexpr std::string_view FindKey{ "find" }; +static constexpr std::string_view ToggleRetroEffectKey{ "toggleRetroEffect" }; static constexpr std::string_view ToggleFullscreenKey{ "toggleFullscreen" }; static constexpr std::string_view SetTabColorKey{ "setTabColor" }; static constexpr std::string_view OpenTabColorPickerKey{ "openTabColorPicker" }; @@ -71,6 +72,7 @@ namespace winrt::TerminalApp::implementation { ResizePaneKey, ShortcutAction::ResizePane }, { MoveFocusKey, ShortcutAction::MoveFocus }, { OpenSettingsKey, ShortcutAction::OpenSettings }, + { ToggleRetroEffectKey, ShortcutAction::ToggleRetroEffect }, { ToggleFullscreenKey, ShortcutAction::ToggleFullscreen }, { SplitPaneKey, ShortcutAction::SplitPane }, { SetTabColorKey, ShortcutAction::SetTabColor }, diff --git a/src/cascadia/TerminalApp/AppActionHandlers.cpp b/src/cascadia/TerminalApp/AppActionHandlers.cpp index e972002a8a3..68cea9eb89b 100644 --- a/src/cascadia/TerminalApp/AppActionHandlers.cpp +++ b/src/cascadia/TerminalApp/AppActionHandlers.cpp @@ -231,6 +231,14 @@ namespace winrt::TerminalApp::implementation args.Handled(true); } + void TerminalPage::_HandleToggleRetroEffect(const IInspectable& /*sender*/, + const TerminalApp::ActionEventArgs& args) + { + const auto termControl = _GetActiveControl(); + termControl.ToggleRetroEffect(); + args.Handled(true); + } + void TerminalPage::_HandleToggleFullscreen(const IInspectable& /*sender*/, const TerminalApp::ActionEventArgs& args) { diff --git a/src/cascadia/TerminalApp/ShortcutActionDispatch.cpp b/src/cascadia/TerminalApp/ShortcutActionDispatch.cpp index f36654dd0ce..2f3198d4abc 100644 --- a/src/cascadia/TerminalApp/ShortcutActionDispatch.cpp +++ b/src/cascadia/TerminalApp/ShortcutActionDispatch.cpp @@ -154,6 +154,11 @@ namespace winrt::TerminalApp::implementation _ResetFontSizeHandlers(*this, *eventArgs); break; } + case ShortcutAction::ToggleRetroEffect: + { + _ToggleRetroEffectHandlers(*this, *eventArgs); + break; + } case ShortcutAction::ToggleFullscreen: { _ToggleFullscreenHandlers(*this, *eventArgs); diff --git a/src/cascadia/TerminalApp/ShortcutActionDispatch.h b/src/cascadia/TerminalApp/ShortcutActionDispatch.h index 5a70f2abd10..92da677645a 100644 --- a/src/cascadia/TerminalApp/ShortcutActionDispatch.h +++ b/src/cascadia/TerminalApp/ShortcutActionDispatch.h @@ -46,6 +46,7 @@ namespace winrt::TerminalApp::implementation TYPED_EVENT(ResizePane, TerminalApp::ShortcutActionDispatch, TerminalApp::ActionEventArgs); TYPED_EVENT(Find, TerminalApp::ShortcutActionDispatch, TerminalApp::ActionEventArgs); TYPED_EVENT(MoveFocus, TerminalApp::ShortcutActionDispatch, TerminalApp::ActionEventArgs); + TYPED_EVENT(ToggleRetroEffect, TerminalApp::ShortcutActionDispatch, TerminalApp::ActionEventArgs); TYPED_EVENT(ToggleFullscreen, TerminalApp::ShortcutActionDispatch, TerminalApp::ActionEventArgs); TYPED_EVENT(ToggleCommandPalette, TerminalApp::ShortcutActionDispatch, TerminalApp::ActionEventArgs); TYPED_EVENT(SetTabColor, TerminalApp::ShortcutActionDispatch, TerminalApp::ActionEventArgs); diff --git a/src/cascadia/TerminalApp/ShortcutActionDispatch.idl b/src/cascadia/TerminalApp/ShortcutActionDispatch.idl index 89d4aabbfe9..b5a7f821953 100644 --- a/src/cascadia/TerminalApp/ShortcutActionDispatch.idl +++ b/src/cascadia/TerminalApp/ShortcutActionDispatch.idl @@ -31,6 +31,7 @@ namespace TerminalApp ResizePane, MoveFocus, Find, + ToggleRetroEffect, ToggleFullscreen, SetTabColor, OpenTabColorPicker, @@ -73,6 +74,7 @@ namespace TerminalApp event Windows.Foundation.TypedEventHandler ResizePane; event Windows.Foundation.TypedEventHandler Find; event Windows.Foundation.TypedEventHandler MoveFocus; + event Windows.Foundation.TypedEventHandler ToggleRetroEffect; event Windows.Foundation.TypedEventHandler ToggleFullscreen; event Windows.Foundation.TypedEventHandler ToggleCommandPalette; event Windows.Foundation.TypedEventHandler SetTabColor; diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index ad4e8e26b44..829c3639090 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -841,6 +841,7 @@ namespace winrt::TerminalApp::implementation _actionDispatch->AdjustFontSize({ this, &TerminalPage::_HandleAdjustFontSize }); _actionDispatch->Find({ this, &TerminalPage::_HandleFind }); _actionDispatch->ResetFontSize({ this, &TerminalPage::_HandleResetFontSize }); + _actionDispatch->ToggleRetroEffect({ this, &TerminalPage::_HandleToggleRetroEffect }); _actionDispatch->ToggleFullscreen({ this, &TerminalPage::_HandleToggleFullscreen }); _actionDispatch->ToggleCommandPalette({ this, &TerminalPage::_HandleToggleCommandPalette }); _actionDispatch->SetTabColor({ this, &TerminalPage::_HandleSetTabColor }); diff --git a/src/cascadia/TerminalApp/TerminalPage.h b/src/cascadia/TerminalApp/TerminalPage.h index 96ed5a7caa9..d4d21c88aef 100644 --- a/src/cascadia/TerminalApp/TerminalPage.h +++ b/src/cascadia/TerminalApp/TerminalPage.h @@ -205,6 +205,7 @@ namespace winrt::TerminalApp::implementation void _HandleAdjustFontSize(const IInspectable& sender, const TerminalApp::ActionEventArgs& args); void _HandleFind(const IInspectable& sender, const TerminalApp::ActionEventArgs& args); void _HandleResetFontSize(const IInspectable& sender, const TerminalApp::ActionEventArgs& args); + void _HandleToggleRetroEffect(const IInspectable& sender, const TerminalApp::ActionEventArgs& args); void _HandleToggleFullscreen(const IInspectable& sender, const TerminalApp::ActionEventArgs& args); void _HandleSetTabColor(const IInspectable& sender, const TerminalApp::ActionEventArgs& args); void _HandleOpenTabColorPicker(const IInspectable& sender, const TerminalApp::ActionEventArgs& args); diff --git a/src/cascadia/TerminalControl/TermControl.cpp b/src/cascadia/TerminalControl/TermControl.cpp index 0a73fab2e82..f4d9cae71d4 100644 --- a/src/cascadia/TerminalControl/TermControl.cpp +++ b/src/cascadia/TerminalControl/TermControl.cpp @@ -297,6 +297,11 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation } } } + void TermControl::ToggleRetroEffect() + { + auto lock = _terminal->LockForWriting(); + _renderEngine->SetRetroTerminalEffects(!_renderEngine->GetRetroTerminalEffects()); + } // Method Description: // - Style our UI elements based on the values in our _settings, and set up diff --git a/src/cascadia/TerminalControl/TermControl.h b/src/cascadia/TerminalControl/TermControl.h index d8ccbb2fab3..6ab5b19d36b 100644 --- a/src/cascadia/TerminalControl/TermControl.h +++ b/src/cascadia/TerminalControl/TermControl.h @@ -78,6 +78,8 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation void AdjustFontSize(int fontSizeDelta); void ResetFontSize(); + void ToggleRetroEffect(); + winrt::fire_and_forget RenderEngineSwapChainChanged(); void _AttachDxgiSwapChainToXaml(IDXGISwapChain1* swapChain); winrt::fire_and_forget _RendererEnteredErrorState(); diff --git a/src/cascadia/TerminalControl/TermControl.idl b/src/cascadia/TerminalControl/TermControl.idl index 7c8712f4242..0d99a87b530 100644 --- a/src/cascadia/TerminalControl/TermControl.idl +++ b/src/cascadia/TerminalControl/TermControl.idl @@ -68,5 +68,7 @@ namespace Microsoft.Terminal.TerminalControl void AdjustFontSize(Int32 fontSizeDelta); void ResetFontSize(); + + void ToggleRetroEffect(); } } diff --git a/src/renderer/dx/DxRenderer.cpp b/src/renderer/dx/DxRenderer.cpp index 5fe7cd1ff7d..333d4b0997a 100644 --- a/src/renderer/dx/DxRenderer.cpp +++ b/src/renderer/dx/DxRenderer.cpp @@ -785,6 +785,11 @@ void DxEngine::SetCallback(std::function pfn) _pfn = pfn; } +bool DxEngine::GetRetroTerminalEffects() const noexcept +{ + return _retroTerminalEffects; +} + void DxEngine::SetRetroTerminalEffects(bool enable) noexcept try { diff --git a/src/renderer/dx/DxRenderer.hpp b/src/renderer/dx/DxRenderer.hpp index b499838372c..5bd24df1cfb 100644 --- a/src/renderer/dx/DxRenderer.hpp +++ b/src/renderer/dx/DxRenderer.hpp @@ -56,6 +56,7 @@ namespace Microsoft::Console::Render void SetCallback(std::function pfn); + bool GetRetroTerminalEffects() const noexcept; void SetRetroTerminalEffects(bool enable) noexcept; void SetForceFullRepaintRendering(bool enable) noexcept;