static pos translate_pos(int x, int y) { return (pos){ .x = floorf((x - PADDING) / (float)font_width ), .y = floorf((y - PADDING) / (float)font_height), }; } static pos get_mouse_pos(LPARAM lp) { return translate_pos(GET_X_LPARAM(lp), GET_Y_LPARAM(lp)); } static mouse_button clicked_button; static pos last_pos; void win_mouse_click(mouse_button b, LPARAM lp) { static mouse_button last_button; static uint last_time, count; static pos last_click_pos; win_show_mouse(); mod_keys mods = get_mods(); pos p = get_mouse_pos(lp); if (clicked_button) { term_mouse_release(b, mods, p); clicked_button = 0; } uint t = GetMessageTime(); if (b != last_button || p.x != last_click_pos.x || p.y != last_click_pos.y || t - last_time > GetDoubleClickTime() || ++count > 3) count = 1; term_mouse_click(b, mods, p, count); last_pos = last_click_pos = p; last_time = t; clicked_button = last_button = b; if (alt_state > ALT_NONE) alt_state = ALT_CANCELLED; } void win_mouse_release(mouse_button b, LPARAM lp) { win_show_mouse(); if (b == clicked_button) { term_mouse_release(b, get_mods(), get_mouse_pos(lp)); clicked_button = 0; ReleaseCapture(); } }
void win_mouse_click(mouse_button b, LPARAM lp) { static mouse_button last_button; static uint last_time, count; static pos last_click_pos; win_show_mouse(); mod_keys mods = get_mods(); pos p = get_mouse_pos(lp); uint t = GetMessageTime(); if (b != last_button || p.x != last_click_pos.x || p.y != last_click_pos.y || t - last_time > GetDoubleClickTime() || ++count > 3) count = 1; SetFocus(wnd); // in case focus was in search bar term_mouse_click(b, mods, p, count); last_pos = (pos){INT_MIN, INT_MIN}; last_click_pos = p; last_time = t; last_button = b; if (alt_state > ALT_NONE) alt_state = ALT_CANCELLED; }
void win_mouse_click(mouse_button b, LPARAM lp) { static mouse_button last_button; static uint last_time, count; static pos last_click_pos; win_show_mouse(); if (tab_bar_click(lp)) return; mod_keys mods = get_mods(); pos p = get_mouse_pos(lp); uint t = GetMessageTime(); if (b != last_button || p.x != last_click_pos.x || p.y != last_click_pos.y || t - last_time > GetDoubleClickTime() || ++count > 3) count = 1; term_mouse_click(win_active_terminal(), b, mods, p, count); last_pos = (pos){INT_MIN, INT_MIN}; last_click_pos = p; last_time = t; last_button = b; if (alt_state > ALT_NONE) alt_state = ALT_CANCELLED; }
void win_mouse_move(bool nc, LPARAM lp) { pos p = get_mouse_pos(lp); if (p.x == last_pos.x && p.y == last_pos.y) return; last_pos = p; win_show_mouse(); if (!nc) term_mouse_move(clicked_button, get_mods(), p); }
void win_mouse_move(bool nc, LPARAM lp) { if (lp == last_lp) return; win_show_mouse(); pos p = get_mouse_pos(lp); if (nc || (p.x == last_pos.x && p.y == last_pos.y)) return; last_pos = p; term_mouse_move(get_mods(), p); }
void win_mouse_move(bool nc, LPARAM lp) { if (lp == last_lp) return; win_show_mouse(); pos p = get_mouse_pos(lp); if (nc || (p.x == last_pos.x && p.y == last_pos.y)) return; if (p.y < 0) { set_app_cursor(true); } else { win_update_mouse(); } last_pos = p; term_mouse_move(win_active_terminal(), get_mods(), p); }