quickwin 1.2.0 → 1.3.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.
Files changed (57) hide show
  1. package/README.en.md +2 -1
  2. package/README.md +2 -1
  3. package/examples/PdfCanvas.js +3 -3
  4. package/examples/PdfCanvas.tsx +3 -3
  5. package/examples/pdf_preview2.js +34 -19
  6. package/examples/pdf_preview2.ts +34 -20
  7. package/examples/pdf_viewer.js +956 -215
  8. package/examples/pdf_viewer.tsx +29 -19
  9. package/examples/test_gallery.js +922 -194
  10. package/examples/test_react_lazy.js +905 -177
  11. package/examples/test_react_listbox.js +905 -177
  12. package/examples/test_root_window.js +905 -177
  13. package/examples/test_tab.js +905 -177
  14. package/lib/fetch.js +35 -7
  15. package/lib/fetch.ts +24 -4
  16. package/lib/ffi-bind.js +85 -0
  17. package/lib/ffi-bind.ts +170 -0
  18. package/lib/ffi-struct.js +224 -0
  19. package/lib/ffi-struct.ts +239 -0
  20. package/lib/react-qw/components/DateTimePicker.js +21 -15
  21. package/lib/react-qw/components/Link.js +4 -6
  22. package/lib/react-qw/components/ListView.js +84 -40
  23. package/lib/react-qw/components/PathPicker.js +40 -24
  24. package/lib/react-qw/components/Tab.js +21 -10
  25. package/lib/react-qw/components/Tooltip.js +27 -15
  26. package/lib/react-qw/components/TreeView.js +23 -33
  27. package/lib/react-qw/nmhdr.js +26 -0
  28. package/lib/react-qw/nmhdr.ts +32 -0
  29. package/lib/text-measure.js +14 -24
  30. package/lib/text-measure.ts +14 -24
  31. package/lib/win-common-structs.js +39 -0
  32. package/lib/win-common-structs.ts +41 -0
  33. package/main.js +46 -0
  34. package/package.json +2 -1
  35. package/quickwin.d.ts +7 -2
  36. package/qwin-nowasm-x86.exe +0 -0
  37. package/qwin-nowasm.exe +0 -0
  38. package/qwin-x86.exe +0 -0
  39. package/qwin.exe +0 -0
  40. package/test/run.js +3 -0
  41. package/test/run.ts +3 -0
  42. package/test/test_ffi.js +12 -8
  43. package/test/test_ffi.ts +12 -12
  44. package/test/test_ffi_bind.js +42 -0
  45. package/test/test_ffi_bind.ts +46 -0
  46. package/test/test_ffi_struct.js +201 -0
  47. package/test/test_ffi_struct.ts +223 -0
  48. package/test/test_net_fetch.js +62 -0
  49. package/test/test_net_fetch.ts +72 -0
  50. package/test/test_react_complex.js +908 -180
  51. package/test/test_react_counter.js +905 -177
  52. package/test/test_react_flex.js +905 -177
  53. package/test/test_react_hidden.js +907 -179
  54. package/test/test_react_listview_link.js +905 -177
  55. package/test/test_react_render.js +905 -177
  56. package/test/test_wolfssl_read.js +201 -0
  57. package/test/test_wolfssl_read.ts +181 -0
@@ -7,6 +7,7 @@ import type { Document, Page, Pixmap } from '../vendor/mupdf-wasm/mupdf.js'
7
7
  import { useState } from 'react'
8
8
  import { render, Button, Input, ScrollView } from '../lib/react-qw/index.js'
9
9
  import { PdfCanvas } from './PdfCanvas.js'
10
+ import { OPENFILENAMEW } from '../lib/win-common-structs.js'
10
11
 
11
12
  type MuPdf = typeof import('../vendor/mupdf-wasm/mupdf.js')
12
13
 
@@ -46,28 +47,37 @@ function wideToStr(buf: ArrayBuffer): string {
46
47
  return String.fromCharCode(...chars)
47
48
  }
48
49
 
49
- function setPtr(dv: DataView, off: number, ptr: number): void {
50
- dv.setUint32(off, ptr & 0xFFFFFFFF, true)
51
- dv.setUint32(off + 4, Math.floor(ptr / 0x100000000), true)
52
- }
53
-
54
50
  function openPdfFileDialog(owner: number): string | null {
55
- const structBuf = new ArrayBuffer(152)
56
- const sv = new DataView(structBuf)
57
51
  const fileBuf = new ArrayBuffer(260 * 2)
58
52
  const filterWide = strToWide('PDF Files\0*.pdf\0All Files\0*.*\0\0')
59
-
60
- sv.setUint32(0, 152, true)
61
- sv.setUint32(8, owner & 0xFFFFFFFF, true)
62
- sv.setUint32(12, Math.floor(owner / 0x100000000), true)
63
-
64
- setPtr(sv, 24, ffi.bufferPtr(filterWide))
65
- setPtr(sv, 48, ffi.bufferPtr(fileBuf))
66
- sv.setUint32(56, 260, true)
67
-
68
- sv.setUint32(96, 0x1000 | 0x0800 | 0x0004, true)
69
-
70
- const ret = ffi.ffiCall(GetOpenFileNameW_, [FFI_PTR], [structBuf], FFI_U32)
53
+ const ofn: ArrayBuffer & { __keep?: ArrayBuffer[] } = OPENFILENAMEW.write({
54
+ lStructSize: OPENFILENAMEW.size,
55
+ hwndOwner: owner,
56
+ hInstance: 0,
57
+ lpstrFilter: ffi.bufferPtr(filterWide),
58
+ lpstrCustomFilter: 0,
59
+ nMaxCustFilter: 0,
60
+ nFilterIndex: 0,
61
+ lpstrFile: ffi.bufferPtr(fileBuf),
62
+ nMaxFile: 260,
63
+ lpstrFileTitle: 0,
64
+ nMaxFileTitle: 0,
65
+ lpstrInitialDir: 0,
66
+ lpstrTitle: 0,
67
+ Flags: 0x1000 | 0x0800 | 0x0004,
68
+ nFileOffset: 0,
69
+ nFileExtension: 0,
70
+ lpstrDefExt: 0,
71
+ lCustData: 0,
72
+ lpfnHook: 0,
73
+ lpTemplateName: 0,
74
+ pvReserved: 0,
75
+ dwReserved: 0,
76
+ FlagsEx: 0,
77
+ })
78
+ ofn.__keep = [fileBuf, filterWide]
79
+
80
+ const ret = ffi.ffiCall(GetOpenFileNameW_, [FFI_PTR], [ofn], FFI_U32)
71
81
  if (!ret) return null
72
82
 
73
83
  const path = wideToStr(fileBuf)