void ui_userbox_do( UI_GADGET_USERBOX * userbox, int keypress ) { int OnMe, olddrag; OnMe = ui_mouse_on_gadget( (UI_GADGET *)userbox ); olddrag = userbox->b1_dragging; userbox->mouse_onme = OnMe; userbox->mouse_x = Mouse.x - userbox->x1; userbox->mouse_y = Mouse.y - userbox->y1; userbox->b1_clicked = 0; if (OnMe) { if ( B1_JUST_PRESSED ) { userbox->b1_dragging = 1; userbox->b1_drag_x1 = Mouse.x - userbox->x1; userbox->b1_drag_y1 = Mouse.y - userbox->y1; userbox->b1_clicked = 1; } if ( B1_PRESSED ) { userbox->b1_held_down = 1; userbox->b1_drag_x2 = Mouse.x - userbox->x1; userbox->b1_drag_y2 = Mouse.y - userbox->y1; } else { userbox->b1_held_down = 0; userbox->b1_dragging = 0; } if ( B1_DOUBLE_CLICKED ) userbox->b1_double_clicked = 1; else userbox->b1_double_clicked = 0; } if (!B1_PRESSED) userbox->b1_dragging = 0; userbox->b1_done_dragging = 0; if (olddrag==1 && userbox->b1_dragging==0 ) { if ((userbox->b1_drag_x1 != userbox->b1_drag_x2) || (userbox->b1_drag_y1 != userbox->b1_drag_y2) ) userbox->b1_done_dragging = 1; } if (CurWindow->keyboard_focus_gadget==(UI_GADGET *)userbox) userbox->keypress = keypress; ui_draw_userbox( userbox ); }
window_event_result ui_userbox_do( UI_DIALOG *dlg, UI_GADGET_USERBOX * userbox,const d_event &event ) { int OnMe, olddrag; int x, y, z; int keypress = 0; window_event_result rval = window_event_result::ignored; if (event.type == EVENT_WINDOW_DRAW) ui_draw_userbox( dlg, userbox ); if (event.type == EVENT_KEY_COMMAND) keypress = event_key_get(event); mouse_get_pos(&x, &y, &z); OnMe = ui_mouse_on_gadget( userbox ); olddrag = userbox->b1_held_down; userbox->mouse_onme = OnMe; userbox->mouse_x = x - userbox->x1; userbox->mouse_y = y - userbox->y1; userbox->b1_dragging = 0; userbox->b1_clicked = 0; if (OnMe) { if ( B1_JUST_PRESSED ) { userbox->b1_held_down = 1; userbox->b1_drag_x1 = x - userbox->x1; userbox->b1_drag_y1 = y - userbox->y1; rval = window_event_result::handled; } else if (B1_JUST_RELEASED) { if (userbox->b1_held_down) userbox->b1_clicked = 1; userbox->b1_held_down = 0; rval = window_event_result::handled; } if ( (event.type == EVENT_MOUSE_MOVED) && userbox->b1_held_down ) { userbox->b1_dragging = 1; userbox->b1_drag_x2 = x - userbox->x1; userbox->b1_drag_y2 = y - userbox->y1; } if ( B1_DOUBLE_CLICKED ) { userbox->b1_double_clicked = 1; rval = window_event_result::handled; } else userbox->b1_double_clicked = 0; } if (B1_JUST_RELEASED) userbox->b1_held_down = 0; userbox->b1_done_dragging = 0; if (olddrag==1 && userbox->b1_held_down==0 ) { if ((userbox->b1_drag_x1 != userbox->b1_drag_x2) || (userbox->b1_drag_y1 != userbox->b1_drag_y2) ) userbox->b1_done_dragging = 1; } if (dlg->keyboard_focus_gadget==userbox) { userbox->keypress = keypress; rval = window_event_result::handled; } if (userbox->b1_clicked || userbox->b1_dragging) { rval = ui_gadget_send_event(dlg, userbox->b1_clicked ? EVENT_UI_GADGET_PRESSED : EVENT_UI_USERBOX_DRAGGED, userbox); if (rval == window_event_result::ignored) rval = window_event_result::handled; } return rval; }