瀏覽代碼

use lambda for timer
only allow enqueue once for MaterialPreviewRenderer

rickard 1 天之前
父節點
當前提交
e1f10dda18

+ 9 - 13
jme3-materialeditor/src/com/jme3/gde/materials/MaterialPreviewRenderer.java

@@ -1,5 +1,5 @@
 /*
 /*
- *  Copyright (c) 2009-2023 jMonkeyEngine
+ *  Copyright (c) 2009-2025 jMonkeyEngine
  *  All rights reserved.
  *  All rights reserved.
  * 
  * 
  *  Redistribution and use in source and binary forms, with or without
  *  Redistribution and use in source and binary forms, with or without
@@ -235,17 +235,10 @@ public class MaterialPreviewRenderer implements SceneListener {
 
 
     public void switchDisplay(DisplayType type) {
     public void switchDisplay(DisplayType type) {
         switch (type) {
         switch (type) {
-            case Box:
-                currentGeom = box;
-                break;
-            case Sphere:
-                currentGeom = sphere;
-                break;
-            case Quad:
-                currentGeom = quad;
-                break;
-            case Teapot:
-                currentGeom = teapot;
+            case Box -> currentGeom = box;
+            case Sphere -> currentGeom = sphere;
+            case Quad -> currentGeom = quad;
+            case Teapot -> currentGeom = teapot;
         }
         }
         showMaterial(currentMaterial);
         showMaterial(currentMaterial);
     }
     }
@@ -283,7 +276,9 @@ public class MaterialPreviewRenderer implements SceneListener {
      * material
      * material
      */
      */
     public void refreshOnly() {
     public void refreshOnly() {
-        previewRequested = true;
+        if(previewRequested) {
+            return;
+        }
         SceneApplication.getApplication().enqueue((Callable<Object>) () -> {
         SceneApplication.getApplication().enqueue((Callable<Object>) () -> {
             if (currentGeom.getMaterial() != null) {
             if (currentGeom.getMaterial() != null) {
                 PreviewRequest request = new PreviewRequest(MaterialPreviewRenderer.this, currentGeom, label.getWidth(), label.getHeight());
                 PreviewRequest request = new PreviewRequest(MaterialPreviewRenderer.this, currentGeom, label.getWidth(), label.getHeight());
@@ -293,6 +288,7 @@ public class MaterialPreviewRenderer implements SceneListener {
             }
             }
             return null;
             return null;
         });
         });
+        previewRequested = true;
     }
     }
 
 
 }
 }

+ 2 - 6
jme3-materialeditor/src/com/jme3/gde/materials/multiview/widgets/MaterialPreviewWidget.java

@@ -42,7 +42,6 @@ import com.jme3.gde.core.scene.SceneRequest;
 import com.jme3.gde.materials.MaterialPreviewRenderer;
 import com.jme3.gde.materials.MaterialPreviewRenderer;
 import com.jme3.gde.materials.multiview.widgets.icons.Icons;
 import com.jme3.gde.materials.multiview.widgets.icons.Icons;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 import javax.swing.Timer;
 import javax.swing.Timer;
 
 
 /**
 /**
@@ -60,14 +59,11 @@ public class MaterialPreviewWidget extends javax.swing.JPanel {
         initComponents();        
         initComponents();        
     }
     }
     
     
-    private final Timer animationTimer = new Timer(20, new ActionListener() {
-        @Override
-        public void actionPerformed(ActionEvent e) {
+    private final Timer animationTimer = new Timer(20, (ActionEvent e) -> {
             if (animationEnabled && matRenderer != null) {
             if (animationEnabled && matRenderer != null) {
                 matRenderer.refreshOnly();
                 matRenderer.refreshOnly();
             }
             }
-        }
-    });
+        });
 
 
     private  void initWidget() {
     private  void initWidget() {
         sphereButton.setSelected(true);
         sphereButton.setSelected(true);