Skip to content

Commit 5185909

Browse files
committed
Move off RGBA in base/color, as it will soon move to floats
1 parent 728507a commit 5185909

5 files changed

Lines changed: 83 additions & 24 deletions

File tree

src/vs/editor/browser/viewParts/minimap/minimap.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';
2020
import { IDisposable } from 'vs/base/common/lifecycle';
2121
import { RenderedLinesCollection, ILine } from 'vs/editor/browser/view/viewLayer';
2222
import { Range } from 'vs/editor/common/core/range';
23-
import { RGBA } from 'vs/base/common/color';
23+
import { RGBA8 } from "vs/editor/common/core/rgba";
2424
import * as viewEvents from 'vs/editor/common/view/viewEvents';
2525
import { GlobalMouseMoveMonitor, IStandardMouseMoveEventData, standardMouseMoveMerger } from 'vs/base/browser/globalMouseMoveMonitor';
2626
import * as platform from 'vs/base/common/platform';
@@ -386,7 +386,7 @@ class MinimapBuffers {
386386
private readonly _buffers: [ImageData, ImageData];
387387
private _lastUsedBuffer: number;
388388

389-
constructor(ctx: CanvasRenderingContext2D, WIDTH: number, HEIGHT: number, background: RGBA) {
389+
constructor(ctx: CanvasRenderingContext2D, WIDTH: number, HEIGHT: number, background: RGBA8) {
390390
this._backgroundFillData = MinimapBuffers._createBackgroundFillData(WIDTH, HEIGHT, background);
391391
this._buffers = [
392392
ctx.createImageData(WIDTH, HEIGHT),
@@ -406,7 +406,7 @@ class MinimapBuffers {
406406
return result;
407407
}
408408

409-
private static _createBackgroundFillData(WIDTH: number, HEIGHT: number, background: RGBA): Uint8ClampedArray {
409+
private static _createBackgroundFillData(WIDTH: number, HEIGHT: number, background: RGBA8): Uint8ClampedArray {
410410
const backgroundR = background.r;
411411
const backgroundG = background.g;
412412
const backgroundB = background.b;
@@ -830,7 +830,7 @@ export class Minimap extends ViewPart {
830830

831831
private static _renderLine(
832832
target: ImageData,
833-
backgroundColor: RGBA,
833+
backgroundColor: RGBA8,
834834
useLighterFont: boolean,
835835
renderMinimap: RenderMinimap,
836836
colorTracker: MinimapTokensColorTracker,

src/vs/editor/common/core/rgba.ts

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
'use strict';
7+
8+
/**
9+
* A very VM friendly rgba datastructure.
10+
* Please don't touch unless you take a look at the IR.
11+
*/
12+
export class RGBA8 {
13+
_rgba8Brand: void;
14+
15+
/**
16+
* Red: integer in [0-255]
17+
*/
18+
public readonly r: number;
19+
/**
20+
* Green: integer in [0-255]
21+
*/
22+
public readonly g: number;
23+
/**
24+
* Blue: integer in [0-255]
25+
*/
26+
public readonly b: number;
27+
/**
28+
* Alpha: integer in [0-255]
29+
*/
30+
public readonly a: number;
31+
32+
constructor(r: number, g: number, b: number, a: number) {
33+
this.r = RGBA8._clampInt_0_255(r);
34+
this.g = RGBA8._clampInt_0_255(g);
35+
this.b = RGBA8._clampInt_0_255(b);
36+
this.a = RGBA8._clampInt_0_255(a);
37+
}
38+
39+
public static equals(a: RGBA8, b: RGBA8): boolean {
40+
return (
41+
a.r === b.r
42+
&& a.g === b.g
43+
&& a.b === b.b
44+
&& a.a === b.a
45+
);
46+
}
47+
48+
private static _clampInt_0_255(c: number): number {
49+
if (c < 0) {
50+
return 0;
51+
}
52+
if (c > 255) {
53+
return 255;
54+
}
55+
return c | 0;
56+
}
57+
}

src/vs/editor/common/view/minimapCharRenderer.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import { ColorId, TokenizationRegistry } from 'vs/editor/common/modes';
88
import Event, { Emitter } from 'vs/base/common/event';
9-
import { RGBA } from 'vs/base/common/color';
9+
import { RGBA8 } from "vs/editor/common/core/rgba";
1010

1111
export class MinimapTokensColorTracker {
1212
private static _INSTANCE: MinimapTokensColorTracker = null;
@@ -17,7 +17,7 @@ export class MinimapTokensColorTracker {
1717
return this._INSTANCE;
1818
}
1919

20-
private _colors: RGBA[];
20+
private _colors: RGBA8[];
2121
private _backgroundIsLight: boolean;
2222

2323
private _onDidChange = new Emitter<void>();
@@ -41,14 +41,16 @@ export class MinimapTokensColorTracker {
4141
}
4242
this._colors = [null];
4343
for (let colorId = 1; colorId < colorMap.length; colorId++) {
44-
this._colors[colorId] = colorMap[colorId].rgba;
44+
const source = colorMap[colorId].rgba;
45+
// Use a VM friendly data-type
46+
this._colors[colorId] = new RGBA8(source.r, source.g, source.b, source.a);
4547
}
4648
let backgroundLuminosity = colorMap[ColorId.DefaultBackground].getRelativeLuminance();
4749
this._backgroundIsLight = (backgroundLuminosity >= 0.5);
4850
this._onDidChange.fire(void 0);
4951
}
5052

51-
public getColor(colorId: ColorId): RGBA {
53+
public getColor(colorId: ColorId): RGBA8 {
5254
if (colorId < 1 || colorId >= this._colors.length) {
5355
// background color (basically invisible)
5456
colorId = ColorId.DefaultBackground;
@@ -121,7 +123,7 @@ export class MinimapCharRenderer {
121123
return (chCode % Constants.CHAR_COUNT);
122124
}
123125

124-
public x2RenderChar(target: ImageData, dx: number, dy: number, chCode: number, color: RGBA, backgroundColor: RGBA, useLighterFont: boolean): void {
126+
public x2RenderChar(target: ImageData, dx: number, dy: number, chCode: number, color: RGBA8, backgroundColor: RGBA8, useLighterFont: boolean): void {
125127
if (dx + Constants.x2_CHAR_WIDTH > target.width || dy + Constants.x2_CHAR_HEIGHT > target.height) {
126128
console.warn('bad render request outside image data');
127129
return;
@@ -198,7 +200,7 @@ export class MinimapCharRenderer {
198200
}
199201
}
200202

201-
public x1RenderChar(target: ImageData, dx: number, dy: number, chCode: number, color: RGBA, backgroundColor: RGBA, useLighterFont: boolean): void {
203+
public x1RenderChar(target: ImageData, dx: number, dy: number, chCode: number, color: RGBA8, backgroundColor: RGBA8, useLighterFont: boolean): void {
202204
if (dx + Constants.x1_CHAR_WIDTH > target.width || dy + Constants.x1_CHAR_HEIGHT > target.height) {
203205
console.warn('bad render request outside image data');
204206
return;
@@ -235,7 +237,7 @@ export class MinimapCharRenderer {
235237
}
236238
}
237239

238-
public x2BlockRenderChar(target: ImageData, dx: number, dy: number, color: RGBA, backgroundColor: RGBA, useLighterFont: boolean): void {
240+
public x2BlockRenderChar(target: ImageData, dx: number, dy: number, color: RGBA8, backgroundColor: RGBA8, useLighterFont: boolean): void {
239241
if (dx + Constants.x2_CHAR_WIDTH > target.width || dy + Constants.x2_CHAR_HEIGHT > target.height) {
240242
console.warn('bad render request outside image data');
241243
return;
@@ -307,7 +309,7 @@ export class MinimapCharRenderer {
307309
}
308310
}
309311

310-
public x1BlockRenderChar(target: ImageData, dx: number, dy: number, color: RGBA, backgroundColor: RGBA, useLighterFont: boolean): void {
312+
public x1BlockRenderChar(target: ImageData, dx: number, dy: number, color: RGBA8, backgroundColor: RGBA8, useLighterFont: boolean): void {
311313
if (dx + Constants.x1_CHAR_WIDTH > target.width || dy + Constants.x1_CHAR_HEIGHT > target.height) {
312314
console.warn('bad render request outside image data');
313315
return;

src/vs/editor/test/browser/view/minimapFontCreator.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import { Constants, MinimapCharRenderer } from 'vs/editor/common/view/minimapCharRenderer';
88
import { MinimapCharRendererFactory } from 'vs/editor/test/common/view/minimapCharRendererFactory';
99
import { getOrCreateMinimapCharRenderer } from 'vs/editor/common/view/runtimeMinimapCharRenderer';
10-
import { RGBA } from 'vs/base/common/color';
10+
import { RGBA8 } from "vs/editor/common/core/rgba";
1111

1212
let canvas = <HTMLCanvasElement>document.getElementById('my-canvas');
1313
let ctx = canvas.getContext('2d');
@@ -41,8 +41,8 @@ function createFakeImageData(width: number, height: number): ImageData {
4141

4242
function renderMinimapCharRenderer(minimapCharRenderer: MinimapCharRenderer, y: number): void {
4343

44-
let background = new RGBA(0, 0, 0, 255);
45-
let color = new RGBA(255, 255, 255, 255);
44+
let background = new RGBA8(0, 0, 0, 255);
45+
let color = new RGBA8(255, 255, 255, 255);
4646

4747
{
4848
let x2 = createFakeImageData(Constants.x2_CHAR_WIDTH * Constants.CHAR_COUNT, Constants.x2_CHAR_HEIGHT);

src/vs/editor/test/common/view/minimapCharRenderer.test.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import * as assert from 'assert';
88
import { Constants } from 'vs/editor/common/view/minimapCharRenderer';
99
import { MinimapCharRendererFactory } from 'vs/editor/test/common/view/minimapCharRendererFactory';
1010
import { getOrCreateMinimapCharRenderer } from 'vs/editor/common/view/runtimeMinimapCharRenderer';
11-
import { RGBA } from 'vs/base/common/color';
11+
import { RGBA8 } from 'vs/editor/common/core/rgba';
1212

1313
suite('MinimapCharRenderer', () => {
1414

@@ -79,8 +79,8 @@ suite('MinimapCharRenderer', () => {
7979
setSampleData('d'.charCodeAt(0), sampleD);
8080
let renderer = MinimapCharRendererFactory.create(sampleData);
8181

82-
let background = new RGBA(0, 0, 0, 255);
83-
let color = new RGBA(255, 255, 255, 255);
82+
let background = new RGBA8(0, 0, 0, 255);
83+
let color = new RGBA8(255, 255, 255, 255);
8484
let imageData = createFakeImageData(Constants.x2_CHAR_WIDTH, Constants.x2_CHAR_HEIGHT);
8585
// set the background color
8686
for (let i = 0, len = imageData.data.length / 4; i < len; i++) {
@@ -106,8 +106,8 @@ suite('MinimapCharRenderer', () => {
106106
test('letter d @ 2x at runtime', () => {
107107
let renderer = getOrCreateMinimapCharRenderer();
108108

109-
let background = new RGBA(0, 0, 0, 255);
110-
let color = new RGBA(255, 255, 255, 255);
109+
let background = new RGBA8(0, 0, 0, 255);
110+
let color = new RGBA8(255, 255, 255, 255);
111111
let imageData = createFakeImageData(Constants.x2_CHAR_WIDTH, Constants.x2_CHAR_HEIGHT);
112112
// set the background color
113113
for (let i = 0, len = imageData.data.length / 4; i < len; i++) {
@@ -135,8 +135,8 @@ suite('MinimapCharRenderer', () => {
135135
setSampleData('d'.charCodeAt(0), sampleD);
136136
let renderer = MinimapCharRendererFactory.create(sampleData);
137137

138-
let background = new RGBA(0, 0, 0, 255);
139-
let color = new RGBA(255, 255, 255, 255);
138+
let background = new RGBA8(0, 0, 0, 255);
139+
let color = new RGBA8(255, 255, 255, 255);
140140
let imageData = createFakeImageData(Constants.x1_CHAR_WIDTH, Constants.x1_CHAR_HEIGHT);
141141
// set the background color
142142
for (let i = 0, len = imageData.data.length / 4; i < len; i++) {
@@ -161,8 +161,8 @@ suite('MinimapCharRenderer', () => {
161161
test('letter d @ 1x at runtime', () => {
162162
let renderer = getOrCreateMinimapCharRenderer();
163163

164-
let background = new RGBA(0, 0, 0, 255);
165-
let color = new RGBA(255, 255, 255, 255);
164+
let background = new RGBA8(0, 0, 0, 255);
165+
let color = new RGBA8(255, 255, 255, 255);
166166
let imageData = createFakeImageData(Constants.x1_CHAR_WIDTH, Constants.x1_CHAR_HEIGHT);
167167
// set the background color
168168
for (let i = 0, len = imageData.data.length / 4; i < len; i++) {

0 commit comments

Comments
 (0)