Skip to content

Commit 75e4f06

Browse files
committed
Improve Viewport and Viewport::WalkInBounds
1 parent 41bb28c commit 75e4f06

File tree

18 files changed

+56
-563
lines changed

18 files changed

+56
-563
lines changed

src/buffer/out/textBuffer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -992,7 +992,7 @@ const til::CoordType TextBuffer::GetFirstRowIndex() const noexcept
992992

993993
const Viewport TextBuffer::GetSize() const noexcept
994994
{
995-
return Viewport::FromDimensions({ _width, _height });
995+
return Viewport::FromDimensions({}, { _width, _height });
996996
}
997997

998998
void TextBuffer::_SetFirstRowIndex(const til::CoordType FirstRowIndex) noexcept
@@ -1567,7 +1567,7 @@ til::point TextBuffer::_GetWordEndForSelection(const til::point target, const st
15671567
{
15681568
break;
15691569
}
1570-
bufferSize.IncrementInBoundsCircular(result);
1570+
bufferSize.IncrementInBounds(result);
15711571
}
15721572

15731573
if (_GetDelimiterClassAt(result, wordDelimiters) != initialDelimiter)

src/cascadia/TerminalControl/HwndTerminal.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ HRESULT HwndTerminal::Refresh(const til::size windowSize, _Out_ til::size* dimen
356356
_renderer->TriggerRedrawAll();
357357

358358
// Convert our new dimensions to characters
359-
const auto viewInPixels = Viewport::FromDimensions(windowSize);
359+
const auto viewInPixels = Viewport::FromDimensions({}, windowSize);
360360
const auto vp = _renderEngine->GetViewportInCharacters(viewInPixels);
361361

362362
// Guard against resizing the window to 0 columns/rows, which the text buffer classes don't really support.
@@ -464,7 +464,7 @@ try
464464

465465
Viewport viewInPixels;
466466
{
467-
const auto viewInCharacters = Viewport::FromDimensions(dimensionsInCharacters);
467+
const auto viewInCharacters = Viewport::FromDimensions({}, dimensionsInCharacters);
468468
const auto lock = publicTerminal->_terminal->LockForReading();
469469
viewInPixels = publicTerminal->_renderEngine->GetViewportInPixels(viewInCharacters);
470470
}
@@ -491,7 +491,7 @@ try
491491
{
492492
const auto publicTerminal = static_cast<const HwndTerminal*>(terminal);
493493

494-
const auto viewInPixels = Viewport::FromDimensions({ width, height });
494+
const auto viewInPixels = Viewport::FromDimensions({}, { width, height });
495495
const auto lock = publicTerminal->_terminal->LockForReading();
496496
const auto viewInCharacters = publicTerminal->_renderEngine->GetViewportInCharacters(viewInPixels);
497497

src/cascadia/TerminalCore/Terminal.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -964,7 +964,7 @@ Viewport Terminal::_GetMutableViewport() const noexcept
964964
// GH#3493: if we're in the alt buffer, then it's possible that the mutable
965965
// viewport's size hasn't been updated yet. In that case, use the
966966
// temporarily stashed _altBufferSize instead.
967-
return _inAltBuffer() ? Viewport::FromDimensions(_altBufferSize) :
967+
return _inAltBuffer() ? Viewport::FromDimensions({}, _altBufferSize) :
968968
_mutableViewport;
969969
}
970970

src/cascadia/TerminalCore/TerminalSelection.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@ void Terminal::SelectHyperlink(const SearchDirection dir)
495495
searchEnd = { bufferSize.RightInclusive(), searchStart.y - 1 };
496496
searchStart = { bufferSize.Left(), std::max(searchStart.y - viewportHeight, bufferSize.Top()) };
497497
}
498-
searchArea = Viewport::FromDimensions(searchStart, searchEnd.x + 1, searchEnd.y + 1);
498+
searchArea = Viewport::FromDimensions(searchStart, { searchEnd.x + 1, searchEnd.y + 1 });
499499

500500
const til::point bufferStart{ bufferSize.Origin() };
501501
const til::point bufferEnd{ bufferSize.RightInclusive(), ViewEndIndex() };
@@ -516,7 +516,7 @@ void Terminal::SelectHyperlink(const SearchDirection dir)
516516
searchEnd.y -= 1;
517517
searchStart.y = std::max(searchEnd.y - viewportHeight, bufferSize.Top());
518518
}
519-
searchArea = Viewport::FromDimensions(searchStart, searchEnd.x + 1, searchEnd.y + 1);
519+
searchArea = Viewport::FromDimensions(searchStart, { searchEnd.x + 1, searchEnd.y + 1 });
520520
}
521521
}
522522

src/cascadia/UnitTests_TerminalCore/ConptyRoundtripTests.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4852,13 +4852,7 @@ void ConptyRoundtripTests::ReflowPromptRegions()
48524852
til::point afterPos = originalPos;
48534853
// walk that original pos dx times into the actual real place in the buffer.
48544854
auto bufferViewport = tb.GetSize();
4855-
const auto walkDir = Viewport::WalkDir{ dx < 0 ? Viewport::XWalk::LeftToRight : Viewport::XWalk::RightToLeft,
4856-
dx < 0 ? Viewport::YWalk::TopToBottom : Viewport::YWalk::BottomToTop };
4857-
for (auto i = 0; i < std::abs(dx); i++)
4858-
{
4859-
bufferViewport.WalkInBounds(afterPos,
4860-
walkDir);
4861-
}
4855+
bufferViewport.WalkInBounds(afterPos, dx);
48624856
const auto expectedOutputStart = !afterResize ?
48634857
originalPos : // printed exactly a row, so we're exactly below the prompt
48644858
afterPos;

src/host/VtIo.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,7 @@ VtIo::VtIo() :
150150

151151
if (IsValidHandle(_hOutput.get()))
152152
{
153-
auto initialViewport = Viewport::FromDimensions({ 0, 0 },
154-
gci.GetWindowSize().width,
155-
gci.GetWindowSize().height);
153+
auto initialViewport = Viewport::FromDimensions({ 0, 0 }, gci.GetWindowSize());
156154
switch (_IoMode)
157155
{
158156
case VtIoMode::XTERM_256:

src/host/_output.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ void WriteToScreen(SCREEN_INFORMATION& screenInfo, const Viewport& region)
223223
{
224224
// Notify accessibility
225225
auto endingCoordinate = startingCoordinate;
226-
bufferSize.MoveInBounds(cellsModifiedCoord, endingCoordinate);
226+
bufferSize.WalkInBounds(endingCoordinate, cellsModifiedCoord);
227227
screenBuffer.NotifyAccessibilityEventing(startingCoordinate.x, startingCoordinate.y, endingCoordinate.x, endingCoordinate.y);
228228
}
229229
}
@@ -287,7 +287,7 @@ void WriteToScreen(SCREEN_INFORMATION& screenInfo, const Viewport& region)
287287
if (screenInfo.HasAccessibilityEventing())
288288
{
289289
auto endingCoordinate = startingCoordinate;
290-
bufferSize.MoveInBounds(cellsModifiedCoord, endingCoordinate);
290+
bufferSize.WalkInBounds(endingCoordinate, cellsModifiedCoord);
291291
screenInfo.NotifyAccessibilityEventing(startingCoordinate.x, startingCoordinate.y, endingCoordinate.x, endingCoordinate.y);
292292
}
293293

src/host/outputStream.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ bool ConhostInternalGetSet::ResizeWindow(const til::CoordType sColumns, const ti
330330
api->GetConsoleScreenBufferInfoExImpl(screenInfo, csbiex);
331331

332332
const auto oldViewport = screenInfo.GetVirtualViewport();
333-
auto newViewport = Viewport::FromDimensions(oldViewport.Origin(), sColumns, sRows);
333+
auto newViewport = Viewport::FromDimensions(oldViewport.Origin(), { sColumns, sRows });
334334
// Always resize the width of the console
335335
csbiex.dwSize.X = gsl::narrow_cast<short>(sColumns);
336336
// Only set the screen buffer's height if it's currently less than

src/host/screenInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ Viewport SCREEN_INFORMATION::GetTerminalBufferSize() const
163163
auto v = _textBuffer->GetSize();
164164
if (gci.IsTerminalScrolling() && v.Height() > _virtualBottom)
165165
{
166-
v = Viewport::FromDimensions({ 0, 0 }, v.Width(), _virtualBottom + 1);
166+
v = Viewport::FromDimensions({}, { v.Width(), _virtualBottom + 1 });
167167
}
168168
return v;
169169
}

src/host/selectionInput.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -955,7 +955,7 @@ bool Selection::_HandleMarkModeSelectionNav(const INPUT_KEY_INFO* const pInputKe
955955
if (pcoordInputEnd != nullptr)
956956
{
957957
// - 1 so the coordinate is on top of the last position of the text, not one past it.
958-
gci.GetActiveOutputBuffer().GetBufferSize().MoveInBounds(-1, boundaries.end);
958+
gci.GetActiveOutputBuffer().GetBufferSize().WalkInBounds(boundaries.end, -1);
959959
*pcoordInputEnd = boundaries.end;
960960
}
961961
return true;

0 commit comments

Comments
 (0)