On Tue, 9 Apr 2024 18:50:17 GMT, Phil Race <p...@openjdk.org> wrote:

> The main problem here is that we do not curate what font point size we passed 
> to freetype,
> and would pass in one larger than freetype's maximum of FT_USHORT_MAX which 
> is USHRT_MAX.
> This isn't documented, SFAICS, and is checked a couple of calls deep from the 
> specific API we use.
> But generally anywhere near that size seems to cause freetype to choke as it 
> uses signed 16.16
> values, so 32767 is really the max.
> But we have no need to go anywhere near that - 16384 seems like a plenty 
> large enough pt size.
> And we can request bigger sizes than that by making use of the transform.
> At normal size ranges we use that just to account for rotation and decompose 
> the glyph transform
> into point size and that rotation.
> 
> But at large sizes - which are not usefully rendered anyway - there are no 
> hints etc to be lost
> from not specifying the target point size. So we can extend the range of 
> sizes we allow.
> 
> If  this is still too large to be held decomposed into a pt size in the range 
> less than 16384 and a scale of up to 32766 then we substitute the null 
> scaler, as we generally do when values are out of range, such
> a for a NaN transform.
> 
> These extreme values aren't useful.
> 
> In looking at this I did find that getGlyphPixelBounds doesn't follow the 
> maximum image size we use
> for rendering. Which is not useful and could lead to inconsistent results. I 
> fixed that.
> 
> Also whilst macOS didn't have these problems it could be cleaned up a bit for 
> consistency in the reported sizes for some cases.
> 
> The test is mainly around making sure that "sensible" things are returned for 
> not sensible input.
> There's no 100% right answer to these extreme unrenderable sizes.

Marked as reviewed by serb (Reviewer).

-------------

PR Review: https://git.openjdk.org/jdk/pull/18703#pullrequestreview-2016175337

Reply via email to