@@ -104,20 +104,29 @@ Page PageManager::Get(const til::CoordType pageNumber) const
104
104
{
105
105
const auto requestedPageNumber = std::min (std::max (pageNumber, 1 ), MAX_PAGES);
106
106
auto [visibleBuffer, visibleViewport, isMainBuffer] = _api.GetBufferAndViewport ();
107
+
108
+ // If we're not in the main buffer (either because an app has enabled the
109
+ // alternate buffer mode, or switched the conhost screen buffer), then VT
110
+ // paging doesn't apply, so we disregard the requested page number and just
111
+ // use the visible buffer (with a fixed page number of 1).
107
112
if (!isMainBuffer)
108
113
{
109
114
return { visibleBuffer, visibleViewport, 1 };
110
115
}
111
- else if (requestedPageNumber == _visiblePageNumber)
116
+
117
+ // If the requested page number happens to be the visible page, then we
118
+ // can also just use the visible buffer as is.
119
+ if (requestedPageNumber == _visiblePageNumber)
112
120
{
113
121
return { visibleBuffer, visibleViewport, _visiblePageNumber };
114
122
}
115
- else
116
- {
117
- const auto pageSize = visibleViewport.size ();
118
- auto & pageBuffer = _getBuffer (requestedPageNumber, pageSize);
119
- return { pageBuffer, til::rect{ pageSize }, requestedPageNumber };
120
- }
123
+
124
+ // Otherwise we're working with a background buffer, so we need to
125
+ // retrieve that from the buffer array, and resize it to match the
126
+ // active page size.
127
+ const auto pageSize = visibleViewport.size ();
128
+ auto & pageBuffer = _getBuffer (requestedPageNumber, pageSize);
129
+ return { pageBuffer, til::rect{ pageSize }, requestedPageNumber };
121
130
}
122
131
123
132
Page PageManager::ActivePage () const
0 commit comments