From aea432712b52894d0448845b857371d3fd7df3e3 Mon Sep 17 00:00:00 2001 From: Mike Griese Date: Thu, 21 May 2020 15:03:26 -0500 Subject: [PATCH 1/2] Just replace everything with GETSET_PROPERTY --- .../TerminalSettings/TerminalSettings.cpp | 390 ------------------ .../TerminalSettings/terminalsettings.h | 173 +++----- 2 files changed, 55 insertions(+), 508 deletions(-) diff --git a/src/cascadia/TerminalSettings/TerminalSettings.cpp b/src/cascadia/TerminalSettings/TerminalSettings.cpp index b3b90ea98ac..e811ddf2a07 100644 --- a/src/cascadia/TerminalSettings/TerminalSettings.cpp +++ b/src/cascadia/TerminalSettings/TerminalSettings.cpp @@ -3,81 +3,11 @@ #include "pch.h" #include "TerminalSettings.h" -#include #include "TerminalSettings.g.cpp" namespace winrt::Microsoft::Terminal::Settings::implementation { - // Disable "default constructor may not throw." - // We put default values into the hstrings here, which allocates and could throw. - // Working around that situation is more headache than it's worth at the moment. -#pragma warning(suppress : 26455) - TerminalSettings::TerminalSettings() : - _defaultForeground{ DEFAULT_FOREGROUND_WITH_ALPHA }, - _defaultBackground{ DEFAULT_BACKGROUND_WITH_ALPHA }, - _selectionBackground{ DEFAULT_FOREGROUND }, - _colorTable{}, - _historySize{ DEFAULT_HISTORY_SIZE }, - _initialRows{ 30 }, - _initialCols{ 80 }, - _rowsToScroll{ 0 }, - _snapOnInput{ true }, - _cursorColor{ DEFAULT_CURSOR_COLOR }, - _cursorShape{ CursorStyle::Vintage }, - _cursorHeight{ DEFAULT_CURSOR_HEIGHT }, - _wordDelimiters{ DEFAULT_WORD_DELIMITERS }, - _copyOnSelect{ false }, - _profileName{}, - _useAcrylic{ false }, - _tintOpacity{ 0.5 }, - _padding{ DEFAULT_PADDING }, - _fontFace{ DEFAULT_FONT_FACE }, - _fontSize{ DEFAULT_FONT_SIZE }, - _fontWeight{ DEFAULT_FONT_WEIGHT }, - _backgroundImage{}, - _backgroundImageOpacity{ 1.0 }, - _backgroundImageStretchMode{ winrt::Windows::UI::Xaml::Media::Stretch::UniformToFill }, - _backgroundImageHorizontalAlignment{ winrt::Windows::UI::Xaml::HorizontalAlignment::Center }, - _backgroundImageVerticalAlignment{ winrt::Windows::UI::Xaml::VerticalAlignment::Center }, - _keyBindings{ nullptr }, - _scrollbarState{ ScrollbarState::Visible }, - _antialiasingMode{ TextAntialiasingMode::Grayscale }, - _forceFullRepaintRendering{ false }, - _softwareRendering{ false } - { - } - - uint32_t TerminalSettings::DefaultForeground() noexcept - { - return _defaultForeground; - } - - void TerminalSettings::DefaultForeground(uint32_t value) noexcept - { - _defaultForeground = value; - } - - uint32_t TerminalSettings::DefaultBackground() noexcept - { - return _defaultBackground; - } - - void TerminalSettings::DefaultBackground(uint32_t value) noexcept - { - _defaultBackground = value; - } - - uint32_t TerminalSettings::SelectionBackground() noexcept - { - return _selectionBackground; - } - - void TerminalSettings::SelectionBackground(uint32_t value) noexcept - { - _selectionBackground = value; - } - uint32_t TerminalSettings::GetColorTableEntry(int32_t index) const noexcept { return _colorTable.at(index); @@ -90,36 +20,6 @@ namespace winrt::Microsoft::Terminal::Settings::implementation _colorTable.at(index) = value; } - int32_t TerminalSettings::HistorySize() noexcept - { - return _historySize; - } - - void TerminalSettings::HistorySize(int32_t value) noexcept - { - _historySize = value; - } - - int32_t TerminalSettings::InitialRows() noexcept - { - return _initialRows; - } - - void TerminalSettings::InitialRows(int32_t value) noexcept - { - _initialRows = value; - } - - int32_t TerminalSettings::InitialCols() noexcept - { - return _initialCols; - } - - void TerminalSettings::InitialCols(int32_t value) noexcept - { - _initialCols = value; - } - int32_t TerminalSettings::RowsToScroll() noexcept { if (_rowsToScroll != 0) @@ -139,294 +39,4 @@ namespace winrt::Microsoft::Terminal::Settings::implementation _rowsToScroll = value; } - bool TerminalSettings::SnapOnInput() noexcept - { - return _snapOnInput; - } - - void TerminalSettings::SnapOnInput(bool value) noexcept - { - _snapOnInput = value; - } - - uint32_t TerminalSettings::CursorColor() noexcept - { - return _cursorColor; - } - - void TerminalSettings::CursorColor(uint32_t value) noexcept - { - _cursorColor = value; - } - - Settings::CursorStyle TerminalSettings::CursorShape() const noexcept - { - return _cursorShape; - } - - void TerminalSettings::CursorShape(Settings::CursorStyle const& value) noexcept - { - _cursorShape = value; - } - - uint32_t TerminalSettings::CursorHeight() noexcept - { - return _cursorHeight; - } - - void TerminalSettings::CursorHeight(uint32_t value) noexcept - { - _cursorHeight = value; - } - - hstring TerminalSettings::WordDelimiters() - { - return _wordDelimiters; - } - - void TerminalSettings::WordDelimiters(hstring const& value) - { - _wordDelimiters = value; - } - - bool TerminalSettings::CopyOnSelect() noexcept - { - return _copyOnSelect; - } - - void TerminalSettings::CopyOnSelect(bool value) noexcept - { - _copyOnSelect = value; - } - - void TerminalSettings::ProfileName(hstring const& value) - { - _profileName = value; - } - - hstring TerminalSettings::ProfileName() - { - return _profileName; - } - - bool TerminalSettings::UseAcrylic() noexcept - { - return _useAcrylic; - } - - void TerminalSettings::UseAcrylic(bool value) noexcept - { - _useAcrylic = value; - } - - double TerminalSettings::TintOpacity() noexcept - { - return _tintOpacity; - } - - void TerminalSettings::TintOpacity(double value) noexcept - { - _tintOpacity = value; - } - - hstring TerminalSettings::Padding() - { - return _padding; - } - - void TerminalSettings::Padding(hstring value) - { - _padding = value; - } - - hstring TerminalSettings::FontFace() - { - return _fontFace; - } - - void TerminalSettings::FontFace(hstring const& value) - { - _fontFace = value; - } - - int32_t TerminalSettings::FontSize() noexcept - { - return _fontSize; - } - - void TerminalSettings::FontSize(int32_t value) noexcept - { - _fontSize = value; - } - - winrt::Windows::UI::Text::FontWeight TerminalSettings::FontWeight() noexcept - { - return _fontWeight; - } - - void TerminalSettings::FontWeight(winrt::Windows::UI::Text::FontWeight value) noexcept - { - _fontWeight = value; - } - - void TerminalSettings::BackgroundImage(hstring const& value) - { - _backgroundImage = value; - } - - hstring TerminalSettings::BackgroundImage() - { - return _backgroundImage; - } - - void TerminalSettings::BackgroundImageOpacity(double value) noexcept - { - _backgroundImageOpacity = value; - } - - double TerminalSettings::BackgroundImageOpacity() noexcept - { - return _backgroundImageOpacity; - } - - winrt::Windows::UI::Xaml::Media::Stretch TerminalSettings::BackgroundImageStretchMode() noexcept - { - return _backgroundImageStretchMode; - } - - void TerminalSettings::BackgroundImageStretchMode(winrt::Windows::UI::Xaml::Media::Stretch value) noexcept - { - _backgroundImageStretchMode = value; - } - - winrt::Windows::UI::Xaml::HorizontalAlignment TerminalSettings::BackgroundImageHorizontalAlignment() noexcept - { - return _backgroundImageHorizontalAlignment; - } - - void TerminalSettings::BackgroundImageHorizontalAlignment(winrt::Windows::UI::Xaml::HorizontalAlignment value) noexcept - { - _backgroundImageHorizontalAlignment = value; - } - - winrt::Windows::UI::Xaml::VerticalAlignment TerminalSettings::BackgroundImageVerticalAlignment() noexcept - { - return _backgroundImageVerticalAlignment; - } - - void TerminalSettings::BackgroundImageVerticalAlignment(winrt::Windows::UI::Xaml::VerticalAlignment value) noexcept - { - _backgroundImageVerticalAlignment = value; - } - - Settings::IKeyBindings TerminalSettings::KeyBindings() noexcept - { - return _keyBindings; - } - - void TerminalSettings::KeyBindings(Settings::IKeyBindings const& value) noexcept - { - _keyBindings = value; - } - - hstring TerminalSettings::Commandline() - { - return _commandline; - } - - void TerminalSettings::Commandline(hstring const& value) - { - _commandline = value; - } - - hstring TerminalSettings::StartingDirectory() - { - return _startingDir; - } - - void TerminalSettings::StartingDirectory(hstring const& value) - { - _startingDir = value; - } - - hstring TerminalSettings::StartingTitle() - { - return _startingTitle; - } - - void TerminalSettings::StartingTitle(hstring const& value) - { - _startingTitle = value; - } - - bool TerminalSettings::SuppressApplicationTitle() noexcept - { - return _suppressApplicationTitle; - } - - void TerminalSettings::SuppressApplicationTitle(bool value) noexcept - { - _suppressApplicationTitle = value; - } - - hstring TerminalSettings::EnvironmentVariables() - { - return _envVars; - } - - void TerminalSettings::EnvironmentVariables(hstring const& value) - { - _envVars = value; - } - - Settings::ScrollbarState TerminalSettings::ScrollState() const noexcept - { - return _scrollbarState; - } - - void TerminalSettings::ScrollState(Settings::ScrollbarState const& value) noexcept - { - _scrollbarState = value; - } - - bool TerminalSettings::RetroTerminalEffect() noexcept - { - return _retroTerminalEffect; - } - - void TerminalSettings::RetroTerminalEffect(bool value) noexcept - { - _retroTerminalEffect = value; - } - - bool TerminalSettings::ForceFullRepaintRendering() noexcept - { - return _forceFullRepaintRendering; - } - - void TerminalSettings::ForceFullRepaintRendering(bool value) noexcept - { - _forceFullRepaintRendering = value; - } - - bool TerminalSettings::SoftwareRendering() noexcept - { - return _softwareRendering; - } - - void TerminalSettings::SoftwareRendering(bool value) noexcept - { - _softwareRendering = value; - } - - Settings::TextAntialiasingMode TerminalSettings::AntialiasingMode() const noexcept - { - return _antialiasingMode; - } - - void TerminalSettings::AntialiasingMode(const Settings::TextAntialiasingMode& value) noexcept - { - _antialiasingMode = value; - } - } diff --git a/src/cascadia/TerminalSettings/terminalsettings.h b/src/cascadia/TerminalSettings/terminalsettings.h index ad6508de98d..fdcc4d549a5 100644 --- a/src/cascadia/TerminalSettings/terminalsettings.h +++ b/src/cascadia/TerminalSettings/terminalsettings.h @@ -14,154 +14,91 @@ Author(s): --*/ #pragma once -#include #include "TerminalSettings.g.h" +#include "../inc/cppwinrt_utils.h" +#include +#include namespace winrt::Microsoft::Terminal::Settings::implementation { struct TerminalSettings : TerminalSettingsT { - TerminalSettings(); + TerminalSettings() = default; // --------------------------- Core Settings --------------------------- // All of these settings are defined in ICoreSettings. - uint32_t DefaultForeground() noexcept; - void DefaultForeground(uint32_t value) noexcept; - uint32_t DefaultBackground() noexcept; - void DefaultBackground(uint32_t value) noexcept; - uint32_t SelectionBackground() noexcept; - void SelectionBackground(uint32_t value) noexcept; + + // Get/Set ColorTableEntry needs to be implemented manually, to get a + // particular value from the array. uint32_t GetColorTableEntry(int32_t index) const noexcept; void SetColorTableEntry(int32_t index, uint32_t value); - int32_t HistorySize() noexcept; - void HistorySize(int32_t value) noexcept; - int32_t InitialRows() noexcept; - void InitialRows(int32_t value) noexcept; - int32_t InitialCols() noexcept; - void InitialCols(int32_t value) noexcept; + + // the RowsToScroll getter needs to be implemented manually, so it can + // default to SPI_GETWHEELSCROLLLINES int32_t RowsToScroll() noexcept; void RowsToScroll(int32_t value) noexcept; - bool SnapOnInput() noexcept; - void SnapOnInput(bool value) noexcept; - uint32_t CursorColor() noexcept; - void CursorColor(uint32_t value) noexcept; - CursorStyle CursorShape() const noexcept; - void CursorShape(winrt::Microsoft::Terminal::Settings::CursorStyle const& value) noexcept; - uint32_t CursorHeight() noexcept; - void CursorHeight(uint32_t value) noexcept; - hstring WordDelimiters(); - void WordDelimiters(hstring const& value); - bool CopyOnSelect() noexcept; - void CopyOnSelect(bool value) noexcept; - // ------------------------ End of Core Settings ----------------------- - hstring ProfileName(); - void ProfileName(hstring const& value); - bool UseAcrylic() noexcept; - void UseAcrylic(bool value) noexcept; - double TintOpacity() noexcept; - void TintOpacity(double value) noexcept; - hstring Padding(); - void Padding(hstring value); + GETSET_PROPERTY(uint32_t, DefaultForeground, DEFAULT_FOREGROUND_WITH_ALPHA); + GETSET_PROPERTY(uint32_t, DefaultBackground, DEFAULT_BACKGROUND_WITH_ALPHA); + GETSET_PROPERTY(uint32_t, SelectionBackground, DEFAULT_FOREGROUND); + GETSET_PROPERTY(int32_t, HistorySize, DEFAULT_HISTORY_SIZE); + GETSET_PROPERTY(int32_t, InitialRows, 30); + GETSET_PROPERTY(int32_t, InitialCols, 80); - hstring FontFace(); - void FontFace(hstring const& value); - int32_t FontSize() noexcept; - void FontSize(int32_t value) noexcept; - winrt::Windows::UI::Text::FontWeight FontWeight() noexcept; - void FontWeight(winrt::Windows::UI::Text::FontWeight value) noexcept; + GETSET_PROPERTY(bool, SnapOnInput, true); + GETSET_PROPERTY(uint32_t, CursorColor, DEFAULT_CURSOR_COLOR); + GETSET_PROPERTY(CursorStyle, CursorShape, CursorStyle::Vintage); + GETSET_PROPERTY(uint32_t, CursorHeight, DEFAULT_CURSOR_HEIGHT); + GETSET_PROPERTY(hstring, WordDelimiters, DEFAULT_WORD_DELIMITERS); + GETSET_PROPERTY(bool, CopyOnSelect, false); - hstring BackgroundImage(); - void BackgroundImage(hstring const& value); - double BackgroundImageOpacity() noexcept; - void BackgroundImageOpacity(double value) noexcept; - winrt::Windows::UI::Xaml::Media::Stretch BackgroundImageStretchMode() noexcept; - void BackgroundImageStretchMode(winrt::Windows::UI::Xaml::Media::Stretch value) noexcept; - winrt::Windows::UI::Xaml::HorizontalAlignment BackgroundImageHorizontalAlignment() noexcept; - void BackgroundImageHorizontalAlignment(winrt::Windows::UI::Xaml::HorizontalAlignment value) noexcept; - winrt::Windows::UI::Xaml::VerticalAlignment BackgroundImageVerticalAlignment() noexcept; - void BackgroundImageVerticalAlignment(winrt::Windows::UI::Xaml::VerticalAlignment value) noexcept; - - winrt::Microsoft::Terminal::Settings::IKeyBindings KeyBindings() noexcept; - void KeyBindings(winrt::Microsoft::Terminal::Settings::IKeyBindings const& value) noexcept; - - hstring Commandline(); - void Commandline(hstring const& value); + // ------------------------ End of Core Settings ----------------------- - hstring StartingDirectory(); - void StartingDirectory(hstring const& value); + GETSET_PROPERTY(hstring, ProfileName); + GETSET_PROPERTY(bool, UseAcrylic, false); + GETSET_PROPERTY(double, TintOpacity, 0.5); + GETSET_PROPERTY(hstring, Padding, DEFAULT_PADDING); + GETSET_PROPERTY(hstring, FontFace, DEFAULT_FONT_FACE); + GETSET_PROPERTY(int32_t, FontSize, DEFAULT_FONT_SIZE); - hstring StartingTitle(); - void StartingTitle(hstring const& value); + GETSET_PROPERTY(winrt::Windows::UI::Text::FontWeight, FontWeight); - bool SuppressApplicationTitle() noexcept; - void SuppressApplicationTitle(bool value) noexcept; + GETSET_PROPERTY(hstring, BackgroundImage); + GETSET_PROPERTY(double, BackgroundImageOpacity, 1.0); - hstring EnvironmentVariables(); - void EnvironmentVariables(hstring const& value); + GETSET_PROPERTY(winrt::Windows::UI::Xaml::Media::Stretch, + BackgroundImageStretchMode, + winrt::Windows::UI::Xaml::Media::Stretch::UniformToFill); + GETSET_PROPERTY(winrt::Windows::UI::Xaml::HorizontalAlignment, + BackgroundImageHorizontalAlignment, + winrt::Windows::UI::Xaml::HorizontalAlignment::Center); + GETSET_PROPERTY(winrt::Windows::UI::Xaml::VerticalAlignment, + BackgroundImageVerticalAlignment, + winrt::Windows::UI::Xaml::VerticalAlignment::Center); - ScrollbarState ScrollState() const noexcept; - void ScrollState(winrt::Microsoft::Terminal::Settings::ScrollbarState const& value) noexcept; + GETSET_PROPERTY(IKeyBindings, KeyBindings, nullptr); - bool RetroTerminalEffect() noexcept; - void RetroTerminalEffect(bool value) noexcept; + GETSET_PROPERTY(hstring, Commandline); + GETSET_PROPERTY(hstring, StartingDirectory); + GETSET_PROPERTY(hstring, StartingTitle); + GETSET_PROPERTY(bool, SuppressApplicationTitle); + GETSET_PROPERTY(hstring, EnvironmentVariables); - bool ForceFullRepaintRendering() noexcept; - void ForceFullRepaintRendering(bool value) noexcept; + GETSET_PROPERTY(ScrollbarState, ScrollState, ScrollbarState::Visible); - bool SoftwareRendering() noexcept; - void SoftwareRendering(bool value) noexcept; + GETSET_PROPERTY(bool, RetroTerminalEffect, false); + GETSET_PROPERTY(bool, ForceFullRepaintRendering, false); + GETSET_PROPERTY(bool, SoftwareRendering, false); - TextAntialiasingMode AntialiasingMode() const noexcept; - void AntialiasingMode(winrt::Microsoft::Terminal::Settings::TextAntialiasingMode const& value) noexcept; + GETSET_PROPERTY(TextAntialiasingMode, AntialiasingMode, TextAntialiasingMode::Grayscale); private: - uint32_t _defaultForeground; - uint32_t _defaultBackground; - uint32_t _selectionBackground; - std::array _colorTable; - int32_t _historySize; - int32_t _initialRows; - int32_t _initialCols; - int32_t _rowsToScroll; - bool _snapOnInput; - uint32_t _cursorColor; - Settings::CursorStyle _cursorShape; - uint32_t _cursorHeight; - hstring _wordDelimiters; - - hstring _profileName; - bool _useAcrylic; - double _tintOpacity; - hstring _fontFace; - int32_t _fontSize; - winrt::Windows::UI::Text::FontWeight _fontWeight; - hstring _padding; - hstring _backgroundImage; - double _backgroundImageOpacity; - winrt::Windows::UI::Xaml::Media::Stretch _backgroundImageStretchMode; - winrt::Windows::UI::Xaml::HorizontalAlignment _backgroundImageHorizontalAlignment; - winrt::Windows::UI::Xaml::VerticalAlignment _backgroundImageVerticalAlignment; - bool _copyOnSelect; - hstring _commandline; - hstring _startingDir; - hstring _startingTitle; - bool _suppressApplicationTitle; - hstring _envVars; - Settings::IKeyBindings _keyBindings; - Settings::ScrollbarState _scrollbarState; - - bool _retroTerminalEffect; - bool _forceFullRepaintRendering; - bool _softwareRendering; - - Settings::TextAntialiasingMode _antialiasingMode; + std::array _colorTable{}; + int32_t _rowsToScroll{ 0 }; }; } namespace winrt::Microsoft::Terminal::Settings::factory_implementation { - struct TerminalSettings : TerminalSettingsT - { - }; + BASIC_FACTORY(TerminalSettings); } From e34e4164f96951a55ee92a047d671f0a1964bb05 Mon Sep 17 00:00:00 2001 From: Mike Griese Date: Thu, 21 May 2020 16:55:36 -0500 Subject: [PATCH 2/2] I guess just suppress this warning --- src/cascadia/TerminalSettings/terminalsettings.h | 8 ++++++++ src/cascadia/inc/cppwinrt_utils.h | 12 ++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/cascadia/TerminalSettings/terminalsettings.h b/src/cascadia/TerminalSettings/terminalsettings.h index fdcc4d549a5..df53229e8ef 100644 --- a/src/cascadia/TerminalSettings/terminalsettings.h +++ b/src/cascadia/TerminalSettings/terminalsettings.h @@ -25,6 +25,12 @@ namespace winrt::Microsoft::Terminal::Settings::implementation { TerminalSettings() = default; +// TECHNICALLY, the hstring copy assignment can throw, but the GETSET_PROPERTY +// macro defines the operator as `noexcept`. We're not really worried about it, +// because the only time it will throw is when we're out of memory, and then +// we've got much worse problems. So just suppress that warning for now. +#pragma warning(push) +#pragma warning(disable : 26447) // --------------------------- Core Settings --------------------------- // All of these settings are defined in ICoreSettings. @@ -92,6 +98,8 @@ namespace winrt::Microsoft::Terminal::Settings::implementation GETSET_PROPERTY(TextAntialiasingMode, AntialiasingMode, TextAntialiasingMode::Grayscale); +#pragma warning(pop) + private: std::array _colorTable{}; int32_t _rowsToScroll{ 0 }; diff --git a/src/cascadia/inc/cppwinrt_utils.h b/src/cascadia/inc/cppwinrt_utils.h index 1343292c0fd..81f5ae51133 100644 --- a/src/cascadia/inc/cppwinrt_utils.h +++ b/src/cascadia/inc/cppwinrt_utils.h @@ -99,12 +99,12 @@ public: // Use this macro to quick implement both the getter and setter for a property. // This should only be used for simple types where there's no logic in the // getter/setter beyond just accessing/updating the value. -#define GETSET_PROPERTY(type, name, ...) \ -public: \ - type name() const { return _##name; } \ - void name(const type& value) { _##name = value; } \ - \ -private: \ +#define GETSET_PROPERTY(type, name, ...) \ +public: \ + type name() const noexcept { return _##name; } \ + void name(const type& value) noexcept { _##name = value; } \ + \ +private: \ type _##name{ __VA_ARGS__ }; // Use this macro to quickly implement both the getter and setter for an observable property.