mirror of
https://github.com/wavetermdev/xterm.js.git
synced 2026-08-05 13:43:48 -07:00
Fix glyphs getting clipped on bottom row
This commit is contained in:
@@ -614,27 +614,32 @@ export class TextureAtlas implements ITextureAtlas {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: This algorithm could be simplified:
|
||||||
|
// - Search for the page with ROW_PIXEL_THRESHOLD in mind
|
||||||
|
// - Keep track of current/fixed rows in a Map
|
||||||
|
|
||||||
// Replace the best current row with a fixed row if there is one at least as good as the
|
// Replace the best current row with a fixed row if there is one at least as good as the
|
||||||
// current row
|
// current row. Search in reverse to prioritize filling in older pages.
|
||||||
for (const p of this._activePages) {
|
for (let i = this._activePages.length - 1; i >= 0; i--) {
|
||||||
for (const row of p.fixedRows) {
|
for (const row of this._activePages[i].fixedRows) {
|
||||||
if (row.height <= activeRow.height && rasterizedGlyph.size.y <= row.height) {
|
if (row.height <= activeRow.height && rasterizedGlyph.size.y <= row.height) {
|
||||||
activePage = p;
|
activePage = this._activePages[i];
|
||||||
activeRow = row;
|
activeRow = row;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a new one if too much vertical space would be wasted, fixing the previously active
|
// Create a new one if too much vertical space would be wasted or there is not enough room
|
||||||
// row in the process as it now has a fixed height
|
// left in the page. The previous active row will become fixed in the process as it now has a
|
||||||
if (activeRow.height > rasterizedGlyph.size.y + Constants.ROW_PIXEL_THRESHOLD) {
|
// fixed height
|
||||||
|
if (activeRow.y + rasterizedGlyph.size.y >= activePage.canvas.height || activeRow.height > rasterizedGlyph.size.y + Constants.ROW_PIXEL_THRESHOLD) {
|
||||||
// Create the new fixed height row, creating a new page if there isn't enough room on the
|
// Create the new fixed height row, creating a new page if there isn't enough room on the
|
||||||
// current page
|
// current page
|
||||||
if (activePage.currentRow.y + activePage.currentRow.height + rasterizedGlyph.size.y > activePage.canvas.height) {
|
if (activePage.currentRow.y + activePage.currentRow.height + rasterizedGlyph.size.y >= activePage.canvas.height) {
|
||||||
// Find the first page with room to create the new row on
|
// Find the first page with room to create the new row on
|
||||||
let candidatePage: AtlasPage | undefined;
|
let candidatePage: AtlasPage | undefined;
|
||||||
for (const p of this._activePages) {
|
for (const p of this._activePages) {
|
||||||
if (p.currentRow.y + p.currentRow.height + rasterizedGlyph.size.y <= p.canvas.height) {
|
if (p.currentRow.y + p.currentRow.height + rasterizedGlyph.size.y < p.canvas.height) {
|
||||||
candidatePage = p;
|
candidatePage = p;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user