Skip to content

Commit 26b9464

Browse files
authored
gg: setup ctx.window.user_data and ctx.user_data on ctx.run(), instead of in gg.new_context, to allow for embedding gg.Context in ui (#17169)
1 parent a932a8b commit 26b9464

File tree

4 files changed

+38
-32
lines changed

4 files changed

+38
-32
lines changed

examples/gg/cursor.v

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ import gx
55
import sokol.sapp
66

77
fn main() {
8-
gg.new_context(
8+
mut ctx := gg.new_context(
99
bg_color: gx.white
1010
window_title: 'Cursor'
1111
frame_fn: frame
1212
init_fn: init
13-
).run()
13+
)
14+
ctx.run()
1415
}
1516

1617
fn init(mut ctx gg.Context) {

examples/pendulum-simulation/modules/sim/anim/app.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ struct Pixel {
1313
color gx.Color
1414
}
1515

16-
struct App {
16+
pub struct App {
1717
pub:
1818
args simargs.ParallelArgs
1919
request_chan chan &sim.SimRequest

vlib/gg/gg.c.v

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -458,39 +458,42 @@ pub fn new_context(cfg Config) &Context {
458458
ft: 0
459459
ui_mode: cfg.ui_mode
460460
native_rendering: cfg.native_rendering
461-
}
462-
if cfg.user_data == unsafe { nil } {
463-
ctx.user_data = ctx
461+
window: sapp.Desc{
462+
init_userdata_cb: gg_init_sokol_window
463+
frame_userdata_cb: gg_frame_fn
464+
event_userdata_cb: gg_event_fn
465+
fail_userdata_cb: gg_fail_fn
466+
cleanup_userdata_cb: gg_cleanup_fn
467+
window_title: &char(cfg.window_title.str)
468+
html5_canvas_name: &char(cfg.window_title.str)
469+
width: cfg.width
470+
height: cfg.height
471+
sample_count: cfg.sample_count
472+
high_dpi: true
473+
fullscreen: cfg.fullscreen
474+
__v_native_render: cfg.native_rendering
475+
// drag&drop
476+
enable_dragndrop: cfg.enable_dragndrop
477+
max_dropped_files: cfg.max_dropped_files
478+
max_dropped_file_path_length: cfg.max_dropped_file_path_length
479+
swap_interval: cfg.swap_interval
480+
}
464481
}
465482
ctx.set_bg_color(cfg.bg_color)
466483
// C.printf('new_context() %p\n', cfg.user_data)
467-
window := sapp.Desc{
468-
user_data: ctx
469-
init_userdata_cb: gg_init_sokol_window
470-
frame_userdata_cb: gg_frame_fn
471-
event_userdata_cb: gg_event_fn
472-
fail_userdata_cb: gg_fail_fn
473-
cleanup_userdata_cb: gg_cleanup_fn
474-
window_title: &char(cfg.window_title.str)
475-
html5_canvas_name: &char(cfg.window_title.str)
476-
width: cfg.width
477-
height: cfg.height
478-
sample_count: cfg.sample_count
479-
high_dpi: true
480-
fullscreen: cfg.fullscreen
481-
__v_native_render: cfg.native_rendering
482-
// drag&drop
483-
enable_dragndrop: cfg.enable_dragndrop
484-
max_dropped_files: cfg.max_dropped_files
485-
max_dropped_file_path_length: cfg.max_dropped_file_path_length
486-
swap_interval: cfg.swap_interval
487-
}
488-
ctx.window = window
489484
return ctx
490485
}
491486

492487
// run starts the main loop of the context.
493-
pub fn (ctx &Context) run() {
488+
pub fn (mut ctx Context) run() {
489+
// set context late, in case it changed (e.g., due to embedding)
490+
ctx.window = sapp.Desc{
491+
...ctx.window
492+
user_data: ctx
493+
}
494+
if ctx.user_data == unsafe { nil } {
495+
ctx.user_data = ctx
496+
}
494497
sapp.run(&ctx.window)
495498
}
496499

vlib/gg/gg.js.v

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -328,9 +328,6 @@ pub fn new_context(cfg Config) &Context {
328328
sz.height = g.height
329329
sz.width = g.width
330330
g.config = cfg
331-
if isnil(cfg.user_data) {
332-
g.user_data = g
333-
}
334331
g.window = dom.window()
335332
document := dom.document
336333
canvas_elem := document.getElementById(cfg.canvas.str) or {
@@ -453,6 +450,11 @@ pub fn new_context(cfg Config) &Context {
453450
}
454451

455452
pub fn (mut ctx Context) run() {
453+
// set context late, in case it changed (e.g., due to embedding)
454+
if isnil(ctx.user_data) {
455+
ctx.user_data = ctx
456+
}
457+
456458
gg_animation_frame_fn(mut ctx)
457459
}
458460

0 commit comments

Comments
 (0)