modules/swt/src/main/java/javafx/embed/swt/FXCanvas.java

Print this page




 500 
 501     private void widgetDisposed(DisposeEvent de) {
 502         setDropTarget(null);
 503         if (stage != null) {
 504             stage.hide();
 505         }
 506     }
 507 
 508     double lastScaleFactor = 1.0;
 509     int lastWidth, lastHeight;
 510     IntBuffer lastPixelsBuf =  null;
 511     private void paintControl(PaintEvent pe) {
 512         if ((scenePeer == null) || (pixelsBuf == null)) {
 513             return;
 514         }
 515 
 516         double scaleFactor = getScaleFactor();
 517         if (lastScaleFactor != scaleFactor) {
 518             resizePixelBuffer(scaleFactor);
 519             lastScaleFactor = scaleFactor;
 520             scenePeer.setPixelScaleFactor((float)scaleFactor);
 521         }
 522 
 523         // if we can't get the pixels, draw the bits that were there before
 524         IntBuffer buffer = pixelsBuf;
 525         int width = pWidth, height = pHeight;
 526         if (scenePeer.getPixels(pixelsBuf, pWidth, pHeight)) {
 527             width = lastWidth = pWidth;
 528             height = lastHeight = pHeight;
 529             buffer = lastPixelsBuf = pixelsBuf;
 530         } else {
 531             if (lastPixelsBuf == null) return;
 532             width = lastWidth;
 533             height = lastHeight;
 534             buffer = lastPixelsBuf;
 535         }
 536         width = (int)Math.round(width * scaleFactor);
 537         height = (int)Math.round(height * scaleFactor);
 538 
 539         // Consider optimizing this
 540         ImageData imageData = null;


1017                 }
1018                 public void dropAccept(DropTargetEvent event) {
1019                     ignoreLeave = true;
1020                 }
1021             });
1022             return dropTarget;
1023         }
1024 
1025         @Override
1026         public void setEmbeddedScene(EmbeddedSceneInterface embeddedScene) {
1027             scenePeer = embeddedScene;
1028             if (scenePeer == null) {
1029                 return;
1030             }
1031             if (pWidth > 0 && pHeight > 0) {
1032                 scenePeer.setSize(pWidth, pHeight);
1033             }
1034             double scaleFactor = getScaleFactor();
1035             resizePixelBuffer(scaleFactor);
1036             lastScaleFactor = scaleFactor;
1037             scenePeer.setPixelScaleFactor((float)scaleFactor);
1038             scenePeer.setDragStartListener((fxDragSource, dragAction) -> {
1039                 Platform.runLater(() -> {
1040                     DragSource dragSource = createDragSource(fxDragSource, dragAction);
1041                     if (dragSource == null) {
1042                         fxDragSource.dragDropEnd(null);
1043                     } else {
1044                         updateDropTarget();
1045                         FXCanvas.this.notifyListeners(SWT.DragDetect, null);
1046                     }
1047                 });
1048             });
1049             //Force the old drop target to be disposed before creating a new one
1050             setDropTarget(null);
1051             setDropTarget(createDropTarget(embeddedScene));
1052         }
1053 
1054         @Override
1055         public boolean requestFocus() {
1056             Display.getDefault().asyncExec(() -> {
1057                 if (isDisposed()) return;




 500 
 501     private void widgetDisposed(DisposeEvent de) {
 502         setDropTarget(null);
 503         if (stage != null) {
 504             stage.hide();
 505         }
 506     }
 507 
 508     double lastScaleFactor = 1.0;
 509     int lastWidth, lastHeight;
 510     IntBuffer lastPixelsBuf =  null;
 511     private void paintControl(PaintEvent pe) {
 512         if ((scenePeer == null) || (pixelsBuf == null)) {
 513             return;
 514         }
 515 
 516         double scaleFactor = getScaleFactor();
 517         if (lastScaleFactor != scaleFactor) {
 518             resizePixelBuffer(scaleFactor);
 519             lastScaleFactor = scaleFactor;
 520             scenePeer.setPixelScaleFactors((float)scaleFactor, (float)scaleFactor);
 521         }
 522 
 523         // if we can't get the pixels, draw the bits that were there before
 524         IntBuffer buffer = pixelsBuf;
 525         int width = pWidth, height = pHeight;
 526         if (scenePeer.getPixels(pixelsBuf, pWidth, pHeight)) {
 527             width = lastWidth = pWidth;
 528             height = lastHeight = pHeight;
 529             buffer = lastPixelsBuf = pixelsBuf;
 530         } else {
 531             if (lastPixelsBuf == null) return;
 532             width = lastWidth;
 533             height = lastHeight;
 534             buffer = lastPixelsBuf;
 535         }
 536         width = (int)Math.round(width * scaleFactor);
 537         height = (int)Math.round(height * scaleFactor);
 538 
 539         // Consider optimizing this
 540         ImageData imageData = null;


1017                 }
1018                 public void dropAccept(DropTargetEvent event) {
1019                     ignoreLeave = true;
1020                 }
1021             });
1022             return dropTarget;
1023         }
1024 
1025         @Override
1026         public void setEmbeddedScene(EmbeddedSceneInterface embeddedScene) {
1027             scenePeer = embeddedScene;
1028             if (scenePeer == null) {
1029                 return;
1030             }
1031             if (pWidth > 0 && pHeight > 0) {
1032                 scenePeer.setSize(pWidth, pHeight);
1033             }
1034             double scaleFactor = getScaleFactor();
1035             resizePixelBuffer(scaleFactor);
1036             lastScaleFactor = scaleFactor;
1037             scenePeer.setPixelScaleFactors((float)scaleFactor, (float)scaleFactor);
1038             scenePeer.setDragStartListener((fxDragSource, dragAction) -> {
1039                 Platform.runLater(() -> {
1040                     DragSource dragSource = createDragSource(fxDragSource, dragAction);
1041                     if (dragSource == null) {
1042                         fxDragSource.dragDropEnd(null);
1043                     } else {
1044                         updateDropTarget();
1045                         FXCanvas.this.notifyListeners(SWT.DragDetect, null);
1046                     }
1047                 });
1048             });
1049             //Force the old drop target to be disposed before creating a new one
1050             setDropTarget(null);
1051             setDropTarget(createDropTarget(embeddedScene));
1052         }
1053 
1054         @Override
1055         public boolean requestFocus() {
1056             Display.getDefault().asyncExec(() -> {
1057                 if (isDisposed()) return;