[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-2d-dev
Subject: [OpenJDK 2D-Dev] Pisces Dasher calculation issues
From: omajid () redhat ! com (Omair Majid)
Date: 2009-04-30 20:45:10
Message-ID: 49FA0DD6.4030806 () redhat ! com
[Download RAW message or body]
Hi,
A bug was filed in the IcedTea bugzilla which pointed out a few issues
in java2d [1].
I am attaching example code and it's output to demonstrate one
particular issue. The attached program draws 5 horizontal lines with
different dash patterns. Using a BasicStroke with CAP_ROUND (or
CAP_SQUARE) and a very small value for length of the dash, no dashes are
drawn at the start of the line.
This seems to be the code responsible (Dasher.java line 221):
// ysplit = (int)(dysplit*65536.0);
// } else {
t = ((long)d << 16)/l;
xsplit = x0 + (int)(t*(x1 - x0) >> 16);
ysplit = y0 + (int)(t*(y1 - y0) >> 16);
'd' is the length of the dash, and 'l' is the distance between the
current location and the end location. Notice that the value of l
varies: as the current coordinate gets closer to the end of the line, l
becomes smaller. So if the value of d is very small, ((long)d << 16)/l
changes from 0 to a positive number. Hence dashes of length 0 are drawn
in the beginning and dashes of a non-zero length are drawn at the end of
the line.
The attached patch uses the total length of the line to calculate t, so
it wont change for the same value of d. However, this patch causes other
issues. The dash output now depends on the total length of the line. For
example, changing the size of the window in the test case changes the
value of the total length of the line. If total length becomes very
large, t becomes 0, and the dashes on the line disappear. If the window
is made small, the dashes appear on the line again.
Thanks,
Omair
[1] http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=197
-------------- next part --------------
A non-text attachment was scrubbed...
Name: BasicStrokeDashTest.java
Type: text/x-java
Size: 2495 bytes
Desc: not available
Url : http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20090430/efedc0e6/attachment.bin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dash-stroke-bug.png
Type: image/png
Size: 5192 bytes
Desc: not available
Url : http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20090430/efedc0e6/attachment.png
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dasher-disappearing-dashes.patch
Type: text/x-patch
Size: 1592 bytes
Desc: not available
Url : http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20090430/efedc0e6/attachment-0001.bin
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic