filebrowser demo & api changes for dir
authorhgn <hgodden00@gmail.com>
Tue, 18 Mar 2025 15:31:41 +0000 (15:31 +0000)
committerhgn <hgodden00@gmail.com>
Tue, 18 Mar 2025 15:31:41 +0000 (15:31 +0000)
src/addon.c
src/client.c
src/render.c
src/skaterift.c
src/utest.c
src/workshop.c
src/world_load.c

index 6fc77728ea1e3eef879af7a8a320714a461fdc16..164699b021a46e956ce8031c6a675fc4514f1186 100644 (file)
@@ -461,9 +461,10 @@ addon_reg *addon_mount_local_addon( const char *folder, enum addon_type type, co
       vg_warn( "Creating own metadata for: %s\n", folder_path.buffer );
 
       vg_dir subdir;
-      if( !vg_dir_open(&subdir, folder_path.buffer) )
+      enum dir_open_result result = vg_dir_open(&subdir, folder_path.buffer);
+      if( result != k_dir_open_ok )
       {
-         vg_error( "Failed to open '%s'\n", folder_path.buffer );
+         vg_error( "Failed to open '%s' (%s)\n", folder_path.buffer, dir_open_result_str[result] );
          return NULL;
       }
 
@@ -577,7 +578,8 @@ void addon_mount_content_folder( enum addon_type type,
    vg_strcat( &path, base_folder );
 
    vg_dir dir;
-   if( !vg_dir_open(&dir,path.buffer) ){
+   if( vg_dir_open(&dir,path.buffer) != k_dir_open_ok )
+   {
       vg_error( "vg_dir_open('%s') failed\n", path.buffer );
       return;
    }
index ae1cbc116def852d669a3a38bc6a97b0e7b3edbf..daedaa58b16fdcd9f69f528cc77edc50ae7303c5 100644 (file)
@@ -40,14 +40,6 @@ void vg_load(void)
 
 void vg_preload(void)
 {
-vg_info(" Copyright  .        . .       -----, ,----- ,---.   .---.  \n" );
-vg_info(" 2021-2024  |\\      /| |           /  |      |    | |    /| \n" );
-vg_info("            | \\    / | +--        /   +----- +---'  |   / | \n" );
-vg_info("            |  \\  /  | |         /    |      |   \\  |  /  | \n" );
-vg_info("            |   \\/   | |        /     |      |    \\ | /   | \n" );
-vg_info("            '        ' '--' [] '----- '----- '     ' '---'  " 
-        "SOFTWARE\n" );
-
    /* please forgive me! */
    u32 sz; char *drm;
    if( (drm = vg_file_read_text( vg_mem.scratch, "DRM", &sz )) )
@@ -67,7 +59,7 @@ vg_info("            '        ' '--' [] '----- '----- '     ' '---'  "
 
 void vg_launch_opt(void)
 {
-   const char *arg;
+   const char *arg; //
 
    if( vg_long_opt( "noauth", "Disable server authentication" ) )
       network_client.auth_mode = eServerModeNoAuthentication;
index 258e6427c485cdc64463d86e481eb0f6cd496710..6399db4745058b498b3f295b9b797d9530d9a93f 100644 (file)
@@ -129,47 +129,3 @@ void render_fsquad2(void)
    glBindVertexArray( g_render.fsquad.vao );
    glDrawArrays( GL_TRIANGLES, 66+6,6 );
 }
-
-#if 0
-void postprocess_to_screen( vg_framebuffer *fb )
-{
-   glBindFramebuffer( GL_FRAMEBUFFER, 0 );
-   glViewport( 0,0, vg.window_x, vg.window_y );
-
-   glEnable(GL_BLEND);
-   glDisable(GL_DEPTH_TEST);
-   glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA);
-   glBlendEquation(GL_FUNC_ADD);
-
-   v2f inverse;
-   vg_framebuffer_inverse_ratio( fb, inverse );
-
-   if( k_blur_effect )
-   {
-      shader_blitblur_use();
-      shader_blitblur_uTexMain( 0 );
-      shader_blitblur_uTexMotion( 1 );
-
-      f32 s = vg.time_frame_delta*60.0;
-      shader_blitblur_uBlurStrength( k_blur_strength / s );
-      shader_blitblur_uInverseRatio( inverse );
-
-      inverse[0] -= 0.0001f;
-      inverse[1] -= 0.0001f;
-      shader_blitblur_uClampUv( inverse );
-      shader_blitblur_uOverrideDir( g_render.blur_override );
-
-      vg_framebuffer_bind_texture( fb, 0, 0 );
-      vg_framebuffer_bind_texture( fb, 1, 1 );
-   }
-   else
-   {
-      glUseProgram( _shader_blit.id );
-      glUniform1i( glGetUniformLocation( _shader_blit.id, "uTexMain" ), 0 );
-      glUniform2fv( glGetUniformLocation( _shader_blit.id, "uInverseRatio" ),1, vg_ui.bg_inverse_ratio );
-      vg_framebuffer_bind_texture( fb, 0, 0 );
-   }
-
-   render_fsquad();
-}
-#endif
index 7ae5ccb4cf1d77eca88c486cdcaaf73d7cf11f27..63b70890d3794933e1e07bcfd1ddceb85a5571d9 100644 (file)
@@ -2,7 +2,7 @@
  * =============================================================================
  *
  * Copyright  .        . .       -----, ,----- ,---.   .---.
- * 2021-2024  |\      /| |           /  |      |    | |    /|
+ * 2021-2025  |\      /| |           /  |      |    | |    /|
  *            | \    / | +--        /   +----- +---'  |   / |
  *            |  \  /  | |         /    |      |   \  |  /  |
  *            |   \/   | |        /     |      |    \ | /   |
index c286ce1bb5756c36f3c4d5f25005462d06863224..fcf768d5a56911c165b427c5644651a8c0849f0e 100644 (file)
@@ -3,11 +3,54 @@
 #include "vg/vg_io.h"
 #include "vg/vg_audio.h"
 #include "vg/vg_async.h"
+#include "vg/vg_magi.h"
+#include "vg/vg_ui/imgui.h"
+#include "vg/vg_ui/filebrowser.h"
 
 const char* __asan_default_options() { return "detect_leaks=0"; }
 
+void filebrowser_demo_ui( ui_context *ctx, ui_rect rect, struct vg_magi_panel *magi )
+{
+   struct vg_filebrowser *browser = magi->data;
+   enum filebrowser_action action = vg_filebrowser_ui( ctx, rect, browser );
+
+   if( action )
+   {
+      vg_success( "action: %d\n", action );
+   }
+}
+
+void filebrowser_demo_close( struct vg_magi_panel *magi )
+{
+   struct vg_filebrowser *browser = magi->data;
+   vg_filebrowser_free_entries( browser );
+   free( browser );
+}
+
+int cmd_open_browser( int argc, const char *argv[] )
+{
+   struct vg_filebrowser *browser = malloc( sizeof(struct vg_filebrowser) );
+   vg_filebrowser_init( browser );
+   browser->mode = k_filebrowser_mode_pick_file;
+   browser->filter = 0x1 << k_media_type_image;
+
+   struct vg_magi_panel *magi = _vg_magi_open( 800, 600, VG_MAGI_ALL );
+   magi->title = "File browser demo";
+   magi->data = browser;
+   magi->ui_cb = filebrowser_demo_ui;
+   magi->close_cb = filebrowser_demo_close;
+
+   if( argc )
+      vg_strncpy( argv[0], browser->current_path, sizeof(browser->current_path), k_strncpy_overflow_fatal );
+   else
+      strcpy( browser->current_path, "/" );
+   vg_filebrowser_populate( browser );
+   return 0;
+}
+
 void vg_load(void)
 {
+   vg_console_reg_cmd( "fib", cmd_open_browser, NULL );
    vg_bake_shaders();
    vg_console_load_autos();
 }
@@ -33,6 +76,19 @@ int main( int argc, char *argv[] )
 void vg_pre_update(void){}
 void vg_fixed_update(void){}
 void vg_post_update(void){}
-void vg_render(void){}
-void vg_gui( ui_context *ctx ){}
+void vg_render(void)
+{
+   glBindFramebuffer( GL_FRAMEBUFFER, 0 );
+   glViewport( 0,0, vg.window_x, vg.window_y );
+   glClearColor( 0.0f, 0.0f, 0.0f, 1.0f );
+   glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT );
+}
+
+void vg_gui( ui_context *ctx )
+{
+   ui_capture_mouse( ctx, 1 );
+}
+
 void vg_framebuffer_resize( int w, int h ){}
+
+#include "vg/vg_ui/filebrowser.c"
index 8b27a425e3e7bb9b7df62adb7d1b1821ef575aa4..a2c1ef3442dd88d1dafe1d4937c2a1588e914b62 100644 (file)
@@ -335,7 +335,7 @@ static void _workshop_form_submit_thread( void *data )
    vg_info( "binstr: %s\n", short_descriptor_str );
 
    vg_dir dir;
-   if( !vg_dir_open( &dir, folder.buffer ) )
+   if( vg_dir_open( &dir, folder.buffer ) != k_dir_open_ok )
    {
       vg_error( "could not open addon folder '%s'\n", folder.buffer );
       workshop_form.op = k_workshop_op_none;
@@ -496,7 +496,8 @@ static void _workshop_form_load_thread( void *data )
    }
 
    vg_dir dir;
-   if( !vg_dir_open( &dir, folder.buffer ) ){
+   if( vg_dir_open( &dir, folder.buffer ) != k_dir_open_ok )
+   {
       vg_error( "workshop async load failed: could not open folder\n" );
       vg_async_call( workshop_form_loadmodel_async_error, NULL, 0 );
       workshop_form.op = k_workshop_op_none;
index 0b0e0b7a7c8d6990601bf484ab1d1ce14ea74482..2fd36da473061a838e082460105bd84a58f048f9 100644 (file)
@@ -259,7 +259,7 @@ void skaterift_world_load_thread( void *_ )
         found_main_mdl = 0;
 
    vg_dir dir;
-   if( !vg_dir_open(&dir, folder.buffer) )
+   if( vg_dir_open(&dir, folder.buffer) != k_dir_open_ok )
    {
       vg_error( "opendir('%s') failed\n", folder.buffer );
       return;