get drawing api started

plugins
Patrick Cleavelin 2024-01-06 16:11:29 -06:00
parent 198e314953
commit 4c2fa6ab15
6 changed files with 50 additions and 5 deletions

View File

@ -31,4 +31,29 @@ open_buffer_window :: proc "c" (plugin: Plugin) {
context = runtime.default_context();
fmt.println("Look you tried opening a window from a plugin!");
window := plugin.create_window(proc "c" (plugin: Plugin, input_map: rawptr) {
plugin.register_input(input_map, .K, proc "c" (plugin: Plugin) {
context = runtime.default_context();
fmt.println("haha, moving up does nothing");
}, "move selection up");
plugin.register_input(input_map, .J, proc "c" (plugin: Plugin) {
context = runtime.default_context();
fmt.println("haha, moving down does nothing");
}, "move selection down");
}, draw_buffer_window);
}
draw_buffer_window :: proc "c" (plugin: Plugin, window: rawptr) {
context = runtime.default_context();
plugin.draw_rect(
0,
0,
64,
64,
0x000000ff,
);
}

View File

@ -11,7 +11,7 @@ Mode :: enum {
Insert,
}
WindowDrawProc :: proc(win: ^Window, state: ^State);
WindowDrawProc :: proc "c" (plugin: plugin.Plugin, win: rawptr);
WindowFreeProc :: proc(win: ^Window, state: ^State);
WindowGetBufferProc :: proc(win: ^Window) -> ^FileBuffer;
Window :: struct {

View File

@ -290,6 +290,22 @@ main :: proc() {
core.register_key_action(to_be_edited_map, key, input_action, description);
}
},
create_window = proc "c" (register_group: plugin.InputGroupProc, draw_proc: plugin.WindowDrawProc) -> rawptr {
context = state.ctx;
window := new(core.Window);
window^ = core.Window {
input_map = core.new_input_map(),
draw = draw_proc,
};
register_group(state.plugin_vtable, transmute(rawptr)&window.input_map);
state.window = window;
state.current_input_map = &window.input_map;
return window;
},
draw_rect = raylib.DrawRectangle,
iter = plugin.Iterator {
get_current_buffer_iterator = proc "c" () -> plugin.BufferIter {
context = state.ctx;
@ -676,7 +692,7 @@ main :: proc() {
theme.get_palette_raylib_color(.Background1));
if state.window != nil && state.window.draw != nil {
state.window->draw(&state);
state.window.draw(state.plugin_vtable, state.window);
}
if state.current_input_map != &state.input_map {

View File

@ -3,6 +3,7 @@ package plugin;
import "core:intrinsics"
import "core:dynlib"
import "core:fmt"
import "vendor:raylib"
OnInitializeProc :: proc "c" (plugin: Plugin);
OnExitProc :: proc "c" (/* probably needs some state eventually */);
@ -185,6 +186,7 @@ OnColorBufferProc :: proc "c" (plugin: Plugin, buffer: rawptr);
InputGroupProc :: proc "c" (plugin: Plugin, input_map: rawptr);
InputActionProc :: proc "c" (plugin: Plugin);
WindowInputProc :: proc "c" (plugin: Plugin, window: rawptr);
WindowDrawProc :: proc "c" (plugin: Plugin, window: rawptr);
Plugin :: struct {
state: rawptr,
iter: Iterator,
@ -195,7 +197,9 @@ Plugin :: struct {
register_input_group: proc "c" (input_map: rawptr, key: Key, register_group: InputGroupProc),
register_input: proc "c" (input_map: rawptr, key: Key, input_action: InputActionProc, description: cstring),
create_window: proc "c" (register_group: InputGroupProc) -> rawptr,
create_window: proc "c" (register_group: InputGroupProc, draw_proc: WindowDrawProc) -> rawptr,
draw_rect: type_of(raylib.DrawRectangle),
}
load_proc_address :: proc(lib_path: string, library: dynlib.Library, symbol: string, $ProcType: typeid) -> ProcType

View File

@ -51,7 +51,7 @@ create_buffer_list_window :: proc() -> ^BufferListWindow {
list_window^ = BufferListWindow {
window = core.Window {
input_map = input_map,
draw = draw_buffer_list_window,
//draw = draw_buffer_list_window,
},
};

View File

@ -160,7 +160,7 @@ create_grep_window :: proc() -> ^GrepWindow {
grep_window^ = GrepWindow {
window = core.Window {
input_map = input_map,
draw = draw_grep_window,
//draw = draw_grep_window,
get_buffer = grep_window_get_buffer,
free = free_grep_window,
},