aboutsummaryrefslogtreecommitdiffstats
path: root/src/mouse_x11.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mouse_x11.c')
-rw-r--r--src/mouse_x11.c60
1 files changed, 49 insertions, 11 deletions
diff --git a/src/mouse_x11.c b/src/mouse_x11.c
index 719940e..78926f9 100644
--- a/src/mouse_x11.c
+++ b/src/mouse_x11.c
@@ -4,6 +4,7 @@
#include "graphics_c3.h"
#include "graphics_c2.h"
#include "graphics_x11.h"
+#include "mouse.h"
extern struct hvr_global global;
extern struct gra_global gra_global;
@@ -13,8 +14,27 @@ int mouse_init() {
return x11_global.fd;
}
+#define X11_MOUSE_PRIMARY 1
+#define X11_MOUSE_SECONDARY 3
+#define X11_MOUSE_TERTIARY 2
+#define X11_MOUSE_SCROLLUP 4
+#define X11_MOUSE_SCROLLDOWN 5
+
+char x112map(char x) {
+ switch(x) {
+ case X11_MOUSE_PRIMARY: return MOUSE_PRIMARY;
+ case X11_MOUSE_TERTIARY: return MOUSE_TERTIARY;//middle-click
+ case X11_MOUSE_SECONDARY: return MOUSE_SECONDARY;
+ case X11_MOUSE_SCROLLUP: return MOUSE_SCROLLUP;
+ case X11_MOUSE_SCROLLDOWN: return MOUSE_SCROLLDOWN;
+ default: return -1;
+ }
+ return -1;
+}
+
int mouse_event_handler() {//this returns HVM_ key + for buttondown and - for buttonup... set the mousex and mousey in here?
XEvent e;
+ c3_group_rel_t *gr;
Window root,child;//just dimmies
unsigned int mask;//just dummies
char motion_notify=0;
@@ -26,14 +46,17 @@ int mouse_event_handler() {//this returns HVM_ key + for buttondown and - for bu
while(XCheckMaskEvent(x11_global.dpy,HV_MOUSE_X11_EVENT_MASK,&e)) {//we want to collapse mouse stuff to one for each loop.
switch(e.type) {
case ButtonPress: //e.xbutton.button == 1 for first button. we don't need to start at 1. let's start at 0 with the -1 //scroll wheel up is 3, down is 4
- butt=e.xbutton.button-1;
- if(butt == 3) {//scroll wheel up
+ if((butt=x112map(e.xbutton.button)) == -1) {
+ continue;//we don't know how to handle this button. :/
+ }
+ fprintf(stderr,"# x11 button: %d is %d in hackvr\n",e.xbutton.button,butt);
+ if(butt == MOUSE_SCROLLUP) {//scroll wheel up
selfcommand("epoch move forward\n");//need to implement this syntax in hackvr
}
- if(butt == 4) {//scroll wheel down
+ if(butt == MOUSE_SCROLLDOWN) {//scroll wheel down
selfcommand("epoch move backward\n");
}
- if(butt == 1) {//middle-click
+ if(butt == MOUSE_TERTIARY) {//middle-click
gra_global.input_mode ^= 1;
printf("# gra_global.input_mode == %d\n",gra_global.input_mode);
}
@@ -43,9 +66,13 @@ int mouse_event_handler() {//this returns HVM_ key + for buttondown and - for bu
redrawplzkthx=1;
break;
case ButtonRelease:
- printf("# button release %d\n",e.xbutton.button-1);
- gra_global.mousemap[e.xbutton.button-1]=-1;//we can trigger on -1 or on 1 then set back to 0 to prevent double-trigger
- gra_global.oldcamera=global.camera.r;
+ if((butt=x112map(e.xbutton.button)) == -1) {
+ continue;//we don't know how to handle this button. :/
+ }
+ printf("# button release %d\n",butt);
+ gra_global.mousemap[butt]=-1;//we can trigger on -1 or on 1 then set back to 0 to prevent double-trigger
+ gr=get_group_relative(global.user);
+ gra_global.oldcamera=gr->r;
redrawplzkthx=1;
break;
case MotionNotify:
@@ -68,11 +95,22 @@ int mouse_event_handler() {//this returns HVM_ key + for buttondown and - for bu
//snprintf(cmd,sizeof(cmd),"%s rotate +%d +%d +%d\n",global.user,3,11,1);
//selfcommand(cmd);
//global.camera.r.x.d=(gra_global.height - gra_global.mouse.y);//up and down camera controls backwards
- //fprintf(stderr,"# mouse.x: %f mouse.y: %f\n# width: %u height: %u\n",gra_global.mouse.x,gra_global.mouse.y,gra_global.width,gra_global.height);
- if(gra_global.mousemap[2] == 1) {//if "right" click is held down
- global.camera.r.x.d=gra_global.oldcamera.x.d + (gra_global.mouse.y - gra_global.dragstart[2].y);
- global.camera.r.y.d=gra_global.oldcamera.y.d + (gra_global.mouse.x - gra_global.dragstart[2].x);
+ //fprintf(stderr,"# mouse.x: %f mouse.y: %f\n# width: %u height: %u\n",gra_glo bal.mouse.x,gra_global.mouse.y,gra_global.width,gra_global.height);
+ //this /was/ using a 2 for the mousemap index... so 2 is "right" in hackvr.
+ if(gra_global.mousemap[MOUSE_SECONDARY] == 1) {//if "right" click is held down
+ gr=get_group_relative(global.user);
+ gr->r.x.d=gra_global.oldcamera.x.d + (gra_global.mouse.y - gra_global.dragstart[MOUSE_SECONDARY].y);
+ gr->r.y.d=gra_global.oldcamera.y.d + (gra_global.mouse.x - gra_global.dragstart[MOUSE_SECONDARY].x);
+ //global.camera.r.x.d=gra_global.oldcamera.x.d + (gra_global.mouse.y - gra_global.dragstart[2].y);
+ //global.camera.r.y.d=gra_global.oldcamera.y.d + (gra_global.mouse.x - gra_global.dragstart[2].x);
}
+ /* dunno if I really want to do this.
+ if(gra_global.mousemap[MOUSE_TERTIARY] == 1) {//if we're holding down middle-click
+ //need to move forward or sideways based on
+ gr->r.x = gra_global.oldcmaera.gra_global.dragstart[MOUSE_TERTIARY].x//
+ gr->r.y = //
+ gr->r.z = //
+ }*/
//do we need to redraw on mouse movement?
//probably.
redrawplzkthx=1;