Thanks for the clarification.
Change looks good to me.

Regards,
Jay

> On 17-Apr-2020, at 4:04 AM, Philip Race <philip.r...@oracle.com> wrote:
> 
> 
> 
> On 4/15/20, 10:32 PM, Jayathirth D v wrote:
>> Hi Phil,
>> 
>> Thanks for the detailed evaluation in bug and here.
>> Change looks good to me.
>> 
>> Newly added file has copyright year 2018. Please update it before pushing.
> 
> Ok.
>> I ran smaller set of rotate tests for font and they all pass with this 
>> change.
>> 
>> Does this new change handle non-bold use cases also as mentioned in bug 
>> description “However, if we use "MS P Gothic" as a font, even normal 
>> alphabet characters are drawn at wrong positions.” ?
> 
> He wasn't saying "non-bold" here. He was saying still BOLD but "not wide" 
> characters.
> 
> It all depends which characters come from a font that needs to be bolded.
> 
> So with DIALOG for Latin (eg) he is probably getting Arial used and that has 
> a bold version
> 
> When using P Gothic, then all chars come from the font that need to be 
> synthetically bolded.
> 
> So in short this bug is about synthetic bolding, nothing else.
> 
> -phil
> 
>> 
>> Thanks,
>> Jay
>> 
>>> On 16-Apr-2020, at 2:30 AM, Philip Race<philip.r...@oracle.com>  wrote:
>>> 
>>> Bug : https://bugs.openjdk.java.net/browse/JDK-8233006
>>> Webrev : http://cr.openjdk.java.net/~prr/8233006
>>> 
>>> The bug here is that the freetype function for synthesising bold is not 
>>> ready to handle rotation.
>>> 
>>> In the process I noticed it did not adjust the advance used by the 
>>> fractional metrics case,
>>> even though the outline is bolded.
>>> 
>>> Also, in what seems to be a completely wrong thing to do, freetype would
>>> widen the advance of glyphs which have zero advance.
>>> 
>>> So I decided that the best thing to do was to write our own.
>>> A chunk of the heavy lifting - widening the outline - is still done by 
>>> freetype
>>> but there were a lot of details to get right and test.
>>> 
>>> I wrote a test to visualise the problem but the actual test checks by 
>>> looking
>>> at the bounding rectangle of the drawn pixels and compares its height to
>>> the declared metrics of the font, failing if they disagree by too much.
>>> 
>>> Note that the code path is only exercised when synthetic bolding is needed.
>>> So real bold fonts don't test this code.
>>> Since there's not an easy way to say which fonts have real bold, I decided 
>>> the
>>> test should use a BOLD version of every font on the system, which on almost
>>> all systems will test some significant number of such cases.
>>> I kept the UI for visualising as it will be useful for later debugging of 
>>> failures.
>>> 
>>> Also it made me notice that the case where the text was not rotated at all 
>>> was
>>> drawing shorter than all the other cases.
>>> I traced this back to the fix for 8203485 which added a macro FT26Dot6ToInt
>>> and used it to get the integer advance in the unrotated, integer metrics 
>>> case.
>>> The idea there wasn't completely wrong, but I don't think it was completely 
>>> right either.
>>> I got rid of the macro and instead used the same FT26Dot6ToFloat macro as 
>>> used
>>> in the rotation cases. So we now return the exact floating point value to 
>>> the calling
>>> Java code. That then can round appropriately as it needs to. This fixed the 
>>> inconsistency
>>> and the test for 8203485 still passes as do all other tests.
>>> This change will likely lead to some cases where unrotated advances now 
>>> round up one pixel wider,
>>> but so far it looks correct to me. They'll be restored to something more 
>>> like what they were
>>> before 8203485, since that removed rounding and added truncation instead to 
>>> fix a problem
>>> with the rounding being incorrect for rotations because it could round down 
>>> when it should round up.
>>> Now we just let the Java code handle it.
>>> 
>>> I've run these tests on all platforms and they pass. Mac isn't using this 
>>> freetype path so it is not affected
>>> but it is still good to know the tests pass there ...
>>> 
>>> -phil

Reply via email to