improvements on ellipticalquadrant in enhanced path of custom shape
Regina Henschel
rb.henschel at t-online.de
Sat Dec 8 18:25:40 UTC 2018
Hi all,
I'm working on tdf#121761 and tdf#121952. The current state is in
https://gerrit.libreoffice.org/#/c/64817/. It works in principle, but
there are still some problems.
Problem A
The current implementation has a method GetPoint, which returns a
tools::Point; and such has integer coordinates. This introduces
inaccuracy, if you need to use the result in further calculation.
Currently I use GetParameter (which results a double) directly and add
the needed shift and scaling each time. I think, it would be better to
have a method for getting a point in double coordinates. Do you agree?
The calculation inside GetPoint is in double and only at last step it
gets a cast to integer, astonishing for y-coordinate to sal_Int32 and
for x-coordinate to long. The structure of the calculation seems
unnecessary complicated to me.
How can I get a method for double point parallel to the existing
GetPoint? Do I need a new method name? Or is there a way to keep the
current method name, but different result type?
Problem B
The commands X (ELLIPTICALQUADRANTX) and Y (ELLIPTICALQUADRANTY) draw an
arc clockwise or counter-clockwise depending on the position of the
current point and the target point. But the method
createPolygonFromEllipseSegment from basegfx does only create arcs
clockwise.
My current solution contains the same idea to generate a
counter-clockwise arc four times. Not nice. I can put it into a local
method for these special cases, I can add a new method
createPolygonFromEllipseSegmentCounterClockWise or I can add a parameter
to createPolygonFromEllipseSegment to allow generating of
counter-clockwise arcs. Which way to go?
Problem C
The commands X and Y draw an arc from the "current" point. What to do,
if a path starts with an X or Y command? The current solution makes a
moveTo to the target point and continues then. Such continuation might
be with additional target points for X or Y. The general flow following
ODF is, that the direction toggles between x-direction and y-direction
automatically after each point. (That is bug 121952). But what to do, if
the path is ill-structured and the first parameter point is consumed by
moveTo? Keep the direction or toggle it?
I cannot look how PowerPoint or Karbon handle this case, because both
crash on such ill-structured path.
Problem D
How to make a unit test for such patches
(https://gerrit.libreoffice.org/#/c/64704/1 is another one)? It would
need to compare a bad rendering with a correct one and it would need to
be independent from screen resolution. Does a template exist somewhere?
Kind regards
Regina
More information about the LibreOffice
mailing list