Lines 44-49
WacomDeviceClass* wcmDeviceClasses[] =
Link Here
|
44 |
|
44 |
|
45 |
extern int xf86WcmDevSwitchModeCall(LocalDevicePtr local, int mode); |
45 |
extern int xf86WcmDevSwitchModeCall(LocalDevicePtr local, int mode); |
46 |
extern void xf86WcmChangeScreen(LocalDevicePtr local, int value); |
46 |
extern void xf86WcmChangeScreen(LocalDevicePtr local, int value); |
|
|
47 |
extern void xf86WcmInitialCoordinates(LocalDevicePtr local, int axes); |
47 |
|
48 |
|
48 |
/***************************************************************************** |
49 |
/***************************************************************************** |
49 |
* Static functions |
50 |
* Static functions |
Lines 1868-1870
void xf86WcmInitialScreens(LocalDevicePtr local)
Link Here
|
1868 |
i, priv->screenBottomX[i], i, priv->screenBottomY[i])); |
1869 |
i, priv->screenBottomX[i], i, priv->screenBottomY[i])); |
1869 |
} |
1870 |
} |
1870 |
} |
1871 |
} |
|
|
1872 |
|
1873 |
/***************************************************************************** |
1874 |
* rotateOneTool |
1875 |
****************************************************************************/ |
1876 |
|
1877 |
static void rotateOneTool(WacomDevicePtr priv) |
1878 |
{ |
1879 |
WacomCommonPtr common = priv->common; |
1880 |
WacomToolAreaPtr area = priv->toolarea; |
1881 |
int tmpTopX, tmpTopY, tmpBottomX, tmpBottomY, oldMaxX, oldMaxY; |
1882 |
|
1883 |
DBG(10, priv->debugLevel, ErrorF("rotateOneTool for \"%s\" \n", priv->local->name)); |
1884 |
|
1885 |
oldMaxX = priv->wcmMaxX; |
1886 |
oldMaxY = priv->wcmMaxY; |
1887 |
|
1888 |
tmpTopX = priv->topX; |
1889 |
tmpBottomX = priv->bottomX; |
1890 |
tmpTopY = priv->topY; |
1891 |
tmpBottomY = priv->bottomY; |
1892 |
|
1893 |
if (common->wcmRotate == ROTATE_CW || common->wcmRotate == ROTATE_CCW) |
1894 |
{ |
1895 |
priv->wcmMaxX = oldMaxY; |
1896 |
priv->wcmMaxY = oldMaxX; |
1897 |
} |
1898 |
|
1899 |
switch (common->wcmRotate) { |
1900 |
case ROTATE_CW: |
1901 |
area->topX = priv->topX = tmpTopY; |
1902 |
area->bottomX = priv->bottomX = tmpBottomY; |
1903 |
area->topY = priv->topY = oldMaxX - tmpBottomX; |
1904 |
area->bottomY = priv->bottomY =oldMaxX - tmpTopX; |
1905 |
break; |
1906 |
case ROTATE_CCW: |
1907 |
area->topX = priv->topX = oldMaxY - tmpBottomY; |
1908 |
area->bottomX = priv->bottomX = oldMaxY - tmpTopY; |
1909 |
area->topY = priv->topY = tmpTopX; |
1910 |
area->bottomY = priv->bottomY = tmpBottomX; |
1911 |
break; |
1912 |
case ROTATE_HALF: |
1913 |
area->topX = priv->topX = oldMaxX - tmpBottomX; |
1914 |
area->bottomX = priv->bottomX = oldMaxX - tmpTopX; |
1915 |
area->topY = priv->topY= oldMaxY - tmpBottomY; |
1916 |
area->bottomY = priv->bottomY = oldMaxY - tmpTopY; |
1917 |
break; |
1918 |
} |
1919 |
xf86WcmInitialScreens(priv->local); |
1920 |
xf86WcmMappingFactor(priv->local); |
1921 |
xf86WcmInitialCoordinates(priv->local, 0); |
1922 |
xf86WcmInitialCoordinates(priv->local, 1); |
1923 |
|
1924 |
if (tmpTopX != priv->topX) |
1925 |
xf86ReplaceIntOption(priv->local->options, "TopX", priv->topX); |
1926 |
if (tmpTopY != priv->topY) |
1927 |
xf86ReplaceIntOption(priv->local->options, "TopY", priv->topY); |
1928 |
if (tmpBottomX != priv->bottomX) |
1929 |
xf86ReplaceIntOption(priv->local->options, "BottomX", priv->bottomX); |
1930 |
if (tmpBottomY != priv->bottomY) |
1931 |
xf86ReplaceIntOption(priv->local->options, "BottomY", priv->bottomY); |
1932 |
} |
1933 |
|
1934 |
/***************************************************************************** |
1935 |
* xf86WcmRotateScreen |
1936 |
****************************************************************************/ |
1937 |
|
1938 |
void xf86WcmRotateScreen(LocalDevicePtr local, int value) |
1939 |
{ |
1940 |
WacomDevicePtr priv = (WacomDevicePtr)local->private; |
1941 |
WacomCommonPtr common = priv->common; |
1942 |
WacomDevicePtr tmppriv; |
1943 |
int oldRotation; |
1944 |
int tmpTopX, tmpTopY, tmpBottomX, tmpBottomY, oldMaxX, oldMaxY; |
1945 |
|
1946 |
DBG(10, priv->debugLevel, ErrorF("xf86WcmRotateScreen for \"%s\" \n", local->name)); |
1947 |
|
1948 |
if (common->wcmRotate == value) /* initialization */ |
1949 |
{ |
1950 |
rotateOneTool(priv); |
1951 |
} |
1952 |
else |
1953 |
{ |
1954 |
oldRotation = common->wcmRotate; |
1955 |
common->wcmRotate = value; |
1956 |
|
1957 |
/* rotate all devices at once! else they get misaligned */ |
1958 |
for (tmppriv = common->wcmDevices; tmppriv; tmppriv = tmppriv->next) |
1959 |
{ |
1960 |
oldMaxX = tmppriv->wcmMaxX; |
1961 |
oldMaxY = tmppriv->wcmMaxY; |
1962 |
|
1963 |
if (oldRotation == ROTATE_CW || oldRotation == ROTATE_CCW) |
1964 |
{ |
1965 |
tmppriv->wcmMaxX = oldMaxY; |
1966 |
tmppriv->wcmMaxY = oldMaxX; |
1967 |
} |
1968 |
|
1969 |
tmpTopX = tmppriv->topX; |
1970 |
tmpBottomX = tmppriv->bottomX; |
1971 |
tmpTopY = tmppriv->topY; |
1972 |
tmpBottomY = tmppriv->bottomY; |
1973 |
|
1974 |
/* recover to the unrotated xy-rectangles */ |
1975 |
switch (oldRotation) { |
1976 |
case ROTATE_CW: |
1977 |
tmppriv->topX = oldMaxY - tmpBottomY; |
1978 |
tmppriv->bottomX = oldMaxY - tmpTopY; |
1979 |
tmppriv->topY = tmpTopX; |
1980 |
tmppriv->bottomY = tmpBottomX; |
1981 |
break; |
1982 |
case ROTATE_CCW: |
1983 |
tmppriv->topX = tmpTopY; |
1984 |
tmppriv->bottomX = tmpBottomY; |
1985 |
tmppriv->topY = oldMaxX - tmpBottomX; |
1986 |
tmppriv->bottomY = oldMaxX - tmpTopX; |
1987 |
break; |
1988 |
case ROTATE_HALF: |
1989 |
tmppriv->topX = oldMaxX - tmpBottomX; |
1990 |
tmppriv->bottomX = oldMaxX - tmpTopX; |
1991 |
tmppriv->topY = oldMaxY - tmpBottomY; |
1992 |
tmppriv->bottomY = oldMaxY - tmpTopY; |
1993 |
break; |
1994 |
} |
1995 |
|
1996 |
/* and rotate them to the new value */ |
1997 |
rotateOneTool(tmppriv); |
1998 |
|
1999 |
switch(value) { |
2000 |
case ROTATE_NONE: |
2001 |
xf86ReplaceStrOption(local->options, "Rotate", "NONE"); |
2002 |
break; |
2003 |
case ROTATE_CW: |
2004 |
xf86ReplaceStrOption(local->options, "Rotate", "CW"); |
2005 |
break; |
2006 |
case ROTATE_CCW: |
2007 |
xf86ReplaceStrOption(local->options, "Rotate", "CCW"); |
2008 |
break; |
2009 |
case ROTATE_HALF: |
2010 |
xf86ReplaceStrOption(local->options, "Rotate", "HALF"); |
2011 |
break; |
2012 |
} |
2013 |
} |
2014 |
} |
2015 |
|
2016 |
} |