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;
|