From cb2658b43877e6445fc6cf263786d8c0eb7b7799 Mon Sep 17 00:00:00 2001 From: RoelofRuis Date: Sat, 23 May 2020 13:05:31 +0200 Subject: [PATCH 1/6] Added ImageBitmap and 2 functions of ImageCapture class --- .../mediastream/MediaStream.scala | 40 ++++++++++++++++++- src/main/scala/org/scalajs/dom/raw/lib.scala | 35 ++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala b/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala index c8b9ba16f..66266d499 100644 --- a/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala +++ b/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala @@ -6,7 +6,7 @@ package org.scalajs.dom.experimental.mediastream import scala.scalajs.js import scala.scalajs.js.| import scala.scalajs.js.annotation._ -import org.scalajs.dom.raw.{DOMException, Event, EventInit, EventTarget} +import org.scalajs.dom.raw.{Blob, DOMException, Event, EventInit, EventTarget, ImageBitmap} /** * The MediaStream @@ -626,3 +626,41 @@ trait MediaTrackSupportedConstraints extends js.Object { var deviceId: js.UndefOr[Boolean] = js.undefined var groupId: js.UndefOr[Boolean] = js.undefined } + +/** + * The ImageCapture interface of the MediaStream Image Capture API provides methods + * to enable the capture of images or photos from a camera or other photographic + * device referenced through a valid MediaStreamTrack. + * + * MDN + */ +@js.native +@JSGlobal +class ImageCapture( + init: js.UndefOr[MediaStreamTrack] +) extends js.Object { + + /** + * Returns a reference to the MediaStreamTrack passed to the constructor. + * + * MDN + */ + val track: MediaStreamTrack = js.native + + /** + * Takes a single exposure using the video capture device sourcing a MediaStreamTrack and + * returns a Promise that resolves with a Blob containing the data. + * + * MDN + */ + def takePhoto(): js.Promise[Blob] = js.native + + /** + * Takes a snapshot of the live video in a MediaStreamTrack, returning an ImageBitmap, if + * successful. + * + * MDN + */ + def grabFrame(): js.Promise[ImageBitmap] = js.native + +} diff --git a/src/main/scala/org/scalajs/dom/raw/lib.scala b/src/main/scala/org/scalajs/dom/raw/lib.scala index 1d49e9aa9..2501fb4c4 100644 --- a/src/main/scala/org/scalajs/dom/raw/lib.scala +++ b/src/main/scala/org/scalajs/dom/raw/lib.scala @@ -6045,6 +6045,41 @@ class ImageData extends js.Object { def height: Int = js.native } +/** + * The ImageBitmap interface represents a bitmap image which can be drawn to a <canvas> + * without undue latency. It can be created from a variety of source objects using the + * createImageBitmap() factory method. ImageBitmap provides an asynchronous and resource + * efficient pathway to prepare textures for rendering in WebGL. + * + * MDN + */ +@js.native +@JSGlobal +class ImageBitmap extends js.Object { + + /** + * Is an unsigned long representing the height, in CSS pixels, of the ImageBitmap. + * + * MDN + */ + def height: Long = js.native + + /** + * Is an unsigned long representing the width, in CSS pixels, of the ImageBitmap. + * + * MDN + */ + def width: Long = js.native + + /** + * Dispose of all graphical resources associated with an ImageBitmap. + * + * MDN + */ + def close(): Unit = js.native + +} + /** * A collection of nodes returned by Node.attributes (also potentially for * DocumentType.entities, DocumentType.notations). NamedNodeMaps are not in any From dcd4bc524137b839c565d870a4b1bcfb138f39b1 Mon Sep 17 00:00:00 2001 From: RoelofRuis Date: Sat, 23 May 2020 15:59:02 +0200 Subject: [PATCH 2/6] Use Int instead of Long --- src/main/scala/org/scalajs/dom/raw/lib.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/org/scalajs/dom/raw/lib.scala b/src/main/scala/org/scalajs/dom/raw/lib.scala index 2501fb4c4..f5fc5cca1 100644 --- a/src/main/scala/org/scalajs/dom/raw/lib.scala +++ b/src/main/scala/org/scalajs/dom/raw/lib.scala @@ -6062,14 +6062,14 @@ class ImageBitmap extends js.Object { * * MDN */ - def height: Long = js.native + def height: Int = js.native /** * Is an unsigned long representing the width, in CSS pixels, of the ImageBitmap. * * MDN */ - def width: Long = js.native + def width: Int = js.native /** * Dispose of all graphical resources associated with an ImageBitmap. From d45e972da6c63cfb0a4e4c94293ee81aa46cd7d8 Mon Sep 17 00:00:00 2001 From: RoelofRuis Date: Sat, 23 May 2020 16:22:58 +0200 Subject: [PATCH 3/6] ImageCapture always requires MediaStreamTrack in constructor --- .../org/scalajs/dom/experimental/mediastream/MediaStream.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala b/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala index 66266d499..2b111e440 100644 --- a/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala +++ b/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala @@ -637,7 +637,7 @@ trait MediaTrackSupportedConstraints extends js.Object { @js.native @JSGlobal class ImageCapture( - init: js.UndefOr[MediaStreamTrack] + init: MediaStreamTrack ) extends js.Object { /** From 37c14126b84bd47c74bbe6987a1a96e82f347398 Mon Sep 17 00:00:00 2001 From: RoelofRuis Date: Sat, 23 May 2020 16:54:24 +0200 Subject: [PATCH 4/6] fixed formatting --- .../scalajs/dom/experimental/mediastream/MediaStream.scala | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala b/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala index 2b111e440..3efcf473e 100644 --- a/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala +++ b/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala @@ -3,10 +3,11 @@ */ package org.scalajs.dom.experimental.mediastream +import org.scalajs.dom.raw._ + import scala.scalajs.js -import scala.scalajs.js.| import scala.scalajs.js.annotation._ -import org.scalajs.dom.raw.{Blob, DOMException, Event, EventInit, EventTarget, ImageBitmap} +import scala.scalajs.js.| /** * The MediaStream @@ -637,7 +638,7 @@ trait MediaTrackSupportedConstraints extends js.Object { @js.native @JSGlobal class ImageCapture( - init: MediaStreamTrack + init: MediaStreamTrack ) extends js.Object { /** From ef3ecb524920676060d35a76042e232d232c29db Mon Sep 17 00:00:00 2001 From: David Barri Date: Sun, 5 Sep 2021 08:10:59 +1000 Subject: [PATCH 5/6] Post-merge fixes + `prePR` --- api-reports/2_12.txt | 4 ++ api-reports/2_13.txt | 4 ++ .../dom/WindowOrWorkerGlobalScope.scala | 4 ++ .../mediastream/MediaStream.scala | 44 ++++++++----------- src/main/scala/org/scalajs/dom/lib.scala | 34 -------------- 5 files changed, 31 insertions(+), 59 deletions(-) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index 1802322bd..1cecf7408 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -13250,6 +13250,7 @@ IDBVersionChangeEventInit[JT] var composed: js.UndefOr[Boolean] IDBVersionChangeEventInit[JT] var newVersion: js.UndefOr[Integer] IDBVersionChangeEventInit[JT] var oldVersion: js.UndefOr[Int] IDBVersionChangeEventInit[JT] var scoped: js.UndefOr[Boolean] +ImageBitmap[JT] def close(): Unit ImageBitmap[JT] def height: Double ImageBitmap[JT] def width: Double ImageData[JC] def data: js.Array[Int] @@ -23627,6 +23628,9 @@ experimental/mediastream/AudioTrackList[JT] var onchange: js.Function1[Event, An experimental/mediastream/AudioTrackList[JT] var onremovetrack: js.Function1[Event, Any] experimental/mediastream/AudioTrackList[JT] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit experimental/mediastream/AudioTrackList[JT] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit +experimental/mediastream/ImageCapture[JC] def grabFrame(): js.Promise[ImageBitmap] +experimental/mediastream/ImageCapture[JC] def takePhoto(): js.Promise[Blob] +experimental/mediastream/ImageCapture[JC] val track: MediaStreamTrack experimental/mediastream/MediaDeviceInfo[JT] val deviceId: String experimental/mediastream/MediaDeviceInfo[JT] val groupId: String experimental/mediastream/MediaDeviceInfo[JT] val kind: MediaDeviceKind diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index 1802322bd..1cecf7408 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -13250,6 +13250,7 @@ IDBVersionChangeEventInit[JT] var composed: js.UndefOr[Boolean] IDBVersionChangeEventInit[JT] var newVersion: js.UndefOr[Integer] IDBVersionChangeEventInit[JT] var oldVersion: js.UndefOr[Int] IDBVersionChangeEventInit[JT] var scoped: js.UndefOr[Boolean] +ImageBitmap[JT] def close(): Unit ImageBitmap[JT] def height: Double ImageBitmap[JT] def width: Double ImageData[JC] def data: js.Array[Int] @@ -23627,6 +23628,9 @@ experimental/mediastream/AudioTrackList[JT] var onchange: js.Function1[Event, An experimental/mediastream/AudioTrackList[JT] var onremovetrack: js.Function1[Event, Any] experimental/mediastream/AudioTrackList[JT] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], options: EventListenerOptions): Unit experimental/mediastream/AudioTrackList[JT] def removeEventListener[T <: Event](`type`: String, listener: js.Function1[T, _], useCapture: Boolean?): Unit +experimental/mediastream/ImageCapture[JC] def grabFrame(): js.Promise[ImageBitmap] +experimental/mediastream/ImageCapture[JC] def takePhoto(): js.Promise[Blob] +experimental/mediastream/ImageCapture[JC] val track: MediaStreamTrack experimental/mediastream/MediaDeviceInfo[JT] val deviceId: String experimental/mediastream/MediaDeviceInfo[JT] val groupId: String experimental/mediastream/MediaDeviceInfo[JT] val kind: MediaDeviceKind diff --git a/src/main/scala/org/scalajs/dom/WindowOrWorkerGlobalScope.scala b/src/main/scala/org/scalajs/dom/WindowOrWorkerGlobalScope.scala index 1cee8a328..22bbfa2dd 100644 --- a/src/main/scala/org/scalajs/dom/WindowOrWorkerGlobalScope.scala +++ b/src/main/scala/org/scalajs/dom/WindowOrWorkerGlobalScope.scala @@ -96,6 +96,10 @@ trait ImageBitmap extends js.Object { /** An unsigned long representing the width, in CSS pixels, of the ImageData. */ def width: Double = js.native + + /** Dispose of all graphical resources associated with an ImageBitmap. + */ + def close(): Unit = js.native } trait CreateImageBitmapOptions extends js.Object { diff --git a/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala b/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala index 3d3dfc13b..1a6561243 100644 --- a/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala +++ b/src/main/scala/org/scalajs/dom/experimental/mediastream/MediaStream.scala @@ -2,7 +2,7 @@ */ package org.scalajs.dom.experimental.mediastream -import org.scalajs.dom.{Event, EventInit, EventTarget, TimeRanges} +import org.scalajs.dom._ import scala.scalajs.js import scala.scalajs.js.annotation._ import scala.scalajs.js.| @@ -525,40 +525,34 @@ trait MediaTrackSupportedConstraints extends js.Object { var groupId: js.UndefOr[Boolean] = js.undefined } -/** - * The ImageCapture interface of the MediaStream Image Capture API provides methods - * to enable the capture of images or photos from a camera or other photographic - * device referenced through a valid MediaStreamTrack. - * - * MDN - */ +/** The ImageCapture interface of the MediaStream Image Capture API provides methods to enable the capture of images or + * photos from a camera or other photographic device referenced through a valid MediaStreamTrack. + * + * MDN + */ @js.native @JSGlobal class ImageCapture( init: MediaStreamTrack ) extends js.Object { - /** - * Returns a reference to the MediaStreamTrack passed to the constructor. - * - * MDN - */ + /** Returns a reference to the MediaStreamTrack passed to the constructor. + * + * MDN + */ val track: MediaStreamTrack = js.native - /** - * Takes a single exposure using the video capture device sourcing a MediaStreamTrack and - * returns a Promise that resolves with a Blob containing the data. - * - * MDN - */ + /** Takes a single exposure using the video capture device sourcing a MediaStreamTrack and returns a Promise that + * resolves with a Blob containing the data. + * + * MDN + */ def takePhoto(): js.Promise[Blob] = js.native - /** - * Takes a snapshot of the live video in a MediaStreamTrack, returning an ImageBitmap, if - * successful. - * - * MDN - */ + /** Takes a snapshot of the live video in a MediaStreamTrack, returning an ImageBitmap, if successful. + * + * MDN + */ def grabFrame(): js.Promise[ImageBitmap] = js.native } diff --git a/src/main/scala/org/scalajs/dom/lib.scala b/src/main/scala/org/scalajs/dom/lib.scala index 0a98d4d9f..8ce74bdcb 100644 --- a/src/main/scala/org/scalajs/dom/lib.scala +++ b/src/main/scala/org/scalajs/dom/lib.scala @@ -5059,40 +5059,6 @@ class ImageData extends js.Object { def height: Int = js.native } -/** - * The ImageBitmap interface represents a bitmap image which can be drawn to a <canvas> - * without undue latency. It can be created from a variety of source objects using the - * createImageBitmap() factory method. ImageBitmap provides an asynchronous and resource - * efficient pathway to prepare textures for rendering in WebGL. - * - * MDN - */ -@js.native -@JSGlobal -class ImageBitmap extends js.Object { - - /** - * Is an unsigned long representing the height, in CSS pixels, of the ImageBitmap. - * - * MDN - */ - def height: Int = js.native - - /** - * Is an unsigned long representing the width, in CSS pixels, of the ImageBitmap. - * - * MDN - */ - def width: Int = js.native - - /** - * Dispose of all graphical resources associated with an ImageBitmap. - * - * MDN - */ - def close(): Unit = js.native -} - /** A collection of nodes returned by Node.attributes (also potentially for DocumentType.entities, * DocumentType.notations). NamedNodeMaps are not in any particular order (unlike NodeList, although they may be * accessed by an index as in an array (they may also be accessed with the item method). A NamedNodeMap object are live From 92ca79076e55b561daf4398f938ef92bff6fcf1a Mon Sep 17 00:00:00 2001 From: David Barri Date: Sun, 5 Sep 2021 08:22:16 +1000 Subject: [PATCH 6/6] Update src/main/scala/org/scalajs/dom/WindowOrWorkerGlobalScope.scala Co-authored-by: Arman Bilge --- src/main/scala/org/scalajs/dom/WindowOrWorkerGlobalScope.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/scala/org/scalajs/dom/WindowOrWorkerGlobalScope.scala b/src/main/scala/org/scalajs/dom/WindowOrWorkerGlobalScope.scala index 22bbfa2dd..83d51ae56 100644 --- a/src/main/scala/org/scalajs/dom/WindowOrWorkerGlobalScope.scala +++ b/src/main/scala/org/scalajs/dom/WindowOrWorkerGlobalScope.scala @@ -98,6 +98,8 @@ trait ImageBitmap extends js.Object { def width: Double = js.native /** Dispose of all graphical resources associated with an ImageBitmap. + * + * MDN */ def close(): Unit = js.native }