From 914badff318de880826ac8f0e638f6a5b56cd1b7 Mon Sep 17 00:00:00 2001 From: Jegp Date: Tue, 26 Jul 2016 11:52:40 +0200 Subject: [PATCH] Added mouse scroll events --- .../scala/com/repocad/view/event/Event.scala | 45 +++++++++++++++++++ .../scala/com/repocad/web/CanvasView.scala | 3 +- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/main/scala/com/repocad/view/event/Event.scala b/src/main/scala/com/repocad/view/event/Event.scala index 1ecd969..0ce6964 100644 --- a/src/main/scala/com/repocad/view/event/Event.scala +++ b/src/main/scala/com/repocad/view/event/Event.scala @@ -7,19 +7,64 @@ import com.repocad.geom.Vector2D */ trait Event +/** + * An event arriving from the interaction of a mouse. + */ trait MouseEvent extends Event { + /** + * The position of the mouse event relative to the view coordinates. + * + * @return A [[Vector2D]] denoting the x and y coordinates in a 2-d space. + */ def point: Vector2D } case class MouseDown(point: Vector2D) extends Event + case class MouseMove(point: Vector2D) extends Event + case class MouseLeave(point: Vector2D) extends Event + +case class MouseScroll(point: Vector2D, delta: ScrollDistance) extends Event + case class MouseUp(point: Vector2D) extends Event +/** + * An event arriving from the interaction of a keyboard. + */ trait KeyboardEvent extends Event { + + /** + * The string representation of the pressed key. + * + * @return + */ def key: String + + /** + * Descriptions of which modifier keys are currently pressed. + * + * @return A [[ModifierKeys]] object. + */ def modifierKeys: ModifierKeys + } case class KeyDown(key: String, modifierKeys: ModifierKeys) extends KeyboardEvent + case class KeyUp(key: String, modifierKeys: ModifierKeys) extends KeyboardEvent + +/** + * A scrolling distance described by a double value. + * + * @param value The value the scroll event scrolls. + */ +sealed case class ScrollDistance(value: Double) + +case object ScrollDistance { + def apply(value: Double) = if (value >= 0) ScrollUp(value) else ScrollDown(value) +} + +sealed case class ScrollUp(value: Double) extends ScrollDistance(value) + +sealed case class ScrollDown(value: Double) extends ScrollDistance(value) \ No newline at end of file diff --git a/src/main/scala/com/repocad/web/CanvasView.scala b/src/main/scala/com/repocad/web/CanvasView.scala index d1dfa29..1eb8005 100644 --- a/src/main/scala/com/repocad/web/CanvasView.scala +++ b/src/main/scala/com/repocad/web/CanvasView.scala @@ -4,7 +4,7 @@ import com.repocad.geom.{TransformationMatrix, Vector2D} import com.repocad.view.View import com.repocad.view.event.{Event, _} import org.scalajs.dom.MouseEvent -import org.scalajs.dom.raw.HTMLCanvasElement +import org.scalajs.dom.raw.{WheelEvent, HTMLCanvasElement} import scala.scalajs.js.annotation.JSExport @@ -16,6 +16,7 @@ class CanvasView(canvas: HTMLCanvasElement) extends View { canvas.onmousemove = (e: MouseEvent) => enqueueMouseEvent(e, MouseMove) canvas.onmouseleave = (e: MouseEvent) => enqueueMouseEvent(e, MouseLeave) canvas.onmouseup = (e: MouseEvent) => enqueueMouseEvent(e, MouseUp) + canvas.onmousewheel = (e: WheelEvent) => enqueueMouseEvent(e, MouseScroll(_, ScrollDistance(e.deltaMode))) canvas.onkeydown = (e: org.scalajs.dom.KeyboardEvent) => enqueueKeyboardEvent(e, KeyDown) canvas.onkeyup = (e: org.scalajs.dom.KeyboardEvent) => enqueueKeyboardEvent(e, KeyUp)