diff --git a/src/df/gfx/df_gfx.c b/src/df/gfx/df_gfx.c index cf6f393d..16ff2c54 100644 --- a/src/df/gfx/df_gfx.c +++ b/src/df/gfx/df_gfx.c @@ -2979,26 +2979,50 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D DF_Panel *panel = df_panel_from_handle(payload->panel); DF_Entity *entity = df_entity_from_handle(payload->entity); DF_View *view = df_view_from_handle(payload->view); - UI_Tooltip { - UI_Box *tooltip = ui_top_parent(); + //- rjf: tab dragging if(!df_view_is_nil(view)) { - ui_set_next_pref_width(ui_children_sum(1)); - UI_Row UI_HeightFill + UI_Size main_width = ui_top_pref_width(); + UI_Size main_height = ui_top_pref_height(); + UI_TextAlign main_text_align = ui_top_text_alignment(); + ui_set_next_background_color(df_rgba_from_theme_color(DF_ThemeColor_TabActive)); + UI_Tooltip UI_PrefWidth(main_width) UI_PrefHeight(main_height) UI_TextAlignment(main_text_align) { - DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view); - String8 display_name = df_display_string_from_view(scratch.arena, ctrl_ctx, view); - DF_IconKind icon_kind = df_icon_kind_from_view(view); - UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) - UI_Font(df_font_from_slot(DF_FontSlot_Icons)) - UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Icons)) - ui_label(df_g_icon_kind_text_table[icon_kind]); - ui_label(display_name); - tooltip->background_color = df_rgba_from_theme_color(DF_ThemeColor_TabActive); + ui_set_next_pref_width(ui_em(60.f, 1.f)); + ui_set_next_pref_height(ui_em(40.f, 1.f)); + ui_set_next_child_layout_axis(Axis2_Y); + UI_Box *container = ui_build_box_from_key(0, ui_key_zero()); + UI_Parent(container) + { + UI_Row + { + DF_CtrlCtx ctrl_ctx = df_ctrl_ctx_from_view(ws, view); + String8 display_name = df_display_string_from_view(scratch.arena, ctrl_ctx, view); + DF_IconKind icon_kind = df_icon_kind_from_view(view); + UI_TextColor(df_rgba_from_theme_color(DF_ThemeColor_WeakText)) + UI_Font(df_font_from_slot(DF_FontSlot_Icons)) + UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Icons)) + UI_PrefWidth(ui_em(2.5f, 1.f)) + ui_label(df_g_icon_kind_text_table[icon_kind]); + ui_label(display_name); + } + ui_set_next_pref_width(ui_pct(1, 0)); + ui_set_next_pref_height(ui_pct(1, 0)); + ui_set_next_child_layout_axis(Axis2_Y); + UI_Box *view_preview_container = ui_build_box_from_stringf(UI_BoxFlag_DrawBorder|UI_BoxFlag_DrawBackground|UI_BoxFlag_Clip, "###view_preview_container"); + UI_Parent(view_preview_container) UI_Focus(UI_FocusKind_Off) UI_WidthFill + { + DF_ViewSpec *view_spec = view->spec; + DF_ViewUIFunctionType *build_view_ui_function = view_spec->info.ui_hook; + build_view_ui_function(ws, &df_g_nil_panel, view, view_preview_container->rect); + } + } } } - if(!df_entity_is_nil(entity)) + + //- rjf: entity dragging + else if(!df_entity_is_nil(entity)) UI_Tooltip { ui_set_next_pref_width(ui_children_sum(1)); UI_Row UI_HeightFill @@ -3010,7 +3034,6 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D UI_FontSize(df_font_size_from_slot(ws, DF_FontSlot_Icons)) ui_label(df_g_icon_kind_text_table[icon_kind]); ui_label(display_name); - tooltip->background_color = df_rgba_from_theme_color(DF_ThemeColor_EntityBackground); } } } @@ -6008,10 +6031,37 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D UI_CornerRadius01(panel->tab_side == Side_Min ? 0 : corner_radius) UI_CornerRadius10(panel->tab_side == Side_Min ? corner_radius : 0) UI_CornerRadius11(panel->tab_side == Side_Min ? 0 : corner_radius) - for(DF_View *view = panel->first_tab_view; !df_view_is_nil(view); view = view->next, view_idx += 1) + for(DF_View *view = panel->first_tab_view;; view = view->next, view_idx += 1) { temp_end(scratch); + // rjf: if before this tab is the prev-view of the current tab drag, + // draw empty space + if(df_drag_is_active()) + { + DF_Panel *dst_panel = df_panel_from_handle(df_g_last_drag_drop_panel); + DF_View *drag_view = df_view_from_handle(df_g_drag_drop_payload.view); + DF_View *dst_prev_view = df_view_from_handle(df_g_last_drag_drop_prev_tab); + if(dst_panel == panel && + ((!df_view_is_nil(view) && dst_prev_view == view->prev) || + (df_view_is_nil(view) && dst_prev_view == panel->last_tab_view)) && + drag_view != view && drag_view != view->prev) + { + UI_PrefWidth(ui_em(9.f, 0.2f)) UI_BackgroundColor(df_rgba_from_theme_color(DF_ThemeColor_DropSiteOverlay)) + UI_CornerRadius00(corner_radius) + UI_CornerRadius10(corner_radius) + { + UI_Box *drop_site_box = ui_build_box_from_key(UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawBorder, ui_key_zero()); + } + } + } + + // rjf: end on nil view + if(df_view_is_nil(view)) + { + break; + } + // rjf: gather info for this tab B32 view_is_selected = (view == df_view_from_handle(panel->selected_tab_view)); DF_IconKind icon_kind = df_icon_kind_from_view(view); @@ -6207,34 +6257,26 @@ df_window_update_and_render(Arena *arena, OS_EventList *events, DF_Window *ws, D } } + // rjf: store closest prev-view + if(active_drop_site != 0) + { + df_g_last_drag_drop_panel = df_handle_from_panel(panel); + df_g_last_drag_drop_prev_tab = df_handle_from_view(active_drop_site->prev_view); + } + // rjf: vis DF_Panel *drag_panel = df_panel_from_handle(df_g_drag_drop_payload.panel); if(!df_view_is_nil(view) && active_drop_site != 0 && - (panel != drag_panel)) + (panel != drag_panel || 1)) { tab_bar_box->flags |= UI_BoxFlag_DrawOverlay; tab_bar_box->overlay_color = df_rgba_from_theme_color(DF_ThemeColor_DropSiteOverlay); - - if(panel->tab_view_count != 0) - { - D_Bucket *bucket = d_bucket_make(); - D_BucketScope(bucket) - { - d_rect(r2f32p(active_drop_site->p - tab_spacing/2, - tab_bar_box->rect.y0, - active_drop_site->p + tab_spacing/2, - tab_bar_box->rect.y1), - v4f32(1, 1, 1, 1), - 2.f, 0, 1.f); - } - ui_box_equip_draw_bucket(tab_bar_box, bucket); - } } // rjf: drop DF_DragDropPayload payload = df_g_drag_drop_payload; - if((active_drop_site != 0 && df_drag_drop(&payload)) || df_panel_from_handle(payload.panel) == panel) + if((active_drop_site != 0 && df_drag_drop(&payload)) || (df_panel_from_handle(payload.panel) == panel && 0)) { DF_View *view = df_view_from_handle(payload.view); DF_Panel *src_panel = df_panel_from_handle(payload.panel); diff --git a/src/df/gfx/df_gfx.h b/src/df/gfx/df_gfx.h index f792facf..de1f7d5b 100644 --- a/src/df/gfx/df_gfx.h +++ b/src/df/gfx/df_gfx.h @@ -763,6 +763,8 @@ read_only global DF_Panel df_g_nil_panel = global DF_GfxState *df_gfx_state = 0; global DF_DragDropPayload df_g_drag_drop_payload = {0}; +global DF_Handle df_g_last_drag_drop_panel = {0}; +global DF_Handle df_g_last_drag_drop_prev_tab = {0}; //////////////////////////////// //~ rjf: Basic Helpers diff --git a/src/mule/mule_main.cpp b/src/mule/mule_main.cpp index 1260db25..4b56abf3 100644 --- a/src/mule/mule_main.cpp +++ b/src/mule/mule_main.cpp @@ -326,6 +326,9 @@ type_coverage_eval_tests(void){ swea.z = 'z'; } + Struct_With_Embedded_Arrays *swea_ptr = &swea; + int access_via_ptr_member = swea_ptr->x; + Custom_Index_Type custom_index = 42; Custom_Index_Type more_custom_indices[] = { 04,13,22,31,40 diff --git a/src/ui/ui_core.c b/src/ui/ui_core.c index c575708c..dcceba1b 100644 --- a/src/ui/ui_core.c +++ b/src/ui/ui_core.c @@ -1717,7 +1717,6 @@ internal void ui_tooltip_end_base(void) { ui_pop_flags(); - ui_pop_transparency(); ui_pop_parent(); ui_pop_parent(); }