[softwarelist] Re: OPro 2.76

  • From: Martin Wuerthner <public@xxxxxxxxxxxxxxx>
  • To: davidpilling@xxxxxxxxxxxxx
  • Date: Thu, 07 Dec 2006 13:53:28 +0100

In message <8f2b9c904e.martin@xxxxxxxxxxxxxxxxxxx>
          Martin Wuerthner <public@xxxxxxxxxxxxxxx> wrote:

> So, I guess that after the
> conversion some internal state of the frame is not set correctly that
> causes a Draw SWI to be called with unusual parameters.

After some further analysis it turned out that this suspicion was 
correct and I have found out an interesting fact about GDraw that I 
had not been aware of: When printing from an application that supports 
ArtWorks files (and hence calls AWRender_ClaimVectors before 
printing), ALL Draw SWIs are actually handled by GDraw instead (which 
is quite naughty). I am surprised nobody has noticed so far - this 
shows how good GDraw's emulation of Draw is.

There is one major difference though: GDraw is more sensitive to 
numeric overflows than Draw and it returns an error if one happens. 
This has a quite drastic effect during printing. What triggers this 
particular problem is that OP asks Draw to render a rectangle far off 
the page - still OK with Draw but too far off for GDraw.

I have logged the offending Draw SWI call from OvationPro. While 
printing page 64, it asks for a rectangle to be rendered about 4 
metres(!) below the bottom edge of the page.

path
00000002 FFF98EB8 01A18D70 00000008 FFFC63B8 01A18D70 00000008 
FFFC63B8 01A4C670 00000008 FFF98EB8 01A4C670 00000008 FFF98EB8 
01A18D70 00000005 00000000
matrix
00028F5C 00000000 00000000 FFFD70A4 0017A361 FFEA4938
(the matrix has been modified by the printer driver by the time GDraw 
sees it so the A and D components were probably only a fourth of that 
in the original call from OvationPro).

This results in an absolute y coord (after transformation) of 
-71476664, which is outside the range allowed by GDraw.

So, the bottom line is:
a) GDraw should not really intercept and process Draw SWIs but if it
   really insists on doing so then it had better get things right -
   intercepting and messing up a call that Draw could handle
   definitely counts as a GDraw bug
b) OvationPro could help by not asking for such an extremely off-page
   Draw operation - it has no effect anyway

Martin
-- 
---------------------------------------------------------------------
Martin Wuerthner          MW Software          martin@xxxxxxxxxxxxxxx
---------------------------------------------------------------------

Other related posts: