You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by no...@apache.org on 2012/01/30 08:47:45 UTC

svn commit: r1237556 - /pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/DropShadowDecorator.java

Author: noelgrandin
Date: Mon Jan 30 07:47:45 2012
New Revision: 1237556

URL: http://svn.apache.org/viewvc?rev=1237556&view=rev
Log:
PIVOT-836 Improve Performance of Graphics
Apply patch from Piotr Kołaczkowski to speed up drawing of drop shadow

Modified:
    pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/DropShadowDecorator.java

Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/DropShadowDecorator.java
URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/DropShadowDecorator.java?rev=1237556&r1=1237555&r2=1237556&view=diff
==============================================================================
--- pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/DropShadowDecorator.java (original)
+++ pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/DropShadowDecorator.java Mon Jan 30 07:47:45 2012
@@ -16,8 +16,7 @@
  */
 package org.apache.pivot.wtk.effects;
 
-import java.awt.Color;
-import java.awt.Graphics2D;
+import java.awt.*;
 import java.awt.geom.AffineTransform;
 import java.awt.image.BufferedImage;
 import java.awt.image.Raster;
@@ -178,16 +177,19 @@ public class DropShadowDecorator impleme
                 || shadowImage.getWidth() != width + 2 * blurRadius
                 || shadowImage.getHeight() != height + 2 * blurRadius) {
                 // Recreate the shadow
-                BufferedImage rectangleImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+                BufferedImage rectangleImage =
+                    graphics.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.OPAQUE);
                 Graphics2D rectangleImageGraphics = rectangleImage.createGraphics();
                 rectangleImageGraphics.setColor(Color.BLACK);
                 rectangleImageGraphics.fillRect(0, 0, width, height);
                 rectangleImageGraphics.dispose();
-
                 shadowImage = createShadow(rectangleImage);
             }
 
-            graphics.drawImage(shadowImage, xOffset - blurRadius, yOffset - blurRadius, null);
+            // Avoid drawing shadow if it will be covered by the component itself:
+            Bounds paintBounds = new Bounds(0, 0, width, height);
+            if (!component.isOpaque() || !paintBounds.contains(new Bounds(graphics.getClipBounds())))
+                graphics.drawImage(shadowImage, xOffset - blurRadius, yOffset - blurRadius, null);
         } else {
             shadowImage = null;
         }
@@ -247,9 +249,11 @@ public class DropShadowDecorator impleme
 
         int aSum;
 
-        BufferedImage dst = new BufferedImage(dstWidth, dstHeight,
-            BufferedImage.TYPE_INT_ARGB);
-
+        Graphics2D srcGraphics = src.createGraphics();
+        BufferedImage dst = srcGraphics.getDeviceConfiguration()
+                .createCompatibleImage(dstWidth, dstHeight, Transparency.TRANSLUCENT);
+        srcGraphics.dispose();
+                
         int[] dstBuffer = new int[dstWidth * dstHeight];
         int[] srcBuffer = new int[srcWidth * srcHeight];