Lines 203-209
Link Here
|
203 |
LocalDevicePtr local = (LocalDevicePtr)pWcm->public.devicePrivate; |
203 |
LocalDevicePtr local = (LocalDevicePtr)pWcm->public.devicePrivate; |
204 |
WacomDevicePtr priv = (WacomDevicePtr)PRIVATE(pWcm); |
204 |
WacomDevicePtr priv = (WacomDevicePtr)PRIVATE(pWcm); |
205 |
WacomCommonPtr common = priv->common; |
205 |
WacomCommonPtr common = priv->common; |
206 |
int totalWidth = 0, maxHeight = 0, tabletSize = 0; |
206 |
int totalWidth = 0, maxHeight = 0; |
207 |
double screenRatio, tabletRatio; |
207 |
double screenRatio, tabletRatio; |
208 |
char m1[32], m2[32]; |
208 |
char m1[32], m2[32]; |
209 |
|
209 |
|
Lines 339-361
Link Here
|
339 |
} /* end bounding rect */ |
339 |
} /* end bounding rect */ |
340 |
|
340 |
|
341 |
/* x and y axes */ |
341 |
/* x and y axes */ |
342 |
if (priv->twinview == TV_LEFT_RIGHT) |
342 |
InitValuatorAxisStruct(pWcm, 0, priv->topX, priv->bottomX, /* max val */ |
343 |
tabletSize = 2*(priv->bottomX - priv->topX - 2*priv->tvoffsetX); |
343 |
common->wcmResolX, /* tablet resolution */ |
344 |
else |
344 |
0, common->wcmResolX); /* max_res */ |
345 |
tabletSize = priv->bottomX - priv->topX; |
345 |
|
346 |
|
346 |
InitValuatorAxisStruct(pWcm, 1, priv->topY, priv->bottomY, /* max val */ |
347 |
InitValuatorAxisStruct(pWcm, 0, 0, tabletSize, /* max val */ |
347 |
common->wcmResolY, /* tablet resolution */ |
348 |
common->wcmResolX, /* tablet resolution */ |
348 |
0, common->wcmResolY); /* max_res */ |
349 |
0, common->wcmResolX); /* max_res */ |
|
|
350 |
|
351 |
if (priv->twinview == TV_ABOVE_BELOW) |
352 |
tabletSize = 2*(priv->bottomY - priv->topY - 2*priv->tvoffsetY); |
353 |
else |
354 |
tabletSize = priv->bottomY - priv->topY; |
355 |
|
356 |
InitValuatorAxisStruct(pWcm, 1, 0, tabletSize, /* max val */ |
357 |
common->wcmResolY, /* tablet resolution */ |
358 |
0, common->wcmResolY); /* max_res */ |
359 |
|
349 |
|
360 |
/* pressure */ |
350 |
/* pressure */ |
361 |
InitValuatorAxisStruct(pWcm, 2, 0, |
351 |
InitValuatorAxisStruct(pWcm, 2, 0, |
Lines 663-687
Link Here
|
663 |
static int xf86WcmSetParam(LocalDevicePtr local, int param, int value) |
653 |
static int xf86WcmSetParam(LocalDevicePtr local, int param, int value) |
664 |
{ |
654 |
{ |
665 |
WacomDevicePtr priv = (WacomDevicePtr)local->private; |
655 |
WacomDevicePtr priv = (WacomDevicePtr)local->private; |
|
|
656 |
WacomDevicePtr tmppriv; |
666 |
char st[32]; |
657 |
char st[32]; |
|
|
658 |
int oldRotation, dev; |
659 |
int tmpTopX, tmpTopY, tmpBottomX, tmpBottomY, oldMaxX, oldMaxY; |
667 |
|
660 |
|
668 |
switch (param) |
661 |
switch (param) |
669 |
{ |
662 |
{ |
670 |
case XWACOM_PARAM_TOPX: |
663 |
case XWACOM_PARAM_TOPX: |
671 |
xf86ReplaceIntOption(local->options, "TopX", value); |
664 |
xf86ReplaceIntOption(local->options, "TopX", value); |
672 |
priv->topX = xf86SetIntOption(local->options, "TopX", 0); |
665 |
priv->topX = xf86SetIntOption(local->options, "TopX", 0); |
|
|
666 |
InitValuatorAxisStruct(local->dev, 0, priv->topX, priv->bottomX, |
667 |
priv->common->wcmResolX, /* tablet resolution */ |
668 |
0, priv->common->wcmResolX); /* max_res */ |
673 |
break; |
669 |
break; |
674 |
case XWACOM_PARAM_TOPY: |
670 |
case XWACOM_PARAM_TOPY: |
675 |
xf86ReplaceIntOption(local->options, "TopY", value); |
671 |
xf86ReplaceIntOption(local->options, "TopY", value); |
676 |
priv->topY = xf86SetIntOption(local->options, "TopY", 0); |
672 |
priv->topY = xf86SetIntOption(local->options, "TopY", 0); |
|
|
673 |
InitValuatorAxisStruct(local->dev, 1, priv->topY, priv->bottomY, /* max val */ |
674 |
priv->common->wcmResolY, /* tablet resolution */ |
675 |
0, priv->common->wcmResolY); /* max_res */ |
677 |
break; |
676 |
break; |
678 |
case XWACOM_PARAM_BOTTOMX: |
677 |
case XWACOM_PARAM_BOTTOMX: |
679 |
xf86ReplaceIntOption(local->options, "BottomX", value); |
678 |
xf86ReplaceIntOption(local->options, "BottomX", value); |
680 |
priv->bottomX = xf86SetIntOption(local->options, "BottomX", 0); |
679 |
priv->bottomX = xf86SetIntOption(local->options, "BottomX", 0); |
|
|
680 |
InitValuatorAxisStruct(local->dev, 0, priv->topX, priv->bottomX, |
681 |
priv->common->wcmResolX, /* tablet resolution */ |
682 |
0, priv->common->wcmResolX); /* max_res */ |
681 |
break; |
683 |
break; |
682 |
case XWACOM_PARAM_BOTTOMY: |
684 |
case XWACOM_PARAM_BOTTOMY: |
683 |
xf86ReplaceIntOption(local->options, "BottomY", value); |
685 |
xf86ReplaceIntOption(local->options, "BottomY", value); |
684 |
priv->bottomY = xf86SetIntOption(local->options, "BottomY", 0); |
686 |
priv->bottomY = xf86SetIntOption(local->options, "BottomY", 0); |
|
|
687 |
InitValuatorAxisStruct(local->dev, 1, priv->topY, priv->bottomY, /* max val */ |
688 |
priv->common->wcmResolY, /* tablet resolution */ |
689 |
0, priv->common->wcmResolY); /* max_res */ |
685 |
break; |
690 |
break; |
686 |
case XWACOM_PARAM_BUTTON1: |
691 |
case XWACOM_PARAM_BUTTON1: |
687 |
if ((value < 0) || (value > 19)) return BadValue; |
692 |
if ((value < 0) || (value > 19)) return BadValue; |
Lines 788-793
Link Here
|
788 |
"BottomY", priv->common->wcmMaxY); |
793 |
"BottomY", priv->common->wcmMaxY); |
789 |
priv->bottomY = xf86SetIntOption(local->options, |
794 |
priv->bottomY = xf86SetIntOption(local->options, |
790 |
"BottomY", priv->common->wcmMaxY); |
795 |
"BottomY", priv->common->wcmMaxY); |
|
|
796 |
InitValuatorAxisStruct(local->dev, 0, priv->topX, priv->bottomX, |
797 |
priv->common->wcmResolX, /* tablet resolution */ |
798 |
0, priv->common->wcmResolX); /* max_res */ |
799 |
InitValuatorAxisStruct(local->dev, 1, priv->topY, priv->bottomY, /* max val */ |
800 |
priv->common->wcmResolY, /* tablet resolution */ |
801 |
0, priv->common->wcmResolY); /* max_res */ |
791 |
break; |
802 |
break; |
792 |
case XWACOM_PARAM_GIMP: |
803 |
case XWACOM_PARAM_GIMP: |
793 |
if ((value != 0) && (value != 1)) return BadValue; |
804 |
if ((value != 0) && (value != 1)) return BadValue; |
Lines 801-806
Link Here
|
801 |
xf86ReplaceStrOption(local->options, "Gimp", "off"); |
812 |
xf86ReplaceStrOption(local->options, "Gimp", "off"); |
802 |
} |
813 |
} |
803 |
break; |
814 |
break; |
|
|
815 |
case XWACOM_PARAM_ROTATE: |
816 |
if ((value < 0) || (value > 3)) return BadValue; |
817 |
switch(value) { |
818 |
case ROTATE_NONE: |
819 |
xf86ReplaceStrOption(local->options, "Rotate", "NONE"); |
820 |
break; |
821 |
case ROTATE_CW: |
822 |
xf86ReplaceStrOption(local->options, "Rotate", "CW"); |
823 |
break; |
824 |
case ROTATE_CCW: |
825 |
xf86ReplaceStrOption(local->options, "Rotate", "CCW"); |
826 |
break; |
827 |
case ROTATE_HALF: |
828 |
xf86ReplaceStrOption(local->options, "Rotate", "HALF"); |
829 |
break; |
830 |
default: |
831 |
return BadValue; |
832 |
} |
833 |
oldRotation = priv->common->wcmRotate; |
834 |
oldMaxX = priv->common->wcmMaxX; |
835 |
oldMaxY = priv->common->wcmMaxY; |
836 |
priv->common->wcmRotate = value; |
837 |
if (((oldRotation == ROTATE_NONE || oldRotation == ROTATE_HALF) && (value == ROTATE_CW || value == ROTATE_CCW)) || |
838 |
((oldRotation == ROTATE_CW || oldRotation == ROTATE_CCW) && (value == ROTATE_NONE || value == ROTATE_HALF))) |
839 |
{ |
840 |
priv->common->wcmMaxX = oldMaxY; |
841 |
priv->common->wcmMaxY = oldMaxX; |
842 |
} |
843 |
|
844 |
/* rotate all devices at once! else they get misaligned */ |
845 |
for (dev=0; dev < priv->common->wcmNumDevices; dev++) |
846 |
{ |
847 |
tmppriv = (WacomDevicePtr)priv->common->wcmDevices[dev]->private; |
848 |
/* recover the unrotated xy-rectangles */ |
849 |
switch (oldRotation) { |
850 |
case ROTATE_CW: |
851 |
tmpTopX = oldMaxY - tmppriv->bottomY; |
852 |
tmpBottomX = oldMaxY - tmppriv->topY; |
853 |
tmpTopY = tmppriv->topX; |
854 |
tmpBottomY = tmppriv->bottomX; |
855 |
break; |
856 |
case ROTATE_CCW: |
857 |
tmpTopX = tmppriv->topY; |
858 |
tmpBottomX = tmppriv->bottomY; |
859 |
tmpTopY = oldMaxX - tmppriv->bottomX; |
860 |
tmpBottomY = oldMaxX - tmppriv->topX; |
861 |
break; |
862 |
case ROTATE_HALF: |
863 |
tmpTopX = oldMaxX - tmppriv->bottomX; |
864 |
tmpBottomX = oldMaxX - tmppriv->topX; |
865 |
tmpTopY = oldMaxY - tmppriv->bottomY; |
866 |
tmpBottomY = oldMaxY - tmppriv->topY; |
867 |
break; |
868 |
default: /* ROTATE_NONE */ |
869 |
tmpTopX = tmppriv->topX; |
870 |
tmpBottomX = tmppriv->bottomX; |
871 |
tmpTopY = tmppriv->topY; |
872 |
tmpBottomY = tmppriv->bottomY; |
873 |
break; |
874 |
} |
875 |
/* and rotate them back */ |
876 |
switch (value) { |
877 |
case ROTATE_CW: |
878 |
tmppriv->topX = tmpTopY; |
879 |
tmppriv->bottomX = tmpBottomY; |
880 |
tmppriv->topY = priv->common->wcmMaxY - tmpBottomX; |
881 |
tmppriv->bottomY = priv->common->wcmMaxY - tmpTopX; |
882 |
break; |
883 |
case ROTATE_CCW: |
884 |
tmppriv->topX = priv->common->wcmMaxX - tmpBottomY; |
885 |
tmppriv->bottomX = priv->common->wcmMaxX - tmpTopY; |
886 |
tmppriv->topY = tmpTopX; |
887 |
tmppriv->bottomY = tmpBottomX; |
888 |
break; |
889 |
case ROTATE_HALF: |
890 |
tmppriv->topX = priv->common->wcmMaxX - tmpBottomX; |
891 |
tmppriv->bottomX = priv->common->wcmMaxX - tmpTopX; |
892 |
tmppriv->topY= priv->common->wcmMaxY - tmpBottomY; |
893 |
tmppriv->bottomY = priv->common->wcmMaxY - tmpTopY; |
894 |
break; |
895 |
default: /* ROTATE_NONE */ |
896 |
tmppriv->topX = tmpTopX; |
897 |
tmppriv->bottomX = tmpBottomX; |
898 |
tmppriv->topY = tmpTopY; |
899 |
tmppriv->bottomY = tmpBottomY; |
900 |
break; |
901 |
} |
902 |
|
903 |
InitValuatorAxisStruct(priv->common->wcmDevices[dev]->dev, |
904 |
0, tmppriv->topX, tmppriv->bottomX, priv->common->wcmResolX, /* tablet resolution */ |
905 |
0, priv->common->wcmResolX); /* max_res */ |
906 |
|
907 |
InitValuatorAxisStruct(priv->common->wcmDevices[dev]->dev, |
908 |
1, tmppriv->topY, tmppriv->bottomY, priv->common->wcmResolY, /* tablet resolution */ |
909 |
0, priv->common->wcmResolY); /* max_res */ |
910 |
} |
911 |
break; |
804 |
case XWACOM_PARAM_MMT: |
912 |
case XWACOM_PARAM_MMT: |
805 |
if ((value != 0) && (value != 1)) return BadValue; |
913 |
if ((value != 0) && (value != 1)) return BadValue; |
806 |
priv->common->wcmMMonitor = value; |
914 |
priv->common->wcmMMonitor = value; |