[Bug 21660] New: Wacom bounding rectangle top coordinates ignored
wine-bugs at winehq.org
wine-bugs at winehq.org
Tue Feb 9 10:04:27 CST 2010
http://bugs.winehq.org/show_bug.cgi?id=21660
Summary: Wacom bounding rectangle top coordinates ignored
Product: Wine
Version: 1.1.38
Platform: x86
OS/Version: Linux
Status: UNCONFIRMED
Severity: minor
Priority: P2
Component: wintab32
AssignedTo: wine-bugs at winehq.org
ReportedBy: azathothgr at gmail.com
Created an attachment (id=26156)
--> (http://bugs.winehq.org/attachment.cgi?id=26156)
DUMPCONTEXT for TopX/Y = 10000 and BottomX/Y defaults
When setting TopX/Y and BottomX/Y with xsetwacom the resulting bounding box
gets ignored. This makes the cursor draw in a different location than where it
is displayed.
Looking at the tablet context I see that TopXY and BottomXY get mapped directly
to InOrgX/Y and InExtX/Y, while OutOrgX/Y is always 0 and OutExtX = InExtX ,
OutExtY = -InExtY .
I tested this with artrage studio pro, and Gimp for windows, with an intuos3. I
couldn't get gimp to use the tablet properly, but the context was exactly the
same as in artrage.
The function ScaleForContext in dlls/wintab32/context.c seems to use InExt and
OutExt as extents (right - left coordinate) while they're being set as absolute
coordinates. Also the OutExt for the Y axis is always negative, but negative Y
values do not work at all.
Replacing ScaleForContext with a simple linear mapping from [InOrg , InExt] to
[OutOrg, OutExt], returning an absolute value of the result to cope with the
negative Y axis, and removing Y axis flipping later on the same file, seems to
fix the issue:
ScaleForContext :
replace with :
LONG Out;
Out = (LONG)(OutOrg + ( ( In - InOrg) * (float)(OutExt - OutOrg)) / (InExt
- InOrg));
return abs(Out)
AddPacketToContextQueue:
remove :
/* flip the Y axis */
if (ptr->context.lcOutExtY > 0)
packet->pkY = ptr->context.lcOutExtY - packet->pkY;
else if (ptr->context.lcOutExtY < 0)
packet->pkY = abs(ptr->context.lcOutExtY + packet->pkY);
This even works correctly for negative TopX/Y values and out of bounds BottomXY
values, which can map the entire tablet area to a portion of the screen.
I have a few questions however. Where do OutOrg and OutExt get set, and why is
OutExtY always negative ? And most importantly, are the above changes correct?
--
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.
More information about the wine-bugs
mailing list