-
Notifications
You must be signed in to change notification settings - Fork 1
/
JfxComponentController.kt
47 lines (40 loc) · 1.5 KB
/
JfxComponentController.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package javafx
import exception.catch
import javafx.application.Platform
import javafx.embed.swing.JFXPanel
import javafx.scene.Scene
import javafx.scene.layout.StackPane
import javafx.scene.media.MediaView
import player.PlayerController
import player.component.ComponentRenderer
import java.awt.Dimension
import java.awt.event.ComponentAdapter
import java.awt.event.ComponentEvent
class JfxComponentController constructor(
private val controller: JfxController = JfxController(),
) : ComponentRenderer, PlayerController by controller {
private val view by lazy { MediaView() }
override val component by lazy { JFXPanel() }
override fun load(url: String) = catch {
controller.load(url)
controller.player?.run {
view.mediaPlayer?.stop()
view.mediaPlayer?.dispose()
view.mediaPlayer = this
Platform.runLater {
val width = media.width
val height = media.height
component.preferredSize = Dimension(width, height)
component.addComponentListener(object : ComponentAdapter() {
override fun componentResized(e: ComponentEvent?) {
view.fitWidth = component.width.toDouble()
view.fitHeight = component.height.toDouble()
}
})
val stackPane = StackPane(view)
val scene = Scene(stackPane)
component.scene = scene
}
}
}
}