diff -urN -X exclude xserver-old/xserver/hw/kdrive/src/kdrive.c xserver/xserver/hw/kdrive/src/kdrive.c --- xserver-old/xserver/hw/kdrive/src/kdrive.c 2003-11-18 05:53:16.000000000 +0100 +++ xserver/xserver/hw/kdrive/src/kdrive.c 2003-12-04 17:28:26.000000000 +0100 @@ -650,6 +650,40 @@ else kdSubpixelOrder = SubPixelUnknown; } +#ifdef STOUCH +void +KdParseCal (char *arg) +{ + char delim; + char save[1024]; + int w,h,x,y; + + printf("parsing calib\n"); + arg = KdParseFindNext (arg, "x", save, &delim); + if (!save[0]) + return; + w = atoi(save); + + arg = KdParseFindNext (arg, "+", save, &delim); + if (!save[0]) + return; + h = atoi(save); + + arg = KdParseFindNext (arg, "+", save, &delim); + if (!save[0]) + return; + x = atoi(save); + + arg = KdParseFindNext (arg, "+", save, &delim); + if (!save[0]) + return; + y = atoi(save); + + printf (" w: %d,h: %d,x: %d, y:%d\n",w,h,x,y); + + KdSetTcCalibration (w,h,x,y); +} +#endif void KdUseMsg (void) @@ -657,6 +691,9 @@ ErrorF("\nTinyX Device Dependent Usage:\n"); ErrorF("-card pcmcia Use PCMCIA card as additional screen\n"); ErrorF("-screen WIDTH[/WIDTHMM]xHEIGHT[/HEIGHTMM][@ROTATION][X][Y][xDEPTH/BPP{,DEPTH/BPP}[xFREQ]] Specify screen characteristics\n"); +#ifdef STOUCH + ErrorF("-cal XxY+x+y Touchscreen calibration points\n"); +#endif ErrorF("-zaphod Disable cursor screen switching\n"); ErrorF("-2button Emulate 3 button mouse\n"); ErrorF("-3button Disable 3 button mouse emulation\n"); @@ -785,7 +822,16 @@ else UseMsg (); return 2; + } +#ifdef STOUCH + if (!strcmp(argv[i], "-cal")) { + if(i+1 < argc) { + KdParseCal (argv[i+1]); + } else + UseMsg(); + return 2; } +#endif if (!strncmp (argv[i], "vt", 2) && sscanf (argv[i], "vt%2d", &kdVirtualTerminal) == 1) { diff -urN -X exclude xserver-old/xserver/hw/kdrive/src/kdrive.h xserver/xserver/hw/kdrive/src/kdrive.h --- xserver-old/xserver/hw/kdrive/src/kdrive.h 2003-12-01 05:33:36.000000000 +0100 +++ xserver/xserver/hw/kdrive/src/kdrive.h 2003-12-08 08:00:09.000000000 +0100 @@ -538,13 +538,36 @@ void KdAllocateCursorPixels (ScreenPtr pScreen, int fb, - CursorPtr pCursor, + CursorPtr pCursor, Pixel *source, Pixel *mask); /* kdrive.c */ extern miPointerScreenFuncRec kdPointerScreenFuncs; + +#ifdef STOUCH +/* + * Even worse hack! + * We need to store a pointer to the screen associated with + * the pen so we can retrieve width/height information to + * scale the mouse location appropriately. In the future, + * we should also use the TOUCHSCREEN hack above to drive + * relative vs. absolute positions + */ +extern ScreenPtr KdTsPhyScreenPtr; + +void +KdInitSTouch(KdMouseFuncs *pTsFuncs); + +void +KdParseCal(char *arg); + +extern KdMouseFuncs STouchFuncs; + +#endif + + void KdSetRootClip (ScreenPtr pScreen, BOOL enable); @@ -680,6 +703,15 @@ KdInitTouchScreen(KdMouseFuncs *pTsFuncs); #endif +#ifdef STOUCH +void +KdInitSTouch(KdMouseFuncs *pSTouchFuncs); + +void +KdSetTcCalibration(int width, int height, int x, int y); +#endif + + void KdEnqueueKeyboardEvent(unsigned char scan_code, unsigned char is_up); diff -urN -X exclude xserver-old/xserver/hw/kdrive/src/kinput.c xserver/xserver/hw/kdrive/src/kinput.c --- xserver-old/xserver/hw/kdrive/src/kinput.c 2003-11-05 07:46:13.000000000 +0100 +++ xserver/xserver/hw/kdrive/src/kinput.c 2003-12-03 16:57:50.000000000 +0100 @@ -56,6 +56,9 @@ #ifdef TOUCHSCREEN static KdMouseFuncs *kdTsFuncs; #endif +#ifdef STOUCH +static KdMouseFuncs *kdSTouchFuncs; +#endif int kdMouseButtonCount; int kdMinScanCode; @@ -322,6 +325,10 @@ if (kdTsFuncs) (*kdTsFuncs->Init) (); #endif +#ifdef STOUCH + if (kdSTouchFuncs) { + (*kdSTouchFuncs->Init) ();} +#endif if (kdMouseFuncs) (*kdMouseFuncs->Init) (); break; @@ -337,6 +344,10 @@ if (kdTsFuncs) (*kdTsFuncs->Fini) (); #endif +#ifdef STouch + if (kdSTouchFuncs) + (*kdSTouchFuncs->Fini) (); +#endif } break; } @@ -558,7 +569,10 @@ { DeviceIntPtr pKeyboard, pPointer; KdMouseInfo *mi; - + +#ifdef STOUCH + KdInitSTouch (&STouchFuncs); +#endif if (!kdMouseInfo) KdParseMouse (0); kdMouseButtonCount = 0; @@ -608,6 +622,14 @@ kdTsFuncs = pTsFuncs; } #endif +#ifdef STOUCH + +void +KdInitSTouch (KdMouseFuncs *pSTouchFuncs) +{ + kdSTouchFuncs = pSTouchFuncs; +} +#endif /* * Middle button emulation state machine @@ -1622,6 +1644,13 @@ int KdCurScreen; /* current event screen */ + +#ifdef STOUCH +/* Hack! */ +ScreenPtr KdTsPhyScreenPtr = NULL; + +#endif + static void KdWarpCursor (ScreenPtr pScreen, int x, int y) {