1*6348e3f3Sblymn /* $NetBSD: mouse.c,v 1.2 2024/12/23 02:58:04 blymn Exp $ */ 2bb2ce1fbSroy 3bb2ce1fbSroy /*- 4bb2ce1fbSroy * Copyright (c) 2020 The NetBSD Foundation, Inc. 5bb2ce1fbSroy * All rights reserved. 6bb2ce1fbSroy * 7bb2ce1fbSroy * This code is derived from software contributed to The NetBSD Foundation 8bb2ce1fbSroy * by Roy Marples. 9bb2ce1fbSroy * 10bb2ce1fbSroy * Redistribution and use in source and binary forms, with or without 11bb2ce1fbSroy * modification, are permitted provided that the following conditions 12bb2ce1fbSroy * are met: 13bb2ce1fbSroy * 1. Redistributions of source code must retain the above copyright 14bb2ce1fbSroy * notice, this list of conditions and the following disclaimer. 15bb2ce1fbSroy * 2. Redistributions in binary form must reproduce the above copyright 16bb2ce1fbSroy * notice, this list of conditions and the following disclaimer in the 17bb2ce1fbSroy * documentation and/or other materials provided with the distribution. 18bb2ce1fbSroy * 19bb2ce1fbSroy * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20bb2ce1fbSroy * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21bb2ce1fbSroy * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22bb2ce1fbSroy * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23bb2ce1fbSroy * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24bb2ce1fbSroy * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25bb2ce1fbSroy * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26bb2ce1fbSroy * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27bb2ce1fbSroy * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28bb2ce1fbSroy * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29bb2ce1fbSroy * POSSIBILITY OF SUCH DAMAGE. 30bb2ce1fbSroy */ 31bb2ce1fbSroy 32bb2ce1fbSroy #include <sys/cdefs.h> 33bb2ce1fbSroy #ifndef lint 34*6348e3f3Sblymn __RCSID("$NetBSD: mouse.c,v 1.2 2024/12/23 02:58:04 blymn Exp $"); 35bb2ce1fbSroy #endif /* not lint */ 36bb2ce1fbSroy 37bb2ce1fbSroy #include "curses.h" 38bb2ce1fbSroy #include "curses_private.h" 39bb2ce1fbSroy 40bb2ce1fbSroy #define DEFAULT_MAXCLICK 166 /* ncurses default */ 41bb2ce1fbSroy 42bb2ce1fbSroy /* 43bb2ce1fbSroy * Return true if screen relative y and x are enclosed by the window. 44bb2ce1fbSroy */ 45bb2ce1fbSroy bool 46bb2ce1fbSroy wenclose(const WINDOW *win, int y, int x) 47bb2ce1fbSroy { 48bb2ce1fbSroy 49*6348e3f3Sblymn if (__predict_false(win == NULL)) 50*6348e3f3Sblymn return ERR; 51*6348e3f3Sblymn 52bb2ce1fbSroy if (y < win->begy || y > win->begy + win->maxy || 53bb2ce1fbSroy x < win->begx || x > win->begx + win->maxx) 54bb2ce1fbSroy return false; 55bb2ce1fbSroy return true; 56bb2ce1fbSroy } 57bb2ce1fbSroy 58bb2ce1fbSroy bool 59bb2ce1fbSroy mouse_trafo(int *y, int *x, bool to_screen) 60bb2ce1fbSroy { 61bb2ce1fbSroy 62bb2ce1fbSroy return wmouse_trafo(stdscr, y, x, to_screen); 63bb2ce1fbSroy } 64bb2ce1fbSroy 65bb2ce1fbSroy /* 66bb2ce1fbSroy * Transform y and x from screen relative to window relative 67bb2ce1fbSroy */ 68bb2ce1fbSroy bool wmouse_trafo(const WINDOW *win, int *y, int *x, bool to_screen) 69bb2ce1fbSroy { 70bb2ce1fbSroy int wy = *y, wx = *x; 71bb2ce1fbSroy 72*6348e3f3Sblymn if (__predict_false(win == NULL)) 73*6348e3f3Sblymn return ERR; 74*6348e3f3Sblymn 75bb2ce1fbSroy if (to_screen) { 76bb2ce1fbSroy wy += win->begy; 77bb2ce1fbSroy wx += win->begx; 78bb2ce1fbSroy } 79bb2ce1fbSroy 80bb2ce1fbSroy if (!wenclose(win, wy, wx)) 81bb2ce1fbSroy return false; 82bb2ce1fbSroy 83bb2ce1fbSroy if (!to_screen) { 84bb2ce1fbSroy wy -= win->begy; 85bb2ce1fbSroy wx -= win->begx; 86bb2ce1fbSroy } 87bb2ce1fbSroy 88bb2ce1fbSroy *y = wy; 89bb2ce1fbSroy *x = wx; 90bb2ce1fbSroy return true; 91bb2ce1fbSroy } 92bb2ce1fbSroy 93bb2ce1fbSroy /* 94bb2ce1fbSroy * The below functions actually need some kind of mouse support. 95bb2ce1fbSroy * We should look into wsmouse(4) support at least as well as xterm. 96bb2ce1fbSroy */ 97bb2ce1fbSroy 98bb2ce1fbSroy bool 99bb2ce1fbSroy has_mouse(void) 100bb2ce1fbSroy { 101bb2ce1fbSroy 102bb2ce1fbSroy return false; 103bb2ce1fbSroy } 104bb2ce1fbSroy 105bb2ce1fbSroy int 106bb2ce1fbSroy getmouse(__unused MEVENT *event) 107bb2ce1fbSroy { 108bb2ce1fbSroy 109bb2ce1fbSroy return ERR; 110bb2ce1fbSroy } 111bb2ce1fbSroy 112bb2ce1fbSroy int 113bb2ce1fbSroy ungetmouse(__unused MEVENT *event) 114bb2ce1fbSroy { 115bb2ce1fbSroy 116bb2ce1fbSroy return ERR; 117bb2ce1fbSroy } 118bb2ce1fbSroy 119bb2ce1fbSroy mmask_t 120bb2ce1fbSroy mousemask(__unused mmask_t newmask, __unused mmask_t *oldmask) 121bb2ce1fbSroy { 122bb2ce1fbSroy 123bb2ce1fbSroy return 0; 124bb2ce1fbSroy } 125bb2ce1fbSroy 126bb2ce1fbSroy int 127bb2ce1fbSroy mouseinterval(__unused int erval) 128bb2ce1fbSroy { 129bb2ce1fbSroy 130bb2ce1fbSroy return DEFAULT_MAXCLICK; 131bb2ce1fbSroy } 132