Author: rwhitcomb Date: Fri Jul 27 20:18:47 2012 New Revision: 1366521 URL: http://svn.apache.org/viewvc?rev=1366521&view=rev Log: PIVOT-860: CPU usage at 100% when displaying an Expander.
The TerraExpanderSkin.paint method was calling "setTitleBarColor" because of the color change before and after the transition due to the enabled state changing. This caused an infinite repaint loop that used 100% CPU and was exacerbating a memory leak which would soon eat up all memory. So, took out the set color in the paint method and implemented the ComponentStateListener method "enabledChanged" which sets the title bar color and avoids the infinite repaint loop. Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraExpanderSkin.java Modified: pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraExpanderSkin.java URL: http://svn.apache.org/viewvc/pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraExpanderSkin.java?rev=1366521&r1=1366520&r2=1366521&view=diff ============================================================================== --- pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraExpanderSkin.java (original) +++ pivot/trunk/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraExpanderSkin.java Fri Jul 27 20:18:47 2012 @@ -285,6 +285,8 @@ public class TerraExpanderSkin extends E Expander expander = (Expander)component; expander.add(titleBarTablePane); + expander.getComponentStateListeners().add(this); + enabledChanged(expander); Image buttonData = expander.isExpanded() ? collapseImage : expandImage; shadeButton = new ShadeButton(buttonData); @@ -467,13 +469,6 @@ public class TerraExpanderSkin extends E graphics.setPaint(borderColor); GraphicsUtilities.drawRect(graphics, 0, 0, width, height); - - Expander expander = (Expander)TerraExpanderSkin.this.getComponent(); - if (expander.isEnabled()) { - setTitleBarColor(shadeButtonColor); - } else { - setTitleBarColor(disabledShadeButtonColor); - } } public Font getTitleBarFont() { @@ -659,6 +654,20 @@ public class TerraExpanderSkin extends E } } + // ComponentStateListener methods + + /** + * {@inheritDoc} + */ + @Override + public void enabledChanged(Component component) { + if (component.isEnabled()) { + setTitleBarColor(shadeButtonColor); + } else { + setTitleBarColor(disabledShadeButtonColor); + } + } + // ExpanderListener methods /**