xref: /netbsd-src/lib/libcurses/mouse.c (revision 6348e3f32a4431b45d07e1da16fd7b12725a45e7)
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