< prev index next >

modules/javafx.swing/src/main/java/javafx/embed/swing/SwingFXUtils.java

Print this page

        

@@ -26,10 +26,13 @@
 package javafx.embed.swing;
 
 import java.awt.AlphaComposite;
 import java.awt.Graphics2D;
 import java.awt.image.BufferedImage;
+import java.awt.image.DataBufferInt;
+import java.awt.image.SampleModel;
+import java.awt.image.SinglePixelPackedSampleModel;
 import java.nio.IntBuffer;
 import java.util.Set;
 import java.util.HashSet;
 import javafx.application.Platform;
 import javafx.scene.image.Image;

@@ -39,11 +42,10 @@
 import javafx.scene.image.WritableImage;
 import javafx.scene.image.WritablePixelFormat;
 import javafx.scene.paint.Color;
 import com.sun.javafx.tk.Toolkit;
 import javax.swing.SwingUtilities;
-import sun.awt.image.IntegerComponentRaster;
 
 /**
  * This class provides utility methods for converting data types between
  * Swing/AWT and JavaFX formats.
  * @since JavaFX 2.2

@@ -109,14 +111,19 @@
         }
         if (wimg == null) {
             wimg = new WritableImage(bw, bh);
         }
         PixelWriter pw = wimg.getPixelWriter();
-        IntegerComponentRaster icr = (IntegerComponentRaster) bimg.getRaster();
-        int data[] = icr.getDataStorage();
-        int offset = icr.getDataOffset(0);
-        int scan = icr.getScanlineStride();
+        DataBufferInt db = (DataBufferInt)bimg.getRaster().getDataBuffer();
+        int data[] = db.getData();
+        int offset = bimg.getRaster().getDataBuffer().getOffset();
+        int scan =  0;
+        SampleModel sm = bimg.getRaster().getSampleModel();
+        if (sm instanceof SinglePixelPackedSampleModel) {
+            scan = ((SinglePixelPackedSampleModel)sm).getScanlineStride();
+        }
+
         PixelFormat<IntBuffer> pf = (bimg.isAlphaPremultiplied() ?
                                      PixelFormat.getIntArgbPreInstance() :
                                      PixelFormat.getIntArgbInstance());
         pw.setPixels(0, 0, bw, bh, pf, data, offset, scan);
         return wimg;

@@ -279,26 +286,33 @@
             }
         }
         if (bimg == null) {
             bimg = new BufferedImage(iw, ih, prefBimgType);
         }
-        IntegerComponentRaster icr = (IntegerComponentRaster) bimg.getRaster();
-        int offset = icr.getDataOffset(0);
-        int scan = icr.getScanlineStride();
-        int data[] = icr.getDataStorage();
+        DataBufferInt db = (DataBufferInt)bimg.getRaster().getDataBuffer();
+        int data[] = db.getData();
+        int offset = bimg.getRaster().getDataBuffer().getOffset();
+        int scan =  0;
+        SampleModel sm = bimg.getRaster().getSampleModel();
+        if (sm instanceof SinglePixelPackedSampleModel) {
+            scan = ((SinglePixelPackedSampleModel)sm).getScanlineStride();
+        }
+
         WritablePixelFormat<IntBuffer> pf = getAssociatedPixelFormat(bimg);
         pr.getPixels(0, 0, iw, ih, pf, data, offset, scan);
         return bimg;
     }
 
     /**
      * If called from the FX Application Thread
      * invokes a runnable directly blocking the calling code
      * Otherwise
      * uses Platform.runLater without blocking
+     *
+     * @param runnable {@code Runnable} to be invoked
      */
-    static void runOnFxThread(Runnable runnable) {
+    public static void runOnFxThread(Runnable runnable) {
         if (Platform.isFxApplicationThread()) {
             runnable.run();
         } else {
             Platform.runLater(runnable);
         }

@@ -307,25 +321,31 @@
     /**
      * If called from the event dispatch thread
      * invokes a runnable directly blocking the calling code
      * Otherwise
      * uses SwingUtilities.invokeLater without blocking
+     *
+     * @param r {@code Runnable} to be invoked
      */
-    static void runOnEDT(final Runnable r) {
+    public static void runOnEDT(final Runnable r) {
         if (SwingUtilities.isEventDispatchThread()) {
             r.run();
         } else {
             SwingUtilities.invokeLater(r);
         }
     }
 
     private static final Set<Object> eventLoopKeys = new HashSet<>();
 
     /**
-     * The runnable is responsible for leaving the nested event loop.
+     * The runnable is responsible for entering the nested event loop.
+     *
+     * @param nestedLoopKey the Object that identifies the nested event loop,
+     * which must not be null
+     * @param r {@code Runnable} to be invoked
      */
-    static void runOnEDTAndWait(Object nestedLoopKey, Runnable r) {
+    public static void runOnEDTAndWait(Object nestedLoopKey, Runnable r) {
         Toolkit.getToolkit().checkFxUserThread();
 
         if (SwingUtilities.isEventDispatchThread()) {
             r.run();
         } else {

@@ -333,11 +353,17 @@
             SwingUtilities.invokeLater(r);
             Toolkit.getToolkit().enterNestedEventLoop(nestedLoopKey);
         }
     }
 
-    static void leaveFXNestedLoop(Object nestedLoopKey) {
+    /**
+     * The runnable is responsible for leaving the nested event loop.
+     *
+     * @param nestedLoopKey the Object that identifies the nested event loop,
+     * which must not be null
+     */
+    public static void leaveFXNestedLoop(Object nestedLoopKey) {
         if (!eventLoopKeys.contains(nestedLoopKey)) return;
 
         if (Platform.isFxApplicationThread()) {
             Toolkit.getToolkit().exitNestedEventLoop(nestedLoopKey, null);
         } else {
< prev index next >