Skip to content

Commit 8ed4475

Browse files
committed
Adding New APIs
minimize maximize setCenter getPort setFrameless setTransparent setResizable setBrowserFolder
1 parent 486a074 commit 8ed4475

File tree

3 files changed

+226
-5
lines changed

3 files changed

+226
-5
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,3 +110,5 @@ Thumbs.db
110110

111111
# User-specific private settings
112112
*.DotSettings.user
113+
/.claude
114+
CLAUDE.md

src/lib.ts

Lines changed: 115 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,16 @@ const symbols = {
1515
parameters: [],
1616
result: "usize",
1717
},
18+
webui_new_window_id: {
19+
// size_t webui_new_window_id(size_t window_number)
20+
parameters: ["usize"],
21+
result: "usize",
22+
},
23+
webui_get_new_window_id: {
24+
// size_t webui_get_new_window_id(void)
25+
parameters: [],
26+
result: "usize",
27+
},
1828
webui_show: {
1929
// bool webui_show(size_t window, const char* content)
2030
parameters: ["usize", "buffer"],
@@ -64,11 +74,26 @@ const symbols = {
6474
parameters: ["usize"],
6575
result: "void",
6676
},
77+
webui_minimize: {
78+
// void webui_minimize(size_t window)
79+
parameters: ["usize"],
80+
result: "void",
81+
},
82+
webui_maximize: {
83+
// void webui_maximize(size_t window)
84+
parameters: ["usize"],
85+
result: "void",
86+
},
6787
webui_set_file_handler: {
6888
// void webui_set_file_handler(size_t window, const void* (*handler)(const char* filename, int* length))
6989
parameters: ["usize", "function"],
7090
result: "void",
7191
},
92+
webui_set_file_handler_window: {
93+
// void webui_set_file_handler_window(size_t window, const void* (*handler)(size_t window, const char* filename, int* length))
94+
parameters: ["usize", "function"],
95+
result: "void",
96+
},
7297
webui_interface_is_app_running: {
7398
// bool webui_interface_is_app_running(void)
7499
parameters: [],
@@ -94,11 +119,16 @@ const symbols = {
94119
parameters: ["usize", "usize", "usize"],
95120
result: "bool",
96121
},
97-
// webui_interface_get_size_at: {
98-
// // size_t webui_interface_get_size_at(size_t window, size_t event_number, size_t index)
99-
// parameters: ["usize", "usize", "usize"],
100-
// result: "usize",
101-
// },
122+
webui_interface_get_size_at: {
123+
// size_t webui_interface_get_size_at(size_t window, size_t event_number, size_t index)
124+
parameters: ["usize", "usize", "usize"],
125+
result: "usize",
126+
},
127+
webui_interface_get_float_at: {
128+
// double webui_interface_get_float_at(size_t window, size_t event_number, size_t index)
129+
parameters: ["usize", "usize", "usize"],
130+
result: "f64",
131+
},
102132
webui_clean: {
103133
// void webui_clean()
104134
parameters: [],
@@ -109,6 +139,11 @@ const symbols = {
109139
parameters: ["usize", "buffer"],
110140
result: "bool",
111141
},
142+
webui_set_browser_folder: {
143+
// void webui_set_browser_folder(const char* path)
144+
parameters: ["buffer"],
145+
result: "void",
146+
},
112147
webui_set_tls_certificate: {
113148
// bool webui_set_tls_certificate(const char* certificate_pem, const char* private_key_pem)
114149
parameters: ["buffer", "buffer"],
@@ -174,6 +209,11 @@ const symbols = {
174209
parameters: ["usize", "u32", "u32"],
175210
result: "void",
176211
},
212+
webui_set_center: {
213+
// void webui_set_center(size_t window)
214+
parameters: ["usize"],
215+
result: "void",
216+
},
177217
webui_get_url: {
178218
// const char* webui_get_url(size_t window)
179219
parameters: ["usize"],
@@ -209,6 +249,21 @@ const symbols = {
209249
parameters: ["usize"],
210250
result: "usize",
211251
},
252+
webui_win32_get_hwnd: {
253+
// void* webui_win32_get_hwnd(size_t window)
254+
parameters: ["usize"],
255+
result: "pointer",
256+
},
257+
webui_get_hwnd: {
258+
// void* webui_get_hwnd(size_t window)
259+
parameters: ["usize"],
260+
result: "pointer",
261+
},
262+
webui_get_port: {
263+
// size_t webui_get_port(size_t window)
264+
parameters: ["usize"],
265+
result: "usize",
266+
},
212267
webui_set_port: {
213268
// bool webui_set_port(size_t window, size_t port)
214269
parameters: ["usize", "usize"],
@@ -230,6 +285,21 @@ const symbols = {
230285
parameters: ["usize", "bool"],
231286
result: "void",
232287
},
288+
webui_set_event_blocking: {
289+
// void webui_set_event_blocking(size_t window, bool status)
290+
parameters: ["usize", "bool"],
291+
result: "void",
292+
},
293+
webui_set_frameless: {
294+
// void webui_set_frameless(size_t window, bool status)
295+
parameters: ["usize", "bool"],
296+
result: "void",
297+
},
298+
webui_set_transparent: {
299+
// void webui_set_transparent(size_t window, bool status)
300+
parameters: ["usize", "bool"],
301+
result: "void",
302+
},
233303
webui_interface_show_client: {
234304
// bool webui_interface_show_client(size_t window, size_t event_number, const char* content)
235305
parameters: ["usize", "usize", "buffer"],
@@ -297,6 +367,11 @@ const symbols = {
297367
parameters: ["usize", "bool"],
298368
result: "void",
299369
},
370+
webui_set_resizable: {
371+
// void webui_set_resizable(size_t window, bool status)
372+
parameters: ["usize", "bool"],
373+
result: "void",
374+
},
300375
webui_is_high_contrast: {
301376
// bool webui_is_high_contrast(void)
302377
parameters: [],
@@ -332,6 +407,41 @@ const symbols = {
332407
parameters: [],
333408
result: "usize",
334409
},
410+
webui_get_mime_type: {
411+
// const char* webui_get_mime_type(const char* file)
412+
parameters: ["buffer"],
413+
result: "buffer",
414+
},
415+
webui_memcpy: {
416+
// void webui_memcpy(void* dest, void* src, size_t count)
417+
parameters: ["pointer", "pointer", "usize"],
418+
result: "void",
419+
},
420+
webui_set_logger: {
421+
// void webui_set_logger(void (*func)(size_t level, const char* log, void* user_data), void *user_data)
422+
parameters: ["function", "pointer"],
423+
result: "void",
424+
},
425+
webui_set_close_handler_wv: {
426+
// void webui_set_close_handler_wv(size_t window, bool (*close_handler)(size_t window))
427+
parameters: ["usize", "function"],
428+
result: "void",
429+
},
430+
webui_get_last_error_number: {
431+
// size_t webui_get_last_error_number()
432+
parameters: [],
433+
result: "usize",
434+
},
435+
webui_get_last_error_message: {
436+
// const char* webui_get_last_error_message()
437+
parameters: [],
438+
result: "buffer",
439+
},
440+
webui_interface_get_window_id: {
441+
// size_t webui_interface_get_window_id(size_t window)
442+
parameters: ["usize"],
443+
result: "usize",
444+
},
335445
} as const;
336446

337447
export function loadLib(): Deno.DynamicLibrary<typeof symbols> {

src/webui.ts

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,32 @@ export class WebUI {
210210
return this.#lib.symbols.webui_close(BigInt(this.#window));
211211
}
212212

213+
/**
214+
* Minimize a WebView window.
215+
*
216+
* @example
217+
* ```ts
218+
* const myWindow = new WebUI();
219+
* myWindow.minimize();
220+
* ```
221+
*/
222+
minimize(): void {
223+
this.#lib.symbols.webui_minimize(BigInt(this.#window));
224+
}
225+
226+
/**
227+
* Maximize a WebView window.
228+
*
229+
* @example
230+
* ```ts
231+
* const myWindow = new WebUI();
232+
* myWindow.maximize();
233+
* ```
234+
*/
235+
maximize(): void {
236+
this.#lib.symbols.webui_maximize(BigInt(this.#window));
237+
}
238+
213239
/**
214240
* Execute a JavaScript string in the UI and returns a boolean indicating whether the
215241
* script execution was successful.
@@ -649,6 +675,21 @@ export class WebUI {
649675
this.#lib.symbols.webui_set_position(BigInt(this.#window), x, y);
650676
}
651677

678+
/**
679+
* Centers the window on the screen. Works better with WebView.
680+
* Call this function before `show()` for better results.
681+
*
682+
* @example
683+
* ```ts
684+
* const myWindow = new WebUI();
685+
* myWindow.setCenter();
686+
* await myWindow.show("<html>...</html>");
687+
* ```
688+
*/
689+
setCenter(): void {
690+
this.#lib.symbols.webui_set_center(BigInt(this.#window));
691+
}
692+
652693
/**
653694
* Get the full current URL.
654695
*
@@ -714,6 +755,20 @@ export class WebUI {
714755
);
715756
}
716757

758+
/**
759+
* Get the network port of a running window.
760+
* This can be useful to determine the HTTP link of `webui.js`
761+
*
762+
* @return Returns the network port of the window
763+
* @example
764+
* ```ts
765+
* const port = myWindow.getPort();
766+
* ```
767+
*/
768+
getPort(): number {
769+
return Number(this.#lib.symbols.webui_get_port(BigInt(this.#window)));
770+
}
771+
717772
/**
718773
* Set a custom web-server network port to be used by WebUI.
719774
* This can be useful to determine the HTTP link of `webui.js` in case
@@ -819,6 +874,46 @@ export class WebUI {
819874
this.#lib.symbols.webui_set_high_contrast(BigInt(this.#window), status);
820875
}
821876

877+
/**
878+
* Make a WebView window frameless.
879+
*
880+
* @param status - The frameless status `true` or `false`
881+
* @example
882+
* ```ts
883+
* myWindow.setFrameless(true);
884+
* ```
885+
*/
886+
setFrameless(status: boolean): void {
887+
this.#lib.symbols.webui_set_frameless(BigInt(this.#window), status);
888+
}
889+
890+
/**
891+
* Make a WebView window transparent.
892+
*
893+
* @param status - The transparency status `true` or `false`
894+
* @example
895+
* ```ts
896+
* myWindow.setTransparent(true);
897+
* ```
898+
*/
899+
setTransparent(status: boolean): void {
900+
this.#lib.symbols.webui_set_transparent(BigInt(this.#window), status);
901+
}
902+
903+
/**
904+
* Sets whether the window frame is resizable or fixed.
905+
* Works only on WebView window.
906+
*
907+
* @param status - True or False
908+
* @example
909+
* ```ts
910+
* myWindow.setResizable(true);
911+
* ```
912+
*/
913+
setResizable(status: boolean): void {
914+
this.#lib.symbols.webui_set_resizable(BigInt(this.#window), status);
915+
}
916+
822917
/**
823918
* Set the window minimum size.
824919
*
@@ -900,6 +995,20 @@ export class WebUI {
900995
return _lib.symbols.webui_set_default_root_folder(toCString(path));
901996
}
902997

998+
/**
999+
* Set custom browser folder path.
1000+
*
1001+
* @param {string} path - The browser folder path
1002+
* @example
1003+
* ```ts
1004+
* WebUI.setBrowserFolder("/home/Foo/Bar/");
1005+
* ```
1006+
*/
1007+
static setBrowserFolder(path: string): void {
1008+
WebUI.init();
1009+
_lib.symbols.webui_set_browser_folder(toCString(path));
1010+
}
1011+
9031012
/**
9041013
* Open an URL in the native default web browser.
9051014
*

0 commit comments

Comments
 (0)