better back-tree walking
authorhgn <hgodden00@gmail.com>
Wed, 25 Sep 2024 23:54:03 +0000 (00:54 +0100)
committerhgn <hgodden00@gmail.com>
Wed, 25 Sep 2024 23:54:03 +0000 (00:54 +0100)
vg_mem_view.c

index d326b5dc67f1f8653f4595f20dadd57a49a5d4f5..9f882f6c0a1fd8f95b75d17a834c6969017734fe 100644 (file)
@@ -246,12 +246,41 @@ static void cb_vg_mem_view( ui_context *ctx, ui_rect rect,
    ui_split( rect, k_ui_axis_v, 256+16, 2, left, rect );
    ui_fill( ctx, left, ui_opacity( ui_colour( ctx,k_ui_bg+1 ), 0.8f ) );
 
-   for( u32 i=0; i<mv->depth+1; i ++ )
-      ui_info( ctx, left, mv->walk[ i ] );
+   /* Tree back-tracker */
+   {
+      ui_rect bib = { left[0],left[1],left[2],24 };
+      u32 new_depth = mv->depth;
+      for( u32 i=0; i<mv->depth+1; i ++ )
+      {
+         if( i != mv->depth )
+         {
+            if( ui_button_text( ctx, bib, mv->walk[ i ], 1 ) == 1 )
+            {
+               new_depth = i;
+            }
+         }
+         else
+         {
+            ui_fill( ctx, bib, ui_colour( ctx, k_ui_bg ) );
+            ui_text( ctx, bib, mv->walk[i], 1, k_ui_align_middle_center, 0 );
+         }
+
+         bib[0] += 8;
+         bib[2] -= 8;
+         bib[1] += 24;
+      }
+      mv->depth = new_depth;
+      ui_px v = (mv->depth+1)*24;
+      left[1] += v;
+      left[3] -= v;
+   }
 
-   if( mv->depth )
-      if( ui_button( ctx, left, "up" ) == 1 )
-         mv->depth --;
+   if( vg_mem.use_libc_malloc == 0 )
+   {
+      ui_text( ctx, rect, "Run with --use-libc-malloc to view memory", 
+               1, k_ui_align_middle_center, 0 );
+      return;
+   }
 
    vg_mem_view_ui( ctx, rect, mv->main_buffer[ mv->depth ], "", 0, &result );