<Swing Dev> <SwingDev> [9] Review request: 8033233 [JLightweightFrame] support default JViewport BLIT_SCROLL_MODE
Alexander Scherbatiy
alexandr.scherbatiy at oracle.com
Fri Jan 31 10:08:39 UTC 2014
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 {...} ".
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