First, sorry for the blank mail I accidentally sent earlier... my bad.
Ok, so I have been assigned bug 50 [1] here at my job, and I'm trying to apply the patch [2] Keith Dunwoody proposed in June 2005, which fixed the issue but was rejected for technical reasons.
Right now I can't think of another way around that bug except a patch that big, but I think we could break it into two smaller ones: the first one would change what must be changed for the second one ― the actual correction ― to work. Well, that first one involves changing the signatures of the ExtTextOut functions in winex11.drv, in a similar fashion to what Keith had proposed; but, instead of adding 'INT *breakTotalExtra, INT *breakCount' to their argument lists, I suggest that we pass them the whole DC instead of just its physDev ― that way we'd have access to the relevant attributes while still being able to get its physDev (assigning it to a variable right at the beginning of the functions, in order to keep their current functionality in this first step). I'm only afraid that may bring a little overhead, so I'd really like to see some opinions, or some better ideas...
[1] http://bugs.winehq.org/show_bug.cgi?id=50 [2] http://bugs.winehq.org/attachment.cgi?id=912&action=view
I'll be testing that here, anyway.
Cheers, Pedro.
"Pedro Araújo Chaves Jr." inckie@gmail.com writes:
Right now I can't think of another way around that bug except a patch that big, but I think we could break it into two smaller ones: the first one would change what must be changed for the second one ― the actual correction ― to work. Well, that first one involves changing the signatures of the ExtTextOut functions in winex11.drv, in a similar fashion to what Keith had proposed; but, instead of adding 'INT *breakTotalExtra, INT *breakCount' to their argument lists, I suggest that we pass them the whole DC instead of just its physDev ― that way we'd have access to the relevant attributes while still being able to get its physDev (assigning it to a variable right at the beginning of the functions, in order to keep their current functionality in this first step).
Passing the DC is not an option, that's a private gdi32 structure that the driver doesn't know about. You shouldn't need to change the function signature in any case, it already takes an lpDx array, all you have to do is put better spacing values in there.