Class CanvasSwing

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JPanel
com.jogamp.opengl.awt.GLJPanel
org.jzy3d.plot3d.rendering.canvas.CanvasSwing
All Implemented Interfaces:
com.jogamp.nativewindow.awt.AWTPrintLifecycle, com.jogamp.nativewindow.NativeSurfaceHolder, com.jogamp.nativewindow.ScalableSurface, com.jogamp.nativewindow.WindowClosingProtocol, com.jogamp.opengl.awt.AWTGLAutoDrawable, com.jogamp.opengl.awt.ComponentEvents, com.jogamp.opengl.GLAutoDrawable, com.jogamp.opengl.GLDrawable, com.jogamp.opengl.GLSharedContextSetter, ImageObserver, MenuContainer, Serializable, Accessible, ICanvas, INativeCanvas, IScreenCanvas

public class CanvasSwing extends com.jogamp.opengl.awt.GLJPanel implements IScreenCanvas, INativeCanvas
Author:
Martin Pernollet
See Also:
  • Field Details

  • Constructor Details

    • CanvasSwing

      public CanvasSwing(IChartFactory factory, org.jzy3d.plot3d.rendering.scene.Scene scene, Quality quality, com.jogamp.opengl.GLCapabilitiesImmutable glci)
      Initialize a Canvas3d attached to a Scene, with a given rendering Quality.
  • Method Details

    • watchPixelScale

      protected void watchPixelScale()
    • getLastRenderingTimeMs

      public double getLastRenderingTimeMs()
      Specified by:
      getLastRenderingTimeMs in interface ICanvas
    • setPixelScale

      public void setPixelScale(float[] scale)
      Requests a pixel scale on the underlying JOGL drawable.

      No longer effective on this canvas since JOGL 2.6.0. JOGL commit 900c35c6 (2023-05-15, "No setSurfaceScale(), have AWT toolkit define pixelScale only") made GLJPanel.setSurfaceScale(float[]) and GLJPanel.canSetSurfaceScale() return a hardcoded false, because, as its javadoc puts it, "pixelScale is dictated by AWT mechanisms". JOGL now reads the scale from the AWT GraphicsConfiguration instead of imposing its own, so this call is silently ignored and getPixelScale() keeps reporting the screen scale.

      Practical consequence: Quality.setHiDPI(org.jzy3d.plot3d.rendering.view.HiDPI) with HiDPI.OFF has no effect here. The chart always renders at the physical pixel density of the screen.

      The remaining way to get a 1:1 surface is to lower the scale AWT itself reports, with -Dsun.java2d.uiScale=1. That property is JVM-global, must be set before AWT is initialized, and was verified to work on macOS from JDK 11 through JDK 26.

      Support of HiDPI.OFF across backends:

      • EmulGL (jGL) : supported
      • JOGL AWT (CanvasAWT) and JOGL Swing (CanvasSwing) : not supported since JOGL 2.6.0
      • JOGL NEWT : canSetSurfaceScale() still returns true, but this was not verified end to end
      • PanamaGL : supported by the canvas, which renders to an FBO it sizes itself, but not wired to Quality yet
      Specified by:
      setPixelScale in interface ICanvas
      See Also:
    • getPixelScale

      public org.jzy3d.maths.Coord2d getPixelScale()
      Pixel scale is used to model the pixel ratio thay may be introduced by HiDPI or Retina displays.
      Specified by:
      getPixelScale in interface ICanvas
    • getPixelScaleJVM

      public org.jzy3d.maths.Coord2d getPixelScaleJVM()
      Specified by:
      getPixelScaleJVM in interface ICanvas
    • getPixelScaleX

      public double getPixelScaleX()
    • getPixelScaleY

      public double getPixelScaleY()
    • getAnimation

      public IAnimator getAnimation()
      Specified by:
      getAnimation in interface IScreenCanvas
    • dispose

      public void dispose()
      Specified by:
      dispose in interface ICanvas
    • forceRepaint

      public void forceRepaint()
      Force repaint and ensure that GL2 rendering will occur in the GUI thread, wherever the caller stands.
      Specified by:
      forceRepaint in interface ICanvas
    • screenshot

      public void screenshot(File file) throws IOException
      Specified by:
      screenshot in interface ICanvas
      Throws:
      IOException
    • screenshot

      public com.jogamp.opengl.util.texture.TextureData screenshot()
      Specified by:
      screenshot in interface ICanvas
      Specified by:
      screenshot in interface INativeCanvas
    • getDrawable

      public com.jogamp.opengl.GLAutoDrawable getDrawable()
      Specified by:
      getDrawable in interface INativeCanvas
    • getView

      public View getView()
      Provide a reference to the View that renders into this canvas.
      Specified by:
      getView in interface ICanvas
    • getRendererWidth

      public int getRendererWidth()
      Provide the actual renderer width for the open gl camera settings, which is obtained after a resize event.
      Specified by:
      getRendererWidth in interface ICanvas
    • getRendererHeight

      public int getRendererHeight()
      Provide the actual renderer height for the open gl camera settings, which is obtained after a resize event.
      Specified by:
      getRendererHeight in interface ICanvas
    • getDimension

      public org.jzy3d.maths.Dimension getDimension()
      Specified by:
      getDimension in interface ICanvas
    • getRenderer

      public Renderer3d getRenderer()
      Specified by:
      getRenderer in interface INativeCanvas
    • getDebugInfo

      public String getDebugInfo()
      Specified by:
      getDebugInfo in interface ICanvas
    • addMouseController

      public void addMouseController(Object o)
      Specified by:
      addMouseController in interface ICanvas
    • addKeyController

      public void addKeyController(Object o)
      Specified by:
      addKeyController in interface ICanvas
    • removeMouseController

      public void removeMouseController(Object o)
      Specified by:
      removeMouseController in interface ICanvas
    • removeKeyController

      public void removeKeyController(Object o)
      Specified by:
      removeKeyController in interface ICanvas
    • addCanvasListener

      public void addCanvasListener(ICanvasListener listener)
      Specified by:
      addCanvasListener in interface ICanvas
    • removeCanvasListener

      public void removeCanvasListener(ICanvasListener listener)
      Specified by:
      removeCanvasListener in interface ICanvas
    • getCanvasListeners

      public List<ICanvasListener> getCanvasListeners()
      Specified by:
      getCanvasListeners in interface ICanvas
    • firePixelScaleChanged

      protected void firePixelScaleChanged(double pixelScaleX, double pixelScaleY)
    • isNative

      public boolean isNative()
      Specified by:
      isNative in interface ICanvas
    • getExporter

      public org.jzy3d.io.AWTImageExporter getExporter()
    • setExporter

      public void setExporter(org.jzy3d.io.AWTImageExporter exporter)