Compare commits
3 Commits
main
...
dev/duhowe
Author | SHA1 | Date |
---|---|---|
Dustin Howett | a7a0d2a6c2 | |
Dustin Howett | f5f09a6869 | |
Dustin Howett | afa4cbf52d |
|
@ -1761,7 +1761,8 @@ Global
|
|||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|ARM.ActiveCfg = Debug|Win32
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|DotNet_x64Test.Build.0 = Debug|x64
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|x64.Build.0 = Debug|x64
|
||||
|
@ -1778,7 +1779,8 @@ Global
|
|||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|ARM.ActiveCfg = Release|Win32
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|DotNet_x64Test.ActiveCfg = Release|Win32
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|DotNet_x64Test.ActiveCfg = Release|x64
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|DotNet_x64Test.Build.0 = Release|x64
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|DotNet_x86Test.ActiveCfg = Release|Win32
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|x64.ActiveCfg = Release|x64
|
||||
{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|x64.Build.0 = Release|x64
|
||||
|
@ -1834,7 +1836,8 @@ Global
|
|||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|ARM.ActiveCfg = Debug|Win32
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|DotNet_x64Test.Build.0 = Debug|x64
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|x64.Build.0 = Debug|x64
|
||||
|
@ -1851,7 +1854,8 @@ Global
|
|||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|ARM.ActiveCfg = Release|Win32
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|DotNet_x64Test.ActiveCfg = Release|Win32
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|DotNet_x64Test.ActiveCfg = Release|x64
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|DotNet_x64Test.Build.0 = Release|x64
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|DotNet_x86Test.ActiveCfg = Release|Win32
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|x64.ActiveCfg = Release|x64
|
||||
{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|x64.Build.0 = Release|x64
|
||||
|
@ -1868,7 +1872,8 @@ Global
|
|||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|ARM.ActiveCfg = Debug|Win32
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|DotNet_x64Test.Build.0 = Debug|x64
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|x64.Build.0 = Debug|x64
|
||||
|
@ -1885,7 +1890,8 @@ Global
|
|||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|ARM.ActiveCfg = Release|Win32
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|DotNet_x64Test.ActiveCfg = Release|Win32
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|DotNet_x64Test.ActiveCfg = Release|x64
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|DotNet_x64Test.Build.0 = Release|x64
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|DotNet_x86Test.ActiveCfg = Release|Win32
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|x64.ActiveCfg = Release|x64
|
||||
{CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|x64.Build.0 = Release|x64
|
||||
|
@ -2294,7 +2300,8 @@ Global
|
|||
{48D21369-3D7B-4431-9967-24E81292CF63}.Debug|ARM.ActiveCfg = Debug|Win32
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Debug|DotNet_x64Test.Build.0 = Debug|x64
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Debug|x64.Build.0 = Debug|x64
|
||||
|
@ -2311,7 +2318,8 @@ Global
|
|||
{48D21369-3D7B-4431-9967-24E81292CF63}.Release|ARM.ActiveCfg = Release|Win32
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Release|DotNet_x64Test.ActiveCfg = Release|Win32
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Release|DotNet_x64Test.ActiveCfg = Release|x64
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Release|DotNet_x64Test.Build.0 = Release|x64
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Release|DotNet_x86Test.ActiveCfg = Release|Win32
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Release|x64.ActiveCfg = Release|x64
|
||||
{48D21369-3D7B-4431-9967-24E81292CF63}.Release|x64.Build.0 = Release|x64
|
||||
|
@ -2329,7 +2337,8 @@ Global
|
|||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|ARM.ActiveCfg = Debug|Win32
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|DotNet_x64Test.Build.0 = Debug|x64
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|x64.Build.0 = Debug|x64
|
||||
|
@ -2346,7 +2355,8 @@ Global
|
|||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|ARM.ActiveCfg = Release|Win32
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|DotNet_x64Test.ActiveCfg = Release|Win32
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|DotNet_x64Test.ActiveCfg = Release|x64
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|DotNet_x64Test.Build.0 = Release|x64
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|DotNet_x86Test.ActiveCfg = Release|Win32
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|x64.ActiveCfg = Release|x64
|
||||
{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|x64.Build.0 = Release|x64
|
||||
|
|
|
@ -2,5 +2,5 @@
|
|||
<packages>
|
||||
<package id="Microsoft.Toolkit.Win32.UI.XamlApplication" version="6.1.3" targetFramework="native" />
|
||||
<package id="Microsoft.UI.Xaml" version="2.5.0-prerelease.201202003" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210309.3" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210825.3" targetFramework="native" />
|
||||
</packages>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210309.3" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210825.3" targetFramework="native" />
|
||||
<package id="Microsoft.Toolkit.Win32.UI.XamlApplication" version="6.1.3" targetFramework="native" />
|
||||
<package id="Microsoft.UI.Xaml" version="2.5.0-prerelease.201202003" targetFramework="native" />
|
||||
<package id="Microsoft.VCRTForwarders.140" version="1.0.4" targetFramework="native" />
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
</PropertyGroup>
|
||||
<PropertyGroup Condition="!Exists('CascadiaPackage_TemporaryKey.pfx')">
|
||||
<AppxPackageSigningEnabled>false</AppxPackageSigningEnabled>
|
||||
<AppxBundle>Never</AppxBundle>
|
||||
<!--<AppxBundle>Never</AppxBundle>-->
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="Exists('CascadiaPackage_TemporaryKey.pfx')">
|
||||
<AppxPackageSigningEnabled>true</AppxPackageSigningEnabled>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210309.3" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210825.3" targetFramework="native" />
|
||||
</packages>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210309.3" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210825.3" targetFramework="native" />
|
||||
</packages>
|
||||
|
|
|
@ -2,5 +2,5 @@
|
|||
<packages>
|
||||
<package id="Microsoft.Toolkit.Win32.UI.XamlApplication" version="6.1.3" targetFramework="native" />
|
||||
<package id="Microsoft.UI.Xaml" version="2.5.0-prerelease.201202003" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210309.3" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210825.3" targetFramework="native" />
|
||||
</packages>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210309.3" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210825.3" targetFramework="native" />
|
||||
</packages>
|
||||
|
|
|
@ -71,6 +71,7 @@
|
|||
<Project>{18D09A24-8240-42D6-8CB6-236EEE820263}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\WinRTUtils\WinRTUtils.vcxproj">
|
||||
<Private>true</Private>
|
||||
<Project>{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210309.3" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210825.3" targetFramework="native" />
|
||||
<package id="vcpkg-cpprestsdk" version="2.10.14" targetFramework="native" />
|
||||
</packages>
|
||||
|
|
|
@ -26,6 +26,8 @@
|
|||
#include "winrt/Windows.Foundation.Collections.h"
|
||||
#include <Windows.h>
|
||||
|
||||
#include <wrl.h>
|
||||
|
||||
#include <TraceLoggingProvider.h>
|
||||
TRACELOGGING_DECLARE_PROVIDER(g_hTerminalConnectionProvider);
|
||||
#include <telemetry/ProjectTelemetry.h>
|
||||
|
|
|
@ -135,55 +135,58 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
|||
// proc, this'll return null. We'll need to instead make a new
|
||||
// DispatcherQueue (on a new thread), so we can use that for throttled
|
||||
// functions.
|
||||
_dispatcher = winrt::Windows::System::DispatcherQueue::GetForCurrentThread();
|
||||
if (!_dispatcher)
|
||||
try
|
||||
{
|
||||
//_dispatcher = winrt::Windows::System::DispatcherQueue::GetForCurrentThread();
|
||||
//if (!_dispatcher)
|
||||
//{
|
||||
//auto controller{ winrt::Windows::System::DispatcherQueueController::CreateOnDedicatedThread() };
|
||||
//_dispatcher = controller.DispatcherQueue();
|
||||
//}
|
||||
|
||||
// A few different events should be throttled, so they don't fire absolutely all the time:
|
||||
// * _tsfTryRedrawCanvas: When the cursor position moves, we need to
|
||||
// inform TSF, so it can move the canvas for the composition. We
|
||||
// throttle this so that we're not hopping across the process boundary
|
||||
// every time that the cursor moves.
|
||||
// * _updatePatternLocations: When there's new output, or we scroll the
|
||||
// viewport, we should re-check if there are any visible hyperlinks.
|
||||
// But we don't really need to do this every single time text is
|
||||
// output, we can limit this update to once every 500ms.
|
||||
// * _updateScrollBar: Same idea as the TSF update - we don't _really_
|
||||
// need to hop across the process boundary every time text is output.
|
||||
// We can throttle this to once every 8ms, which will get us out of
|
||||
// the way of the main output & rendering threads.
|
||||
_tsfTryRedrawCanvas = std::make_unique<til::throttled_func_trailing<>>(
|
||||
TsfRedrawInterval,
|
||||
[weakThis = get_weak()]() {
|
||||
if (auto core{ weakThis.get() }; !core->_IsClosing())
|
||||
{
|
||||
core->_CursorPositionChangedHandlers(*core, nullptr);
|
||||
}
|
||||
});
|
||||
|
||||
_updatePatternLocations = std::make_unique<til::throttled_func_trailing<>>(
|
||||
UpdatePatternLocationsInterval,
|
||||
[weakThis = get_weak()]() {
|
||||
if (auto core{ weakThis.get() }; !core->_IsClosing())
|
||||
{
|
||||
core->UpdatePatternLocations();
|
||||
}
|
||||
});
|
||||
|
||||
_updateScrollBar = std::make_unique<til::throttled_func_trailing<Control::ScrollPositionChangedArgs>>(
|
||||
ScrollBarUpdateInterval,
|
||||
[weakThis = get_weak()](const auto& update) {
|
||||
if (auto core{ weakThis.get() }; !core->_IsClosing())
|
||||
{
|
||||
core->_ScrollPositionChangedHandlers(*core, update);
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
auto controller{ winrt::Windows::System::DispatcherQueueController::CreateOnDedicatedThread() };
|
||||
_dispatcher = controller.DispatcherQueue();
|
||||
}
|
||||
|
||||
// A few different events should be throttled, so they don't fire absolutely all the time:
|
||||
// * _tsfTryRedrawCanvas: When the cursor position moves, we need to
|
||||
// inform TSF, so it can move the canvas for the composition. We
|
||||
// throttle this so that we're not hopping across the process boundary
|
||||
// every time that the cursor moves.
|
||||
// * _updatePatternLocations: When there's new output, or we scroll the
|
||||
// viewport, we should re-check if there are any visible hyperlinks.
|
||||
// But we don't really need to do this every single time text is
|
||||
// output, we can limit this update to once every 500ms.
|
||||
// * _updateScrollBar: Same idea as the TSF update - we don't _really_
|
||||
// need to hop across the process boundary every time text is output.
|
||||
// We can throttle this to once every 8ms, which will get us out of
|
||||
// the way of the main output & rendering threads.
|
||||
_tsfTryRedrawCanvas = std::make_shared<ThrottledFuncTrailing<>>(
|
||||
_dispatcher,
|
||||
TsfRedrawInterval,
|
||||
[weakThis = get_weak()]() {
|
||||
if (auto core{ weakThis.get() }; !core->_IsClosing())
|
||||
{
|
||||
core->_CursorPositionChangedHandlers(*core, nullptr);
|
||||
}
|
||||
});
|
||||
|
||||
_updatePatternLocations = std::make_shared<ThrottledFuncTrailing<>>(
|
||||
_dispatcher,
|
||||
UpdatePatternLocationsInterval,
|
||||
[weakThis = get_weak()]() {
|
||||
if (auto core{ weakThis.get() }; !core->_IsClosing())
|
||||
{
|
||||
core->UpdatePatternLocations();
|
||||
}
|
||||
});
|
||||
|
||||
_updateScrollBar = std::make_shared<ThrottledFuncTrailing<Control::ScrollPositionChangedArgs>>(
|
||||
_dispatcher,
|
||||
ScrollBarUpdateInterval,
|
||||
[weakThis = get_weak()](const auto& update) {
|
||||
if (auto core{ weakThis.get() }; !core->_IsClosing())
|
||||
{
|
||||
core->_ScrollPositionChangedHandlers(*core, update);
|
||||
}
|
||||
});
|
||||
|
||||
UpdateSettings(settings);
|
||||
}
|
||||
|
@ -291,6 +294,20 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
|||
return true;
|
||||
}
|
||||
|
||||
bool ControlCore::InitializeWithHwnd(const double actualWidth,
|
||||
const double actualHeight,
|
||||
const double compositionScale,
|
||||
const uint64_t hwnd)
|
||||
{
|
||||
auto i = Initialize(actualWidth, actualHeight, compositionScale);
|
||||
if (i)
|
||||
{
|
||||
auto lock = _terminal->LockForWriting();
|
||||
(void)_renderEngine->SetHwnd(reinterpret_cast<HWND>(hwnd));
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Tell the renderer to start painting.
|
||||
// - !! IMPORTANT !! Make sure that we've attached our swap chain to an
|
||||
|
@ -415,7 +432,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
|||
// itself - it was initiated by the mouse wheel, or the scrollbar.
|
||||
_terminal->UserScrollViewport(viewTop);
|
||||
|
||||
_updatePatternLocations->Run();
|
||||
if (_updatePatternLocations)
|
||||
_updatePatternLocations->operator()();
|
||||
}
|
||||
|
||||
void ControlCore::AdjustOpacity(const double adjustment)
|
||||
|
@ -1191,7 +1209,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
|||
bufferSize) };
|
||||
if (!_inUnitTests)
|
||||
{
|
||||
_updateScrollBar->Run(update);
|
||||
if (_updateScrollBar)
|
||||
_updateScrollBar->operator()(update);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1199,14 +1218,16 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
|||
}
|
||||
|
||||
// Additionally, start the throttled update of where our links are.
|
||||
_updatePatternLocations->Run();
|
||||
if (_updatePatternLocations)
|
||||
_updatePatternLocations->operator()();
|
||||
}
|
||||
|
||||
void ControlCore::_terminalCursorPositionChanged()
|
||||
{
|
||||
// When the buffer's cursor moves, start the throttled func to
|
||||
// eventually dispatch a CursorPositionChanged event.
|
||||
_tsfTryRedrawCanvas->Run();
|
||||
if (_tsfTryRedrawCanvas)
|
||||
_tsfTryRedrawCanvas->operator()();
|
||||
}
|
||||
|
||||
void ControlCore::_terminalTaskbarProgressChanged()
|
||||
|
@ -1496,7 +1517,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
|||
_terminal->Write(hstr);
|
||||
|
||||
// Start the throttled update of where our hyperlinks are.
|
||||
_updatePatternLocations->Run();
|
||||
if (_updatePatternLocations)
|
||||
_updatePatternLocations->operator()();
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
|
|
|
@ -42,6 +42,9 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
|||
bool Initialize(const double actualWidth,
|
||||
const double actualHeight,
|
||||
const double compositionScale);
|
||||
bool InitializeWithHwnd(const double actualWidth,
|
||||
const double actualHeight,
|
||||
const double compositionScale, const uint64_t hwnd);
|
||||
void EnablePainting();
|
||||
|
||||
void UpdateSettings(const IControlSettings& settings);
|
||||
|
@ -211,10 +214,9 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
|||
double _panelHeight{ 0 };
|
||||
double _compositionScale{ 0 };
|
||||
|
||||
winrt::Windows::System::DispatcherQueue _dispatcher{ nullptr };
|
||||
std::shared_ptr<ThrottledFuncTrailing<>> _tsfTryRedrawCanvas;
|
||||
std::shared_ptr<ThrottledFuncTrailing<>> _updatePatternLocations;
|
||||
std::shared_ptr<ThrottledFuncTrailing<Control::ScrollPositionChangedArgs>> _updateScrollBar;
|
||||
std::unique_ptr<til::throttled_func_trailing<>> _tsfTryRedrawCanvas;
|
||||
std::unique_ptr<til::throttled_func_trailing<>> _updatePatternLocations;
|
||||
std::unique_ptr<til::throttled_func_trailing<Control::ScrollPositionChangedArgs>> _updateScrollBar;
|
||||
|
||||
winrt::fire_and_forget _asyncCloseConnection();
|
||||
|
||||
|
|
|
@ -38,6 +38,9 @@ namespace Microsoft.Terminal.Control
|
|||
Boolean Initialize(Double actualWidth,
|
||||
Double actualHeight,
|
||||
Double compositionScale);
|
||||
Boolean InitializeWithHwnd(Double actualWidth,
|
||||
Double actualHeight,
|
||||
Double compositionScale, UInt64 hwnd);
|
||||
|
||||
void UpdateSettings(IControlSettings settings);
|
||||
void UpdateAppearance(IControlAppearance appearance);
|
||||
|
|
|
@ -0,0 +1,429 @@
|
|||
#include "pch.h"
|
||||
#include "FlatC.h"
|
||||
#include "winrt/Microsoft.Terminal.Control.h"
|
||||
#include "winrt/Microsoft.Terminal.Core.h"
|
||||
#include "../TerminalCore/ControlKeyStates.hpp"
|
||||
#include "../types/inc/colorTable.hpp"
|
||||
#include "../inc/DefaultSettings.h"
|
||||
#include <windowsx.h>
|
||||
|
||||
#pragma warning(disable : 4100)
|
||||
|
||||
using namespace winrt::Microsoft::Terminal::Control;
|
||||
using namespace winrt::Microsoft::Terminal::Core;
|
||||
using CKS = ::Microsoft::Terminal::Core::ControlKeyStates;
|
||||
|
||||
static CKS getControlKeyState() noexcept
|
||||
{
|
||||
struct KeyModifier
|
||||
{
|
||||
int vkey;
|
||||
CKS flags;
|
||||
};
|
||||
|
||||
constexpr std::array<KeyModifier, 5> modifiers{ {
|
||||
{ VK_RMENU, CKS::RightAltPressed },
|
||||
{ VK_LMENU, CKS::LeftAltPressed },
|
||||
{ VK_RCONTROL, CKS::RightCtrlPressed },
|
||||
{ VK_LCONTROL, CKS::LeftCtrlPressed },
|
||||
{ VK_SHIFT, CKS::ShiftPressed },
|
||||
} };
|
||||
|
||||
CKS flags;
|
||||
|
||||
for (const auto& mod : modifiers)
|
||||
{
|
||||
const auto state = GetKeyState(mod.vkey);
|
||||
const auto isDown = state < 0;
|
||||
|
||||
if (isDown)
|
||||
{
|
||||
flags |= mod.flags;
|
||||
}
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
static LPCWSTR term_window_class = L"HwndTerminalClass";
|
||||
|
||||
// This magic flag is "documented" at https://msdn.microsoft.com/en-us/library/windows/desktop/ms646301(v=vs.85).aspx
|
||||
// "If the high-order bit is 1, the key is down; otherwise, it is up."
|
||||
static constexpr short KeyPressed{ gsl::narrow_cast<short>(0x8000) };
|
||||
|
||||
static constexpr bool _IsMouseMessage(UINT uMsg)
|
||||
{
|
||||
return uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONUP || uMsg == WM_LBUTTONDBLCLK ||
|
||||
uMsg == WM_MBUTTONDOWN || uMsg == WM_MBUTTONUP || uMsg == WM_MBUTTONDBLCLK ||
|
||||
uMsg == WM_RBUTTONDOWN || uMsg == WM_RBUTTONUP || uMsg == WM_RBUTTONDBLCLK ||
|
||||
uMsg == WM_MOUSEMOVE || uMsg == WM_MOUSEWHEEL || uMsg == WM_MOUSEHWHEEL;
|
||||
}
|
||||
|
||||
#include "../inc/cppwinrt_utils.h"
|
||||
|
||||
struct NullConnection : public winrt::implements<NullConnection, winrt::Microsoft::Terminal::TerminalConnection::ITerminalConnection>
|
||||
{
|
||||
void Initialize(IInspectable x) {}
|
||||
void Start() {}
|
||||
void WriteInput(winrt::hstring d)
|
||||
{
|
||||
if (_pfnWriteCallback)
|
||||
{
|
||||
_pfnWriteCallback(d.data());
|
||||
}
|
||||
}
|
||||
void Resize(uint32_t r, uint32_t c) {}
|
||||
void Close() {}
|
||||
winrt::Microsoft::Terminal::TerminalConnection::ConnectionState State() const noexcept { return winrt::Microsoft::Terminal::TerminalConnection::ConnectionState::Closed; }
|
||||
WINRT_CALLBACK(TerminalOutput, winrt::Microsoft::Terminal::TerminalConnection::TerminalOutputHandler);
|
||||
|
||||
TYPED_EVENT(StateChanged, winrt::Microsoft::Terminal::TerminalConnection::ITerminalConnection, winrt::Windows::Foundation::IInspectable);
|
||||
|
||||
public:
|
||||
std::function<void(const wchar_t*)> _pfnWriteCallback{ nullptr };
|
||||
void WireOutput(const wchar_t* data)
|
||||
{
|
||||
_TerminalOutputHandlers(winrt::to_hstring(data));
|
||||
}
|
||||
};
|
||||
struct TerminalSettings : winrt::implements<TerminalSettings, IControlSettings, ICoreSettings, IControlAppearance, ICoreAppearance>
|
||||
{
|
||||
using IFontAxesMap = winrt::Windows::Foundation::Collections::IMap<winrt::hstring, float>;
|
||||
using IFontFeatureMap = winrt::Windows::Foundation::Collections::IMap<winrt::hstring, uint32_t>;
|
||||
TerminalSettings()
|
||||
{
|
||||
const auto campbellSpan = Microsoft::Console::Utils::CampbellColorTable();
|
||||
std::transform(campbellSpan.begin(), campbellSpan.end(), _ColorTable.begin(), [](auto&& color) {
|
||||
return static_cast<winrt::Microsoft::Terminal::Core::Color>(til::color{ color });
|
||||
});
|
||||
}
|
||||
~TerminalSettings() = default;
|
||||
|
||||
winrt::Microsoft::Terminal::Core::Color GetColorTableEntry(int32_t index) noexcept { return _ColorTable.at(index); }
|
||||
|
||||
WINRT_PROPERTY(til::color, DefaultForeground, DEFAULT_FOREGROUND);
|
||||
WINRT_PROPERTY(til::color, DefaultBackground, DEFAULT_BACKGROUND);
|
||||
WINRT_PROPERTY(til::color, SelectionBackground, DEFAULT_FOREGROUND);
|
||||
WINRT_PROPERTY(int32_t, HistorySize, DEFAULT_HISTORY_SIZE);
|
||||
WINRT_PROPERTY(int32_t, InitialRows, 30);
|
||||
WINRT_PROPERTY(int32_t, InitialCols, 80);
|
||||
WINRT_PROPERTY(bool, SnapOnInput, true);
|
||||
WINRT_PROPERTY(bool, AltGrAliasing, true);
|
||||
WINRT_PROPERTY(til::color, CursorColor, DEFAULT_CURSOR_COLOR);
|
||||
WINRT_PROPERTY(winrt::Microsoft::Terminal::Core::CursorStyle, CursorShape, winrt::Microsoft::Terminal::Core::CursorStyle::Vintage);
|
||||
WINRT_PROPERTY(uint32_t, CursorHeight, DEFAULT_CURSOR_HEIGHT);
|
||||
WINRT_PROPERTY(winrt::hstring, WordDelimiters, DEFAULT_WORD_DELIMITERS);
|
||||
WINRT_PROPERTY(bool, CopyOnSelect, false);
|
||||
WINRT_PROPERTY(bool, InputServiceWarning, true);
|
||||
WINRT_PROPERTY(bool, FocusFollowMouse, false);
|
||||
WINRT_PROPERTY(bool, TrimBlockSelection, false);
|
||||
WINRT_PROPERTY(bool, DetectURLs, true);
|
||||
WINRT_PROPERTY(winrt::Windows::Foundation::IReference<winrt::Microsoft::Terminal::Core::Color>, TabColor, nullptr);
|
||||
WINRT_PROPERTY(winrt::Windows::Foundation::IReference<winrt::Microsoft::Terminal::Core::Color>, StartingTabColor, nullptr);
|
||||
WINRT_PROPERTY(bool, IntenseIsBright);
|
||||
WINRT_PROPERTY(winrt::hstring, ProfileName);
|
||||
WINRT_PROPERTY(bool, UseAcrylic, false);
|
||||
WINRT_PROPERTY(double, TintOpacity, 0.5);
|
||||
WINRT_PROPERTY(winrt::hstring, Padding, DEFAULT_PADDING);
|
||||
WINRT_PROPERTY(winrt::hstring, FontFace, DEFAULT_FONT_FACE);
|
||||
WINRT_PROPERTY(int32_t, FontSize, DEFAULT_FONT_SIZE);
|
||||
WINRT_PROPERTY(winrt::Windows::UI::Text::FontWeight, FontWeight, winrt::Windows::UI::Text::FontWeight{ 400 });
|
||||
WINRT_PROPERTY(IFontAxesMap, FontAxes);
|
||||
WINRT_PROPERTY(IFontFeatureMap, FontFeatures);
|
||||
WINRT_PROPERTY(winrt::hstring, BackgroundImage);
|
||||
WINRT_PROPERTY(double, BackgroundImageOpacity, 1.0);
|
||||
WINRT_PROPERTY(winrt::Windows::UI::Xaml::Media::Stretch, BackgroundImageStretchMode, winrt::Windows::UI::Xaml::Media::Stretch::UniformToFill);
|
||||
WINRT_PROPERTY(winrt::Windows::UI::Xaml::HorizontalAlignment, BackgroundImageHorizontalAlignment, winrt::Windows::UI::Xaml::HorizontalAlignment::Center);
|
||||
WINRT_PROPERTY(winrt::Windows::UI::Xaml::VerticalAlignment, BackgroundImageVerticalAlignment, winrt::Windows::UI::Xaml::VerticalAlignment::Center);
|
||||
WINRT_PROPERTY(winrt::Microsoft::Terminal::Control::IKeyBindings, KeyBindings, nullptr);
|
||||
WINRT_PROPERTY(winrt::hstring, Commandline);
|
||||
WINRT_PROPERTY(winrt::hstring, StartingDirectory);
|
||||
WINRT_PROPERTY(winrt::hstring, StartingTitle);
|
||||
WINRT_PROPERTY(bool, SuppressApplicationTitle);
|
||||
WINRT_PROPERTY(winrt::hstring, EnvironmentVariables);
|
||||
WINRT_PROPERTY(winrt::Microsoft::Terminal::Control::ScrollbarState, ScrollState, winrt::Microsoft::Terminal::Control::ScrollbarState::Visible);
|
||||
WINRT_PROPERTY(winrt::Microsoft::Terminal::Control::TextAntialiasingMode, AntialiasingMode, winrt::Microsoft::Terminal::Control::TextAntialiasingMode::Grayscale);
|
||||
WINRT_PROPERTY(bool, RetroTerminalEffect, false);
|
||||
WINRT_PROPERTY(bool, ForceFullRepaintRendering, false);
|
||||
WINRT_PROPERTY(bool, SoftwareRendering, false);
|
||||
WINRT_PROPERTY(bool, ForceVTInput, false);
|
||||
WINRT_PROPERTY(winrt::hstring, PixelShaderPath);
|
||||
WINRT_PROPERTY(bool, IntenseIsBold);
|
||||
|
||||
private:
|
||||
std::array<winrt::Microsoft::Terminal::Core::Color, 16> _ColorTable;
|
||||
};
|
||||
|
||||
struct HwndTerminal
|
||||
{
|
||||
static LRESULT CALLBACK HwndTerminalWndProc(
|
||||
HWND hwnd,
|
||||
UINT uMsg,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam) noexcept
|
||||
try
|
||||
{
|
||||
#pragma warning(suppress : 26490) // Win32 APIs can only store void*, have to use reinterpret_cast
|
||||
HwndTerminal* terminal = reinterpret_cast<HwndTerminal*>(GetWindowLongPtr(hwnd, GWLP_USERDATA));
|
||||
if (terminal)
|
||||
{
|
||||
return terminal->WindowProc(hwnd, uMsg, wParam, lParam);
|
||||
}
|
||||
return DefWindowProc(hwnd, uMsg, wParam, lParam);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
LOG_CAUGHT_EXCEPTION();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool RegisterTermClass(HINSTANCE hInstance) noexcept
|
||||
{
|
||||
WNDCLASSW wc;
|
||||
if (GetClassInfoW(hInstance, term_window_class, &wc))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
wc.style = 0;
|
||||
wc.lpfnWndProc = HwndTerminal::HwndTerminalWndProc;
|
||||
wc.cbClsExtra = 0;
|
||||
wc.cbWndExtra = 0;
|
||||
wc.hInstance = hInstance;
|
||||
wc.hIcon = nullptr;
|
||||
wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
|
||||
wc.hbrBackground = nullptr;
|
||||
wc.lpszMenuName = nullptr;
|
||||
wc.lpszClassName = term_window_class;
|
||||
|
||||
return RegisterClassW(&wc) != 0;
|
||||
}
|
||||
|
||||
static MouseButtonState MouseButtonStateFromWParam(WPARAM wParam)
|
||||
{
|
||||
MouseButtonState state{};
|
||||
WI_UpdateFlag(state, MouseButtonState::IsLeftButtonDown, WI_IsFlagSet(wParam, MK_LBUTTON));
|
||||
WI_UpdateFlag(state, MouseButtonState::IsMiddleButtonDown, WI_IsFlagSet(wParam, MK_MBUTTON));
|
||||
WI_UpdateFlag(state, MouseButtonState::IsRightButtonDown, WI_IsFlagSet(wParam, MK_RBUTTON));
|
||||
return state;
|
||||
}
|
||||
|
||||
static Point PointFromLParam(LPARAM lParam)
|
||||
{
|
||||
return { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) };
|
||||
}
|
||||
|
||||
LRESULT WindowProc(
|
||||
HWND hwnd,
|
||||
UINT uMsg,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam) noexcept
|
||||
{
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_LBUTTONDOWN:
|
||||
case WM_MBUTTONDOWN:
|
||||
case WM_RBUTTONDOWN:
|
||||
SetCapture(_hwnd.get());
|
||||
_interactivity.PointerPressed(
|
||||
MouseButtonStateFromWParam(wParam),
|
||||
uMsg,
|
||||
std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::system_clock::now().time_since_epoch()).count(),
|
||||
getControlKeyState(),
|
||||
PointFromLParam(lParam));
|
||||
return 0;
|
||||
case WM_MOUSEMOVE:
|
||||
_interactivity.PointerMoved(
|
||||
MouseButtonStateFromWParam(wParam),
|
||||
WM_MOUSEMOVE,
|
||||
getControlKeyState(),
|
||||
true,
|
||||
PointFromLParam(lParam),
|
||||
true);
|
||||
return 0;
|
||||
case WM_LBUTTONUP:
|
||||
case WM_MBUTTONUP:
|
||||
case WM_RBUTTONUP:
|
||||
ReleaseCapture();
|
||||
_interactivity.PointerReleased(
|
||||
MouseButtonStateFromWParam(wParam),
|
||||
uMsg,
|
||||
getControlKeyState(),
|
||||
PointFromLParam(lParam));
|
||||
return 0;
|
||||
case WM_MOUSEWHEEL:
|
||||
if (_interactivity.MouseWheel(getControlKeyState(), GET_WHEEL_DELTA_WPARAM(wParam), PointFromLParam(lParam), MouseButtonStateFromWParam(wParam)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case WM_SETFOCUS:
|
||||
_interactivity.GotFocus();
|
||||
break;
|
||||
case WM_KILLFOCUS:
|
||||
_interactivity.LostFocus();
|
||||
break;
|
||||
}
|
||||
return DefWindowProcW(hwnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
wil::unique_hwnd _hwnd;
|
||||
|
||||
HwndTerminal(HWND parentHwnd)
|
||||
{
|
||||
HINSTANCE hInstance = wil::GetModuleInstanceHandle();
|
||||
|
||||
if (RegisterTermClass(hInstance))
|
||||
{
|
||||
_hwnd.reset(CreateWindowExW(
|
||||
0,
|
||||
term_window_class,
|
||||
nullptr,
|
||||
WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_VISIBLE,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
parentHwnd,
|
||||
nullptr,
|
||||
hInstance,
|
||||
nullptr));
|
||||
|
||||
#pragma warning(suppress : 26490) // Win32 APIs can only store void*, have to use reinterpret_cast
|
||||
SetWindowLongPtr(_hwnd.get(), GWLP_USERDATA, reinterpret_cast<LONG_PTR>(this));
|
||||
}
|
||||
|
||||
_connection = winrt::make_self<NullConnection>();
|
||||
_interactivity = ControlInteractivity{ winrt::make<TerminalSettings>(), *_connection };
|
||||
_core = _interactivity.Core();
|
||||
}
|
||||
|
||||
winrt::com_ptr<NullConnection> _connection;
|
||||
ControlInteractivity _interactivity{ nullptr };
|
||||
ControlCore _core{ nullptr };
|
||||
|
||||
HRESULT SendOutput(LPCWSTR data)
|
||||
try
|
||||
{
|
||||
_connection->WireOutput(data);
|
||||
return S_OK;
|
||||
}
|
||||
CATCH_RETURN()
|
||||
bool _initialized{ false };
|
||||
|
||||
HRESULT RegisterScrollCallback(PSCROLLCB callback) { return S_OK; }
|
||||
HRESULT TriggerResize(_In_ short width, _In_ short height, _Out_ COORD* dimensions)
|
||||
{
|
||||
if (!_initialized)
|
||||
return S_FALSE;
|
||||
SetWindowPos(_hwnd.get(), nullptr, 0, 0, width, height, 0);
|
||||
_core.SizeChanged(width, height);
|
||||
return S_OK;
|
||||
}
|
||||
HRESULT TriggerResizeWithDimension(_In_ COORD dimensions, _Out_ SIZE* dimensionsInPixels) { return S_OK; }
|
||||
HRESULT CalculateResize(_In_ short width, _In_ short height, _Out_ COORD* dimensions) { return S_OK; }
|
||||
HRESULT DpiChanged(int newDpi)
|
||||
{
|
||||
_core.ScaleChanged((double)newDpi / 96.0);
|
||||
return S_OK;
|
||||
}
|
||||
HRESULT UserScroll(int viewTop) { return S_OK; }
|
||||
HRESULT ClearSelection() { return S_OK; }
|
||||
HRESULT GetSelection(const wchar_t** out) { return S_OK; }
|
||||
HRESULT IsSelectionActive(bool* out) { return S_OK; }
|
||||
HRESULT SetTheme(TerminalTheme theme, LPCWSTR fontFamily, short fontSize, int newDpi) { return S_OK; }
|
||||
HRESULT RegisterWriteCallback(PWRITECB callback)
|
||||
{
|
||||
_connection->_pfnWriteCallback = callback;
|
||||
return S_OK;
|
||||
}
|
||||
HRESULT SendKeyEvent(WORD vkey, WORD scanCode, WORD flags, bool keyDown)
|
||||
{
|
||||
_core.TrySendKeyEvent(vkey, scanCode, getControlKeyState(), keyDown);
|
||||
return S_OK;
|
||||
}
|
||||
HRESULT SendCharEvent(wchar_t ch, WORD flags, WORD scanCode)
|
||||
{
|
||||
_core.SendCharEvent(ch, scanCode, getControlKeyState());
|
||||
return S_OK;
|
||||
}
|
||||
HRESULT BlinkCursor()
|
||||
{
|
||||
_core.CursorOn(!_core.CursorOn());
|
||||
return S_OK;
|
||||
}
|
||||
HRESULT SetCursorVisible(const bool visible)
|
||||
{
|
||||
_core.CursorOn(visible);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
RECT windowRect;
|
||||
GetWindowRect(_hwnd.get(), &windowRect);
|
||||
// BODGY: the +/-1 is because ControlCore will ignore an Initialize with zero size (oops)
|
||||
// becuase in the old days, TermControl would accidentally try to resize the Swap Chain to 0x0 (oops)
|
||||
// and therefore resize the connection to 0x0 (oops)
|
||||
_core.InitializeWithHwnd(windowRect.right - windowRect.left + 1, windowRect.bottom - windowRect.top + 1, 1.0, reinterpret_cast<uint64_t>(_hwnd.get()));
|
||||
_interactivity.Initialize();
|
||||
_core.EnablePainting();
|
||||
_initialized = true;
|
||||
}
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
__declspec(dllexport) HRESULT _stdcall CreateTerminal(HWND parentHwnd, _Out_ void** hwnd, _Out_ PTERM* terminal)
|
||||
{
|
||||
auto inner = new HwndTerminal{ parentHwnd };
|
||||
*terminal = inner;
|
||||
*hwnd = inner->_hwnd.get();
|
||||
inner->Initialize();
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
__declspec(dllexport) void _stdcall DestroyTerminal(PTERM terminal)
|
||||
{
|
||||
delete (HwndTerminal*)terminal;
|
||||
}
|
||||
|
||||
// Generate all of the C->C++ bridge functions.
|
||||
#define API_NAME(name) Terminal##name
|
||||
#define GENERATOR_0(name) \
|
||||
__declspec(dllexport) HRESULT _stdcall API_NAME(name)(PTERM terminal) \
|
||||
{ \
|
||||
return ((HwndTerminal*)(terminal))->name(); \
|
||||
}
|
||||
#define GENERATOR_1(name, t1, a1) \
|
||||
__declspec(dllexport) HRESULT _stdcall API_NAME(name)(PTERM terminal, t1 a1) \
|
||||
{ \
|
||||
return ((HwndTerminal*)(terminal))->name(a1); \
|
||||
}
|
||||
#define GENERATOR_2(name, t1, a1, t2, a2) \
|
||||
__declspec(dllexport) HRESULT _stdcall API_NAME(name)(PTERM terminal, t1 a1, t2 a2) \
|
||||
{ \
|
||||
return ((HwndTerminal*)(terminal))->name(a1, a2); \
|
||||
}
|
||||
#define GENERATOR_3(name, t1, a1, t2, a2, t3, a3) \
|
||||
__declspec(dllexport) HRESULT _stdcall API_NAME(name)(PTERM terminal, t1 a1, t2 a2, t3 a3) \
|
||||
{ \
|
||||
return ((HwndTerminal*)(terminal))->name(a1, a2, a3); \
|
||||
}
|
||||
#define GENERATOR_4(name, t1, a1, t2, a2, t3, a3, t4, a4) \
|
||||
__declspec(dllexport) HRESULT _stdcall API_NAME(name)(PTERM terminal, t1 a1, t2 a2, t3 a3, t4 a4) \
|
||||
{ \
|
||||
return ((HwndTerminal*)(terminal))->name(a1, a2, a3, a4); \
|
||||
}
|
||||
#define GENERATOR_N(name, t1, a1, t2, a2, t3, a3, t4, a4, MACRO, ...) MACRO
|
||||
#define GENERATOR(...) \
|
||||
GENERATOR_N(__VA_ARGS__, GENERATOR_4, GENERATOR_4, GENERATOR_3, GENERATOR_3, GENERATOR_2, GENERATOR_2, GENERATOR_1, GENERATOR_1, GENERATOR_0) \
|
||||
(__VA_ARGS__)
|
||||
TERMINAL_API_TABLE(GENERATOR)
|
||||
#undef GENERATOR_0
|
||||
#undef GENERATOR_1
|
||||
#undef GENERATOR_2
|
||||
#undef GENERATOR_3
|
||||
#undef GENERATOR_4
|
||||
#undef GENERATOR_N
|
||||
#undef API_NAME
|
|
@ -0,0 +1,77 @@
|
|||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
|
||||
#pragma once
|
||||
|
||||
/*
|
||||
#include "../../renderer/base/Renderer.hpp"
|
||||
#include "../../renderer/dx/DxRenderer.hpp"
|
||||
#include "../../cascadia/TerminalCore/Terminal.hpp"
|
||||
#include <UIAutomationCore.h>
|
||||
#include "../../types/IControlAccessibilityInfo.h"
|
||||
#include "../../types/TermControlUiaProvider.hpp"
|
||||
*/
|
||||
|
||||
//using namespace Microsoft::Console::VirtualTerminal;
|
||||
|
||||
// Keep in sync with TerminalTheme.cs
|
||||
typedef struct _TerminalTheme
|
||||
{
|
||||
COLORREF DefaultBackground;
|
||||
COLORREF DefaultForeground;
|
||||
COLORREF DefaultSelectionBackground;
|
||||
float SelectionBackgroundAlpha;
|
||||
uint32_t CursorStyle; // This will be converted to DispatchTypes::CursorStyle (size_t), but C# cannot marshal an enum type and have it fit in a size_t.
|
||||
COLORREF ColorTable[16];
|
||||
} TerminalTheme, *LPTerminalTheme;
|
||||
|
||||
using PTERM = void*;
|
||||
using PSCROLLCB = void(_stdcall*)(int, int, int);
|
||||
using PWRITECB = void(_stdcall*)(const wchar_t*);
|
||||
|
||||
#define TERMINAL_API_TABLE(XX) \
|
||||
XX(SendOutput, LPCWSTR, data) \
|
||||
XX(RegisterScrollCallback, PSCROLLCB, callback) \
|
||||
XX(TriggerResize, _In_ short, width, _In_ short, height, _Out_ COORD*, dimensions) \
|
||||
XX(TriggerResizeWithDimension, _In_ COORD, dimensions, _Out_ SIZE*, dimensionsInPixels) \
|
||||
XX(CalculateResize, _In_ short, width, _In_ short, height, _Out_ COORD*, dimensions) \
|
||||
XX(DpiChanged, int, newDpi) \
|
||||
XX(UserScroll, int, viewTop) \
|
||||
XX(ClearSelection) \
|
||||
XX(GetSelection, const wchar_t**, out) \
|
||||
XX(IsSelectionActive, bool*, out) \
|
||||
XX(SetTheme, TerminalTheme, theme, LPCWSTR, fontFamily, short, fontSize, int, newDpi) \
|
||||
XX(RegisterWriteCallback, PWRITECB, callback) \
|
||||
XX(SendKeyEvent, WORD, vkey, WORD, scanCode, WORD, flags, bool, keyDown) \
|
||||
XX(SendCharEvent, wchar_t, ch, WORD, flags, WORD, scanCode) \
|
||||
XX(BlinkCursor) \
|
||||
XX(SetCursorVisible, const bool, visible)
|
||||
|
||||
extern "C" {
|
||||
#define API_NAME(name) Terminal##name
|
||||
#define GENERATOR_0(name) \
|
||||
__declspec(dllexport) HRESULT _stdcall API_NAME(name)(PTERM);
|
||||
#define GENERATOR_1(name, t1, a1) \
|
||||
__declspec(dllexport) HRESULT _stdcall API_NAME(name)(PTERM, t1);
|
||||
#define GENERATOR_2(name, t1, a1, t2, a2) \
|
||||
__declspec(dllexport) HRESULT _stdcall API_NAME(name)(PTERM, t1, t2);
|
||||
#define GENERATOR_3(name, t1, a1, t2, a2, t3, a3) \
|
||||
__declspec(dllexport) HRESULT _stdcall API_NAME(name)(PTERM, t1, t2, t3);
|
||||
#define GENERATOR_4(name, t1, a1, t2, a2, t3, a3, t4, a4) \
|
||||
__declspec(dllexport) HRESULT _stdcall API_NAME(name)(PTERM, t1, t2, t3, t4);
|
||||
#define GENERATOR_N(name, t1, a1, t2, a2, t3, a3, t4, a4, MACRO, ...) MACRO
|
||||
#define GENERATOR(...) \
|
||||
GENERATOR_N(__VA_ARGS__, GENERATOR_4, GENERATOR_4, GENERATOR_3, GENERATOR_3, GENERATOR_2, GENERATOR_2, GENERATOR_1, GENERATOR_1, GENERATOR_0) \
|
||||
(__VA_ARGS__)
|
||||
TERMINAL_API_TABLE(GENERATOR)
|
||||
#undef GENERATOR_0
|
||||
#undef GENERATOR_1
|
||||
#undef GENERATOR_2
|
||||
#undef GENERATOR_3
|
||||
#undef GENERATOR_4
|
||||
#undef GENERATOR_N
|
||||
#undef API_NAME
|
||||
|
||||
__declspec(dllexport) HRESULT _stdcall CreateTerminal(HWND parentHwnd, _Out_ void** hwnd, _Out_ PTERM* terminal);
|
||||
__declspec(dllexport) void _stdcall DestroyTerminal(PTERM terminal);
|
||||
};
|
|
@ -1876,7 +1876,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
|||
|
||||
// UWP XAML scrollbars aren't guaranteed to be the same size as the
|
||||
// ComCtl scrollbars, but it's certainly close enough.
|
||||
const auto scrollbarSize = GetSystemMetricsForDpi(SM_CXVSCROLL, dpi);
|
||||
auto scrollbarSize = GetSystemMetrics(SM_CXVSCROLL);
|
||||
scrollbarSize = gsl::narrow_cast<decltype(scrollbarSize)>(scrollbarSize * (dpi / 96));
|
||||
|
||||
double width = cols * fontSize.X;
|
||||
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
<ClCompile Include="pch.cpp">
|
||||
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="FlatC.cpp" />
|
||||
<ClCompile Include="ControlCore.cpp">
|
||||
<DependentUpon>ControlCore.idl</DependentUpon>
|
||||
</ClCompile>
|
||||
|
@ -157,6 +158,7 @@
|
|||
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="$(OpenConsoleDir)src\cascadia\WinRTUtils\WinRTUtils.vcxproj">
|
||||
<Private>true</Private>
|
||||
<Project>{CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
|
|
|
@ -1,3 +1,21 @@
|
|||
EXPORTS
|
||||
DllCanUnloadNow = WINRT_CanUnloadNow PRIVATE
|
||||
DllGetActivationFactory = WINRT_GetActivationFactory PRIVATE
|
||||
CreateTerminal
|
||||
DestroyTerminal
|
||||
TerminalSendOutput
|
||||
TerminalRegisterScrollCallback
|
||||
TerminalTriggerResize
|
||||
TerminalTriggerResizeWithDimension
|
||||
TerminalCalculateResize
|
||||
TerminalDpiChanged
|
||||
TerminalUserScroll
|
||||
TerminalClearSelection
|
||||
TerminalGetSelection
|
||||
TerminalIsSelectionActive
|
||||
TerminalSetTheme
|
||||
TerminalRegisterWriteCallback
|
||||
TerminalSendKeyEvent
|
||||
TerminalSendCharEvent
|
||||
TerminalBlinkCursor
|
||||
TerminalSetCursorVisible
|
||||
|
|
|
@ -82,7 +82,7 @@
|
|||
|
||||
<ItemDefinitionGroup>
|
||||
<Link>
|
||||
<AdditionalDependencies>dwrite.lib;dxgi.lib;d2d1.lib;d3d11.lib;shcore.lib;winmm.lib;pathcch.lib;propsys.lib;uiautomationcore.lib;Shlwapi.lib;ntdll.lib;user32.lib;kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>onecoreuap.lib;dwrite.lib;dxgi.lib;d2d1.lib;d3d11.lib;shcore.lib;winmm.lib;pathcch.lib;propsys.lib;uiautomationcore.lib;Shlwapi.lib;ntdll.lib;user32.lib;kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<!--
|
||||
ControlLib contains a DllMain that we need to force the use of.
|
||||
If you don't have this, then you'll see an error like
|
||||
|
@ -98,4 +98,10 @@
|
|||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(OpenConsoleDir)src\cppwinrt.build.post.props" />
|
||||
<!--LATE LATE LATE-->
|
||||
<ItemDefinitionGroup>
|
||||
<Link>
|
||||
<AdditionalDependencies>onecoreuap.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
</Project>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210309.3" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210825.3" targetFramework="native" />
|
||||
</packages>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210309.3" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210825.3" targetFramework="native" />
|
||||
</packages>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.UI.Xaml" version="2.5.0-prerelease.201202003" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210309.3" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210825.3" targetFramework="native" />
|
||||
</packages>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210309.3" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210825.3" targetFramework="native" />
|
||||
</packages>
|
||||
|
|
|
@ -77,7 +77,6 @@ static void EnsureAllResourcesArePresent(const ScopedResourceLoader& loader)
|
|||
#endif
|
||||
|
||||
static ScopedResourceLoader GetLibraryResourceLoader()
|
||||
try
|
||||
{
|
||||
ScopedResourceLoader loader{ g_WinRTUtilsLibraryResourceScope };
|
||||
#ifdef _DEBUG
|
||||
|
@ -85,7 +84,6 @@ try
|
|||
#endif
|
||||
return loader;
|
||||
}
|
||||
CATCH_FAIL_FAST()
|
||||
|
||||
winrt::hstring GetLibraryResourceString(const std::wstring_view key)
|
||||
try
|
||||
|
@ -93,7 +91,11 @@ try
|
|||
static auto loader{ GetLibraryResourceLoader() };
|
||||
return loader.GetLocalizedString(key);
|
||||
}
|
||||
CATCH_FAIL_FAST()
|
||||
catch (...)
|
||||
{
|
||||
LOG_CAUGHT_EXCEPTION();
|
||||
return winrt::hstring{};
|
||||
}
|
||||
|
||||
bool HasLibraryResourceWithName(const std::wstring_view key)
|
||||
try
|
||||
|
@ -101,4 +103,8 @@ try
|
|||
static auto loader{ GetLibraryResourceLoader() };
|
||||
return loader.HasResourceWithName(key);
|
||||
}
|
||||
CATCH_FAIL_FAST()
|
||||
catch (...)
|
||||
{
|
||||
LOG_CAUGHT_EXCEPTION();
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<OpenConsoleUniversalApp>true</OpenConsoleUniversalApp>
|
||||
<CppWinRTGenerateWindowsMetadata>false</CppWinRTGenerateWindowsMetadata>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\..\..\common.openconsole.props" Condition="'$(OpenConsoleDir)'==''" />
|
||||
<Import Project="$(OpenConsoleDir)src\cppwinrt.build.pre.props" />
|
||||
|
|
|
@ -90,13 +90,13 @@ private:
|
|||
}
|
||||
CATCH_LOG();
|
||||
|
||||
SetThreadpoolTimerEx(self->_timer.get(), &self->_delay, 0, 0);
|
||||
SetThreadpoolTimer(self->_timer.get(), &self->_delay, 0, 0);
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
SetThreadpoolTimerEx(_timer.get(), &_delay, 0, 0);
|
||||
SetThreadpoolTimer(_timer.get(), &_delay, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210309.3" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210825.3" targetFramework="native" />
|
||||
</packages>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210309.3" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210825.3" targetFramework="native" />
|
||||
<package id="Microsoft.Toolkit.Win32.UI.XamlApplication" version="6.1.3" targetFramework="native" />
|
||||
<package id="Microsoft.UI.Xaml" version="2.5.0-prerelease.201202003" targetFramework="native" />
|
||||
<package id="Microsoft.VCRTForwarders.140" version="1.0.4" targetFramework="native" />
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Toolkit.Win32.UI.XamlApplication" version="6.1.3" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210309.3" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210825.3" targetFramework="native" />
|
||||
</packages>
|
|
@ -179,72 +179,72 @@ namespace Microsoft.Terminal.Wpf
|
|||
SWP_SHOWWINDOW = 0x0040,
|
||||
}
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern uint CreateTerminal(IntPtr parent, out IntPtr hwnd, out IntPtr terminal);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern void TerminalSendOutput(IntPtr terminal, string lpdata);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern uint TerminalTriggerResize(IntPtr terminal, short width, short height, out COORD dimensions);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern uint TerminalTriggerResizeWithDimension(IntPtr terminal, [MarshalAs(UnmanagedType.Struct)] COORD dimensions, out SIZE dimensionsInPixels);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern uint TerminalCalculateResize(IntPtr terminal, short width, short height, out COORD dimensions);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern void TerminalDpiChanged(IntPtr terminal, int newDpi);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern void TerminalRegisterScrollCallback(IntPtr terminal, [MarshalAs(UnmanagedType.FunctionPtr)]ScrollCallback callback);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern void TerminalRegisterWriteCallback(IntPtr terminal, [MarshalAs(UnmanagedType.FunctionPtr)]WriteCallback callback);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern void TerminalUserScroll(IntPtr terminal, int viewTop);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern uint TerminalStartSelection(IntPtr terminal, COORD cursorPosition, bool altPressed);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern uint TerminalMoveSelection(IntPtr terminal, COORD cursorPosition);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern void TerminalClearSelection(IntPtr terminal);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[return: MarshalAs(UnmanagedType.LPWStr)]
|
||||
public static extern string TerminalGetSelection(IntPtr terminal);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[return: MarshalAs(UnmanagedType.I1)]
|
||||
public static extern bool TerminalIsSelectionActive(IntPtr terminal);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern void DestroyTerminal(IntPtr terminal);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern void TerminalSendKeyEvent(IntPtr terminal, ushort vkey, ushort scanCode, ushort flags, bool keyDown);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern void TerminalSendCharEvent(IntPtr terminal, char ch, ushort scanCode, ushort flags);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern void TerminalSetTheme(IntPtr terminal, [MarshalAs(UnmanagedType.Struct)] TerminalTheme theme, string fontFamily, short fontSize, int newDpi);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern void TerminalBlinkCursor(IntPtr terminal);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern void TerminalSetCursorVisible(IntPtr terminal, bool visible);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern void TerminalSetFocus(IntPtr terminal);
|
||||
|
||||
[DllImport("PublicTerminalCore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
[DllImport("Microsoft.Terminal.Control.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
|
||||
public static extern void TerminalKillFocus(IntPtr terminal);
|
||||
|
||||
[DllImport("user32.dll", SetLastError = true)]
|
||||
|
|
|
@ -33,7 +33,6 @@ namespace Microsoft.Terminal.Wpf
|
|||
public TerminalContainer()
|
||||
{
|
||||
this.MessageHook += this.TerminalContainer_MessageHook;
|
||||
this.GotFocus += this.TerminalContainer_GotFocus;
|
||||
this.Focusable = true;
|
||||
|
||||
var blinkTime = NativeMethods.GetCaretBlinkTime();
|
||||
|
@ -306,12 +305,6 @@ namespace Microsoft.Terminal.Wpf
|
|||
character = (char)vKey;
|
||||
}
|
||||
|
||||
private void TerminalContainer_GotFocus(object sender, RoutedEventArgs e)
|
||||
{
|
||||
e.Handled = true;
|
||||
NativeMethods.SetFocus(this.hwnd);
|
||||
}
|
||||
|
||||
private IntPtr TerminalContainer_MessageHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
|
||||
{
|
||||
if (hwnd == this.hwnd)
|
||||
|
@ -319,13 +312,10 @@ namespace Microsoft.Terminal.Wpf
|
|||
switch ((NativeMethods.WindowMessage)msg)
|
||||
{
|
||||
case NativeMethods.WindowMessage.WM_SETFOCUS:
|
||||
NativeMethods.TerminalSetFocus(this.terminal);
|
||||
this.blinkTimer?.Start();
|
||||
break;
|
||||
case NativeMethods.WindowMessage.WM_KILLFOCUS:
|
||||
NativeMethods.TerminalKillFocus(this.terminal);
|
||||
this.blinkTimer?.Stop();
|
||||
NativeMethods.TerminalSetCursorVisible(this.terminal, false);
|
||||
break;
|
||||
case NativeMethods.WindowMessage.WM_MOUSEACTIVATE:
|
||||
this.Focus();
|
||||
|
@ -392,10 +382,10 @@ namespace Microsoft.Terminal.Wpf
|
|||
this.Connection?.Resize((uint)dimensions.Y, (uint)dimensions.X);
|
||||
break;
|
||||
|
||||
case NativeMethods.WindowMessage.WM_MOUSEWHEEL:
|
||||
var delta = (short)(((long)wParam) >> 16);
|
||||
this.UserScrolled?.Invoke(this, delta);
|
||||
break;
|
||||
//case NativeMethods.WindowMessage.WM_MOUSEWHEEL:
|
||||
//var delta = (short)(((long)wParam) >> 16);
|
||||
//this.UserScrolled?.Invoke(this, delta);
|
||||
//break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
|
||||
<Target Name="CollectNativePackContents">
|
||||
<ItemGroup>
|
||||
<None Include="$(RepoBinPath)\Win32\$(Configuration)\PublicTerminalCore.dll">
|
||||
<None Include="$(RepoBinPath)\Win32\$(Configuration)\Microsoft.Terminal.Control\Microsoft.Terminal.Control.dll">
|
||||
<Pack>true</Pack>
|
||||
<PackagePath>runtimes\win-x86\native\</PackagePath>
|
||||
</None>
|
||||
|
@ -39,7 +39,7 @@
|
|||
<Pack>true</Pack>
|
||||
<PackagePath>runtimes\win-x86\native\</PackagePath>
|
||||
</None>
|
||||
<None Include="$(RepoBinPath)\x64\$(Configuration)\PublicTerminalCore.dll">
|
||||
<None Include="$(RepoBinPath)\x64\$(Configuration)\Microsoft.Terminal.Control\Microsoft.Terminal.Control.dll">
|
||||
<Pack>true</Pack>
|
||||
<PackagePath>runtimes\win-x64\native\</PackagePath>
|
||||
</None>
|
||||
|
|
|
@ -9,7 +9,9 @@
|
|||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="$(SolutionDir)src\api-ms-win-core-synch-l1-2-0\api-ms-win-core-synch-l1-2-0.vcxproj" />
|
||||
<ProjectReference Include="$(SolutionDir)src\cascadia\PublicTerminalCore\PublicTerminalCore.vcxproj" />
|
||||
<ProjectReference Include="$(SolutionDir)src\cascadia\TerminalControl\dll\TerminalControl.vcxproj">
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="$(SolutionDir)src\cascadia\WpfTerminalControl\WpfTerminalControl.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
@ -19,7 +21,7 @@
|
|||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="$(SolutionDir)bin\$(UnreasonablePlatform)\$(Configuration)\PublicTerminalCore.dll">
|
||||
<Content Include="$(SolutionDir)bin\$(UnreasonablePlatform)\$(Configuration)\Microsoft.Terminal.Control\Microsoft.Terminal.Control.dll">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="$(SolutionDir)bin\$(UnreasonablePlatform)\$(Configuration)\api-ms-win-core-synch-l1-2-0.dll">
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
<Import Project="$(MSBuildThisFileDirectory)common.build.post.props" />
|
||||
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
<Import Project="$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210309.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210309.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||
<Import Project="$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210825.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210825.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||
</ImportGroup>
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210309.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210309.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||
<Error Condition="!Exists('$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210309.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210309.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||
<Error Condition="!Exists('$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210825.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210825.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||
<Error Condition="!Exists('$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210825.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210825.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
<Import Project="..\common.openconsole.props" Condition="'$(OpenConsoleDir)'==''" />
|
||||
|
||||
<Import Project="$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210309.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210309.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||
<Import Project="$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210825.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('$(OpenConsoleDir)\packages\Microsoft.Windows.CppWinRT.2.0.210825.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||
|
||||
<PropertyGroup Label="Globals">
|
||||
<CppWinRTHeapEnforcement>AnyValueHereWillDisableTheOptOut</CppWinRTHeapEnforcement>
|
||||
|
@ -55,6 +55,7 @@
|
|||
-->
|
||||
<PropertyGroup>
|
||||
<_NoWinAPIFamilyApp>true</_NoWinAPIFamilyApp>
|
||||
<_VC_Target_Library_Platform>Desktop</_VC_Target_Library_Platform>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Label="Configuration">
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
// The compiler doesn't like that. --> Suppress the warning.
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable: 4324) // structure was padded due to alignment specifier
|
||||
#include <wrl.h>
|
||||
//#include <wrl.h>
|
||||
#pragma warning(pop)
|
||||
|
||||
// WEX/TAEF testing
|
||||
|
|
|
@ -172,7 +172,7 @@ namespace til
|
|||
_func();
|
||||
}
|
||||
|
||||
SetThreadpoolTimerEx(_timer.get(), &_delay, 0, 0);
|
||||
SetThreadpoolTimer(_timer.get(), &_delay, 0, 0);
|
||||
}
|
||||
|
||||
void _trailing_edge()
|
||||
|
|
|
@ -35,6 +35,9 @@
|
|||
#include <dwrite_2.h>
|
||||
#include <dwrite_3.h>
|
||||
|
||||
#include <wrl/client.h>
|
||||
#include <wrl/implements.h>
|
||||
|
||||
// Re-include TIL at the bottom to gain DX superpowers.
|
||||
#include "til.h"
|
||||
|
||||
|
|
Loading…
Reference in New Issue