Class CanvasAWT

java.lang.Object
java.awt.Component
java.awt.Canvas
com.jogamp.opengl.awt.GLCanvas
org.jzy3d.plot3d.rendering.canvas.CanvasAWT
All Implemented Interfaces:
com.jogamp.nativewindow.awt.AWTPrintLifecycle, com.jogamp.nativewindow.NativeSurfaceHolder, com.jogamp.nativewindow.OffscreenLayerOption, 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 CanvasAWT extends com.jogamp.opengl.awt.GLCanvas implements IScreenCanvas, INativeCanvas
CanvasAWT is a base implementation that primarily allows to integrate a Jzy3d chart in an AWT application. Relying on JOGL's
invalid reference
GLPanel
, this canvas can actually be used in AWT, Swing, as well as SWT through org.jzy3d.bridge.swt.Bridge.adapt(swt,awt).
Author:
Martin Pernollet
See Also:
  • Field Details

  • Constructor Details

  • Method Details

    • renderOnceShown

      protected void renderOnceShown()
      AWT may paint this canvas before JOGL realized its drawable, and then send no other paint event if nothing changes : the view of a chart opened empty was never initialized (JDK 8 on Linux). Render once the canvas is shown or resized, until the view is initialized.
    • displayIfNotInitialized

      protected void displayIfNotInitialized()
    • watchPixelScale

      protected void watchPixelScale()
    • newPixelScaleIdentity

      protected float[] newPixelScaleIdentity()
    • newRenderer

      protected Renderer3d newRenderer(IChartFactory factory)
    • getLastRenderingTimeMs

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

      public IAnimator getAnimation()
      Specified by:
      getAnimation in interface IScreenCanvas
    • 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 GLCanvas.setSurfaceScale(float[]) and GLCanvas.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:
    • setPixelScale

      public void setPixelScale(Coord2d scale)
      Specified by:
      setPixelScale in interface ICanvas
    • getPixelScale

      public 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 Coord2d getPixelScaleJVM()
      Specified by:
      getPixelScaleJVM in interface ICanvas
    • getPixelScaleX

      public double getPixelScaleX()
    • getPixelScaleY

      public double getPixelScaleY()
    • resetPixelScale

      protected void resetPixelScale()
      Reset pixel scale to (1,1)
    • 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)
    • dispose

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

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

      public void forceRepaint()
      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
    • triggerMouseEvent

      public void triggerMouseEvent(MouseEvent e)
    • triggerMouseMotionEvent

      public void triggerMouseMotionEvent(MouseEvent e)
    • triggerMouseWheelEvent

      public void triggerMouseWheelEvent(MouseWheelEvent e)
    • 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
    • getDrawable

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

      public Renderer3d getRenderer()
      Specified by:
      getRenderer 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

      @Deprecated public int getRendererWidth()
      Deprecated.
      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

      @Deprecated public int getRendererHeight()
      Deprecated.
      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 Dimension getDimension()
      Specified by:
      getDimension in interface ICanvas
    • isNative

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

      public AWTImageExporter getExporter()
    • setExporter

      public void setExporter(AWTImageExporter exporter)