forked from nova/jmonkey-test
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.5 KiB
88 lines
2.5 KiB
package wow.doge.mygame.implicits
|
|
|
|
import javafx.{
|
|
collections => jfxc,
|
|
event => jfxe,
|
|
geometry => jfxg,
|
|
scene => jfxs,
|
|
util => jfxu
|
|
}
|
|
import javafx.scene.{input => jfxsi, layout => jfxsl, paint => jfxsp}
|
|
import scalafx.scene.Scene
|
|
import monix.execution.Cancelable
|
|
import monix.reactive.OverflowStrategy
|
|
import monix.reactive.Observable
|
|
import monix.execution.Ack
|
|
import scalafx.scene.control.ButtonBase
|
|
|
|
object JavaFXMonixObservables {
|
|
|
|
implicit final class SceneObservables(private val scene: Scene)
|
|
extends AnyVal {
|
|
def observableMousePressed(): Observable[jfxsi.MouseEvent] = {
|
|
import monix.execution.cancelables.SingleAssignCancelable
|
|
Observable.create(OverflowStrategy.Unbounded) { sub =>
|
|
val c = SingleAssignCancelable()
|
|
val l = new jfxe.EventHandler[jfxsi.MouseEvent] {
|
|
override def handle(event: jfxsi.MouseEvent): Unit = {
|
|
if (sub.onNext(event) == Ack.Stop) c.cancel()
|
|
}
|
|
}
|
|
|
|
scene.onMousePressed = l
|
|
c := Cancelable(() =>
|
|
scene.removeEventHandler(
|
|
jfxsi.MouseEvent.MOUSE_PRESSED,
|
|
l
|
|
)
|
|
)
|
|
c
|
|
}
|
|
}
|
|
def observableMouseDragged(): Observable[jfxsi.MouseEvent] = {
|
|
import monix.execution.cancelables.SingleAssignCancelable
|
|
Observable.create(OverflowStrategy.Unbounded) { sub =>
|
|
val c = SingleAssignCancelable()
|
|
val l = new jfxe.EventHandler[jfxsi.MouseEvent] {
|
|
override def handle(event: jfxsi.MouseEvent): Unit = {
|
|
if (sub.onNext(event) == Ack.Stop) c.cancel()
|
|
}
|
|
}
|
|
|
|
scene.onMouseDragged = l
|
|
c := Cancelable(() =>
|
|
scene.removeEventHandler(
|
|
jfxsi.MouseEvent.MOUSE_DRAGGED,
|
|
l
|
|
)
|
|
)
|
|
c
|
|
}
|
|
}
|
|
}
|
|
|
|
implicit final class OnActionObservable(
|
|
private val button: ButtonBase
|
|
) extends AnyVal {
|
|
def observableAction(): Observable[jfxe.ActionEvent] = {
|
|
import monix.execution.cancelables.SingleAssignCancelable
|
|
Observable.create(OverflowStrategy.Unbounded) { sub =>
|
|
val c = SingleAssignCancelable()
|
|
val l = new jfxe.EventHandler[jfxe.ActionEvent] {
|
|
override def handle(event: jfxe.ActionEvent): Unit = {
|
|
if (sub.onNext(event) == Ack.Stop) c.cancel()
|
|
}
|
|
}
|
|
|
|
button.onAction = l
|
|
c := Cancelable(() =>
|
|
button.removeEventHandler(
|
|
jfxe.ActionEvent.ACTION,
|
|
l
|
|
)
|
|
)
|
|
c
|
|
}
|
|
}
|
|
}
|
|
}
|