Skip to content

Commit 6d41476

Browse files
feat(js): add breeze_ui::window::create_ex for on_close
1 parent da9b5ce commit 6d41476

File tree

4 files changed

+25
-3
lines changed

4 files changed

+25
-3
lines changed

src/shell/script/binding_qjs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ template<> struct js_bind<mb_shell::js::breeze_ui::window> {
271271
mod.class_<mb_shell::js::breeze_ui::window>("breeze_ui::window")
272272
.constructor<>()
273273
.static_fun<&mb_shell::js::breeze_ui::window::create>("create")
274+
.static_fun<&mb_shell::js::breeze_ui::window::create_ex>("create_ex")
274275
.fun<&mb_shell::js::breeze_ui::window::set_root_widget>("set_root_widget")
275276
.fun<&mb_shell::js::breeze_ui::window::close>("close")
276277
;

src/shell/script/binding_types.d.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,15 @@ export class window {
171171
static create(title: string, width: number, height: number): breeze_ui.window
172172
/**
173173
*
174+
* @param title: string
175+
* @param width: number
176+
* @param height: number
177+
* @param on_close: (() => void)
178+
* @returns breeze_ui.window
179+
*/
180+
static create_ex(title: string, width: number, height: number, on_close: (() => void)): breeze_ui.window
181+
/**
182+
*
174183
* @param widget: breeze_ui.js_widget
175184
* @returns void
176185
*/

src/shell/script/binding_types_breeze_ui.cc

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,8 @@ void breeze_ui::window::close() {
526526
}
527527

528528
std::shared_ptr<breeze_ui::window>
529-
breeze_ui::window::create(std::string title, int width, int height) {
529+
breeze_ui::window::create_ex(std::string title, int width, int height,
530+
std::function<void()> on_close) {
530531
auto rt = std::make_shared<ui::render_target>();
531532
rt->acrylic = 0.1;
532533
rt->transparent = true;
@@ -536,14 +537,19 @@ breeze_ui::window::create(std::string title, int width, int height) {
536537

537538
auto win = std::make_shared<breeze_ui::window>();
538539
win->$render_target = std::move(rt);
539-
std::thread([win]() {
540+
541+
std::thread([win, on_close = std::move(on_close)]() {
540542
set_thread_name("breeze::js_window_renderer");
541543
if (auto res = win->$render_target->init(); res) {
542544
config::current->apply_fonts_to_nvg(win->$render_target->nvg);
543545
win->$render_target->show();
544546
win->$render_target->start_loop();
545547
}
546548

549+
if (on_close) {
550+
on_close();
551+
}
552+
547553
win->$render_target->close();
548554
}).detach();
549555
return win;

src/shell/script/binding_types_breeze_ui.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,13 @@ struct breeze_ui {
146146

147147
struct window {
148148
static std::shared_ptr<window> create(std::string title, int width,
149-
int height);
149+
int height) {
150+
return create_ex(title, width, height, nullptr);
151+
}
152+
153+
static std::shared_ptr<window>
154+
create_ex(std::string title, int width, int height,
155+
std::function<void()> on_close);
150156

151157
std::shared_ptr<ui::render_target> $render_target;
152158
void set_root_widget(

0 commit comments

Comments
 (0)