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.
|
|
package nova.monadic_sfx.ui
import javafx.{scene => jfxc} import monix.bio.Task import monix.execution.Cancelable import monix.execution.cancelables.CompositeCancelable import monix.reactive.subjects.ConcurrentSubject import nova.monadic_sfx.implicits._ import scalafx.beans.property.ObjectProperty import scalafx.scene.Node import scalafx.scene.Parent import scalafx.scene.control.TextField import scalafx.scene.text.Font import cats.effect.Resource
final class FXComponent private ( val node: Parent, private val cancelable: Cancelable ) {
// def toNode(implicit c: CompositeCancelable): Node = {
// c += cancelable
// rootNode
// }
}
object FXComponent { private def acquire(f: CompositeCancelable => Task[Parent]) = for { c <- Task(CompositeCancelable()) p <- f(c) } yield new FXComponent(p, c)
def apply(f: CompositeCancelable => Task[Parent]) = Resource.make(acquire(f))(comp => Task(comp.cancelable.cancel())) }
object TestFXComp { // val testComp =
// FXComponent.resource { implicit c =>
// Task.deferAction { implicit s =>
// Task {
// val sub = ConcurrentSubject.publish[jfxc.text.Font]
// val f = ObjectProperty(Font("hmm"))
// sub.onNext(f())
// new TextField {
// font <-- sub
// font <== f
// }
// }
// }
// }
// val x = for {
// comp <- testComp
// res <- FXComponent.make { implicit c =>
// Task.deferAction { implicit s =>
// Task {
// new BorderPane {
// val sub = ConcurrentSubject.publish[jfxc.text.Font]
// center = FXComponent.fxComponent2Node(comp)
// bottom = new TextField {
// font <-- sub
// }
// }
// }
// }
// }
// } yield res
}
|