Skip to content

Commit

Permalink
added showcase for writing an image to a file
Browse files Browse the repository at this point in the history
  • Loading branch information
wwagner4 committed May 1, 2016
1 parent a9cc428 commit 86ca2b6
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 9 deletions.
30 changes: 21 additions & 9 deletions jvm/src/main/scala/doctus/jvm/impl/DoctusFxImpl.scala
Expand Up @@ -15,11 +15,15 @@ private[jvm] trait DoctusCanvasFxImpl extends DoctusCanvas {
def comp: Canvas

comp.widthProperty.addListener(new ChangeListener[Number] {
def changed(obs: ObservableValue[_ <: Number], old: Number, nev: Number) { repaint() }
def changed(obs: ObservableValue[_ <: Number], old: Number, nev: Number) {
repaint()
}
})

comp.heightProperty().addListener(new ChangeListener[Number] {
def changed(obs: ObservableValue[_ <: Number], old: Number, nev: Number) { repaint() }
def changed(obs: ObservableValue[_ <: Number], old: Number, nev: Number) {
repaint()
}
})

val g = comp.getGraphicsContext2D
Expand All @@ -35,13 +39,19 @@ private[jvm] trait DoctusCanvasFxImpl extends DoctusCanvas {
paintFun match {
case Some(f) =>
val dg = DoctusGraphicsFx(g)
Platform.runLater(new Runnable {
def run() = f(dg)
})
if (Platform.isFxApplicationThread) {
f(dg)
} else {
Platform.runLater(new Runnable {
def run() = f(dg)
})
}
case None => // Nothing to do
}
}

def width: Int = comp.getWidth.toInt

def height: Int = comp.getHeight.toInt

}
Expand All @@ -51,6 +61,7 @@ private[jvm] trait DoctusPointableFxImpl extends DoctusPointable {
def comp: Node

def onStart(f: DoctusPoint Unit): Unit = _onStart = Some(f)

def onStop(f: DoctusPoint Unit): Unit = _onStop = Some(f)

var _onStart = Option.empty[DoctusPoint Unit]
Expand Down Expand Up @@ -82,6 +93,7 @@ private[jvm] trait DoctusDraggableFxImpl extends DoctusDraggable {

// Members declared in doctus.core.DoctusPointable
def onStart(f: DoctusPoint Unit): Unit = _onStart = Some(f)

def onStop(f: DoctusPoint Unit): Unit = _onStop = Some(f)

comp.setOnMouseDragEntered(DoctusJvmUtil.handler { e =>
Expand Down Expand Up @@ -115,12 +127,12 @@ private[jvm] trait DoctusDraggableFxImpl extends DoctusDraggable {
}

/**
* Listens to the keyboard.
*/
* Listens to the keyboard.
*/
private[jvm] trait DoctusKeyFxImp extends DoctusKey {

comp.setFocusTraversable(true)

def comp: Node

var _onKeyPressed = Option.empty[DoctusKeyCode Unit]
Expand Down
@@ -0,0 +1,54 @@
package doctus.jvm

import java.io.File
import javafx.application.Application
import javafx.embed.swing.SwingFXUtils
import javafx.scene._
import javafx.scene.canvas.Canvas
import javafx.stage.Stage
import javax.imageio.ImageIO

import doctus.core._
import doctus.core.template.DoctusTemplateController

object ShowcaseTemplateJvmFileStillImage extends App {

Application.launch(classOf[FxApp], args: _*)

class FxApp extends Application {

val homeDir = new File(System.getProperty("user.home"))
val pngFile = new File(homeDir, "ShowcaseTemplateJvmFileStillImage.png")

override def start(stage1: Stage) {

val width = 3000
val height = 2000

val canvas = new Canvas(width, height)

val doctCanvas = DoctusTemplateCanvasFx(canvas)
val doctSched = DoctusSchedulerJvm

val grp = new Group()
grp.getChildren.add(canvas)

// Start the controller
val templ = DoctusTemplateStillImage(doctCanvas)
DoctusTemplateController(templ, doctSched, doctCanvas)
doctCanvas.repaint()

val wi = grp.snapshot(new SnapshotParameters(), null)
require(wi != null)
val bi = SwingFXUtils.fromFXImage(wi, null)
require(bi != null)
ImageIO.write(bi, "png", pngFile)

println("wrote image to '%s'" format pngFile)
System.exit(0)

}
}

}

0 comments on commit 86ca2b6

Please sign in to comment.