ntk 2.2.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +156 -151
- package/lib/app.js +54 -21
- package/lib/cleanup.js +14 -0
- package/lib/drawable.js +12 -18
- package/lib/events_map.js +92 -98
- package/lib/fontconfig.js +123 -17
- package/lib/glyphset.js +40 -21
- package/lib/image.js +138 -0
- package/lib/index.js +123 -57
- package/lib/path.js +734 -0
- package/lib/picture.js +84 -41
- package/lib/pixmap.js +50 -39
- package/lib/rasterize.js +178 -0
- package/lib/renderingcontext_2d.js +1078 -695
- package/lib/renderingcontext_opengl.js +53 -46
- package/lib/renderingcontext_x11.js +59 -67
- package/lib/text/font.js +196 -0
- package/lib/text/fontmanager.js +233 -0
- package/lib/text/fontsource.js +179 -0
- package/lib/text/glyphs.js +456 -0
- package/lib/text/layout.js +356 -0
- package/lib/text/shape.js +141 -0
- package/lib/trapezoid.js +131 -0
- package/lib/widgets/css.js +676 -0
- package/lib/widgets/highlight.js +97 -0
- package/lib/widgets/htmlview.js +879 -0
- package/lib/widgets/markdown.js +148 -0
- package/lib/widgets/markdownview.js +487 -0
- package/lib/widgets/mermaid.js +720 -0
- package/lib/widgets/svgview.js +528 -0
- package/lib/widgets/tex.js +681 -0
- package/lib/window.js +642 -308
- package/package.json +60 -56
- package/examples/example-await.js +0 -23
- package/examples/example-co.js +0 -13
- package/examples/example.js +0 -14
- package/examples/fill-styles.js +0 -39
- package/examples/glclock.js +0 -100
- package/examples/glxpixmap.js +0 -12
- package/examples/gradient.js +0 -41
- package/examples/package.json +0 -17
- package/examples/simpletex.js +0 -72
- package/examples/teapot.js +0 -104
- package/examples/teapot.json +0 -6
- package/examples/text-rendering.js +0 -44
- package/lib/fontface.js +0 -103
- package/lib/widgets/webview.js +0 -33
package/package.json
CHANGED
|
@@ -1,56 +1,60 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "ntk",
|
|
3
|
-
"
|
|
4
|
-
"description": "Desktop UI
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"engines": {
|
|
33
|
-
"node": "
|
|
34
|
-
},
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
|
|
56
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "ntk",
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "Desktop UI toolkit for X11 with canvas-like 2d and OpenGL rendering",
|
|
5
|
+
"author": "Andrey Sidorov <sidorares@yandex.ru>",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"ui",
|
|
9
|
+
"gui",
|
|
10
|
+
"widgets",
|
|
11
|
+
"desktop",
|
|
12
|
+
"x11",
|
|
13
|
+
"canvas",
|
|
14
|
+
"xrender"
|
|
15
|
+
],
|
|
16
|
+
"homepage": "https://github.com/sidorares/ntk",
|
|
17
|
+
"bugs": {
|
|
18
|
+
"url": "https://github.com/sidorares/ntk/issues"
|
|
19
|
+
},
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/sidorares/ntk.git"
|
|
23
|
+
},
|
|
24
|
+
"type": "module",
|
|
25
|
+
"main": "./lib/index.js",
|
|
26
|
+
"exports": {
|
|
27
|
+
".": "./lib/index.js"
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"lib"
|
|
31
|
+
],
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=20.19.0"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@dagrejs/dagre": "^3.0.0",
|
|
37
|
+
"bidi-js": "^1.0.3",
|
|
38
|
+
"canvas-fontstyle": "^1.0.1",
|
|
39
|
+
"css-select": "^7.0.0",
|
|
40
|
+
"domutils": "^4.0.2",
|
|
41
|
+
"extrude-polyline": "^1.0.6",
|
|
42
|
+
"fontkit": "^2.0.4",
|
|
43
|
+
"highlight.js": "^11.11.1",
|
|
44
|
+
"htmlparser2": "^12.0.0",
|
|
45
|
+
"jpeg-js": "^0.4.4",
|
|
46
|
+
"katex": "^0.18.1",
|
|
47
|
+
"keysym": "0.0.6",
|
|
48
|
+
"linebreak": "^1.1.0",
|
|
49
|
+
"marked": "^18.0.7",
|
|
50
|
+
"mermaid": "^11.16.0",
|
|
51
|
+
"parse-color": "^1.0.0",
|
|
52
|
+
"pngjs": "^7.0.0",
|
|
53
|
+
"postcss": "^8.5.23",
|
|
54
|
+
"x11": "^3.1.0",
|
|
55
|
+
"yoga-layout": "^3.2.1"
|
|
56
|
+
},
|
|
57
|
+
"scripts": {
|
|
58
|
+
"test": "node --test"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
var ntk = require('../lib');
|
|
2
|
-
|
|
3
|
-
async function test() {
|
|
4
|
-
var app = await ntk.createClient();
|
|
5
|
-
var wnd = app.createWindow({title: "Close me!", x: 100, y: 100, width: 300, height: 300});
|
|
6
|
-
|
|
7
|
-
// await wnd.mapped(); - map() + wait for 'is visible' event
|
|
8
|
-
|
|
9
|
-
wnd.map();
|
|
10
|
-
|
|
11
|
-
var tree = await wnd.tree;
|
|
12
|
-
var pointer = await wnd.pointer;
|
|
13
|
-
var ctx = await wnd.getContext('2d');
|
|
14
|
-
|
|
15
|
-
// all in parallel
|
|
16
|
-
let [tree, pointer, ctx] = await [wnd.tree, wnd.pointer, wnd.getContext('2d')]
|
|
17
|
-
|
|
18
|
-
wnd.on('mousedown', function(ev) {
|
|
19
|
-
console.log(ev);
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
test();
|
package/examples/example-co.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
var ntk = require('../lib');
|
|
2
|
-
var co = require('co');
|
|
3
|
-
|
|
4
|
-
co(function*() {
|
|
5
|
-
|
|
6
|
-
var app = yield ntk.createClient();
|
|
7
|
-
var wnd = app.createWindow({title: "Close me!", x: 100, y: 100, width: 300, height: 300});
|
|
8
|
-
wnd.map();
|
|
9
|
-
wnd.on('mousedown', function(ev) {
|
|
10
|
-
console.log(ev);
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
});
|
package/examples/example.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
var ntk = require('../lib');
|
|
2
|
-
|
|
3
|
-
ntk.createClient(main);
|
|
4
|
-
|
|
5
|
-
function main(err, app) {
|
|
6
|
-
var mainwnd = app.createWindow({title: "Close me!"})
|
|
7
|
-
.on('mouseout', function(ev) { console.log('Out'); })
|
|
8
|
-
.on('mouseover', function(ev) { console.log('In'); })
|
|
9
|
-
.on('mousedown', function(ev) {
|
|
10
|
-
ev.window.unmap();
|
|
11
|
-
setTimeout(function() { ev.window.map(); }, 1000);
|
|
12
|
-
})
|
|
13
|
-
.map();
|
|
14
|
-
}
|
package/examples/fill-styles.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
var ntk = require('../lib');
|
|
2
|
-
|
|
3
|
-
ntk.createClient( (err, app) => {
|
|
4
|
-
var wnd = app.createWindow({ width: 800, height: 600});
|
|
5
|
-
var ctx = wnd.getContext('2d');
|
|
6
|
-
|
|
7
|
-
var text = 'This is Test test';
|
|
8
|
-
|
|
9
|
-
var lastx = 0;
|
|
10
|
-
var lasty = 0;
|
|
11
|
-
|
|
12
|
-
wnd.on('expose', (ev) => {
|
|
13
|
-
ctx.fillStyle = 'white';
|
|
14
|
-
ctx.fillRect(ev.x, ev.y, ev.width, ev.height, 1, 0.5, 0.5, 1);
|
|
15
|
-
ctx.font = "50px 'Times New Roman'";
|
|
16
|
-
var w = ctx.measureText(text).width;
|
|
17
|
-
ctx.fillStyle = ctx.createLinearGradient(0, 0, w, 100)
|
|
18
|
-
.addColorStop(0, 'red')
|
|
19
|
-
.addColorStop(1, 'blue');
|
|
20
|
-
ctx.fillStyle = 'red'; //'rgba(200, 200, 180, 0.7)';
|
|
21
|
-
ctx.fillText(text, 100, 100);// 750 - w, 250);
|
|
22
|
-
});
|
|
23
|
-
var shift = 0;
|
|
24
|
-
wnd.on('keydown', function(ev) {
|
|
25
|
-
if (ev.codepoint == 8)
|
|
26
|
-
text = text.slice(0, -1);
|
|
27
|
-
else if (ev.codepoint)
|
|
28
|
-
text = text + String.fromCodePoint(ev.codepoint);
|
|
29
|
-
|
|
30
|
-
wnd.emit('expose', { x: 0, y: 0, width: 1000, height: 1000});
|
|
31
|
-
});
|
|
32
|
-
wnd.on('mousemove', function(ev) {
|
|
33
|
-
lastx = ev.x;
|
|
34
|
-
lasty = ev.y;
|
|
35
|
-
wnd.emit('expose', { x: 0, y: 0, width: 1000, height: 1000});
|
|
36
|
-
});
|
|
37
|
-
wnd.map();
|
|
38
|
-
});
|
|
39
|
-
|
package/examples/glclock.js
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
var ntk = require('../lib');
|
|
2
|
-
|
|
3
|
-
var width = 300;
|
|
4
|
-
var height = 300;
|
|
5
|
-
var angle = 0;
|
|
6
|
-
|
|
7
|
-
function draw(gl) {
|
|
8
|
-
gl.Enable(gl.BLEND);
|
|
9
|
-
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
|
|
10
|
-
gl.Viewport(0, 0, width, height);
|
|
11
|
-
gl.MatrixMode(gl.PROJECTION);
|
|
12
|
-
gl.LoadIdentity();
|
|
13
|
-
if (width < height)
|
|
14
|
-
gl.Frustum(-1.0, 1.0, -height/width, height/width, -35.0, 20);
|
|
15
|
-
else
|
|
16
|
-
gl.Frustum(-width/height, width/height, -1, 1, -35.0, 20);
|
|
17
|
-
gl.MatrixMode(gl.MODELVIEW);
|
|
18
|
-
gl.LoadIdentity();
|
|
19
|
-
|
|
20
|
-
gl.ClearColor(0.3,0.3,0.3,0.0);
|
|
21
|
-
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
22
|
-
|
|
23
|
-
gl.Color3f(1, 0, 0);
|
|
24
|
-
for (var i=0; i < 12; ++i) {
|
|
25
|
-
gl.Rotatef(30, 0, 0, 1);
|
|
26
|
-
gl.Begin(gl.QUADS);
|
|
27
|
-
gl.Vertex3f(-0.01, 0.8, 0);
|
|
28
|
-
gl.Vertex3f(-0.01, 1.0, 0);
|
|
29
|
-
gl.Vertex3f(0.01, 1.0, 0);
|
|
30
|
-
gl.Vertex3f(0.01, 0.8, 0);
|
|
31
|
-
gl.End();
|
|
32
|
-
}
|
|
33
|
-
gl.LoadIdentity();
|
|
34
|
-
gl.Color4f(0, 0, 1, 0.3);
|
|
35
|
-
for (var i=0; i < 60; ++i) {
|
|
36
|
-
gl.Rotatef(6, 0, 0, 1);
|
|
37
|
-
gl.PointSize(8);
|
|
38
|
-
gl.Begin(gl.POINTS);
|
|
39
|
-
gl.Vertex3f(0, 0.99, 0);
|
|
40
|
-
gl.End();
|
|
41
|
-
gl.Begin(gl.QUADS);
|
|
42
|
-
gl.Vertex3f(-0.003, 0.85, 0);
|
|
43
|
-
gl.Vertex3f(-0.003, 1.0, 0);
|
|
44
|
-
gl.Vertex3f(0.003, 1.0, 0);
|
|
45
|
-
gl.Vertex3f(0.003, 0.85, 0);
|
|
46
|
-
gl.End();
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
var t = new Date();
|
|
50
|
-
gl.LoadIdentity();
|
|
51
|
-
gl.Color4f(1, 1, 1, 0.5);
|
|
52
|
-
gl.Rotatef(-(t.getSeconds()*6000+6*t.getMilliseconds())/1000, 0, 0, 1);
|
|
53
|
-
gl.Begin(gl.TRIANGLES);
|
|
54
|
-
gl.Vertex3f(-0.02, -0.1, 0);
|
|
55
|
-
gl.Vertex3f(0, 0.9, 0);
|
|
56
|
-
gl.Vertex3f(0.02, -0.1, 0);
|
|
57
|
-
gl.End();
|
|
58
|
-
|
|
59
|
-
gl.LoadIdentity();
|
|
60
|
-
gl.Color4f(0.5, 0.5, 0.1, 0.5);
|
|
61
|
-
gl.Rotatef(-t.getMinutes()*6 -t.getSeconds()/10 - t.getMilliseconds()/10000, 0, 0, 1);
|
|
62
|
-
gl.Begin(gl.TRIANGLES);
|
|
63
|
-
gl.Vertex3f(-0.05, -0.1, 0);
|
|
64
|
-
gl.Vertex3f(0, 0.8, 0);
|
|
65
|
-
gl.Vertex3f(0.05, -0.1, 0);
|
|
66
|
-
gl.End();
|
|
67
|
-
|
|
68
|
-
gl.LoadIdentity();
|
|
69
|
-
gl.Color4f(0, 0, 0, 0.5);
|
|
70
|
-
gl.Rotatef(-(t.getHours()*30 + t.getMinutes()/2), 0, 0, 1);
|
|
71
|
-
gl.Begin(gl.TRIANGLES);
|
|
72
|
-
gl.Vertex3f(-0.08, -0.1, 0);
|
|
73
|
-
gl.Vertex3f(0, 0.6, 0);
|
|
74
|
-
gl.Vertex3f(0.08, -0.1, 0);
|
|
75
|
-
gl.End();
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
ntk.createClient(function(err, app) {
|
|
80
|
-
|
|
81
|
-
var wnd = app.createWindow({title: "GL clock", x: 100, y: 100, width: 300, height: 300});
|
|
82
|
-
wnd.map();
|
|
83
|
-
var gl = wnd.getContext('opengl');
|
|
84
|
-
|
|
85
|
-
gl.Enable(gl.POINT_SMOOTH);
|
|
86
|
-
|
|
87
|
-
function drawAndFinish() {
|
|
88
|
-
draw(gl);
|
|
89
|
-
gl.SwapBuffers();
|
|
90
|
-
gl.Finish(drawAndFinish);
|
|
91
|
-
}
|
|
92
|
-
drawAndFinish();
|
|
93
|
-
|
|
94
|
-
wnd.on('resize', function(ev) {
|
|
95
|
-
width = ev.width;
|
|
96
|
-
height = ev.height;
|
|
97
|
-
draw(gl);
|
|
98
|
-
gl.SwapBuffers();
|
|
99
|
-
});
|
|
100
|
-
});
|
package/examples/glxpixmap.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
var ntk = require('../lib');
|
|
2
|
-
var Pixmap = require('../lib/pixmap');
|
|
3
|
-
|
|
4
|
-
ntk.createClient(function(err, app) {
|
|
5
|
-
var wnd = app.createWindow({title: 'opengl drawable as texture example', x: 100, y: 100, width: 300, height: 300});
|
|
6
|
-
wnd.map();
|
|
7
|
-
var xpixmap = new Pixmap(app, {parent: wnd, width: 512, height: 512, depth: 24});
|
|
8
|
-
var gl = wnd.getContext('opengl');
|
|
9
|
-
var pixmap = gl.CreateGLXPixmap(xpixmap);
|
|
10
|
-
console.log('gl.BindTexImage(', pixmap.id, 0x20DE );
|
|
11
|
-
//gl.BindTexImage(pixmap.id, 0x20DE);
|
|
12
|
-
});
|
package/examples/gradient.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
var ntk = require('../lib');
|
|
2
|
-
|
|
3
|
-
var width = 300;
|
|
4
|
-
var height = 300;
|
|
5
|
-
var angle = 0;
|
|
6
|
-
|
|
7
|
-
function draw(gl) {
|
|
8
|
-
//gl.Enable(gl.BLEND);
|
|
9
|
-
//gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
|
|
10
|
-
gl.Viewport(0, 0, width, height);
|
|
11
|
-
gl.MatrixMode(gl.PROJECTION);
|
|
12
|
-
gl.LoadIdentity();
|
|
13
|
-
gl.Frustum(-1.0, 1.0, -1, 1, -35.0, 20);
|
|
14
|
-
gl.MatrixMode(gl.MODELVIEW);
|
|
15
|
-
gl.LoadIdentity();
|
|
16
|
-
|
|
17
|
-
gl.ClearColor(0.3,0.3,0.3,0.0);
|
|
18
|
-
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
19
|
-
gl.Begin(gl.QUADS);
|
|
20
|
-
gl.Color3f(1, 0, 0);
|
|
21
|
-
gl.Vertex3f(-1, -1, 0);
|
|
22
|
-
gl.Vertex3f(1, -1, 0);
|
|
23
|
-
gl.Color3f(1, 1, 0);
|
|
24
|
-
gl.Vertex3f(1, 1, 0);
|
|
25
|
-
gl.Vertex3f(-1, 1, 0);
|
|
26
|
-
gl.End();
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
ntk.createClient(main);
|
|
30
|
-
function main(err, app) {
|
|
31
|
-
var wnd = app.createWindow({title: 'simple opengl gradient', x: 100, y: 100, width: 300, height: 300});
|
|
32
|
-
wnd.map();
|
|
33
|
-
var gl = wnd.getContext('opengl');
|
|
34
|
-
gl.Enable(gl.POINT_SMOOTH);
|
|
35
|
-
wnd.on('resize', function(ev) {
|
|
36
|
-
width = ev.width;
|
|
37
|
-
height = ev.height;
|
|
38
|
-
draw(gl);
|
|
39
|
-
gl.SwapBuffers();
|
|
40
|
-
});
|
|
41
|
-
}
|
package/examples/package.json
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "examples",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"description": "",
|
|
5
|
-
"main": "example-await.js",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
|
-
},
|
|
9
|
-
"keywords": [],
|
|
10
|
-
"author": "",
|
|
11
|
-
"license": "ISC",
|
|
12
|
-
"dependencies": {
|
|
13
|
-
"baboon-image": "^2.1.0",
|
|
14
|
-
"bunny": "^1.0.1",
|
|
15
|
-
"teapot": "^1.0.0"
|
|
16
|
-
}
|
|
17
|
-
}
|
package/examples/simpletex.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
var ntk = require('../lib');
|
|
2
|
-
|
|
3
|
-
var width = 300;
|
|
4
|
-
var height = 300;
|
|
5
|
-
var angle = 0;
|
|
6
|
-
var angley = 0;
|
|
7
|
-
|
|
8
|
-
function resize(gl) {
|
|
9
|
-
gl.Viewport(0, 0, width, height);
|
|
10
|
-
gl.MatrixMode(gl.PROJECTION);
|
|
11
|
-
gl.LoadIdentity();
|
|
12
|
-
if (width < height)
|
|
13
|
-
gl.Frustum(-1.0, 1.0, -height/width, height/width, -35.0, 20);
|
|
14
|
-
else
|
|
15
|
-
gl.Frustum(-width/height, width/height, -1.0, 1.0, -35.0, 20);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
function draw(gl) {
|
|
19
|
-
gl.MatrixMode(gl.MODELVIEW);
|
|
20
|
-
|
|
21
|
-
gl.ClearColor(0.3,0.3,0.3,0.0);
|
|
22
|
-
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
23
|
-
|
|
24
|
-
gl.LoadIdentity();
|
|
25
|
-
gl.Rotatef(-90 + 360*angle/width, 0, 0, 1);
|
|
26
|
-
// gl.Rotatef(angley, 0, 1, 0);
|
|
27
|
-
gl.Begin(gl.TRIANGLE_STRIP);
|
|
28
|
-
gl.TexCoord2f(0.0,0.0);
|
|
29
|
-
gl.Vertex3f(-1, -1, 0);
|
|
30
|
-
|
|
31
|
-
gl.TexCoord2f(1.0, 0.0);
|
|
32
|
-
gl.Vertex3f(1, -1, 0);
|
|
33
|
-
|
|
34
|
-
gl.TexCoord2f(0.0, 1.0);
|
|
35
|
-
gl.Vertex3f(-1, 1, 0);
|
|
36
|
-
|
|
37
|
-
gl.TexCoord2f(1.0,1.0);
|
|
38
|
-
gl.Vertex3f(1, 1, 0);
|
|
39
|
-
gl.End();
|
|
40
|
-
gl.SwapBuffers();
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
var texture = require('baboon-image');
|
|
44
|
-
|
|
45
|
-
ntk.createClient(function(err, app) {
|
|
46
|
-
|
|
47
|
-
var wnd = app.createWindow({width: width, height: height});
|
|
48
|
-
wnd.map();
|
|
49
|
-
var visual = parseInt(require('child_process').execSync('glxinfo -i -b').toString());
|
|
50
|
-
var gl = wnd.getContext('opengl', visual);
|
|
51
|
-
gl.Enable(gl.TEXTURE_2D);
|
|
52
|
-
gl.GenTextures(1, function(err, textures) {
|
|
53
|
-
//gl.BindTexture(gl.TEXTURE_2D, textures[0]);
|
|
54
|
-
gl.BindTexture(gl.TEXTURE_2D, 1);
|
|
55
|
-
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
|
56
|
-
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
|
57
|
-
|
|
58
|
-
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGB, 512, 512, 0, gl.RGB, gl.UNSIGNED_BYTE, texture.data);
|
|
59
|
-
draw(gl);
|
|
60
|
-
|
|
61
|
-
wnd.on('resize', function(ev) {
|
|
62
|
-
width = ev.width;
|
|
63
|
-
height = ev.height;
|
|
64
|
-
resize(gl);
|
|
65
|
-
draw(gl);
|
|
66
|
-
}).on('mousemove', function(ev) {
|
|
67
|
-
angle = ev.x;
|
|
68
|
-
angley = ev.y;
|
|
69
|
-
draw(gl);
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
});
|
package/examples/teapot.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
var ntk = require('../lib');
|
|
2
|
-
|
|
3
|
-
var width = 300;
|
|
4
|
-
var height = 300;
|
|
5
|
-
var angle = 0;
|
|
6
|
-
|
|
7
|
-
var model = require('./teapot.json');
|
|
8
|
-
|
|
9
|
-
function makeList(gl, callback)
|
|
10
|
-
{
|
|
11
|
-
gl.GenLists(1, function(err, list) {
|
|
12
|
-
listId = list;
|
|
13
|
-
gl.NewList(list, gl.COMPILE);
|
|
14
|
-
gl.Begin(gl.TRIANGLES);
|
|
15
|
-
for (var i=0; i < model.indices.length; i+=3) {
|
|
16
|
-
for (var t=i; t < i+3; t++) {
|
|
17
|
-
tr = model.indices[t];
|
|
18
|
-
var x = model.vertexNormals[tr*3 + 0];
|
|
19
|
-
var y = model.vertexNormals[tr*3 + 1];
|
|
20
|
-
var z = model.vertexNormals[tr*3 + 2];
|
|
21
|
-
gl.Normal3f(x, y, z);
|
|
22
|
-
var x = model.vertexPositions[tr*3 + 0];
|
|
23
|
-
var y = model.vertexPositions[tr*3 + 1];
|
|
24
|
-
var z = model.vertexPositions[tr*3 + 2];
|
|
25
|
-
gl.Vertex3f(x, y, z);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
gl.End();
|
|
29
|
-
gl.EndList();
|
|
30
|
-
callback(list);
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
var scale = 0.1;
|
|
35
|
-
var rotx = 0;
|
|
36
|
-
var roty = 0;
|
|
37
|
-
var lightangle = 0;
|
|
38
|
-
|
|
39
|
-
function draw(gl, list) {
|
|
40
|
-
{
|
|
41
|
-
var pos = [5.0, Math.sin(lightangle)*100, Math.cos(lightangle)*100.0, 0.0]
|
|
42
|
-
var red = [ 0.8, 0.1, 0.0, 1.0 ];
|
|
43
|
-
var green = [ 0.0, 0.8, 0.2, 1.0 ];
|
|
44
|
-
var blue = [ 0.2, 0.2, 1.0, 1.0 ];
|
|
45
|
-
|
|
46
|
-
gl.Lightfv(gl.LIGHT0, gl.POSITION, pos);
|
|
47
|
-
gl.Enable(gl.CULL_FACE);
|
|
48
|
-
gl.Enable(gl.LIGHTING);
|
|
49
|
-
gl.Enable(gl.LIGHT0);
|
|
50
|
-
gl.Enable(gl.DEPTH_TEST);
|
|
51
|
-
gl.Enable(gl.NORMALIZE);
|
|
52
|
-
gl.ShadeModel(gl.SMOOTH);
|
|
53
|
-
|
|
54
|
-
gl.Enable(gl.BLEND);
|
|
55
|
-
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
|
|
56
|
-
gl.Viewport(0, 0, width, height);
|
|
57
|
-
gl.MatrixMode(gl.PROJECTION);
|
|
58
|
-
gl.LoadIdentity();
|
|
59
|
-
if (width < height)
|
|
60
|
-
gl.Frustum(-1.0, 1.0, -height/width, height/width, -35.0, 20);
|
|
61
|
-
else
|
|
62
|
-
gl.Frustum(-width/height, width/height, -1, 1, -35.0, 20);
|
|
63
|
-
gl.MatrixMode(gl.MODELVIEW);
|
|
64
|
-
gl.LoadIdentity();
|
|
65
|
-
|
|
66
|
-
gl.ClearColor(0.3,0.3,0.3,0.0);
|
|
67
|
-
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
68
|
-
|
|
69
|
-
gl.Scalef(scale, scale, scale);
|
|
70
|
-
gl.Color3f(1, 0, 0);
|
|
71
|
-
gl.Rotatef(rotx, 0, 1, 0);
|
|
72
|
-
gl.Rotatef(-roty, 1, 0, 0);
|
|
73
|
-
gl.CallList(list)
|
|
74
|
-
gl.SwapBuffers();}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
ntk.createClient(function(err, app) {
|
|
78
|
-
var wnd = app.createWindow({title: "Close me!", x: 100, y: 100, width: 300, height: 300});
|
|
79
|
-
wnd.map();
|
|
80
|
-
var gl = wnd.getContext('opengl');
|
|
81
|
-
gl.Enable(gl.POINT_SMOOTH);
|
|
82
|
-
makeList(gl, function(list) {
|
|
83
|
-
draw(gl, list);
|
|
84
|
-
setInterval(function() {
|
|
85
|
-
lightangle += 0.1;
|
|
86
|
-
draw(gl, list);
|
|
87
|
-
}, 50);
|
|
88
|
-
wnd.on('resize', function(ev) {
|
|
89
|
-
width = ev.width;
|
|
90
|
-
height = ev.height;
|
|
91
|
-
draw(gl, list);
|
|
92
|
-
}).on('mousemove', function(ev) {
|
|
93
|
-
rotx = ev.x;
|
|
94
|
-
roty = ev.y;
|
|
95
|
-
draw(gl, list);
|
|
96
|
-
}).on('mousedown', function(ev) {
|
|
97
|
-
if (ev.keycode == 4)
|
|
98
|
-
scale *= 0.9;
|
|
99
|
-
else
|
|
100
|
-
scale /= 0.9;
|
|
101
|
-
draw(gl, list);
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
});
|