在 Canvas 内嵌入 LWJGL 显示,无需修饰
Embed LWJGL Display within Canvas without decoration
我正在使用 Scala swing 显示一个 window,它需要包含一个 LWJGL 显示 object。我发现的唯一方法是使用中间 AWT Canvas 实例将 Display object 绑定到并包装在 Frame:
中
object Run extends SimpleSwingApplication {
System.setProperty("org.lwjgl.opengl.Window.undecorated", "true")
val initialWindowSize = new Dimension(256, 240)
lazy val top = new MainFrame {
title = s"Nescala ${nescala.BuildInfo.version}"
size = initialWindowSize
visible = true
peer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
peer.setFocusable(true)
peer.setIgnoreRepaint(true)
peer.add(canvas)
peer.pack()
}
def canvas:Canvas = new Canvas {
setPreferredSize(initialWindowSize)
setSize(initialWindowSize)
setFocusable(true)
setIgnoreRepaint(true)
requestFocus()
setVisible(true)
override def addNotify() = {
super.addNotify()
attachDisplay()
}
override def removeNotify() = {
detachDisplay()
super.removeNotify()
}
def attachDisplay(): Unit = {
try {
Display.setParent(this)
Display.create
} catch {
case e:LWJGLException => e.printStackTrace()
}
}
def detachDisplay():Unit = Display.destroy()
}
}
然而,当 window 初始化并连接显示器时,它出现在 Canvas/Frame 顶部下方,可能包括标题栏的高度:
如何将显示器连接到具有相同尺寸的 Canvas?我的印象是 window 尺寸是根据 parent 设置的,尽管我曾尝试使用相同的值显式设置 DisplayMode。此外,是否可以使用 LWJGL Display object 而无需将重量级 AWT Canvas object 设置为 parent(但仍在 Swing Ui 元素中)?
关于lightweight/heavyweight混合,我建议直接将canvas添加到框架的默认内容面板,即JPanel
和BorderLayout
。此外,pack()
调用会撤消之前的 size_=
.
我正在使用 Scala swing 显示一个 window,它需要包含一个 LWJGL 显示 object。我发现的唯一方法是使用中间 AWT Canvas 实例将 Display object 绑定到并包装在 Frame:
中object Run extends SimpleSwingApplication {
System.setProperty("org.lwjgl.opengl.Window.undecorated", "true")
val initialWindowSize = new Dimension(256, 240)
lazy val top = new MainFrame {
title = s"Nescala ${nescala.BuildInfo.version}"
size = initialWindowSize
visible = true
peer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
peer.setFocusable(true)
peer.setIgnoreRepaint(true)
peer.add(canvas)
peer.pack()
}
def canvas:Canvas = new Canvas {
setPreferredSize(initialWindowSize)
setSize(initialWindowSize)
setFocusable(true)
setIgnoreRepaint(true)
requestFocus()
setVisible(true)
override def addNotify() = {
super.addNotify()
attachDisplay()
}
override def removeNotify() = {
detachDisplay()
super.removeNotify()
}
def attachDisplay(): Unit = {
try {
Display.setParent(this)
Display.create
} catch {
case e:LWJGLException => e.printStackTrace()
}
}
def detachDisplay():Unit = Display.destroy()
}
}
然而,当 window 初始化并连接显示器时,它出现在 Canvas/Frame 顶部下方,可能包括标题栏的高度:
如何将显示器连接到具有相同尺寸的 Canvas?我的印象是 window 尺寸是根据 parent 设置的,尽管我曾尝试使用相同的值显式设置 DisplayMode。此外,是否可以使用 LWJGL Display object 而无需将重量级 AWT Canvas object 设置为 parent(但仍在 Swing Ui 元素中)?
关于lightweight/heavyweight混合,我建议直接将canvas添加到框架的默认内容面板,即JPanel
和BorderLayout
。此外,pack()
调用会撤消之前的 size_=
.