quickwin 1.2.1 → 2.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.en.md +3 -3
- package/README.md +21 -24
- package/examples/PdfCanvas.js +8 -37
- package/examples/PdfCanvas.tsx +11 -41
- package/examples/exec_server.js +20054 -1423
- package/examples/exec_server.tsx +489 -0
- package/examples/exec_server_worker.js +383 -33
- package/examples/exec_server_worker.ts +408 -30
- package/examples/pdf_preview2.js +31 -73
- package/examples/pdf_preview2.ts +33 -76
- package/examples/pdf_viewer.js +1496 -616
- package/examples/pdf_viewer.tsx +23 -64
- package/examples/setres.js +22 -47
- package/examples/setres.ts +23 -57
- package/examples/test_gallery.js +1491 -525
- package/examples/test_react_lazy.js +1455 -500
- package/examples/test_react_listbox.js +1454 -499
- package/examples/test_root_window.js +1450 -495
- package/examples/test_tab.js +1455 -500
- package/lib/abort.js +70 -0
- package/lib/abort.ts +69 -0
- package/lib/certs.js +214 -0
- package/lib/certs.ts +224 -0
- package/lib/exec-log.js +15 -0
- package/lib/exec-log.ts +30 -0
- package/lib/fetch.js +37 -4
- package/lib/fetch.ts +35 -4
- package/lib/ffi/bind.js +352 -0
- package/lib/ffi/bind.ts +442 -0
- package/lib/ffi/ctype.js +168 -0
- package/lib/ffi/ctype.ts +331 -0
- package/lib/ffi/index.js +6 -0
- package/lib/ffi/index.ts +6 -0
- package/lib/ffi/struct.js +412 -0
- package/lib/ffi/struct.ts +664 -0
- package/lib/http-common.js +43 -5
- package/lib/http-common.ts +48 -6
- package/lib/http-server.js +187 -29
- package/lib/http-server.ts +177 -26
- package/lib/react-qw/components/DateTimePicker.js +20 -33
- package/lib/react-qw/components/Input.js +3 -10
- package/lib/react-qw/components/Link.js +7 -22
- package/lib/react-qw/components/ListView.js +80 -141
- package/lib/react-qw/components/PathPicker.js +36 -80
- package/lib/react-qw/components/ScrollView.js +15 -8
- package/lib/react-qw/components/Slider.js +2 -1
- package/lib/react-qw/components/Tab.js +15 -20
- package/lib/react-qw/components/Tooltip.js +21 -20
- package/lib/react-qw/components/TreeView.js +14 -47
- package/lib/react-qw/index.js +4 -2
- package/lib/react-qw/index.ts +4 -2
- package/lib/react-qw/nmhdr.js +5 -0
- package/lib/react-qw/nmhdr.ts +7 -0
- package/lib/react-qw/props.js +7 -2
- package/lib/react-qw/props.ts +7 -3
- package/lib/react-qw/reconciler.js +23 -13
- package/lib/react-qw/reconciler.ts +22 -13
- package/lib/text-measure.js +18 -35
- package/lib/text-measure.ts +20 -37
- package/lib/websocket.js +12 -2
- package/lib/websocket.ts +15 -2
- package/lib/windows/comctl32.js +18 -0
- package/lib/windows/comctl32.ts +20 -0
- package/lib/windows/comdlg32.js +7 -0
- package/lib/windows/comdlg32.ts +9 -0
- package/lib/windows/gdi32.js +90 -0
- package/lib/windows/gdi32.ts +97 -0
- package/lib/windows/kernel32.js +66 -0
- package/lib/windows/kernel32.ts +76 -0
- package/lib/windows/ntdll.js +8 -0
- package/lib/windows/ntdll.ts +10 -0
- package/lib/windows/ole32.js +7 -0
- package/lib/windows/ole32.ts +9 -0
- package/lib/windows/shell32.js +11 -0
- package/lib/windows/shell32.ts +14 -0
- package/lib/windows/structs.js +384 -0
- package/lib/windows/structs.ts +422 -0
- package/lib/windows/user32.js +469 -0
- package/lib/windows/user32.ts +502 -0
- package/package.json +1 -1
- package/quickwin.d.ts +22 -33
- package/quickwin_const.d.ts +1 -0
- package/qwin-nowasm-x86.exe +0 -0
- package/qwin-nowasm.exe +0 -0
- package/qwin-x86.exe +0 -0
- package/qwin.exe +0 -0
- package/test/bench_ffi_callraw.js +236 -0
- package/test/bench_ffi_callraw.ts +236 -0
- package/test/bench_ffi_overhead.js +139 -0
- package/test/bench_ffi_overhead.ts +141 -0
- package/test/bench_sendmessage.js +104 -0
- package/test/bench_sendmessage.ts +100 -0
- package/test/bench_sendmessage_nonnull.js +187 -0
- package/test/bench_sendmessage_nonnull.ts +188 -0
- package/test/run.js +14 -4
- package/test/run.ts +15 -5
- package/test/test_basic_fetch.js +8 -0
- package/test/test_basic_fetch.ts +9 -0
- package/test/test_ffi.js +33 -47
- package/test/test_ffi.ts +41 -60
- package/test/test_ffi_abi.js +235 -0
- package/test/test_ffi_abi.ts +218 -0
- package/test/test_ffi_bind.js +572 -0
- package/test/test_ffi_bind.ts +597 -0
- package/test/test_ffi_struct.js +745 -0
- package/test/test_ffi_struct.ts +798 -0
- package/test/test_ffi_struct_layout.js +495 -0
- package/test/test_ffi_struct_layout.ts +543 -0
- package/test/test_ffi_user32.js +103 -0
- package/test/test_ffi_user32.ts +113 -0
- package/test/test_ffi_windows.js +101 -0
- package/test/test_ffi_windows.ts +113 -0
- package/test/test_helper.js +8 -1
- package/test/test_helper.ts +9 -1
- package/test/test_http_import.js +18 -0
- package/test/test_http_import.ts +19 -0
- package/test/test_http_server.js +73 -1
- package/test/test_http_server.ts +75 -1
- package/test/test_ipv6.js +2 -2
- package/test/test_ipv6.ts +2 -2
- package/test/test_net_fetch.js +70 -8
- package/test/test_net_fetch.ts +69 -7
- package/test/test_net_websocket.js +1 -1
- package/test/test_net_websocket.ts +1 -1
- package/test/test_react_complex.js +1465 -510
- package/test/test_react_counter.js +1455 -500
- package/test/test_react_flex.js +1475 -513
- package/test/test_react_hidden.js +1458 -503
- package/test/test_react_listview_link.js +1455 -500
- package/test/test_react_notify.js +18534 -0
- package/test/test_react_render.js +1455 -500
- package/test/test_wolfssl_read.js +3 -2
- package/test/test_wolfssl_read.ts +3 -1
- package/test/test_worker_net.js +35 -17
- package/test/test_worker_net.ts +27 -15
- package/tsconfig.json +1 -1
- package/examples/exec_server.ts +0 -80
|
@@ -1367,9 +1367,9 @@ var require_scheduler_development = __commonJS({
|
|
|
1367
1367
|
}
|
|
1368
1368
|
return first;
|
|
1369
1369
|
}
|
|
1370
|
-
function compare(a,
|
|
1371
|
-
var diff = a.sortIndex -
|
|
1372
|
-
return 0 !== diff ? diff : a.id -
|
|
1370
|
+
function compare(a, b6) {
|
|
1371
|
+
var diff = a.sortIndex - b6.sortIndex;
|
|
1372
|
+
return 0 !== diff ? diff : a.id - b6.id;
|
|
1373
1373
|
}
|
|
1374
1374
|
function advanceTimers(currentTime) {
|
|
1375
1375
|
for (var timer = peek(timerQueue); null !== timer; ) {
|
|
@@ -1667,14 +1667,14 @@ var require_react_reconciler_development = __commonJS({
|
|
|
1667
1667
|
throw Error("Unable to find node on an unmounted component.");
|
|
1668
1668
|
return alternate !== fiber ? null : fiber;
|
|
1669
1669
|
}
|
|
1670
|
-
for (var a = fiber,
|
|
1670
|
+
for (var a = fiber, b6 = alternate; ; ) {
|
|
1671
1671
|
var parentA = a.return;
|
|
1672
1672
|
if (null === parentA) break;
|
|
1673
1673
|
var parentB = parentA.alternate;
|
|
1674
1674
|
if (null === parentB) {
|
|
1675
|
-
|
|
1676
|
-
if (null !==
|
|
1677
|
-
a =
|
|
1675
|
+
b6 = parentA.return;
|
|
1676
|
+
if (null !== b6) {
|
|
1677
|
+
a = b6;
|
|
1678
1678
|
continue;
|
|
1679
1679
|
}
|
|
1680
1680
|
break;
|
|
@@ -1682,23 +1682,23 @@ var require_react_reconciler_development = __commonJS({
|
|
|
1682
1682
|
if (parentA.child === parentB.child) {
|
|
1683
1683
|
for (parentB = parentA.child; parentB; ) {
|
|
1684
1684
|
if (parentB === a) return assertIsMounted(parentA), fiber;
|
|
1685
|
-
if (parentB ===
|
|
1685
|
+
if (parentB === b6) return assertIsMounted(parentA), alternate;
|
|
1686
1686
|
parentB = parentB.sibling;
|
|
1687
1687
|
}
|
|
1688
1688
|
throw Error("Unable to find node on an unmounted component.");
|
|
1689
1689
|
}
|
|
1690
|
-
if (a.return !==
|
|
1690
|
+
if (a.return !== b6.return) a = parentA, b6 = parentB;
|
|
1691
1691
|
else {
|
|
1692
1692
|
for (var didFindChild = false, _child = parentA.child; _child; ) {
|
|
1693
1693
|
if (_child === a) {
|
|
1694
1694
|
didFindChild = true;
|
|
1695
1695
|
a = parentA;
|
|
1696
|
-
|
|
1696
|
+
b6 = parentB;
|
|
1697
1697
|
break;
|
|
1698
1698
|
}
|
|
1699
|
-
if (_child ===
|
|
1699
|
+
if (_child === b6) {
|
|
1700
1700
|
didFindChild = true;
|
|
1701
|
-
|
|
1701
|
+
b6 = parentA;
|
|
1702
1702
|
a = parentB;
|
|
1703
1703
|
break;
|
|
1704
1704
|
}
|
|
@@ -1709,12 +1709,12 @@ var require_react_reconciler_development = __commonJS({
|
|
|
1709
1709
|
if (_child === a) {
|
|
1710
1710
|
didFindChild = true;
|
|
1711
1711
|
a = parentB;
|
|
1712
|
-
|
|
1712
|
+
b6 = parentA;
|
|
1713
1713
|
break;
|
|
1714
1714
|
}
|
|
1715
|
-
if (_child ===
|
|
1715
|
+
if (_child === b6) {
|
|
1716
1716
|
didFindChild = true;
|
|
1717
|
-
|
|
1717
|
+
b6 = parentB;
|
|
1718
1718
|
a = parentA;
|
|
1719
1719
|
break;
|
|
1720
1720
|
}
|
|
@@ -1726,7 +1726,7 @@ var require_react_reconciler_development = __commonJS({
|
|
|
1726
1726
|
);
|
|
1727
1727
|
}
|
|
1728
1728
|
}
|
|
1729
|
-
if (a.alternate !==
|
|
1729
|
+
if (a.alternate !== b6)
|
|
1730
1730
|
throw Error(
|
|
1731
1731
|
"Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue."
|
|
1732
1732
|
);
|
|
@@ -15071,10 +15071,10 @@ var require_react_reconciler_development = __commonJS({
|
|
|
15071
15071
|
setCurrentUpdatePriority(previousPriority), ReactSharedInternals.T = prevTransition;
|
|
15072
15072
|
}
|
|
15073
15073
|
};
|
|
15074
|
-
exports2.discreteUpdates = function(fn, a,
|
|
15074
|
+
exports2.discreteUpdates = function(fn, a, b6, c, d) {
|
|
15075
15075
|
var prevTransition = ReactSharedInternals.T, previousPriority = getCurrentUpdatePriority();
|
|
15076
15076
|
try {
|
|
15077
|
-
return setCurrentUpdatePriority(2), ReactSharedInternals.T = null, fn(a,
|
|
15077
|
+
return setCurrentUpdatePriority(2), ReactSharedInternals.T = null, fn(a, b6, c, d);
|
|
15078
15078
|
} finally {
|
|
15079
15079
|
setCurrentUpdatePriority(previousPriority), ReactSharedInternals.T = prevTransition, executionContext === NoContext && (workInProgressRootRenderTargetTime = now$1() + RENDER_TIMEOUT_MS);
|
|
15080
15080
|
}
|
|
@@ -15357,23 +15357,1165 @@ var require_constants = __commonJS({
|
|
|
15357
15357
|
var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1);
|
|
15358
15358
|
var import_react18 = __toESM(require_react(), 1);
|
|
15359
15359
|
import "../lib/polyfill.js";
|
|
15360
|
-
import * as
|
|
15360
|
+
import * as std2 from "std";
|
|
15361
15361
|
|
|
15362
15362
|
// _build/lib/react-qw/index.js
|
|
15363
|
-
import * as
|
|
15363
|
+
import * as gui17 from "gui";
|
|
15364
|
+
|
|
15365
|
+
// _build/lib/windows/user32.js
|
|
15366
|
+
import * as os3 from "os";
|
|
15367
|
+
|
|
15368
|
+
// _build/lib/ffi/bind.js
|
|
15369
|
+
import * as ffi from "ffi";
|
|
15370
|
+
import * as os2 from "os";
|
|
15371
|
+
import * as std from "std";
|
|
15372
|
+
import * as win from "win";
|
|
15373
|
+
|
|
15374
|
+
// _build/lib/text-codec.js
|
|
15375
|
+
var _labelMap = {
|
|
15376
|
+
"utf-8": "utf-8",
|
|
15377
|
+
"utf8": "utf-8",
|
|
15378
|
+
"unicode-1-1-utf-8": "utf-8",
|
|
15379
|
+
"utf-16": "utf-16le",
|
|
15380
|
+
"utf-16le": "utf-16le",
|
|
15381
|
+
"utf-16be": "utf-16be"
|
|
15382
|
+
};
|
|
15383
|
+
function _normalizeLabel(label) {
|
|
15384
|
+
if (!label)
|
|
15385
|
+
return "utf-8";
|
|
15386
|
+
const result = _labelMap[label.trim().toLowerCase()];
|
|
15387
|
+
if (result)
|
|
15388
|
+
return result;
|
|
15389
|
+
throw new RangeError(`The encoding label "${label}" is not supported`);
|
|
15390
|
+
}
|
|
15391
|
+
function _decodeUTF8(buf, fatal) {
|
|
15392
|
+
let out = "";
|
|
15393
|
+
for (let i = 0; i < buf.length; ) {
|
|
15394
|
+
const b6 = buf[i++];
|
|
15395
|
+
if (b6 < 128) {
|
|
15396
|
+
out += String.fromCharCode(b6);
|
|
15397
|
+
continue;
|
|
15398
|
+
}
|
|
15399
|
+
if (b6 < 192) {
|
|
15400
|
+
out += fatal ? (() => {
|
|
15401
|
+
throw new TypeError("unexpected continuation byte");
|
|
15402
|
+
})() : "\uFFFD";
|
|
15403
|
+
continue;
|
|
15404
|
+
}
|
|
15405
|
+
let c, min;
|
|
15406
|
+
if (b6 < 224) {
|
|
15407
|
+
if (i >= buf.length) {
|
|
15408
|
+
out += fatal ? (() => {
|
|
15409
|
+
throw new TypeError("incomplete utf-8");
|
|
15410
|
+
})() : "\uFFFD";
|
|
15411
|
+
break;
|
|
15412
|
+
}
|
|
15413
|
+
const b22 = buf[i++];
|
|
15414
|
+
if ((b22 & 192) !== 128) {
|
|
15415
|
+
out += "\uFFFD";
|
|
15416
|
+
continue;
|
|
15417
|
+
}
|
|
15418
|
+
c = (b6 & 31) << 6 | b22 & 63;
|
|
15419
|
+
min = 128;
|
|
15420
|
+
} else if (b6 < 240) {
|
|
15421
|
+
if (i + 1 >= buf.length) {
|
|
15422
|
+
out += fatal ? (() => {
|
|
15423
|
+
throw new TypeError("incomplete utf-8");
|
|
15424
|
+
})() : "\uFFFD";
|
|
15425
|
+
break;
|
|
15426
|
+
}
|
|
15427
|
+
const b22 = buf[i++];
|
|
15428
|
+
const b32 = buf[i++];
|
|
15429
|
+
if ((b22 & 192) !== 128 || (b32 & 192) !== 128) {
|
|
15430
|
+
out += "\uFFFD";
|
|
15431
|
+
continue;
|
|
15432
|
+
}
|
|
15433
|
+
c = (b6 & 15) << 12 | (b22 & 63) << 6 | b32 & 63;
|
|
15434
|
+
min = 2048;
|
|
15435
|
+
} else if (b6 < 248) {
|
|
15436
|
+
if (i + 2 >= buf.length) {
|
|
15437
|
+
out += fatal ? (() => {
|
|
15438
|
+
throw new TypeError("incomplete utf-8");
|
|
15439
|
+
})() : "\uFFFD";
|
|
15440
|
+
break;
|
|
15441
|
+
}
|
|
15442
|
+
const b22 = buf[i++];
|
|
15443
|
+
const b32 = buf[i++];
|
|
15444
|
+
const b42 = buf[i++];
|
|
15445
|
+
if ((b22 & 192) !== 128 || (b32 & 192) !== 128 || (b42 & 192) !== 128) {
|
|
15446
|
+
out += "\uFFFD";
|
|
15447
|
+
continue;
|
|
15448
|
+
}
|
|
15449
|
+
c = (b6 & 7) << 18 | (b22 & 63) << 12 | (b32 & 63) << 6 | b42 & 63;
|
|
15450
|
+
min = 65536;
|
|
15451
|
+
} else {
|
|
15452
|
+
out += fatal ? (() => {
|
|
15453
|
+
throw new TypeError("invalid utf-8 start");
|
|
15454
|
+
})() : "\uFFFD";
|
|
15455
|
+
continue;
|
|
15456
|
+
}
|
|
15457
|
+
if (c < min || c >= 55296 && c <= 57343 || c > 1114111) {
|
|
15458
|
+
out += fatal ? (() => {
|
|
15459
|
+
throw new TypeError("invalid utf-8 codepoint");
|
|
15460
|
+
})() : "\uFFFD";
|
|
15461
|
+
continue;
|
|
15462
|
+
}
|
|
15463
|
+
if (c <= 65535)
|
|
15464
|
+
out += String.fromCharCode(c);
|
|
15465
|
+
else {
|
|
15466
|
+
c -= 65536;
|
|
15467
|
+
out += String.fromCharCode(55296 | c >> 10, 56320 | c & 1023);
|
|
15468
|
+
}
|
|
15469
|
+
}
|
|
15470
|
+
return out;
|
|
15471
|
+
}
|
|
15472
|
+
function _decodeUTF16(buf, le, fatal) {
|
|
15473
|
+
const dv = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
15474
|
+
let out = "";
|
|
15475
|
+
for (let i = 0; i + 1 < buf.length; i += 2) {
|
|
15476
|
+
let c = dv.getUint16(i, le);
|
|
15477
|
+
if (c >= 55296 && c <= 56319) {
|
|
15478
|
+
i += 2;
|
|
15479
|
+
if (i + 1 >= buf.length) {
|
|
15480
|
+
out += fatal ? (() => {
|
|
15481
|
+
throw new TypeError("truncated surrogate pair");
|
|
15482
|
+
})() : "\uFFFD";
|
|
15483
|
+
break;
|
|
15484
|
+
}
|
|
15485
|
+
const c2 = dv.getUint16(i, le);
|
|
15486
|
+
if (c2 >= 56320 && c2 <= 57343) {
|
|
15487
|
+
out += String.fromCharCode(c, c2);
|
|
15488
|
+
} else {
|
|
15489
|
+
out += fatal ? (() => {
|
|
15490
|
+
throw new TypeError("invalid surrogate pair");
|
|
15491
|
+
})() : "\uFFFD";
|
|
15492
|
+
i -= 2;
|
|
15493
|
+
}
|
|
15494
|
+
} else if (c >= 56320 && c <= 57343) {
|
|
15495
|
+
out += fatal ? (() => {
|
|
15496
|
+
throw new TypeError("unexpected trailing surrogate");
|
|
15497
|
+
})() : "\uFFFD";
|
|
15498
|
+
} else {
|
|
15499
|
+
out += String.fromCharCode(c);
|
|
15500
|
+
}
|
|
15501
|
+
}
|
|
15502
|
+
return out;
|
|
15503
|
+
}
|
|
15504
|
+
var TextDecoderImpl = class {
|
|
15505
|
+
_encoding;
|
|
15506
|
+
_fatal;
|
|
15507
|
+
_ignoreBOM;
|
|
15508
|
+
constructor(label, options) {
|
|
15509
|
+
this._encoding = _normalizeLabel(label);
|
|
15510
|
+
this._fatal = options?.fatal ?? false;
|
|
15511
|
+
this._ignoreBOM = options?.ignoreBOM ?? false;
|
|
15512
|
+
}
|
|
15513
|
+
get encoding() {
|
|
15514
|
+
return this._encoding;
|
|
15515
|
+
}
|
|
15516
|
+
get fatal() {
|
|
15517
|
+
return this._fatal;
|
|
15518
|
+
}
|
|
15519
|
+
get ignoreBOM() {
|
|
15520
|
+
return this._ignoreBOM;
|
|
15521
|
+
}
|
|
15522
|
+
decode(buffer) {
|
|
15523
|
+
if (!buffer)
|
|
15524
|
+
return "";
|
|
15525
|
+
const arr = buffer instanceof Uint8Array ? buffer : buffer instanceof ArrayBuffer ? new Uint8Array(buffer) : new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
|
|
15526
|
+
if (this._encoding === "utf-8") {
|
|
15527
|
+
return _decodeUTF8(arr, this._fatal);
|
|
15528
|
+
}
|
|
15529
|
+
const le = this._encoding === "utf-16le";
|
|
15530
|
+
let offset = 0;
|
|
15531
|
+
if (arr.length >= 2 && !this._ignoreBOM) {
|
|
15532
|
+
const bomLo = le ? arr[0] : arr[1];
|
|
15533
|
+
const bomHi = le ? arr[1] : arr[0];
|
|
15534
|
+
const bom = bomHi << 8 | bomLo;
|
|
15535
|
+
if (bom === 65279 || bom === 65534) {
|
|
15536
|
+
offset = 2;
|
|
15537
|
+
}
|
|
15538
|
+
}
|
|
15539
|
+
return _decodeUTF16(arr.slice(offset), le, this._fatal);
|
|
15540
|
+
}
|
|
15541
|
+
};
|
|
15542
|
+
var TextEncoderImpl = class {
|
|
15543
|
+
_encoding;
|
|
15544
|
+
constructor(label) {
|
|
15545
|
+
this._encoding = _normalizeLabel(label);
|
|
15546
|
+
}
|
|
15547
|
+
get encoding() {
|
|
15548
|
+
return this._encoding;
|
|
15549
|
+
}
|
|
15550
|
+
encode(input) {
|
|
15551
|
+
if (!input)
|
|
15552
|
+
return new Uint8Array(0);
|
|
15553
|
+
if (this._encoding === "utf-8") {
|
|
15554
|
+
const bytes = [];
|
|
15555
|
+
for (let i = 0; i < input.length; i++) {
|
|
15556
|
+
let c = input.charCodeAt(i);
|
|
15557
|
+
if (c < 128) {
|
|
15558
|
+
bytes.push(c);
|
|
15559
|
+
} else if (c < 2048) {
|
|
15560
|
+
bytes.push(192 | c >> 6, 128 | c & 63);
|
|
15561
|
+
} else if (c < 55296 || c >= 57344) {
|
|
15562
|
+
bytes.push(224 | c >> 12, 128 | c >> 6 & 63, 128 | c & 63);
|
|
15563
|
+
} else {
|
|
15564
|
+
i++;
|
|
15565
|
+
const c2 = input.charCodeAt(i);
|
|
15566
|
+
c = 65536 + ((c & 1023) << 10) | c2 & 1023;
|
|
15567
|
+
bytes.push(240 | c >> 18, 128 | c >> 12 & 63, 128 | c >> 6 & 63, 128 | c & 63);
|
|
15568
|
+
}
|
|
15569
|
+
}
|
|
15570
|
+
return new Uint8Array(bytes);
|
|
15571
|
+
}
|
|
15572
|
+
const le = this._encoding === "utf-16le";
|
|
15573
|
+
const buf = new ArrayBuffer(input.length * 2);
|
|
15574
|
+
const dv = new DataView(buf);
|
|
15575
|
+
for (let i = 0; i < input.length; i++)
|
|
15576
|
+
dv.setUint16(i * 2, input.charCodeAt(i), le);
|
|
15577
|
+
return new Uint8Array(buf);
|
|
15578
|
+
}
|
|
15579
|
+
};
|
|
15580
|
+
if (typeof globalThis.TextDecoder === "undefined") {
|
|
15581
|
+
globalThis.TextDecoder = TextDecoderImpl;
|
|
15582
|
+
}
|
|
15583
|
+
if (typeof globalThis.TextEncoder === "undefined") {
|
|
15584
|
+
globalThis.TextEncoder = TextEncoderImpl;
|
|
15585
|
+
}
|
|
15586
|
+
|
|
15587
|
+
// _build/lib/ffi/ctype.js
|
|
15588
|
+
import { bufferPtr } from "ffi";
|
|
15589
|
+
import * as os from "os";
|
|
15590
|
+
var C_BASIC_TYPE = [
|
|
15591
|
+
"void",
|
|
15592
|
+
"u8",
|
|
15593
|
+
"i8",
|
|
15594
|
+
"u16",
|
|
15595
|
+
"i16",
|
|
15596
|
+
"u32",
|
|
15597
|
+
"i32",
|
|
15598
|
+
"u64",
|
|
15599
|
+
"i64",
|
|
15600
|
+
"f32",
|
|
15601
|
+
"f64",
|
|
15602
|
+
"ptr"
|
|
15603
|
+
];
|
|
15604
|
+
var PTR_TOKEN_RE = /^<([^<>\s]*)>ptr(!|@[A-Za-z_]\w*)?$/;
|
|
15605
|
+
function isCPtrToken(t) {
|
|
15606
|
+
return PTR_TOKEN_RE.test(t);
|
|
15607
|
+
}
|
|
15608
|
+
function ptrName(t) {
|
|
15609
|
+
const m = PTR_TOKEN_RE.exec(t);
|
|
15610
|
+
return m?.[1] || "";
|
|
15611
|
+
}
|
|
15612
|
+
var cTokenToType = (t) => {
|
|
15613
|
+
if (isCPtrToken(t))
|
|
15614
|
+
return "ptr";
|
|
15615
|
+
else
|
|
15616
|
+
return t;
|
|
15617
|
+
};
|
|
15618
|
+
var PTR_SIZE = os.arch === "x64" ? 8 : 4;
|
|
15619
|
+
var SizeAlign = {
|
|
15620
|
+
u8: 1,
|
|
15621
|
+
i8: 1,
|
|
15622
|
+
u16: 2,
|
|
15623
|
+
i16: 2,
|
|
15624
|
+
u32: 4,
|
|
15625
|
+
i32: 4,
|
|
15626
|
+
u64: 8,
|
|
15627
|
+
i64: 8,
|
|
15628
|
+
f32: 4,
|
|
15629
|
+
f64: 8
|
|
15630
|
+
};
|
|
15631
|
+
var NULL = 0;
|
|
15632
|
+
function normToken(t) {
|
|
15633
|
+
if (isCPtrToken(t)) {
|
|
15634
|
+
const m = PTR_TOKEN_RE.exec(t);
|
|
15635
|
+
return m?.[2]?.startsWith("@") ? `<${m[1]}>ptr` : t;
|
|
15636
|
+
}
|
|
15637
|
+
const at = t.indexOf("@");
|
|
15638
|
+
const base = at >= 0 ? t.slice(0, at) : t;
|
|
15639
|
+
const suffixOk = at < 0 || /^[A-Za-z_]\w*$/.test(t.slice(at + 1));
|
|
15640
|
+
if (suffixOk && base !== "ptr" && C_BASIC_TYPE.includes(base))
|
|
15641
|
+
return base;
|
|
15642
|
+
throw new Error("Unknown token: " + t);
|
|
15643
|
+
}
|
|
15644
|
+
function readScalar(dv, off, k) {
|
|
15645
|
+
switch (k) {
|
|
15646
|
+
case "u8":
|
|
15647
|
+
return dv.getUint8(off);
|
|
15648
|
+
case "i8":
|
|
15649
|
+
return dv.getInt8(off);
|
|
15650
|
+
case "u16":
|
|
15651
|
+
return dv.getUint16(off, true);
|
|
15652
|
+
case "i16":
|
|
15653
|
+
return dv.getInt16(off, true);
|
|
15654
|
+
case "u32":
|
|
15655
|
+
return dv.getUint32(off, true);
|
|
15656
|
+
case "i32":
|
|
15657
|
+
return dv.getInt32(off, true);
|
|
15658
|
+
case "u64":
|
|
15659
|
+
return dv.getBigUint64(off, true);
|
|
15660
|
+
case "i64":
|
|
15661
|
+
return dv.getBigInt64(off, true);
|
|
15662
|
+
case "f32":
|
|
15663
|
+
return dv.getFloat32(off, true);
|
|
15664
|
+
case "f64":
|
|
15665
|
+
return dv.getFloat64(off, true);
|
|
15666
|
+
case "ptr": {
|
|
15667
|
+
return PTR_SIZE === 8 ? Number(dv.getBigInt64(off, true)) : dv.getInt32(off, true);
|
|
15668
|
+
}
|
|
15669
|
+
}
|
|
15670
|
+
}
|
|
15671
|
+
function writeScalar(dv, off, { k, v }) {
|
|
15672
|
+
switch (k) {
|
|
15673
|
+
case "u8":
|
|
15674
|
+
dv.setUint8(off, Number(v));
|
|
15675
|
+
break;
|
|
15676
|
+
case "i8":
|
|
15677
|
+
dv.setInt8(off, Number(v));
|
|
15678
|
+
break;
|
|
15679
|
+
case "u16":
|
|
15680
|
+
dv.setUint16(off, Number(v), true);
|
|
15681
|
+
break;
|
|
15682
|
+
case "i16":
|
|
15683
|
+
dv.setInt16(off, Number(v), true);
|
|
15684
|
+
break;
|
|
15685
|
+
case "u32":
|
|
15686
|
+
dv.setUint32(off, v >>> 0, true);
|
|
15687
|
+
break;
|
|
15688
|
+
case "i32":
|
|
15689
|
+
dv.setUint32(off, v >>> 0, true);
|
|
15690
|
+
break;
|
|
15691
|
+
case "u64":
|
|
15692
|
+
dv.setBigUint64(off, v, true);
|
|
15693
|
+
break;
|
|
15694
|
+
case "i64":
|
|
15695
|
+
dv.setBigInt64(off, v, true);
|
|
15696
|
+
break;
|
|
15697
|
+
case "f32":
|
|
15698
|
+
dv.setFloat32(off, v, true);
|
|
15699
|
+
break;
|
|
15700
|
+
case "f64":
|
|
15701
|
+
dv.setFloat64(off, v, true);
|
|
15702
|
+
break;
|
|
15703
|
+
case "ptr": {
|
|
15704
|
+
if (v == null) {
|
|
15705
|
+
throw new Error("ffi: got null/undefined for a ptr slot; pass the imported NULL constant for empty");
|
|
15706
|
+
}
|
|
15707
|
+
if (PTR_SIZE === 8)
|
|
15708
|
+
dv.setBigUint64(off, BigInt.asUintN(64, BigInt(v)), true);
|
|
15709
|
+
else
|
|
15710
|
+
dv.setUint32(off, v >>> 0, true);
|
|
15711
|
+
break;
|
|
15712
|
+
}
|
|
15713
|
+
}
|
|
15714
|
+
}
|
|
15715
|
+
function writeSlot(dv, off, e) {
|
|
15716
|
+
const { k, v } = e;
|
|
15717
|
+
if (k === "u8" || k === "i8" || k === "u16" || k === "i16") {
|
|
15718
|
+
dv.setUint32(off, Number(v) >>> 0, true);
|
|
15719
|
+
return;
|
|
15720
|
+
}
|
|
15721
|
+
writeScalar(dv, off, e);
|
|
15722
|
+
}
|
|
15723
|
+
var PtrArrayBuffer = class extends ArrayBuffer {
|
|
15724
|
+
ptr;
|
|
15725
|
+
constructor(byteLength) {
|
|
15726
|
+
super(byteLength);
|
|
15727
|
+
this.ptr = bufferPtr(this);
|
|
15728
|
+
}
|
|
15729
|
+
};
|
|
15730
|
+
|
|
15731
|
+
// _build/lib/ffi/bind.js
|
|
15732
|
+
var _dllCache = /* @__PURE__ */ new Map();
|
|
15733
|
+
function loadDll(dll) {
|
|
15734
|
+
const cached = _dllCache.get(dll);
|
|
15735
|
+
if (cached !== void 0)
|
|
15736
|
+
return cached;
|
|
15737
|
+
const loaded = win.LoadLibrary(dll);
|
|
15738
|
+
if (!loaded)
|
|
15739
|
+
throw new Error(`ffi-bind: LoadLibrary("${dll}") failed`);
|
|
15740
|
+
_dllCache.set(dll, loaded);
|
|
15741
|
+
return loaded;
|
|
15742
|
+
}
|
|
15743
|
+
function parseSig(sig) {
|
|
15744
|
+
const parts = sig.split(" -> ");
|
|
15745
|
+
if (parts.length !== 2) {
|
|
15746
|
+
throw new Error(`ffi-bind: invalid signature "${sig}" (expected "arg1 arg2 -> ret")`);
|
|
15747
|
+
}
|
|
15748
|
+
const rawArgs = parts[0].split(" ").filter((t) => t !== "");
|
|
15749
|
+
const argTokens = [];
|
|
15750
|
+
for (const raw of rawArgs) {
|
|
15751
|
+
const tok = normToken(raw);
|
|
15752
|
+
if (tok === "void") {
|
|
15753
|
+
throw new Error("Void can not in args");
|
|
15754
|
+
}
|
|
15755
|
+
argTokens.push(tok);
|
|
15756
|
+
}
|
|
15757
|
+
return {
|
|
15758
|
+
argTokens,
|
|
15759
|
+
retToken: normToken(parts[1]),
|
|
15760
|
+
sig
|
|
15761
|
+
};
|
|
15762
|
+
}
|
|
15763
|
+
function makeFn(proc, sig, encoders, decoders) {
|
|
15764
|
+
const ps = parseSig(sig);
|
|
15765
|
+
return (...a) => callPacked(proc, ps, a, encoders, decoders);
|
|
15766
|
+
}
|
|
15767
|
+
var IA32_ARG_SIZE = {
|
|
15768
|
+
u8: 4,
|
|
15769
|
+
i8: 4,
|
|
15770
|
+
u16: 4,
|
|
15771
|
+
i16: 4,
|
|
15772
|
+
u32: 4,
|
|
15773
|
+
i32: 4,
|
|
15774
|
+
u64: 8,
|
|
15775
|
+
i64: 8,
|
|
15776
|
+
f32: 4,
|
|
15777
|
+
f64: 8,
|
|
15778
|
+
ptr: PTR_SIZE
|
|
15779
|
+
};
|
|
15780
|
+
var X64_MIN_SLOTS = 4;
|
|
15781
|
+
function callPacked(proc, { argTokens, retToken, sig }, args, encoders, decoders) {
|
|
15782
|
+
const is64 = os2.arch === "x64";
|
|
15783
|
+
const getWidth = (t, is642) => {
|
|
15784
|
+
if (is642)
|
|
15785
|
+
return 8;
|
|
15786
|
+
if (isCPtrToken(t))
|
|
15787
|
+
return PTR_SIZE;
|
|
15788
|
+
return IA32_ARG_SIZE[t];
|
|
15789
|
+
};
|
|
15790
|
+
let total = 0;
|
|
15791
|
+
for (const t of argTokens)
|
|
15792
|
+
total += getWidth(t, is64);
|
|
15793
|
+
if (is64 && argTokens.length < X64_MIN_SLOTS)
|
|
15794
|
+
total = X64_MIN_SLOTS * 8;
|
|
15795
|
+
const argFrame = new ArrayBuffer(total);
|
|
15796
|
+
const dv = new DataView(argFrame);
|
|
15797
|
+
const held = [];
|
|
15798
|
+
let off = 0;
|
|
15799
|
+
for (let i = 0; i < argTokens.length; i++) {
|
|
15800
|
+
const argToken = argTokens[i];
|
|
15801
|
+
const nonnull = argToken.endsWith("!");
|
|
15802
|
+
const arg = args[i];
|
|
15803
|
+
if (isCPtrToken(argToken)) {
|
|
15804
|
+
const name = ptrName(argToken);
|
|
15805
|
+
if (typeof arg === "number") {
|
|
15806
|
+
if (nonnull && arg === 0)
|
|
15807
|
+
throw new Error(`ffi-bind: ${sig}: arg#${i + 1} <${name}>ptr! got 0 (null pointer forbidden here; the token marks this position non-null)`);
|
|
15808
|
+
writeSlot(dv, off, { k: "ptr", v: arg });
|
|
15809
|
+
} else {
|
|
15810
|
+
if (arg === null || arg === void 0) {
|
|
15811
|
+
throw new Error(`ffi-bind: <${name}>ptr got ${String(arg)}; pass the imported NULL constant for an empty pointer`);
|
|
15812
|
+
}
|
|
15813
|
+
const codec = encoders[name];
|
|
15814
|
+
if (!codec) {
|
|
15815
|
+
throw new Error(name === "" ? `ffi-bind: <>ptr expects number (NULL | Ptr), got ${typeof arg}; use <BYTE>ptr with a PtrArrayBuffer (new PtrArrayBuffer(n)), or ffi.bufferPtr(buf) for an address` : `ffi-bind: unknown layout "<${name}>ptr" (available: ${Object.keys(encoders).join(", ") || "none"})`);
|
|
15816
|
+
}
|
|
15817
|
+
if (!codec.encode) {
|
|
15818
|
+
throw new Error(`ffi-bind: <${name}>ptr has no encoder (out-only codec)`);
|
|
15819
|
+
}
|
|
15820
|
+
const buf = codec.encode(arg);
|
|
15821
|
+
held.push(buf);
|
|
15822
|
+
const p = buf.ptr;
|
|
15823
|
+
if (typeof p !== "number")
|
|
15824
|
+
throw new Error("ffi-bind: codec.encode must return a PtrArrayBuffer, got plain ArrayBuffer");
|
|
15825
|
+
if (nonnull && p === 0)
|
|
15826
|
+
throw new Error(`ffi-bind: ${sig}: arg#${i + 1} <${name}>ptr! encode produced 0 (null pointer forbidden here)`);
|
|
15827
|
+
writeSlot(dv, off, { k: "ptr", v: p });
|
|
15828
|
+
}
|
|
15829
|
+
} else {
|
|
15830
|
+
writeSlot(dv, off, { k: argToken, v: arg });
|
|
15831
|
+
}
|
|
15832
|
+
off += getWidth(argToken, is64);
|
|
15833
|
+
}
|
|
15834
|
+
const retBuf = new ArrayBuffer(8);
|
|
15835
|
+
const retIsFp = retToken === "f32" || retToken === "f64";
|
|
15836
|
+
ffi.ffiCall(proc, argFrame, retBuf, retIsFp ? 1 : 0);
|
|
15837
|
+
const raw = readRet(cTokenToType(retToken), retBuf);
|
|
15838
|
+
if (retToken.endsWith("!") && raw === 0)
|
|
15839
|
+
throw new Error(`ffi-bind: ${sig}: return ${retToken} got 0 (the token promises C never returns null here)`);
|
|
15840
|
+
if (isCPtrToken(retToken) && raw !== 0) {
|
|
15841
|
+
const name = ptrName(retToken);
|
|
15842
|
+
if (name !== "") {
|
|
15843
|
+
const codec = decoders[name];
|
|
15844
|
+
if (codec?.decode)
|
|
15845
|
+
return codec.decode(raw);
|
|
15846
|
+
}
|
|
15847
|
+
}
|
|
15848
|
+
return raw;
|
|
15849
|
+
}
|
|
15850
|
+
function readRet(ret, retBuf) {
|
|
15851
|
+
if (ret === "void")
|
|
15852
|
+
return void 0;
|
|
15853
|
+
return readScalar(new DataView(retBuf), 0, ret);
|
|
15854
|
+
}
|
|
15855
|
+
var WCHAR = {
|
|
15856
|
+
encode: (v) => {
|
|
15857
|
+
const u8 = new TextEncoder("utf-16le").encode(v + "\0");
|
|
15858
|
+
const out = new PtrArrayBuffer(u8.byteLength);
|
|
15859
|
+
new Uint8Array(out).set(u8);
|
|
15860
|
+
return out;
|
|
15861
|
+
},
|
|
15862
|
+
decode: (p) => {
|
|
15863
|
+
if (typeof p === "number") {
|
|
15864
|
+
let s2 = "";
|
|
15865
|
+
let addr = p;
|
|
15866
|
+
const start = addr;
|
|
15867
|
+
for (; ; ) {
|
|
15868
|
+
const lo = ffi.readByte(addr);
|
|
15869
|
+
const hi = ffi.readByte(addr + 1);
|
|
15870
|
+
if (lo === 0 && hi === 0)
|
|
15871
|
+
return s2;
|
|
15872
|
+
s2 += String.fromCharCode(lo | hi << 8);
|
|
15873
|
+
addr += 2;
|
|
15874
|
+
if (addr - start > 1 << 21) {
|
|
15875
|
+
throw new Error("ffi-bind: WCHAR decode exceeded 4MiB without NUL");
|
|
15876
|
+
}
|
|
15877
|
+
}
|
|
15878
|
+
}
|
|
15879
|
+
const u8 = new Uint8Array(p);
|
|
15880
|
+
const limit = u8.length & ~1;
|
|
15881
|
+
let s = "";
|
|
15882
|
+
for (let i = 0; i < limit; i += 2) {
|
|
15883
|
+
const c = u8[i] | u8[i + 1] << 8;
|
|
15884
|
+
if (c === 0)
|
|
15885
|
+
return s;
|
|
15886
|
+
s += String.fromCharCode(c);
|
|
15887
|
+
}
|
|
15888
|
+
return s;
|
|
15889
|
+
},
|
|
15890
|
+
alloc: (size = 256) => new PtrArrayBuffer(size * 2)
|
|
15891
|
+
};
|
|
15892
|
+
var BYTE = {
|
|
15893
|
+
encode: (v) => {
|
|
15894
|
+
if (!(v instanceof PtrArrayBuffer))
|
|
15895
|
+
throw new Error("ffi-bind: <BYTE>ptr wants a PtrArrayBuffer (new PtrArrayBuffer(n) / BYTE.alloc / struct.encode), not a plain ArrayBuffer");
|
|
15896
|
+
return v;
|
|
15897
|
+
},
|
|
15898
|
+
alloc: (byteLen) => new PtrArrayBuffer(byteLen)
|
|
15899
|
+
};
|
|
15900
|
+
var builtinCodecs = { WCHAR, BYTE };
|
|
15901
|
+
function bind(dll, name, sig, encoders, decoders) {
|
|
15902
|
+
const proc = win.GetProcAddress(loadDll(dll), name);
|
|
15903
|
+
if (!proc)
|
|
15904
|
+
throw new Error(`ffi-bind: proc "${name}" not found in ${dll}`);
|
|
15905
|
+
const effDec = decoders ?? encoders;
|
|
15906
|
+
return makeFn(proc, sig, { ...builtinCodecs, ...encoders }, { ...builtinCodecs, ...effDec ?? {} });
|
|
15907
|
+
}
|
|
15908
|
+
var leakRegistry = new FinalizationRegistry((held) => {
|
|
15909
|
+
std.printf('[ffi] closure leaked (GCed without dispose): sig="%s" ptr=0x%x\n', held.sig, held.ptr);
|
|
15910
|
+
});
|
|
15911
|
+
|
|
15912
|
+
// _build/lib/ffi/struct.js
|
|
15913
|
+
import * as ffi2 from "ffi";
|
|
15914
|
+
function alignUp(v, a) {
|
|
15915
|
+
return v + a - 1 & ~(a - 1);
|
|
15916
|
+
}
|
|
15917
|
+
var isCNumberToken = (t) => SizeAlign[t] !== void 0;
|
|
15918
|
+
function lower(v) {
|
|
15919
|
+
if (typeof v === "string") {
|
|
15920
|
+
const st = /^(u8|u16)\[(\d+)\]@(utf-8|utf-16le)$/.exec(v);
|
|
15921
|
+
if (st) {
|
|
15922
|
+
const length = Number(st[2]);
|
|
15923
|
+
if (!Number.isInteger(length) || length < 1)
|
|
15924
|
+
throw new Error(`ffi-struct: string length must be an integer >= 1, got ${length}`);
|
|
15925
|
+
const s2 = st[1] === "u8" ? 1 : 2;
|
|
15926
|
+
return { size: s2 * length, align: s2, type: { tag: "string", encoding: st[3] } };
|
|
15927
|
+
}
|
|
15928
|
+
const a = /^([^\[\]]+)\[(\d+)\]$/.exec(v);
|
|
15929
|
+
if (a) {
|
|
15930
|
+
const length = Number(a[2]);
|
|
15931
|
+
if (!Number.isInteger(length) || length < 1)
|
|
15932
|
+
throw new Error(`ffi-struct: array length must be an integer >= 1, got ${length}`);
|
|
15933
|
+
const el = lower(a[1]);
|
|
15934
|
+
if (el.type.tag === "bitfield")
|
|
15935
|
+
throw new Error("ffi-struct: bitfields cannot be array elements");
|
|
15936
|
+
return {
|
|
15937
|
+
size: el.size * length,
|
|
15938
|
+
align: el.align,
|
|
15939
|
+
type: { tag: "array", elementType: el.type, elementSize: el.size }
|
|
15940
|
+
};
|
|
15941
|
+
}
|
|
15942
|
+
const b6 = /^([A-Za-z_]\w*):(\d+)$/.exec(v);
|
|
15943
|
+
if (b6) {
|
|
15944
|
+
const rawUnit = b6[1];
|
|
15945
|
+
const unit = normToken(rawUnit);
|
|
15946
|
+
if (!isCNumberToken(unit) || unit === "f32" || unit === "f64")
|
|
15947
|
+
throw new Error(`ffi-struct: bitfield unit must be an integer type, got "${rawUnit}"`);
|
|
15948
|
+
const width = Number(b6[2]);
|
|
15949
|
+
const s2 = SizeAlign[unit];
|
|
15950
|
+
const cap = s2 * 8;
|
|
15951
|
+
if (!Number.isInteger(width) || width < 1)
|
|
15952
|
+
throw new Error(`ffi-struct: bitfield width must be an integer >= 1, got ${width}`);
|
|
15953
|
+
if (width > cap)
|
|
15954
|
+
throw new Error(`ffi-struct: bitfield width ${width} exceeds unit width ${cap}`);
|
|
15955
|
+
return { size: s2, align: s2, type: { tag: "bitfield", unit, bit: 0, width } };
|
|
15956
|
+
}
|
|
15957
|
+
const k = normToken(v);
|
|
15958
|
+
if (isCPtrToken(k))
|
|
15959
|
+
return { size: PTR_SIZE, align: PTR_SIZE, type: { tag: "basic", kind: "ptr" } };
|
|
15960
|
+
if (!isCNumberToken(k))
|
|
15961
|
+
throw new Error(`ffi-struct: unknown kind "${v}"`);
|
|
15962
|
+
const s = SizeAlign[k];
|
|
15963
|
+
return { size: s, align: s, type: { tag: "basic", kind: k } };
|
|
15964
|
+
}
|
|
15965
|
+
if (v && typeof v === "object") {
|
|
15966
|
+
const o = v;
|
|
15967
|
+
const tag = o["#"];
|
|
15968
|
+
if (tag === void 0)
|
|
15969
|
+
throw new Error(`ffi-struct: nested object value requires a '#' key ('struct' | 'union' | 'array')`);
|
|
15970
|
+
if (tag === "array" && "#pack" in o)
|
|
15971
|
+
throw new Error(`ffi-struct: '#pack' is only allowed on struct/union, got '${tag}'`);
|
|
15972
|
+
if (tag === "array") {
|
|
15973
|
+
const length = o["length"];
|
|
15974
|
+
if (!Number.isInteger(length) || length < 1)
|
|
15975
|
+
throw new Error(`ffi-struct: array length must be an integer >= 1, got ${String(length)}`);
|
|
15976
|
+
const el = lower(o["element"]);
|
|
15977
|
+
if (el.type.tag === "bitfield")
|
|
15978
|
+
throw new Error("ffi-struct: bitfields cannot be array elements");
|
|
15979
|
+
return {
|
|
15980
|
+
size: el.size * length,
|
|
15981
|
+
align: el.align,
|
|
15982
|
+
type: { tag: "array", elementType: el.type, elementSize: el.size }
|
|
15983
|
+
};
|
|
15984
|
+
}
|
|
15985
|
+
if (tag === "struct" || tag === "union") {
|
|
15986
|
+
const l = computeStructLayout(v);
|
|
15987
|
+
return { size: l.size, align: l.maxEffectiveAlign, type: { tag, fields: l.fields } };
|
|
15988
|
+
}
|
|
15989
|
+
throw new Error(`ffi-struct: unknown '#' declaration ${JSON.stringify(String(tag))}`);
|
|
15990
|
+
}
|
|
15991
|
+
throw new Error(`ffi-struct: invalid member value: ${String(v)}`);
|
|
15992
|
+
}
|
|
15993
|
+
function computeStructLayout(t) {
|
|
15994
|
+
const isStruct = t["#"] === "struct";
|
|
15995
|
+
const pack = t["#pack"] ?? 8;
|
|
15996
|
+
let maxEffectiveAlign = 1;
|
|
15997
|
+
let maxMemberSize = 0;
|
|
15998
|
+
const fields = [];
|
|
15999
|
+
let cursor = 0;
|
|
16000
|
+
let unitBase = -1;
|
|
16001
|
+
let unitBits = 0;
|
|
16002
|
+
let unitSize = 0;
|
|
16003
|
+
const flushUnit = () => {
|
|
16004
|
+
if (unitBase < 0)
|
|
16005
|
+
return;
|
|
16006
|
+
cursor = alignUp(unitBase + Math.ceil(unitBits / 8), unitSize);
|
|
16007
|
+
unitBase = -1;
|
|
16008
|
+
};
|
|
16009
|
+
for (const [rawName, v] of Object.entries(t)) {
|
|
16010
|
+
if (rawName.startsWith("#"))
|
|
16011
|
+
continue;
|
|
16012
|
+
const m = /^([^@]+)@(\d+)$/.exec(rawName);
|
|
16013
|
+
const name = m ? m[1] : rawName;
|
|
16014
|
+
const alignas = m ? Number(m[2]) : 0;
|
|
16015
|
+
const { size, align: natural, type } = lower(v);
|
|
16016
|
+
const nonnull = typeof v === "string" && v.endsWith("!");
|
|
16017
|
+
let align = natural;
|
|
16018
|
+
if (pack > 0)
|
|
16019
|
+
align = Math.min(pack, align);
|
|
16020
|
+
if (alignas)
|
|
16021
|
+
align = Math.max(align, alignas);
|
|
16022
|
+
if (type.tag === "bitfield") {
|
|
16023
|
+
if (name.startsWith("$"))
|
|
16024
|
+
throw new Error("ffi-struct: bitfield members must be named");
|
|
16025
|
+
if (!isStruct) {
|
|
16026
|
+
fields.push({ name, offset: 0, size, type: { ...type, bit: 0 } });
|
|
16027
|
+
maxEffectiveAlign = Math.max(maxEffectiveAlign, align);
|
|
16028
|
+
maxMemberSize = Math.max(maxMemberSize, size);
|
|
16029
|
+
continue;
|
|
16030
|
+
}
|
|
16031
|
+
const width = type.width;
|
|
16032
|
+
if (unitBase < 0 || size !== unitSize || unitBits + width > unitSize * 8) {
|
|
16033
|
+
if (unitBase >= 0)
|
|
16034
|
+
flushUnit();
|
|
16035
|
+
const offset2 = alignUp(cursor, align);
|
|
16036
|
+
unitBase = offset2;
|
|
16037
|
+
unitBits = 0;
|
|
16038
|
+
unitSize = size;
|
|
16039
|
+
}
|
|
16040
|
+
fields.push({
|
|
16041
|
+
name,
|
|
16042
|
+
offset: unitBase,
|
|
16043
|
+
// 单元基址(不是位域自己的地址)
|
|
16044
|
+
size,
|
|
16045
|
+
type: { ...type, bit: unitBits }
|
|
16046
|
+
});
|
|
16047
|
+
unitBits += width;
|
|
16048
|
+
maxEffectiveAlign = Math.max(maxEffectiveAlign, align);
|
|
16049
|
+
maxMemberSize = Math.max(maxMemberSize, size);
|
|
16050
|
+
continue;
|
|
16051
|
+
}
|
|
16052
|
+
flushUnit();
|
|
16053
|
+
const offset = alignUp(cursor, align);
|
|
16054
|
+
if (!name.startsWith("$")) {
|
|
16055
|
+
fields.push({ name, offset, size, type, ...nonnull ? { nonnull: true } : {} });
|
|
16056
|
+
} else {
|
|
16057
|
+
if (type.tag !== "struct" && type.tag !== "union")
|
|
16058
|
+
throw new Error(`ffi-struct: anonymous member "${name}" must be a struct/union`);
|
|
16059
|
+
for (const cf of type.fields)
|
|
16060
|
+
fields.push({ ...cf, offset: cf.offset + offset });
|
|
16061
|
+
}
|
|
16062
|
+
if (isStruct)
|
|
16063
|
+
cursor = offset + size;
|
|
16064
|
+
maxEffectiveAlign = Math.max(maxEffectiveAlign, align);
|
|
16065
|
+
maxMemberSize = Math.max(maxMemberSize, size);
|
|
16066
|
+
}
|
|
16067
|
+
flushUnit();
|
|
16068
|
+
return {
|
|
16069
|
+
size: isStruct ? alignUp(cursor, maxEffectiveAlign) : alignUp(maxMemberSize, maxEffectiveAlign),
|
|
16070
|
+
maxEffectiveAlign,
|
|
16071
|
+
fields
|
|
16072
|
+
};
|
|
16073
|
+
}
|
|
16074
|
+
function readUnitRaw(dv, off, unit) {
|
|
16075
|
+
const s = SizeAlign[unit];
|
|
16076
|
+
if (s === 1)
|
|
16077
|
+
return BigInt(dv.getUint8(off));
|
|
16078
|
+
if (s === 2)
|
|
16079
|
+
return BigInt(dv.getUint16(off, true));
|
|
16080
|
+
if (s === 4)
|
|
16081
|
+
return BigInt(dv.getUint32(off, true));
|
|
16082
|
+
return dv.getBigUint64(off, true);
|
|
16083
|
+
}
|
|
16084
|
+
function writeUnitRaw(dv, off, unit, v) {
|
|
16085
|
+
const s = SizeAlign[unit];
|
|
16086
|
+
if (s === 1) {
|
|
16087
|
+
dv.setUint8(off, Number(v & 0xffn));
|
|
16088
|
+
return;
|
|
16089
|
+
}
|
|
16090
|
+
if (s === 2) {
|
|
16091
|
+
dv.setUint16(off, Number(v & 0xffffn), true);
|
|
16092
|
+
return;
|
|
16093
|
+
}
|
|
16094
|
+
if (s === 4) {
|
|
16095
|
+
dv.setUint32(off, Number(v & 0xffffffffn), true);
|
|
16096
|
+
return;
|
|
16097
|
+
}
|
|
16098
|
+
dv.setBigUint64(off, v & 0xffffffffffffffffn, true);
|
|
16099
|
+
}
|
|
16100
|
+
function readBitfield(dv, off, t) {
|
|
16101
|
+
const w = BigInt(t.width);
|
|
16102
|
+
let v = readUnitRaw(dv, off, t.unit) >> BigInt(t.bit) & (1n << w) - 1n;
|
|
16103
|
+
if (t.unit[0] === "i" && v & 1n << w - 1n)
|
|
16104
|
+
v -= 1n << w;
|
|
16105
|
+
if (t.width > 53)
|
|
16106
|
+
return v;
|
|
16107
|
+
return Number(v);
|
|
16108
|
+
}
|
|
16109
|
+
function writeBitfield(dv, off, t, val) {
|
|
16110
|
+
const w = BigInt(t.width);
|
|
16111
|
+
const bit = BigInt(t.bit);
|
|
16112
|
+
const widthMask = (1n << w) - 1n;
|
|
16113
|
+
const posMask = widthMask << bit;
|
|
16114
|
+
const raw = readUnitRaw(dv, off, t.unit);
|
|
16115
|
+
const bits = (typeof val === "bigint" ? val : BigInt(Math.trunc(val))) & widthMask;
|
|
16116
|
+
writeUnitRaw(dv, off, t.unit, raw & ~posMask | bits << bit);
|
|
16117
|
+
}
|
|
16118
|
+
var stringEncoders = {
|
|
16119
|
+
"utf-8": new TextEncoder("utf-8"),
|
|
16120
|
+
"utf-16le": new TextEncoder("utf-16le")
|
|
16121
|
+
};
|
|
16122
|
+
var stringDecoders = {
|
|
16123
|
+
"utf-8": new TextDecoder("utf-8", { ignoreBOM: true }),
|
|
16124
|
+
"utf-16le": new TextDecoder("utf-16le", { ignoreBOM: true })
|
|
16125
|
+
};
|
|
16126
|
+
function readString(dv, off, size, enc) {
|
|
16127
|
+
const bytes = new Uint8Array(dv.buffer, dv.byteOffset + off, size);
|
|
16128
|
+
const unit = enc === "utf-16le" ? 2 : 1;
|
|
16129
|
+
let end = size;
|
|
16130
|
+
for (let i = 0; i + unit <= size; i += unit) {
|
|
16131
|
+
if (bytes[i] === 0 && (unit === 1 || bytes[i + 1] === 0)) {
|
|
16132
|
+
end = i;
|
|
16133
|
+
break;
|
|
16134
|
+
}
|
|
16135
|
+
}
|
|
16136
|
+
return stringDecoders[enc].decode(bytes.subarray(0, end));
|
|
16137
|
+
}
|
|
16138
|
+
function writeString(dv, off, size, enc, v) {
|
|
16139
|
+
const bytes = new Uint8Array(dv.buffer, dv.byteOffset + off, size);
|
|
16140
|
+
bytes.fill(0);
|
|
16141
|
+
const unit = enc === "utf-16le" ? 2 : 1;
|
|
16142
|
+
const cap = size - unit;
|
|
16143
|
+
if (cap <= 0)
|
|
16144
|
+
return;
|
|
16145
|
+
const src = stringEncoders[enc].encode(String(v ?? ""));
|
|
16146
|
+
bytes.set(src.subarray(0, Math.min(src.length, cap)));
|
|
16147
|
+
}
|
|
16148
|
+
function readArray(dv, off, size, t) {
|
|
16149
|
+
const count = t.elementSize > 0 ? size / t.elementSize : 0;
|
|
16150
|
+
const out = [];
|
|
16151
|
+
for (let i = 0; i < count; i++)
|
|
16152
|
+
out.push(readElement(dv, off + i * t.elementSize, t.elementType, t.elementSize));
|
|
16153
|
+
return out;
|
|
16154
|
+
}
|
|
16155
|
+
function writeArray(dv, off, size, t, v) {
|
|
16156
|
+
const count = t.elementSize > 0 ? size / t.elementSize : 0;
|
|
16157
|
+
const list = v ?? [];
|
|
16158
|
+
for (let i = 0; i < count; i++)
|
|
16159
|
+
writeElement(dv, off + i * t.elementSize, t.elementType, t.elementSize, list[i]);
|
|
16160
|
+
}
|
|
16161
|
+
function readElement(dv, off, t, size) {
|
|
16162
|
+
switch (t.tag) {
|
|
16163
|
+
case "basic":
|
|
16164
|
+
return readScalar(dv, off, t.kind);
|
|
16165
|
+
case "bitfield":
|
|
16166
|
+
return readBitfield(dv, off, t);
|
|
16167
|
+
case "string":
|
|
16168
|
+
return readString(dv, off, size, t.encoding);
|
|
16169
|
+
case "struct":
|
|
16170
|
+
case "union":
|
|
16171
|
+
return doDecode(dv, off, t.fields);
|
|
16172
|
+
case "array":
|
|
16173
|
+
return readArray(dv, off, size, t);
|
|
16174
|
+
}
|
|
16175
|
+
}
|
|
16176
|
+
function writeElement(dv, off, t, size, val) {
|
|
16177
|
+
switch (t.tag) {
|
|
16178
|
+
// TODO: remove this any
|
|
16179
|
+
case "basic":
|
|
16180
|
+
writeScalar(dv, off, { k: t.kind, v: val });
|
|
16181
|
+
break;
|
|
16182
|
+
// 直传(不 Number()):writeBitfield 的 val 是 number | bigint,
|
|
16183
|
+
// 64 位单元走 bigint,先 Number() 会把 >2^53 的位域值截断。
|
|
16184
|
+
case "bitfield":
|
|
16185
|
+
writeBitfield(dv, off, t, val ?? 0);
|
|
16186
|
+
break;
|
|
16187
|
+
case "string":
|
|
16188
|
+
writeString(dv, off, size, t.encoding, val);
|
|
16189
|
+
break;
|
|
16190
|
+
case "struct":
|
|
16191
|
+
case "union":
|
|
16192
|
+
doEncode(dv, off, t.fields, val ?? {});
|
|
16193
|
+
break;
|
|
16194
|
+
case "array":
|
|
16195
|
+
writeArray(dv, off, size, t, val);
|
|
16196
|
+
break;
|
|
16197
|
+
}
|
|
16198
|
+
}
|
|
16199
|
+
function doDecode(dv, base, fields) {
|
|
16200
|
+
const out = {};
|
|
16201
|
+
for (const f of fields) {
|
|
16202
|
+
const v = readElement(dv, base + f.offset, f.type, f.size);
|
|
16203
|
+
if (f.nonnull && v === 0)
|
|
16204
|
+
throw new Error(`ffi-struct: decode: '!' field "${f.name}" got 0 (C did not fill it, or decode was called on an unfilled slot)`);
|
|
16205
|
+
out[f.name] = v;
|
|
16206
|
+
}
|
|
16207
|
+
return out;
|
|
16208
|
+
}
|
|
16209
|
+
function doEncode(dv, base, fields, v) {
|
|
16210
|
+
for (const f of fields) {
|
|
16211
|
+
if (v[f.name] === void 0)
|
|
16212
|
+
continue;
|
|
16213
|
+
writeElement(dv, base + f.offset, f.type, f.size, v[f.name]);
|
|
16214
|
+
}
|
|
16215
|
+
}
|
|
16216
|
+
function createStruct(t) {
|
|
16217
|
+
const { fields, size, maxEffectiveAlign } = computeStructLayout(t);
|
|
16218
|
+
return {
|
|
16219
|
+
__struct: t,
|
|
16220
|
+
size,
|
|
16221
|
+
structAlign: maxEffectiveAlign,
|
|
16222
|
+
decode: (p) => {
|
|
16223
|
+
if (typeof p === "number") {
|
|
16224
|
+
const buf = new ArrayBuffer(size);
|
|
16225
|
+
const u8 = new Uint8Array(buf);
|
|
16226
|
+
for (let i = 0; i < size; i++)
|
|
16227
|
+
u8[i] = ffi2.readByte(p + i);
|
|
16228
|
+
return doDecode(new DataView(buf), 0, fields);
|
|
16229
|
+
}
|
|
16230
|
+
return doDecode(new DataView(p), 0, fields);
|
|
16231
|
+
},
|
|
16232
|
+
alloc: (() => new PtrArrayBuffer(size)),
|
|
16233
|
+
encode: ((v, buf) => {
|
|
16234
|
+
if (v === void 0 || v === null)
|
|
16235
|
+
throw new Error(`ffi-struct: encode(v) requires an argument; use alloc() for a zeroed out-param slot`);
|
|
16236
|
+
const out = buf ?? new PtrArrayBuffer(size);
|
|
16237
|
+
doEncode(new DataView(out), 0, fields, v);
|
|
16238
|
+
return out;
|
|
16239
|
+
}),
|
|
16240
|
+
offsetOf: (name) => {
|
|
16241
|
+
for (const f of fields)
|
|
16242
|
+
if (f.name === name)
|
|
16243
|
+
return f.offset;
|
|
16244
|
+
throw new Error(`ffi-struct: no field "${name}"`);
|
|
16245
|
+
}
|
|
16246
|
+
};
|
|
16247
|
+
}
|
|
16248
|
+
function buildDecl(kind, member, pack) {
|
|
16249
|
+
const decl = { "#": kind };
|
|
16250
|
+
if (pack !== void 0)
|
|
16251
|
+
decl["#pack"] = pack;
|
|
16252
|
+
for (const [k, v] of Object.entries(member))
|
|
16253
|
+
if (!k.startsWith("#"))
|
|
16254
|
+
decl[k] = v;
|
|
16255
|
+
return decl;
|
|
16256
|
+
}
|
|
16257
|
+
function struct(a, b6, c) {
|
|
16258
|
+
const isNamed = typeof a === "string";
|
|
16259
|
+
const raw = isNamed ? b6 : a;
|
|
16260
|
+
const opts = isNamed ? c : b6;
|
|
16261
|
+
return createStruct(buildDecl("struct", raw, opts?.pack));
|
|
16262
|
+
}
|
|
16263
|
+
|
|
16264
|
+
// _build/lib/windows/structs.js
|
|
16265
|
+
var RECT = /* @__PURE__ */ struct("RECT", {
|
|
16266
|
+
left: "i32",
|
|
16267
|
+
top: "i32",
|
|
16268
|
+
right: "i32",
|
|
16269
|
+
bottom: "i32"
|
|
16270
|
+
});
|
|
16271
|
+
var POINT = /* @__PURE__ */ struct("POINT", {
|
|
16272
|
+
x: "i32",
|
|
16273
|
+
y: "i32"
|
|
16274
|
+
});
|
|
16275
|
+
var SIZE = /* @__PURE__ */ struct("SIZE", {
|
|
16276
|
+
cx: "i32",
|
|
16277
|
+
cy: "i32"
|
|
16278
|
+
});
|
|
16279
|
+
var LOGFONTW = /* @__PURE__ */ struct("LOGFONTW", {
|
|
16280
|
+
lfHeight: "i32",
|
|
16281
|
+
lfWidth: "i32",
|
|
16282
|
+
lfEscapement: "i32",
|
|
16283
|
+
lfOrientation: "i32",
|
|
16284
|
+
lfWeight: "i32",
|
|
16285
|
+
lfItalic: "u8",
|
|
16286
|
+
lfUnderline: "u8",
|
|
16287
|
+
lfStrikeOut: "u8",
|
|
16288
|
+
lfCharSet: "u8",
|
|
16289
|
+
lfOutPrecision: "u8",
|
|
16290
|
+
lfClipPrecision: "u8",
|
|
16291
|
+
lfQuality: "u8",
|
|
16292
|
+
lfPitchAndFamily: "u8",
|
|
16293
|
+
lfFaceName: "u16[32]@utf-16le"
|
|
16294
|
+
});
|
|
16295
|
+
var OPENFILENAMEW = /* @__PURE__ */ struct("OPENFILENAMEW", {
|
|
16296
|
+
lStructSize: "u32",
|
|
16297
|
+
hwndOwner: "<HWND>ptr",
|
|
16298
|
+
hInstance: "<HMODULE>ptr",
|
|
16299
|
+
lpstrFilter: "<>ptr",
|
|
16300
|
+
lpstrCustomFilter: "<>ptr",
|
|
16301
|
+
nMaxCustFilter: "u32",
|
|
16302
|
+
nFilterIndex: "u32",
|
|
16303
|
+
lpstrFile: "<>ptr",
|
|
16304
|
+
nMaxFile: "u32",
|
|
16305
|
+
lpstrFileTitle: "<>ptr",
|
|
16306
|
+
nMaxFileTitle: "u32",
|
|
16307
|
+
lpstrInitialDir: "<>ptr",
|
|
16308
|
+
lpstrTitle: "<>ptr",
|
|
16309
|
+
Flags: "u32",
|
|
16310
|
+
nFileOffset: "u16",
|
|
16311
|
+
nFileExtension: "u16",
|
|
16312
|
+
lpstrDefExt: "<>ptr",
|
|
16313
|
+
lCustData: "<>ptr",
|
|
16314
|
+
lpfnHook: "<>ptr",
|
|
16315
|
+
lpTemplateName: "<>ptr",
|
|
16316
|
+
pvReserved: "<>ptr",
|
|
16317
|
+
dwReserved: "u32",
|
|
16318
|
+
FlagsEx: "u32"
|
|
16319
|
+
});
|
|
16320
|
+
var BROWSEINFOW = /* @__PURE__ */ struct("BROWSEINFOW", {
|
|
16321
|
+
hwndOwner: "<HWND>ptr",
|
|
16322
|
+
pidlRoot: "<>ptr",
|
|
16323
|
+
pszDisplayName: "<>ptr",
|
|
16324
|
+
lpszTitle: "<>ptr",
|
|
16325
|
+
ulFlags: "u32",
|
|
16326
|
+
lpfn: "<>ptr",
|
|
16327
|
+
lParam: "<>ptr",
|
|
16328
|
+
iImage: "i32"
|
|
16329
|
+
});
|
|
16330
|
+
var NMHDR = /* @__PURE__ */ struct("NMHDR", {
|
|
16331
|
+
hwndFrom: "<HWND>ptr",
|
|
16332
|
+
idFrom: "<>ptr",
|
|
16333
|
+
code: "i32"
|
|
16334
|
+
});
|
|
16335
|
+
var SYSTEMTIME = /* @__PURE__ */ struct("SYSTEMTIME", {
|
|
16336
|
+
wYear: "u16",
|
|
16337
|
+
wMonth: "u16",
|
|
16338
|
+
wDayOfWeek: "u16",
|
|
16339
|
+
wDay: "u16",
|
|
16340
|
+
wHour: "u16",
|
|
16341
|
+
wMinute: "u16",
|
|
16342
|
+
wSecond: "u16",
|
|
16343
|
+
wMilliseconds: "u16"
|
|
16344
|
+
});
|
|
16345
|
+
var NMDATETIMECHANGE = /* @__PURE__ */ struct("NMDATETIMECHANGE", {
|
|
16346
|
+
hdr: NMHDR.__struct,
|
|
16347
|
+
dwFlags: "u32",
|
|
16348
|
+
st: SYSTEMTIME.__struct
|
|
16349
|
+
});
|
|
16350
|
+
var LITEM = /* @__PURE__ */ struct("LITEM", {
|
|
16351
|
+
mask: "u32",
|
|
16352
|
+
iLink: "i32",
|
|
16353
|
+
state: "u32",
|
|
16354
|
+
stateMask: "u32",
|
|
16355
|
+
szID: "u16[48]@utf-16le",
|
|
16356
|
+
szUrl: "u16[2084]@utf-16le"
|
|
16357
|
+
});
|
|
16358
|
+
var NMLINK = /* @__PURE__ */ struct("NMLINK", {
|
|
16359
|
+
hdr: NMHDR.__struct,
|
|
16360
|
+
item: LITEM.__struct
|
|
16361
|
+
});
|
|
16362
|
+
var NMCUSTOMDRAW = /* @__PURE__ */ struct("NMCUSTOMDRAW", {
|
|
16363
|
+
hdr: NMHDR.__struct,
|
|
16364
|
+
dwDrawStage: "u32",
|
|
16365
|
+
hdc: "<HDC>ptr",
|
|
16366
|
+
rc: "i32[4]",
|
|
16367
|
+
dwItemSpec: "<>ptr",
|
|
16368
|
+
uItemState: "u32",
|
|
16369
|
+
lItemlParam: "<>ptr"
|
|
16370
|
+
});
|
|
16371
|
+
var NMLVCUSTOMDRAW = /* @__PURE__ */ struct("NMLVCUSTOMDRAW", {
|
|
16372
|
+
hdr: NMHDR.__struct,
|
|
16373
|
+
dwDrawStage: "u32",
|
|
16374
|
+
hdc: "<HDC>ptr",
|
|
16375
|
+
rc: "i32[4]",
|
|
16376
|
+
dwItemSpec: "<>ptr",
|
|
16377
|
+
uItemState: "u32",
|
|
16378
|
+
lItemlParam: "<>ptr",
|
|
16379
|
+
clrText: "u32",
|
|
16380
|
+
clrTextBk: "u32",
|
|
16381
|
+
iSubItem: "i32",
|
|
16382
|
+
dwItemType: "u32"
|
|
16383
|
+
});
|
|
16384
|
+
var NMLISTVIEW = /* @__PURE__ */ struct("NMLISTVIEW", {
|
|
16385
|
+
hdr: NMHDR.__struct,
|
|
16386
|
+
iItem: "i32",
|
|
16387
|
+
iSubItem: "i32",
|
|
16388
|
+
uNewState: "u32",
|
|
16389
|
+
uOldState: "u32",
|
|
16390
|
+
uChanged: "u32",
|
|
16391
|
+
ptAction: "i32[2]",
|
|
16392
|
+
lParam: "<>ptr"
|
|
16393
|
+
});
|
|
16394
|
+
var TCITEMW = /* @__PURE__ */ struct("TCITEMW", {
|
|
16395
|
+
mask: "u32",
|
|
16396
|
+
dwState: "u32",
|
|
16397
|
+
dwStateMask: "u32",
|
|
16398
|
+
pszText: "<>ptr",
|
|
16399
|
+
cchTextMax: "i32",
|
|
16400
|
+
iImage: "i32",
|
|
16401
|
+
lParam: "<>ptr"
|
|
16402
|
+
});
|
|
16403
|
+
var TVITEM = /* @__PURE__ */ struct("TVITEM", {
|
|
16404
|
+
mask: "u32",
|
|
16405
|
+
hItem: "<>ptr",
|
|
16406
|
+
state: "u32",
|
|
16407
|
+
stateMask: "u32",
|
|
16408
|
+
pszText: "<>ptr",
|
|
16409
|
+
cchTextMax: "i32",
|
|
16410
|
+
iImage: "i32",
|
|
16411
|
+
iSelectedImage: "i32",
|
|
16412
|
+
cChildren: "i32",
|
|
16413
|
+
lParam: "<>ptr"
|
|
16414
|
+
});
|
|
16415
|
+
var TVINSERTSTRUCT = /* @__PURE__ */ struct("TVINSERTSTRUCT", {
|
|
16416
|
+
hParent: "<>ptr",
|
|
16417
|
+
hInsertAfter: "<>ptr",
|
|
16418
|
+
item: TVITEM.__struct
|
|
16419
|
+
});
|
|
16420
|
+
var LVHITTESTINFO = /* @__PURE__ */ struct("LVHITTESTINFO", {
|
|
16421
|
+
pt: "i32[2]",
|
|
16422
|
+
flags: "u32",
|
|
16423
|
+
iItem: "i32",
|
|
16424
|
+
iSubItem: "i32",
|
|
16425
|
+
iGroup: "i32"
|
|
16426
|
+
});
|
|
16427
|
+
var LVITEMW = /* @__PURE__ */ struct("LVITEMW", {
|
|
16428
|
+
mask: "u32",
|
|
16429
|
+
iItem: "i32",
|
|
16430
|
+
iSubItem: "i32",
|
|
16431
|
+
state: "u32",
|
|
16432
|
+
stateMask: "u32",
|
|
16433
|
+
pszText: "<>ptr",
|
|
16434
|
+
cchTextMax: "i32",
|
|
16435
|
+
iImage: "i32",
|
|
16436
|
+
lParam: "<>ptr",
|
|
16437
|
+
iIndent: "i32",
|
|
16438
|
+
iGroupId: "i32",
|
|
16439
|
+
cColumns: "u32",
|
|
16440
|
+
puColumns: "<>ptr",
|
|
16441
|
+
piColFmt: "<>ptr",
|
|
16442
|
+
iGroup: "i32"
|
|
16443
|
+
});
|
|
16444
|
+
var LVCOLUMNW = /* @__PURE__ */ struct("LVCOLUMNW", {
|
|
16445
|
+
mask: "u32",
|
|
16446
|
+
fmt: "i32",
|
|
16447
|
+
cx: "i32",
|
|
16448
|
+
pszText: "<>ptr",
|
|
16449
|
+
cchTextMax: "i32",
|
|
16450
|
+
iSubItem: "i32",
|
|
16451
|
+
iImage: "i32",
|
|
16452
|
+
iOrder: "i32",
|
|
16453
|
+
cxMin: "i32",
|
|
16454
|
+
cxDefault: "i32",
|
|
16455
|
+
cxIdeal: "i32"
|
|
16456
|
+
});
|
|
16457
|
+
var MSG = /* @__PURE__ */ struct("MSG", {
|
|
16458
|
+
hwnd: "<HWND>ptr",
|
|
16459
|
+
message: "u32",
|
|
16460
|
+
wParam: "<>ptr",
|
|
16461
|
+
lParam: "<>ptr",
|
|
16462
|
+
time: "u32",
|
|
16463
|
+
pt: POINT.__struct
|
|
16464
|
+
});
|
|
16465
|
+
var PAINTSTRUCT = /* @__PURE__ */ struct("PAINTSTRUCT", {
|
|
16466
|
+
hdc: "<HDC>ptr",
|
|
16467
|
+
fErase: "i32",
|
|
16468
|
+
rcPaint: RECT.__struct,
|
|
16469
|
+
fRestore: "i32",
|
|
16470
|
+
fIncUpdate: "i32",
|
|
16471
|
+
rgbReserved: "u8[32]"
|
|
16472
|
+
});
|
|
16473
|
+
|
|
16474
|
+
// _build/lib/windows/user32.js
|
|
16475
|
+
var b = (name, sig, encoders) => bind("user32.dll", name, sig, encoders);
|
|
16476
|
+
var _bProbe = b("GetDesktopWindow", " -> <HWND>ptr");
|
|
16477
|
+
var LONG_PTR_SYM = os3.arch === "x64" ? "PtrW" : "W";
|
|
16478
|
+
var SetWindowPos = /* @__PURE__ */ b("SetWindowPos", "<HWND>ptr <>ptr@SetWindowPosHwnd i32 i32 i32 i32 u32 -> i32");
|
|
16479
|
+
var SetWindowText = /* @__PURE__ */ b("SetWindowTextW", "<HWND>ptr <WCHAR>ptr -> i32");
|
|
16480
|
+
var GetWindowLongPtr = /* @__PURE__ */ b("GetWindowLong" + LONG_PTR_SYM, "<HWND>ptr i32@Gwlp -> <>ptr");
|
|
16481
|
+
var SetWindowLongPtr = /* @__PURE__ */ b("SetWindowLong" + LONG_PTR_SYM, "<HWND>ptr i32@Gwlp <>ptr -> <>ptr");
|
|
16482
|
+
var EnableWindow = /* @__PURE__ */ b("EnableWindow", "<HWND>ptr i32 -> i32");
|
|
16483
|
+
var SetParent = /* @__PURE__ */ b("SetParent", "<HWND>ptr <HWND>ptr -> <HWND>ptr");
|
|
16484
|
+
var DefWindowProc = /* @__PURE__ */ b("DefWindowProcW", "<HWND>ptr u32@AnyMsg <>ptr <>ptr -> <>ptr");
|
|
16485
|
+
var CallWindowProc = /* @__PURE__ */ b("CallWindowProcW", "<>ptr <HWND>ptr u32@AnyMsg <>ptr <>ptr -> <>ptr");
|
|
16486
|
+
var GetDC = /* @__PURE__ */ b("GetDC", "<HWND>ptr -> <HDC>ptr");
|
|
16487
|
+
var ReleaseDC = /* @__PURE__ */ b("ReleaseDC", "<HWND>ptr <HDC>ptr! -> i32");
|
|
16488
|
+
var DrawText = /* @__PURE__ */ b("DrawTextW", "<HDC>ptr! <WCHAR>ptr i32 <RECT>ptr i32 -> i32");
|
|
16489
|
+
var InvalidateRect = /* @__PURE__ */ b("InvalidateRect", "<HWND>ptr <RECT>ptr i32 -> i32", { RECT });
|
|
16490
|
+
var SetCursor = /* @__PURE__ */ b("SetCursor", "<HCURSOR>ptr -> <HCURSOR>ptr");
|
|
16491
|
+
var LoadCursor = /* @__PURE__ */ b("LoadCursorW", "<HMODULE>ptr <>ptr -> <HCURSOR>ptr");
|
|
16492
|
+
var GetCursorPos = /* @__PURE__ */ b("GetCursorPos", "<POINT>ptr -> i32");
|
|
16493
|
+
var ScreenToClient = /* @__PURE__ */ b("ScreenToClient", "<HWND>ptr <POINT>ptr -> i32");
|
|
16494
|
+
var ShowScrollBar = /* @__PURE__ */ b("ShowScrollBar", "<HWND>ptr u32 i32 -> i32");
|
|
16495
|
+
var GetSystemMetrics = /* @__PURE__ */ b("GetSystemMetrics", "i32 -> i32");
|
|
15364
16496
|
|
|
15365
16497
|
// _build/lib/react-qw/reconciler.js
|
|
15366
16498
|
var import_react_reconciler = __toESM(require_react_reconciler(), 1);
|
|
15367
16499
|
var import_react = __toESM(require_react(), 1);
|
|
15368
16500
|
var import_constants = __toESM(require_constants(), 1);
|
|
15369
16501
|
import * as gui3 from "gui";
|
|
15370
|
-
import * as
|
|
16502
|
+
import * as os4 from "os";
|
|
16503
|
+
|
|
16504
|
+
// _build/lib/windows/gdi32.js
|
|
16505
|
+
var b2 = (name, sig, encoders) => bind("gdi32.dll", name, sig, encoders);
|
|
16506
|
+
var DeleteObject = /* @__PURE__ */ b2("DeleteObject", "<>ptr -> i32");
|
|
16507
|
+
var GetDeviceCaps = /* @__PURE__ */ b2("GetDeviceCaps", "<HDC>ptr! i32@DeviceCap -> i32");
|
|
16508
|
+
var CreateFontIndirect = /* @__PURE__ */ b2("CreateFontIndirectW", "<LOGFONTW>ptr -> <>ptr", { LOGFONTW });
|
|
16509
|
+
var SelectObject = /* @__PURE__ */ b2("SelectObject", "<HDC>ptr! <>ptr -> <>ptr");
|
|
16510
|
+
var GetObject = /* @__PURE__ */ b2("GetObjectW", "<>ptr i32 <BYTE>ptr -> i32");
|
|
15371
16511
|
|
|
15372
16512
|
// _build/lib/react-qw/props.js
|
|
15373
16513
|
import * as gui from "gui";
|
|
15374
16514
|
function applyProps(instance, newProps, _oldProps) {
|
|
15375
16515
|
const hwnd = instance.hwnd;
|
|
15376
16516
|
instance.props = newProps;
|
|
16517
|
+
if (hwnd === null)
|
|
16518
|
+
return;
|
|
15377
16519
|
const textVal = "text" in newProps ? newProps.text : typeof newProps.children === "string" ? newProps.children : typeof newProps.children === "number" ? String(newProps.children) : void 0;
|
|
15378
16520
|
if (textVal !== void 0) {
|
|
15379
16521
|
let cursor = -1;
|
|
@@ -15381,13 +16523,13 @@ function applyProps(instance, newProps, _oldProps) {
|
|
|
15381
16523
|
const sel = gui.SendMessage(hwnd, 176, 0, 0);
|
|
15382
16524
|
cursor = sel >>> 16;
|
|
15383
16525
|
}
|
|
15384
|
-
|
|
16526
|
+
SetWindowText(hwnd, textVal);
|
|
15385
16527
|
if (instance.type === "EDIT" && cursor >= 0) {
|
|
15386
16528
|
gui.SendMessage(hwnd, 177, cursor, cursor);
|
|
15387
16529
|
}
|
|
15388
16530
|
}
|
|
15389
16531
|
if ("disabled" in newProps) {
|
|
15390
|
-
|
|
16532
|
+
EnableWindow(hwnd, !newProps.disabled ? 1 : 0);
|
|
15391
16533
|
}
|
|
15392
16534
|
if ("hidden" in newProps) {
|
|
15393
16535
|
gui.ShowWindow(
|
|
@@ -15487,58 +16629,36 @@ function calculateFlexLayout(flex, parentW, parentH, children) {
|
|
|
15487
16629
|
}
|
|
15488
16630
|
|
|
15489
16631
|
// _build/lib/text-measure.js
|
|
15490
|
-
import * as ffi from "ffi";
|
|
15491
|
-
import * as os from "os";
|
|
15492
|
-
import * as win from "win";
|
|
15493
16632
|
import * as gui2 from "gui";
|
|
15494
|
-
function loadProc(lib, name) {
|
|
15495
|
-
const ptr = win.GetProcAddress(lib, name);
|
|
15496
|
-
if (!ptr)
|
|
15497
|
-
throw new Error(`Cannot load ${name}`);
|
|
15498
|
-
return ptr;
|
|
15499
|
-
}
|
|
15500
|
-
var user32 = win.LoadLibrary("user32.dll");
|
|
15501
|
-
var gdi32 = win.LoadLibrary("gdi32.dll");
|
|
15502
|
-
if (!user32 || !gdi32)
|
|
15503
|
-
throw new Error("Failed to load system DLLs");
|
|
15504
|
-
var DrawTextW = loadProc(user32, "DrawTextW");
|
|
15505
|
-
var GetDC = loadProc(user32, "GetDC");
|
|
15506
|
-
var ReleaseDC = loadProc(user32, "ReleaseDC");
|
|
15507
|
-
var SelectObject = loadProc(gdi32, "SelectObject");
|
|
15508
|
-
var FFI_HND = os.arch === "ia32" ? ffi.FFI_TYPE_UINT32 : ffi.FFI_TYPE_UINT64;
|
|
15509
|
-
var FFI_S32 = ffi.FFI_TYPE_SINT32;
|
|
15510
|
-
var FFI_PTR = ffi.FFI_TYPE_POINTER;
|
|
15511
16633
|
function measureText(hdc, text, maxWidth) {
|
|
15512
|
-
const
|
|
15513
|
-
|
|
15514
|
-
const dv = new DataView(rect);
|
|
15515
|
-
dv.setInt32(8, maxWidth, true);
|
|
15516
|
-
ffi.ffiCall(DrawTextW, [FFI_HND, FFI_PTR, FFI_S32, FFI_PTR, FFI_S32], [
|
|
16634
|
+
const r = RECT.encode({ right: maxWidth });
|
|
16635
|
+
DrawText(
|
|
15517
16636
|
hdc,
|
|
15518
|
-
|
|
16637
|
+
text,
|
|
15519
16638
|
-1,
|
|
15520
|
-
|
|
16639
|
+
r.ptr,
|
|
15521
16640
|
1024
|
|
15522
16641
|
/* gui.DrawTextFlag.CALCRECT */
|
|
15523
|
-
|
|
15524
|
-
|
|
16642
|
+
);
|
|
16643
|
+
const { right, bottom } = RECT.decode(r);
|
|
16644
|
+
return { width: right, height: bottom };
|
|
15525
16645
|
}
|
|
15526
16646
|
function getButtonIdealSize(hwnd) {
|
|
15527
|
-
const size =
|
|
15528
|
-
gui2.SendMessage(hwnd, 5633, 0,
|
|
15529
|
-
const
|
|
15530
|
-
return { width:
|
|
16647
|
+
const size = SIZE.alloc();
|
|
16648
|
+
gui2.SendMessage(hwnd, 5633, 0, size.ptr);
|
|
16649
|
+
const { cx, cy } = SIZE.decode(size);
|
|
16650
|
+
return { width: cx, height: cy };
|
|
15531
16651
|
}
|
|
15532
16652
|
function measureTextForHwnd(hwnd, text) {
|
|
15533
|
-
const hdc =
|
|
16653
|
+
const hdc = GetDC(hwnd);
|
|
15534
16654
|
if (!hdc)
|
|
15535
16655
|
return { width: 0, height: 0 };
|
|
15536
16656
|
const hFont = gui2.SendMessage(hwnd, 49, 0, 0);
|
|
15537
|
-
const oldFont = hFont ?
|
|
16657
|
+
const oldFont = hFont ? SelectObject(hdc, hFont) : 0;
|
|
15538
16658
|
const result = measureText(hdc, text, 0);
|
|
15539
16659
|
if (hFont)
|
|
15540
|
-
|
|
15541
|
-
|
|
16660
|
+
SelectObject(hdc, oldFont);
|
|
16661
|
+
ReleaseDC(hwnd, hdc);
|
|
15542
16662
|
const wr = gui2.GetWindowRect(hwnd);
|
|
15543
16663
|
const cr = gui2.GetClientRect(hwnd);
|
|
15544
16664
|
if (wr && cr) {
|
|
@@ -15550,14 +16670,20 @@ function measureTextForHwnd(hwnd, text) {
|
|
|
15550
16670
|
|
|
15551
16671
|
// _build/lib/react-qw/reconciler.js
|
|
15552
16672
|
var dpiFont = gui3.CreateSystemDpiFont();
|
|
15553
|
-
var scaleFactor =
|
|
16673
|
+
var scaleFactor = (() => {
|
|
16674
|
+
const hdc = GetDC(NULL);
|
|
16675
|
+
const dpi = hdc ? GetDeviceCaps(hdc, 88) : 96;
|
|
16676
|
+
if (hdc)
|
|
16677
|
+
ReleaseDC(NULL, hdc);
|
|
16678
|
+
return dpi / 96;
|
|
16679
|
+
})();
|
|
15554
16680
|
var DELAYED_CONTROLS = /* @__PURE__ */ new Set(["SysListView32", "SysTreeView32", "LISTBOX", "COMBOBOX", "msctls_trackbar32", "SysDateTimePick32", "SysLink"]);
|
|
15555
16681
|
function isDelayedControl(winClass) {
|
|
15556
16682
|
return DELAYED_CONTROLS.has(winClass);
|
|
15557
16683
|
}
|
|
15558
16684
|
function setupWindowProc(instance, hwnd) {
|
|
15559
16685
|
instance.hwnd = hwnd;
|
|
15560
|
-
const oldProc =
|
|
16686
|
+
const oldProc = GetWindowLongPtr(
|
|
15561
16687
|
hwnd,
|
|
15562
16688
|
-4
|
|
15563
16689
|
/* gui.Gwlp.WNDPROC */
|
|
@@ -15566,11 +16692,11 @@ function setupWindowProc(instance, hwnd) {
|
|
|
15566
16692
|
gui3.SetWindowProc(hwnd, (hwnd2, msg, wParam, lParam) => {
|
|
15567
16693
|
const ev = instance.props.onEvent;
|
|
15568
16694
|
if (!ev)
|
|
15569
|
-
return
|
|
16695
|
+
return CallWindowProc(oldProc, hwnd2, msg, wParam, lParam);
|
|
15570
16696
|
if (typeof ev === "object") {
|
|
15571
|
-
return ev.fn({ hwnd: hwnd2, msg, wParam, lParam, callOldWndProc: () =>
|
|
16697
|
+
return ev.fn({ hwnd: hwnd2, msg, wParam, lParam, callOldWndProc: () => CallWindowProc(oldProc, hwnd2, msg, wParam, lParam) });
|
|
15572
16698
|
}
|
|
15573
|
-
const result =
|
|
16699
|
+
const result = CallWindowProc(oldProc, hwnd2, msg, wParam, lParam);
|
|
15574
16700
|
const override = ev({ hwnd: hwnd2, msg, wParam, lParam });
|
|
15575
16701
|
return typeof override === "number" && Number.isInteger(override) ? override : result;
|
|
15576
16702
|
});
|
|
@@ -15640,7 +16766,7 @@ function runFlexLayout(inst) {
|
|
|
15640
16766
|
if (lr && lr.x === r.x && lr.y === r.y && lr.w === r.width && lr.h === r.height)
|
|
15641
16767
|
continue;
|
|
15642
16768
|
console.log("flex: set", child.type, child.hwnd, "to", r.x, r.y, r.width, r.height);
|
|
15643
|
-
|
|
16769
|
+
SetWindowPos(
|
|
15644
16770
|
child.hwnd,
|
|
15645
16771
|
0,
|
|
15646
16772
|
(r.x + pl) * scaleFactor,
|
|
@@ -15650,7 +16776,7 @@ function runFlexLayout(inst) {
|
|
|
15650
16776
|
64
|
|
15651
16777
|
/* gui.SetWindowPosFlag.SWP_SHOWWINDOW */
|
|
15652
16778
|
);
|
|
15653
|
-
|
|
16779
|
+
InvalidateRect(child.hwnd, NULL, 1);
|
|
15654
16780
|
child.lastRect = { x: r.x, y: r.y, w: r.width, h: r.height };
|
|
15655
16781
|
}
|
|
15656
16782
|
for (const c of children)
|
|
@@ -15696,7 +16822,7 @@ var hostConfig = {
|
|
|
15696
16822
|
if (child.hwnd === null) {
|
|
15697
16823
|
ensureChildWindow(child, parent.hwnd);
|
|
15698
16824
|
} else {
|
|
15699
|
-
|
|
16825
|
+
SetParent(child.hwnd, parent.hwnd ?? NULL);
|
|
15700
16826
|
}
|
|
15701
16827
|
if (false)
|
|
15702
16828
|
console.log("[reconciler] appendInitialChild parent:", parent.hwnd, "child:", child.hwnd);
|
|
@@ -15706,7 +16832,7 @@ var hostConfig = {
|
|
|
15706
16832
|
if (child.hwnd === null) {
|
|
15707
16833
|
ensureChildWindow(child, parent.hwnd);
|
|
15708
16834
|
} else {
|
|
15709
|
-
|
|
16835
|
+
SetParent(child.hwnd, parent.hwnd ?? NULL);
|
|
15710
16836
|
}
|
|
15711
16837
|
if (false)
|
|
15712
16838
|
console.log("[reconciler] appendChild parent:", parent.hwnd, "child:", child.hwnd);
|
|
@@ -15716,7 +16842,7 @@ var hostConfig = {
|
|
|
15716
16842
|
if (child.hwnd === null) {
|
|
15717
16843
|
ensureChildWindow(child, container);
|
|
15718
16844
|
} else {
|
|
15719
|
-
|
|
16845
|
+
SetParent(child.hwnd, container);
|
|
15720
16846
|
}
|
|
15721
16847
|
const rootInst = instancesByHwnd.get(container);
|
|
15722
16848
|
if (rootInst)
|
|
@@ -15728,7 +16854,7 @@ var hostConfig = {
|
|
|
15728
16854
|
if (child.hwnd === null) {
|
|
15729
16855
|
ensureChildWindow(child, parent.hwnd);
|
|
15730
16856
|
} else {
|
|
15731
|
-
|
|
16857
|
+
SetParent(child.hwnd, parent.hwnd ?? NULL);
|
|
15732
16858
|
}
|
|
15733
16859
|
if (false)
|
|
15734
16860
|
console.log("[reconciler] insertBefore parent:", parent.hwnd, "child:", child.hwnd, "before:", beforeChild.hwnd);
|
|
@@ -15740,7 +16866,7 @@ var hostConfig = {
|
|
|
15740
16866
|
if (child.hwnd === null) {
|
|
15741
16867
|
ensureChildWindow(child, container);
|
|
15742
16868
|
} else {
|
|
15743
|
-
|
|
16869
|
+
SetParent(child.hwnd, container);
|
|
15744
16870
|
}
|
|
15745
16871
|
const rootInst = instancesByHwnd.get(container);
|
|
15746
16872
|
if (!rootInst)
|
|
@@ -15797,7 +16923,7 @@ var hostConfig = {
|
|
|
15797
16923
|
resetTextContent(_instance) {
|
|
15798
16924
|
},
|
|
15799
16925
|
commitTextUpdate(instance, _oldText, newText) {
|
|
15800
|
-
|
|
16926
|
+
SetWindowText(instance.hwnd, newText);
|
|
15801
16927
|
},
|
|
15802
16928
|
hideInstance(instance) {
|
|
15803
16929
|
if (instance.hwnd !== null)
|
|
@@ -15851,10 +16977,10 @@ var hostConfig = {
|
|
|
15851
16977
|
clearContainer(_container) {
|
|
15852
16978
|
},
|
|
15853
16979
|
scheduleTimeout(fn, delay) {
|
|
15854
|
-
return
|
|
16980
|
+
return os4.setTimeout(fn, delay);
|
|
15855
16981
|
},
|
|
15856
16982
|
cancelTimeout(id) {
|
|
15857
|
-
|
|
16983
|
+
os4.clearTimeout?.(id);
|
|
15858
16984
|
},
|
|
15859
16985
|
noTimeout: -1,
|
|
15860
16986
|
supportsMutation: true,
|
|
@@ -16021,28 +17147,23 @@ var ComboBox = (0, import_react4.forwardRef)(({ items, selectedIndex: controlled
|
|
|
16021
17147
|
var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1);
|
|
16022
17148
|
var import_react5 = __toESM(require_react(), 1);
|
|
16023
17149
|
import * as gui6 from "gui";
|
|
16024
|
-
|
|
16025
|
-
|
|
16026
|
-
|
|
16027
|
-
|
|
16028
|
-
function readI32(ptr, offset) {
|
|
16029
|
-
return ffi2.readByte(ptr + offset) | ffi2.readByte(ptr + offset + 1) << 8 | ffi2.readByte(ptr + offset + 2) << 16 | ffi2.readByte(ptr + offset + 3) << 24;
|
|
16030
|
-
}
|
|
16031
|
-
function bufPtr(buf) {
|
|
16032
|
-
return ffi2.bufferPtr(buf);
|
|
17150
|
+
|
|
17151
|
+
// _build/lib/react-qw/nmhdr.js
|
|
17152
|
+
function nmCode(lParam) {
|
|
17153
|
+
return NMHDR.decode(lParam).code;
|
|
16033
17154
|
}
|
|
17155
|
+
|
|
17156
|
+
// _build/lib/react-qw/components/DateTimePicker.js
|
|
16034
17157
|
function dateToSysTimeBuf(d) {
|
|
16035
|
-
|
|
16036
|
-
|
|
16037
|
-
|
|
16038
|
-
|
|
16039
|
-
|
|
16040
|
-
|
|
16041
|
-
|
|
16042
|
-
|
|
16043
|
-
|
|
16044
|
-
dv.setUint16(14, d.getMilliseconds(), true);
|
|
16045
|
-
return buf;
|
|
17158
|
+
return SYSTEMTIME.encode({
|
|
17159
|
+
wYear: d.getFullYear(),
|
|
17160
|
+
wMonth: d.getMonth() + 1,
|
|
17161
|
+
wDay: d.getDate(),
|
|
17162
|
+
wHour: d.getHours(),
|
|
17163
|
+
wMinute: d.getMinutes(),
|
|
17164
|
+
wSecond: d.getSeconds(),
|
|
17165
|
+
wMilliseconds: d.getMilliseconds()
|
|
17166
|
+
});
|
|
16046
17167
|
}
|
|
16047
17168
|
var DateTimePicker = (0, import_react5.forwardRef)(function DateTimePicker2({ value, onChange, defaultValue, format = "short", allowNone, updown, style }, ref) {
|
|
16048
17169
|
const [internalDate, setInternalDate] = (0, import_react5.useState)(defaultValue ?? null);
|
|
@@ -16067,7 +17188,7 @@ var DateTimePicker = (0, import_react5.forwardRef)(function DateTimePicker2({ va
|
|
|
16067
17188
|
const d = effectiveDate;
|
|
16068
17189
|
if (d) {
|
|
16069
17190
|
const buf = dateToSysTimeBuf(d);
|
|
16070
|
-
gui6.SendMessage(h, 4098, 0,
|
|
17191
|
+
gui6.SendMessage(h, 4098, 0, buf.ptr);
|
|
16071
17192
|
} else {
|
|
16072
17193
|
gui6.SendMessage(h, 4098, 1, 0);
|
|
16073
17194
|
}
|
|
@@ -16076,7 +17197,7 @@ var DateTimePicker = (0, import_react5.forwardRef)(function DateTimePicker2({ va
|
|
|
16076
17197
|
const h = dpRef.current;
|
|
16077
17198
|
if (!h)
|
|
16078
17199
|
return;
|
|
16079
|
-
|
|
17200
|
+
InvalidateRect(h, NULL, 1);
|
|
16080
17201
|
const cr = gui6.GetClientRect(h);
|
|
16081
17202
|
if (cr) {
|
|
16082
17203
|
const w = cr.right - cr.left;
|
|
@@ -16086,21 +17207,15 @@ var DateTimePicker = (0, import_react5.forwardRef)(function DateTimePicker2({ va
|
|
|
16086
17207
|
}, []);
|
|
16087
17208
|
return (0, import_jsx_runtime4.jsx)("w", { type: "STATIC", ws: 268435456 | 33554432, style: { ...style, flexDirection: "column", alignItems: "stretch" }, ref, onEvent: (e) => {
|
|
16088
17209
|
if (e.msg === 78) {
|
|
16089
|
-
const code =
|
|
17210
|
+
const code = nmCode(e.lParam);
|
|
16090
17211
|
if (code === -759) {
|
|
16091
|
-
const dwFlags =
|
|
17212
|
+
const { dwFlags, st } = NMDATETIMECHANGE.decode(e.lParam);
|
|
16092
17213
|
if (dwFlags === 1) {
|
|
16093
17214
|
if (!isControlled)
|
|
16094
17215
|
setInternalDate(null);
|
|
16095
17216
|
onChangeRef.current?.(null);
|
|
16096
17217
|
} else {
|
|
16097
|
-
const
|
|
16098
|
-
const month = readI16(e.lParam, 30);
|
|
16099
|
-
const day = readI16(e.lParam, 34);
|
|
16100
|
-
const hour = readI16(e.lParam, 36);
|
|
16101
|
-
const min = readI16(e.lParam, 38);
|
|
16102
|
-
const sec = readI16(e.lParam, 40);
|
|
16103
|
-
const d = new Date(year, month - 1, day, hour, min, sec);
|
|
17218
|
+
const d = new Date(st.wYear, st.wMonth - 1, st.wDay, st.wHour, st.wMinute, st.wSecond);
|
|
16104
17219
|
if (!isControlled)
|
|
16105
17220
|
setInternalDate(d);
|
|
16106
17221
|
onChangeRef.current?.(d);
|
|
@@ -16116,14 +17231,6 @@ var DateTimePicker = (0, import_react5.forwardRef)(function DateTimePicker2({ va
|
|
|
16116
17231
|
var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1);
|
|
16117
17232
|
var import_react6 = __toESM(require_react(), 1);
|
|
16118
17233
|
import * as gui7 from "gui";
|
|
16119
|
-
import * as ffi3 from "ffi";
|
|
16120
|
-
function textToUtf16(s) {
|
|
16121
|
-
const buf = new ArrayBuffer((s.length + 1) * 2);
|
|
16122
|
-
const dv = new DataView(buf);
|
|
16123
|
-
for (let i = 0; i < s.length; i++)
|
|
16124
|
-
dv.setUint16(i * 2, s.charCodeAt(i), true);
|
|
16125
|
-
return buf;
|
|
16126
|
-
}
|
|
16127
17234
|
var Input = (0, import_react6.forwardRef)(({ value: controlledValue, defaultValue = "", onChange, placeholder, password, multiline, readonly, number, disabled, style }, ref) => {
|
|
16128
17235
|
const [internalValue, setInternalValue] = (0, import_react6.useState)(defaultValue);
|
|
16129
17236
|
const isControlled = controlledValue !== void 0;
|
|
@@ -16142,8 +17249,8 @@ var Input = (0, import_react6.forwardRef)(({ value: controlledValue, defaultValu
|
|
|
16142
17249
|
const h = inputRef.current;
|
|
16143
17250
|
if (!h || !placeholder)
|
|
16144
17251
|
return;
|
|
16145
|
-
const buf =
|
|
16146
|
-
gui7.SendMessage(h, 5377, 1,
|
|
17252
|
+
const buf = WCHAR.encode(placeholder);
|
|
17253
|
+
gui7.SendMessage(h, 5377, 1, buf.ptr);
|
|
16147
17254
|
}, [placeholder]);
|
|
16148
17255
|
return (0, import_jsx_runtime5.jsx)("w", { type: "EDIT", text: displayValue, ws, style, disabled, ref: (h) => {
|
|
16149
17256
|
inputRef.current = h;
|
|
@@ -16167,23 +17274,6 @@ var Input = (0, import_react6.forwardRef)(({ value: controlledValue, defaultValu
|
|
|
16167
17274
|
// _build/lib/react-qw/components/Link.js
|
|
16168
17275
|
var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1);
|
|
16169
17276
|
var import_react7 = __toESM(require_react(), 1);
|
|
16170
|
-
import * as gui8 from "gui";
|
|
16171
|
-
import * as ffi4 from "ffi";
|
|
16172
|
-
function readI322(ptr, offset) {
|
|
16173
|
-
return ffi4.readByte(ptr + offset) | ffi4.readByte(ptr + offset + 1) << 8 | ffi4.readByte(ptr + offset + 2) << 16 | ffi4.readByte(ptr + offset + 3) << 24;
|
|
16174
|
-
}
|
|
16175
|
-
function readUtf16(ptr, offset, maxWords) {
|
|
16176
|
-
const chars = [];
|
|
16177
|
-
for (let i = 0; i < maxWords; i++) {
|
|
16178
|
-
const lo = ffi4.readByte(ptr + offset + i * 2);
|
|
16179
|
-
const hi = ffi4.readByte(ptr + offset + i * 2 + 1);
|
|
16180
|
-
const code = hi << 8 | lo;
|
|
16181
|
-
if (code === 0)
|
|
16182
|
-
break;
|
|
16183
|
-
chars.push(String.fromCharCode(code));
|
|
16184
|
-
}
|
|
16185
|
-
return chars.join("");
|
|
16186
|
-
}
|
|
16187
17277
|
var Link = (0, import_react7.forwardRef)(function Link2({ href, children, onClick, style }, ref) {
|
|
16188
17278
|
const displayText = children != null ? String(children) : href ?? "";
|
|
16189
17279
|
const linkText = href ? `<A HREF="${href}">${displayText}</A>` : displayText;
|
|
@@ -16194,14 +17284,13 @@ var Link = (0, import_react7.forwardRef)(function Link2({ href, children, onClic
|
|
|
16194
17284
|
const h = linkRef.current;
|
|
16195
17285
|
if (!h)
|
|
16196
17286
|
return;
|
|
16197
|
-
|
|
17287
|
+
InvalidateRect(h, NULL, 1);
|
|
16198
17288
|
}, [linkText]);
|
|
16199
17289
|
return (0, import_jsx_runtime6.jsx)("w", { type: "STATIC", ws: 268435456 | 33554432, style: { ...style, flexDirection: "column", alignItems: "stretch" }, ref, onEvent: (e) => {
|
|
16200
17290
|
if (e.msg === 78) {
|
|
16201
|
-
const code =
|
|
17291
|
+
const code = nmCode(e.lParam);
|
|
16202
17292
|
if (code === -2 || code === -4) {
|
|
16203
|
-
|
|
16204
|
-
onClickRef.current?.(url);
|
|
17293
|
+
onClickRef.current?.(NMLINK.decode(e.lParam).item.szUrl);
|
|
16205
17294
|
}
|
|
16206
17295
|
}
|
|
16207
17296
|
}, children: (0, import_jsx_runtime6.jsx)("w", { type: "SysLink", ws: 268435456 | 65536, text: linkText, style: { flexGrow: 1 }, ref: (h) => {
|
|
@@ -16212,7 +17301,7 @@ var Link = (0, import_react7.forwardRef)(function Link2({ href, children, onClic
|
|
|
16212
17301
|
// _build/lib/react-qw/components/ListBox.js
|
|
16213
17302
|
var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1);
|
|
16214
17303
|
var import_react8 = __toESM(require_react(), 1);
|
|
16215
|
-
import * as
|
|
17304
|
+
import * as gui8 from "gui";
|
|
16216
17305
|
var ListBox = (0, import_react8.forwardRef)(({ items, selectedIndex: controlledIndex, defaultSelectedIndex = -1, onChange, style, sort, scrollToBottom }, ref) => {
|
|
16217
17306
|
const [internalIndex, setInternalIndex] = (0, import_react8.useState)(defaultSelectedIndex);
|
|
16218
17307
|
const isControlled = controlledIndex !== void 0;
|
|
@@ -16224,18 +17313,18 @@ var ListBox = (0, import_react8.forwardRef)(({ items, selectedIndex: controlledI
|
|
|
16224
17313
|
const h = lbRef.current;
|
|
16225
17314
|
if (!h)
|
|
16226
17315
|
return;
|
|
16227
|
-
|
|
17316
|
+
gui8.SendMessage(h, 388, 0, 0);
|
|
16228
17317
|
for (const item of items)
|
|
16229
|
-
|
|
17318
|
+
gui8.SendMessage(h, 384, 0, item);
|
|
16230
17319
|
if (sel >= 0 && sel < items.length)
|
|
16231
|
-
|
|
17320
|
+
gui8.SendMessage(h, 390, sel, 0);
|
|
16232
17321
|
if (scrollToBottom && items.length > 0)
|
|
16233
|
-
|
|
17322
|
+
gui8.SendMessage(h, 407, items.length - 1, 0);
|
|
16234
17323
|
}, [items]);
|
|
16235
17324
|
(0, import_react8.useEffect)(() => {
|
|
16236
17325
|
const h = lbRef.current;
|
|
16237
17326
|
if (h)
|
|
16238
|
-
|
|
17327
|
+
gui8.SendMessage(h, 390, sel, 0);
|
|
16239
17328
|
}, [sel]);
|
|
16240
17329
|
return (0, import_jsx_runtime7.jsx)("w", { type: "STATIC", ws: 268435456 | 33554432, style: { ...style, flexDirection: "column", alignItems: "stretch" }, onEvent: (e) => {
|
|
16241
17330
|
if (e.msg !== 273)
|
|
@@ -16245,7 +17334,7 @@ var ListBox = (0, import_react8.forwardRef)(({ items, selectedIndex: controlledI
|
|
|
16245
17334
|
const h = lbRef.current;
|
|
16246
17335
|
if (!h)
|
|
16247
17336
|
return;
|
|
16248
|
-
const newSel =
|
|
17337
|
+
const newSel = gui8.SendMessage(h, 392, 0, 0);
|
|
16249
17338
|
if (newSel !== sel && newSel >= 0) {
|
|
16250
17339
|
if (!isControlled)
|
|
16251
17340
|
setInternalIndex(newSel);
|
|
@@ -16260,87 +17349,30 @@ var ListBox = (0, import_react8.forwardRef)(({ items, selectedIndex: controlledI
|
|
|
16260
17349
|
// _build/lib/react-qw/components/ListView.js
|
|
16261
17350
|
var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1);
|
|
16262
17351
|
var import_react9 = __toESM(require_react(), 1);
|
|
16263
|
-
import * as
|
|
16264
|
-
import * as
|
|
16265
|
-
import * as win2 from "win";
|
|
17352
|
+
import * as gui9 from "gui";
|
|
17353
|
+
import * as ffi3 from "ffi";
|
|
16266
17354
|
function makeColorBlock(size, bgra) {
|
|
16267
17355
|
const n = size * size;
|
|
16268
17356
|
const buf = new ArrayBuffer(n * 4);
|
|
16269
|
-
const
|
|
17357
|
+
const b6 = new Uint8Array(buf);
|
|
16270
17358
|
for (let i = 0; i < n; i++) {
|
|
16271
|
-
|
|
16272
|
-
|
|
16273
|
-
|
|
16274
|
-
|
|
17359
|
+
b6[i * 4] = bgra & 255;
|
|
17360
|
+
b6[i * 4 + 1] = bgra >> 8 & 255;
|
|
17361
|
+
b6[i * 4 + 2] = bgra >> 16 & 255;
|
|
17362
|
+
b6[i * 4 + 3] = 255;
|
|
16275
17363
|
}
|
|
16276
17364
|
return buf;
|
|
16277
17365
|
}
|
|
16278
|
-
function textToUtf162(s) {
|
|
16279
|
-
const buf = new ArrayBuffer((s.length + 1) * 2);
|
|
16280
|
-
const dv = new DataView(buf);
|
|
16281
|
-
for (let i = 0; i < s.length; i++)
|
|
16282
|
-
dv.setUint16(i * 2, s.charCodeAt(i), true);
|
|
16283
|
-
return buf;
|
|
16284
|
-
}
|
|
16285
|
-
function readI323(ptr, offset) {
|
|
16286
|
-
return ffi5.readByte(ptr + offset) | ffi5.readByte(ptr + offset + 1) << 8 | ffi5.readByte(ptr + offset + 2) << 16 | ffi5.readByte(ptr + offset + 3) << 24;
|
|
16287
|
-
}
|
|
16288
|
-
function readU32(ptr, offset) {
|
|
16289
|
-
return ffi5.readByte(ptr + offset) | ffi5.readByte(ptr + offset + 1) << 8 | ffi5.readByte(ptr + offset + 2) << 16 | ffi5.readByte(ptr + offset + 3) << 24 >>> 0;
|
|
16290
|
-
}
|
|
16291
|
-
function readU64(ptr, offset) {
|
|
16292
|
-
const lo = readU32(ptr, offset);
|
|
16293
|
-
const hi = readU32(ptr, offset + 4);
|
|
16294
|
-
return lo + hi * 4294967296;
|
|
16295
|
-
}
|
|
16296
17366
|
function writeU32(ptr, offset, v) {
|
|
16297
|
-
|
|
16298
|
-
|
|
16299
|
-
|
|
16300
|
-
|
|
16301
|
-
}
|
|
16302
|
-
function bufPtr2(buf) {
|
|
16303
|
-
return ffi5.bufferPtr(buf);
|
|
17367
|
+
ffi3.writeByte(ptr + offset, v & 255);
|
|
17368
|
+
ffi3.writeByte(ptr + offset + 1, v >> 8 & 255);
|
|
17369
|
+
ffi3.writeByte(ptr + offset + 2, v >> 16 & 255);
|
|
17370
|
+
ffi3.writeByte(ptr + offset + 3, v >> 24 & 255);
|
|
16304
17371
|
}
|
|
16305
17372
|
var LV_WS = 268435456 | 8388608 | 2097152 | 1048576 | 1 | 4;
|
|
16306
|
-
var
|
|
16307
|
-
var
|
|
16308
|
-
var CD_ITEM = 56;
|
|
16309
|
-
var CD_CLRTEXT = 80;
|
|
16310
|
-
var CD_CLRTEXTBK = 84;
|
|
16311
|
-
var CD_SUBITEM = 88;
|
|
16312
|
-
var NMIA_ITEM = 24;
|
|
16313
|
-
var NMIA_SUBITEM = 28;
|
|
16314
|
-
var NM_CODE = 16;
|
|
17373
|
+
var CD_CLRTEXT = NMLVCUSTOMDRAW.offsetOf("clrText");
|
|
17374
|
+
var CD_CLRTEXTBK = NMLVCUSTOMDRAW.offsetOf("clrTextBk");
|
|
16315
17375
|
var fontCache = /* @__PURE__ */ new Map();
|
|
16316
|
-
var gdi322 = null;
|
|
16317
|
-
var createFontIndirectW = null;
|
|
16318
|
-
var selectObjectFn = null;
|
|
16319
|
-
var getObjectW = null;
|
|
16320
|
-
function ensureGdi() {
|
|
16321
|
-
if (gdi322 !== null)
|
|
16322
|
-
return;
|
|
16323
|
-
gdi322 = win2.LoadLibrary("gdi32.dll");
|
|
16324
|
-
if (!gdi322)
|
|
16325
|
-
return;
|
|
16326
|
-
createFontIndirectW = win2.GetProcAddress(gdi322, "CreateFontIndirectW");
|
|
16327
|
-
selectObjectFn = win2.GetProcAddress(gdi322, "SelectObject");
|
|
16328
|
-
getObjectW = win2.GetProcAddress(gdi322, "GetObjectW");
|
|
16329
|
-
}
|
|
16330
|
-
var user322 = null;
|
|
16331
|
-
var loadCursorW = null;
|
|
16332
|
-
var setCursorFn = null;
|
|
16333
|
-
var screenToClient = null;
|
|
16334
|
-
function ensureUser32() {
|
|
16335
|
-
if (user322 !== null)
|
|
16336
|
-
return;
|
|
16337
|
-
user322 = win2.LoadLibrary("user32.dll");
|
|
16338
|
-
if (!user322)
|
|
16339
|
-
return;
|
|
16340
|
-
loadCursorW = win2.GetProcAddress(user322, "LoadCursorW");
|
|
16341
|
-
setCursorFn = win2.GetProcAddress(user322, "SetCursor");
|
|
16342
|
-
screenToClient = win2.GetProcAddress(user322, "ScreenToClient");
|
|
16343
|
-
}
|
|
16344
17376
|
function getCellFont(hwnd, style) {
|
|
16345
17377
|
const key = (style.bold ? "b" : "") + (style.italic ? "i" : "") + (style.underline ? "u" : "");
|
|
16346
17378
|
if (key === "")
|
|
@@ -16348,39 +17380,37 @@ function getCellFont(hwnd, style) {
|
|
|
16348
17380
|
const cached = fontCache.get(key);
|
|
16349
17381
|
if (cached !== void 0)
|
|
16350
17382
|
return cached === 0 ? null : cached;
|
|
16351
|
-
|
|
16352
|
-
if (!createFontIndirectW || !getObjectW || !hwnd)
|
|
17383
|
+
if (!hwnd)
|
|
16353
17384
|
return null;
|
|
16354
|
-
|
|
16355
|
-
const
|
|
16356
|
-
const cur = gui10.SendMessage(hwnd, 49, 0, 0);
|
|
17385
|
+
let base = { lfHeight: -13 };
|
|
17386
|
+
const cur = gui9.SendMessage(hwnd, 49, 0, 0);
|
|
16357
17387
|
if (cur) {
|
|
16358
|
-
const
|
|
16359
|
-
if (!
|
|
17388
|
+
const lf = LOGFONTW.alloc();
|
|
17389
|
+
if (!GetObject(cur, LOGFONTW.size, lf))
|
|
16360
17390
|
return null;
|
|
16361
|
-
|
|
16362
|
-
dv.setInt32(0, -13, true);
|
|
17391
|
+
base = LOGFONTW.decode(lf);
|
|
16363
17392
|
}
|
|
16364
|
-
|
|
16365
|
-
|
|
16366
|
-
|
|
16367
|
-
|
|
16368
|
-
|
|
16369
|
-
|
|
16370
|
-
|
|
16371
|
-
|
|
16372
|
-
|
|
17393
|
+
const h = CreateFontIndirect({
|
|
17394
|
+
...base,
|
|
17395
|
+
...style.bold ? {
|
|
17396
|
+
lfWeight: 700
|
|
17397
|
+
/* gui.FontWeight.BOLD */
|
|
17398
|
+
} : {},
|
|
17399
|
+
...style.italic ? { lfItalic: 1 } : {},
|
|
17400
|
+
...style.underline ? { lfUnderline: 1 } : {}
|
|
17401
|
+
});
|
|
17402
|
+
fontCache.set(key, h ? h : 0);
|
|
17403
|
+
return h ? h : null;
|
|
16373
17404
|
}
|
|
16374
17405
|
function handleCustomDraw(lParam, columns2, data2, hwnd) {
|
|
16375
|
-
const stage =
|
|
17406
|
+
const { dwDrawStage: stage } = NMCUSTOMDRAW.decode(lParam);
|
|
16376
17407
|
if (stage === 1)
|
|
16377
17408
|
return 32;
|
|
16378
17409
|
if (stage === 65537)
|
|
16379
17410
|
return 32;
|
|
16380
17411
|
if (stage === 196609) {
|
|
16381
|
-
const
|
|
16382
|
-
const
|
|
16383
|
-
const style = resolveCellStyle(columns2, data2, row, colIndex);
|
|
17412
|
+
const cd = NMLVCUSTOMDRAW.decode(lParam);
|
|
17413
|
+
const style = resolveCellStyle(columns2, data2, cd.dwItemSpec, cd.iSubItem);
|
|
16384
17414
|
if (!style)
|
|
16385
17415
|
return 0;
|
|
16386
17416
|
if (style.color !== void 0)
|
|
@@ -16388,12 +17418,9 @@ function handleCustomDraw(lParam, columns2, data2, hwnd) {
|
|
|
16388
17418
|
if (style.background !== void 0)
|
|
16389
17419
|
writeU32(lParam, CD_CLRTEXTBK, style.background);
|
|
16390
17420
|
const hfont = getCellFont(hwnd, style);
|
|
16391
|
-
if (hfont &&
|
|
16392
|
-
|
|
16393
|
-
|
|
16394
|
-
ffi5.ffiCall(selectObjectFn, [ffi5.FFI_TYPE_UINT64, ffi5.FFI_TYPE_UINT64], [hdc, hfont], ffi5.FFI_TYPE_UINT64);
|
|
16395
|
-
return 2;
|
|
16396
|
-
}
|
|
17421
|
+
if (hfont && cd.hdc) {
|
|
17422
|
+
SelectObject(cd.hdc, hfont);
|
|
17423
|
+
return 2;
|
|
16397
17424
|
}
|
|
16398
17425
|
}
|
|
16399
17426
|
return 0;
|
|
@@ -16424,20 +17451,26 @@ function resolveCellStyle(columns2, data2, row, colIndex) {
|
|
|
16424
17451
|
return style || void 0;
|
|
16425
17452
|
}
|
|
16426
17453
|
function makeLVItem(i, sub, text, image) {
|
|
16427
|
-
const
|
|
16428
|
-
const
|
|
16429
|
-
|
|
16430
|
-
|
|
16431
|
-
|
|
16432
|
-
|
|
16433
|
-
|
|
16434
|
-
|
|
16435
|
-
|
|
16436
|
-
|
|
16437
|
-
|
|
16438
|
-
|
|
16439
|
-
|
|
16440
|
-
|
|
17454
|
+
const textBuf = WCHAR.encode(text);
|
|
17455
|
+
const b6 = LVITEMW.encode({
|
|
17456
|
+
mask: 1 | (image !== void 0 ? 2 : 0),
|
|
17457
|
+
iItem: i,
|
|
17458
|
+
iSubItem: sub,
|
|
17459
|
+
state: 0,
|
|
17460
|
+
stateMask: 0,
|
|
17461
|
+
pszText: textBuf.ptr,
|
|
17462
|
+
cchTextMax: 0,
|
|
17463
|
+
iImage: image ?? 0,
|
|
17464
|
+
lParam: 0,
|
|
17465
|
+
iIndent: 0,
|
|
17466
|
+
iGroupId: 0,
|
|
17467
|
+
cColumns: 0,
|
|
17468
|
+
puColumns: 0,
|
|
17469
|
+
piColFmt: 0,
|
|
17470
|
+
iGroup: 0
|
|
17471
|
+
});
|
|
17472
|
+
b6.__textBuf = textBuf;
|
|
17473
|
+
return b6;
|
|
16441
17474
|
}
|
|
16442
17475
|
var ListView = (0, import_react9.forwardRef)(function ListViewInner({ columns: columns2, data: data2, style, icons: icons2, iconSize, getIcon }, ref) {
|
|
16443
17476
|
const lvRef = (0, import_react9.useRef)(null);
|
|
@@ -16449,36 +17482,36 @@ var ListView = (0, import_react9.forwardRef)(function ListViewInner({ columns: c
|
|
|
16449
17482
|
const il = iconListRef.current;
|
|
16450
17483
|
iconListRef.current = 0;
|
|
16451
17484
|
if (il) {
|
|
16452
|
-
|
|
16453
|
-
|
|
17485
|
+
gui9.SendMessage(h, 4099, 1, 0);
|
|
17486
|
+
gui9.ImageListDestroy(il);
|
|
16454
17487
|
}
|
|
16455
17488
|
if (!icons2 || icons2.length === 0)
|
|
16456
17489
|
return;
|
|
16457
17490
|
const size = iconSize ?? 32;
|
|
16458
|
-
const img =
|
|
17491
|
+
const img = gui9.ImageListCreate(size, size, 32, icons2.length, 1);
|
|
16459
17492
|
if (!img)
|
|
16460
17493
|
return;
|
|
16461
17494
|
for (const p of icons2) {
|
|
16462
|
-
const hbm =
|
|
17495
|
+
const hbm = gui9.CreateBitmapFromPixels(size, size, p);
|
|
16463
17496
|
if (hbm) {
|
|
16464
|
-
|
|
16465
|
-
|
|
17497
|
+
gui9.ImageListAdd(img, hbm);
|
|
17498
|
+
DeleteObject(hbm);
|
|
16466
17499
|
}
|
|
16467
17500
|
}
|
|
16468
|
-
|
|
17501
|
+
gui9.SendMessage(h, 4099, 1, img);
|
|
16469
17502
|
iconListRef.current = img;
|
|
16470
17503
|
}, [icons2, iconSize]);
|
|
16471
17504
|
(0, import_react9.useEffect)(() => {
|
|
16472
17505
|
const h = lvRef.current;
|
|
16473
17506
|
if (!h)
|
|
16474
17507
|
return;
|
|
16475
|
-
const hdr =
|
|
17508
|
+
const hdr = gui9.SendMessage(h, 4127, 0, 0);
|
|
16476
17509
|
if (hdr) {
|
|
16477
|
-
let n2 =
|
|
17510
|
+
let n2 = gui9.SendMessage(hdr, 4608, 0, 0);
|
|
16478
17511
|
for (let k = n2 - 1; k >= 0; k--)
|
|
16479
|
-
|
|
17512
|
+
gui9.SendMessage(h, 4124, k, 0);
|
|
16480
17513
|
}
|
|
16481
|
-
|
|
17514
|
+
gui9.SendMessage(
|
|
16482
17515
|
h,
|
|
16483
17516
|
4150,
|
|
16484
17517
|
0,
|
|
@@ -16487,37 +17520,43 @@ var ListView = (0, import_react9.forwardRef)(function ListViewInner({ columns: c
|
|
|
16487
17520
|
);
|
|
16488
17521
|
const n = columns2.length;
|
|
16489
17522
|
for (let j = 0; j < n; j++) {
|
|
16490
|
-
const titleBuf =
|
|
16491
|
-
const lvc =
|
|
16492
|
-
|
|
16493
|
-
|
|
16494
|
-
|
|
16495
|
-
|
|
16496
|
-
|
|
16497
|
-
|
|
17523
|
+
const titleBuf = WCHAR.encode(columns2[j].name);
|
|
17524
|
+
const lvc = LVCOLUMNW.encode({
|
|
17525
|
+
mask: 4 | 2 | 1,
|
|
17526
|
+
fmt: alignToFmt(columns2[j].align),
|
|
17527
|
+
cx: columns2[j].width ?? 100,
|
|
17528
|
+
pszText: titleBuf.ptr,
|
|
17529
|
+
cchTextMax: 0,
|
|
17530
|
+
iSubItem: j,
|
|
17531
|
+
iImage: 0,
|
|
17532
|
+
iOrder: 0,
|
|
17533
|
+
cxMin: 0,
|
|
17534
|
+
cxDefault: 0,
|
|
17535
|
+
cxIdeal: 0
|
|
17536
|
+
});
|
|
16498
17537
|
lvc.__titleBuf = titleBuf;
|
|
16499
|
-
|
|
17538
|
+
gui9.SendMessage(h, 4193, j, lvc.ptr);
|
|
16500
17539
|
}
|
|
16501
17540
|
}, [columns2]);
|
|
16502
17541
|
(0, import_react9.useEffect)(() => {
|
|
16503
17542
|
const h = lvRef.current;
|
|
16504
17543
|
if (!h)
|
|
16505
17544
|
return;
|
|
16506
|
-
|
|
17545
|
+
gui9.SendMessage(h, 4105, 0, 0);
|
|
16507
17546
|
const nCols = columns2.length;
|
|
16508
17547
|
for (let i = 0; i < data2.length; i++) {
|
|
16509
17548
|
const record = data2[i];
|
|
16510
17549
|
const img = getIcon ? getIcon(record, i) : void 0;
|
|
16511
17550
|
const itemBuf = makeLVItem(i, 0, cellText(record, columns2[0], i), img);
|
|
16512
|
-
|
|
17551
|
+
gui9.SendMessage(h, 4173, 0, itemBuf.ptr);
|
|
16513
17552
|
for (let j = 1; j < nCols; j++) {
|
|
16514
17553
|
const subBuf = makeLVItem(i, j, cellText(record, columns2[j], i));
|
|
16515
|
-
|
|
17554
|
+
gui9.SendMessage(h, 4172, 0, subBuf.ptr);
|
|
16516
17555
|
}
|
|
16517
17556
|
}
|
|
16518
17557
|
for (let j = 0; j < columns2.length; j++) {
|
|
16519
17558
|
if (columns2[j].width == null) {
|
|
16520
|
-
|
|
17559
|
+
gui9.SendMessage(
|
|
16521
17560
|
h,
|
|
16522
17561
|
4126,
|
|
16523
17562
|
j,
|
|
@@ -16529,19 +17568,17 @@ var ListView = (0, import_react9.forwardRef)(function ListViewInner({ columns: c
|
|
|
16529
17568
|
}, [data2, columns2, getIcon]);
|
|
16530
17569
|
return (0, import_jsx_runtime8.jsx)("w", { type: "STATIC", ws: 268435456 | 33554432, style: { ...style, flexDirection: "column", alignItems: "stretch" }, ref, onEvent: (e) => {
|
|
16531
17570
|
if (e.msg === 78) {
|
|
16532
|
-
const code =
|
|
17571
|
+
const code = nmCode(e.lParam);
|
|
16533
17572
|
if (code === -12) {
|
|
16534
17573
|
return handleCustomDraw(e.lParam, columns2, data2, lvRef.current);
|
|
16535
17574
|
}
|
|
16536
17575
|
if (code === -100) {
|
|
16537
|
-
const uNewState =
|
|
16538
|
-
const uOldState = readU32(e.lParam, 36);
|
|
17576
|
+
const { uNewState, uOldState } = NMLISTVIEW.decode(e.lParam);
|
|
16539
17577
|
if ((uNewState & 2) !== (uOldState & 2))
|
|
16540
17578
|
return 1;
|
|
16541
17579
|
}
|
|
16542
17580
|
if (code === -2) {
|
|
16543
|
-
const iItem =
|
|
16544
|
-
const iSubItem = readI323(e.lParam, NMIA_SUBITEM);
|
|
17581
|
+
const { iItem, iSubItem } = NMLISTVIEW.decode(e.lParam);
|
|
16545
17582
|
const col = columns2[iSubItem];
|
|
16546
17583
|
const record = data2[iItem];
|
|
16547
17584
|
if (col?.onCellClick && record !== void 0)
|
|
@@ -16559,33 +17596,20 @@ var ListView = (0, import_react9.forwardRef)(function ListViewInner({ columns: c
|
|
|
16559
17596
|
const h = lvRef.current;
|
|
16560
17597
|
if (!h)
|
|
16561
17598
|
return;
|
|
16562
|
-
|
|
16563
|
-
if (!
|
|
16564
|
-
return;
|
|
16565
|
-
const sp = gui10.GetCursorPos();
|
|
16566
|
-
if (!sp)
|
|
17599
|
+
const pt = POINT.alloc();
|
|
17600
|
+
if (!GetCursorPos(pt.ptr))
|
|
16567
17601
|
return;
|
|
16568
|
-
|
|
16569
|
-
const
|
|
16570
|
-
|
|
16571
|
-
|
|
16572
|
-
|
|
16573
|
-
const lvhi = new ArrayBuffer(24);
|
|
16574
|
-
const lvd = new DataView(lvhi);
|
|
16575
|
-
lvd.setInt32(0, sdv.getInt32(0, true), true);
|
|
16576
|
-
lvd.setInt32(4, sdv.getInt32(4, true), true);
|
|
16577
|
-
lvd.setInt32(12, -1, true);
|
|
16578
|
-
lvd.setInt32(16, -1, true);
|
|
16579
|
-
const lvhiPtr = bufPtr2(lvhi);
|
|
16580
|
-
gui10.SendMessage(h, 4153, 0, lvhiPtr);
|
|
16581
|
-
const iItem = readI323(lvhiPtr, 12);
|
|
16582
|
-
const iSubItem = readI323(lvhiPtr, 16);
|
|
17602
|
+
ScreenToClient(h, pt.ptr);
|
|
17603
|
+
const { x: sx, y: sy } = POINT.decode(pt);
|
|
17604
|
+
const hit = LVHITTESTINFO.encode({ pt: [sx, sy], iItem: -1, iSubItem: -1 });
|
|
17605
|
+
gui9.SendMessage(h, 4153, 0, hit.ptr);
|
|
17606
|
+
const { iItem, iSubItem } = LVHITTESTINFO.decode(hit);
|
|
16583
17607
|
const style2 = resolveCellStyle(columns2, data2, iItem, iSubItem);
|
|
16584
17608
|
if (!style2 || style2.cursor === void 0)
|
|
16585
17609
|
return;
|
|
16586
|
-
const hc =
|
|
17610
|
+
const hc = LoadCursor(NULL, style2.cursor);
|
|
16587
17611
|
if (hc) {
|
|
16588
|
-
|
|
17612
|
+
SetCursor(hc);
|
|
16589
17613
|
return 1;
|
|
16590
17614
|
}
|
|
16591
17615
|
return;
|
|
@@ -16595,7 +17619,7 @@ var ListView = (0, import_react9.forwardRef)(function ListViewInner({ columns: c
|
|
|
16595
17619
|
// _build/lib/react-qw/components/ProgressBar.js
|
|
16596
17620
|
var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1);
|
|
16597
17621
|
var import_react10 = __toESM(require_react(), 1);
|
|
16598
|
-
import * as
|
|
17622
|
+
import * as gui10 from "gui";
|
|
16599
17623
|
var ProgressBar = (0, import_react10.forwardRef)(({ value = 0, max = 100, style, smooth }, ref) => {
|
|
16600
17624
|
const pbRef = (0, import_react10.useRef)(null);
|
|
16601
17625
|
const ws = 268435456 | 8388608 | (smooth ? 1 : 0);
|
|
@@ -16603,8 +17627,8 @@ var ProgressBar = (0, import_react10.forwardRef)(({ value = 0, max = 100, style,
|
|
|
16603
17627
|
const h = pbRef.current;
|
|
16604
17628
|
if (!h)
|
|
16605
17629
|
return;
|
|
16606
|
-
|
|
16607
|
-
|
|
17630
|
+
gui10.SendMessage(h, 1030, 0, max);
|
|
17631
|
+
gui10.SendMessage(h, 1026, Math.min(value, max), 0);
|
|
16608
17632
|
}, [value, max]);
|
|
16609
17633
|
return (0, import_jsx_runtime9.jsx)("w", { type: "msctls_progress32", ws, style, ref: (h) => {
|
|
16610
17634
|
pbRef.current = h;
|
|
@@ -16618,7 +17642,7 @@ var ProgressBar = (0, import_react10.forwardRef)(({ value = 0, max = 100, style,
|
|
|
16618
17642
|
// _build/lib/react-qw/components/RadioButton.js
|
|
16619
17643
|
var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1);
|
|
16620
17644
|
var import_react11 = __toESM(require_react(), 1);
|
|
16621
|
-
import * as
|
|
17645
|
+
import * as gui11 from "gui";
|
|
16622
17646
|
var RadioButton = (0, import_react11.forwardRef)(({ checked: controlledChecked, defaultChecked = false, onChange, label, style, disabled }, ref) => {
|
|
16623
17647
|
const [internalChecked, setInternalChecked] = (0, import_react11.useState)(defaultChecked);
|
|
16624
17648
|
const isControlled = controlledChecked !== void 0;
|
|
@@ -16628,7 +17652,7 @@ var RadioButton = (0, import_react11.forwardRef)(({ checked: controlledChecked,
|
|
|
16628
17652
|
const h = rbRef.current;
|
|
16629
17653
|
if (!h)
|
|
16630
17654
|
return;
|
|
16631
|
-
|
|
17655
|
+
gui11.SendMessage(h, 241, displayChecked ? 1 : 0, 0);
|
|
16632
17656
|
}, [displayChecked]);
|
|
16633
17657
|
return (0, import_jsx_runtime10.jsx)("w", { type: "BUTTON", text: label ?? "", ws: 268435456 | 9, style, disabled, ref: (h) => {
|
|
16634
17658
|
rbRef.current = h;
|
|
@@ -16638,7 +17662,7 @@ var RadioButton = (0, import_react11.forwardRef)(({ checked: controlledChecked,
|
|
|
16638
17662
|
ref.current = h;
|
|
16639
17663
|
}, onEvent: (e) => {
|
|
16640
17664
|
if (e.msg === 514) {
|
|
16641
|
-
const newChecked =
|
|
17665
|
+
const newChecked = gui11.SendMessage(e.hwnd, 240, 0, 0) !== 0;
|
|
16642
17666
|
if (newChecked !== displayChecked) {
|
|
16643
17667
|
if (!isControlled)
|
|
16644
17668
|
setInternalChecked(newChecked);
|
|
@@ -16651,24 +17675,27 @@ var RadioButton = (0, import_react11.forwardRef)(({ checked: controlledChecked,
|
|
|
16651
17675
|
// _build/lib/react-qw/components/ScrollView.js
|
|
16652
17676
|
var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
|
|
16653
17677
|
var import_react12 = __toESM(require_react(), 1);
|
|
16654
|
-
import * as
|
|
17678
|
+
import * as gui12 from "gui";
|
|
16655
17679
|
var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth, contentHeight }, ref) => {
|
|
16656
17680
|
const svRef = (0, import_react12.useRef)(null);
|
|
16657
17681
|
const contentRef = (0, import_react12.useRef)(null);
|
|
16658
17682
|
const scrollXRef = (0, import_react12.useRef)(0);
|
|
16659
17683
|
const scrollYRef = (0, import_react12.useRef)(0);
|
|
16660
17684
|
function updateScroll(sv, content) {
|
|
16661
|
-
const svRect =
|
|
17685
|
+
const svRect = gui12.GetClientRect(sv);
|
|
16662
17686
|
if (!svRect)
|
|
16663
17687
|
return;
|
|
16664
17688
|
const svW = svRect.right - svRect.left;
|
|
16665
17689
|
const svH = svRect.bottom - svRect.top;
|
|
16666
|
-
const
|
|
17690
|
+
const hdc = GetDC(NULL);
|
|
17691
|
+
const scale = hdc ? GetDeviceCaps(hdc, 88) / 96 : 1;
|
|
17692
|
+
if (hdc)
|
|
17693
|
+
ReleaseDC(NULL, hdc);
|
|
16667
17694
|
const natW = Math.round((contentWidth ?? svW / scale) * scale);
|
|
16668
17695
|
const natH = Math.round((contentHeight ?? svH / scale) * scale);
|
|
16669
17696
|
scrollXRef.current = Math.max(0, Math.min(scrollXRef.current, natW - svW));
|
|
16670
17697
|
scrollYRef.current = Math.max(0, Math.min(scrollYRef.current, natH - svH));
|
|
16671
|
-
|
|
17698
|
+
SetWindowPos(
|
|
16672
17699
|
content,
|
|
16673
17700
|
0,
|
|
16674
17701
|
-scrollXRef.current,
|
|
@@ -16680,18 +17707,18 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
|
|
|
16680
17707
|
);
|
|
16681
17708
|
forceFlexLayout(content);
|
|
16682
17709
|
if (natW > svW) {
|
|
16683
|
-
|
|
16684
|
-
|
|
17710
|
+
gui12.SetScrollInfo(sv, 0, { min: 0, max: natW - 1, page: svW, pos: scrollXRef.current }, true);
|
|
17711
|
+
ShowScrollBar(sv, 0, 1);
|
|
16685
17712
|
} else {
|
|
16686
17713
|
scrollXRef.current = 0;
|
|
16687
|
-
|
|
17714
|
+
ShowScrollBar(sv, 0, 0);
|
|
16688
17715
|
}
|
|
16689
17716
|
if (natH > svH) {
|
|
16690
|
-
|
|
16691
|
-
|
|
17717
|
+
gui12.SetScrollInfo(sv, 1, { min: 0, max: natH - 1, page: svH, pos: scrollYRef.current }, true);
|
|
17718
|
+
ShowScrollBar(sv, 1, 1);
|
|
16692
17719
|
} else {
|
|
16693
17720
|
scrollYRef.current = 0;
|
|
16694
|
-
|
|
17721
|
+
ShowScrollBar(sv, 1, 0);
|
|
16695
17722
|
}
|
|
16696
17723
|
}
|
|
16697
17724
|
(0, import_react12.useLayoutEffect)(() => {
|
|
@@ -16707,7 +17734,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
|
|
|
16707
17734
|
} else {
|
|
16708
17735
|
scrollXRef.current = newPos;
|
|
16709
17736
|
}
|
|
16710
|
-
|
|
17737
|
+
SetWindowPos(
|
|
16711
17738
|
content,
|
|
16712
17739
|
0,
|
|
16713
17740
|
-scrollXRef.current,
|
|
@@ -16717,14 +17744,14 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
|
|
|
16717
17744
|
1 | 4
|
|
16718
17745
|
/* gui.SetWindowPosFlag.SWP_NOZORDER */
|
|
16719
17746
|
);
|
|
16720
|
-
|
|
17747
|
+
gui12.SetScrollInfo(sv, bar, { pos: newPos }, true);
|
|
16721
17748
|
}
|
|
16722
17749
|
function handleScroll(e, bar) {
|
|
16723
17750
|
const sv = svRef.current;
|
|
16724
17751
|
const content = contentRef.current;
|
|
16725
17752
|
if (!sv || !content)
|
|
16726
17753
|
return;
|
|
16727
|
-
const info =
|
|
17754
|
+
const info = gui12.GetScrollInfo(sv, bar);
|
|
16728
17755
|
const maxPos = info.max - info.page + 1;
|
|
16729
17756
|
const code = e.wParam & 65535;
|
|
16730
17757
|
const ref_ = bar === 1 ? scrollYRef : scrollXRef;
|
|
@@ -16758,7 +17785,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
|
|
|
16758
17785
|
if (!isHorz && contentHeight === void 0)
|
|
16759
17786
|
return;
|
|
16760
17787
|
const bar = isHorz ? 0 : 1;
|
|
16761
|
-
const info =
|
|
17788
|
+
const info = gui12.GetScrollInfo(sv, bar);
|
|
16762
17789
|
const maxPos = info.max - info.page + 1;
|
|
16763
17790
|
const ref_ = isHorz ? scrollXRef : scrollYRef;
|
|
16764
17791
|
let newPos = ref_.current + dy;
|
|
@@ -16775,7 +17802,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
|
|
|
16775
17802
|
}, onEvent: {
|
|
16776
17803
|
fn: (e) => {
|
|
16777
17804
|
if (e.msg === 132 || e.msg === 161) {
|
|
16778
|
-
return
|
|
17805
|
+
return DefWindowProc(e.hwnd, e.msg, e.wParam, e.lParam);
|
|
16779
17806
|
}
|
|
16780
17807
|
if (e.msg === 277) {
|
|
16781
17808
|
handleScroll(
|
|
@@ -16807,7 +17834,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
|
|
|
16807
17834
|
// _build/lib/react-qw/components/Slider.js
|
|
16808
17835
|
var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1);
|
|
16809
17836
|
var import_react13 = __toESM(require_react(), 1);
|
|
16810
|
-
import * as
|
|
17837
|
+
import * as gui13 from "gui";
|
|
16811
17838
|
var Slider = (0, import_react13.forwardRef)(({ value, onChange, min = 0, max = 100, vertical = false, disabled, style }, ref) => {
|
|
16812
17839
|
const wrapperRef = (0, import_react13.useRef)(null);
|
|
16813
17840
|
const sliderRef = (0, import_react13.useRef)(null);
|
|
@@ -16816,14 +17843,14 @@ var Slider = (0, import_react13.forwardRef)(({ value, onChange, min = 0, max = 1
|
|
|
16816
17843
|
if (!h)
|
|
16817
17844
|
return;
|
|
16818
17845
|
const lParam = min & 65535 | (max & 65535) << 16;
|
|
16819
|
-
|
|
16820
|
-
|
|
17846
|
+
gui13.SendMessage(h, 1030, 0, lParam);
|
|
17847
|
+
gui13.SendMessage(h, 1029, 1, value);
|
|
16821
17848
|
}, [min, max]);
|
|
16822
17849
|
(0, import_react13.useEffect)(() => {
|
|
16823
17850
|
const h = sliderRef.current;
|
|
16824
17851
|
if (!h)
|
|
16825
17852
|
return;
|
|
16826
|
-
|
|
17853
|
+
gui13.SendMessage(h, 1029, 1, value);
|
|
16827
17854
|
}, [value]);
|
|
16828
17855
|
const tbStyle = 268435456 | 65536 | 1 | (vertical ? 2 : 0);
|
|
16829
17856
|
return (0, import_jsx_runtime12.jsx)("w", { type: "STATIC", ws: 268435456 | 33554432, style, ref: (h) => {
|
|
@@ -16834,13 +17861,13 @@ var Slider = (0, import_react13.forwardRef)(({ value, onChange, min = 0, max = 1
|
|
|
16834
17861
|
ref.current = h;
|
|
16835
17862
|
}, onEvent: (e) => {
|
|
16836
17863
|
if (e.msg === 132 || e.msg === 161) {
|
|
16837
|
-
return
|
|
17864
|
+
return DefWindowProc(e.hwnd, e.msg, e.wParam, e.lParam);
|
|
16838
17865
|
}
|
|
16839
17866
|
if (e.msg === 276 || e.msg === 277) {
|
|
16840
17867
|
const h = sliderRef.current;
|
|
16841
17868
|
if (!h)
|
|
16842
17869
|
return 0;
|
|
16843
|
-
const pos =
|
|
17870
|
+
const pos = gui13.SendMessage(h, 1024, 0, 0);
|
|
16844
17871
|
onChange?.(pos);
|
|
16845
17872
|
return 0;
|
|
16846
17873
|
}
|
|
@@ -16853,18 +17880,7 @@ var Slider = (0, import_react13.forwardRef)(({ value, onChange, min = 0, max = 1
|
|
|
16853
17880
|
// _build/lib/react-qw/components/Tab.js
|
|
16854
17881
|
var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1);
|
|
16855
17882
|
var import_react14 = __toESM(require_react(), 1);
|
|
16856
|
-
import * as
|
|
16857
|
-
import * as ffi6 from "ffi";
|
|
16858
|
-
function textToUtf163(s) {
|
|
16859
|
-
const buf = new ArrayBuffer((s.length + 1) * 2);
|
|
16860
|
-
const dv = new DataView(buf);
|
|
16861
|
-
for (let i = 0; i < s.length; i++)
|
|
16862
|
-
dv.setUint16(i * 2, s.charCodeAt(i), true);
|
|
16863
|
-
return buf;
|
|
16864
|
-
}
|
|
16865
|
-
function readI324(ptr, offset) {
|
|
16866
|
-
return ffi6.readByte(ptr + offset) | ffi6.readByte(ptr + offset + 1) << 8 | ffi6.readByte(ptr + offset + 2) << 16 | ffi6.readByte(ptr + offset + 3) << 24;
|
|
16867
|
-
}
|
|
17883
|
+
import * as gui14 from "gui";
|
|
16868
17884
|
var Tab = (0, import_react14.forwardRef)(({ tabs, selectedIndex: controlledIndex, defaultSelectedIndex = 0, onChange, style }, ref) => {
|
|
16869
17885
|
const [internalIndex, setInternalIndex] = (0, import_react14.useState)(defaultSelectedIndex);
|
|
16870
17886
|
const isControlled = controlledIndex !== void 0;
|
|
@@ -16874,32 +17890,36 @@ var Tab = (0, import_react14.forwardRef)(({ tabs, selectedIndex: controlledIndex
|
|
|
16874
17890
|
const h = tabHwnd.current;
|
|
16875
17891
|
if (!h)
|
|
16876
17892
|
return;
|
|
16877
|
-
|
|
17893
|
+
gui14.SendMessage(h, 4873, 0, 0);
|
|
16878
17894
|
for (let i = 0; i < tabs.length; i++) {
|
|
16879
|
-
const titleBuf =
|
|
16880
|
-
const tci =
|
|
16881
|
-
|
|
16882
|
-
|
|
16883
|
-
|
|
16884
|
-
|
|
16885
|
-
|
|
16886
|
-
|
|
17895
|
+
const titleBuf = WCHAR.encode(tabs[i].title);
|
|
17896
|
+
const tci = TCITEMW.encode({
|
|
17897
|
+
mask: 1,
|
|
17898
|
+
dwState: 0,
|
|
17899
|
+
dwStateMask: 0,
|
|
17900
|
+
pszText: titleBuf.ptr,
|
|
17901
|
+
cchTextMax: tabs[i].title.length + 1,
|
|
17902
|
+
iImage: 0,
|
|
17903
|
+
lParam: 0
|
|
17904
|
+
});
|
|
17905
|
+
const tciPtr = tci.ptr;
|
|
17906
|
+
gui14.SendMessage(h, 4926, i, tciPtr);
|
|
16887
17907
|
}
|
|
16888
|
-
|
|
17908
|
+
gui14.SendMessage(h, 4876, sel, 0);
|
|
16889
17909
|
}, [tabs]);
|
|
16890
17910
|
(0, import_react14.useEffect)(() => {
|
|
16891
17911
|
const h = tabHwnd.current;
|
|
16892
17912
|
if (h)
|
|
16893
|
-
|
|
17913
|
+
gui14.SendMessage(h, 4876, sel, 0);
|
|
16894
17914
|
}, [sel]);
|
|
16895
17915
|
return (0, import_jsx_runtime13.jsxs)("w", { type: "STATIC", ws: 268435456 | 33554432, style: { ...style, flexDirection: "column", alignItems: "stretch" }, ref, onEvent: (e) => {
|
|
16896
17916
|
if (e.msg === 78) {
|
|
16897
17917
|
const h = tabHwnd.current;
|
|
16898
17918
|
if (!h)
|
|
16899
17919
|
return;
|
|
16900
|
-
const code =
|
|
17920
|
+
const code = nmCode(e.lParam);
|
|
16901
17921
|
if (code === -552 || code === -2) {
|
|
16902
|
-
const newSel =
|
|
17922
|
+
const newSel = gui14.SendMessage(h, 4875, 0, 0);
|
|
16903
17923
|
if (newSel !== sel) {
|
|
16904
17924
|
if (!isControlled)
|
|
16905
17925
|
setInternalIndex(newSel);
|
|
@@ -16912,79 +17932,50 @@ var Tab = (0, import_react14.forwardRef)(({ tabs, selectedIndex: controlledIndex
|
|
|
16912
17932
|
|
|
16913
17933
|
// _build/lib/react-qw/components/Tooltip.js
|
|
16914
17934
|
var import_react15 = __toESM(require_react(), 1);
|
|
16915
|
-
import * as
|
|
16916
|
-
import * as ffi7 from "ffi";
|
|
17935
|
+
import * as gui15 from "gui";
|
|
16917
17936
|
|
|
16918
17937
|
// _build/lib/react-qw/components/TreeView.js
|
|
16919
17938
|
var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1);
|
|
16920
17939
|
var import_react16 = __toESM(require_react(), 1);
|
|
16921
|
-
import * as
|
|
16922
|
-
import * as ffi8 from "ffi";
|
|
16923
|
-
function textToUtf164(s) {
|
|
16924
|
-
const buf = new ArrayBuffer((s.length + 1) * 2);
|
|
16925
|
-
const dv = new DataView(buf);
|
|
16926
|
-
for (let i = 0; i < s.length; i++)
|
|
16927
|
-
dv.setUint16(i * 2, s.charCodeAt(i), true);
|
|
16928
|
-
return buf;
|
|
16929
|
-
}
|
|
16930
|
-
function readI325(ptr, offset) {
|
|
16931
|
-
return ffi8.readByte(ptr + offset) | ffi8.readByte(ptr + offset + 1) << 8 | ffi8.readByte(ptr + offset + 2) << 16 | ffi8.readByte(ptr + offset + 3) << 24;
|
|
16932
|
-
}
|
|
16933
|
-
function bufPtr3(buf) {
|
|
16934
|
-
return ffi8.bufferPtr(buf);
|
|
16935
|
-
}
|
|
16936
|
-
function setPtr(dv, offset, ptr) {
|
|
16937
|
-
dv.setUint32(offset, ptr & 4294967295, true);
|
|
16938
|
-
dv.setUint32(offset + 4, Math.floor(ptr / 4294967296), true);
|
|
16939
|
-
}
|
|
17940
|
+
import * as gui16 from "gui";
|
|
16940
17941
|
function buildTvItem(textPtr, cChildren) {
|
|
16941
17942
|
let mask = 1;
|
|
16942
17943
|
if (cChildren > 0)
|
|
16943
17944
|
mask |= 64;
|
|
16944
|
-
|
|
16945
|
-
|
|
16946
|
-
|
|
16947
|
-
|
|
16948
|
-
|
|
16949
|
-
|
|
16950
|
-
|
|
16951
|
-
|
|
16952
|
-
|
|
16953
|
-
|
|
16954
|
-
|
|
16955
|
-
|
|
16956
|
-
return buf;
|
|
16957
|
-
}
|
|
16958
|
-
function buildTvInsertStruct(hParent, hInsertAfter, itemBuf) {
|
|
16959
|
-
const buf = new ArrayBuffer(72);
|
|
16960
|
-
const dv = new DataView(buf);
|
|
16961
|
-
setPtr(dv, 0, hParent);
|
|
16962
|
-
setPtr(dv, 8, hInsertAfter);
|
|
16963
|
-
const src = new DataView(itemBuf);
|
|
16964
|
-
for (let i = 0; i < 56; i += 4)
|
|
16965
|
-
dv.setUint32(16 + i, src.getUint32(i, true), true);
|
|
16966
|
-
return buf;
|
|
17945
|
+
return TVITEM.encode({
|
|
17946
|
+
mask,
|
|
17947
|
+
hItem: 0,
|
|
17948
|
+
state: 0,
|
|
17949
|
+
stateMask: 0,
|
|
17950
|
+
pszText: textPtr,
|
|
17951
|
+
cchTextMax: 260,
|
|
17952
|
+
iImage: 0,
|
|
17953
|
+
iSelectedImage: 0,
|
|
17954
|
+
cChildren,
|
|
17955
|
+
lParam: 0
|
|
17956
|
+
});
|
|
16967
17957
|
}
|
|
16968
17958
|
function insertItems(hTree, nodes, parentHandle, hItemMap, keyMap) {
|
|
16969
17959
|
for (const node of nodes) {
|
|
16970
17960
|
const cChildren = node.children && node.children.length > 0 ? 1 : 0;
|
|
16971
|
-
const textBuf =
|
|
16972
|
-
const itemBuf = buildTvItem(
|
|
16973
|
-
const
|
|
16974
|
-
const
|
|
17961
|
+
const textBuf = WCHAR.encode(node.label);
|
|
17962
|
+
const itemBuf = buildTvItem(textBuf.ptr, cChildren);
|
|
17963
|
+
const item = TVITEM.decode(itemBuf);
|
|
17964
|
+
const tvins = TVINSERTSTRUCT.encode({ hParent: parentHandle, hInsertAfter: -65536, item });
|
|
17965
|
+
const hItem = gui16.SendMessage(hTree, 4402, 0, tvins.ptr);
|
|
16975
17966
|
hItemMap.set(hItem, node);
|
|
16976
17967
|
if (node.key)
|
|
16977
17968
|
keyMap.set(node.key, hItem);
|
|
16978
17969
|
if (node.children && node.children.length > 0) {
|
|
16979
17970
|
insertItems(hTree, node.children, hItem, hItemMap, keyMap);
|
|
16980
|
-
|
|
17971
|
+
gui16.SendMessage(hTree, 4354, 2, hItem);
|
|
16981
17972
|
}
|
|
16982
17973
|
}
|
|
16983
17974
|
}
|
|
16984
17975
|
function deleteAllItems(hTree) {
|
|
16985
|
-
const n =
|
|
17976
|
+
const n = gui16.SendMessage(hTree, 4357, 0, 0);
|
|
16986
17977
|
if (n > 0)
|
|
16987
|
-
|
|
17978
|
+
gui16.SendMessage(
|
|
16988
17979
|
hTree,
|
|
16989
17980
|
4353,
|
|
16990
17981
|
1,
|
|
@@ -17016,7 +18007,7 @@ var TreeView = (0, import_react16.forwardRef)(function TreeViewInner({ data: dat
|
|
|
17016
18007
|
const h = tvRef.current;
|
|
17017
18008
|
if (!h)
|
|
17018
18009
|
return;
|
|
17019
|
-
|
|
18010
|
+
gui16.SendMessage(
|
|
17020
18011
|
h,
|
|
17021
18012
|
4396,
|
|
17022
18013
|
0,
|
|
@@ -17032,16 +18023,16 @@ var TreeView = (0, import_react16.forwardRef)(function TreeViewInner({ data: dat
|
|
|
17032
18023
|
return;
|
|
17033
18024
|
const hItem = keyMapRef.current.get(selKey);
|
|
17034
18025
|
if (hItem !== void 0)
|
|
17035
|
-
|
|
18026
|
+
gui16.SendMessage(h, 4363, 9, hItem);
|
|
17036
18027
|
}, [selKey]);
|
|
17037
18028
|
return (0, import_jsx_runtime14.jsx)("w", { type: "STATIC", ws: 268435456 | 33554432, style: { ...style, flexDirection: "column", alignItems: "stretch" }, ref, onEvent: (e) => {
|
|
17038
18029
|
if (e.msg === 78) {
|
|
17039
|
-
const code =
|
|
18030
|
+
const code = nmCode(e.lParam);
|
|
17040
18031
|
if (code === -451) {
|
|
17041
18032
|
const h = tvRef.current;
|
|
17042
18033
|
if (!h)
|
|
17043
18034
|
return;
|
|
17044
|
-
const hCaret =
|
|
18035
|
+
const hCaret = gui16.SendMessage(h, 4362, 9, 0);
|
|
17045
18036
|
const node = hItemMapRef.current.get(hCaret) ?? null;
|
|
17046
18037
|
const key = node?.key ?? null;
|
|
17047
18038
|
if (!isControlled)
|
|
@@ -17057,99 +18048,63 @@ var TreeView = (0, import_react16.forwardRef)(function TreeViewInner({ data: dat
|
|
|
17057
18048
|
// _build/lib/react-qw/components/PathPicker.js
|
|
17058
18049
|
var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1);
|
|
17059
18050
|
var import_react17 = __toESM(require_react(), 1);
|
|
17060
|
-
|
|
17061
|
-
|
|
17062
|
-
var
|
|
17063
|
-
var
|
|
17064
|
-
|
|
17065
|
-
|
|
17066
|
-
var
|
|
17067
|
-
var
|
|
17068
|
-
|
|
17069
|
-
|
|
17070
|
-
|
|
17071
|
-
|
|
17072
|
-
|
|
17073
|
-
|
|
17074
|
-
|
|
17075
|
-
return false;
|
|
17076
|
-
const load = (lib, name) => win3.GetProcAddress(lib, name) || 0;
|
|
17077
|
-
_GetOpenFileNameW = load(comdlg32, "GetOpenFileNameW");
|
|
17078
|
-
_SHBrowseForFolderW = load(shell32, "SHBrowseForFolderW");
|
|
17079
|
-
_SHGetPathFromIDListW = load(shell32, "SHGetPathFromIDListW");
|
|
17080
|
-
_CoTaskMemFree = load(ole32, "CoTaskMemFree");
|
|
17081
|
-
return !!_GetOpenFileNameW && !!_SHBrowseForFolderW && !!_SHGetPathFromIDListW && !!_CoTaskMemFree;
|
|
17082
|
-
}
|
|
17083
|
-
function strToWide(s) {
|
|
17084
|
-
return new TextEncoder("utf-16le").encode(s + "\0").buffer;
|
|
17085
|
-
}
|
|
17086
|
-
var _decoder = new TextDecoder("utf-16le");
|
|
17087
|
-
function wideToStr(buf, offset = 0) {
|
|
17088
|
-
const str = _decoder.decode(new Uint8Array(buf, offset));
|
|
17089
|
-
const nullIdx = str.indexOf("\0");
|
|
17090
|
-
return nullIdx >= 0 ? str.substring(0, nullIdx) : str;
|
|
17091
|
-
}
|
|
17092
|
-
function setPtr2(dv, off, ptr) {
|
|
17093
|
-
dv.setUint32(off, ptr & 4294967295, true);
|
|
17094
|
-
dv.setUint32(off + 4, Math.floor(ptr / 4294967296), true);
|
|
17095
|
-
}
|
|
18051
|
+
|
|
18052
|
+
// _build/lib/windows/comdlg32.js
|
|
18053
|
+
var b3 = (name, sig) => bind("comdlg32.dll", name, sig);
|
|
18054
|
+
var GetOpenFileName = /* @__PURE__ */ b3("GetOpenFileNameW", "<BYTE>ptr -> u32");
|
|
18055
|
+
|
|
18056
|
+
// _build/lib/windows/shell32.js
|
|
18057
|
+
var b4 = (name, sig) => bind("shell32.dll", name, sig);
|
|
18058
|
+
var SHBrowseForFolder = /* @__PURE__ */ b4("SHBrowseForFolderW", "<BYTE>ptr -> <>ptr");
|
|
18059
|
+
var SHGetPathFromIDList = /* @__PURE__ */ b4("SHGetPathFromIDListW", "<>ptr <BYTE>ptr -> u32");
|
|
18060
|
+
|
|
18061
|
+
// _build/lib/windows/ole32.js
|
|
18062
|
+
var b5 = (name, sig) => bind("ole32.dll", name, sig);
|
|
18063
|
+
var CoTaskMemFree = /* @__PURE__ */ b5("CoTaskMemFree", "<>ptr -> void");
|
|
18064
|
+
|
|
18065
|
+
// _build/lib/react-qw/components/PathPicker.js
|
|
17096
18066
|
function openFileDialog(owner, filter, title, multiple) {
|
|
17097
|
-
|
|
17098
|
-
|
|
17099
|
-
const
|
|
17100
|
-
const sv = new DataView(structBuf);
|
|
17101
|
-
const fileBuf = new ArrayBuffer(260 * 2);
|
|
17102
|
-
const filterWide = strToWide(filter);
|
|
17103
|
-
const titleWide = title ? strToWide(title) : null;
|
|
17104
|
-
sv.setUint32(0, 152, true);
|
|
17105
|
-
setPtr2(sv, 8, owner);
|
|
17106
|
-
setPtr2(sv, 24, ffi9.bufferPtr(filterWide));
|
|
17107
|
-
setPtr2(sv, 48, ffi9.bufferPtr(fileBuf));
|
|
17108
|
-
sv.setUint32(56, 260, true);
|
|
18067
|
+
const fileBuf = WCHAR.alloc(260);
|
|
18068
|
+
const filterWide = WCHAR.encode(filter);
|
|
18069
|
+
const titleWide = title ? WCHAR.encode(title) : null;
|
|
17109
18070
|
let flags = 4096 | 2048 | 8;
|
|
17110
18071
|
if (multiple)
|
|
17111
18072
|
flags |= 512;
|
|
17112
18073
|
flags |= 524288;
|
|
17113
|
-
|
|
17114
|
-
|
|
17115
|
-
|
|
17116
|
-
|
|
18074
|
+
const ofn = OPENFILENAMEW.encode({
|
|
18075
|
+
lStructSize: OPENFILENAMEW.size,
|
|
18076
|
+
hwndOwner: owner,
|
|
18077
|
+
lpstrFilter: filterWide.ptr,
|
|
18078
|
+
lpstrFile: fileBuf.ptr,
|
|
18079
|
+
nMaxFile: 260,
|
|
18080
|
+
lpstrTitle: titleWide?.ptr ?? 0,
|
|
18081
|
+
Flags: flags
|
|
18082
|
+
});
|
|
18083
|
+
const ret = GetOpenFileName(ofn);
|
|
17117
18084
|
if (!ret)
|
|
17118
18085
|
return null;
|
|
17119
18086
|
if (!multiple) {
|
|
17120
|
-
return
|
|
18087
|
+
return WCHAR.decode(fileBuf);
|
|
17121
18088
|
}
|
|
17122
|
-
const
|
|
17123
|
-
|
|
17124
|
-
const files =
|
|
17125
|
-
|
|
17126
|
-
const f = wideToStr(fileBuf, pos);
|
|
17127
|
-
if (f.length === 0)
|
|
17128
|
-
break;
|
|
17129
|
-
files.push(dir + "\\" + f);
|
|
17130
|
-
pos += (f.length + 1) * 2;
|
|
17131
|
-
}
|
|
17132
|
-
if (files.length === 0)
|
|
17133
|
-
return [dir];
|
|
17134
|
-
return files;
|
|
18089
|
+
const strs = new TextDecoder("utf-16le").decode(new Uint8Array(fileBuf)).split("\0");
|
|
18090
|
+
const dir = strs[0] ?? "";
|
|
18091
|
+
const files = strs.slice(1).filter((f) => f.length > 0).map((f) => dir + "\\" + f);
|
|
18092
|
+
return files.length > 0 ? files : [dir];
|
|
17135
18093
|
}
|
|
17136
18094
|
function openFolderDialog(owner, title) {
|
|
17137
|
-
|
|
17138
|
-
|
|
17139
|
-
|
|
17140
|
-
|
|
17141
|
-
|
|
17142
|
-
|
|
17143
|
-
|
|
17144
|
-
setPtr2(sv, 24, ffi9.bufferPtr(titleWide));
|
|
17145
|
-
sv.setUint32(32, 65, true);
|
|
17146
|
-
const pidl = ffi9.ffiCall(_SHBrowseForFolderW, [FFI_PTR2], [structBuf], FFI_PTR2);
|
|
18095
|
+
const titleWide = title ? WCHAR.encode(title) : null;
|
|
18096
|
+
const bi = BROWSEINFOW.encode({
|
|
18097
|
+
hwndOwner: owner,
|
|
18098
|
+
lpszTitle: titleWide?.ptr ?? 0,
|
|
18099
|
+
ulFlags: 65
|
|
18100
|
+
});
|
|
18101
|
+
const pidl = SHBrowseForFolder(bi);
|
|
17147
18102
|
if (!pidl)
|
|
17148
18103
|
return null;
|
|
17149
|
-
const pathBuf =
|
|
17150
|
-
const ok =
|
|
17151
|
-
|
|
17152
|
-
return ok ?
|
|
18104
|
+
const pathBuf = WCHAR.alloc(260);
|
|
18105
|
+
const ok = SHGetPathFromIDList(pidl, pathBuf);
|
|
18106
|
+
CoTaskMemFree(pidl);
|
|
18107
|
+
return ok ? WCHAR.decode(pathBuf) : null;
|
|
17153
18108
|
}
|
|
17154
18109
|
var PathPicker = (0, import_react17.forwardRef)((props, ref) => {
|
|
17155
18110
|
const { type = "file", filter = "All Files\0*.*\0\0", title, disabled, style } = props;
|
|
@@ -17200,7 +18155,7 @@ var rootMap = /* @__PURE__ */ new Map();
|
|
|
17200
18155
|
function ensureDefaultClass() {
|
|
17201
18156
|
if (defaultClassRegistered)
|
|
17202
18157
|
return DEFAULT_CLASS;
|
|
17203
|
-
|
|
18158
|
+
gui17.RegisterClass(DEFAULT_CLASS, (hwnd, msg, wParam, lParam) => {
|
|
17204
18159
|
const entry = rootMap.get(hwnd);
|
|
17205
18160
|
if (msg === 2 && entry) {
|
|
17206
18161
|
rootMap.delete(hwnd);
|
|
@@ -17213,7 +18168,7 @@ function ensureDefaultClass() {
|
|
|
17213
18168
|
return result;
|
|
17214
18169
|
if (msg === 5)
|
|
17215
18170
|
forceFlexLayout(hwnd);
|
|
17216
|
-
return
|
|
18171
|
+
return DefWindowProc(hwnd, msg, wParam, lParam);
|
|
17217
18172
|
});
|
|
17218
18173
|
defaultClassRegistered = true;
|
|
17219
18174
|
return DEFAULT_CLASS;
|
|
@@ -17226,15 +18181,15 @@ function createRoot(container) {
|
|
|
17226
18181
|
const ws = (cfg.ws ?? 0) | 13565952;
|
|
17227
18182
|
const w = (cfg.width ?? 800) * scaleFactor;
|
|
17228
18183
|
const h = (cfg.height ?? 600) * scaleFactor;
|
|
17229
|
-
const [sw, sh] =
|
|
18184
|
+
const [sw, sh] = [GetSystemMetrics(0), GetSystemMetrics(1)];
|
|
17230
18185
|
const x = cfg.x === void 0 ? (sw - w) / 2 | 0 : cfg.x === -2147483648 ? -2147483648 : cfg.x * scaleFactor;
|
|
17231
18186
|
const y = cfg.y === void 0 ? (sh - h) / 2 | 0 : cfg.y === -2147483648 ? -2147483648 : cfg.y * scaleFactor;
|
|
17232
|
-
const hwin =
|
|
18187
|
+
const hwin = gui17.CreateWindow(className, cfg.text || "", ws, x, y, w, h, null, null);
|
|
17233
18188
|
if (!hwin)
|
|
17234
18189
|
throw new Error("CreateWindow failed");
|
|
17235
18190
|
hwnd = hwin;
|
|
17236
18191
|
if (!cfg.noShowWindow)
|
|
17237
|
-
|
|
18192
|
+
gui17.ShowWindow(hwnd);
|
|
17238
18193
|
} else {
|
|
17239
18194
|
hwnd = container;
|
|
17240
18195
|
}
|
|
@@ -17309,7 +18264,7 @@ createRoot({
|
|
|
17309
18264
|
onEvent: (e) => {
|
|
17310
18265
|
if (e.msg === 16) {
|
|
17311
18266
|
console.log("test_react_listview_link done clicks=" + clicks);
|
|
17312
|
-
|
|
18267
|
+
std2.exit(0);
|
|
17313
18268
|
}
|
|
17314
18269
|
}
|
|
17315
18270
|
}).render((0, import_jsx_runtime16.jsx)(App, {}));
|