Skip to content

Commit

Permalink
Made code more readable
Browse files Browse the repository at this point in the history
More PR changes
  • Loading branch information
carlos-zamora committed Jul 30, 2019
1 parent 1db8b20 commit 573fcdb
Show file tree
Hide file tree
Showing 10 changed files with 163 additions and 124 deletions.
2 changes: 2 additions & 0 deletions src/cascadia/TerminalControl/TermControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,8 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation

Windows::UI::Xaml::Automation::Peers::AutomationPeer TermControl::OnCreateAutomationPeer()
{
// create a custom automation peer with this code pattern:
// (https://docs.microsoft.com/en-us/windows/uwp/design/accessibility/custom-automation-peers)
return winrt::make<winrt::Microsoft::Terminal::TerminalControl::implementation::TermControlAutomationPeer>(*this);
}

Expand Down
66 changes: 44 additions & 22 deletions src/cascadia/TerminalControl/TermControlAutomationPeer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,26 @@

#include "XamlUiaTextRange.h"

using namespace Microsoft::Console::Types;
using namespace winrt::Windows::UI::Xaml::Automation::Peers;

namespace UIA
{
using ::ITextRangeProvider;
using ::SupportedTextSelection;
}

namespace XamlAutomation
{
using winrt::Windows::UI::Xaml::Automation::SupportedTextSelection;
using winrt::Windows::UI::Xaml::Automation::Provider::IRawElementProviderSimple;
using winrt::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider;
}

namespace winrt::Microsoft::Terminal::TerminalControl::implementation
{
TermControlAutomationPeer::TermControlAutomationPeer(winrt::Microsoft::Terminal::TerminalControl::implementation::TermControl const& owner) :
TermControlAutomationPeerT<TermControlAutomationPeer>(owner),
TermControlAutomationPeerT<TermControlAutomationPeer>(owner), // pass owner to FrameworkElementAutomationPeer
_uiaProvider{ owner.GetRenderData(), nullptr, std::bind(&TermControlAutomationPeer::GetBoundingRectWrapped, this) } {};

winrt::hstring TermControlAutomationPeer::GetClassNameCore() const
Expand Down Expand Up @@ -44,57 +60,57 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
}

#pragma region ITextProvider
winrt::com_array<Windows::UI::Xaml::Automation::Provider::ITextRangeProvider> TermControlAutomationPeer::GetSelection()
winrt::com_array<XamlAutomation::ITextRangeProvider> TermControlAutomationPeer::GetSelection()
{
SAFEARRAY* pReturnVal;
THROW_IF_FAILED(_uiaProvider.GetSelection(&pReturnVal));
return SafeArrayToComArray(pReturnVal);
}

winrt::com_array<Windows::UI::Xaml::Automation::Provider::ITextRangeProvider> TermControlAutomationPeer::GetVisibleRanges()
winrt::com_array<XamlAutomation::ITextRangeProvider> TermControlAutomationPeer::GetVisibleRanges()
{
SAFEARRAY* pReturnVal;
THROW_IF_FAILED(_uiaProvider.GetVisibleRanges(&pReturnVal));
return SafeArrayToComArray(pReturnVal);
}

Windows::UI::Xaml::Automation::Provider::ITextRangeProvider TermControlAutomationPeer::RangeFromChild(Windows::UI::Xaml::Automation::Provider::IRawElementProviderSimple childElement)
XamlAutomation::ITextRangeProvider TermControlAutomationPeer::RangeFromChild(XamlAutomation::IRawElementProviderSimple childElement)
{
::ITextRangeProvider* returnVal;
UIA::ITextRangeProvider* returnVal;
// ScreenInfoUiaProvider doesn't actually use parameter, so just pass in nullptr
_uiaProvider.RangeFromChild(/* IRawElementProviderSimple */ nullptr,
&returnVal);

auto parentProvider = this->ProviderFromPeer(*this);
auto xutr = winrt::make_self<XamlUiaTextRange>(returnVal, parentProvider);
return xutr.as<Windows::UI::Xaml::Automation::Provider::ITextRangeProvider>();
return xutr.as<XamlAutomation::ITextRangeProvider>();
}

Windows::UI::Xaml::Automation::Provider::ITextRangeProvider TermControlAutomationPeer::RangeFromPoint(Windows::Foundation::Point screenLocation)
XamlAutomation::ITextRangeProvider TermControlAutomationPeer::RangeFromPoint(Windows::Foundation::Point screenLocation)
{
::ITextRangeProvider* returnVal;
UIA::ITextRangeProvider* returnVal;
_uiaProvider.RangeFromPoint({ screenLocation.X, screenLocation.Y }, &returnVal);

auto parentProvider = this->ProviderFromPeer(*this);
auto xutr = winrt::make_self<XamlUiaTextRange>(returnVal, parentProvider);
return xutr.as<Windows::UI::Xaml::Automation::Provider::ITextRangeProvider>();
return xutr.as<XamlAutomation::ITextRangeProvider>();
}

Windows::UI::Xaml::Automation::Provider::ITextRangeProvider TermControlAutomationPeer::DocumentRange()
XamlAutomation::ITextRangeProvider TermControlAutomationPeer::DocumentRange()
{
::ITextRangeProvider* returnVal;
UIA::ITextRangeProvider* returnVal;
_uiaProvider.get_DocumentRange(&returnVal);

auto parentProvider = this->ProviderFromPeer(*this);
auto xutr = winrt::make_self<XamlUiaTextRange>(returnVal, parentProvider);
return xutr.as<Windows::UI::Xaml::Automation::Provider::ITextRangeProvider>();
return xutr.as<XamlAutomation::ITextRangeProvider>();
}

Windows::UI::Xaml::Automation::SupportedTextSelection TermControlAutomationPeer::SupportedTextSelection()
{
::SupportedTextSelection returnVal;
UIA::SupportedTextSelection returnVal;
_uiaProvider.get_SupportedTextSelection(&returnVal);
return static_cast<Windows::UI::Xaml::Automation::SupportedTextSelection>(returnVal);
return static_cast<XamlAutomation::SupportedTextSelection>(returnVal);
}

#pragma endregion
Expand All @@ -110,22 +126,28 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
};
}

winrt::com_array<Windows::UI::Xaml::Automation::Provider::ITextRangeProvider> TermControlAutomationPeer::SafeArrayToComArray(SAFEARRAY* textRanges)
// Method Description:
// - extracts the UiaTextRanges from the SAFEARRAY and converts them to Xaml ITextRangeProviders
// Arguments:
// - SAFEARRAY of UIA::UiaTextRange (ITextRangeProviders)
// Return Value:
// - com_array of Xaml Wrapped UiaTextRange (ITextRangeProviders)
winrt::com_array<XamlAutomation::ITextRangeProvider> TermControlAutomationPeer::SafeArrayToComArray(SAFEARRAY* textRanges)

This comment has been minimized.

Copy link
@DHowett-MSFT

DHowett-MSFT Jul 30, 2019

Contributor

this is named as though it's generic, but it's not. maybe WrapArrayOfTextRangeProviders

{
auto owningVector = SafeArrayToOwningVector<::UiaTextRange>(textRanges);
int count = owningVector.size();
// transfer ownership of UiaTextRanges to this new vector
auto providers = SafeArrayToOwningVector<::Microsoft::Console::Types::UiaTextRange>(textRanges);
int count = providers.size();

std::vector<Windows::UI::Xaml::Automation::Provider::ITextRangeProvider> vec;
std::vector<XamlAutomation::ITextRangeProvider> vec;
vec.reserve(count);
auto parentProvider = this->ProviderFromPeer(*this);
for (int i = 0; i < count; i++)
{
auto provider = owningVector[i];
auto xutr = winrt::make_self<XamlUiaTextRange>(provider.get(), parentProvider);
vec.emplace_back(xutr.as<Windows::UI::Xaml::Automation::Provider::ITextRangeProvider>());
auto xutr = winrt::make_self<XamlUiaTextRange>(providers[i].detach(), parentProvider);
vec.emplace_back(xutr.as<XamlAutomation::ITextRangeProvider>());
}

winrt::com_array<Windows::UI::Xaml::Automation::Provider::ITextRangeProvider> result{ vec };
winrt::com_array<XamlAutomation::ITextRangeProvider> result{ vec };

return result;
}
Expand Down
16 changes: 5 additions & 11 deletions src/cascadia/TerminalControl/TermControlAutomationPeer.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,10 @@ Author(s):
#include "TermControl.h"
#include "TermControlAutomationPeer.g.h"
#include <winrt/Microsoft.Terminal.TerminalControl.h>
#include <winrt/Windows.UI.Xaml.h>
#include <winrt/Windows.UI.Xaml.Automation.Peers.h>
#include "../../renderer/inc/IRenderData.hpp"
#include "../types/ScreenInfoUiaProvider.h"
#include "../types/WindowUiaProviderBase.hpp"

using namespace Microsoft::Console::Render;
using namespace Microsoft::Console::Types;
using namespace winrt::Windows::UI::Xaml::Automation::Peers;

namespace winrt::Microsoft::Terminal::TerminalControl::implementation
{
struct TermControlAutomationPeer :
Expand All @@ -46,23 +40,23 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
TermControlAutomationPeer(winrt::Microsoft::Terminal::TerminalControl::implementation::TermControl const& owner);

winrt::hstring GetClassNameCore() const;
AutomationControlType GetAutomationControlTypeCore() const;
winrt::Windows::UI::Xaml::Automation::Peers::AutomationControlType GetAutomationControlTypeCore() const;
winrt::hstring GetLocalizedControlTypeCore() const;
winrt::Windows::Foundation::IInspectable GetPatternCore(PatternInterface patternInterface) const;
winrt::Windows::Foundation::IInspectable GetPatternCore(winrt::Windows::UI::Xaml::Automation::Peers::PatternInterface patternInterface) const;

// ITextProvider Pattern
#pragma region ITextProvider Pattern
Windows::UI::Xaml::Automation::Provider::ITextRangeProvider RangeFromPoint(Windows::Foundation::Point screenLocation);
Windows::UI::Xaml::Automation::Provider::ITextRangeProvider RangeFromChild(Windows::UI::Xaml::Automation::Provider::IRawElementProviderSimple childElement);
winrt::com_array<Windows::UI::Xaml::Automation::Provider::ITextRangeProvider> GetVisibleRanges();
winrt::com_array<Windows::UI::Xaml::Automation::Provider::ITextRangeProvider> GetSelection();
Windows::UI::Xaml::Automation::SupportedTextSelection SupportedTextSelection();
Windows::UI::Xaml::Automation::Provider::ITextRangeProvider DocumentRange();
#pragma endregion

RECT GetBoundingRectWrapped();

private:
TermControl* _owner;
ScreenInfoUiaProvider _uiaProvider;
::Microsoft::Console::Types::ScreenInfoUiaProvider _uiaProvider;

winrt::com_array<Windows::UI::Xaml::Automation::Provider::ITextRangeProvider> SafeArrayToComArray(SAFEARRAY* textRanges);
};
Expand Down
74 changes: 46 additions & 28 deletions src/cascadia/TerminalControl/XamlUiaTextRange.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,34 @@
#include "XamlUiaTextRange.h"
#include "../types/UiaTextRange.hpp"

namespace UIA
{
using ::ITextRangeProvider;
using ::SupportedTextSelection;
using ::TextPatternRangeEndpoint;
using ::TextUnit;
}

namespace XamlAutomation
{
using winrt::Windows::UI::Xaml::Automation::SupportedTextSelection;
using winrt::Windows::UI::Xaml::Automation::Provider::IRawElementProviderSimple;
using winrt::Windows::UI::Xaml::Automation::Provider::ITextRangeProvider;
using winrt::Windows::UI::Xaml::Automation::Text::TextPatternRangeEndpoint;
using winrt::Windows::UI::Xaml::Automation::Text::TextUnit;
}

namespace winrt::Microsoft::Terminal::TerminalControl::implementation
{
Windows::UI::Xaml::Automation::Provider::ITextRangeProvider XamlUiaTextRange::Clone() const
XamlAutomation::ITextRangeProvider XamlUiaTextRange::Clone() const
{
::ITextRangeProvider* pReturn;
UIA::ITextRangeProvider* pReturn;
THROW_IF_FAILED(_uiaProvider->Clone(&pReturn));
auto xutr = winrt::make_self<XamlUiaTextRange>(pReturn, _parentProvider);
return xutr.as<Windows::UI::Xaml::Automation::Provider::ITextRangeProvider>();
return xutr.as<XamlAutomation::ITextRangeProvider>();
}

bool XamlUiaTextRange::Compare(Windows::UI::Xaml::Automation::Provider::ITextRangeProvider pRange) const
bool XamlUiaTextRange::Compare(XamlAutomation::ITextRangeProvider pRange) const
{
auto self = winrt::get_self<XamlUiaTextRange>(pRange);

Expand All @@ -24,9 +41,9 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
return returnVal;
}

int32_t XamlUiaTextRange::CompareEndpoints(Windows::UI::Xaml::Automation::Text::TextPatternRangeEndpoint endpoint,
Windows::UI::Xaml::Automation::Provider::ITextRangeProvider pTargetRange,
Windows::UI::Xaml::Automation::Text::TextPatternRangeEndpoint targetEndpoint)
int32_t XamlUiaTextRange::CompareEndpoints(XamlAutomation::TextPatternRangeEndpoint endpoint,
XamlAutomation::ITextRangeProvider pTargetRange,
XamlAutomation::TextPatternRangeEndpoint targetEndpoint)
{
auto self = winrt::get_self<XamlUiaTextRange>(pTargetRange);

Expand All @@ -35,22 +52,23 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
return returnVal;
}

void XamlUiaTextRange::ExpandToEnclosingUnit(Windows::UI::Xaml::Automation::Text::TextUnit unit) const
void XamlUiaTextRange::ExpandToEnclosingUnit(XamlAutomation::TextUnit unit) const
{
THROW_IF_FAILED(_uiaProvider->ExpandToEnclosingUnit(static_cast<::TextUnit>(unit)));
THROW_IF_FAILED(_uiaProvider->ExpandToEnclosingUnit(static_cast<UIA::TextUnit>(unit)));
}

Windows::UI::Xaml::Automation::Provider::ITextRangeProvider XamlUiaTextRange::FindAttribute(int32_t textAttributeId,
winrt::Windows::Foundation::IInspectable val,
bool searchBackward)
XamlAutomation::ITextRangeProvider XamlUiaTextRange::FindAttribute(int32_t textAttributeId,
winrt::Windows::Foundation::IInspectable val,
bool searchBackward)
{
// TODO GitHub #2161: potential accessibility improvement
// we don't support this currently
return nullptr;
}

Windows::UI::Xaml::Automation::Provider::ITextRangeProvider XamlUiaTextRange::FindText(winrt::hstring text,
bool searchBackward,
bool ignoreCase)
XamlAutomation::ITextRangeProvider XamlUiaTextRange::FindText(winrt::hstring text,
bool searchBackward,
bool ignoreCase)
{
// TODO GitHub #605: Search functionality
// we need to wrap this around the UiaTextRange FindText() function
Expand Down Expand Up @@ -104,7 +122,7 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
}
}

Windows::UI::Xaml::Automation::Provider::IRawElementProviderSimple XamlUiaTextRange::GetEnclosingElement()
XamlAutomation::IRawElementProviderSimple XamlUiaTextRange::GetEnclosingElement()
{
return _parentProvider;
}
Expand All @@ -116,36 +134,36 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
return winrt::to_hstring(returnVal);
}

int32_t XamlUiaTextRange::Move(Windows::UI::Xaml::Automation::Text::TextUnit unit,
int32_t XamlUiaTextRange::Move(XamlAutomation::TextUnit unit,
int32_t count)
{
int returnVal;
_uiaProvider->Move(static_cast<::TextUnit>(unit),
_uiaProvider->Move(static_cast<UIA::TextUnit>(unit),
count,
&returnVal);
return returnVal;
}

int32_t XamlUiaTextRange::MoveEndpointByUnit(Windows::UI::Xaml::Automation::Text::TextPatternRangeEndpoint endpoint,
Windows::UI::Xaml::Automation::Text::TextUnit unit,
int32_t XamlUiaTextRange::MoveEndpointByUnit(XamlAutomation::TextPatternRangeEndpoint endpoint,
XamlAutomation::TextUnit unit,
int32_t count) const
{
int returnVal;
_uiaProvider->MoveEndpointByUnit(static_cast<::TextPatternRangeEndpoint>(endpoint),
static_cast<::TextUnit>(unit),
_uiaProvider->MoveEndpointByUnit(static_cast<UIA::TextPatternRangeEndpoint>(endpoint),
static_cast<UIA::TextUnit>(unit),
count,
&returnVal);
return returnVal;
}

void XamlUiaTextRange::MoveEndpointByRange(Windows::UI::Xaml::Automation::Text::TextPatternRangeEndpoint endpoint,
Windows::UI::Xaml::Automation::Provider::ITextRangeProvider pTargetRange,
Windows::UI::Xaml::Automation::Text::TextPatternRangeEndpoint targetEndpoint) const
void XamlUiaTextRange::MoveEndpointByRange(XamlAutomation::TextPatternRangeEndpoint endpoint,
XamlAutomation::ITextRangeProvider pTargetRange,
XamlAutomation::TextPatternRangeEndpoint targetEndpoint) const
{
auto self = winrt::get_self<XamlUiaTextRange>(pTargetRange);
_uiaProvider->MoveEndpointByRange(static_cast<::TextPatternRangeEndpoint>(endpoint),
_uiaProvider->MoveEndpointByRange(static_cast<UIA::TextPatternRangeEndpoint>(endpoint),
/*pTargetRange*/ self->_uiaProvider.get(),
static_cast<::TextPatternRangeEndpoint>(targetEndpoint));
static_cast<UIA::TextPatternRangeEndpoint>(targetEndpoint));
}

void XamlUiaTextRange::Select() const
Expand All @@ -168,7 +186,7 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
THROW_IF_FAILED(_uiaProvider->ScrollIntoView(alignToTop));
}

winrt::com_array<Windows::UI::Xaml::Automation::Provider::IRawElementProviderSimple> XamlUiaTextRange::GetChildren() const
winrt::com_array<XamlAutomation::IRawElementProviderSimple> XamlUiaTextRange::GetChildren() const
{
// we don't have any children
return {};
Expand Down
4 changes: 2 additions & 2 deletions src/cascadia/TerminalControl/XamlUiaTextRange.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ Author(s):

#include "TermControlAutomationPeer.h"
#include <UIAutomationCore.h>
#include <winrt/Windows.UI.Xaml.h>
#include "../types/UiaTextRange.hpp"

namespace winrt::Microsoft::Terminal::TerminalControl::implementation
Expand All @@ -37,7 +36,7 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
_uiaProvider.attach(uiaProvider);
}

// ITextRangeProvider
#pragma region ITextRangeProvider
Windows::UI::Xaml::Automation::Provider::ITextRangeProvider Clone() const;
bool Compare(Windows::UI::Xaml::Automation::Provider::ITextRangeProvider pRange) const;
int32_t CompareEndpoints(Windows::UI::Xaml::Automation::Text::TextPatternRangeEndpoint endpoint,
Expand Down Expand Up @@ -67,6 +66,7 @@ namespace winrt::Microsoft::Terminal::TerminalControl::implementation
void RemoveFromSelection() const;
void ScrollIntoView(bool alignToTop) const;
winrt::com_array<Windows::UI::Xaml::Automation::Provider::IRawElementProviderSimple> GetChildren() const;
#pragma endregion ITextRangeProvider

private:
wil::com_ptr<::ITextRangeProvider> _uiaProvider;
Expand Down
2 changes: 2 additions & 0 deletions src/cascadia/TerminalControl/pch.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
#include <winrt/Windows.Foundation.Collections.h>
#include <winrt/windows.ui.core.h>
#include <winrt/Windows.ui.input.h>
#include <winrt/Windows.UI.Xaml.h>
#include <winrt/Windows.UI.Xaml.Automation.Peers.h>
#include <winrt/Windows.UI.Xaml.Controls.h>
#include <winrt/Windows.UI.Xaml.Controls.Primitives.h>
#include <winrt/Windows.ui.xaml.media.h>
Expand Down
2 changes: 1 addition & 1 deletion src/cascadia/WindowsTerminal/BaseWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ class BaseWindow
RECT rc = { 0 };
::GetWindowRect(_window.get(), &rc);
return rc;
};
}

HWND GetHandle() const noexcept
{
Expand Down
Loading

0 comments on commit 573fcdb

Please sign in to comment.