get drawing api started
parent
198e314953
commit
4c2fa6ab15
|
@ -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,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue