<Swing Dev> [13] RFR JDK-8213535:Windows HiDPI html lightweight tooltips are truncated
Prasanta Sadhukhan
prasanta.sadhukhan at oracle.com
Wed Apr 1 08:03:37 UTC 2020
It is because of the same issue the size is not updated as
ToolTipManager#showTipWindow() calls popupFactory.getPopup() before
tip.show() and as per flow,
getPopup() => getLightWeightPopup() => popup.reset() => pack() calls
component.setSize(component.getPreferredSize()) where the preferredSize
is not yet updated.
Regards
Prasanta
On 01-Apr-20 5:11 AM, Sergey Bylokhov wrote:
> That looks much better! The only question I have is why the size is
> not updated - is it intentional behaviour or we can tweak it somehow.
>
> On 3/31/20 1:13 am, Prasanta Sadhukhan wrote:
>> View is updated by calling BasicHTML.updateRenderer when
>> "graphicsConfiguration" property is fired when tooltip is shown via
>> tip.show() in ToolTipManager. Now, we should be using the updated
>> preferredSize calculated by View.getPreferredSpan but
>> BasicToolTip#paint still uses the old size. Proposed fix is to use
>> the updated preferredSize.
>>
>> http://cr.openjdk.java.net/~psadhukhan/8213535/webrev.2/
>>
>> Regards
>> Prasanta
>> On 28-Mar-20 8:49 AM, Sergey Bylokhov wrote:
>>> On 3/27/20 3:27 am, Prasanta Sadhukhan wrote:
>>>>
>>>> On 07-Dec-19 10:28 AM, Sergey Bylokhov wrote:
>>>>> On 12/6/19 7:24 pm, Prasanta Sadhukhan wrote:
>>>>>>> How other components which may use HTML inside calculates its
>>>>>>> preferred size? I do not remember that they additionally scale
>>>>>>> the values returned by the View.
>>>>>>
>>>>>> Maybe those components does not use preferredSize calculation as
>>>>>> JTooltip does.
>>>>>
>>>>> Even if it not used, the preferredSize of the components and views
>>>>> should return correct values.
>>>>>
>>>>>
>>>> getPreferredSize() is called from ToolTipManager but it is done
>>>> *before *calling Tooltip.show() which actually triggers
>>>> PropertyChangeEvent with "graphicsConfiguration" property.
>>>>
>>>> Now, View is updated by calling BasicHTML.updateRenderer() when
>>>> "graphicsConfiguration" property is fired to notify transform is
>>>> changed, so during preferredSize() call, the View has not yet been
>>>> updated with correct transform.
>>>
>>> It means that the View should use GCOnfig of its parent-parent-etc,
>>> which is default/main GC if the components/windows are invisible or
>>> the GC of the real screen where the component/window is located. Or
>>> the size of the tooltip should be revalidated at the moment we found
>>> that the preferred size was calculated using the wrong GC.
>>>
>>> I think we should do both steps above.
>>>
>>>
>>> Note that we should never calculate "coordinate_XY * scale" and
>>> return this value to the user. The result of "coord*scale" should be
>>> only used when we pass the data to the native code, in all other
>>> places we should use just plain coordinates in the user's space.
>>>
>>>> So, my proposed fix is still same
>>>>
>>>> http://cr.openjdk.java.net/~psadhukhan/8213535/webrev.1/
>>>>
>>>> Regards
>>>> Prasanta
>>>
>>>
>
>
More information about the swing-dev
mailing list