From 0514b559361f5b79339636ad716f5464da9282b6 Mon Sep 17 00:00:00 2001
From: Daniel Imms <2193314+Tyriar@users.noreply.github.com>
Date: Sat, 30 Jul 2022 23:16:47 -0700
Subject: [PATCH 1/4] Fix default underline color
Fixes #3971
---
src/common/buffer/AttributeData.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/common/buffer/AttributeData.ts b/src/common/buffer/AttributeData.ts
index 6878069a..b51f7ecb 100644
--- a/src/common/buffer/AttributeData.ts
+++ b/src/common/buffer/AttributeData.ts
@@ -149,7 +149,7 @@ export class ExtendedAttrs implements IExtendedAttrs {
constructor(
underlineStyle: UnderlineStyle = UnderlineStyle.NONE,
- underlineColor: number = -1
+ underlineColor: number = Attributes.CM_DEFAULT
) {
this.underlineStyle = underlineStyle;
this.underlineColor = underlineColor;
From 686105942c98c1fcd7fed7c76a9c74b96cd18a25 Mon Sep 17 00:00:00 2001
From: Daniel Imms <2193314+Tyriar@users.noreply.github.com>
Date: Sat, 30 Jul 2022 23:25:18 -0700
Subject: [PATCH 2/4] Reduce line width of webgl underline
---
addons/xterm-addon-webgl/src/atlas/WebglCharAtlas.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/addons/xterm-addon-webgl/src/atlas/WebglCharAtlas.ts b/addons/xterm-addon-webgl/src/atlas/WebglCharAtlas.ts
index 008e65a8..6ec81ce6 100644
--- a/addons/xterm-addon-webgl/src/atlas/WebglCharAtlas.ts
+++ b/addons/xterm-addon-webgl/src/atlas/WebglCharAtlas.ts
@@ -438,8 +438,8 @@ export class WebglCharAtlas implements IDisposable {
// Draw underline
if (underline) {
this._tmpCtx.save();
- const lineWidth = Math.max(1, Math.floor(this._config.fontSize * window.devicePixelRatio / 10));
- const yOffset = this._tmpCtx.lineWidth % 2 === 1 ? 0.5 : 0; // When the width is odd, draw at 0.5 position
+ const lineWidth = Math.max(1, Math.floor(this._config.fontSize * window.devicePixelRatio / 15));
+ const yOffset = lineWidth % 2 === 1 ? 0.5 : 0; // When the width is odd, draw at 0.5 position
this._tmpCtx.lineWidth = lineWidth;
// Underline color
From f4618b229f151d551f63ddbdfa61cfa9e9a48209 Mon Sep 17 00:00:00 2001
From: Daniel Imms <2193314+Tyriar@users.noreply.github.com>
Date: Sat, 30 Jul 2022 23:30:52 -0700
Subject: [PATCH 3/4] Bring underlines closer to characters
---
.../src/atlas/WebglCharAtlas.ts | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/addons/xterm-addon-webgl/src/atlas/WebglCharAtlas.ts b/addons/xterm-addon-webgl/src/atlas/WebglCharAtlas.ts
index 6ec81ce6..c5069e64 100644
--- a/addons/xterm-addon-webgl/src/atlas/WebglCharAtlas.ts
+++ b/addons/xterm-addon-webgl/src/atlas/WebglCharAtlas.ts
@@ -439,7 +439,9 @@ export class WebglCharAtlas implements IDisposable {
if (underline) {
this._tmpCtx.save();
const lineWidth = Math.max(1, Math.floor(this._config.fontSize * window.devicePixelRatio / 15));
- const yOffset = lineWidth % 2 === 1 ? 0.5 : 0; // When the width is odd, draw at 0.5 position
+ // When the width is odd, draw at 0.5 position. Offset by an additional 1 dpr to bring the
+ // underline closer to the character
+ const yOffset = (lineWidth % 2 === 1 ? 0.5 : 0) + window.devicePixelRatio;
this._tmpCtx.lineWidth = lineWidth;
// Underline color
@@ -508,18 +510,18 @@ export class WebglCharAtlas implements IDisposable {
break;
case UnderlineStyle.DOTTED:
this._tmpCtx.setLineDash([window.devicePixelRatio * 2, window.devicePixelRatio]);
- this._tmpCtx.moveTo(xLeft, yMid);
- this._tmpCtx.lineTo(xRight, yMid);
+ this._tmpCtx.moveTo(xLeft, yTop);
+ this._tmpCtx.lineTo(xRight, yTop);
break;
case UnderlineStyle.DASHED:
this._tmpCtx.setLineDash([window.devicePixelRatio * 4, window.devicePixelRatio * 3]);
- this._tmpCtx.moveTo(xLeft, yMid);
- this._tmpCtx.lineTo(xRight, yMid);
+ this._tmpCtx.moveTo(xLeft, yTop);
+ this._tmpCtx.lineTo(xRight, yTop);
break;
case UnderlineStyle.SINGLE:
default:
- this._tmpCtx.moveTo(xLeft, yMid);
- this._tmpCtx.lineTo(xRight, yMid);
+ this._tmpCtx.moveTo(xLeft, yTop);
+ this._tmpCtx.lineTo(xRight, yTop);
break;
}
this._tmpCtx.stroke();
From bff529e1e2d1840d3f4dfc1d5bc0dcca899a5da6 Mon Sep 17 00:00:00 2001
From: Daniel Imms <2193314+Tyriar@users.noreply.github.com>
Date: Sat, 30 Jul 2022 23:41:08 -0700
Subject: [PATCH 4/4] Simplify dom tests and fix assertion
---
src/browser/renderer/dom/DomRendererRowFactory.test.ts | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/browser/renderer/dom/DomRendererRowFactory.test.ts b/src/browser/renderer/dom/DomRendererRowFactory.test.ts
index df359dac..776ff701 100644
--- a/src/browser/renderer/dom/DomRendererRowFactory.test.ts
+++ b/src/browser/renderer/dom/DomRendererRowFactory.test.ts
@@ -139,7 +139,7 @@ describe('DomRendererRowFactory', () => {
lineData.setCell(0, cell);
const fragment = rowFactory.createRow(lineData, 0, false, undefined, 0, false, 5, 20);
assert.equal(getFragmentHtml(fragment),
- 'a'
+ 'a'
);
});
it('should add class for double underline style', () => {
@@ -150,7 +150,7 @@ describe('DomRendererRowFactory', () => {
lineData.setCell(0, cell);
const fragment = rowFactory.createRow(lineData, 0, false, undefined, 0, false, 5, 20);
assert.equal(getFragmentHtml(fragment),
- 'a'
+ 'a'
);
});
it('should add class for curly underline style', () => {
@@ -161,7 +161,7 @@ describe('DomRendererRowFactory', () => {
lineData.setCell(0, cell);
const fragment = rowFactory.createRow(lineData, 0, false, undefined, 0, false, 5, 20);
assert.equal(getFragmentHtml(fragment),
- 'a'
+ 'a'
);
});
it('should add class for double dotted style', () => {
@@ -172,7 +172,7 @@ describe('DomRendererRowFactory', () => {
lineData.setCell(0, cell);
const fragment = rowFactory.createRow(lineData, 0, false, undefined, 0, false, 5, 20);
assert.equal(getFragmentHtml(fragment),
- 'a'
+ 'a'
);
});
it('should add class for dashed underline style', () => {
@@ -183,7 +183,7 @@ describe('DomRendererRowFactory', () => {
lineData.setCell(0, cell);
const fragment = rowFactory.createRow(lineData, 0, false, undefined, 0, false, 5, 20);
assert.equal(getFragmentHtml(fragment),
- 'a'
+ 'a'
);
});
});