mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-05 21:38:40 +00:00
checkpoint on new universal drag/drop stuff
This commit is contained in:
@@ -5948,7 +5948,7 @@ rd_window_frame(RD_Window *ws)
|
|||||||
//
|
//
|
||||||
{
|
{
|
||||||
RD_View *drag_view = rd_view_from_handle(rd_state->drag_drop_regs->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_state->drag_drop_regs_slot == RD_RegSlot_View && !rd_view_is_nil(drag_view))
|
||||||
{
|
{
|
||||||
//- rjf: params
|
//- rjf: params
|
||||||
F32 drop_site_major_dim_px = ceil_f32(ui_top_font_size()*7.f);
|
F32 drop_site_major_dim_px = ceil_f32(ui_top_font_size()*7.f);
|
||||||
@@ -6288,7 +6288,7 @@ rd_window_frame(RD_Window *ws)
|
|||||||
//
|
//
|
||||||
{
|
{
|
||||||
RD_View *view = rd_view_from_handle(rd_state->drag_drop_regs->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_state->drag_drop_regs_slot == RD_RegSlot_View && !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);
|
||||||
Vec2F32 drop_site_half_dim = v2f32(drop_site_dim_px/2, drop_site_dim_px/2);
|
Vec2F32 drop_site_half_dim = v2f32(drop_site_dim_px/2, drop_site_dim_px/2);
|
||||||
@@ -6707,7 +6707,7 @@ rd_window_frame(RD_Window *ws)
|
|||||||
|
|
||||||
// rjf: if before this tab is the prev-view of the current tab drag,
|
// rjf: if before this tab is the prev-view of the current tab drag,
|
||||||
// draw empty space
|
// draw empty space
|
||||||
if(rd_drag_is_active() && catchall_drop_site_hovered)
|
if(rd_drag_is_active() && rd_state->drag_drop_regs_slot == RD_RegSlot_View && 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_state->drag_drop_regs->view);
|
RD_View *drag_view = rd_view_from_handle(rd_state->drag_drop_regs->view);
|
||||||
@@ -6901,7 +6901,7 @@ rd_window_frame(RD_Window *ws)
|
|||||||
{
|
{
|
||||||
Vec2F32 mouse = ui_mouse();
|
Vec2F32 mouse = ui_mouse();
|
||||||
RD_View *view = rd_view_from_handle(rd_state->drag_drop_regs->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() && rd_state->drag_drop_regs_slot == RD_RegSlot_View && window_is_focused && contains_2f32(panel_rect, mouse) && !rd_view_is_nil(view))
|
||||||
{
|
{
|
||||||
// rjf: mouse => hovered drop site
|
// rjf: mouse => hovered drop site
|
||||||
F32 min_distance = 0;
|
F32 min_distance = 0;
|
||||||
|
|||||||
+46
-39
@@ -1745,7 +1745,10 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
|
|||||||
UI_Signal priority_margin_container_sig = ui_signal_from_box(priority_margin_container_box);
|
UI_Signal priority_margin_container_sig = ui_signal_from_box(priority_margin_container_box);
|
||||||
UI_Signal catchall_margin_container_sig = ui_signal_from_box(catchall_margin_container_box);
|
UI_Signal catchall_margin_container_sig = ui_signal_from_box(catchall_margin_container_box);
|
||||||
UI_Signal text_container_sig = ui_signal_from_box(text_container_box);
|
UI_Signal text_container_sig = ui_signal_from_box(text_container_box);
|
||||||
|
B32 line_drag_drop = 0;
|
||||||
RD_Entity *line_drag_entity = &d_nil_entity;
|
RD_Entity *line_drag_entity = &d_nil_entity;
|
||||||
|
CTRL_Entity *line_drag_ctrl_entity = &ctrl_entity_nil;
|
||||||
|
Vec4F32 line_drag_drop_color = rd_rgba_from_theme_color(RD_ThemeColor_DropSiteOverlay);
|
||||||
{
|
{
|
||||||
//- rjf: determine mouse drag range
|
//- rjf: determine mouse drag range
|
||||||
TxtRng mouse_drag_rng = txt_rng(mouse_pt, mouse_pt);
|
TxtRng mouse_drag_rng = txt_rng(mouse_pt, mouse_pt);
|
||||||
@@ -1817,12 +1820,26 @@ 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()))
|
||||||
{
|
{
|
||||||
|
CTRL_Entity *thread = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_state->drag_drop_regs->thread);
|
||||||
RD_Entity *entity = rd_entity_from_handle(rd_state->drag_drop_regs->entity);
|
RD_Entity *entity = rd_entity_from_handle(rd_state->drag_drop_regs->entity);
|
||||||
if(entity->kind == RD_EntityKind_Thread ||
|
if(rd_state->drag_drop_regs_slot == RD_RegSlot_Entity &&
|
||||||
entity->kind == RD_EntityKind_WatchPin ||
|
(entity->kind == RD_EntityKind_WatchPin ||
|
||||||
entity->kind == RD_EntityKind_Breakpoint)
|
entity->kind == RD_EntityKind_Breakpoint))
|
||||||
{
|
{
|
||||||
|
line_drag_drop = 1;
|
||||||
line_drag_entity = entity;
|
line_drag_entity = entity;
|
||||||
|
if(entity->flags & RD_EntityFlag_HasColor)
|
||||||
|
{
|
||||||
|
line_drag_drop_color = rd_rgba_from_entity(entity);
|
||||||
|
line_drag_drop_color.w *= 0.5f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(rd_state->drag_drop_regs_slot == RD_RegSlot_Thread)
|
||||||
|
{
|
||||||
|
line_drag_drop = 1;
|
||||||
|
line_drag_ctrl_entity = thread;
|
||||||
|
line_drag_drop_color = rd_rgba_from_ctrl_entity(thread);
|
||||||
|
line_drag_drop_color.w *= 0.5f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1834,39 +1851,34 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
|
|||||||
S64 line_num = mouse_pt.line;
|
S64 line_num = mouse_pt.line;
|
||||||
U64 line_idx = line_num - params->line_num_range.min;
|
U64 line_idx = line_num - params->line_num_range.min;
|
||||||
U64 line_vaddr = params->line_vaddrs[line_idx];
|
U64 line_vaddr = params->line_vaddrs[line_idx];
|
||||||
switch(dropped_entity->kind)
|
rd_cmd(RD_CmdKind_RelocateEntity,
|
||||||
|
.entity = rd_handle_from_entity(dropped_entity),
|
||||||
|
.file_path = rd_regs()->file_path,
|
||||||
|
.cursor = txt_pt(line_num, 1),
|
||||||
|
.vaddr = line_vaddr);
|
||||||
|
}
|
||||||
|
if(line_drag_ctrl_entity != &ctrl_entity_nil && rd_drag_drop() && contains_1s64(params->line_num_range, mouse_pt.line))
|
||||||
|
{
|
||||||
|
S64 line_num = mouse_pt.line;
|
||||||
|
U64 line_idx = line_num - params->line_num_range.min;
|
||||||
|
U64 line_vaddr = params->line_vaddrs[line_idx];
|
||||||
|
CTRL_Entity *thread = line_drag_ctrl_entity;
|
||||||
|
U64 new_rip_vaddr = line_vaddr;
|
||||||
|
if(rd_regs()->file_path.size != 0)
|
||||||
{
|
{
|
||||||
default:{}break;
|
D_LineList *lines = ¶ms->line_infos[line_idx];
|
||||||
case RD_EntityKind_Breakpoint:
|
for(D_LineNode *n = lines->first; n != 0; n = n->next)
|
||||||
case RD_EntityKind_WatchPin:
|
|
||||||
{
|
{
|
||||||
rd_cmd(RD_CmdKind_RelocateEntity,
|
CTRL_EntityList modules = ctrl_modules_from_dbgi_key(scratch.arena, d_state->ctrl_entity_store, &n->v.dbgi_key);
|
||||||
.entity = rd_handle_from_entity(dropped_entity),
|
CTRL_Entity *module = ctrl_module_from_thread_candidates(d_state->ctrl_entity_store, thread, &modules);
|
||||||
.file_path = rd_regs()->file_path,
|
if(module != &ctrl_entity_nil)
|
||||||
.cursor = txt_pt(line_num, 1),
|
|
||||||
.vaddr = line_vaddr);
|
|
||||||
}break;
|
|
||||||
case RD_EntityKind_Thread:
|
|
||||||
{
|
|
||||||
CTRL_Entity *thread = ctrl_entity_from_handle(d_state->ctrl_entity_store, dropped_entity->ctrl_handle);
|
|
||||||
U64 new_rip_vaddr = line_vaddr;
|
|
||||||
if(rd_regs()->file_path.size != 0)
|
|
||||||
{
|
{
|
||||||
D_LineList *lines = ¶ms->line_infos[line_idx];
|
new_rip_vaddr = ctrl_vaddr_from_voff(module, n->v.voff_range.min);
|
||||||
for(D_LineNode *n = lines->first; n != 0; n = n->next)
|
break;
|
||||||
{
|
|
||||||
CTRL_EntityList modules = ctrl_modules_from_dbgi_key(scratch.arena, d_state->ctrl_entity_store, &n->v.dbgi_key);
|
|
||||||
CTRL_Entity *module = ctrl_module_from_thread_candidates(d_state->ctrl_entity_store, thread, &modules);
|
|
||||||
if(module != &ctrl_entity_nil)
|
|
||||||
{
|
|
||||||
new_rip_vaddr = ctrl_vaddr_from_voff(module, n->v.voff_range.min);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
rd_cmd(RD_CmdKind_SetThreadIP, .thread = thread->handle, .vaddr = new_rip_vaddr);
|
}
|
||||||
}break;
|
|
||||||
}
|
}
|
||||||
|
rd_cmd(RD_CmdKind_SetThreadIP, .thread = thread->handle, .vaddr = new_rip_vaddr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1955,19 +1967,14 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
|
|||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: dragging entity which applies to lines over this slice -> visualize
|
//- rjf: dragging/dropping which applies to lines over this slice -> visualize
|
||||||
//
|
//
|
||||||
if(!rd_entity_is_nil(line_drag_entity) && contains_2f32(clipped_top_container_rect, ui_mouse()))
|
if(line_drag_drop && contains_2f32(clipped_top_container_rect, ui_mouse()))
|
||||||
{
|
{
|
||||||
Vec4F32 color = rd_rgba_from_theme_color(RD_ThemeColor_DropSiteOverlay);
|
|
||||||
if(line_drag_entity->flags & RD_EntityFlag_HasColor)
|
|
||||||
{
|
|
||||||
color = rd_rgba_from_entity(line_drag_entity);
|
|
||||||
color.w /= 2;
|
|
||||||
}
|
|
||||||
DR_Bucket *bucket = dr_bucket_make();
|
DR_Bucket *bucket = dr_bucket_make();
|
||||||
D_BucketScope(bucket)
|
D_BucketScope(bucket)
|
||||||
{
|
{
|
||||||
|
Vec4F32 color = line_drag_drop_color;
|
||||||
Rng2F32 drop_line_rect = r2f32p(top_container_box->rect.x0,
|
Rng2F32 drop_line_rect = r2f32p(top_container_box->rect.x0,
|
||||||
top_container_box->rect.y0 + (mouse_pt.line - params->line_num_range.min) * params->line_height_px,
|
top_container_box->rect.y0 + (mouse_pt.line - params->line_num_range.min) * params->line_height_px,
|
||||||
top_container_box->rect.x1,
|
top_container_box->rect.x1,
|
||||||
|
|||||||
Reference in New Issue
Block a user