Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions src/main/scala/com/repocad/view/event/Event.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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)
3 changes: 2 additions & 1 deletion src/main/scala/com/repocad/web/CanvasView.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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)
Expand Down