<Swing Dev> [13] RFR JDK-8214702:Wrong text position for whitespaced string in printing Swing text
Philip Race
philip.race at oracle.com
Mon Jan 28 05:04:20 UTC 2019
On 1/27/19, 8:37 PM, Prasanta Sadhukhan wrote:
>
>
>
> On 28-Jan-19 12:23 AM, Philip Race wrote:
>> This seems to invalidate the preceding comment as well as contradict
>> it's intent :
>> /* The printed text must scale linearly with the UI.
>> 519 * Calculate the width on screen, obtain a TextLayout with
>> 520 * advances for the printer graphics FRC, and then justify
>> 521 * it to fit in the screen width. This distributes the spacing
>> 522 * more evenly than directly laying out to the screen advances.
>> 523 */
>>
>>
>> I am not sure when
>> 531 if (!isFontRenderContextPrintCompatible(frc, deviceFRC)) {
>> would return "false" since we are in an isPrinting() block and you
>> are comparing the screen and printer FRCs, so then you will inevitably end up calling
>> 532 layout = createTextLayout(c, text, g2d.getFont(), frc);
>> which will create spacing at screen resolution.
>> In the other two places in this file where a test similar to that at
>> 531 is used,
>> if the result is that they aren't compatible, then a TextLayout is
>> created
>> using the deviceFRC .. the opposite of what you are doing here.
> In drawStringImpl(), I guess it is doing the same as I am doing
> (calling with screen frc if not compatible)
so ...
> if (isPrinting) {
> FontRenderContext deviceFRC = g2d.getFontRenderContext();
> if (!isFontRenderContextPrintCompatible(frc, deviceFRC)) {
> layout = new TextLayout(iterator, deviceFRC);
.. why do you say / think deviceFRC is the screen frc in the line above ?
g2d is a printer graphics, isn't it ?
-phil.
> AttributedCharacterIterator trimmedIt =
> getTrimmedTrailingSpacesIterator(iterator);
> if (trimmedIt != null) {
> float screenWidth = new TextLayout(trimmedIt,
> frc).
>
> I am not sure if the comment in l519-523 is introduced in JDK-6488219
> (as I am not able to see the fix in JBS)
> but since it is claimed that this bug is regression from this fix
> onwards, maybe this comment is not sacrosanct.
>
>>
>> So I think you will regress
>> https://bugs.openjdk.java.net/browse/JDK-6488219
>>
>> Are you running Swing printing tests when you make changes here ?
>>
>> The bug above is covered by java/awt/print/PrinterJob/SwingUIText.java
>> but it is manual since pass/fail is a subjective manual verification ..
>>
> I ran with / without fix and this looks the same to me. Attached are
> the output.
>
> Regards
> Prasanta
>> -phil.
>>
>> On 1/25/19, 3:41 AM, Prasanta Sadhukhan wrote:
>>>
>>> Hi All,
>>>
>>> Please find an updated webrev using FontRenderContext compatible to
>>> printer device. With this, swing text with and without leading
>>> spaces are printed ok.
>>> http://cr.openjdk.java.net/~psadhukhan/8214702/webrev.1/
>>>
>>> Regards
>>> Prasanta
>>> On 25-Jan-19 11:01 AM, Prasanta Sadhukhan wrote:
>>>>
>>>>
>>>>
>>>> On 25-Jan-19 10:57 AM, Philip Race wrote:
>>>>>
>>>>>
>>>>> On 1/24/19, 8:19 PM, Prasanta Sadhukhan wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 25-Jan-19 2:00 AM, Phil Race wrote:
>>>>>>> I can't work out what you are trying to say.
>>>>>>> The changes are only in the printing code path.
>>>>>>>
>>>>>>> However what it looks like to me is that Prasanta is now using
>>>>>>> TextLayout for printing only under
>>>>>>> the same conditions as we use it on screen -- which is when
>>>>>>> "international" text is being rendered.
>>>>>>> This will reintroduce clipped text bugs which the existing code
>>>>>>> was meant to fix so I don't think it
>>>>>>> can be right.
>>>>>> OK. Thanks for the info. I didn't know that as I am not able to
>>>>>> get the fix for JDK-6760148 which is pre 7u23 where mercurial
>>>>>> tracking began.
>>>>>>>
>>>>>>> It may not be pretty or a complete solution but I think we need
>>>>>>> to look at breaking the text into
>>>>>>> the leading spaces + the rest of the trimmed string and using
>>>>>>> the screen advance of the
>>>>>>> leading spaces to position the rest of the justified text.
>>>>>> Are you implying the leading spaces in text is making text
>>>>>> justifcation going astray?
>>>>>
>>>>> Yes.
>>>>>
>>>>>> I have seen even without leading spaces in swing text in console
>>>>>>
>>>>>> , the text justification during printing is wrong as I am getting
>>>>>>
>>>>>>
>>>>> That is quite different from what you showed earlier.
>>>> The earlier embedded image was "with" leading spaces inswing text.
>>>> The above was "without"
>>>>
>>>> Regards
>>>> Prasanta
>>>>> The first visible chars are all aligned properly. But all the
>>>>> adjustment for the width
>>>>> is being assigned to one space.
>>>>> For this you will need to look into the text layout justification
>>>>> code.
>>>>>
>>>>> -phil.
>>>>>
>>>>>> Regards
>>>>>> Prasanta
>>>>>>>
>>>>>>> -phil.
>>>>>>>
>>>>>>> On 1/24/19 9:33 AM, Sergey Bylokhov wrote:
>>>>>>>> Hi, Prasanta.
>>>>>>>>
>>>>>>>> On 24/01/2019 02:18, Prasanta Sadhukhan wrote:
>>>>>>>>> Proposed fix is to check if we need text layouting for
>>>>>>>>> printing too as it is done for swing text drawing on console.
>>>>>>>>> If we need text layouting, then only use textlayout
>>>>>>>>> justification.
>>>>>>>>
>>>>>>>> For swing components we skip textlayout by default because of
>>>>>>>> performance reason(when we know that it should be safe to do),
>>>>>>>> are you sure that it is safe in your case? Will the text scales
>>>>>>>> in the same way as the components on which it drawn?
>>>>>>>>
>>>>>>>> BTW the new codepath missed the call:
>>>>>>>> g2d.setColor(((PrintColorUIResource)col).getPrintColor());
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>
>>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/swing-dev/attachments/20190127/334ef557/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 1991 bytes
Desc: not available
URL: <https://mail.openjdk.java.net/pipermail/swing-dev/attachments/20190127/334ef557/attachment-0002.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 7295 bytes
Desc: not available
URL: <https://mail.openjdk.java.net/pipermail/swing-dev/attachments/20190127/334ef557/attachment-0003.png>
More information about the swing-dev
mailing list