<Swing Dev> <SwingDev> [9] Review request: 8033233 [JLightweightFrame] support default JViewport BLIT_SCROLL_MODE
Alexander Scherbatiy
alexandr.scherbatiy at oracle.com
Fri Jan 31 11:57:12 UTC 2014
Do not worry. The fix looks good for me.
Thanks,
Alexandr.
On 1/31/2014 3:12 PM, Anton V. Tarasov wrote:
> On 31.01.2014 14:08, Alexander Scherbatiy wrote:
>>
>> The fix looks good for me.
>>
>> Just a minor comment. It seem that the condition in
>> DefaultDesktopManager: "if (!floaterCollision) { .. }
>> if(floaterCollision) {...}"
>> is the same as "if (!floaterCollision) { ... } else {...} ".
>
> I just wanted to keep it close to the copyArea (I had to let
> f.setBounds(currentBounds) go first). But I'm Ok to change it, I'll do
> that with push, if you don't object.
>
> Thanks,
> Anton.
>
>>
>> Thanks,
>> Alexandr.
>>
>>
>> On 1/31/2014 11:55 AM, Anton V. Tarasov wrote:
>>> Hi Petr,
>>>
>>> On 30.01.2014 18:16, Petr Pchelko wrote:
>>>> Hello, Anton.
>>>>
>>>> Great, you are removing the dirty JViewPort hack)
>>>>
>>>> I have one question: is JViewport a single place where we use the
>>>> "blit" rendering?
>>>
>>> Yes, there's one more place - in DefaultDesktopManager. It BLITs on
>>> dragging a JInternalFrame instance but only in FASTER_DRAG_MODE
>>> which is not its default mode. I hadn't test it, but I tried. I
>>> switched the mode and what I see is that w/o any modifications a
>>> dragged JIF is, as expected, not repainted. I've put the
>>> notifications into the code. This made a JIF instance repaint on
>>> drag. However, there's an issue with the shadow. The shadow is not
>>> repainted, but background artifacts instead. I didn't yet find the
>>> reason, I suspect there's some async repaint which I probably don't
>>> catch.
>>>
>>> I suggest not to spend time in DefaultDesktopManager for now, as a)
>>> this functionality has less priority for SwingNode (than JViewport)
>>> b) it works fine in the default mode. So, I'll file a P5 against it.
>>>
>>> Please, look at the new webrev:
>>>
>>> http://cr.openjdk.java.net/~ant/JDK-8033233/webrev.1
>>>
>>> Besides modifications to DDM, I've put additional bounds constraint
>>> to JLF/RepaintListener.repaintPerformed.
>>>
>>>> Also, could you please update the copyright years.
>>> Sure, I did.
>>>
>>>> Also, may be we could replace the RepaintListener instantiation in
>>>> JLWF with a lambda? What do you think?
>>>
>>> Sure, we can.
>>>
>>> Thanks,
>>> Anton.
>>>
>>>>
>>>> With best regards. Petr.
>>>>
>>>> On 30.01.2014, at 17:49, "Anton V.
>>>> Tarasov"<anton.tarasov at oracle.com> wrote:
>>>>
>>>>> Hi all,
>>>>>
>>>>> Please review the fix.
>>>>>
>>>>> jira:https://bugs.openjdk.java.net/browse/JDK-8033233
>>>>> webrev:http://cr.openjdk.java.net/~ant/JDK-8033233/webrev.0
>>>>>
>>>>> Here I'm duplicating JIRA:
>>>>>
>>>>> The point of the fix is that it introduces a RepaintListener which
>>>>> can be added to a RepaintManager in order to get back
>>>>> notifications of repaints performed as BLITs. JLightweightFrame
>>>>> registers such a listener to its RM instance. JViewport is the
>>>>> source of those notifications. Now it works in default
>>>>> BLIT_SCROLL_MODE.
>>>>>
>>>>> Shortly, the mechanism of repainting of a JLF is the following.
>>>>> Once a JLF's child component is requesting repaint, an appropriate
>>>>> repaint runnable is scheduled by the RepaintManager (RM). The
>>>>> runnable is then gets dispatched by the RM which calls the paint()
>>>>> method of the root component, that is the JLF. JLF overrides this
>>>>> method in the way that after all the painting is done
>>>>> (super.paint) it initiates a pixel bits transfer to the host
>>>>> application (e.g. SwingNode). In case of JViewport, when it works
>>>>> in the default BLIT scroll mode, scrolling of the JViewport
>>>>> doesn't lead to a repaint runnable being dispatched. Instead,
>>>>> JViewport immediately repaints its content (via blitting +
>>>>> repainting a dirty area) and then tells the RM there's nothing to
>>>>> repaint (so the runnable scheduled is just skipped). As the
>>>>> result, the JLF doesn't get any notification of the update.
>>>>>
>>>>> As a workaround to this problem, JViewport had been forcibly
>>>>> switched to the BACKINGSTORE scroll mode, in which case it passes
>>>>> the whole repainting cycle.
>>>>>
>>>>> Regards,
>>>>> Anton.
>>>
>>
>
More information about the swing-dev
mailing list