On 09.07.2011 21:04, Eric Wasylishen wrote:
Hi Philippe,
The jumping is caused by our use of rint() in NSButtonCell - in fact, I think we should
avoid rint() entirely for graphics, because it uses a "round halfway cases to the
nearest even integer" algorithm; so 1.5 rounds to 2, but 2.5 also rounds to 2.
The annoying thing is that none of the C standard library functions implement a
good rounding algorithm for graphics. c99's round() rounds halfway cases away
from zero. This is probably OK in practice but not ideal, since it means the
location of the coordinate system origin affects the rounding. I think the best
algorithm for graphics is round-towards-infinity, so just floor(x+0.5). I
wonder if we should just introduce this as a function for internal use, like
GSRoundTowardsInfinity().
Eric
Hi Eric,
could you please explain why you think that one of these rounding
methods is better suited for graphics than the others? For me they are
all equally problematic :-(
If we ever change to another function we will have to make sure it is
available equally on all supported systems. That way why I wanted to
stick with rint() for all cases as we already try to support that
everywhere.
Fred
PS: I also don't see how pure horizontal resizing may affect the
vertical position of a subview. Is this the case that mentioned earlier,
but couldn't come up with a real test case for?
_______________________________________________
Gnustep-dev mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/gnustep-dev