Introduce Microsoft.Terminal.UI and consolidate UI helpers (#15107)

This pull request introduces the module Microsoft.Terminal.UI.dll, and
moves into it the following things:

- Any `IDirectKeyListener`
- All XAML converter helpers from around the project
   - ... including `IconPathConverter` from TerminalSettingsModel
   - ... but not `EmptyStringVisibilityConverter`, which has died

It also adds a XAML Markup Extension named `mtu:ResourceString`, which
will allow us to refer to string resources directly from XAML. It will
allow us to remove all of the places in the code where we manually set
resources on XAML controls.

---------

Co-authored-by: Leonard Hecker <lhecker@microsoft.com>
This commit is contained in:
Dustin L. Howett
2024-03-01 11:56:49 -06:00
committed by GitHub
parent ec5d246b35
commit ad51b22f44
72 changed files with 525 additions and 389 deletions

View File

@@ -46,6 +46,7 @@ MSAA
msixbundle msixbundle
MSVC MSVC
MSVCP MSVCP
mtu
muxc muxc
netcore netcore
Onefuzz Onefuzz

View File

@@ -412,6 +412,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TerminalStress", "src\tools
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RenderingTests", "src\tools\RenderingTests\RenderingTests.vcxproj", "{37C995E0-2349-4154-8E77-4A52C0C7F46D}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RenderingTests", "src\tools\RenderingTests\RenderingTests.vcxproj", "{37C995E0-2349-4154-8E77-4A52C0C7F46D}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UIHelpers", "src\cascadia\UIHelpers\UIHelpers.vcxproj", "{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "benchcat", "src\tools\benchcat\benchcat.vcxproj", "{2C836962-9543-4CE5-B834-D28E1F124B66}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "benchcat", "src\tools\benchcat\benchcat.vcxproj", "{2C836962-9543-4CE5-B834-D28E1F124B66}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleMonitor", "src\tools\ConsoleMonitor\ConsoleMonitor.vcxproj", "{328729E9-6723-416E-9C98-951F1473BBE1}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleMonitor", "src\tools\ConsoleMonitor\ConsoleMonitor.vcxproj", "{328729E9-6723-416E-9C98-951F1473BBE1}"
@@ -2356,6 +2358,29 @@ Global
{37C995E0-2349-4154-8E77-4A52C0C7F46D}.Release|ARM64.ActiveCfg = Release|ARM64 {37C995E0-2349-4154-8E77-4A52C0C7F46D}.Release|ARM64.ActiveCfg = Release|ARM64
{37C995E0-2349-4154-8E77-4A52C0C7F46D}.Release|x64.ActiveCfg = Release|x64 {37C995E0-2349-4154-8E77-4A52C0C7F46D}.Release|x64.ActiveCfg = Release|x64
{37C995E0-2349-4154-8E77-4A52C0C7F46D}.Release|x86.ActiveCfg = Release|Win32 {37C995E0-2349-4154-8E77-4A52C0C7F46D}.Release|x86.ActiveCfg = Release|Win32
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.AuditMode|Any CPU.ActiveCfg = AuditMode|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.AuditMode|x64.ActiveCfg = AuditMode|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.AuditMode|x64.Build.0 = AuditMode|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.AuditMode|x86.ActiveCfg = AuditMode|Win32
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Debug|Any CPU.ActiveCfg = Debug|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Debug|ARM64.ActiveCfg = Debug|ARM64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Debug|ARM64.Build.0 = Debug|ARM64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Debug|x64.ActiveCfg = Debug|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Debug|x64.Build.0 = Debug|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Debug|x86.ActiveCfg = Debug|Win32
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Debug|x86.Build.0 = Debug|Win32
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Fuzzing|x64.ActiveCfg = Fuzzing|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Release|Any CPU.ActiveCfg = Release|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Release|ARM64.ActiveCfg = Release|ARM64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Release|ARM64.Build.0 = Release|ARM64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Release|x64.ActiveCfg = Release|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Release|x64.Build.0 = Release|x64
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Release|x86.ActiveCfg = Release|Win32
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}.Release|x86.Build.0 = Release|Win32
{2C836962-9543-4CE5-B834-D28E1F124B66}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 {2C836962-9543-4CE5-B834-D28E1F124B66}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32
{2C836962-9543-4CE5-B834-D28E1F124B66}.AuditMode|ARM64.ActiveCfg = Release|ARM64 {2C836962-9543-4CE5-B834-D28E1F124B66}.AuditMode|ARM64.ActiveCfg = Release|ARM64
{2C836962-9543-4CE5-B834-D28E1F124B66}.AuditMode|x64.ActiveCfg = Release|x64 {2C836962-9543-4CE5-B834-D28E1F124B66}.AuditMode|x64.ActiveCfg = Release|x64
@@ -2511,6 +2536,7 @@ Global
{3C67784E-1453-49C2-9660-483E2CC7F7AD} = {40BD8415-DD93-4200-8D82-498DDDC08CC8} {3C67784E-1453-49C2-9660-483E2CC7F7AD} = {40BD8415-DD93-4200-8D82-498DDDC08CC8}
{613CCB57-5FA9-48EF-80D0-6B1E319E20C4} = {A10C4720-DCA4-4640-9749-67F4314F527C} {613CCB57-5FA9-48EF-80D0-6B1E319E20C4} = {A10C4720-DCA4-4640-9749-67F4314F527C}
{37C995E0-2349-4154-8E77-4A52C0C7F46D} = {A10C4720-DCA4-4640-9749-67F4314F527C} {37C995E0-2349-4154-8E77-4A52C0C7F46D} = {A10C4720-DCA4-4640-9749-67F4314F527C}
{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F} = {61901E80-E97D-4D61-A9BB-E8F2FDA8B40C}
{2C836962-9543-4CE5-B834-D28E1F124B66} = {A10C4720-DCA4-4640-9749-67F4314F527C} {2C836962-9543-4CE5-B834-D28E1F124B66} = {A10C4720-DCA4-4640-9749-67F4314F527C}
{328729E9-6723-416E-9C98-951F1473BBE1} = {A10C4720-DCA4-4640-9749-67F4314F527C} {328729E9-6723-416E-9C98-951F1473BBE1} = {A10C4720-DCA4-4640-9749-67F4314F527C}
{BE92101C-04F8-48DA-99F0-E1F4F1D2DC48} = {A10C4720-DCA4-4640-9749-67F4314F527C} {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48} = {A10C4720-DCA4-4640-9749-67F4314F527C}

View File

@@ -2,13 +2,12 @@
// Licensed under the MIT license. // Licensed under the MIT license.
import "TabBase.idl"; import "TabBase.idl";
import "IDirectKeyListener.idl";
import "HighlightedTextControl.idl"; import "HighlightedTextControl.idl";
import "FilteredCommand.idl"; import "FilteredCommand.idl";
namespace TerminalApp namespace TerminalApp
{ {
[default_interface] runtimeclass CommandPalette : Windows.UI.Xaml.Controls.UserControl, Windows.UI.Xaml.Data.INotifyPropertyChanged, IDirectKeyListener [default_interface] runtimeclass CommandPalette : Windows.UI.Xaml.Controls.UserControl, Windows.UI.Xaml.Data.INotifyPropertyChanged, Microsoft.Terminal.UI.IDirectKeyListener
{ {
CommandPalette(); CommandPalette();

View File

@@ -9,7 +9,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:TerminalApp" xmlns:local="using:TerminalApp"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:model="using:Microsoft.Terminal.Settings.Model" xmlns:mtu="using:Microsoft.Terminal.UI"
xmlns:mux="using:Microsoft.UI.Xaml.Controls" xmlns:mux="using:Microsoft.UI.Xaml.Controls"
AllowFocusOnInteraction="True" AllowFocusOnInteraction="True"
AutomationProperties.Name="{x:Bind ControlName, Mode=OneWay}" AutomationProperties.Name="{x:Bind ControlName, Mode=OneWay}"
@@ -23,12 +23,6 @@
<UserControl.Resources> <UserControl.Resources>
<ResourceDictionary> <ResourceDictionary>
<!-- This creates an instance of our CommandKeyChordVisibilityConverter we can reference below -->
<local:EmptyStringVisibilityConverter x:Key="CommandKeyChordVisibilityConverter" />
<local:EmptyStringVisibilityConverter x:Key="ParsedCommandLineTextVisibilityConverter" />
<local:EmptyStringVisibilityConverter x:Key="ParentCommandVisibilityConverter" />
<model:IconPathConverter x:Key="IconSourceConverter" />
<DataTemplate x:Key="ListItemTemplate" <DataTemplate x:Key="ListItemTemplate"
x:DataType="local:FilteredCommand"> x:DataType="local:FilteredCommand">
<ListViewItem HorizontalContentAlignment="Stretch" <ListViewItem HorizontalContentAlignment="Stretch"
@@ -62,8 +56,7 @@
<!-- <!--
The block for the key chord is only visible The block for the key chord is only visible
when there's actual text set as the label. See when there's actual text set as the label.
CommandKeyChordVisibilityConverter for details.
We're setting the accessibility view on the We're setting the accessibility view on the
border and text block to Raw because otherwise, border and text block to Raw because otherwise,
Narrator will read out the key chord. Problem is, Narrator will read out the key chord. Problem is,
@@ -77,7 +70,7 @@
AutomationProperties.AccessibilityView="Raw" AutomationProperties.AccessibilityView="Raw"
Background="{ThemeResource FlyoutPresenterBackground}" Background="{ThemeResource FlyoutPresenterBackground}"
Style="{ThemeResource KeyChordBorderStyle}" Style="{ThemeResource KeyChordBorderStyle}"
Visibility="{x:Bind Item.KeyChordText, Mode=OneWay, Converter={StaticResource CommandKeyChordVisibilityConverter}}"> Visibility="{x:Bind mtu:Converters.StringNotEmptyToVisibility(Item.KeyChordText), Mode=OneWay}">
<TextBlock AutomationProperties.AccessibilityView="Raw" <TextBlock AutomationProperties.AccessibilityView="Raw"
FontSize="12" FontSize="12"
@@ -113,8 +106,7 @@
<!-- <!--
The block for the key chord is only visible The block for the key chord is only visible
when there's actual text set as the label. See when there's actual text set as the label.
CommandKeyChordVisibilityConverter for details.
We're setting the accessibility view on the We're setting the accessibility view on the
border and text block to Raw because otherwise, border and text block to Raw because otherwise,
Narrator will read out the key chord. Problem is, Narrator will read out the key chord. Problem is,
@@ -127,7 +119,7 @@
VerticalAlignment="Center" VerticalAlignment="Center"
AutomationProperties.AccessibilityView="Raw" AutomationProperties.AccessibilityView="Raw"
Style="{ThemeResource KeyChordBorderStyle}" Style="{ThemeResource KeyChordBorderStyle}"
Visibility="{x:Bind Item.KeyChordText, Mode=OneWay, Converter={StaticResource CommandKeyChordVisibilityConverter}}"> Visibility="{x:Bind mtu:Converters.StringNotEmptyToVisibility(Item.KeyChordText), Mode=OneWay}">
<TextBlock AutomationProperties.AccessibilityView="Raw" <TextBlock AutomationProperties.AccessibilityView="Raw"
FontSize="12" FontSize="12"
@@ -347,12 +339,12 @@
VerticalAlignment="Center" VerticalAlignment="Center"
FontSize="14" FontSize="14"
Text="{x:Bind PrefixCharacter, Mode=OneWay}" Text="{x:Bind PrefixCharacter, Mode=OneWay}"
Visibility="{x:Bind PrefixCharacter, Mode=OneWay, Converter={StaticResource ParentCommandVisibilityConverter}}" /> Visibility="{x:Bind mtu:Converters.StringNotEmptyToVisibility(PrefixCharacter), Mode=OneWay}" />
<StackPanel Grid.Row="1" <StackPanel Grid.Row="1"
Margin="8,0,8,8" Margin="8,0,8,8"
Orientation="Horizontal" Orientation="Horizontal"
Visibility="{x:Bind ParentCommandName, Mode=OneWay, Converter={StaticResource ParentCommandVisibilityConverter}}"> Visibility="{x:Bind mtu:Converters.StringNotEmptyToVisibility(ParentCommandName), Mode=OneWay}">
<Button x:Name="_parentCommandBackButton" <Button x:Name="_parentCommandBackButton"
x:Uid="ParentCommandBackButton" x:Uid="ParentCommandBackButton"
@@ -377,7 +369,7 @@
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Center" VerticalAlignment="Center"
Style="{ThemeResource ParsedCommandLineBorderStyle}" Style="{ThemeResource ParsedCommandLineBorderStyle}"
Visibility="{x:Bind ParsedCommandLineText, Mode=OneWay, Converter={StaticResource ParsedCommandLineTextVisibilityConverter}}"> Visibility="{x:Bind mtu:Converters.StringNotEmptyToVisibility(ParsedCommandLineText), Mode=OneWay}">
<ScrollViewer MaxHeight="200" <ScrollViewer MaxHeight="200"
VerticalScrollBarVisibility="Auto"> VerticalScrollBarVisibility="Auto">

View File

@@ -1,38 +0,0 @@
#include "pch.h"
#include "EmptyStringVisibilityConverter.h"
#include "EmptyStringVisibilityConverter.g.cpp"
using namespace winrt::Windows;
using namespace winrt::Windows::UI::Xaml;
namespace winrt::TerminalApp::implementation
{
// Method Description:
// - Attempt to convert something into another type. For the
// EmptyStringVisibilityConverter, we're gonna check if `value` is a
// string, and try and convert it into a Visibility value. If the input
// param wasn't a string, or was the empty string, we'll return
// Visibility::Collapsed. Otherwise, we'll return Visible.
// Arguments:
// - value: the input object to attempt to convert into a Visibility.
// Return Value:
// - Visible if the object was a string and wasn't the empty string.
Foundation::IInspectable EmptyStringVisibilityConverter::Convert(const Foundation::IInspectable& value,
const Windows::UI::Xaml::Interop::TypeName& /* targetType */,
const Foundation::IInspectable& /* parameter */,
const hstring& /* language */)
{
const auto& name = winrt::unbox_value_or<hstring>(value, L"");
return winrt::box_value(name.empty() ? Visibility::Collapsed : Visibility::Visible);
}
// unused for one-way bindings
Foundation::IInspectable EmptyStringVisibilityConverter::ConvertBack(const Foundation::IInspectable& /* value */,
const Windows::UI::Xaml::Interop::TypeName& /* targetType */,
const Foundation::IInspectable& /* parameter */,
const hstring& /* language */)
{
throw hresult_not_implemented();
}
}

View File

@@ -1,26 +0,0 @@
#pragma once
#include "EmptyStringVisibilityConverter.g.h"
namespace winrt::TerminalApp::implementation
{
struct EmptyStringVisibilityConverter : EmptyStringVisibilityConverterT<EmptyStringVisibilityConverter>
{
EmptyStringVisibilityConverter() = default;
Windows::Foundation::IInspectable Convert(const Windows::Foundation::IInspectable& value,
const Windows::UI::Xaml::Interop::TypeName& targetType,
const Windows::Foundation::IInspectable& parameter,
const hstring& language);
Windows::Foundation::IInspectable ConvertBack(const Windows::Foundation::IInspectable& value,
const Windows::UI::Xaml::Interop::TypeName& targetType,
const Windows::Foundation::IInspectable& parameter,
const hstring& language);
};
}
namespace winrt::TerminalApp::factory_implementation
{
BASIC_FACTORY(EmptyStringVisibilityConverter);
}

View File

@@ -1,19 +0,0 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
namespace TerminalApp
{
// See https://docs.microsoft.com/en-us/windows/uwp/data-binding/data-binding-quickstart
// We use the default attribute to declare IValueConverter as the default
// interface. In the listing, EmptyStringVisibilityConverter has only a
// constructor, and no methods, so no default interface is generated for it.
// The default attribute is optimal if you won't be adding instance members
// to EmptyStringVisibilityConverter, because no QueryInterface will be
// required to call the IValueConverter methods
runtimeclass EmptyStringVisibilityConverter : [default] Windows.UI.Xaml.Data.IValueConverter
{
EmptyStringVisibilityConverter();
};
}

View File

@@ -1,14 +0,0 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
namespace TerminalApp
{
// 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 the one in TerminalControl\TermControl.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);
}
}

View File

@@ -17,7 +17,7 @@ namespace winrt::TerminalApp::implementation
{ {
Controls::IconElement PaletteItem::ResolvedIcon() Controls::IconElement PaletteItem::ResolvedIcon()
{ {
const auto icon = IconPathConverter::IconWUX(Icon()); const auto icon = Microsoft::Terminal::UI::IconPathConverter::IconWUX(Icon());
icon.Width(16); icon.Width(16);
icon.Height(16); icon.Height(16);
return icon; return icon;

View File

@@ -114,7 +114,7 @@ namespace winrt::TerminalApp::implementation
// The TabViewItem Icon needs MUX while the IconSourceElement in the CommandPalette needs WUX... // The TabViewItem Icon needs MUX while the IconSourceElement in the CommandPalette needs WUX...
Icon(winrt::hstring{ glyph }); Icon(winrt::hstring{ glyph });
TabViewItem().IconSource(IconPathConverter::IconSourceMUX(glyph, false)); TabViewItem().IconSource(Microsoft::Terminal::UI::IconPathConverter::IconSourceMUX(glyph, false));
} }
winrt::Windows::UI::Xaml::Media::Brush SettingsTab::_BackgroundBrush() winrt::Windows::UI::Xaml::Media::Brush SettingsTab::_BackgroundBrush()

View File

@@ -2,7 +2,6 @@
// Licensed under the MIT license. // Licensed under the MIT license.
import "TabBase.idl"; import "TabBase.idl";
import "IDirectKeyListener.idl";
import "HighlightedTextControl.idl"; import "HighlightedTextControl.idl";
import "FilteredCommand.idl"; import "FilteredCommand.idl";
@@ -21,7 +20,7 @@ namespace TerminalApp
BottomUp BottomUp
}; };
[default_interface] runtimeclass SuggestionsControl : Windows.UI.Xaml.Controls.UserControl, Windows.UI.Xaml.Data.INotifyPropertyChanged, IDirectKeyListener [default_interface] runtimeclass SuggestionsControl : Windows.UI.Xaml.Controls.UserControl, Windows.UI.Xaml.Data.INotifyPropertyChanged, Microsoft.Terminal.UI.IDirectKeyListener
{ {
SuggestionsControl(); SuggestionsControl();

View File

@@ -10,6 +10,7 @@
xmlns:local="using:TerminalApp" xmlns:local="using:TerminalApp"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:model="using:Microsoft.Terminal.Settings.Model" xmlns:model="using:Microsoft.Terminal.Settings.Model"
xmlns:mtu="using:Microsoft.Terminal.UI"
xmlns:mux="using:Microsoft.UI.Xaml.Controls" xmlns:mux="using:Microsoft.UI.Xaml.Controls"
AllowFocusOnInteraction="True" AllowFocusOnInteraction="True"
AutomationProperties.Name="{x:Bind ControlName, Mode=OneWay}" AutomationProperties.Name="{x:Bind ControlName, Mode=OneWay}"
@@ -23,9 +24,6 @@
<UserControl.Resources> <UserControl.Resources>
<ResourceDictionary> <ResourceDictionary>
<local:EmptyStringVisibilityConverter x:Key="ParentCommandVisibilityConverter" />
<model:IconPathConverter x:Key="IconSourceConverter" />
<DataTemplate x:Key="ListItemTemplate" <DataTemplate x:Key="ListItemTemplate"
x:DataType="local:FilteredCommand"> x:DataType="local:FilteredCommand">
<ListViewItem Height="32" <ListViewItem Height="32"
@@ -161,7 +159,7 @@
<StackPanel Grid.Row="1" <StackPanel Grid.Row="1"
Margin="8,0,8,8" Margin="8,0,8,8"
Orientation="Horizontal" Orientation="Horizontal"
Visibility="{x:Bind ParentCommandName, Mode=OneWay, Converter={StaticResource ParentCommandVisibilityConverter}}"> Visibility="{x:Bind mtu:Converters.StringNotEmptyToVisibility(ParentCommandName), Mode=OneWay}">
<Button x:Name="_parentCommandBackButton" <Button x:Name="_parentCommandBackButton"
x:Uid="ParentCommandBackButton" x:Uid="ParentCommandBackButton"

View File

@@ -130,9 +130,6 @@
<DependentUpon>CommandPalette.xaml</DependentUpon> <DependentUpon>CommandPalette.xaml</DependentUpon>
</ClInclude> </ClInclude>
<ClInclude Include="FilteredCommand.h" /> <ClInclude Include="FilteredCommand.h" />
<ClInclude Include="EmptyStringVisibilityConverter.h">
<DependentUpon>EmptyStringVisibilityConverter.idl</DependentUpon>
</ClInclude>
<ClInclude Include="Pane.h" /> <ClInclude Include="Pane.h" />
<ClInclude Include="ColorHelper.h" /> <ClInclude Include="ColorHelper.h" />
<ClInclude Include="pch.h" /> <ClInclude Include="pch.h" />
@@ -232,9 +229,6 @@
<DependentUpon>CommandPalette.xaml</DependentUpon> <DependentUpon>CommandPalette.xaml</DependentUpon>
</ClCompile> </ClCompile>
<ClCompile Include="FilteredCommand.cpp" /> <ClCompile Include="FilteredCommand.cpp" />
<ClCompile Include="EmptyStringVisibilityConverter.cpp">
<DependentUpon>EmptyStringVisibilityConverter.idl</DependentUpon>
</ClCompile>
<ClCompile Include="Pane.cpp" /> <ClCompile Include="Pane.cpp" />
<ClCompile Include="Pane.LayoutSizeNode.cpp" /> <ClCompile Include="Pane.LayoutSizeNode.cpp" />
<ClCompile Include="ColorHelper.cpp"> <ClCompile Include="ColorHelper.cpp">
@@ -280,7 +274,6 @@
header in TerminalApp.vcxproj (as well as in this file) --> header in TerminalApp.vcxproj (as well as in this file) -->
<Midl Include="ActionPaletteItem.idl" /> <Midl Include="ActionPaletteItem.idl" />
<Midl Include="CommandLinePaletteItem.idl" /> <Midl Include="CommandLinePaletteItem.idl" />
<Midl Include="IDirectKeyListener.idl" />
<Midl Include="AboutDialog.idl"> <Midl Include="AboutDialog.idl">
<DependentUpon>AboutDialog.xaml</DependentUpon> <DependentUpon>AboutDialog.xaml</DependentUpon>
</Midl> </Midl>
@@ -341,7 +334,6 @@
<SubType>Code</SubType> <SubType>Code</SubType>
</Midl> </Midl>
<Midl Include="FilteredCommand.idl" /> <Midl Include="FilteredCommand.idl" />
<Midl Include="EmptyStringVisibilityConverter.idl" />
</ItemGroup> </ItemGroup>
<!-- ========================= Misc Files ======================== --> <!-- ========================= Misc Files ======================== -->
<ItemGroup> <ItemGroup>
@@ -385,6 +377,9 @@
<Private>true</Private> <Private>true</Private>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly> <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference> </ProjectReference>
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\UIHelpers\UIHelpers.vcxproj">
<Project>{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}</Project>
</ProjectReference>
</ItemGroup> </ItemGroup>
<PropertyGroup> <PropertyGroup>

View File

@@ -98,7 +98,6 @@
<Midl Include="ShortcutActionDispatch.idl"> <Midl Include="ShortcutActionDispatch.idl">
<Filter>settings</Filter> <Filter>settings</Filter>
</Midl> </Midl>
<Midl Include="IDirectKeyListener.idl" />
<Midl Include="SettingsTab.idl"> <Midl Include="SettingsTab.idl">
<Filter>tab</Filter> <Filter>tab</Filter>
</Midl> </Midl>
@@ -116,7 +115,6 @@
</Midl> </Midl>
<Midl Include="PaletteItemTemplateSelector.idl" /> <Midl Include="PaletteItemTemplateSelector.idl" />
<Midl Include="TabBase.idl" /> <Midl Include="TabBase.idl" />
<Midl Include="EmptyStringVisibilityConverter.idl" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="packages.config" /> <None Include="packages.config" />
@@ -187,4 +185,4 @@
<Filter>app</Filter> <Filter>app</Filter>
</ApplicationDefinition> </ApplicationDefinition>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -1101,7 +1101,7 @@ namespace winrt::TerminalApp::implementation
return nullptr; return nullptr;
} }
auto icon = IconPathConverter::IconWUX(iconSource); auto icon = UI::IconPathConverter::IconWUX(iconSource);
Automation::AutomationProperties::SetAccessibilityView(icon, Automation::Peers::AccessibilityView::Raw); Automation::AutomationProperties::SetAccessibilityView(icon, Automation::Peers::AccessibilityView::Raw);
return icon; return icon;
@@ -4925,7 +4925,7 @@ namespace winrt::TerminalApp::implementation
if (!icon.empty()) if (!icon.empty())
{ {
auto iconElement = IconPathConverter::IconWUX(icon); auto iconElement = UI::IconPathConverter::IconWUX(icon);
Automation::AutomationProperties::SetAccessibilityView(iconElement, Automation::Peers::AccessibilityView::Raw); Automation::AutomationProperties::SetAccessibilityView(iconElement, Automation::Peers::AccessibilityView::Raw);
button.Icon(iconElement); button.Icon(iconElement);
} }

View File

@@ -1,7 +1,6 @@
// Copyright (c) Microsoft Corporation. // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license. // Licensed under the MIT license.
import "TaskbarState.idl"; import "TaskbarState.idl";
import "IDirectKeyListener.idl";
namespace TerminalApp namespace TerminalApp
{ {
@@ -57,7 +56,7 @@ namespace TerminalApp
Boolean IsQuakeWindow(); Boolean IsQuakeWindow();
}; };
[default_interface] runtimeclass TerminalPage : Windows.UI.Xaml.Controls.Page, Windows.UI.Xaml.Data.INotifyPropertyChanged, IDirectKeyListener [default_interface] runtimeclass TerminalPage : Windows.UI.Xaml.Controls.Page, Windows.UI.Xaml.Data.INotifyPropertyChanged, Microsoft.Terminal.UI.IDirectKeyListener
{ {
TerminalPage(WindowProperties properties, ContentManager manager); TerminalPage(WindowProperties properties, ContentManager manager);

View File

@@ -304,7 +304,7 @@ namespace winrt::TerminalApp::implementation
{ {
Icon(_lastIconPath); Icon(_lastIconPath);
bool isMonochrome = iconStyle == IconStyle::Monochrome; bool isMonochrome = iconStyle == IconStyle::Monochrome;
TabViewItem().IconSource(IconPathConverter::IconSourceMUX(_lastIconPath, isMonochrome)); TabViewItem().IconSource(Microsoft::Terminal::UI::IconPathConverter::IconSourceMUX(_lastIconPath, isMonochrome));
} }
} }
@@ -327,7 +327,7 @@ namespace winrt::TerminalApp::implementation
else else
{ {
Icon(_lastIconPath); Icon(_lastIconPath);
TabViewItem().IconSource(IconPathConverter::IconSourceMUX(_lastIconPath, _lastIconStyle == IconStyle::Monochrome)); TabViewItem().IconSource(Microsoft::Terminal::UI::IconPathConverter::IconSourceMUX(_lastIconPath, _lastIconStyle == IconStyle::Monochrome));
} }
_iconHidden = hide; _iconHidden = hide;
} }

View File

@@ -863,7 +863,7 @@ namespace winrt::TerminalApp::implementation
auto focusedObject{ Windows::UI::Xaml::Input::FocusManager::GetFocusedElement(xamlRoot) }; auto focusedObject{ Windows::UI::Xaml::Input::FocusManager::GetFocusedElement(xamlRoot) };
do do
{ {
if (auto keyListener{ focusedObject.try_as<IDirectKeyListener>() }) if (auto keyListener{ focusedObject.try_as<UI::IDirectKeyListener>() })
{ {
if (keyListener.OnDirectKeyEvent(vkey, scanCode, down)) if (keyListener.OnDirectKeyEvent(vkey, scanCode, down))
{ {
@@ -891,7 +891,7 @@ namespace winrt::TerminalApp::implementation
// don't want to go around the loop again. // don't want to go around the loop again.
if (!focusedObject) if (!focusedObject)
{ {
if (auto keyListener{ _root.try_as<IDirectKeyListener>() }) if (auto keyListener{ _root.try_as<UI::IDirectKeyListener>() })
{ {
return keyListener.OnDirectKeyEvent(vkey, scanCode, down); return keyListener.OnDirectKeyEvent(vkey, scanCode, down);
} }

View File

@@ -3,7 +3,6 @@
import "TerminalPage.idl"; import "TerminalPage.idl";
import "ShortcutActionDispatch.idl"; import "ShortcutActionDispatch.idl";
import "IDirectKeyListener.idl";
namespace TerminalApp namespace TerminalApp
{ {
@@ -40,7 +39,7 @@ namespace TerminalApp
// See IDialogPresenter and TerminalPage's DialogPresenter for more // See IDialogPresenter and TerminalPage's DialogPresenter for more
// information. // information.
[default_interface] runtimeclass TerminalWindow : IDirectKeyListener, IDialogPresenter, Windows.UI.Xaml.Data.INotifyPropertyChanged [default_interface] runtimeclass TerminalWindow : Microsoft.Terminal.UI.IDirectKeyListener, IDialogPresenter, Windows.UI.Xaml.Data.INotifyPropertyChanged
{ {
TerminalWindow(SettingsLoadEventArgs result, ContentManager manager); TerminalWindow(SettingsLoadEventArgs result, ContentManager manager);

View File

@@ -70,6 +70,9 @@
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalControl\dll\TerminalControl.vcxproj" /> <ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalControl\dll\TerminalControl.vcxproj" />
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalSettingsEditor\Microsoft.Terminal.Settings.Editor.vcxproj" /> <ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalSettingsEditor\Microsoft.Terminal.Settings.Editor.vcxproj" />
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalSettingsModel\dll\Microsoft.Terminal.Settings.Model.vcxproj" /> <ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalSettingsModel\dll\Microsoft.Terminal.Settings.Model.vcxproj" />
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\UIHelpers\UIHelpers.vcxproj">
<Project>{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}</Project>
</ProjectReference>
<!-- Reference TerminalAppLib here, so we can use its TerminalApp.winmd as <!-- Reference TerminalAppLib here, so we can use its TerminalApp.winmd as
our TerminalApp.winmd. This didn't work correctly in VS2017, you'd need to our TerminalApp.winmd. This didn't work correctly in VS2017, you'd need to
manually reference the lib --> manually reference the lib -->

View File

@@ -60,6 +60,7 @@
#include <winrt/Microsoft.Terminal.TerminalConnection.h> #include <winrt/Microsoft.Terminal.TerminalConnection.h>
#include <winrt/Microsoft.Terminal.Settings.Editor.h> #include <winrt/Microsoft.Terminal.Settings.Editor.h>
#include <winrt/Microsoft.Terminal.Settings.Model.h> #include <winrt/Microsoft.Terminal.Settings.Model.h>
#include <winrt/Microsoft.Terminal.UI.h>
#include <winrt/Windows.Services.Store.h> #include <winrt/Windows.Services.Store.h>
#include <winrt/Windows.Storage.h> #include <winrt/Windows.Storage.h>
#include <winrt/Windows.Storage.Provider.h> #include <winrt/Windows.Storage.Provider.h>

View File

@@ -14,7 +14,6 @@
#include "InteractivityAutomationPeer.h" #include "InteractivityAutomationPeer.h"
#include "ControlInteractivity.g.cpp" #include "ControlInteractivity.g.cpp"
#include "TermControl.h"
using namespace ::Microsoft::Console::Types; using namespace ::Microsoft::Console::Types;
using namespace ::Microsoft::Console::VirtualTerminal; using namespace ::Microsoft::Console::VirtualTerminal;

View File

@@ -1,14 +0,0 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
namespace Microsoft.Terminal.Control
{
// 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);
};
}

View File

@@ -5,6 +5,8 @@
#include "ScrollBarVisualStateManager.h" #include "ScrollBarVisualStateManager.h"
#include "ScrollBarVisualStateManager.g.cpp" #include "ScrollBarVisualStateManager.g.cpp"
#include "TermControl.h"
using namespace winrt::Windows::UI::Xaml::Media; using namespace winrt::Windows::UI::Xaml::Media;
namespace winrt::Microsoft::Terminal::Control::implementation namespace winrt::Microsoft::Terminal::Control::implementation

View File

@@ -14,12 +14,12 @@
#include <winrt/Windows.UI.Xaml.h> #include <winrt/Windows.UI.Xaml.h>
#include <winrt/Windows.UI.Xaml.Controls.h> #include <winrt/Windows.UI.Xaml.Controls.h>
#include "TermControl.h"
#include "ScrollBarVisualStateManager.g.h" #include "ScrollBarVisualStateManager.g.h"
namespace winrt::Microsoft::Terminal::Control::implementation namespace winrt::Microsoft::Terminal::Control::implementation
{ {
struct TermControl;
struct ScrollBarVisualStateManager : ScrollBarVisualStateManagerT<ScrollBarVisualStateManager> struct ScrollBarVisualStateManager : ScrollBarVisualStateManagerT<ScrollBarVisualStateManager>
{ {
bool GoToStateCore(winrt::Windows::UI::Xaml::Controls::Control const& control, winrt::Windows::UI::Xaml::FrameworkElement const& templateRoot, hstring const& stateName, winrt::Windows::UI::Xaml::VisualStateGroup const& group, winrt::Windows::UI::Xaml::VisualState const& state, bool useTransitions); bool GoToStateCore(winrt::Windows::UI::Xaml::Controls::Control const& control, winrt::Windows::UI::Xaml::FrameworkElement const& templateRoot, hstring const& stateName, winrt::Windows::UI::Xaml::VisualStateGroup const& group, winrt::Windows::UI::Xaml::VisualState const& state, bool useTransitions);

View File

@@ -4,13 +4,19 @@
import "IMouseWheelListener.idl"; import "IMouseWheelListener.idl";
import "IControlSettings.idl"; import "IControlSettings.idl";
import "ControlInteractivity.idl"; import "ControlInteractivity.idl";
import "IDirectKeyListener.idl";
import "EventArgs.idl"; import "EventArgs.idl";
import "ICoreState.idl"; import "ICoreState.idl";
import "ControlCore.idl"; import "ControlCore.idl";
namespace Microsoft.Terminal.Control namespace Microsoft.Terminal.Control
{ {
// This matches the definition in M.T.UI.
// Having it here prevents us from having to refer to M.T.UI in **all consuming projects**.
// WinRT is a trip.
[uuid("0ddf4edc-3fda-4dee-97ca-a417ee3dd510")]
interface IDirectKeyListener {
Boolean OnDirectKeyEvent(UInt32 vkey, UInt8 scanCode, Boolean down);
}
enum CursorDisplayState enum CursorDisplayState
{ {

View File

@@ -28,7 +28,6 @@ Modifications:
#pragma once #pragma once
#include "TermControl.h"
#include "ControlInteractivity.h" #include "ControlInteractivity.h"
#include "TermControlAutomationPeer.g.h" #include "TermControlAutomationPeer.g.h"
#include "../types/TermControlUiaProvider.hpp" #include "../types/TermControlUiaProvider.hpp"
@@ -37,6 +36,8 @@ Modifications:
namespace winrt::Microsoft::Terminal::Control::implementation namespace winrt::Microsoft::Terminal::Control::implementation
{ {
struct TermControl;
struct TermControlAutomationPeer : struct TermControlAutomationPeer :
public TermControlAutomationPeerT<TermControlAutomationPeer>, public TermControlAutomationPeerT<TermControlAutomationPeer>,
::Microsoft::Console::Types::IUiaEventDispatcher ::Microsoft::Console::Types::IUiaEventDispatcher

View File

@@ -122,7 +122,6 @@
<Midl Include="ControlInteractivity.idl" /> <Midl Include="ControlInteractivity.idl" />
<Midl Include="ScrollBarVisualStateManager.idl" /> <Midl Include="ScrollBarVisualStateManager.idl" />
<Midl Include="ICoreState.idl" /> <Midl Include="ICoreState.idl" />
<Midl Include="IDirectKeyListener.idl" />
<Midl Include="KeyChord.idl" /> <Midl Include="KeyChord.idl" />
<Midl Include="EventArgs.idl" /> <Midl Include="EventArgs.idl" />
<Midl Include="IKeyBindings.idl" /> <Midl Include="IKeyBindings.idl" />
@@ -178,6 +177,10 @@
<Project>{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}</Project> <Project>{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly> <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference> </ProjectReference>
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\UIHelpers\UIHelpers.vcxproj">
<Project>{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}</Project>
<Private>false</Private>
</ProjectReference>
</ItemGroup> </ItemGroup>
<!-- ====================== Compiler & Linker Flags ===================== --> <!-- ====================== Compiler & Linker Flags ===================== -->
<ItemDefinitionGroup> <ItemDefinitionGroup>

View File

@@ -65,6 +65,11 @@
<Private>true</Private> <Private>true</Private>
<CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies> <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
</ProjectReference> </ProjectReference>
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\UIHelpers\UIHelpers.vcxproj">
<Project>{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}</Project>
<Private>false</Private>
</ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -58,6 +58,8 @@
#include <winrt/Microsoft.Terminal.TerminalConnection.h> #include <winrt/Microsoft.Terminal.TerminalConnection.h>
#include <winrt/Microsoft.Terminal.Core.h> #include <winrt/Microsoft.Terminal.Core.h>
#include <winrt/Microsoft.Terminal.UI.h>
#include <windows.ui.xaml.media.dxinterop.h> #include <windows.ui.xaml.media.dxinterop.h>
#include <TraceLoggingProvider.h> #include <TraceLoggingProvider.h>

View File

@@ -8,7 +8,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:Microsoft.Terminal.Settings.Editor" xmlns:local="using:Microsoft.Terminal.Settings.Editor"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:model="using:Microsoft.Terminal.Settings.Model" xmlns:mtu="using:Microsoft.Terminal.UI"
mc:Ignorable="d"> mc:Ignorable="d">
<Page.Resources> <Page.Resources>
@@ -157,7 +157,6 @@
</Style> </Style>
<!-- Converters & Misc. --> <!-- Converters & Misc. -->
<model:IconPathConverter x:Key="IconSourceConverter" />
<SolidColorBrush x:Key="ActionContainerBackgroundEditing" <SolidColorBrush x:Key="ActionContainerBackgroundEditing"
Color="{ThemeResource SystemListMediumColor}" /> Color="{ThemeResource SystemListMediumColor}" />
<SolidColorBrush x:Key="ActionContainerBackground" <SolidColorBrush x:Key="ActionContainerBackground"
@@ -194,7 +193,7 @@
<TextBlock Grid.Column="0" <TextBlock Grid.Column="0"
Style="{StaticResource KeyBindingNameTextBlockStyle}" Style="{StaticResource KeyBindingNameTextBlockStyle}"
Text="{x:Bind Name, Mode=OneWay}" Text="{x:Bind Name, Mode=OneWay}"
Visibility="{x:Bind local:Converters.InvertedBooleanToVisibility(IsInEditMode), Mode=OneWay}" /> Visibility="{x:Bind mtu:Converters.InvertedBooleanToVisibility(IsInEditMode), Mode=OneWay}" />
<!-- Edit Mode: Action Combo-box --> <!-- Edit Mode: Action Combo-box -->
<ComboBox x:Uid="Actions_ActionComboBox" <ComboBox x:Uid="Actions_ActionComboBox"
@@ -210,7 +209,7 @@
HorizontalAlignment="Right" HorizontalAlignment="Right"
VerticalAlignment="Center" VerticalAlignment="Center"
Style="{ThemeResource KeyChordBorderStyle}" Style="{ThemeResource KeyChordBorderStyle}"
Visibility="{x:Bind local:Converters.InvertedBooleanToVisibility(IsInEditMode), Mode=OneWay}"> Visibility="{x:Bind mtu:Converters.InvertedBooleanToVisibility(IsInEditMode), Mode=OneWay}">
<TextBlock FontSize="14" <TextBlock FontSize="14"
Style="{ThemeResource KeyChordTextBlockStyle}" Style="{ThemeResource KeyChordTextBlockStyle}"
@@ -302,7 +301,7 @@
Margin="8,0,0,0" Margin="8,0,0,0"
AutomationProperties.Name="{x:Bind DeleteButtonName}" AutomationProperties.Name="{x:Bind DeleteButtonName}"
Style="{StaticResource DeleteSmallButtonStyle}" Style="{StaticResource DeleteSmallButtonStyle}"
Visibility="{x:Bind local:Converters.InvertedBooleanToVisibility(IsNewlyAdded), Mode=OneWay}"> Visibility="{x:Bind mtu:Converters.InvertedBooleanToVisibility(IsNewlyAdded), Mode=OneWay}">
<Button.Content> <Button.Content>
<FontIcon FontSize="{StaticResource EditButtonIconSize}" <FontIcon FontSize="{StaticResource EditButtonIconSize}"
Glyph="&#xE74D;" /> Glyph="&#xE74D;" />

View File

@@ -9,6 +9,7 @@
xmlns:local="using:Microsoft.Terminal.Settings.Editor" xmlns:local="using:Microsoft.Terminal.Settings.Editor"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:model="using:Microsoft.Terminal.Settings.Model" xmlns:model="using:Microsoft.Terminal.Settings.Model"
xmlns:mtu="using:Microsoft.Terminal.UI"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls" xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
mc:Ignorable="d"> mc:Ignorable="d">
@@ -17,7 +18,6 @@
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="CommonResources.xaml" /> <ResourceDictionary Source="CommonResources.xaml" />
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
<model:IconPathConverter x:Key="IconSourceConverter" />
</ResourceDictionary> </ResourceDictionary>
</Page.Resources> </Page.Resources>
@@ -59,7 +59,7 @@
<IconSourceElement Grid.Column="0" <IconSourceElement Grid.Column="0"
Width="16" Width="16"
Height="16" Height="16"
IconSource="{x:Bind Icon, Converter={StaticResource IconSourceConverter}}" /> IconSource="{x:Bind mtu:IconPathConverter.IconSourceWUX(Icon), Mode=OneTime}" />
<TextBlock Grid.Column="1" <TextBlock Grid.Column="1"
Text="{x:Bind Name}" /> Text="{x:Bind Name}" />

View File

@@ -441,12 +441,12 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
void AppearanceViewModel::SetFontWeightFromDouble(double fontWeight) void AppearanceViewModel::SetFontWeightFromDouble(double fontWeight)
{ {
FontWeight(Converters::DoubleToFontWeight(fontWeight)); FontWeight(winrt::Microsoft::Terminal::UI::Converters::DoubleToFontWeight(fontWeight));
} }
void AppearanceViewModel::SetBackgroundImageOpacityFromPercentageValue(double percentageValue) void AppearanceViewModel::SetBackgroundImageOpacityFromPercentageValue(double percentageValue)
{ {
BackgroundImageOpacity(Converters::PercentageValueToPercentage(percentageValue)); BackgroundImageOpacity(winrt::Microsoft::Terminal::UI::Converters::PercentageValueToPercentage(percentageValue));
} }
void AppearanceViewModel::SetBackgroundImagePath(winrt::hstring path) void AppearanceViewModel::SetBackgroundImagePath(winrt::hstring path)

View File

@@ -9,6 +9,7 @@
xmlns:local="using:Microsoft.Terminal.Settings.Editor" xmlns:local="using:Microsoft.Terminal.Settings.Editor"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:model="using:Microsoft.Terminal.Settings.Model" xmlns:model="using:Microsoft.Terminal.Settings.Model"
xmlns:mtu="using:Microsoft.Terminal.UI"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls" xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
IsTabStop="False" IsTabStop="False"
mc:Ignorable="d"> mc:Ignorable="d">
@@ -34,7 +35,7 @@
x:DataType="local:ColorTableEntry"> x:DataType="local:ColorTableEntry">
<Border Width="8" <Border Width="8"
Height="8" Height="8"
Background="{x:Bind local:Converters.ColorToBrush(Color)}" Background="{x:Bind mtu:Converters.ColorToBrush(Color)}"
CornerRadius="1" /> CornerRadius="1" />
</DataTemplate> </DataTemplate>
<CollectionViewSource x:Key="FontAxesCVS" <CollectionViewSource x:Key="FontAxesCVS"
@@ -65,7 +66,7 @@
<Grid Grid.Column="0" <Grid Grid.Column="0"
Padding="8" Padding="8"
VerticalAlignment="Center" VerticalAlignment="Center"
Background="{x:Bind local:Converters.ColorToBrush(BackgroundColor.Color), Mode=OneWay}" Background="{x:Bind mtu:Converters.ColorToBrush(BackgroundColor.Color), Mode=OneWay}"
ColumnSpacing="1" ColumnSpacing="1"
CornerRadius="2" CornerRadius="2"
RowSpacing="1"> RowSpacing="1">
@@ -172,7 +173,7 @@
VerticalAlignment="Center" VerticalAlignment="Center"
AutomationProperties.AccessibilityView="Raw" AutomationProperties.AccessibilityView="Raw"
FontFamily="Cascadia Code" FontFamily="Cascadia Code"
Foreground="{x:Bind local:Converters.ColorToBrush(ForegroundColor.Color), Mode=OneWay}" Foreground="{x:Bind mtu:Converters.ColorToBrush(ForegroundColor.Color), Mode=OneWay}"
Text="{x:Bind Name, Mode=OneWay}" Text="{x:Bind Name, Mode=OneWay}"
TextTrimming="WordEllipsis" /> TextTrimming="WordEllipsis" />
</Grid> </Grid>
@@ -201,7 +202,7 @@
SelectedItem="{x:Bind CurrentFontFace, Mode=OneWay}" SelectedItem="{x:Bind CurrentFontFace, Mode=OneWay}"
SelectionChanged="FontFace_SelectionChanged" SelectionChanged="FontFace_SelectionChanged"
Style="{StaticResource ComboBoxSettingStyle}" Style="{StaticResource ComboBoxSettingStyle}"
Visibility="{x:Bind local:Converters.InvertedBooleanToVisibility(ShowAllFonts), Mode=OneWay}" /> Visibility="{x:Bind mtu:Converters.InvertedBooleanToVisibility(ShowAllFonts), Mode=OneWay}" />
<ComboBox x:Uid="Profile_FontFaceBox" <ComboBox x:Uid="Profile_FontFaceBox"
ItemTemplate="{StaticResource FontFaceComboBoxItemTemplate}" ItemTemplate="{StaticResource FontFaceComboBoxItemTemplate}"
ItemsSource="{x:Bind SourceProfile.CompleteFontList, Mode=OneWay}" ItemsSource="{x:Bind SourceProfile.CompleteFontList, Mode=OneWay}"
@@ -282,7 +283,7 @@
Minimum="0" Minimum="0"
TickFrequency="50" TickFrequency="50"
TickPlacement="Outside" TickPlacement="Outside"
Value="{x:Bind local:Converters.FontWeightToDouble(Appearance.FontWeight), BindBack=Appearance.SetFontWeightFromDouble, Mode=TwoWay}" /> Value="{x:Bind mtu:Converters.FontWeightToDouble(Appearance.FontWeight), BindBack=Appearance.SetFontWeightFromDouble, Mode=TwoWay}" />
<TextBlock Grid.Column="1" <TextBlock Grid.Column="1"
Margin="10,0,0,0" Margin="10,0,0,0"
Style="{StaticResource SliderValueLabelStyle}" Style="{StaticResource SliderValueLabelStyle}"
@@ -499,15 +500,15 @@
Style="{StaticResource ExpanderSettingContainerStyle}"> Style="{StaticResource ExpanderSettingContainerStyle}">
<StackPanel Orientation="Vertical"> <StackPanel Orientation="Vertical">
<TextBox x:Uid="Profile_BackgroundImageBox" <TextBox x:Uid="Profile_BackgroundImageBox"
IsEnabled="{x:Bind local:Converters.StringsAreNotEqual('desktopWallpaper', Appearance.BackgroundImagePath), Mode=OneWay}" IsEnabled="{x:Bind mtu:Converters.StringsAreNotEqual('desktopWallpaper', Appearance.BackgroundImagePath), Mode=OneWay}"
IsSpellCheckEnabled="False" IsSpellCheckEnabled="False"
Style="{StaticResource TextBoxSettingStyle}" Style="{StaticResource TextBoxSettingStyle}"
Text="{x:Bind local:Converters.StringOrEmptyIfPlaceholder('desktopWallpaper', Appearance.BackgroundImagePath), Mode=TwoWay, BindBack=Appearance.SetBackgroundImagePath}" /> Text="{x:Bind mtu:Converters.StringOrEmptyIfPlaceholder('desktopWallpaper', Appearance.BackgroundImagePath), Mode=TwoWay, BindBack=Appearance.SetBackgroundImagePath}" />
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<Button x:Uid="Profile_BackgroundImageBrowse" <Button x:Uid="Profile_BackgroundImageBrowse"
Margin="0,10,10,0" Margin="0,10,10,0"
Click="BackgroundImage_Click" Click="BackgroundImage_Click"
IsEnabled="{x:Bind local:Converters.StringsAreNotEqual('desktopWallpaper', Appearance.BackgroundImagePath), Mode=OneWay}" IsEnabled="{x:Bind mtu:Converters.StringsAreNotEqual('desktopWallpaper', Appearance.BackgroundImagePath), Mode=OneWay}"
Style="{StaticResource BrowseButtonStyle}" /> Style="{StaticResource BrowseButtonStyle}" />
<CheckBox x:Name="UseDesktopImageCheckBox" <CheckBox x:Name="UseDesktopImageCheckBox"
x:Uid="Profile_UseDesktopImage" x:Uid="Profile_UseDesktopImage"
@@ -732,10 +733,10 @@
<Slider x:Name="BIOpacitySlider" <Slider x:Name="BIOpacitySlider"
x:Uid="Profile_BackgroundImageOpacitySlider" x:Uid="Profile_BackgroundImageOpacitySlider"
Grid.Column="0" Grid.Column="0"
Value="{x:Bind local:Converters.PercentageToPercentageValue(Appearance.BackgroundImageOpacity), BindBack=Appearance.SetBackgroundImageOpacityFromPercentageValue, Mode=TwoWay}" /> Value="{x:Bind mtu:Converters.PercentageToPercentageValue(Appearance.BackgroundImageOpacity), BindBack=Appearance.SetBackgroundImageOpacityFromPercentageValue, Mode=TwoWay}" />
<TextBlock Grid.Column="1" <TextBlock Grid.Column="1"
Style="{StaticResource SliderValueLabelStyle}" Style="{StaticResource SliderValueLabelStyle}"
Text="{x:Bind local:Converters.AppendPercentageSign(BIOpacitySlider.Value), Mode=OneWay}" /> Text="{x:Bind mtu:Converters.AppendPercentageSign(BIOpacitySlider.Value), Mode=OneWay}" />
</Grid> </Grid>
</local:SettingContainer> </local:SettingContainer>
</StackPanel> </StackPanel>

View File

@@ -9,6 +9,7 @@
xmlns:local="using:Microsoft.Terminal.Settings.Editor" xmlns:local="using:Microsoft.Terminal.Settings.Editor"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:model="using:Microsoft.Terminal.Settings.Model" xmlns:model="using:Microsoft.Terminal.Settings.Model"
xmlns:mtu="using:Microsoft.Terminal.UI"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls" xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
mc:Ignorable="d"> mc:Ignorable="d">
@@ -22,7 +23,7 @@
x:DataType="local:ColorTableEntry"> x:DataType="local:ColorTableEntry">
<Border Width="12" <Border Width="12"
Height="12" Height="12"
Background="{x:Bind local:Converters.ColorToBrush(Color)}" Background="{x:Bind mtu:Converters.ColorToBrush(Color)}"
CornerRadius="2" /> CornerRadius="2" />
</DataTemplate> </DataTemplate>
@@ -89,7 +90,7 @@
Height="48" Height="48"
Padding="12,11,8,8" Padding="12,11,8,8"
VerticalAlignment="Center" VerticalAlignment="Center"
Background="{x:Bind local:Converters.ColorToBrush(BackgroundColor.Color), Mode=OneWay}" Background="{x:Bind mtu:Converters.ColorToBrush(BackgroundColor.Color), Mode=OneWay}"
ColumnSpacing="2" ColumnSpacing="2"
CornerRadius="4" CornerRadius="4"
RowSpacing="2"> RowSpacing="2">
@@ -195,7 +196,7 @@
VerticalAlignment="Center" VerticalAlignment="Center"
AutomationProperties.AccessibilityView="Raw" AutomationProperties.AccessibilityView="Raw"
FontFamily="Cascadia Code" FontFamily="Cascadia Code"
Foreground="{x:Bind local:Converters.ColorToBrush(ForegroundColor.Color), Mode=OneWay}" Foreground="{x:Bind mtu:Converters.ColorToBrush(ForegroundColor.Color), Mode=OneWay}"
Text="{x:Bind Name, Mode=OneWay}" /> Text="{x:Bind Name, Mode=OneWay}" />
</Grid> </Grid>
<Border Grid.Column="1" <Border Grid.Column="1"

View File

@@ -1,30 +0,0 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
#pragma once
#include "Converters.g.h"
namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
{
struct Converters : ConvertersT<Converters>
{
static winrt::hstring AppendPercentageSign(double value);
static winrt::Windows::UI::Text::FontWeight DoubleToFontWeight(double value);
static winrt::Windows::UI::Xaml::Media::SolidColorBrush ColorToBrush(winrt::Windows::UI::Color color);
static double FontWeightToDouble(winrt::Windows::UI::Text::FontWeight fontWeight);
static bool InvertBoolean(bool value);
static winrt::Windows::UI::Xaml::Visibility InvertedBooleanToVisibility(bool value);
static double MaxValueFromPaddingString(winrt::hstring paddingString);
static int PercentageToPercentageValue(double value);
static double PercentageValueToPercentage(double value);
static bool StringsAreNotEqual(winrt::hstring expected, winrt::hstring actual);
static winrt::Windows::UI::Xaml::Visibility StringNotEmptyToVisibility(winrt::hstring value);
static winrt::hstring StringOrEmptyIfPlaceholder(winrt::hstring placeholder, winrt::hstring value);
};
}
namespace winrt::Microsoft::Terminal::Settings::Editor::factory_implementation
{
BASIC_FACTORY(Converters);
}

View File

@@ -9,6 +9,7 @@
xmlns:local="using:Microsoft.Terminal.Settings.Editor" xmlns:local="using:Microsoft.Terminal.Settings.Editor"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:model="using:Microsoft.Terminal.Settings.Model" xmlns:model="using:Microsoft.Terminal.Settings.Model"
xmlns:mtu="using:Microsoft.Terminal.UI"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls" xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
mc:Ignorable="d"> mc:Ignorable="d">
@@ -56,7 +57,7 @@
<DataTemplate x:Key="ColorTableEntryTemplate" <DataTemplate x:Key="ColorTableEntryTemplate"
x:DataType="local:ColorTableEntry"> x:DataType="local:ColorTableEntry">
<Button AutomationProperties.Name="{x:Bind AccessibleName, Mode=OneWay}" <Button AutomationProperties.Name="{x:Bind AccessibleName, Mode=OneWay}"
Background="{x:Bind local:Converters.ColorToBrush(Color), Mode=OneWay}" Background="{x:Bind mtu:Converters.ColorToBrush(Color), Mode=OneWay}"
Style="{StaticResource ColorSchemesColorButtonStyle}" Style="{StaticResource ColorSchemesColorButtonStyle}"
ToolTipService.ToolTip="{x:Bind AccessibleName, Mode=OneWay}"> ToolTipService.ToolTip="{x:Bind AccessibleName, Mode=OneWay}">
<Button.Flyout> <Button.Flyout>
@@ -74,7 +75,7 @@
<TextBlock AutomationProperties.Name="{x:Bind Name}" <TextBlock AutomationProperties.Name="{x:Bind Name}"
FontFamily="Cascadia Code" FontFamily="Cascadia Code"
FontSize="14" FontSize="14"
Foreground="{x:Bind local:Converters.ColorToBrush(Color), Mode=OneWay}" Foreground="{x:Bind mtu:Converters.ColorToBrush(Color), Mode=OneWay}"
Text="{x:Bind Name}" Text="{x:Bind Name}"
ToolTipService.ToolTip="{x:Bind Name}" /> ToolTipService.ToolTip="{x:Bind Name}" />
</DataTemplate> </DataTemplate>
@@ -90,7 +91,7 @@
MaxWidth="{StaticResource StandardControlMaxWidth}" MaxWidth="{StaticResource StandardControlMaxWidth}"
Margin="4" Margin="4"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Background="{x:Bind local:Converters.ColorToBrush(ViewModel.BackgroundColor.Color), Mode=OneWay}" Background="{x:Bind mtu:Converters.ColorToBrush(ViewModel.BackgroundColor.Color), Mode=OneWay}"
BorderBrush="{ThemeResource SystemControlForegroundBaseMediumLowBrush}" BorderBrush="{ThemeResource SystemControlForegroundBaseMediumLowBrush}"
BorderThickness="1"> BorderThickness="1">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
@@ -198,7 +199,7 @@
</Border> </Border>
<local:SettingContainer x:Uid="ColorScheme_InboxSchemeDuplicate" <local:SettingContainer x:Uid="ColorScheme_InboxSchemeDuplicate"
Visibility="{x:Bind local:Converters.InvertedBooleanToVisibility(ViewModel.IsEditable), Mode=OneWay}"> Visibility="{x:Bind mtu:Converters.InvertedBooleanToVisibility(ViewModel.IsEditable), Mode=OneWay}">
<Button x:Name="DuplicateSchemeButton" <Button x:Name="DuplicateSchemeButton"
x:Uid="ColorScheme_DuplicateButton" x:Uid="ColorScheme_DuplicateButton"
Click="{x:Bind ViewModel.Duplicate_Click}" Click="{x:Bind ViewModel.Duplicate_Click}"

View File

@@ -9,6 +9,7 @@
xmlns:local="using:Microsoft.Terminal.Settings.Editor" xmlns:local="using:Microsoft.Terminal.Settings.Editor"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:model="using:Microsoft.Terminal.Settings.Model" xmlns:model="using:Microsoft.Terminal.Settings.Model"
xmlns:mtu="using:Microsoft.Terminal.UI"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls" xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
mc:Ignorable="d"> mc:Ignorable="d">
@@ -71,7 +72,7 @@
<!-- Always show tabs --> <!-- Always show tabs -->
<local:SettingContainer x:Uid="Globals_AlwaysShowTabs"> <local:SettingContainer x:Uid="Globals_AlwaysShowTabs">
<ToggleSwitch IsEnabled="{x:Bind local:Converters.InvertBoolean(ViewModel.ShowTabsInTitlebar), Mode=OneWay}" <ToggleSwitch IsEnabled="{x:Bind mtu:Converters.InvertBoolean(ViewModel.ShowTabsInTitlebar), Mode=OneWay}"
IsOn="{x:Bind ViewModel.AlwaysShowTabs, Mode=TwoWay}" IsOn="{x:Bind ViewModel.AlwaysShowTabs, Mode=TwoWay}"
Style="{StaticResource ToggleSwitchInExpanderStyle}" /> Style="{StaticResource ToggleSwitchInExpanderStyle}" />
</local:SettingContainer> </local:SettingContainer>

View File

@@ -9,6 +9,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:Microsoft.Terminal.Settings.Editor" xmlns:local="using:Microsoft.Terminal.Settings.Editor"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mtu="using:Microsoft.Terminal.UI"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls" xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
mc:Ignorable="d"> mc:Ignorable="d">
@@ -22,7 +23,6 @@
x:DataType="local:EnumEntry"> x:DataType="local:EnumEntry">
<TextBlock Text="{x:Bind EnumName, Mode=OneWay}" /> <TextBlock Text="{x:Bind EnumName, Mode=OneWay}" />
</DataTemplate> </DataTemplate>
<SettingsModel:IconPathConverter x:Key="IconSourceConverter" />
<Style x:Key="LaunchSizeNumberBoxStyle" <Style x:Key="LaunchSizeNumberBoxStyle"
BasedOn="{StaticResource NumberBoxSettingStyle}" BasedOn="{StaticResource NumberBoxSettingStyle}"
TargetType="muxc:NumberBox"> TargetType="muxc:NumberBox">
@@ -64,7 +64,7 @@
<IconSourceElement Grid.Column="0" <IconSourceElement Grid.Column="0"
Width="16" Width="16"
Height="16" Height="16"
IconSource="{x:Bind Icon, Converter={StaticResource IconSourceConverter}}" /> IconSource="{x:Bind mtu:IconPathConverter.IconSourceWUX(Icon), Mode=OneTime}" />
<TextBlock Grid.Column="1" <TextBlock Grid.Column="1"
Text="{x:Bind Name}" /> Text="{x:Bind Name}" />
@@ -111,7 +111,7 @@
Width="24" Width="24"
Height="24" Height="24"
VerticalAlignment="Center" VerticalAlignment="Center"
IconSource="{x:Bind Icon, Converter={StaticResource IconSourceConverter}}" /> IconSource="{x:Bind mtu:IconPathConverter.IconSourceWUX(Icon), Mode=OneTime}" />
<TextBlock Grid.Row="0" <TextBlock Grid.Row="0"
Grid.Column="1" Grid.Column="1"
@@ -124,14 +124,14 @@
AutomationProperties.AccessibilityView="Raw" AutomationProperties.AccessibilityView="Raw"
Style="{ThemeResource SecondaryTextBlockStyle}" Style="{ThemeResource SecondaryTextBlockStyle}"
Text="{x:Bind Author}" Text="{x:Bind Author}"
Visibility="{x:Bind local:Converters.StringNotEmptyToVisibility(Author)}" /> Visibility="{x:Bind mtu:Converters.StringNotEmptyToVisibility(Author)}" />
<TextBlock Grid.Row="1" <TextBlock Grid.Row="1"
Grid.Column="2" Grid.Column="2"
AutomationProperties.AccessibilityView="Raw" AutomationProperties.AccessibilityView="Raw"
Style="{ThemeResource SecondaryTextBlockStyle}" Style="{ThemeResource SecondaryTextBlockStyle}"
Text="{x:Bind Version}" Text="{x:Bind Version}"
Visibility="{x:Bind local:Converters.StringNotEmptyToVisibility(Version)}" /> Visibility="{x:Bind mtu:Converters.StringNotEmptyToVisibility(Version)}" />
</Grid> </Grid>
</DataTemplate> </DataTemplate>
@@ -248,7 +248,7 @@
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
Width="118" Width="118"
IsEnabled="{x:Bind local:Converters.InvertBoolean(ViewModel.UseDefaultLaunchPosition), Mode=OneWay}" IsEnabled="{x:Bind mtu:Converters.InvertBoolean(ViewModel.UseDefaultLaunchPosition), Mode=OneWay}"
Style="{StaticResource LaunchPositionNumberBoxStyle}" Style="{StaticResource LaunchPositionNumberBoxStyle}"
Value="{x:Bind ViewModel.InitialPosX, Mode=TwoWay}" /> Value="{x:Bind ViewModel.InitialPosX, Mode=TwoWay}" />
<muxc:NumberBox x:Name="PosYBox" <muxc:NumberBox x:Name="PosYBox"
@@ -256,7 +256,7 @@
Grid.Row="0" Grid.Row="0"
Grid.Column="1" Grid.Column="1"
Width="118" Width="118"
IsEnabled="{x:Bind local:Converters.InvertBoolean(ViewModel.UseDefaultLaunchPosition), Mode=OneWay}" IsEnabled="{x:Bind mtu:Converters.InvertBoolean(ViewModel.UseDefaultLaunchPosition), Mode=OneWay}"
Style="{StaticResource LaunchPositionNumberBoxStyle}" Style="{StaticResource LaunchPositionNumberBoxStyle}"
Value="{x:Bind ViewModel.InitialPosY, Mode=TwoWay}" /> Value="{x:Bind ViewModel.InitialPosY, Mode=TwoWay}" />
<CheckBox x:Name="UseDefaultLaunchPositionCheckbox" <CheckBox x:Name="UseDefaultLaunchPositionCheckbox"

View File

@@ -602,7 +602,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
MUX::Controls::NavigationViewItem profileNavItem; MUX::Controls::NavigationViewItem profileNavItem;
profileNavItem.Content(box_value(profile.Name())); profileNavItem.Content(box_value(profile.Name()));
profileNavItem.Tag(box_value<Editor::ProfileViewModel>(profile)); profileNavItem.Tag(box_value<Editor::ProfileViewModel>(profile));
profileNavItem.Icon(IconPathConverter::IconWUX(profile.EvaluatedIcon())); profileNavItem.Icon(UI::IconPathConverter::IconWUX(profile.EvaluatedIcon()));
// Update the menu item when the icon/name changes // Update the menu item when the icon/name changes
auto weakMenuItem{ make_weak(profileNavItem) }; auto weakMenuItem{ make_weak(profileNavItem) };
@@ -612,7 +612,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
const auto& tag{ menuItem.Tag().as<Editor::ProfileViewModel>() }; const auto& tag{ menuItem.Tag().as<Editor::ProfileViewModel>() };
if (args.PropertyName() == L"Icon") if (args.PropertyName() == L"Icon")
{ {
menuItem.Icon(IconPathConverter::IconWUX(tag.Icon())); menuItem.Icon(UI::IconPathConverter::IconWUX(tag.Icon()));
} }
else if (args.PropertyName() == L"Name") else if (args.PropertyName() == L"Name")
{ {

View File

@@ -8,6 +8,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:Microsoft.Terminal.Settings.Editor" xmlns:local="using:Microsoft.Terminal.Settings.Editor"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mtu="using:Microsoft.Terminal.UI"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls" xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
xmlns:tsm="using:Microsoft.Terminal.Settings.Model" xmlns:tsm="using:Microsoft.Terminal.Settings.Model"
mc:Ignorable="d"> mc:Ignorable="d">

View File

@@ -47,10 +47,6 @@
<ClInclude Include="AddProfile.h"> <ClInclude Include="AddProfile.h">
<DependentUpon>AddProfile.xaml</DependentUpon> <DependentUpon>AddProfile.xaml</DependentUpon>
</ClInclude> </ClInclude>
<ClInclude Include="Converters.h">
<DependentUpon>Converters.idl</DependentUpon>
<SubType>Code</SubType>
</ClInclude>
<ClInclude Include="EnumEntry.h"> <ClInclude Include="EnumEntry.h">
<DependentUpon>EnumEntry.idl</DependentUpon> <DependentUpon>EnumEntry.idl</DependentUpon>
</ClInclude> </ClInclude>
@@ -194,10 +190,6 @@
<ClCompile Include="AddProfile.cpp"> <ClCompile Include="AddProfile.cpp">
<DependentUpon>AddProfile.xaml</DependentUpon> <DependentUpon>AddProfile.xaml</DependentUpon>
</ClCompile> </ClCompile>
<ClCompile Include="Converters.cpp">
<DependentUpon>Converters.idl</DependentUpon>
<SubType>Code</SubType>
</ClCompile>
<ClCompile Include="GlobalAppearance.cpp"> <ClCompile Include="GlobalAppearance.cpp">
<DependentUpon>GlobalAppearance.xaml</DependentUpon> <DependentUpon>GlobalAppearance.xaml</DependentUpon>
</ClCompile> </ClCompile>
@@ -294,7 +286,6 @@
<DependentUpon>AddProfile.xaml</DependentUpon> <DependentUpon>AddProfile.xaml</DependentUpon>
<SubType>Code</SubType> <SubType>Code</SubType>
</Midl> </Midl>
<Midl Include="Converters.idl" />
<Midl Include="EnumEntry.idl" /> <Midl Include="EnumEntry.idl" />
<Midl Include="GlobalAppearance.idl"> <Midl Include="GlobalAppearance.idl">
<DependentUpon>GlobalAppearance.xaml</DependentUpon> <DependentUpon>GlobalAppearance.xaml</DependentUpon>
@@ -377,6 +368,9 @@
<Project>{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}</Project> <Project>{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly> <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference> </ProjectReference>
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\UIHelpers\UIHelpers.vcxproj">
<Project>{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}</Project>
</ProjectReference>
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalConnection\TerminalConnection.vcxproj"> <ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalConnection\TerminalConnection.vcxproj">
<Private>false</Private> <Private>false</Private>
</ProjectReference> </ProjectReference>

View File

@@ -26,9 +26,6 @@
<Midl Include="GlobalAppearanceViewModel.idl" /> <Midl Include="GlobalAppearanceViewModel.idl" />
<Midl Include="LaunchViewModel.idl" /> <Midl Include="LaunchViewModel.idl" />
<Midl Include="EnumEntry.idl" /> <Midl Include="EnumEntry.idl" />
<Midl Include="Converters.idl">
<Filter>Converters</Filter>
</Midl>
<Midl Include="SettingContainer.idl" /> <Midl Include="SettingContainer.idl" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -53,4 +50,4 @@
<Page Include="AddProfile.xaml" /> <Page Include="AddProfile.xaml" />
<Page Include="KeyChordListener.xaml" /> <Page Include="KeyChordListener.xaml" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -49,7 +49,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
void SetAcrylicOpacityPercentageValue(double value) void SetAcrylicOpacityPercentageValue(double value)
{ {
Opacity(winrt::Microsoft::Terminal::Settings::Editor::Converters::PercentageValueToPercentage(value)); Opacity(winrt::Microsoft::Terminal::UI::Converters::PercentageValueToPercentage(value));
}; };
void SetPadding(double value) void SetPadding(double value)

View File

@@ -9,6 +9,7 @@
xmlns:local="using:Microsoft.Terminal.Settings.Editor" xmlns:local="using:Microsoft.Terminal.Settings.Editor"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:model="using:Microsoft.Terminal.Settings.Model" xmlns:model="using:Microsoft.Terminal.Settings.Model"
xmlns:mtu="using:Microsoft.Terminal.UI"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls" xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
mc:Ignorable="d"> mc:Ignorable="d">
@@ -78,10 +79,10 @@
<Slider x:Name="OpacitySlider" <Slider x:Name="OpacitySlider"
x:Uid="Profile_OpacitySlider" x:Uid="Profile_OpacitySlider"
Grid.Column="0" Grid.Column="0"
Value="{x:Bind local:Converters.PercentageToPercentageValue(Profile.Opacity), BindBack=Profile.SetAcrylicOpacityPercentageValue, Mode=TwoWay}" /> Value="{x:Bind mtu:Converters.PercentageToPercentageValue(Profile.Opacity), BindBack=Profile.SetAcrylicOpacityPercentageValue, Mode=TwoWay}" />
<TextBlock Grid.Column="1" <TextBlock Grid.Column="1"
Style="{StaticResource SliderValueLabelStyle}" Style="{StaticResource SliderValueLabelStyle}"
Text="{x:Bind local:Converters.AppendPercentageSign(OpacitySlider.Value), Mode=OneWay}" /> Text="{x:Bind mtu:Converters.AppendPercentageSign(OpacitySlider.Value), Mode=OneWay}" />
</Grid> </Grid>
</StackPanel> </StackPanel>
</local:SettingContainer> </local:SettingContainer>
@@ -116,7 +117,7 @@
<Slider x:Name="PaddingSlider" <Slider x:Name="PaddingSlider"
x:Uid="Profile_PaddingSlider" x:Uid="Profile_PaddingSlider"
Grid.Column="0" Grid.Column="0"
Value="{x:Bind local:Converters.MaxValueFromPaddingString(Profile.Padding), BindBack=Profile.SetPadding, Mode=TwoWay}" /> Value="{x:Bind mtu:Converters.MaxValueFromPaddingString(Profile.Padding), BindBack=Profile.SetPadding, Mode=TwoWay}" />
<TextBlock Grid.Column="1" <TextBlock Grid.Column="1"
Style="{StaticResource SliderValueLabelStyle}" Style="{StaticResource SliderValueLabelStyle}"
Text="{Binding ElementName=PaddingSlider, Path=Value, Mode=OneWay}" /> Text="{Binding ElementName=PaddingSlider, Path=Value, Mode=OneWay}" />
@@ -144,7 +145,7 @@
Margin="10,0,0,0" Margin="10,0,0,0"
Click="CreateUnfocusedAppearance_Click" Click="CreateUnfocusedAppearance_Click"
Style="{StaticResource BaseButtonStyle}" Style="{StaticResource BaseButtonStyle}"
Visibility="{x:Bind local:Converters.InvertedBooleanToVisibility(Profile.HasUnfocusedAppearance), Mode=OneWay}"> Visibility="{x:Bind mtu:Converters.InvertedBooleanToVisibility(Profile.HasUnfocusedAppearance), Mode=OneWay}">
<Button.Content> <Button.Content>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<FontIcon Margin="0,3,0,0" <FontIcon Margin="0,3,0,0"

View File

@@ -9,6 +9,7 @@
xmlns:local="using:Microsoft.Terminal.Settings.Editor" xmlns:local="using:Microsoft.Terminal.Settings.Editor"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:model="using:Microsoft.Terminal.Settings.Model" xmlns:model="using:Microsoft.Terminal.Settings.Model"
xmlns:mtu="using:Microsoft.Terminal.UI"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls" xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
mc:Ignorable="d"> mc:Ignorable="d">
@@ -43,7 +44,7 @@
<local:SettingContainer x:Uid="Profile_Name" <local:SettingContainer x:Uid="Profile_Name"
CurrentValue="{x:Bind Profile.Name, Mode=OneWay}" CurrentValue="{x:Bind Profile.Name, Mode=OneWay}"
Style="{StaticResource ExpanderSettingContainerStyle}" Style="{StaticResource ExpanderSettingContainerStyle}"
Visibility="{x:Bind local:Converters.InvertedBooleanToVisibility(Profile.IsBaseLayer), Mode=OneWay}"> Visibility="{x:Bind mtu:Converters.InvertedBooleanToVisibility(Profile.IsBaseLayer), Mode=OneWay}">
<TextBox Style="{StaticResource TextBoxSettingStyle}" <TextBox Style="{StaticResource TextBoxSettingStyle}"
Text="{x:Bind Profile.Name, Mode=TwoWay}" /> Text="{x:Bind Profile.Name, Mode=TwoWay}" />
</local:SettingContainer> </local:SettingContainer>
@@ -56,7 +57,7 @@
HasSettingValue="{x:Bind Profile.HasCommandline, Mode=OneWay}" HasSettingValue="{x:Bind Profile.HasCommandline, Mode=OneWay}"
SettingOverrideSource="{x:Bind Profile.CommandlineOverrideSource, Mode=OneWay}" SettingOverrideSource="{x:Bind Profile.CommandlineOverrideSource, Mode=OneWay}"
Style="{StaticResource ExpanderSettingContainerStyle}" Style="{StaticResource ExpanderSettingContainerStyle}"
Visibility="{x:Bind local:Converters.InvertedBooleanToVisibility(Profile.IsBaseLayer), Mode=OneWay}"> Visibility="{x:Bind mtu:Converters.InvertedBooleanToVisibility(Profile.IsBaseLayer), Mode=OneWay}">
<StackPanel> <StackPanel>
<TextBox x:Uid="Profile_CommandlineBox" <TextBox x:Uid="Profile_CommandlineBox"
IsSpellCheckEnabled="False" IsSpellCheckEnabled="False"
@@ -108,16 +109,16 @@
<StackPanel> <StackPanel>
<TextBox x:Uid="Profile_IconBox" <TextBox x:Uid="Profile_IconBox"
FontFamily="Segoe UI, Segoe Fluent Icons, Segoe MDL2 Assets" FontFamily="Segoe UI, Segoe Fluent Icons, Segoe MDL2 Assets"
IsEnabled="{x:Bind local:Converters.InvertBoolean(Profile.HideIcon), Mode=OneWay}" IsEnabled="{x:Bind mtu:Converters.InvertBoolean(Profile.HideIcon), Mode=OneWay}"
IsSpellCheckEnabled="False" IsSpellCheckEnabled="False"
Style="{StaticResource TextBoxSettingStyle}" Style="{StaticResource TextBoxSettingStyle}"
Text="{x:Bind Profile.Icon, Mode=TwoWay}" Text="{x:Bind Profile.Icon, Mode=TwoWay}"
Visibility="{x:Bind local:Converters.InvertedBooleanToVisibility(Profile.HideIcon), Mode=OneWay}" /> Visibility="{x:Bind mtu:Converters.InvertedBooleanToVisibility(Profile.HideIcon), Mode=OneWay}" />
<Button x:Uid="Profile_IconBrowse" <Button x:Uid="Profile_IconBrowse"
Margin="0,10,0,0" Margin="0,10,0,0"
Click="Icon_Click" Click="Icon_Click"
Style="{StaticResource BrowseButtonStyle}" Style="{StaticResource BrowseButtonStyle}"
Visibility="{x:Bind local:Converters.InvertedBooleanToVisibility(Profile.HideIcon), Mode=OneWay}" /> Visibility="{x:Bind mtu:Converters.InvertedBooleanToVisibility(Profile.HideIcon), Mode=OneWay}" />
<CheckBox x:Name="HideIconCheckbox" <CheckBox x:Name="HideIconCheckbox"
x:Uid="Profile_HideIconCheckbox" x:Uid="Profile_HideIconCheckbox"
Margin="0,5,0,0" Margin="0,5,0,0"
@@ -147,7 +148,7 @@
<!-- Hidden --> <!-- Hidden -->
<local:SettingContainer x:Uid="Profile_Hidden" <local:SettingContainer x:Uid="Profile_Hidden"
Visibility="{x:Bind local:Converters.InvertedBooleanToVisibility(Profile.IsBaseLayer), Mode=OneWay}"> Visibility="{x:Bind mtu:Converters.InvertedBooleanToVisibility(Profile.IsBaseLayer), Mode=OneWay}">
<ToggleSwitch IsOn="{x:Bind Profile.Hidden, Mode=TwoWay}" <ToggleSwitch IsOn="{x:Bind Profile.Hidden, Mode=TwoWay}"
Style="{StaticResource ToggleSwitchInExpanderStyle}" /> Style="{StaticResource ToggleSwitchInExpanderStyle}" />
</local:SettingContainer> </local:SettingContainer>

View File

@@ -49,6 +49,7 @@
#include <winrt/Microsoft.Terminal.Core.h> #include <winrt/Microsoft.Terminal.Core.h>
#include <winrt/Microsoft.Terminal.Control.h> #include <winrt/Microsoft.Terminal.Control.h>
#include <winrt/Microsoft.Terminal.Settings.Model.h> #include <winrt/Microsoft.Terminal.Settings.Model.h>
#include <winrt/Microsoft.Terminal.UI.h>
#include <shlobj.h> #include <shlobj.h>
#include <shobjidl_core.h> #include <shobjidl_core.h>

View File

@@ -1,29 +0,0 @@
#pragma once
#include "IconPathConverter.g.h"
namespace winrt::Microsoft::Terminal::Settings::Model::implementation
{
struct IconPathConverter : IconPathConverterT<IconPathConverter>
{
IconPathConverter() = default;
Windows::Foundation::IInspectable Convert(const Windows::Foundation::IInspectable& value,
const Windows::UI::Xaml::Interop::TypeName& targetType,
const Windows::Foundation::IInspectable& parameter,
const hstring& language);
Windows::Foundation::IInspectable ConvertBack(const Windows::Foundation::IInspectable& value,
const Windows::UI::Xaml::Interop::TypeName& targetType,
const Windows::Foundation::IInspectable& parameter,
const hstring& language);
static Windows::UI::Xaml::Controls::IconElement IconWUX(const winrt::hstring& iconPath);
static Microsoft::UI::Xaml::Controls::IconSource IconSourceMUX(const winrt::hstring& iconPath, const bool convertToGrayscale);
};
}
namespace winrt::Microsoft::Terminal::Settings::Model::factory_implementation
{
BASIC_FACTORY(IconPathConverter);
}

View File

@@ -1,22 +0,0 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
namespace Microsoft.Terminal.Settings.Model
{
// See https://docs.microsoft.com/en-us/windows/uwp/data-binding/data-binding-quickstart
// We use the default attribute to declare IValueConverter as the default
// interface. In the listing, IconPathConverter has only a
// constructor, and no methods, so no default interface is generated for it.
// The default attribute is optimal if you won't be adding instance members
// to IconPathConverter, because no QueryInterface will be
// required to call the IValueConverter methods
runtimeclass IconPathConverter : [default] Windows.UI.Xaml.Data.IValueConverter
{
IconPathConverter();
static Windows.UI.Xaml.Controls.IconElement IconWUX(String path);
static Microsoft.UI.Xaml.Controls.IconSource IconSourceMUX(String path, Boolean convertToGrayscale);
};
}

View File

@@ -46,9 +46,6 @@
<ClInclude Include="DefaultTerminal.h"> <ClInclude Include="DefaultTerminal.h">
<DependentUpon>DefaultTerminal.idl</DependentUpon> <DependentUpon>DefaultTerminal.idl</DependentUpon>
</ClInclude> </ClInclude>
<ClInclude Include="IconPathConverter.h">
<DependentUpon>IconPathConverter.idl</DependentUpon>
</ClInclude>
<ClInclude Include="pch.h" /> <ClInclude Include="pch.h" />
<ClInclude Include="ActionArgs.h"> <ClInclude Include="ActionArgs.h">
<DependentUpon>ActionArgs.idl</DependentUpon> <DependentUpon>ActionArgs.idl</DependentUpon>
@@ -122,9 +119,6 @@
<ClCompile Include="DefaultTerminal.cpp"> <ClCompile Include="DefaultTerminal.cpp">
<DependentUpon>DefaultTerminal.idl</DependentUpon> <DependentUpon>DefaultTerminal.idl</DependentUpon>
</ClCompile> </ClCompile>
<ClCompile Include="IconPathConverter.cpp">
<DependentUpon>IconPathConverter.idl</DependentUpon>
</ClCompile>
<ClCompile Include="init.cpp" /> <ClCompile Include="init.cpp" />
<ClCompile Include="pch.cpp"> <ClCompile Include="pch.cpp">
<PrecompiledHeader>Create</PrecompiledHeader> <PrecompiledHeader>Create</PrecompiledHeader>
@@ -229,7 +223,6 @@
<Midl Include="Command.idl" /> <Midl Include="Command.idl" />
<Midl Include="DefaultTerminal.idl" /> <Midl Include="DefaultTerminal.idl" />
<Midl Include="GlobalAppSettings.idl" /> <Midl Include="GlobalAppSettings.idl" />
<Midl Include="IconPathConverter.idl" />
<Midl Include="Profile.idl" /> <Midl Include="Profile.idl" />
<Midl Include="EnumMappings.idl" /> <Midl Include="EnumMappings.idl" />
<Midl Include="TerminalSettings.idl" /> <Midl Include="TerminalSettings.idl" />
@@ -316,7 +309,7 @@
<DisableSpecificWarnings>4702;%(DisableSpecificWarnings)</DisableSpecificWarnings> <DisableSpecificWarnings>4702;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile> </ClCompile>
<Link> <Link>
<AdditionalDependencies>WindowsApp.lib;user32.lib;shell32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>%(AdditionalDependencies);user32.lib</AdditionalDependencies>
</Link> </Link>
<Reference> <Reference>
<Private>false</Private> <Private>false</Private>

View File

@@ -34,7 +34,6 @@
<Filter>json</Filter> <Filter>json</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="init.cpp" /> <ClCompile Include="init.cpp" />
<ClCompile Include="IconPathConverter.cpp" />
<ClCompile Include="DefaultTerminal.cpp" /> <ClCompile Include="DefaultTerminal.cpp" />
<ClCompile Include="FileUtils.cpp" /> <ClCompile Include="FileUtils.cpp" />
<ClCompile Include="VisualStudioGenerator.cpp"> <ClCompile Include="VisualStudioGenerator.cpp">
@@ -83,7 +82,6 @@
</ClInclude> </ClInclude>
<ClInclude Include="IInheritable.h" /> <ClInclude Include="IInheritable.h" />
<ClInclude Include="MTSMSettings.h" /> <ClInclude Include="MTSMSettings.h" />
<ClInclude Include="IconPathConverter.h" />
<ClInclude Include="DefaultTerminal.h" /> <ClInclude Include="DefaultTerminal.h" />
<ClInclude Include="FileUtils.h" /> <ClInclude Include="FileUtils.h" />
<ClInclude Include="HashUtils.h" /> <ClInclude Include="HashUtils.h" />
@@ -113,7 +111,6 @@
<Midl Include="CascadiaSettings.idl" /> <Midl Include="CascadiaSettings.idl" />
<Midl Include="KeyChordSerialization.idl" /> <Midl Include="KeyChordSerialization.idl" />
<Midl Include="EnumMappings.idl" /> <Midl Include="EnumMappings.idl" />
<Midl Include="IconPathConverter.idl" />
<Midl Include="TerminalSettings.idl" /> <Midl Include="TerminalSettings.idl" />
<Midl Include="AppearanceConfig.idl" /> <Midl Include="AppearanceConfig.idl" />
<Midl Include="IAppearanceConfig.idl" /> <Midl Include="IAppearanceConfig.idl" />

View File

@@ -37,7 +37,6 @@
<ClInclude Include="../KeyMapping.h" /> <ClInclude Include="../KeyMapping.h" />
<ClInclude Include="../Profile.h" /> <ClInclude Include="../Profile.h" />
<ClInclude Include="../TerminalWarnings.h" /> <ClInclude Include="../TerminalWarnings.h" />
<ClInclude Include="../IconPathConverter.h" />
<ClInclude Include="../NewTabMenuEntry.h" /> <ClInclude Include="../NewTabMenuEntry.h" />
<ClInclude Include="../SeparatorEntry.h"> <ClInclude Include="../SeparatorEntry.h">
<DependentUpon>../NewTabMenuEntry.h</DependentUpon> <DependentUpon>../NewTabMenuEntry.h</DependentUpon>
@@ -130,7 +129,7 @@
<AdditionalIncludeDirectories>$(OpenConsoleDir)\dep\jsoncpp\json;%(AdditionalIncludeDirectories);</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(OpenConsoleDir)\dep\jsoncpp\json;%(AdditionalIncludeDirectories);</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<Link> <Link>
<AdditionalDependencies>User32.lib;WindowsApp.lib;shell32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>%(AdditionalDependencies);user32.lib</AdditionalDependencies>
<!-- TSM Lib contains a DllMain that we need to force the use of. --> <!-- TSM Lib contains a DllMain that we need to force the use of. -->
<AdditionalOptions Condition="'$(Platform)'=='Win32'">/INCLUDE:_DllMain@12 %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions Condition="'$(Platform)'=='Win32'">/INCLUDE:_DllMain@12 %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions Condition="'$(Platform)'!='Win32'">/INCLUDE:DllMain %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions Condition="'$(Platform)'!='Win32'">/INCLUDE:DllMain %(AdditionalOptions)</AdditionalOptions>

View File

@@ -29,8 +29,6 @@
#include <winrt/Windows.ApplicationModel.h> #include <winrt/Windows.ApplicationModel.h>
#include <winrt/Windows.Foundation.Collections.h> #include <winrt/Windows.Foundation.Collections.h>
#include <winrt/Windows.Foundation.h> #include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Graphics.Imaging.h>
#include <Windows.Graphics.Imaging.Interop.h>
#include <winrt/Windows.Storage.h> #include <winrt/Windows.Storage.h>
#include <winrt/Windows.Storage.Streams.h> #include <winrt/Windows.Storage.Streams.h>
#include <winrt/Windows.System.h> #include <winrt/Windows.System.h>
@@ -38,7 +36,6 @@
#include <winrt/Windows.UI.ViewManagement.h> #include <winrt/Windows.UI.ViewManagement.h>
#include <winrt/Windows.UI.Xaml.Controls.h> #include <winrt/Windows.UI.Xaml.Controls.h>
#include <winrt/Windows.UI.Xaml.Media.h> #include <winrt/Windows.UI.Xaml.Media.h>
#include <winrt/Windows.UI.Xaml.Media.Imaging.h>
#include <winrt/Microsoft.UI.Xaml.Controls.h> #include <winrt/Microsoft.UI.Xaml.Controls.h>

View File

@@ -1,18 +1,18 @@
#include "pch.h" #include "pch.h"
#include "Converters.h" #include "Converters.h"
#if __has_include("Converters.g.cpp")
#include "Converters.g.cpp" #include "Converters.g.cpp"
#endif
namespace winrt::Microsoft::Terminal::Settings::Editor::implementation #pragma warning(disable : 26497) // We will make these functions constexpr, as they are part of an ABI boundary.
#pragma warning(disable : 26440) // The function ... can be declared as noexcept.
namespace winrt::Microsoft::Terminal::UI::implementation
{ {
winrt::hstring Converters::AppendPercentageSign(double value) winrt::hstring Converters::AppendPercentageSign(double value)
{ {
const auto number{ value }; return to_hstring(gsl::narrow_cast<uint32_t>(std::lrint(value))) + L"%";
return to_hstring((int)number) + L"%";
} }
winrt::Windows::UI::Xaml::Media::SolidColorBrush Converters::ColorToBrush(winrt::Windows::UI::Color color) winrt::Windows::UI::Xaml::Media::SolidColorBrush Converters::ColorToBrush(const winrt::Windows::UI::Color& color)
{ {
return Windows::UI::Xaml::Media::SolidColorBrush(color); return Windows::UI::Xaml::Media::SolidColorBrush(color);
} }
@@ -22,7 +22,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
return winrt::Windows::UI::Text::FontWeight{ base::ClampedNumeric<uint16_t>(value) }; return winrt::Windows::UI::Text::FontWeight{ base::ClampedNumeric<uint16_t>(value) };
} }
double Converters::FontWeightToDouble(winrt::Windows::UI::Text::FontWeight fontWeight) double Converters::FontWeightToDouble(const winrt::Windows::UI::Text::FontWeight& fontWeight)
{ {
return fontWeight.Weight; return fontWeight.Weight;
} }
@@ -37,7 +37,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
return value ? winrt::Windows::UI::Xaml::Visibility::Collapsed : winrt::Windows::UI::Xaml::Visibility::Visible; return value ? winrt::Windows::UI::Xaml::Visibility::Collapsed : winrt::Windows::UI::Xaml::Visibility::Visible;
} }
double Converters::MaxValueFromPaddingString(winrt::hstring paddingString) double Converters::MaxValueFromPaddingString(const winrt::hstring& paddingString)
{ {
const auto singleCharDelim = L','; const auto singleCharDelim = L',';
std::wstringstream tokenStream(paddingString.c_str()); std::wstringstream tokenStream(paddingString.c_str());
@@ -85,11 +85,11 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
return base::ClampDiv<double, double>(value, 100); return base::ClampDiv<double, double>(value, 100);
} }
bool Converters::StringsAreNotEqual(winrt::hstring expected, winrt::hstring actual) bool Converters::StringsAreNotEqual(const winrt::hstring& expected, const winrt::hstring& actual)
{ {
return expected != actual; return expected != actual;
} }
winrt::Windows::UI::Xaml::Visibility Converters::StringNotEmptyToVisibility(winrt::hstring value) winrt::Windows::UI::Xaml::Visibility Converters::StringNotEmptyToVisibility(const winrt::hstring& value)
{ {
return value.empty() ? winrt::Windows::UI::Xaml::Visibility::Collapsed : winrt::Windows::UI::Xaml::Visibility::Visible; return value.empty() ? winrt::Windows::UI::Xaml::Visibility::Collapsed : winrt::Windows::UI::Xaml::Visibility::Visible;
} }
@@ -101,7 +101,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
// - value - the value string. // - value - the value string.
// Return Value: // Return Value:
// - The value string, unless it matches the placeholder in which case the empty string. // - The value string, unless it matches the placeholder in which case the empty string.
winrt::hstring Converters::StringOrEmptyIfPlaceholder(winrt::hstring placeholder, winrt::hstring value) winrt::hstring Converters::StringOrEmptyIfPlaceholder(const winrt::hstring& placeholder, const winrt::hstring& value)
{ {
return placeholder == value ? L"" : value; return placeholder == value ? L"" : value;
} }

View File

@@ -0,0 +1,33 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
#pragma once
#include "Converters.g.h"
namespace winrt::Microsoft::Terminal::UI::implementation
{
struct Converters
{
Converters() = default;
static winrt::hstring AppendPercentageSign(double value);
static winrt::Windows::UI::Text::FontWeight DoubleToFontWeight(double value);
static winrt::Windows::UI::Xaml::Media::SolidColorBrush ColorToBrush(const winrt::Windows::UI::Color& color);
static double FontWeightToDouble(const winrt::Windows::UI::Text::FontWeight& fontWeight);
static bool InvertBoolean(bool value);
static winrt::Windows::UI::Xaml::Visibility InvertedBooleanToVisibility(bool value);
static double MaxValueFromPaddingString(const winrt::hstring& paddingString);
static int PercentageToPercentageValue(double value);
static double PercentageValueToPercentage(double value);
static bool StringsAreNotEqual(const winrt::hstring& expected, const winrt::hstring& actual);
static winrt::Windows::UI::Xaml::Visibility StringNotEmptyToVisibility(const winrt::hstring& value);
static winrt::hstring StringOrEmptyIfPlaceholder(const winrt::hstring& placeholder, const winrt::hstring& value);
};
}
namespace winrt::Microsoft::Terminal::UI::factory_implementation
{
struct Converters : ConvertersT<Converters, implementation::Converters>
{
};
}

View File

@@ -1,24 +1,30 @@
// Copyright (c) Microsoft Corporation. // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license. // Licensed under the MIT license.
namespace Microsoft.Terminal.Settings.Editor namespace Microsoft.Terminal.UI
{ {
[bindable] [bindable]
[default_interface] static runtimeclass Converters static runtimeclass Converters
{ {
// Booleans
static Boolean InvertBoolean(Boolean value);
static Windows.UI.Xaml.Visibility InvertedBooleanToVisibility(Boolean value);
// Numbers
static Int32 PercentageToPercentageValue(Double value);
static Double PercentageValueToPercentage(Double value);
// Strings
static Boolean StringsAreNotEqual(String expected, String actual);
static Windows.UI.Xaml.Visibility StringNotEmptyToVisibility(String value);
static String StringOrEmptyIfPlaceholder(String placeholder, String value);
// Misc
static String AppendPercentageSign(Double value); static String AppendPercentageSign(Double value);
static Windows.UI.Text.FontWeight DoubleToFontWeight(Double value); static Windows.UI.Text.FontWeight DoubleToFontWeight(Double value);
static Windows.UI.Xaml.Media.SolidColorBrush ColorToBrush(Windows.UI.Color color); static Windows.UI.Xaml.Media.SolidColorBrush ColorToBrush(Windows.UI.Color color);
static Double FontWeightToDouble(Windows.UI.Text.FontWeight fontWeight); static Double FontWeightToDouble(Windows.UI.Text.FontWeight fontWeight);
static Boolean InvertBoolean(Boolean value);
static Windows.UI.Xaml.Visibility InvertedBooleanToVisibility(Boolean value);
static Double MaxValueFromPaddingString(String paddingString); static Double MaxValueFromPaddingString(String paddingString);
static Int32 PercentageToPercentageValue(Double value);
static Double PercentageValueToPercentage(Double value);
static Boolean StringsAreNotEqual(String expected, String actual);
static Windows.UI.Xaml.Visibility StringNotEmptyToVisibility(String value);
static String StringOrEmptyIfPlaceholder(String placeholder, String value);
} }
} }

View File

@@ -0,0 +1,10 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
namespace Microsoft.Terminal.UI
{
[uuid("0ddf4edc-3fda-4dee-97ca-a417ee3dd510")]
interface IDirectKeyListener {
Boolean OnDirectKeyEvent(UInt32 vkey, UInt8 scanCode, Boolean down);
}
}

View File

@@ -19,7 +19,7 @@ using namespace winrt::Windows::UI::Xaml;
using namespace winrt::Windows::Graphics::Imaging; using namespace winrt::Windows::Graphics::Imaging;
using namespace winrt::Windows::Storage::Streams; using namespace winrt::Windows::Storage::Streams;
namespace winrt::Microsoft::Terminal::Settings::Model::implementation namespace winrt::Microsoft::Terminal::UI::implementation
{ {
// These are templates that help us figure out which BitmapIconSource/FontIconSource to use for a given IconSource. // These are templates that help us figure out which BitmapIconSource/FontIconSource to use for a given IconSource.
// We have to do this because some of our code still wants to use WUX/MUX IconSources. // We have to do this because some of our code still wants to use WUX/MUX IconSources.
@@ -95,7 +95,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
return nullptr; return nullptr;
} }
_TIL_INLINEPREFIX winrt::hstring _expandIconPath(hstring iconPath) static winrt::hstring _expandIconPath(const hstring& iconPath)
{ {
if (iconPath.empty()) if (iconPath.empty())
{ {
@@ -140,7 +140,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
try try
{ {
typename FontIconSource<TIconSource>::type icon; typename FontIconSource<TIconSource>::type icon;
const auto ch = iconPath[0]; const auto ch = til::at(iconPath, 0);
// The range of MDL2 Icons isn't explicitly defined, but // The range of MDL2 Icons isn't explicitly defined, but
// we're using this based off the table on: // we're using this based off the table on:
@@ -178,51 +178,25 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
return iconSource; return iconSource;
} }
// Method Description: Windows::UI::Xaml::Controls::IconSource IconPathConverter::IconSourceWUX(const hstring& path)
// - Attempt to convert something into another type. For the
// IconPathConverter, we support a variety of icons:
// * If the icon is a path to an image, we'll use that.
// * If it isn't, then we'll try and use the text as a FontIcon. If the
// character is in the range of symbols reserved for the Segoe MDL2
// Asserts, well treat it as such. Otherwise, we'll default to a Sego
// UI icon, so things like emoji will work.
// - MUST BE CALLED ON THE UI THREAD.
// Arguments:
// - value: the input object to attempt to convert into an IconSource.
// Return Value:
// - Visible if the object was a string and wasn't the empty string.
Foundation::IInspectable IconPathConverter::Convert(const Foundation::IInspectable& value,
const Windows::UI::Xaml::Interop::TypeName& /* targetType */,
const Foundation::IInspectable& /* parameter */,
const hstring& /* language */)
{
const auto& iconPath = winrt::unbox_value_or<winrt::hstring>(value, L"");
return _getIconSource<Controls::IconSource>(iconPath, false);
}
// unused for one-way bindings
Foundation::IInspectable IconPathConverter::ConvertBack(const Foundation::IInspectable& /* value */,
const Windows::UI::Xaml::Interop::TypeName& /* targetType */,
const Foundation::IInspectable& /* parameter */,
const hstring& /* language */)
{
throw hresult_not_implemented();
}
Windows::UI::Xaml::Controls::IconSource _IconSourceWUX(hstring path)
{ {
// * If the icon is a path to an image, we'll use that.
// * If it isn't, then we'll try and use the text as a FontIcon. If the
// character is in the range of symbols reserved for the Segoe MDL2
// Asserts, well treat it as such. Otherwise, we'll default to a Segoe
// UI icon, so things like emoji will work.
return _getIconSource<Windows::UI::Xaml::Controls::IconSource>(path, false); return _getIconSource<Windows::UI::Xaml::Controls::IconSource>(path, false);
} }
Microsoft::UI::Xaml::Controls::IconSource _IconSourceMUX(hstring path, bool monochrome) static Microsoft::UI::Xaml::Controls::IconSource _IconSourceMUX(const hstring& path, bool monochrome)
{ {
return _getIconSource<Microsoft::UI::Xaml::Controls::IconSource>(path, monochrome); return _getIconSource<Microsoft::UI::Xaml::Controls::IconSource>(path, monochrome);
} }
SoftwareBitmap _convertToSoftwareBitmap(HICON hicon, static SoftwareBitmap _convertToSoftwareBitmap(HICON hicon,
BitmapPixelFormat pixelFormat, BitmapPixelFormat pixelFormat,
BitmapAlphaMode alphaMode, BitmapAlphaMode alphaMode,
IWICImagingFactory* imagingFactory) gsl::not_null<IWICImagingFactory*> imagingFactory)
{ {
// Load the icon into an IWICBitmap // Load the icon into an IWICBitmap
wil::com_ptr<IWICBitmap> iconBitmap; wil::com_ptr<IWICBitmap> iconBitmap;
@@ -245,9 +219,9 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
return softwareBitmap; return softwareBitmap;
} }
SoftwareBitmap _getBitmapFromIconFileAsync(const winrt::hstring& iconPath, static SoftwareBitmap _getBitmapFromIconFileAsync(const winrt::hstring& iconPath,
int32_t iconIndex, int32_t iconIndex,
uint32_t iconSize) uint32_t iconSize)
{ {
wil::unique_hicon hicon; wil::unique_hicon hicon;
LOG_IF_FAILED(SHDefExtractIcon(iconPath.c_str(), iconIndex, 0, &hicon, nullptr, iconSize)); LOG_IF_FAILED(SHDefExtractIcon(iconPath.c_str(), iconIndex, 0, &hicon, nullptr, iconSize));
@@ -276,7 +250,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
// - 0 if the iconPath is an exe/dll/lnk file but does not contain an index (i.e. we default // - 0 if the iconPath is an exe/dll/lnk file but does not contain an index (i.e. we default
// to the first icon in the file) // to the first icon in the file)
// - the icon index if the iconPath is an exe/dll/lnk file and contains an index // - the icon index if the iconPath is an exe/dll/lnk file and contains an index
std::optional<int> _getIconIndex(const winrt::hstring& iconPath, std::wstring_view& iconPathWithoutIndex) static std::optional<int> _getIconIndex(const winrt::hstring& iconPath, std::wstring_view& iconPathWithoutIndex)
{ {
const auto pathView = std::wstring_view{ iconPath }; const auto pathView = std::wstring_view{ iconPath };
// Does iconPath have a comma in it? If so, split the string on the // Does iconPath have a comma in it? If so, split the string on the
@@ -309,8 +283,8 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
return 0; return 0;
} }
winrt::Windows::UI::Xaml::Media::Imaging::SoftwareBitmapSource _getImageIconSourceForBinary(std::wstring_view iconPathWithoutIndex, static winrt::Windows::UI::Xaml::Media::Imaging::SoftwareBitmapSource _getImageIconSourceForBinary(std::wstring_view iconPathWithoutIndex,
int index) int index)
{ {
// Try: // Try:
// * c:\Windows\System32\SHELL32.dll, 210 // * c:\Windows\System32\SHELL32.dll, 210
@@ -353,7 +327,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
const auto indexOpt = _getIconIndex(iconPath, iconPathWithoutIndex); const auto indexOpt = _getIconIndex(iconPath, iconPathWithoutIndex);
if (!indexOpt.has_value()) if (!indexOpt.has_value())
{ {
auto source = _IconSourceWUX(iconPath); auto source = IconSourceWUX(iconPath);
Controls::IconSourceElement icon; Controls::IconSourceElement icon;
icon.IconSource(source); icon.IconSource(source);
return icon; return icon;

View File

@@ -0,0 +1,20 @@
#pragma once
#include "IconPathConverter.g.h"
namespace winrt::Microsoft::Terminal::UI::implementation
{
struct IconPathConverter
{
IconPathConverter() = default;
static Windows::UI::Xaml::Controls::IconElement IconWUX(const winrt::hstring& iconPath);
static Windows::UI::Xaml::Controls::IconSource IconSourceWUX(const winrt::hstring& iconPath);
static Microsoft::UI::Xaml::Controls::IconSource IconSourceMUX(const winrt::hstring& iconPath, bool convertToGrayscale);
};
}
namespace winrt::Microsoft::Terminal::UI::factory_implementation
{
BASIC_FACTORY(IconPathConverter);
}

View File

@@ -0,0 +1,13 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
namespace Microsoft.Terminal.UI
{
static runtimeclass IconPathConverter
{
static Windows.UI.Xaml.Controls.IconElement IconWUX(String path);
static Windows.UI.Xaml.Controls.IconSource IconSourceWUX(String path);
static Microsoft.UI.Xaml.Controls.IconSource IconSourceMUX(String path, Boolean convertToGrayscale);
};
}

View File

@@ -0,0 +1,3 @@
EXPORTS
DllCanUnloadNow = WINRT_CanUnloadNow PRIVATE
DllGetActivationFactory = WINRT_GetActivationFactory PRIVATE

View File

@@ -0,0 +1,17 @@
#include "pch.h"
#include "ResourceString.h"
#include "ResourceString.g.cpp"
namespace winrt::Microsoft::Terminal::UI::implementation
{
winrt::Windows::Foundation::IInspectable ResourceString::ProvideValue()
{
if (tree_.empty())
{
return nullptr;
}
auto loader{ winrt::Windows::ApplicationModel::Resources::ResourceLoader::GetForCurrentView(tree_ + L"/Resources") };
return winrt::box_value(loader.GetString(name_));
}
}

View File

@@ -0,0 +1,43 @@
#pragma once
#include "ResourceString.g.h"
namespace winrt::Microsoft::Terminal::UI::implementation
{
struct ResourceString : ResourceStringT<ResourceString>
{
ResourceString() noexcept = default;
hstring Tree()
{
return tree_;
}
void Tree(hstring const& value)
{
tree_ = value;
}
hstring Name()
{
return name_;
}
void Name(hstring const& value)
{
name_ = value;
}
winrt::Windows::Foundation::IInspectable ProvideValue();
private:
winrt::hstring tree_;
winrt::hstring name_;
};
}
namespace winrt::Microsoft::Terminal::UI::factory_implementation
{
struct ResourceString : ResourceStringT<ResourceString, implementation::ResourceString>
{
};
}

View File

@@ -0,0 +1,9 @@
namespace Microsoft.Terminal.UI {
runtimeclass ResourceString : Windows.UI.Xaml.Markup.MarkupExtension
{
ResourceString();
String Tree { get; set; };
String Name { get; set; };
Object ProvideValue();
};
}

View File

@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
<ProjectGuid>{6515F03F-E56D-4DB4-B23D-AC4FB80DB36F}</ProjectGuid>
<ProjectName>Microsoft.Terminal.UI</ProjectName>
<RootNamespace>Microsoft.Terminal.UI</RootNamespace>
<ConfigurationType>DynamicLibrary</ConfigurationType>
<SubSystem>Console</SubSystem>
<OpenConsoleUniversalApp>true</OpenConsoleUniversalApp>
</PropertyGroup>
<PropertyGroup Label="NuGet Dependencies">
<TerminalCppWinrt>true</TerminalCppWinrt>
<TerminalMUX>true</TerminalMUX>
</PropertyGroup>
<Import Project="..\..\..\common.openconsole.props" Condition="'$(OpenConsoleDir)'==''" />
<Import Project="$(OpenConsoleDir)src\common.nugetversions.props" />
<Import Project="$(OpenConsoleDir)src\cppwinrt.build.pre.props" />
<ItemGroup>
<ClInclude Include="pch.h" />
<ClInclude Include="Converters.h">
<DependentUpon>Converters.idl</DependentUpon>
</ClInclude>
<ClInclude Include="IconPathConverter.h">
<DependentUpon>IconPathConverter.idl</DependentUpon>
</ClInclude>
<ClInclude Include="ResourceString.h">
<DependentUpon>ResourceString.idl</DependentUpon>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="init.cpp" />
<ClCompile Include="pch.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="Converters.cpp">
<DependentUpon>Converters.idl</DependentUpon>
</ClCompile>
<ClCompile Include="IconPathConverter.cpp">
<DependentUpon>IconPathConverter.idl</DependentUpon>
</ClCompile>
<ClCompile Include="ResourceString.cpp">
<DependentUpon>ResourceString.idl</DependentUpon>
</ClCompile>
<ClCompile Include="$(GeneratedFilesDir)module.g.cpp" />
</ItemGroup>
<ItemGroup>
<Midl Include="Converters.idl" />
<Midl Include="IconPathConverter.idl" />
<Midl Include="IDirectKeyListener.idl" />
<Midl Include="ResourceString.idl" />
</ItemGroup>
<!-- ========================= Project References ======================== -->
<ItemGroup>
<!--
the packaging project won't recurse through our dependencies, you have to
make sure that if you add a cppwinrt dependency to any of these projects,
you also update all the consumers
-->
<ProjectReference Include="$(OpenConsoleDir)src\types\lib\types.vcxproj">
<Project>{18D09A24-8240-42D6-8CB6-236EEE820263}</Project>
</ProjectReference>
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\WinRTUtils\WinRTUtils.vcxproj">
<Project>{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<ItemDefinitionGroup>
<Link>
<AdditionalDependencies>%(AdditionalDependencies);user32.lib;shell32.lib</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<Import Project="$(OpenConsoleDir)src\cppwinrt.build.post.props" />
<!-- This -must- go after cppwinrt.build.post.props because that includes many VS-provided props including appcontainer.common.props, which stomps on what cppwinrt.targets did. -->
<Import Project="$(OpenConsoleDir)src\common.nugetversions.targets" />
</Project>

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Resources">
<UniqueIdentifier>accd3aa8-1ba0-4223-9bbe-0c431709210b</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tga;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
<Filter Include="Generated Files">
<UniqueIdentifier>{926ab91d-31b4-48c3-b9a4-e681349f27f0}</UniqueIdentifier>
</Filter>
<Filter Include="Resources\en-US">
<UniqueIdentifier>{ee3ff32f-d013-49cb-8eb9-1ec084585086}</UniqueIdentifier>
</Filter>
<Filter Include="Module">
<UniqueIdentifier>{091e7617-c506-4742-82fc-75e7ca32e2fe}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="init.cpp">
<Filter>Module</Filter>
</ClCompile>
<ClCompile Include="$(GeneratedFilesDir)module.g.cpp">
<Filter>Module</Filter>
</ClCompile>
<ClCompile Include="pch.cpp">
<Filter>Module</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="pch.h" />
</ItemGroup>
<ItemGroup>
<Midl Include="ResourceString.idl" />
</ItemGroup>
<ItemGroup>
<Natvis Include="$(SolutionDir)tools\ConsoleTypes.natvis" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,21 @@
// Copyright (c) Microsoft Corporation
// Licensed under the MIT license.
#include "pch.h"
#pragma warning(suppress : 26440) // Not interested in changing the specification of DllMain to make it noexcept given it's an interface to the OS.
BOOL WINAPI DllMain(HINSTANCE hInstDll, DWORD reason, LPVOID /*reserved*/)
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hInstDll);
break;
case DLL_PROCESS_DETACH:
break;
default:
break;
}
return TRUE;
}

View File

@@ -0,0 +1,4 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
#include "pch.h"

View File

@@ -0,0 +1,46 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
//
// pch.h
// Header for platform projection include files
//
#pragma once
#define WIN32_LEAN_AND_MEAN
#define NOMCX
#define NOHELP
#define NOCOMM
// Manually include til after we include Windows.Foundation to give it winrt superpowers
#define BLOCK_TIL
#include <LibraryIncludes.h>
// This is inexplicable, but for whatever reason, cppwinrt conflicts with the
// SDK definition of this function, so the only fix is to undef it.
// from WinBase.h
// Windows::UI::Xaml::Media::Animation::IStoryboard::GetCurrentTime
#ifdef GetCurrentTime
#undef GetCurrentTime
#endif
#include <wil/cppwinrt.h>
#include <winrt/Windows.ApplicationModel.Resources.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Graphics.Imaging.h>
#include <Windows.Graphics.Imaging.Interop.h>
#include <winrt/Windows.UI.Text.h>
#include <winrt/Windows.UI.Xaml.Controls.h>
#include <winrt/Windows.UI.Xaml.Markup.h>
#include <winrt/Windows.UI.Xaml.Media.h>
#include <winrt/Windows.UI.Xaml.Media.Imaging.h>
#include <winrt/Microsoft.UI.Xaml.Controls.h>
// Manually include til after we include Windows.Foundation to give it winrt superpowers
#include "til.h"
#include <cppwinrt_utils.h>
#include <wil/cppwinrt_helpers.h> // must go after the CoreDispatcher type is defined

View File

@@ -42,7 +42,6 @@ Author(s):
#include <winrt/Windows.system.h> #include <winrt/Windows.system.h>
#include <winrt/Windows.Foundation.h> #include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Foundation.Collections.h> #include <winrt/Windows.Foundation.Collections.h>
#include <Windows.Graphics.Imaging.Interop.h>
#include <winrt/windows.ui.core.h> #include <winrt/windows.ui.core.h>
#include <winrt/Windows.ui.input.h> #include <winrt/Windows.ui.input.h>
#include <winrt/Windows.UI.ViewManagement.h> #include <winrt/Windows.UI.ViewManagement.h>

View File

@@ -85,6 +85,7 @@
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalControl\dll\TerminalControl.vcxproj" /> <ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalControl\dll\TerminalControl.vcxproj" />
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalConnection\TerminalConnection.vcxproj" /> <ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalConnection\TerminalConnection.vcxproj" />
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalSettingsModel\dll\Microsoft.Terminal.Settings.Model.vcxproj" /> <ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalSettingsModel\dll\Microsoft.Terminal.Settings.Model.vcxproj" />
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\UIHelpers\UIHelpers.vcxproj" />
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalApp\dll\TerminalApp.vcxproj" /> <ProjectReference Include="$(OpenConsoleDir)src\cascadia\TerminalApp\dll\TerminalApp.vcxproj" />
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\Remoting\dll\Microsoft.Terminal.Remoting.vcxproj" /> <ProjectReference Include="$(OpenConsoleDir)src\cascadia\Remoting\dll\Microsoft.Terminal.Remoting.vcxproj" />

View File

@@ -72,6 +72,7 @@ Abstract:
#include <winrt/Microsoft.Terminal.Settings.Model.h> #include <winrt/Microsoft.Terminal.Settings.Model.h>
#include <winrt/Microsoft.Terminal.Remoting.h> #include <winrt/Microsoft.Terminal.Remoting.h>
#include <winrt/Microsoft.Terminal.Control.h> #include <winrt/Microsoft.Terminal.Control.h>
#include <winrt/Microsoft.Terminal.UI.h>
#include <wil/resource.h> #include <wil/resource.h>
#include <wil/win32_helpers.h> #include <wil/win32_helpers.h>