#ifndef prototype1_src_l1_5_anne_gui_h
#define prototype1_src_l1_5_anne_gui_h

#include "../codegen/trait_wrap_boil.h"

void generate_l1_5_gui_headers(){
    mkdir_nofail("l1_5/eve/gui");
    SpanU8 l = cstr("l1_5"), ns = cstr("gui");
    generate_trait_wrapper_templ_inst_eve_header(l, ns, (trait_wrapper_boil_options){
        .trait = {
            .name = cstr("Widget"),
            .methods = (SpanNamedMethodSignatureRecordRef){
                .data = (NamedMethodSignatureRecordRef[]){
                    {
                        .takes_self = true,
                        .takes_mut_self = true,
                        .params = (SpanNamedVariableRecordRef){
                            .data = (NamedVariableRecordRef[]){
                                { .type = cstr("uvec2"), .name = cstr("max_limits") }
                            }, .len = 1
                        },
                        .return_type = cstr("uvec2"),
                        .name = cstr("DRAW_PREPARE"),
                    },
                    {
                        .takes_self = true,
                        .takes_mut_self = true,
                        .params = (SpanNamedVariableRecordRef){
                            .data = (NamedVariableRecordRef[]){
                                { .type = cstr("ivec2"), .name = cstr("drawing_offset") },
                                { .type = cstr("uvec2"), .name = cstr("surface_sz") },
                                { .type = cstr("BorderS32"), .name = cstr("border") },
                            }, .len = 3
                        },
                        .return_type = cstr(""),
                        .name = cstr("DRAW"),
                    }
                }, .len = 2
            },
            .drop_primitive = false,
            .base_struct_name = cstr("Widget"),
        },
        .box = true, .mut_ref = true
    });
}

#endif