diff --git a/examples/gg/drag_n_drop.v b/examples/gg/drag_n_drop.v new file mode 100644 index 0000000000..9407bf55cb --- /dev/null +++ b/examples/gg/drag_n_drop.v @@ -0,0 +1,70 @@ +module main + +import os +import gg +import gx +import sokol.sapp + +const ( + max_files = 12 + text = 'Drag&Drop here max $max_files files.' + text_size = 16 +) + +struct App { +mut: + gg &gg.Context + dropped_file_list []string = []string{} +} + +fn main() { + mut font_path := os.resource_abs_path(os.join_path('../assets/fonts/', 'RobotoMono-Regular.ttf')) + mut app := &App{ + gg: 0 + } + app.gg = gg.new_context( + bg_color: gx.rgb(174, 198, 255) + width: 600 + height: 400 + window_title: 'Drag and drop' + frame_fn: frame + font_path: font_path + 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_droped { + 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 := gx.TextCfg{ + color: gx.black + align: .left + size: int(text_size * app.gg.scale + 0.5) + } + app.gg.draw_text(12, 12, text, 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() +}