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(); context = runtime.default_context();
fmt.println("Look you tried opening a window from a plugin!"); 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, Insert,
} }
WindowDrawProc :: proc(win: ^Window, state: ^State); WindowDrawProc :: proc "c" (plugin: plugin.Plugin, win: rawptr);
WindowFreeProc :: proc(win: ^Window, state: ^State); WindowFreeProc :: proc(win: ^Window, state: ^State);
WindowGetBufferProc :: proc(win: ^Window) -> ^FileBuffer; WindowGetBufferProc :: proc(win: ^Window) -> ^FileBuffer;
Window :: struct { Window :: struct {

View File

@ -290,6 +290,22 @@ main :: proc() {
core.register_key_action(to_be_edited_map, key, input_action, description); 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 { iter = plugin.Iterator {
get_current_buffer_iterator = proc "c" () -> plugin.BufferIter { get_current_buffer_iterator = proc "c" () -> plugin.BufferIter {
context = state.ctx; context = state.ctx;
@ -676,7 +692,7 @@ main :: proc() {
theme.get_palette_raylib_color(.Background1)); theme.get_palette_raylib_color(.Background1));
if state.window != nil && state.window.draw != nil { 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 { if state.current_input_map != &state.input_map {

View File

@ -3,6 +3,7 @@ package plugin;
import "core:intrinsics" import "core:intrinsics"
import "core:dynlib" import "core:dynlib"
import "core:fmt" import "core:fmt"
import "vendor:raylib"
OnInitializeProc :: proc "c" (plugin: Plugin); OnInitializeProc :: proc "c" (plugin: Plugin);
OnExitProc :: proc "c" (/* probably needs some state eventually */); 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); InputGroupProc :: proc "c" (plugin: Plugin, input_map: rawptr);
InputActionProc :: proc "c" (plugin: Plugin); InputActionProc :: proc "c" (plugin: Plugin);
WindowInputProc :: proc "c" (plugin: Plugin, window: rawptr); WindowInputProc :: proc "c" (plugin: Plugin, window: rawptr);
WindowDrawProc :: proc "c" (plugin: Plugin, window: rawptr);
Plugin :: struct { Plugin :: struct {
state: rawptr, state: rawptr,
iter: Iterator, iter: Iterator,
@ -195,7 +197,9 @@ Plugin :: struct {
register_input_group: proc "c" (input_map: rawptr, key: Key, register_group: InputGroupProc), 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), 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 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 { list_window^ = BufferListWindow {
window = core.Window { window = core.Window {
input_map = input_map, 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 { grep_window^ = GrepWindow {
window = core.Window { window = core.Window {
input_map = input_map, input_map = input_map,
draw = draw_grep_window, //draw = draw_grep_window,
get_buffer = grep_window_get_buffer, get_buffer = grep_window_get_buffer,
free = free_grep_window, free = free_grep_window,
}, },