[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [albireo-dev] CleanResizeListener

Hi Gordon,

On 2008-01-27 you wrote:
> I've added a listener (from the SAS contribution) that improves the look 
>   during window resizing. The listener paints the SWT background for the 
> brief period before the embedded AWT frame repaints. It's needed because 
> we use the sun.awt.noerasebackground property to reduce flicker. Because 
> the property only applies to Windows, the listener is only installed on 
> Windows.

Good. I have added a view, TestResizeView, that can be used to test the
resize behaviour. You can either click or drag the mouse in it.


Regarding the sun.awt.noerasebackground, I observe on Windows:
  - In JDK 1.4 and 1.5, without this property, there is a big flickering.
    With this property, no flickering any more.
  - In JDK 1.6 there is no flickering. The property has no visible effect.

I'm adding comments about it (see below).


Regarding the CleanResizeListener, I observe on Windows:
  - In JDK 1.4 and 1.5: It indeed avoids most of the "garbage". But if
    the background colour is not aligned with the contents of the window
    (like here: background grey, contents dark green), the cleaning is
    visually more disturbing than the garbage. This is especially noticeable
    when you click with the mouse in the above test view.
  - In JDK 1.6: There is much less "garbage"; the repaint is quicker.
    The CleanResizeListener's effect is mostly visible as flickering.

Therefore I propose to:
  - Make it possible to turn on/off the CleanResizeListener, on a per-instance
    basis (since it depends on the contents of the window),
  - Document that it should be enabled only after a background colour has been
    set that approximately matches the window's contents.
  - Add a boolean method isCleanResizeRecommended() that returns false in
    JDK 1.6.

How does that sound?

Bruno


Index: src/org/eclipse/albireo/core/AwtEnvironment.java
===================================================================
RCS file: /cvsroot/technology/org.eclipse.albireo/org.eclipse.albireo.core/src/org/eclipse/albireo/core/AwtEnvironment.java,v
retrieving revision 1.5
diff -c -3 -r1.5 AwtEnvironment.java
*** src/org/eclipse/albireo/core/AwtEnvironment.java    1 Feb 2008 19:15:35 -0000       1.5
--- src/org/eclipse/albireo/core/AwtEnvironment.java    11 Feb 2008 20:52:03 -0000
***************
*** 114,122 ****
          
          /*
           * This property removes a large amount of flicker from embedded swing
!          * components. Ideally it would be set lazily,
           * but since its value is read once and cached by AWT, it needs
           * to be set before any AWT/Swing APIs are called.
           */       
          // TODO: this is effective only on Windows.
          System.setProperty("sun.awt.noerasebackground", "true"); //$NON-NLS-1$//$NON-NLS-2$
--- 114,123 ----
          
          /*
           * This property removes a large amount of flicker from embedded swing
!          * components in JDK 1.4 and 1.5. Ideally it would be set lazily,
           * but since its value is read once and cached by AWT, it needs
           * to be set before any AWT/Swing APIs are called.
+          * This setting is no longer needed in JDK 1.6.
           */       
          // TODO: this is effective only on Windows.
          System.setProperty("sun.awt.noerasebackground", "true"); //$NON-NLS-1$//$NON-NLS-2$