checkpoint on new drag/drop system; eliminate old drag/drop payload, just use regs like everything else

This commit is contained in:
Ryan Fleury
2024-09-16 17:25:21 -07:00
parent 4b382777e9
commit 35659a4525
3 changed files with 60 additions and 99 deletions
+47 -65
View File
@@ -1050,25 +1050,24 @@ rd_drag_is_active(void)
} }
internal void internal void
rd_drag_begin(RD_DragDropPayload *payload) rd_drag_begin(void)
{ {
if(!rd_drag_is_active()) if(!rd_drag_is_active())
{ {
arena_clear(rd_state->drag_drop_arena);
rd_state->drag_drop_regs = rd_regs_copy(rd_state->drag_drop_arena, rd_regs());
rd_state->drag_drop_state = RD_DragDropState_Dragging; rd_state->drag_drop_state = RD_DragDropState_Dragging;
MemoryCopyStruct(&rd_drag_drop_payload, payload);
} }
} }
internal B32 internal B32
rd_drag_drop(RD_DragDropPayload *out_payload) rd_drag_drop(void)
{ {
B32 result = 0; B32 result = 0;
if(rd_state->drag_drop_state == RD_DragDropState_Dropping) if(rd_state->drag_drop_state == RD_DragDropState_Dropping)
{ {
result = 1; result = 1;
rd_state->drag_drop_state = RD_DragDropState_Null; rd_state->drag_drop_state = RD_DragDropState_Null;
MemoryCopyStruct(out_payload, &rd_drag_drop_payload);
MemoryZeroStruct(&rd_drag_drop_payload);
} }
return result; return result;
} }
@@ -1077,13 +1076,6 @@ internal void
rd_drag_kill(void) rd_drag_kill(void)
{ {
rd_state->drag_drop_state = RD_DragDropState_Null; rd_state->drag_drop_state = RD_DragDropState_Null;
MemoryZeroStruct(&rd_drag_drop_payload);
}
internal void
rd_queue_drag_drop(void)
{
rd_state->drag_drop_state = RD_DragDropState_Dropping;
} }
internal void internal void
@@ -2938,14 +2930,15 @@ rd_window_frame(RD_Window *ws)
//////////////////////////// ////////////////////////////
//- rjf: drag/drop visualization tooltips //- rjf: drag/drop visualization tooltips
// //
B32 drag_active = rd_drag_is_active(); if(rd_drag_is_active() && window_is_focused)
if(drag_active && window_is_focused) RD_RegsScope(.window = rd_state->drag_drop_regs->window,
.panel = rd_state->drag_drop_regs->panel,
.view = rd_state->drag_drop_regs->view)
{ {
Temp scratch = scratch_begin(0, 0); Temp scratch = scratch_begin(0, 0);
RD_DragDropPayload *payload = &rd_drag_drop_payload; RD_Panel *panel = rd_panel_from_handle(rd_state->drag_drop_regs->panel);
RD_Panel *panel = rd_panel_from_handle(payload->panel); RD_Entity *entity = rd_entity_from_handle(rd_state->drag_drop_regs->entity);
RD_Entity *entity = rd_entity_from_handle(payload->entity); RD_View *view = rd_view_from_handle(rd_state->drag_drop_regs->view);
RD_View *view = rd_view_from_handle(payload->view);
{ {
//- rjf: tab dragging //- rjf: tab dragging
if(!rd_view_is_nil(view)) if(!rd_view_is_nil(view))
@@ -5753,7 +5746,7 @@ rd_window_frame(RD_Window *ws)
//- rjf: boundary tab-drag/drop sites //- rjf: boundary tab-drag/drop sites
// //
{ {
RD_View *drag_view = rd_view_from_handle(rd_drag_drop_payload.view); RD_View *drag_view = rd_view_from_handle(rd_state->drag_drop_regs->view);
if(rd_drag_is_active() && !rd_view_is_nil(drag_view)) if(rd_drag_is_active() && !rd_view_is_nil(drag_view))
{ {
//- rjf: params //- rjf: params
@@ -5830,8 +5823,7 @@ rd_window_frame(RD_Window *ws)
} }
// rjf: drop // rjf: drop
RD_DragDropPayload payload = {0}; if(ui_key_match(site_box->key, ui_drop_hot_key()) && rd_drag_drop())
if(ui_key_match(site_box->key, ui_drop_hot_key()) && rd_drag_drop(&payload))
{ {
Dir2 dir = (axis == Axis2_Y ? (side == Side_Min ? Dir2_Up : Dir2_Down) : Dir2 dir = (axis == Axis2_Y ? (side == Side_Min ? Dir2_Up : Dir2_Down) :
axis == Axis2_X ? (side == Side_Min ? Dir2_Left : Dir2_Right) : axis == Axis2_X ? (side == Side_Min ? Dir2_Left : Dir2_Right) :
@@ -5841,8 +5833,8 @@ rd_window_frame(RD_Window *ws)
RD_Panel *split_panel = panel; RD_Panel *split_panel = panel;
rd_cmd(RD_CmdKind_SplitPanel, rd_cmd(RD_CmdKind_SplitPanel,
.dst_panel = rd_handle_from_panel(split_panel), .dst_panel = rd_handle_from_panel(split_panel),
.panel = payload.panel, .panel = rd_state->drag_drop_regs->panel,
.view = payload.view, .view = rd_state->drag_drop_regs->view,
.dir2 = dir); .dir2 = dir);
} }
} }
@@ -5914,8 +5906,7 @@ rd_window_frame(RD_Window *ws)
} }
// rjf: drop // rjf: drop
RD_DragDropPayload payload = {0}; if(ui_key_match(site_box->key, ui_drop_hot_key()) && rd_drag_drop())
if(ui_key_match(site_box->key, ui_drop_hot_key()) && rd_drag_drop(&payload))
{ {
Dir2 dir = (panel->split_axis == Axis2_X ? Dir2_Left : Dir2_Up); Dir2 dir = (panel->split_axis == Axis2_X ? Dir2_Left : Dir2_Up);
RD_Panel *split_panel = child; RD_Panel *split_panel = child;
@@ -5926,8 +5917,8 @@ rd_window_frame(RD_Window *ws)
} }
rd_cmd(RD_CmdKind_SplitPanel, rd_cmd(RD_CmdKind_SplitPanel,
.dst_panel = rd_handle_from_panel(split_panel), .dst_panel = rd_handle_from_panel(split_panel),
.panel = payload.panel, .panel = rd_state->drag_drop_regs->panel,
.view = payload.view, .view = rd_state->drag_drop_regs->view,
.dir2 = dir); .dir2 = dir);
} }
@@ -6095,7 +6086,7 @@ rd_window_frame(RD_Window *ws)
//- rjf: build combined split+movetab drag/drop sites //- rjf: build combined split+movetab drag/drop sites
// //
{ {
RD_View *view = rd_view_from_handle(rd_drag_drop_payload.view); RD_View *view = rd_view_from_handle(rd_state->drag_drop_regs->view);
if(rd_drag_is_active() && !rd_view_is_nil(view) && contains_2f32(panel_rect, ui_mouse())) if(rd_drag_is_active() && !rd_view_is_nil(view) && contains_2f32(panel_rect, ui_mouse()))
{ {
F32 drop_site_dim_px = ceil_f32(ui_top_font_size()*7.f); F32 drop_site_dim_px = ceil_f32(ui_top_font_size()*7.f);
@@ -6213,23 +6204,22 @@ rd_window_frame(RD_Window *ws)
} }
} }
} }
RD_DragDropPayload payload = {0}; if(ui_key_match(site_box->key, ui_drop_hot_key()) && rd_drag_drop())
if(ui_key_match(site_box->key, ui_drop_hot_key()) && rd_drag_drop(&payload))
{ {
if(dir != Dir2_Invalid) if(dir != Dir2_Invalid)
{ {
rd_cmd(RD_CmdKind_SplitPanel, rd_cmd(RD_CmdKind_SplitPanel,
.dst_panel = rd_handle_from_panel(panel), .dst_panel = rd_handle_from_panel(panel),
.panel = payload.panel, .panel = rd_state->drag_drop_regs->panel,
.view = payload.view, .view = rd_state->drag_drop_regs->view,
.dir2 = dir); .dir2 = dir);
} }
else else
{ {
rd_cmd(RD_CmdKind_MoveTab, rd_cmd(RD_CmdKind_MoveTab,
.dst_panel = rd_handle_from_panel(panel), .dst_panel = rd_handle_from_panel(panel),
.panel = payload.panel, .panel = rd_state->drag_drop_regs->panel,
.view = payload.view, .view = rd_state->drag_drop_regs->view,
.prev_view = rd_handle_from_view(panel->last_tab_view)); .prev_view = rd_handle_from_view(panel->last_tab_view));
} }
} }
@@ -6519,7 +6509,7 @@ rd_window_frame(RD_Window *ws)
if(rd_drag_is_active() && catchall_drop_site_hovered) if(rd_drag_is_active() && catchall_drop_site_hovered)
{ {
RD_Panel *dst_panel = rd_panel_from_handle(rd_last_drag_drop_panel); RD_Panel *dst_panel = rd_panel_from_handle(rd_last_drag_drop_panel);
RD_View *drag_view = rd_view_from_handle(rd_drag_drop_payload.view); RD_View *drag_view = rd_view_from_handle(rd_state->drag_drop_regs->view);
RD_View *dst_prev_view = rd_view_from_handle(rd_last_drag_drop_prev_tab); RD_View *dst_prev_view = rd_view_from_handle(rd_last_drag_drop_prev_tab);
if(dst_panel == panel && if(dst_panel == panel &&
((!rd_view_is_nil(view) && dst_prev_view == view->order_prev && drag_view != view && drag_view != view->order_prev) || ((!rd_view_is_nil(view) && dst_prev_view == view->order_prev && drag_view != view && drag_view != view->order_prev) ||
@@ -6620,13 +6610,11 @@ rd_window_frame(RD_Window *ws)
} }
else if(ui_dragging(sig) && !rd_drag_is_active() && length_2f32(ui_drag_delta()) > 10.f) else if(ui_dragging(sig) && !rd_drag_is_active() && length_2f32(ui_drag_delta()) > 10.f)
{ {
RD_DragDropPayload payload = {0}; RD_RegsScope(.panel = rd_handle_from_panel(panel),
.view = rd_handle_from_view(view))
{ {
payload.key = sig.box->key; rd_drag_begin();
payload.panel = rd_handle_from_panel(panel);
payload.view = rd_handle_from_view(view);
} }
rd_drag_begin(&payload);
} }
else if(ui_right_clicked(sig)) else if(ui_right_clicked(sig))
{ {
@@ -6711,7 +6699,7 @@ rd_window_frame(RD_Window *ws)
// rjf: more precise drop-sites on tab bar // rjf: more precise drop-sites on tab bar
{ {
Vec2F32 mouse = ui_mouse(); Vec2F32 mouse = ui_mouse();
RD_View *view = rd_view_from_handle(rd_drag_drop_payload.view); RD_View *view = rd_view_from_handle(rd_state->drag_drop_regs->view);
if(rd_drag_is_active() && window_is_focused && contains_2f32(panel_rect, mouse) && !rd_view_is_nil(view)) if(rd_drag_is_active() && window_is_focused && contains_2f32(panel_rect, mouse) && !rd_view_is_nil(view))
{ {
// rjf: mouse => hovered drop site // rjf: mouse => hovered drop site
@@ -6741,7 +6729,7 @@ rd_window_frame(RD_Window *ws)
} }
// rjf: vis // rjf: vis
RD_Panel *drag_panel = rd_panel_from_handle(rd_drag_drop_payload.panel); RD_Panel *drag_panel = rd_panel_from_handle(rd_state->drag_drop_regs->panel);
if(!rd_view_is_nil(view) && active_drop_site != 0) if(!rd_view_is_nil(view) && active_drop_site != 0)
{ {
RD_Palette(RD_PaletteCode_DropSiteOverlay) UI_Rect(tab_bar_rect) RD_Palette(RD_PaletteCode_DropSiteOverlay) UI_Rect(tab_bar_rect)
@@ -6749,11 +6737,10 @@ rd_window_frame(RD_Window *ws)
} }
// rjf: drop // rjf: drop
RD_DragDropPayload payload = rd_drag_drop_payload; if(catchall_drop_site_hovered && (active_drop_site != 0 && rd_drag_drop()))
if(catchall_drop_site_hovered && (active_drop_site != 0 && rd_drag_drop(&payload)))
{ {
RD_View *view = rd_view_from_handle(payload.view); RD_View *view = rd_view_from_handle(rd_state->drag_drop_regs->view);
RD_Panel *src_panel = rd_panel_from_handle(payload.panel); RD_Panel *src_panel = rd_panel_from_handle(rd_state->drag_drop_regs->panel);
if(!rd_panel_is_nil(panel) && !rd_view_is_nil(view)) if(!rd_panel_is_nil(panel) && !rd_view_is_nil(view))
{ {
rd_cmd(RD_CmdKind_MoveTab, rd_cmd(RD_CmdKind_MoveTab,
@@ -6781,8 +6768,7 @@ rd_window_frame(RD_Window *ws)
{ {
rd_last_drag_drop_panel = rd_handle_from_panel(panel); rd_last_drag_drop_panel = rd_handle_from_panel(panel);
RD_DragDropPayload *payload = &rd_drag_drop_payload; RD_View *dragged_view = rd_view_from_handle(rd_state->drag_drop_regs->view);
RD_View *dragged_view = rd_view_from_handle(payload->view);
B32 view_is_in_panel = 0; B32 view_is_in_panel = 0;
for(RD_View *view = panel->first_tab_view; !rd_view_is_nil(view); view = view->order_next) for(RD_View *view = panel->first_tab_view; !rd_view_is_nil(view); view = view->order_next)
{ {
@@ -6804,12 +6790,11 @@ rd_window_frame(RD_Window *ws)
// rjf: drop // rjf: drop
{ {
RD_DragDropPayload payload = {0}; if(rd_drag_drop())
if(rd_drag_drop(&payload))
{ {
RD_Panel *src_panel = rd_panel_from_handle(payload.panel); RD_Panel *src_panel = rd_panel_from_handle(rd_state->drag_drop_regs->panel);
RD_View *view = rd_view_from_handle(payload.view); RD_View *view = rd_view_from_handle(rd_state->drag_drop_regs->view);
RD_Entity *entity = rd_entity_from_handle(payload.entity); RD_Entity *entity = rd_entity_from_handle(rd_state->drag_drop_regs->entity);
// rjf: view drop // rjf: view drop
if(!rd_view_is_nil(view)) if(!rd_view_is_nil(view))
@@ -6826,7 +6811,7 @@ rd_window_frame(RD_Window *ws)
{ {
rd_cmd(RD_CmdKind_SpawnEntityView, rd_cmd(RD_CmdKind_SpawnEntityView,
.panel = rd_handle_from_panel(panel), .panel = rd_handle_from_panel(panel),
.cursor = payload.text_point, .cursor = rd_state->drag_drop_regs->cursor,
.entity = rd_handle_from_entity(entity)); .entity = rd_handle_from_entity(entity));
} }
} }
@@ -9430,6 +9415,8 @@ rd_init(CmdLine *cmdln)
rd_state->cfg_main_font_path_arena = arena_alloc(); rd_state->cfg_main_font_path_arena = arena_alloc();
rd_state->cfg_code_font_path_arena = arena_alloc(); rd_state->cfg_code_font_path_arena = arena_alloc();
rd_state->bind_change_arena = arena_alloc(); rd_state->bind_change_arena = arena_alloc();
rd_state->drag_drop_arena = arena_alloc();
rd_state->drag_drop_regs = push_array(rd_state->drag_drop_arena, RD_Regs, 1);
rd_state->top_regs = &rd_state->base_regs; rd_state->top_regs = &rd_state->base_regs;
rd_clear_bindings(); rd_clear_bindings();
@@ -9715,6 +9702,12 @@ rd_frame(void)
} }
B32 take = 0; B32 take = 0;
//- rjf: try drag/drop drop-kickoff
if(rd_drag_is_active() && event->kind == OS_EventKind_Release && event->key == OS_Key_LeftMouseButton)
{
rd_state->drag_drop_state = RD_DragDropState_Dropping;
}
//- rjf: try window close //- rjf: try window close
if(!take && event->kind == OS_EventKind_WindowClose && window != 0) if(!take && event->kind == OS_EventKind_WindowClose && window != 0)
{ {
@@ -12393,7 +12386,6 @@ rd_frame(void)
} }
}break; }break;
//- rjf: thread finding //- rjf: thread finding
case RD_CmdKind_FindThread: case RD_CmdKind_FindThread:
for(RD_Window *ws = rd_state->first_window; ws != 0; ws = ws->next) for(RD_Window *ws = rd_state->first_window; ws != 0; ws = ws->next)
@@ -14234,15 +14226,6 @@ rd_frame(void)
} }
} }
//////////////////////////////
//- rjf: queue drag drop (TODO(rjf): @msgs)
//
B32 queue_drag_drop = 0;
if(queue_drag_drop)
{
rd_queue_drag_drop();
}
//////////////////////////// ////////////////////////////
//- rjf: rotate command slots, bump command gen counter //- rjf: rotate command slots, bump command gen counter
// //
@@ -14329,7 +14312,6 @@ rd_frame(void)
if(rd_state->drag_drop_state == RD_DragDropState_Dropping) if(rd_state->drag_drop_state == RD_DragDropState_Dropping)
{ {
rd_state->drag_drop_state = RD_DragDropState_Null; rd_state->drag_drop_state = RD_DragDropState_Null;
MemoryZeroStruct(&rd_drag_drop_payload);
} }
////////////////////////////// //////////////////////////////
+7 -17
View File
@@ -315,16 +315,6 @@ typedef enum RD_DragDropState
} }
RD_DragDropState; RD_DragDropState;
typedef struct RD_DragDropPayload RD_DragDropPayload;
struct RD_DragDropPayload
{
UI_Key key;
RD_Handle panel;
RD_Handle view;
RD_Handle entity;
TxtPt text_point;
};
//////////////////////////////// ////////////////////////////////
//~ rjf: Command Kind Types //~ rjf: Command Kind Types
@@ -848,6 +838,11 @@ struct RD_State
Arena *current_path_arena; Arena *current_path_arena;
String8 current_path; String8 current_path;
// rjf: drag/drop state
Arena *drag_drop_arena;
RD_Regs *drag_drop_regs;
RD_DragDropState drag_drop_state;
//- //-
// TODO(rjf): TO BE ELIMINATED OR REPLACED VVVVVVVVVVVVVVVV // TODO(rjf): TO BE ELIMINATED OR REPLACED VVVVVVVVVVVVVVVV
//- //-
@@ -900,9 +895,6 @@ struct RD_State
U64 free_view_count; U64 free_view_count;
U64 allocated_view_count; U64 allocated_view_count;
// rjf: drag/drop state machine
RD_DragDropState drag_drop_state;
// rjf: config reading state // rjf: config reading state
Arena *cfg_path_arenas[RD_CfgSrc_COUNT]; Arena *cfg_path_arenas[RD_CfgSrc_COUNT];
String8 cfg_paths[RD_CfgSrc_COUNT]; String8 cfg_paths[RD_CfgSrc_COUNT];
@@ -968,7 +960,6 @@ read_only global RD_Panel rd_nil_panel =
}; };
global RD_State *rd_state = 0; global RD_State *rd_state = 0;
global RD_DragDropPayload rd_drag_drop_payload = {0};
global RD_Handle rd_last_drag_drop_panel = {0}; global RD_Handle rd_last_drag_drop_panel = {0};
global RD_Handle rd_last_drag_drop_prev_tab = {0}; global RD_Handle rd_last_drag_drop_prev_tab = {0};
@@ -1112,10 +1103,9 @@ internal B32 rd_prefer_dasm_from_window(RD_Window *window);
//~ rjf: Global Cross-Window UI Interaction State Functions //~ rjf: Global Cross-Window UI Interaction State Functions
internal B32 rd_drag_is_active(void); internal B32 rd_drag_is_active(void);
internal void rd_drag_begin(RD_DragDropPayload *payload); internal void rd_drag_begin(void);
internal B32 rd_drag_drop(RD_DragDropPayload *out_payload); internal B32 rd_drag_drop(void);
internal void rd_drag_kill(void); internal void rd_drag_kill(void);
internal void rd_queue_drag_drop(void);
internal void rd_set_hover_regs(void); internal void rd_set_hover_regs(void);
internal RD_Regs *rd_get_hover_regs(void); internal RD_Regs *rd_get_hover_regs(void);
+6 -17
View File
@@ -756,10 +756,7 @@ rd_entity_desc_button(RD_Entity *entity, FuzzyMatchRangeList *name_matches, Stri
// rjf: drag+drop // rjf: drag+drop
else if(ui_dragging(sig) && !contains_2f32(box->rect, ui_mouse())) else if(ui_dragging(sig) && !contains_2f32(box->rect, ui_mouse()))
{ {
RD_DragDropPayload payload = {0}; RD_RegsScope(.entity = rd_handle_from_entity(entity)) rd_drag_begin();
payload.key = box->key;
payload.entity = rd_handle_from_entity(entity);
rd_drag_begin(&payload);
} }
} }
scratch_end(scratch); scratch_end(scratch);
@@ -1405,9 +1402,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
// rjf: drag start // rjf: drag start
if(ui_dragging(bp_sig) && !contains_2f32(bp_box->rect, ui_mouse())) if(ui_dragging(bp_sig) && !contains_2f32(bp_box->rect, ui_mouse()))
{ {
RD_DragDropPayload payload = {0}; RD_RegsScope(.entity = rd_handle_from_entity(bp)) rd_drag_begin();
payload.entity = rd_handle_from_entity(bp);
rd_drag_begin(&payload);
} }
// rjf: bp right-click menu // rjf: bp right-click menu
@@ -1463,9 +1458,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
// rjf: drag start // rjf: drag start
if(ui_dragging(pin_sig) && !contains_2f32(pin_box->rect, ui_mouse())) if(ui_dragging(pin_sig) && !contains_2f32(pin_box->rect, ui_mouse()))
{ {
RD_DragDropPayload payload = {0}; RD_RegsScope(.entity = rd_handle_from_entity(pin)) rd_drag_begin();
payload.entity = rd_handle_from_entity(pin);
rd_drag_begin(&payload);
} }
// rjf: watch right-click menu // rjf: watch right-click menu
@@ -1692,9 +1685,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
UI_Signal sig = ui_buttonf("%S###pin_nub", rd_icon_kind_text_table[RD_IconKind_Pin]); UI_Signal sig = ui_buttonf("%S###pin_nub", rd_icon_kind_text_table[RD_IconKind_Pin]);
if(ui_dragging(sig) && !contains_2f32(sig.box->rect, ui_mouse())) if(ui_dragging(sig) && !contains_2f32(sig.box->rect, ui_mouse()))
{ {
RD_DragDropPayload payload = {0}; RD_RegsScope(.entity = rd_handle_from_entity(pin)) rd_drag_begin();
payload.entity = rd_handle_from_entity(pin);
rd_drag_begin(&payload);
} }
if(ui_right_clicked(sig)) if(ui_right_clicked(sig))
{ {
@@ -1860,8 +1851,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
// drop target // drop target
if(rd_drag_is_active() && contains_2f32(clipped_top_container_rect, ui_mouse())) if(rd_drag_is_active() && contains_2f32(clipped_top_container_rect, ui_mouse()))
{ {
RD_DragDropPayload *payload = &rd_drag_drop_payload; RD_Entity *entity = rd_entity_from_handle(rd_state->drag_drop_regs->entity);
RD_Entity *entity = rd_entity_from_handle(payload->entity);
if(entity->kind == RD_EntityKind_Thread || if(entity->kind == RD_EntityKind_Thread ||
entity->kind == RD_EntityKind_WatchPin || entity->kind == RD_EntityKind_WatchPin ||
entity->kind == RD_EntityKind_Breakpoint) entity->kind == RD_EntityKind_Breakpoint)
@@ -1872,8 +1862,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
//- rjf: drop target is dropped -> process //- rjf: drop target is dropped -> process
{ {
RD_DragDropPayload payload = {0}; if(!rd_entity_is_nil(line_drag_entity) && rd_drag_drop() && contains_1s64(params->line_num_range, mouse_pt.line))
if(!rd_entity_is_nil(line_drag_entity) && rd_drag_drop(&payload) && contains_1s64(params->line_num_range, mouse_pt.line))
{ {
RD_Entity *dropped_entity = line_drag_entity; RD_Entity *dropped_entity = line_drag_entity;
S64 line_num = mouse_pt.line; S64 line_num = mouse_pt.line;