]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/color/ColorGradientCanvas.java
Disable flickering in ColorSelectionDialog
[simantics/platform.git] / bundles / org.simantics.utils.ui / src / org / simantics / utils / ui / color / ColorGradientCanvas.java
index 356de7ad0358d401f92cbd3240c74f454a081ad1..c3506f8bbbcbb18efaee5995d3fbc6a697aa0841 100644 (file)
@@ -1,61 +1,67 @@
-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.utils.ui.color;\r
-\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.PaintEvent;\r
-import org.eclipse.swt.events.PaintListener;\r
-import org.eclipse.swt.graphics.GC;\r
-import org.eclipse.swt.graphics.Image;\r
-import org.eclipse.swt.graphics.Rectangle;\r
-import org.eclipse.swt.widgets.Canvas;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Display;\r
-\r
-/**\r
- * \r
- * Canvas that shows color gradients\r
- * \r
- * @author Marko Luukkainen\r
- *\r
- */\r
-public class ColorGradientCanvas extends Canvas{\r
-       ColorGradient gradient;\r
-       int style;\r
-       \r
-       public ColorGradientCanvas(Composite parent, int style) {\r
-               // FIXME : use xor operation to get SWT.HORIZONTAL and SWT.VERTICAL\r
-               // out of style when it's passed to parent\r
-               super(parent,SWT.BORDER);\r
-               this.style = style & (SWT.VERTICAL | SWT.HORIZONTAL) ;\r
-               addPaintListener(new PaintListener() {\r
-               public void paintControl(PaintEvent e) {\r
-                       GC gc = e.gc;\r
-                       Rectangle clip = gc.getClipping();\r
-                       if (gradient != null) {\r
-                               Image image = gradient.getGradientImage(clip.width,clip.height,ColorGradientCanvas.this.style);\r
-                               gc.drawImage(image, 0, 0);\r
-                               image.dispose();                \r
-                       } else {\r
-                               gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
-                               gc.fillRectangle(clip);\r
-                       }\r
-               }\r
-           });\r
-       }\r
-       \r
-       public void setGradient(ColorGradient gradient) {\r
-               this.gradient = gradient;\r
-               this.redraw();\r
-       }               \r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.utils.ui.color;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * 
+ * Canvas that shows color gradients
+ * 
+ * @author Marko Luukkainen
+ *
+ */
+public class ColorGradientCanvas extends Canvas{
+       ColorGradient gradient;
+       int style;
+       
+       public ColorGradientCanvas(Composite parent, int style) {
+               super(parent,(style|SWT.BORDER)&(~(SWT.VERTICAL|SWT.HORIZONTAL))|SWT.DOUBLE_BUFFERED);
+               this.style = style & (SWT.VERTICAL | SWT.HORIZONTAL) ;
+               addPaintListener(createPaintListener());
+       }
+       
+       public void setGradient(ColorGradient gradient) {
+               this.gradient = gradient;
+               this.redraw();
+       }       
+       
+       protected PaintListener createPaintListener() {
+               return new PaintListener() {
+               public void paintControl(PaintEvent e) {
+                       GC gc = e.gc;
+                       Rectangle clip = gc.getClipping();
+                       paintGradient(gc, clip);
+               }
+           };
+       }
+       
+       protected void paintGradient(GC gc, Rectangle clip) {
+               if (gradient != null) {
+                       Image image = gradient.getGradientImage(clip.width,clip.height,ColorGradientCanvas.this.style);
+                       gc.drawImage(image, 0, 0);
+                       image.dispose();                
+               } else {
+                       gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
+                       gc.fillRectangle(clip);
+               }
+       }
+
+}