From be7c333823547a9c8a3fba84322a9caf8d776767 Mon Sep 17 00:00:00 2001 From: wwagner4 Date: Mon, 11 Apr 2016 18:27:46 +0200 Subject: [PATCH] changes --- .../scala/doctus/jvm/impl/DoctusFxImpl.scala | 310 +++++++++--------- .../core/ShowcaseTemplateStillImage.scala | 112 ++++--- 2 files changed, 219 insertions(+), 203 deletions(-) diff --git a/jvm/src/main/scala/doctus/jvm/impl/DoctusFxImpl.scala b/jvm/src/main/scala/doctus/jvm/impl/DoctusFxImpl.scala index 6c04996..6e7e490 100644 --- a/jvm/src/main/scala/doctus/jvm/impl/DoctusFxImpl.scala +++ b/jvm/src/main/scala/doctus/jvm/impl/DoctusFxImpl.scala @@ -1,157 +1,157 @@ -package doctus.jvm.impl - -import doctus.core._ -import doctus.core.util.DoctusPoint -import doctus.jvm.DoctusGraphicsFx -import doctus.jvm.DoctusJvmUtil -import javafx.application.Platform -import javafx.scene.Node -import javafx.scene.canvas.Canvas -import javafx.scene.input.KeyCode -import javafx.scene.input.KeyEvent -import javafx.beans.Observable -import javafx.beans.value.ChangeListener -import javafx.event.Event -import javafx.beans.value.ObservableValue - -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 } - }) - - comp.heightProperty().addListener(new ChangeListener[Number] { - def changed(obs: ObservableValue[_ <: Number], old: Number, nev: Number) { repaint } - }) - - val g = comp.getGraphicsContext2D; - - var paintFun = Option.empty[DoctusGraphics => Unit] - - def onRepaint(f: DoctusGraphics => Unit): Unit = { - paintFun = Some(f) - repaint - } - - def repaint(): Unit = { - paintFun match { - case Some(f) => - val dg = DoctusGraphicsFx(g) - Platform.runLater(new Runnable { - def run = f(dg) - }) - case None => // Nothing to do - } - } +package doctus.jvm.impl + +import doctus.core._ +import doctus.core.util.DoctusPoint +import doctus.jvm.DoctusGraphicsFx +import doctus.jvm.DoctusJvmUtil +import javafx.application.Platform +import javafx.scene.Node +import javafx.scene.canvas.Canvas +import javafx.scene.input.KeyCode +import javafx.scene.input.KeyEvent +import javafx.beans.Observable +import javafx.beans.value.ChangeListener +import javafx.event.Event +import javafx.beans.value.ObservableValue + +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 } + }) + + comp.heightProperty().addListener(new ChangeListener[Number] { + def changed(obs: ObservableValue[_ <: Number], old: Number, nev: Number) { repaint } + }) + + val g = comp.getGraphicsContext2D; + + var paintFun = Option.empty[DoctusGraphics => Unit] + + def onRepaint(f: DoctusGraphics => Unit): Unit = { + paintFun = Some(f) + repaint + } + + def repaint(): Unit = { + paintFun match { + case Some(f) => + val dg = DoctusGraphicsFx(g) + 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 - -} - -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] - var _onStop = Option.empty[DoctusPoint ⇒ Unit] - - comp.setOnMousePressed(DoctusJvmUtil.handler { e => - val x = e.getX - val y = e.getY - _onStart.foreach(f => f(DoctusPoint(x, y))) - }) - - comp.setOnMouseReleased(DoctusJvmUtil.handler { e => - val x = e.getX - val y = e.getY - _onStop.foreach(f => f(DoctusPoint(x, y))) - }) -} - -private[jvm] trait DoctusDraggableFxImpl extends DoctusDraggable { - - def comp: Node - - var _onStart = Option.empty[DoctusPoint ⇒ Unit] - var _onStop = Option.empty[DoctusPoint ⇒ Unit] - var _onDrag = Option.empty[DoctusPoint ⇒ Unit] - - // Members declared in doctus.core.DoctusDraggable - def onDrag(f: DoctusPoint ⇒ Unit): Unit = _onDrag = Some(f) - - // 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 => - println("onDragEntered...") - }) - comp.setOnMouseDragExited(DoctusJvmUtil.handler { e => - println("onDragExited...") - }) - comp.setOnMouseDragged(DoctusJvmUtil.handler { e => - val x = e.getX - val y = e.getY - _onDrag.foreach(f => f(DoctusPoint(x, y))) - }) - comp.setOnMouseDragOver(DoctusJvmUtil.handler { e => - println("onDragOver...") - }) - comp.setOnMouseDragReleased(DoctusJvmUtil.handler { e => - println("onDragExitedReleased...") - }) - comp.setOnMousePressed(DoctusJvmUtil.handler { e => - val x = e.getX - val y = e.getY - _onStart.foreach(f => f(DoctusPoint(x, y))) - }) - comp.setOnMouseReleased(DoctusJvmUtil.handler { e => - val x = e.getX - val y = e.getY - _onStop.foreach(f => f(DoctusPoint(x, y))) - }) - -} - -/** - * Listens to the keyboard. - */ -private[jvm] trait DoctusKeyFxImp extends DoctusKey { - - comp.setFocusTraversable(true) - - def comp: Node - - var _onKeyPressed = Option.empty[DoctusKeyCode ⇒ Unit] - var _onKeyReleased = Option.empty[DoctusKeyCode ⇒ Unit] - - def onKeyPressed(f: DoctusKeyCode ⇒ Unit): Unit = _onKeyPressed = Some(f) - - def onKeyReleased(f: DoctusKeyCode ⇒ Unit): Unit = _onKeyReleased = Some(f) - - def keyCode(e: KeyEvent): Option[DoctusKeyCode] = { - val code: KeyCode = e.getCode - if (code == KeyCode.SPACE) Some(DKC_Space) - else if (code == KeyCode.UP) Some(DKC_Up) - else if (code == KeyCode.DOWN) Some(DKC_Down) - else if (code == KeyCode.LEFT) Some(DKC_Left) - else if (code == KeyCode.RIGHT) Some(DKC_Right) - else if (code == KeyCode.ENTER) Some(DKC_Enter) - else None - } - - comp.setOnKeyPressed(DoctusJvmUtil.handler { e => - _onKeyPressed.foreach { f => keyCode(e).foreach { dkc => f(dkc) } } - }) - comp.setOnKeyReleased(DoctusJvmUtil.handler { e => - _onKeyReleased.foreach { f => keyCode(e).foreach { dkc => f(dkc) } } - }) -} - - - + +} + +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] + var _onStop = Option.empty[DoctusPoint ⇒ Unit] + + comp.setOnMousePressed(DoctusJvmUtil.handler { e => + val x = e.getX + val y = e.getY + _onStart.foreach(f => f(DoctusPoint(x, y))) + }) + + comp.setOnMouseReleased(DoctusJvmUtil.handler { e => + val x = e.getX + val y = e.getY + _onStop.foreach(f => f(DoctusPoint(x, y))) + }) +} + +private[jvm] trait DoctusDraggableFxImpl extends DoctusDraggable { + + def comp: Node + + var _onStart = Option.empty[DoctusPoint ⇒ Unit] + var _onStop = Option.empty[DoctusPoint ⇒ Unit] + var _onDrag = Option.empty[DoctusPoint ⇒ Unit] + + // Members declared in doctus.core.DoctusDraggable + def onDrag(f: DoctusPoint ⇒ Unit): Unit = _onDrag = Some(f) + + // 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 => + println("onDragEntered...") + }) + comp.setOnMouseDragExited(DoctusJvmUtil.handler { e => + println("onDragExited...") + }) + comp.setOnMouseDragged(DoctusJvmUtil.handler { e => + val x = e.getX + val y = e.getY + _onDrag.foreach(f => f(DoctusPoint(x, y))) + }) + comp.setOnMouseDragOver(DoctusJvmUtil.handler { e => + println("onDragOver...") + }) + comp.setOnMouseDragReleased(DoctusJvmUtil.handler { e => + println("onDragExitedReleased...") + }) + comp.setOnMousePressed(DoctusJvmUtil.handler { e => + val x = e.getX + val y = e.getY + _onStart.foreach(f => f(DoctusPoint(x, y))) + }) + comp.setOnMouseReleased(DoctusJvmUtil.handler { e => + val x = e.getX + val y = e.getY + _onStop.foreach(f => f(DoctusPoint(x, y))) + }) + +} + +/** + * Listens to the keyboard. + */ +private[jvm] trait DoctusKeyFxImp extends DoctusKey { + + comp.setFocusTraversable(true) + + def comp: Node + + var _onKeyPressed = Option.empty[DoctusKeyCode ⇒ Unit] + var _onKeyReleased = Option.empty[DoctusKeyCode ⇒ Unit] + + def onKeyPressed(f: DoctusKeyCode ⇒ Unit): Unit = _onKeyPressed = Some(f) + + def onKeyReleased(f: DoctusKeyCode ⇒ Unit): Unit = _onKeyReleased = Some(f) + + def keyCode(e: KeyEvent): Option[DoctusKeyCode] = { + val code: KeyCode = e.getCode + if (code == KeyCode.SPACE) Some(DKC_Space) + else if (code == KeyCode.UP) Some(DKC_Up) + else if (code == KeyCode.DOWN) Some(DKC_Down) + else if (code == KeyCode.LEFT) Some(DKC_Left) + else if (code == KeyCode.RIGHT) Some(DKC_Right) + else if (code == KeyCode.ENTER) Some(DKC_Enter) + else None + } + + comp.setOnKeyPressed(DoctusJvmUtil.handler { e => + _onKeyPressed.foreach { f => keyCode(e).foreach { dkc => f(dkc) } } + }) + comp.setOnKeyReleased(DoctusJvmUtil.handler { e => + _onKeyReleased.foreach { f => keyCode(e).foreach { dkc => f(dkc) } } + }) +} + + + diff --git a/showcase-core/src/main/scala/doctus/core/ShowcaseTemplateStillImage.scala b/showcase-core/src/main/scala/doctus/core/ShowcaseTemplateStillImage.scala index a3ef998..aab49c8 100644 --- a/showcase-core/src/main/scala/doctus/core/ShowcaseTemplateStillImage.scala +++ b/showcase-core/src/main/scala/doctus/core/ShowcaseTemplateStillImage.scala @@ -1,49 +1,65 @@ -package doctus.core - -import doctus.core.template.DoctusTemplate -import doctus.core.util.DoctusPoint -import doctus.core.color.DoctusColorBlue -import java.util.Random -import doctus.core.color.DoctusColorUtil -import doctus.core.color.DoctusColorRgb -import doctus.core.color.DoctusColorRgb -import doctus.core.color.DoctusColorRgb -import doctus.core.template.DoctusTemplate -import doctus.core.color.DoctusColorUtil -import doctus.core.color.DoctusColorRgb -import doctus.core.template.DoctusTemplate -import doctus.core.color.DoctusColorUtil -import doctus.core.util.DoctusPoint - -case class DoctusTemplateStillImage(canvas: DoctusCanvas) extends DoctusTemplate { - - val ran = new Random - - // None means there is no animation. The draw method is called ones - override def frameRate = None - - def draw(g: DoctusGraphics): Unit = { - - val w = canvas.width - val h = canvas.height - - def ranColor: DoctusColor = { - val hue = ran.nextInt(360) - val (r, g, b) = DoctusColorUtil.hsv2rgb(hue, 100, 100) - DoctusColorRgb(r, g, b) - } - - for (i <- 1 to 1000) { - g.fill(ranColor, 20) - g.stroke(DoctusColorBlue, 5) - g.strokeWeight(3) - g.ellipse(DoctusPoint(ran.nextInt(w), ran.nextInt(h)), 100, 100) - } - } - - def pointableDragged(pos: DoctusPoint): Unit = () // Nothing to do in a still image - def pointablePressed(pos: DoctusPoint): Unit = () // Nothing to do in a still image - def pointableReleased(pos: DoctusPoint): Unit = () // Nothing to do in a still image - def keyPressed(code: DoctusKeyCode): Unit = () // Nothing to do in a still image - +package doctus.core + +import doctus.core.template.DoctusTemplate +import doctus.core.util.DoctusPoint +import doctus.core.color.DoctusColorBlue +import java.util.Random +import doctus.core.color.DoctusColorUtil +import doctus.core.color.DoctusColorRgb +import doctus.core.color.DoctusColorRgb +import doctus.core.color.DoctusColorRgb +import doctus.core.template.DoctusTemplate +import doctus.core.color.DoctusColorUtil +import doctus.core.color.DoctusColorRgb +import doctus.core.template.DoctusTemplate +import doctus.core.color.DoctusColorUtil +import doctus.core.util.DoctusPoint +import doctus.core.color.DoctusColorWhite + +case class DoctusTemplateStillImage(canvas: DoctusCanvas) extends DoctusTemplate { + + val ran = new Random + + // None means there is no animation. The draw method is called ones + override def frameRate = None + + def draw(g: DoctusGraphics): Unit = { + + val w = canvas.width + val h = canvas.height + + def ranColor: DoctusColor = { + val hue = ran.nextInt(360) + val (r, g, b) = DoctusColorUtil.hsv2rgb(hue, 100, 100) + DoctusColorRgb(r, g, b) + } + + g.fill(DoctusColorWhite, 255) + g.rect(0, 0, w, h) + + g.noStroke() + var t1 = ran.nextDouble * 100 + var t2 = ran.nextDouble * 100 + for (i <- 1 to 100) { + val c = ranColor + g.fill(c, 4) + val x = ran.nextDouble() * w + val y = ran.nextDouble() * h + (10 to (100 + ran.nextInt(500), 10)) foreach { d => + val dx = math.sin(t1) * 50 + val dy = math.sin(t2) * 50 + g.ellipse(x + dx, y + dy, d, d) + t1 += 0.2 + t1 += 0.21 + } + } + } + + def pointableDragged(pos: DoctusPoint): Unit = () // Nothing to do in a still image + def pointablePressed(pos: DoctusPoint): Unit = () // Nothing to do in a still image + def pointableReleased(pos: DoctusPoint): Unit = () // Nothing to do in a still image + def keyPressed(code: DoctusKeyCode): Unit = { + if (code == DKC_Space) this.canvas.repaint() + } + } \ No newline at end of file