module main import gg import sokol.sapp const max_files = 12 const text_size = 16 struct App { mut: gg &gg.Context = unsafe { nil } dropped_file_list []string } fn main() { mut app := &App{} app.gg = gg.new_context( bg_color: gg.rgb(174, 198, 255) width: 600 height: 400 window_title: 'Drag and drop' frame_fn: frame user_data: app event_fn: my_event_manager // drag & drop enable_dragndrop: true max_dropped_files: max_files max_dropped_file_path_length: 2048 ) app.gg.run() } fn my_event_manager(mut ev gg.Event, mut app App) { // drag&drop event if ev.typ == .files_dropped { num_dropped := sapp.get_num_dropped_files() app.dropped_file_list.clear() for i in 0 .. num_dropped { app.dropped_file_list << sapp.get_dropped_file_path(i) } } } fn frame(mut app App) { app.gg.begin() mut txt_conf := gg.TextCfg{ color: gg.black align: .left size: int(text_size * app.gg.scale + 0.5) } app.gg.draw_text(12, 12, 'Drag&Drop here max ${max_files} files.', txt_conf) mut y := 40 for c, f in app.dropped_file_list { app.gg.draw_text(12, y, '[${c}] ${f}', txt_conf) y += text_size } app.gg.end() }