mirror of
https://github.com/microsoft/terminal.git
synced 2025-12-11 04:38:24 -06:00
This commit fixes a number of issues around horizontal scrolling. DxEngine only had one bug, where the clip rect would cause any content outside of the actual viewport to be invisible. AtlasEngine had more bugs, mostly around the conversion from textbuffer-relative coordinates to viewport-relative coordinates, since AtlasEngine stores things like the cursor position, attributes, etc., relative to the viewport. It also renames `cellCount` to `viewportCellCount`, because I realized that it might have to deal with a `textBufferCellCount` or similar in the future. I hope that the new name is more descriptive of what it refers to. Future improvements to AtlasEngine in particular would be to not copy the entire `Settings` struct every time the horizontal scroll offset changes, and to trim trailing whitespace before shaping text. This is in preparation for #1860 ## Validation Steps Performed * Patch `RenderingTests` to run in the main (and not alt) buffer * Horizontal scrolling of line renditions and attributes works ✅ * Selection retains its position (mostly) ✅
164 lines
6.9 KiB
XML
164 lines
6.9 KiB
XML
|
||
<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">
|
||
<DisplayString Condition="_hyperlinkId == 0">{{FG: {_foreground}, BG: {_background}, Attr: {_attrs}}</DisplayString>
|
||
<DisplayString Condition="_hyperlinkId != 0">{{FG: {_foreground}, BG: {_background}, Attr: {_attrs}, Hyperlink: {_hyperlinkId}}</DisplayString>
|
||
</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="ROW">
|
||
<DisplayString>{_chars.data(),[_charOffsets[_columnCount]]}</DisplayString>
|
||
<StringView>_chars.data(),[_charOffsets[_columnCount]]</StringView>
|
||
<Expand>
|
||
<Item Name="_chars">_chars.data(),[_charOffsets[_columnCount]]</Item>
|
||
<Item Name="_charOffsets">_charOffsets.data(),[_charOffsets.size()]</Item>
|
||
</Expand>
|
||
</Type>
|
||
|
||
<Type Name="std::unique_ptr<TextBuffer,std::default_delete<TextBuffer>>">
|
||
<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} x H: {height} -> A: {width * height}}}</DisplayString>
|
||
</Type>
|
||
|
||
<Type Name="til::point">
|
||
<DisplayString>{{X: {x}, Y: {y}}}</DisplayString>
|
||
</Type>
|
||
|
||
<Type Name="til::rect">
|
||
<DisplayString>{{L: {left}, T: {top}, R: {right} B: {bottom} [W: {right - left} x H: {bottom - top} -> A: {(right - left) * (bottom - top)}]}}</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<*>">
|
||
<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<*>">
|
||
<DisplayString>{{run of {_it->first,d} for {_it->second,d} at {_usage,d}}}</DisplayString>
|
||
</Type>
|
||
|
||
<Type Name="til::small_vector<*>">
|
||
<DisplayString>{{ size={_size} }}</DisplayString>
|
||
<Expand>
|
||
<Item Name="[capacity]" ExcludeView="simple">_capacity</Item>
|
||
<Item Name="[size]" ExcludeView="simple">_size</Item>
|
||
<ArrayItems>
|
||
<Size>_size</Size>
|
||
<ValuePointer>_data</ValuePointer>
|
||
</ArrayItems>
|
||
</Expand>
|
||
</Type>
|
||
|
||
<Type Name="til::small_vector_iterator<*>">
|
||
<AlternativeType Name="til::small_vector_const_iterator<*>" />
|
||
<SmartPointer Usage="Indexable">_ptr,na</SmartPointer>
|
||
<Expand>
|
||
<Item Name="[ptr]">_ptr</Item>
|
||
</Expand>
|
||
</Type>
|
||
|
||
<Type Name="til::generational<*>">
|
||
<AlternativeType Name="$T1" />
|
||
<SmartPointer Usage="Minimal">&_value</SmartPointer>
|
||
<DisplayString>{{ generation={_generation._value} }}</DisplayString>
|
||
</Type>
|
||
|
||
<Type Name="til::linear_flat_set<*,*>">
|
||
<DisplayString>{{ size={_load / $T2} }}</DisplayString>
|
||
<Expand>
|
||
<ArrayItems>
|
||
<Size>_capacity</Size>
|
||
<ValuePointer>_map._Mypair._Myval2</ValuePointer>
|
||
</ArrayItems>
|
||
</Expand>
|
||
</Type>
|
||
|
||
<Type Name="TextBuffer">
|
||
<DisplayString>{{ width={_width}, height={_height} }}</DisplayString>
|
||
<Expand>
|
||
<Item Name="_firstRow">_firstRow</Item>
|
||
<Item Name="scratchpad">*(ROW*)_buffer.__ptr_.__value_</Item>
|
||
<IndexListItems>
|
||
<Size>(_commitWatermark - _buffer.__ptr_.__value_ - 1) / _bufferRowStride</Size>
|
||
<ValueNode>*(ROW*)(_buffer.__ptr_.__value_ + _bufferRowStride * ($i + 1))</ValueNode>
|
||
</IndexListItems>
|
||
</Expand>
|
||
</Type>
|
||
|
||
<Type Name="Microsoft::Console::Render::Atlas::Buffer<*>">
|
||
<DisplayString>{{ size={_size} }}</DisplayString>
|
||
<Expand>
|
||
<Item Name="[size]" ExcludeView="simple">_size</Item>
|
||
<ArrayItems>
|
||
<Size>_size</Size>
|
||
<ValuePointer>_data</ValuePointer>
|
||
</ArrayItems>
|
||
</Expand>
|
||
</Type>
|
||
|
||
<Type Name="Microsoft::Console::Render::Atlas::ShapedRow">
|
||
<DisplayString>{{ dirtyTop={dirtyTop}, dirtyBottom={dirtyBottom} }}</DisplayString>
|
||
</Type>
|
||
|
||
<Type Name="Microsoft::Console::Render::Atlas::BackendD3D::AtlasGlyphEntry">
|
||
<DisplayString Condition="!_occupied">(empty)</DisplayString>
|
||
<DisplayString Condition="_occupied">{glyphIndex}</DisplayString>
|
||
</Type>
|
||
|
||
<Type Name="Microsoft::Console::Render::Atlas::BackendD3D::AtlasFontFaceEntryInner">
|
||
<DisplayString>{(void*)fontFace.m_ptr}, {lineRendition}</DisplayString>
|
||
<Expand>
|
||
<ExpandedItem>glyphs</ExpandedItem>
|
||
</Expand>
|
||
</Type>
|
||
|
||
<Type Name="Microsoft::Console::Render::Atlas::BackendD3D::AtlasFontFaceEntry">
|
||
<DisplayString Condition="!inner._Mypair._Myval2">(empty)</DisplayString>
|
||
<DisplayString Condition="inner._Mypair._Myval2">{*inner._Mypair._Myval2}</DisplayString>
|
||
<Expand>
|
||
<ExpandedItem>*inner._Mypair._Myval2</ExpandedItem>
|
||
</Expand>
|
||
</Type>
|
||
</AutoVisualizer>
|