terminal/tools/ConsoleTypes.natvis
Leonard Hecker b3fab518f8
Prepare til wrappers for migrating off of SMALL_RECT (#11902)
This commit makes the following changes to `til::point/size/rectangle`
for the following reasons:
* Rename `rectangle` into `rect`
  This will make the naming consistent with a later `small_rect` struct
  as well as the existing Win32 POINT/SIZE/RECT structs.
* Standardizes til wrappers on `int32_t` instead of `ptrdiff_t`
  Provides a consistent behavior between x86 and x64, preventing accidental
  errors on x86, as it's less rigorously tested than x64. Additionally it
  improves interop with MIDL3 which only supports fixed width integer types.
* Standardizes til wrappers on throwing `gsl::narrow_error`
  Makes the behavior of our code more consistent.
* Makes all eligible functions `constexpr`
  Because why not.
* Removes implicit constructors and conversion operators
  This is a complex and controversial topic. My reasons are: You can't Ctrl+F
  for an implicit conversion. This breaks most non-IDE engines, like the one on
  GitHub or those we have internally at MS. This is important for me as these
  implicit conversion operators aren't cost free. Narrowing integers itself,
  as well as the boundary checks that need to be done have a certain,
  fixed overhead each time. Additionally the lack of noexcept prevents
  many advanced compiler optimizations. Removing their use entirely
  drops conhost's code segment size by around ~6.5%.

## References

Preliminary work for #4015.

## PR Checklist
* [x] I work here
* [x] Tests added/passed

## Validation Steps Performed
I'm mostly relying on our unit tests here. Both OpenConsole and WT appear to work fine.
2022-01-13 21:09:29 +00:00

118 lines
5.0 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<!-- See https://docs.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects?view=vs-2017#BKMK_Syntax_reference for documentation -->
<Type Name="TextColor">
<DisplayString Condition="_meta==ColorType::IsIndex256">{{Index256:{_index}}}</DisplayString>
<DisplayString Condition="_meta==ColorType::IsIndex16">{{Index16:{_index}}}</DisplayString>
<DisplayString Condition="_meta==ColorType::IsDefault">{{Default}}</DisplayString>
<DisplayString Condition="_meta==ColorType::IsRgb">{{RGB:{_red},{_green},{_blue}}}</DisplayString>
<Expand></Expand>
</Type>
<Type Name="TextAttribute">
<!-- You can't do too much trickiness inside the DisplayString format
string, so we'd have to add entries for each flag if we really
wanted them to show up like that. -->
<DisplayString>{{FG: {_foreground}, BG: {_background}, Legacy: {_wAttrLegacy}, {_extendedAttrs}}</DisplayString>
<Expand>
<Item Name="Legacy">_wAttrLegacy</Item>
<Item Name="FG">_foreground</Item>
<Item Name="BG">_background</Item>
<Item Name="Extended">_extendedAttrs</Item>
</Expand>
</Type>
<Type Name="Microsoft::Console::Types::Viewport">
<!-- Can't call functions in here -->
<DisplayString>{{LT({_sr.Left}, {_sr.Top}) RB({_sr.Right}, {_sr.Bottom}) [{_sr.Right-_sr.Left+1} x { _sr.Bottom-_sr.Top+1}]}}</DisplayString>
<Expand>
<ExpandedItem>_sr</ExpandedItem>
</Expand>
</Type>
<Type Name="_COORD">
<DisplayString>{{{X},{Y}}}</DisplayString>
</Type>
<Type Name="_SMALL_RECT">
<DisplayString>{{LT({Left}, {Top}) RB({Right}, {Bottom}) In:[{Right-Left+1} x {Bottom-Top+1}] Ex:[{Right-Left} x {Bottom-Top}]}}</DisplayString>
</Type>
<Type Name="CharRowCell">
<DisplayString Condition="_attr._glyphStored">Stored Glyph, go to UnicodeStorage.</DisplayString>
<DisplayString Condition="_attr._attribute == 0">{_wch,X} Single</DisplayString>
<DisplayString Condition="_attr._attribute == 1">{_wch,X} Lead</DisplayString>
<DisplayString Condition="_attr._attribute == 2">{_wch,X} Trail</DisplayString>
</Type>
<Type Name="ATTR_ROW">
<Expand>
<ExpandedItem>_data</ExpandedItem>
</Expand>
</Type>
<Type Name="CharRow">
<DisplayString>{{ wrap={_wrapForced} padded={_doubleBytePadded} }}</DisplayString>
<Expand>
<ExpandedItem>_data</ExpandedItem>
</Expand>
</Type>
<Type Name="ROW">
<DisplayString>{{ id={_id} width={_rowWidth} }}</DisplayString>
<Expand>
<Item Name="_charRow">_charRow</Item>
<Item Name="_attrRow">_attrRow</Item>
</Expand>
</Type>
<Type Name="std::unique_ptr&lt;TextBuffer,std::default_delete&lt;TextBuffer&gt;&gt;">
<Expand>
<ExpandedItem>_Mypair._Myval2</ExpandedItem>
</Expand>
</Type>
<Type Name="KeyEvent">
<DisplayString Condition="_keyDown">{{↓ wch:{_charData} mod:{_activeModifierKeys} repeat:{_repeatCount} vk:{_virtualKeyCode} vsc:{_virtualScanCode}}</DisplayString>
<DisplayString Condition="!_keyDown">{{↑ wch:{_charData} mod:{_activeModifierKeys} repeat:{_repeatCount} vk:{_virtualKeyCode} vsc:{_virtualScanCode}}</DisplayString>
</Type>
<Type Name="til::size">
<DisplayString>{{W: {_width,d} x H: {_height,d} -> A: {_width * _height, d}}}</DisplayString>
</Type>
<Type Name="til::point">
<DisplayString>{{X: {_x,d}, Y: {_y,d}}}</DisplayString>
</Type>
<Type Name="til::rect">
<DisplayString>{{L: {_topLeft._x}, T: {_topLeft._y}, R: {_bottomRight._x} B: {_bottomRight._y} [W: {_bottomRight._x - _topLeft._x} x H: {_bottomRight._y - _topLeft._y} -> A: {(_bottomRight._x - _topLeft._x) * (_bottomRight._y - _topLeft._y)}]}}</DisplayString>
</Type>
<Type Name="til::color">
<DisplayString>{{RGB: {(int)r,d}, {(int)g,d}, {(int)b,d}; α: {(int)a,d}}}</DisplayString>
</Type>
<Type Name="til::rle&lt;*&gt;">
<DisplayString>{{Size: {_total_length,d}}}</DisplayString>
<Expand>
<Item Name="[size]">_total_length</Item>
<ExpandedItem>_runs</ExpandedItem>
</Expand>
</Type>
<Type Name="til::details::rle_const_iterator&lt;*&gt;">
<DisplayString>{{run of {_it->first,d} for {_it->second,d} at {_usage,d}}}</DisplayString>
</Type>
<Type Name="boost::container::small_vector&lt;*&gt;">
<Expand>
<Item Name="[size]">m_holder.m_size</Item>
<ArrayItems>
<Size>m_holder.m_size</Size>
<ValuePointer>m_holder.m_start</ValuePointer>
</ArrayItems>
</Expand>
</Type>
</AutoVisualizer>