Don't access the 3D viewport in layout methods

Fixes #121.
This commit is contained in:
Fingercomp 2023-12-30 21:25:39 +07:00
parent 5d5c003e65
commit 4d598e1da2
No known key found for this signature in database
GPG Key ID: BBC71CEE45D86E37
2 changed files with 10 additions and 6 deletions

View File

@ -8,7 +8,7 @@ import org.lwjgl.opengl.{ARBFramebufferObject, GL11, GL21, GL30}
import scala.collection.mutable
class Viewport3D(val width: Int, var height: Int) extends Resource with Logging {
class Viewport3D(width: Int, height: Int) extends Resource with Logging {
private[graphics] val textureColor = new Texture(width, height, GL21.GL_SRGB8, GL11.GL_UNSIGNED_BYTE, GL11.GL_RGB)
private val textureDepth = new Texture(width, height, GL11.GL_DEPTH_COMPONENT, GL11.GL_FLOAT)

View File

@ -27,7 +27,11 @@ abstract class Viewport3DWidget extends Widget with DragHandler with HoverHandle
protected def createScene(): Scene3D
private lazy val viewport = new Viewport3D(600, 400)
// XXX: the viewport's dimensions must be kept outside the viewport object itself: see #121
private val viewportWidth = 600
private val viewportHeight = 400
private lazy val viewport = new Viewport3D(viewportWidth, viewportHeight)
private var viewportDisposed = false // extra safety
protected val camera: Camera3D = new Camera3D()
@ -55,14 +59,14 @@ abstract class Viewport3DWidget extends Widget with DragHandler with HoverHandle
override protected val layout: Layout = new CopyLayout(this)
override def minimumSize: Size2D = Size2D(viewport.width + 4, viewport.height + 4)
override def minimumSize: Size2D = Size2D(viewportWidth + 4, viewportHeight + 4)
override def maximumSize: Size2D = Size2D(viewport.width + 4, viewport.height + 4)
override def maximumSize: Size2D = Size2D(viewportWidth + 4, viewportHeight + 4)
children :+= new PaddingBox(new Widget {
override def minimumSize: Size2D = Size2D(viewport.width, viewport.height)
override def minimumSize: Size2D = Size2D(viewportWidth, viewportHeight)
override def maximumSize: Size2D = Size2D(viewport.width, viewport.height)
override def maximumSize: Size2D = Size2D(viewportWidth, viewportHeight)
override def draw(g: Graphics): Unit = {
DrawUtils.panel(g, bounds.x - 2, bounds.y - 2, bounds.w + 4, bounds.h + 4)