paint: text import fixes
This commit is contained in:
@@ -1,28 +0,0 @@
|
|||||||
#include "global.h"
|
|
||||||
|
|
||||||
void *plugin;
|
|
||||||
|
|
||||||
void *import_txt(char *path) {
|
|
||||||
void *b = data_get_blob(path);
|
|
||||||
|
|
||||||
string_array_t *a = string_split(path, "\\\\");
|
|
||||||
char *s = array_pop(a);
|
|
||||||
a = string_split(s, "/");
|
|
||||||
s = array_pop(a);
|
|
||||||
char *filename = s;
|
|
||||||
|
|
||||||
ui_box_show_message(filename, sys_buffer_to_string(b), true);
|
|
||||||
data_delete_blob(path);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_delete() {
|
|
||||||
plugin_unregister_texture("txt", import_txt);
|
|
||||||
}
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
plugin = plugin_create();
|
|
||||||
gc_root(plugin);
|
|
||||||
plugin_notify_on_delete(plugin, on_delete);
|
|
||||||
plugin_register_texture("txt", import_txt);
|
|
||||||
}
|
|
||||||
@@ -157,6 +157,7 @@ i32 pipes_get_constant_location(char *type);
|
|||||||
void make_brush_run(node_shader_t *kong);
|
void make_brush_run(node_shader_t *kong);
|
||||||
void import_json_material_run(char *path);
|
void import_json_material_run(char *path);
|
||||||
void import_texture_run(char *path, bool hdr_as_envmap);
|
void import_texture_run(char *path, bool hdr_as_envmap);
|
||||||
|
void import_text_run(char *path);
|
||||||
void import_lut_run(const char *path);
|
void import_lut_run(const char *path);
|
||||||
void import_lut_free();
|
void import_lut_free();
|
||||||
void ui_files_show(char *filters, bool is_save, bool open_multiple, void (*files_done)(char *));
|
void ui_files_show(char *filters, bool is_save, bool open_multiple, void (*files_done)(char *));
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ i32 pipes_cursor_decal_texdecal;
|
|||||||
i32 pipes_cursor_decal_gbuffer0;
|
i32 pipes_cursor_decal_gbuffer0;
|
||||||
i32 pipes_offset;
|
i32 pipes_offset;
|
||||||
any_map_t *import_texture_importers;
|
any_map_t *import_texture_importers;
|
||||||
|
any_map_t *import_text_importers;
|
||||||
|
|
||||||
#ifdef IRON_WINDOWS
|
#ifdef IRON_WINDOWS
|
||||||
char *ui_files_default_path = "C:\\Users";
|
char *ui_files_default_path = "C:\\Users";
|
||||||
|
|||||||
@@ -63,6 +63,9 @@ void import_asset_run(char *path, f32 drop_x, f32 drop_y, bool show_box, bool hd
|
|||||||
g_context->ddirty = 2;
|
g_context->ddirty = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (path_is_text(path)) {
|
||||||
|
import_text_run(path);
|
||||||
|
}
|
||||||
else if (path_is_sound(path)) {
|
else if (path_is_sound(path)) {
|
||||||
import_sound_run(path);
|
import_sound_run(path);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
#include "../global.h"
|
||||||
|
|
||||||
|
void import_text_default_importer(char *path) {
|
||||||
|
buffer_t *b = data_get_blob(path);
|
||||||
|
if (b == NULL) {
|
||||||
|
console_error(strings_unknown_asset_format());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string_array_t *ar = string_split(path, PATH_SEP);
|
||||||
|
char *name = ar->buffer[ar->length - 1];
|
||||||
|
|
||||||
|
ui_box_show_message(name, sys_buffer_to_string(b), true);
|
||||||
|
data_delete_blob(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
void import_text_run(char *path) {
|
||||||
|
char *ext = substring(path, string_last_index_of(path, ".") + 1, string_length(path));
|
||||||
|
void (*importer)(char *path) = any_map_get(import_text_importers, ext);
|
||||||
|
|
||||||
|
if (importer == NULL) {
|
||||||
|
import_text_default_importer(path);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
importer(path);
|
||||||
|
}
|
||||||
@@ -21,6 +21,7 @@
|
|||||||
#include "io/import_obj.c"
|
#include "io/import_obj.c"
|
||||||
#include "io/import_plugin.c"
|
#include "io/import_plugin.c"
|
||||||
#include "io/import_sound.c"
|
#include "io/import_sound.c"
|
||||||
|
#include "io/import_text.c"
|
||||||
#include "io/import_texture.c"
|
#include "io/import_texture.c"
|
||||||
#include "io/import_theme.c"
|
#include "io/import_theme.c"
|
||||||
|
|
||||||
@@ -281,6 +282,9 @@ void _kickstart() {
|
|||||||
import_texture_importers = any_map_create();
|
import_texture_importers = any_map_create();
|
||||||
gc_root(import_texture_importers);
|
gc_root(import_texture_importers);
|
||||||
|
|
||||||
|
import_text_importers = any_map_create();
|
||||||
|
gc_root(import_text_importers);
|
||||||
|
|
||||||
ui_files_path = ui_files_default_path;
|
ui_files_path = ui_files_default_path;
|
||||||
gc_root(ui_files_path);
|
gc_root(ui_files_path);
|
||||||
|
|
||||||
|
|||||||
@@ -65,6 +65,8 @@ void plugin_register_texture(char *format, void *fn);
|
|||||||
void plugin_unregister_texture(char *format);
|
void plugin_unregister_texture(char *format);
|
||||||
void plugin_register_mesh(char *format, void *fn);
|
void plugin_register_mesh(char *format, void *fn);
|
||||||
void plugin_unregister_mesh(char *format);
|
void plugin_unregister_mesh(char *format);
|
||||||
|
void plugin_register_text(char *format, void *fn);
|
||||||
|
void plugin_unregister_text(char *format);
|
||||||
raw_mesh_t *plugin_make_raw_mesh(char *name, i16_array_t *posa, i16_array_t *nora, u32_array_t *inda, float scale_pos);
|
raw_mesh_t *plugin_make_raw_mesh(char *name, i16_array_t *posa, i16_array_t *nora, u32_array_t *inda, float scale_pos);
|
||||||
void plugin_material_category_add(char *category_name, any_array_t *node_list);
|
void plugin_material_category_add(char *category_name, any_array_t *node_list);
|
||||||
void plugin_brush_category_add(char *category_name, any_array_t *node_list);
|
void plugin_brush_category_add(char *category_name, any_array_t *node_list);
|
||||||
@@ -1231,6 +1233,8 @@ void minic_register_builtins() {
|
|||||||
R(plugin_unregister_texture, "v(p)");
|
R(plugin_unregister_texture, "v(p)");
|
||||||
R(plugin_register_mesh, "v(p,p)");
|
R(plugin_register_mesh, "v(p,p)");
|
||||||
R(plugin_unregister_mesh, "v(p)");
|
R(plugin_unregister_mesh, "v(p)");
|
||||||
|
R(plugin_register_text, "v(p,p)");
|
||||||
|
R(plugin_unregister_text, "v(p)");
|
||||||
R(plugin_make_raw_mesh, "p(p,p,p,p,f)");
|
R(plugin_make_raw_mesh, "p(p,p,p,p,f)");
|
||||||
R(plugin_material_category_add, "v(p,p)");
|
R(plugin_material_category_add, "v(p,p)");
|
||||||
R(plugin_brush_category_add, "v(p,p)");
|
R(plugin_brush_category_add, "v(p,p)");
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ void (*ui_box_modal_on_hide)(void) = NULL;
|
|||||||
i32 ui_box_draws = 0;
|
i32 ui_box_draws = 0;
|
||||||
bool ui_box_copyable = false;
|
bool ui_box_copyable = false;
|
||||||
f32 ui_box_tween_alpha = 0.0;
|
f32 ui_box_tween_alpha = 0.0;
|
||||||
|
static bool ui_box_ignore_release = false;
|
||||||
|
|
||||||
void ui_box_init() {
|
void ui_box_init() {
|
||||||
ui_box_hwnd->redraws = 2;
|
ui_box_hwnd->redraws = 2;
|
||||||
@@ -17,6 +18,7 @@ void ui_box_init() {
|
|||||||
ui_box_show = true;
|
ui_box_show = true;
|
||||||
ui_box_draws = 0;
|
ui_box_draws = 0;
|
||||||
ui_box_click_to_hide = true;
|
ui_box_click_to_hide = true;
|
||||||
|
ui_box_ignore_release = g_ui->input_down; // Box may open on mouse down
|
||||||
}
|
}
|
||||||
|
|
||||||
void ui_box_render() {
|
void ui_box_render() {
|
||||||
@@ -27,7 +29,12 @@ void ui_box_render() {
|
|||||||
if (!ui_menu_show) {
|
if (!ui_menu_show) {
|
||||||
bool in_use = g_ui->combo_selected_handle != NULL;
|
bool in_use = g_ui->combo_selected_handle != NULL;
|
||||||
bool is_escape = g_ui->is_escape_down;
|
bool is_escape = g_ui->is_escape_down;
|
||||||
if (ui_box_draws > 2 && (g_ui->input_released || is_escape) && !in_use && !g_ui->is_typing) {
|
bool released = g_ui->input_released;
|
||||||
|
if (released && ui_box_ignore_release) {
|
||||||
|
ui_box_ignore_release = false;
|
||||||
|
released = false;
|
||||||
|
}
|
||||||
|
if (ui_box_draws > 2 && (released || is_escape) && !in_use && !g_ui->is_typing) {
|
||||||
i32 appw = iron_window_width();
|
i32 appw = iron_window_width();
|
||||||
i32 apph = iron_window_height();
|
i32 apph = iron_window_height();
|
||||||
i32 mw = math_floor(ui_box_modalw * UI_SCALE());
|
i32 mw = math_floor(ui_box_modalw * UI_SCALE());
|
||||||
@@ -76,7 +83,13 @@ void ui_box_render() {
|
|||||||
ui_handle_t *htext = ui_handle(__ID__);
|
ui_handle_t *htext = ui_handle(__ID__);
|
||||||
htext->text = string_copy(ui_box_text);
|
htext->text = string_copy(ui_box_text);
|
||||||
if (ui_box_copyable) {
|
if (ui_box_copyable) {
|
||||||
|
draw_font_t *_font = g_font;
|
||||||
|
i32 _font_size = g_ui->font_size;
|
||||||
|
ui_set_font(g_ui, data_get_font("font_mono.ttf"));
|
||||||
|
g_ui->font_size = math_floor(15 * UI_SCALE());
|
||||||
ui_text_area(htext, UI_ALIGN_LEFT, false, "", false);
|
ui_text_area(htext, UI_ALIGN_LEFT, false, "", false);
|
||||||
|
ui_set_font(g_ui, _font);
|
||||||
|
g_ui->font_size = _font_size;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ui_text(ui_box_text, UI_ALIGN_LEFT, 0x00000000);
|
ui_text(ui_box_text, UI_ALIGN_LEFT, 0x00000000);
|
||||||
@@ -167,8 +180,8 @@ void ui_box_tween_out() {
|
|||||||
|
|
||||||
void ui_box_show_message(char *title, char *text, bool copyable) {
|
void ui_box_show_message(char *title, char *text, bool copyable) {
|
||||||
ui_box_init();
|
ui_box_init();
|
||||||
ui_box_modalw = 400;
|
ui_box_modalw = copyable ? 800 : 400;
|
||||||
ui_box_modalh = 180;
|
ui_box_modalh = copyable ? 600 : 180;
|
||||||
gc_unroot(ui_box_title);
|
gc_unroot(ui_box_title);
|
||||||
ui_box_title = string_copy(title);
|
ui_box_title = string_copy(title);
|
||||||
gc_root(ui_box_title);
|
gc_root(ui_box_title);
|
||||||
|
|||||||
@@ -160,9 +160,12 @@ object_t *script_get_object(char *s) {
|
|||||||
|
|
||||||
extern string_array_t *_path_texture_formats;
|
extern string_array_t *_path_texture_formats;
|
||||||
extern string_array_t *_path_mesh_formats;
|
extern string_array_t *_path_mesh_formats;
|
||||||
|
extern string_array_t *_path_text_formats;
|
||||||
|
|
||||||
static any_map_t *custom_texture_importers = NULL;
|
static any_map_t *custom_texture_importers = NULL;
|
||||||
static any_map_t *custom_mesh_importers = NULL;
|
static any_map_t *custom_mesh_importers = NULL;
|
||||||
|
static any_map_t *custom_text_importers = NULL;
|
||||||
|
static string_array_t *custom_text_formats = NULL;
|
||||||
|
|
||||||
gpu_texture_t *plugin_import_custom_texture(char *path) {
|
gpu_texture_t *plugin_import_custom_texture(char *path) {
|
||||||
char *format = substring(path, string_last_index_of(path, ".") + 1, string_length(path));
|
char *format = substring(path, string_last_index_of(path, ".") + 1, string_length(path));
|
||||||
@@ -180,6 +183,43 @@ raw_mesh_t *plugin_import_custom_mesh(char *path) {
|
|||||||
return r.p;
|
return r.p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void plugin_import_custom_text(char *path) {
|
||||||
|
char *format = substring(path, string_last_index_of(path, ".") + 1, string_length(path));
|
||||||
|
void *fn = any_map_get(custom_text_importers, format);
|
||||||
|
minic_val_t args[1] = {minic_val_ptr(path)};
|
||||||
|
minic_call_fn(fn, args, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void plugin_register_text(char *format, void *fn) {
|
||||||
|
any_map_set(import_text_importers, format, plugin_import_custom_text);
|
||||||
|
|
||||||
|
if (custom_text_formats == NULL) {
|
||||||
|
custom_text_formats = string_array_create(0);
|
||||||
|
gc_root(custom_text_formats);
|
||||||
|
}
|
||||||
|
if (string_array_index_of(path_text_formats(), format) < 0) {
|
||||||
|
any_array_push((any_array_t *)_path_text_formats, format);
|
||||||
|
string_array_push(custom_text_formats, format);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (custom_text_importers == NULL) {
|
||||||
|
custom_text_importers = any_map_create();
|
||||||
|
gc_root(custom_text_importers);
|
||||||
|
}
|
||||||
|
any_map_set(custom_text_importers, format, fn);
|
||||||
|
}
|
||||||
|
|
||||||
|
void plugin_unregister_text(char *format) {
|
||||||
|
map_delete(import_text_importers, format);
|
||||||
|
map_delete(custom_text_importers, format);
|
||||||
|
|
||||||
|
i32 i = custom_text_formats != NULL ? string_array_index_of(custom_text_formats, format) : -1;
|
||||||
|
if (i >= 0) {
|
||||||
|
array_splice((any_array_t *)custom_text_formats, i, 1);
|
||||||
|
array_splice((any_array_t *)_path_text_formats, string_array_index_of(_path_text_formats, format), 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void plugin_register_texture(char *format, void *fn) {
|
void plugin_register_texture(char *format, void *fn) {
|
||||||
any_map_set(import_texture_importers, format, plugin_import_custom_texture);
|
any_map_set(import_texture_importers, format, plugin_import_custom_texture);
|
||||||
any_array_push((any_array_t *)_path_texture_formats, format);
|
any_array_push((any_array_t *)_path_texture_formats, format);
|
||||||
|
|||||||
Reference in New Issue
Block a user