From: auroux Date: Thu, 8 Dec 2005 04:51:05 +0000 (+0000) Subject: Initial revision X-Git-Url: https://git.donarmstrong.com/?p=xournal.git;a=commitdiff_plain;h=01dcbcd787083809409a2cbbe9ca475af5cbd7ce Initial revision --- diff --git a/linuxwacom-0.7.0-rotate-patch b/linuxwacom-0.7.0-rotate-patch new file mode 100644 index 0000000..9bd6527 --- /dev/null +++ b/linuxwacom-0.7.0-rotate-patch @@ -0,0 +1,308 @@ +diff -Naur linuxwacom-0.7.0/src/wcmCommon.c linuxwacom-0.7.0-rotate/src/wcmCommon.c +--- linuxwacom-0.7.0/src/wcmCommon.c 2005-09-19 19:43:14.000000000 -0400 ++++ linuxwacom-0.7.0-rotate/src/wcmCommon.c 2005-11-22 16:44:41.000000000 -0500 +@@ -440,6 +440,11 @@ + y = x; + x = common->wcmMaxX - tmp_coord; + } ++ else if (common->wcmRotate == ROTATE_HALF) ++ { ++ x = common->wcmMaxX - x; ++ y = common->wcmMaxY - y; ++ } + + is_absolute = (priv->flags & ABSOLUTE_FLAG); + is_core_pointer = xf86IsCorePointer(local->dev); +diff -Naur linuxwacom-0.7.0/src/xf86Wacom.c linuxwacom-0.7.0-rotate/src/xf86Wacom.c +--- linuxwacom-0.7.0/src/xf86Wacom.c 2005-09-19 19:43:14.000000000 -0400 ++++ linuxwacom-0.7.0-rotate/src/xf86Wacom.c 2005-12-07 22:57:46.000000000 -0500 +@@ -199,7 +199,7 @@ + LocalDevicePtr local = (LocalDevicePtr)pWcm->public.devicePrivate; + WacomDevicePtr priv = (WacomDevicePtr)PRIVATE(pWcm); + WacomCommonPtr common = priv->common; +- int totalWidth = 0, maxHeight = 0, tabletSize = 0; ++ int totalWidth = 0, maxHeight = 0; + double screenRatio, tabletRatio; + char m1[32], m2[32]; + +@@ -335,23 +335,13 @@ + } /* end bounding rect */ + + /* x and y axes */ +- if (priv->twinview == TV_LEFT_RIGHT) +- tabletSize = 2*(priv->bottomX - priv->topX - 2*priv->tvoffsetX); +- else +- tabletSize = priv->bottomX - priv->topX; +- +- InitValuatorAxisStruct(pWcm, 0, 0, tabletSize, /* max val */ +- common->wcmResolX, /* tablet resolution */ +- 0, common->wcmResolX); /* max_res */ +- +- if (priv->twinview == TV_ABOVE_BELOW) +- tabletSize = 2*(priv->bottomY - priv->topY - 2*priv->tvoffsetY); +- else +- tabletSize = priv->bottomY - priv->topY; +- +- InitValuatorAxisStruct(pWcm, 1, 0, tabletSize, /* max val */ +- common->wcmResolY, /* tablet resolution */ +- 0, common->wcmResolY); /* max_res */ ++ InitValuatorAxisStruct(pWcm, 0, priv->topX, priv->bottomX, /* max val */ ++ common->wcmResolX, /* tablet resolution */ ++ 0, common->wcmResolX); /* max_res */ ++ ++ InitValuatorAxisStruct(pWcm, 1, priv->topY, priv->bottomY, /* max val */ ++ common->wcmResolY, /* tablet resolution */ ++ 0, common->wcmResolY); /* max_res */ + + /* pressure */ + InitValuatorAxisStruct(pWcm, 2, 0, +@@ -657,25 +647,40 @@ + static int xf86WcmSetParam(LocalDevicePtr local, int param, int value) + { + WacomDevicePtr priv = (WacomDevicePtr)local->private; ++ WacomDevicePtr tmppriv; + char st[32]; ++ int oldRotation, dev; ++ int tmpTopX, tmpTopY, tmpBottomX, tmpBottomY, oldMaxX, oldMaxY; + + switch (param) + { + case XWACOM_PARAM_TOPX: + xf86ReplaceIntOption(local->options, "TopX", value); + priv->topX = xf86SetIntOption(local->options, "TopX", 0); ++ InitValuatorAxisStruct(local->dev, 0, priv->topX, priv->bottomX, ++ priv->common->wcmResolX, /* tablet resolution */ ++ 0, priv->common->wcmResolX); /* max_res */ + break; + case XWACOM_PARAM_TOPY: + xf86ReplaceIntOption(local->options, "TopY", value); + priv->topY = xf86SetIntOption(local->options, "TopY", 0); ++ InitValuatorAxisStruct(local->dev, 1, priv->topY, priv->bottomY, /* max val */ ++ priv->common->wcmResolY, /* tablet resolution */ ++ 0, priv->common->wcmResolY); /* max_res */ + break; + case XWACOM_PARAM_BOTTOMX: + xf86ReplaceIntOption(local->options, "BottomX", value); + priv->bottomX = xf86SetIntOption(local->options, "BottomX", 0); ++ InitValuatorAxisStruct(local->dev, 0, priv->topX, priv->bottomX, ++ priv->common->wcmResolX, /* tablet resolution */ ++ 0, priv->common->wcmResolX); /* max_res */ + break; + case XWACOM_PARAM_BOTTOMY: + xf86ReplaceIntOption(local->options, "BottomY", value); + priv->bottomY = xf86SetIntOption(local->options, "BottomY", 0); ++ InitValuatorAxisStruct(local->dev, 1, priv->topY, priv->bottomY, /* max val */ ++ priv->common->wcmResolY, /* tablet resolution */ ++ 0, priv->common->wcmResolY); /* max_res */ + break; + case XWACOM_PARAM_BUTTON1: + if ((value < 0) || (value > 19)) return BadValue; +@@ -782,6 +787,12 @@ + "BottomY", priv->common->wcmMaxY); + priv->bottomY = xf86SetIntOption(local->options, + "BottomY", priv->common->wcmMaxY); ++ InitValuatorAxisStruct(local->dev, 0, priv->topX, priv->bottomX, ++ priv->common->wcmResolX, /* tablet resolution */ ++ 0, priv->common->wcmResolX); /* max_res */ ++ InitValuatorAxisStruct(local->dev, 1, priv->topY, priv->bottomY, /* max val */ ++ priv->common->wcmResolY, /* tablet resolution */ ++ 0, priv->common->wcmResolY); /* max_res */ + break; + case XWACOM_PARAM_GIMP: + if ((value != 0) && (value != 1)) return BadValue; +@@ -819,6 +830,103 @@ + xf86ReplaceStrOption(local->options, "TPCButton", "off"); + } + break; ++ case XWACOM_PARAM_ROTATE: ++ if ((value < 0) || (value > 3)) return BadValue; ++ switch(value) { ++ case ROTATE_NONE: ++ xf86ReplaceStrOption(local->options, "Rotate", "NONE"); ++ break; ++ case ROTATE_CW: ++ xf86ReplaceStrOption(local->options, "Rotate", "CW"); ++ break; ++ case ROTATE_CCW: ++ xf86ReplaceStrOption(local->options, "Rotate", "CCW"); ++ break; ++ case ROTATE_HALF: ++ xf86ReplaceStrOption(local->options, "Rotate", "HALF"); ++ break; ++ default: ++ return BadValue; ++ } ++ oldRotation = priv->common->wcmRotate; ++ oldMaxX = priv->common->wcmMaxX; ++ oldMaxY = priv->common->wcmMaxY; ++ priv->common->wcmRotate = value; ++ if (((oldRotation == ROTATE_NONE || oldRotation == ROTATE_HALF) && (value == ROTATE_CW || value == ROTATE_CCW)) || ++ ((oldRotation == ROTATE_CW || oldRotation == ROTATE_CCW) && (value == ROTATE_NONE || value == ROTATE_HALF))) ++ { ++ priv->common->wcmMaxX = oldMaxY; ++ priv->common->wcmMaxY = oldMaxX; ++ } ++ ++ /* rotate all devices at once! else they get misaligned */ ++ for (dev=0; dev < priv->common->wcmNumDevices; dev++) ++ { ++ tmppriv = (WacomDevicePtr)priv->common->wcmDevices[dev]->private; ++ /* recover the unrotated xy-rectangles */ ++ switch (oldRotation) { ++ case ROTATE_CW: ++ tmpTopX = oldMaxY - tmppriv->bottomY; ++ tmpBottomX = oldMaxY - tmppriv->topY; ++ tmpTopY = tmppriv->topX; ++ tmpBottomY = tmppriv->bottomX; ++ break; ++ case ROTATE_CCW: ++ tmpTopX = tmppriv->topY; ++ tmpBottomX = tmppriv->bottomY; ++ tmpTopY = oldMaxX - tmppriv->bottomX; ++ tmpBottomY = oldMaxX - tmppriv->topX; ++ break; ++ case ROTATE_HALF: ++ tmpTopX = oldMaxX - tmppriv->bottomX; ++ tmpBottomX = oldMaxX - tmppriv->topX; ++ tmpTopY = oldMaxY - tmppriv->bottomY; ++ tmpBottomY = oldMaxY - tmppriv->topY; ++ break; ++ default: /* ROTATE_NONE */ ++ tmpTopX = tmppriv->topX; ++ tmpBottomX = tmppriv->bottomX; ++ tmpTopY = tmppriv->topY; ++ tmpBottomY = tmppriv->bottomY; ++ break; ++ } ++ /* and rotate them back */ ++ switch (value) { ++ case ROTATE_CW: ++ tmppriv->topX = tmpTopY; ++ tmppriv->bottomX = tmpBottomY; ++ tmppriv->topY = priv->common->wcmMaxY - tmpBottomX; ++ tmppriv->bottomY = priv->common->wcmMaxY - tmpTopX; ++ break; ++ case ROTATE_CCW: ++ tmppriv->topX = priv->common->wcmMaxX - tmpBottomY; ++ tmppriv->bottomX = priv->common->wcmMaxX - tmpTopY; ++ tmppriv->topY = tmpTopX; ++ tmppriv->bottomY = tmpBottomX; ++ break; ++ case ROTATE_HALF: ++ tmppriv->topX = priv->common->wcmMaxX - tmpBottomX; ++ tmppriv->bottomX = priv->common->wcmMaxX - tmpTopX; ++ tmppriv->topY= priv->common->wcmMaxY - tmpBottomY; ++ tmppriv->bottomY = priv->common->wcmMaxY - tmpTopY; ++ break; ++ default: /* ROTATE_NONE */ ++ tmppriv->topX = tmpTopX; ++ tmppriv->bottomX = tmpBottomX; ++ tmppriv->topY = tmpTopY; ++ tmppriv->bottomY = tmpBottomY; ++ break; ++ } ++ ++ InitValuatorAxisStruct(priv->common->wcmDevices[dev]->dev, ++ 0, tmppriv->topX, tmppriv->bottomX, priv->common->wcmResolX, /* tablet resolution */ ++ 0, priv->common->wcmResolX); /* max_res */ ++ ++ InitValuatorAxisStruct(priv->common->wcmDevices[dev]->dev, ++ 1, tmppriv->topY, tmppriv->bottomY, priv->common->wcmResolY, /* tablet resolution */ ++ 0, priv->common->wcmResolY); /* max_res */ ++ } ++ break; + default: + DBG(10, ErrorF("xf86WcmSetParam invalid param %d\n",param)); + return BadMatch; +diff -Naur linuxwacom-0.7.0/src/xf86Wacom.h linuxwacom-0.7.0-rotate/src/xf86Wacom.h +--- linuxwacom-0.7.0/src/xf86Wacom.h 2005-09-19 19:43:14.000000000 -0400 ++++ linuxwacom-0.7.0-rotate/src/xf86Wacom.h 2005-11-22 17:06:57.000000000 -0500 +@@ -150,6 +150,12 @@ + #define ERASER_PROX 4 + #define OTHER_PROX 1 + ++ ++#define ROTATE_NONE XWACOM_VALUE_ROTATE_NONE ++#define ROTATE_CW XWACOM_VALUE_ROTATE_CW ++#define ROTATE_CCW XWACOM_VALUE_ROTATE_CCW ++#define ROTATE_HALF XWACOM_VALUE_ROTATE_HALF ++ + /****************************************************************************** + * Forward Declarations + *****************************************************************************/ +@@ -412,10 +418,6 @@ + + #define DEVICE_ISDV4 0x000C + +-#define ROTATE_NONE 0 +-#define ROTATE_CW 1 +-#define ROTATE_CCW 2 +- + #define MAX_CHANNELS 2 + #define MAX_USB_EVENTS 32 + +diff -Naur linuxwacom-0.7.0/src/xsetwacom.c linuxwacom-0.7.0-rotate/src/xsetwacom.c +--- linuxwacom-0.7.0/src/xsetwacom.c 2005-09-19 19:43:14.000000000 -0400 ++++ linuxwacom-0.7.0-rotate/src/xsetwacom.c 2005-11-22 17:17:24.000000000 -0500 +@@ -190,6 +190,13 @@ + "on for Tablet PC. ", + XWACOM_PARAM_TPCBUTTON, VALUE_OPTIONAL, + RANGE, 0, 1, BOOLEAN_VALUE, 1 }, ++ ++ { "Rotate", ++ "Sets the rotation of the tablet. " ++ "Values = NONE, CW, CCW, HALF (default is NONE).", ++ XWACOM_PARAM_ROTATE, VALUE_OPTIONAL, ++ RANGE, XWACOM_VALUE_ROTATE_NONE, XWACOM_VALUE_ROTATE_HALF, SINGLE_VALUE, ++ XWACOM_VALUE_ROTATE_NONE }, + + { "FileModel", + "Writes tablet models to /etc/wacom.dat", +@@ -198,7 +205,7 @@ + { "FileOption", + "Writes configuration options to /etc/X11/wcm.dev_name", + XWACOM_PARAM_FILEOPTION, VALUE_OPTIONAL }, +- ++ + { NULL } + }; + +@@ -403,6 +410,23 @@ + !strcasecmp(pszValues[i],"false") || + !strcasecmp(pszValues[i],"relative"))) + nValues[i] = 0; ++ else if (p->nParamID == XWACOM_PARAM_ROTATE) ++ { ++ if (!strcasecmp(pszValues[i],"none")) ++ nValues[i] = XWACOM_VALUE_ROTATE_NONE; ++ else if (!strcasecmp(pszValues[i],"cw")) ++ nValues[i] = XWACOM_VALUE_ROTATE_CW; ++ else if (!strcasecmp(pszValues[i],"ccw")) ++ nValues[i] = XWACOM_VALUE_ROTATE_CCW; ++ else if (!strcasecmp(pszValues[i],"half")) ++ nValues[i] = XWACOM_VALUE_ROTATE_HALF; ++ else ++ { ++ fprintf(stderr,"Set: Value '%s' is " ++ "invalid.\n",pszValues[i]); ++ return 1; ++ } ++ } + else + { + fprintf(stderr,"Set: Value '%s' is " +diff -Naur linuxwacom-0.7.0/src/Xwacom.h linuxwacom-0.7.0-rotate/src/Xwacom.h +--- linuxwacom-0.7.0/src/Xwacom.h 2005-09-19 19:43:14.000000000 -0400 ++++ linuxwacom-0.7.0-rotate/src/Xwacom.h 2005-11-22 17:06:00.000000000 -0500 +@@ -44,5 +44,11 @@ + #define XWACOM_PARAM_GIMP 102 + #define XWACOM_PARAM_MMT 103 + #define XWACOM_PARAM_TPCBUTTON 104 ++#define XWACOM_PARAM_ROTATE 105 ++ ++#define XWACOM_VALUE_ROTATE_NONE 0 ++#define XWACOM_VALUE_ROTATE_CW 1 ++#define XWACOM_VALUE_ROTATE_CCW 2 ++#define XWACOM_VALUE_ROTATE_HALF 3 + + #endif /* __XF86_XWACOM_H */