Jeremy White : wintab32: Order the cursor array by the standard Wacom promulgates.

Alexandre Julliard julliard at winehq.org
Wed Dec 26 10:05:04 CST 2007


Module: wine
Branch: master
Commit: 64a929c48353b68cc4cd177d37ed25308abf282b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=64a929c48353b68cc4cd177d37ed25308abf282b

Author: Jeremy White <jwhite at winehq.org>
Date:   Sun Dec 23 10:55:43 2007 -0600

wintab32: Order the cursor array by the standard Wacom promulgates.

---

 dlls/winex11.drv/wintab.c |   52 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 51 insertions(+), 1 deletions(-)

diff --git a/dlls/winex11.drv/wintab.c b/dlls/winex11.drv/wintab.c
index 2a320ac..9785d65 100644
--- a/dlls/winex11.drv/wintab.c
+++ b/dlls/winex11.drv/wintab.c
@@ -304,6 +304,55 @@ static int Tablet_ErrorHandler(Display *dpy, XErrorEvent *event, void* arg)
     return 1;
 }
 
+static int find_cursor_by_type(int cursor_type, int exclude)
+{
+    int i;
+    for (i = 0; i < gNumCursors; i++)
+        if (i != exclude)
+            if (gSysCursor[i].TYPE == cursor_type)
+                return i;
+
+    return -1;
+}
+
+static void swap_cursors(int a, int b)
+{
+    WTI_CURSORS_INFO temp;
+    temp = gSysCursor[a];
+    gSysCursor[a] = gSysCursor[b];
+    gSysCursor[b] = temp;
+}
+
+/* Adobe Photoshop 7.0 relies on the eraser being cursor #2 or #5, and it assumes the stylus is 1.
+**   If the X configuration is not set up that way, make it
+*/
+static void Tablet_FixupCursors(void)
+{
+    if (gNumCursors >= 1)
+        if (gSysCursor[1].TYPE != CSR_TYPE_PEN)
+        {
+            int stylus;
+            stylus = find_cursor_by_type(CSR_TYPE_PEN, 1);
+            if (stylus >= 0)
+            {
+                swap_cursors(1, stylus);
+                TRACE("Swapped cursor %d with stylus slot (1) for compatibility with older programs\n", stylus);
+            }
+        }
+
+    if (gNumCursors >= 2)
+        if (gSysCursor[2].TYPE != CSR_TYPE_ERASER)
+        {
+            int eraser;
+            eraser = find_cursor_by_type(CSR_TYPE_ERASER, 2);
+            if (eraser >= 0)
+            {
+                swap_cursors(2, eraser);
+                TRACE("Swapped cursor %d with eraser slot (2) for compatibility with older programs\n", eraser);
+            }
+        }
+}
+
 void X11DRV_LoadTabletInfo(HWND hwnddefault)
 {
     const WCHAR SZ_CONTEXT_NAME[] = {'W','i','n','e',' ','T','a','b','l','e','t',' ','C','o','n','t','e','x','t',0};
@@ -554,9 +603,10 @@ void X11DRV_LoadTabletInfo(HWND hwnddefault)
         }
     }
     pXFreeDeviceList(devices);
-    wine_tsx11_unlock();
     gSysDevice.NCSRTYPES = cursor_target+1;
     gNumCursors = cursor_target+1;
+    Tablet_FixupCursors();
+    wine_tsx11_unlock();
 }
 
 static int figure_deg(int x, int y)




More information about the wine-cvs mailing list