From 72652bccb8144fbd19f7133caf40f40af5df6b7c Mon Sep 17 00:00:00 2001 From: "dragonfly.ai" Date: Fri, 12 Jan 2024 09:51:54 -0700 Subject: [PATCH 01/11] Added missing constructors to ImageData facade. The ImageData spec references several constructors that scala-js-dom has omitted: https://developer.mozilla.org/en-US/docs/Web/API/ImageData/ImageData --- .../scala/org/scalajs/dom/ImageData.scala | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/dom/src/main/scala/org/scalajs/dom/ImageData.scala b/dom/src/main/scala/org/scalajs/dom/ImageData.scala index ebf20f1d..2b355736 100644 --- a/dom/src/main/scala/org/scalajs/dom/ImageData.scala +++ b/dom/src/main/scala/org/scalajs/dom/ImageData.scala @@ -27,4 +27,46 @@ class ImageData extends js.Object { /** Is an unsigned long representing the actual height, in pixels, of the ImageData. */ def height: Int = js.native + /** + * Create an ImageData instance from an array of pixel data and a width. + * @param data pixel data + * @param width width in pixels + */ + def this(data: js.typedarray.Uint8ClampedArray, width: Int) = this() + + /** + * Create an ImageData instance from an array of pixel data, width, and height. + * @param data pixel data + * @param width width in pixels + * @param height height in pixels + */ + def this(data: js.typedarray.Uint8ClampedArray, width: Int, height: Int) = this() + + /** + * Create a blank ImageData instance from specified width and height. + * + * @param width width in pixels + * @param height height in pixels + */ + def this(width: Int, height: Int) = this() + + /** + * Create a blank ImageData instance from specified width, height, and settings object. + * + * @param width width in pixels + * @param height height in pixels + * @param settings image settings + */ + def this(width: Int, height: Int, setings: js.Object) = this() + + /** + * Create a blank ImageData instance from specified pixel data, width, height, and settings object. + * + * @param data pixel data + * @param width width in pixels + * @param height height in pixels + * @param settings image settings + */ + def this(data: js.typedarray.Uint8ClampedArray, width: Int, height: Int, setings: js.Object) = this() + } From f28f9a94e29f413ff30917a45762e463c508f772 Mon Sep 17 00:00:00 2001 From: "dragonfly.ai" Date: Fri, 12 Jan 2024 09:59:14 -0700 Subject: [PATCH 02/11] Formatting? --- dom/src/main/scala/org/scalajs/dom/ImageData.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/dom/src/main/scala/org/scalajs/dom/ImageData.scala b/dom/src/main/scala/org/scalajs/dom/ImageData.scala index 2b355736..3de37180 100644 --- a/dom/src/main/scala/org/scalajs/dom/ImageData.scala +++ b/dom/src/main/scala/org/scalajs/dom/ImageData.scala @@ -27,6 +27,7 @@ class ImageData extends js.Object { /** Is an unsigned long representing the actual height, in pixels, of the ImageData. */ def height: Int = js.native + /** * Create an ImageData instance from an array of pixel data and a width. * @param data pixel data From 0481e5a274e88959082b0535cb2f26c0daa329c1 Mon Sep 17 00:00:00 2001 From: "dragonfly.ai" Date: Fri, 12 Jan 2024 10:11:39 -0700 Subject: [PATCH 03/11] More formatting changes. Drawing cues from https://github.com/scala-js/scala-js-dom/blob/main/dom/src/main/scala/org/scalajs/dom/InputEvent.scala#L15C89-L17C1 Don't know what the formatting issue is. --- .../scala/org/scalajs/dom/ImageData.scala | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/dom/src/main/scala/org/scalajs/dom/ImageData.scala b/dom/src/main/scala/org/scalajs/dom/ImageData.scala index 3de37180..3781cb4f 100644 --- a/dom/src/main/scala/org/scalajs/dom/ImageData.scala +++ b/dom/src/main/scala/org/scalajs/dom/ImageData.scala @@ -17,17 +17,6 @@ import scala.scalajs.js.annotation._ @JSGlobal class ImageData extends js.Object { - /** Is an unsigned long representing the actual width, in pixels, of the ImageData. */ - def width: Int = js.native - - /** Is a Uint8ClampedArray representing a one-dimensional array containing the data in the RGBA order, with integer - * values between 0 and 255 (included). - */ - def data: js.typedarray.Uint8ClampedArray = js.native - - /** Is an unsigned long representing the actual height, in pixels, of the ImageData. */ - def height: Int = js.native - /** * Create an ImageData instance from an array of pixel data and a width. * @param data pixel data @@ -70,4 +59,15 @@ class ImageData extends js.Object { */ def this(data: js.typedarray.Uint8ClampedArray, width: Int, height: Int, setings: js.Object) = this() + /** Is an unsigned long representing the actual width, in pixels, of the ImageData. */ + def width: Int = js.native + + /** Is a Uint8ClampedArray representing a one-dimensional array containing the data in the RGBA order, with integer + * values between 0 and 255 (included). + */ + def data: js.typedarray.Uint8ClampedArray = js.native + + /** Is an unsigned long representing the actual height, in pixels, of the ImageData. */ + def height: Int = js.native + } From a5884a0c7151fc9edb13ab0af1d4a7c22ed85a84 Mon Sep 17 00:00:00 2001 From: "dragonfly.ai" Date: Fri, 12 Jan 2024 10:28:28 -0700 Subject: [PATCH 04/11] Fixed comment formatting. Imported Uint8ClampedArray to reduce verbosity --- .../scala/org/scalajs/dom/ImageData.scala | 60 +++++++++---------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/dom/src/main/scala/org/scalajs/dom/ImageData.scala b/dom/src/main/scala/org/scalajs/dom/ImageData.scala index 3781cb4f..dac7bd10 100644 --- a/dom/src/main/scala/org/scalajs/dom/ImageData.scala +++ b/dom/src/main/scala/org/scalajs/dom/ImageData.scala @@ -8,6 +8,7 @@ package org.scalajs.dom import scala.scalajs.js import scala.scalajs.js.annotation._ +import js.typedarray.Uint8ClampedArray /** The ImageData interface represents the underlying pixel data of an area of a <canvas> element. It is created * using creators on the CanvasRenderingContext2D object associated with the canvas createImageData() and @@ -18,46 +19,43 @@ import scala.scalajs.js.annotation._ class ImageData extends js.Object { /** - * Create an ImageData instance from an array of pixel data and a width. - * @param data pixel data - * @param width width in pixels - */ - def this(data: js.typedarray.Uint8ClampedArray, width: Int) = this() + * Create an ImageData instance from an array of pixel data and a width. + * @param data pixel data + * @param width width in pixels + */ + def this(data: Uint8ClampedArray, width: Int) = this() /** - * Create an ImageData instance from an array of pixel data, width, and height. - * @param data pixel data - * @param width width in pixels - * @param height height in pixels - */ - def this(data: js.typedarray.Uint8ClampedArray, width: Int, height: Int) = this() + * Create an ImageData instance from an array of pixel data, width, and height. + * @param data pixel data + * @param width width in pixels + * @param height height in pixels + */ + def this(data: Uint8ClampedArray, width: Int, height: Int) = this() /** - * Create a blank ImageData instance from specified width and height. - * - * @param width width in pixels - * @param height height in pixels - */ + * Create a blank ImageData instance from specified width and height. + * @param width width in pixels + * @param height height in pixels + */ def this(width: Int, height: Int) = this() /** - * Create a blank ImageData instance from specified width, height, and settings object. - * - * @param width width in pixels - * @param height height in pixels - * @param settings image settings - */ + * Create a blank ImageData instance from specified width, height, and settings object. + * @param width width in pixels + * @param height height in pixels + * @param settings image settings + */ def this(width: Int, height: Int, setings: js.Object) = this() /** - * Create a blank ImageData instance from specified pixel data, width, height, and settings object. - * - * @param data pixel data - * @param width width in pixels - * @param height height in pixels - * @param settings image settings - */ - def this(data: js.typedarray.Uint8ClampedArray, width: Int, height: Int, setings: js.Object) = this() + * Create a blank ImageData instance from specified pixel data, width, height, and settings object. + * @param data pixel data + * @param width width in pixels + * @param height height in pixels + * @param settings image settings + */ + def this(data: Uint8ClampedArray, width: Int, height: Int, setings: js.Object) = this() /** Is an unsigned long representing the actual width, in pixels, of the ImageData. */ def width: Int = js.native @@ -65,7 +63,7 @@ class ImageData extends js.Object { /** Is a Uint8ClampedArray representing a one-dimensional array containing the data in the RGBA order, with integer * values between 0 and 255 (included). */ - def data: js.typedarray.Uint8ClampedArray = js.native + def data: Uint8ClampedArray = js.native /** Is an unsigned long representing the actual height, in pixels, of the ImageData. */ def height: Int = js.native From 40967046b3dd013fcc47886b001c54e8e3044032 Mon Sep 17 00:00:00 2001 From: c Date: Fri, 12 Jan 2024 11:03:52 -0700 Subject: [PATCH 05/11] Added ImageSettings class to support ImageData constructors. Ran scalafmtAll to fix formatting issues. Fixed typo in settings parameter in ImageData constructors. --- .../scala/org/scalajs/dom/ImageData.scala | 61 +++++++++++-------- .../scala/org/scalajs/dom/ImageSettings.scala | 7 +++ 2 files changed, 42 insertions(+), 26 deletions(-) create mode 100644 dom/src/main/scala/org/scalajs/dom/ImageSettings.scala diff --git a/dom/src/main/scala/org/scalajs/dom/ImageData.scala b/dom/src/main/scala/org/scalajs/dom/ImageData.scala index dac7bd10..78c9fcc0 100644 --- a/dom/src/main/scala/org/scalajs/dom/ImageData.scala +++ b/dom/src/main/scala/org/scalajs/dom/ImageData.scala @@ -18,44 +18,53 @@ import js.typedarray.Uint8ClampedArray @JSGlobal class ImageData extends js.Object { - /** - * Create an ImageData instance from an array of pixel data and a width. - * @param data pixel data - * @param width width in pixels + /** Create an ImageData instance from an array of pixel data and a width. + * @param data + * pixel data + * @param width + * width in pixels */ def this(data: Uint8ClampedArray, width: Int) = this() - /** - * Create an ImageData instance from an array of pixel data, width, and height. - * @param data pixel data - * @param width width in pixels - * @param height height in pixels + /** Create an ImageData instance from an array of pixel data, width, and height. + * @param data + * pixel data + * @param width + * width in pixels + * @param height + * height in pixels */ def this(data: Uint8ClampedArray, width: Int, height: Int) = this() - /** - * Create a blank ImageData instance from specified width and height. - * @param width width in pixels - * @param height height in pixels + /** Create a blank ImageData instance from specified width and height. + * @param width + * width in pixels + * @param height + * height in pixels */ def this(width: Int, height: Int) = this() - /** - * Create a blank ImageData instance from specified width, height, and settings object. - * @param width width in pixels - * @param height height in pixels - * @param settings image settings + /** Create a blank ImageData instance from specified width, height, and settings object. + * @param width + * width in pixels + * @param height + * height in pixels + * @param settings + * image settings */ - def this(width: Int, height: Int, setings: js.Object) = this() + def this(width: Int, height: Int, settings: ImageSettings) = this() - /** - * Create a blank ImageData instance from specified pixel data, width, height, and settings object. - * @param data pixel data - * @param width width in pixels - * @param height height in pixels - * @param settings image settings + /** Create a blank ImageData instance from specified pixel data, width, height, and settings object. + * @param data + * pixel data + * @param width + * width in pixels + * @param height + * height in pixels + * @param settings + * image settings */ - def this(data: Uint8ClampedArray, width: Int, height: Int, setings: js.Object) = this() + def this(data: Uint8ClampedArray, width: Int, height: Int, settings: ImageSettings) = this() /** Is an unsigned long representing the actual width, in pixels, of the ImageData. */ def width: Int = js.native diff --git a/dom/src/main/scala/org/scalajs/dom/ImageSettings.scala b/dom/src/main/scala/org/scalajs/dom/ImageSettings.scala new file mode 100644 index 00000000..4e18a417 --- /dev/null +++ b/dom/src/main/scala/org/scalajs/dom/ImageSettings.scala @@ -0,0 +1,7 @@ +package org.scalajs.dom + +import scala.scalajs.js + +trait ImageSettings extends js.Object { + var colorSpace: js.UndefOr[String] = js.undefined +} From ab2227d5d96d60b23b0e46f2ef01a91b22e81151 Mon Sep 17 00:00:00 2001 From: c Date: Fri, 12 Jan 2024 11:31:17 -0700 Subject: [PATCH 06/11] sbt prePR & Minor change to import statement in ImageData --- api-reports/2_12.txt | 3 ++- api-reports/2_13.txt | 3 ++- dom/src/main/scala/org/scalajs/dom/ImageData.scala | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index 8a425162..ec001e53 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -15651,9 +15651,10 @@ ImageBitmap[JT] def width: Double ImageCapture[JC] def grabFrame(): js.Promise[ImageBitmap] ImageCapture[JC] def takePhoto(): js.Promise[Blob] ImageCapture[JC] val track: MediaStreamTrack -ImageData[JC] def data: js.typedarray.Uint8ClampedArray +ImageData[JC] def data: Uint8ClampedArray ImageData[JC] def height: Int ImageData[JC] def width: Int +ImageSettings[JT] var colorSpace: js.UndefOr[String] InputEvent[JC] def bubbles: Boolean InputEvent[JC] def cancelBubble: Boolean InputEvent[JC] def cancelable: Boolean diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index 8a425162..ec001e53 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -15651,9 +15651,10 @@ ImageBitmap[JT] def width: Double ImageCapture[JC] def grabFrame(): js.Promise[ImageBitmap] ImageCapture[JC] def takePhoto(): js.Promise[Blob] ImageCapture[JC] val track: MediaStreamTrack -ImageData[JC] def data: js.typedarray.Uint8ClampedArray +ImageData[JC] def data: Uint8ClampedArray ImageData[JC] def height: Int ImageData[JC] def width: Int +ImageSettings[JT] var colorSpace: js.UndefOr[String] InputEvent[JC] def bubbles: Boolean InputEvent[JC] def cancelBubble: Boolean InputEvent[JC] def cancelable: Boolean diff --git a/dom/src/main/scala/org/scalajs/dom/ImageData.scala b/dom/src/main/scala/org/scalajs/dom/ImageData.scala index 78c9fcc0..b2ccf295 100644 --- a/dom/src/main/scala/org/scalajs/dom/ImageData.scala +++ b/dom/src/main/scala/org/scalajs/dom/ImageData.scala @@ -8,7 +8,7 @@ package org.scalajs.dom import scala.scalajs.js import scala.scalajs.js.annotation._ -import js.typedarray.Uint8ClampedArray +import scala.scalajs.js.typedarray.Uint8ClampedArray /** The ImageData interface represents the underlying pixel data of an area of a <canvas> element. It is created * using creators on the CanvasRenderingContext2D object associated with the canvas createImageData() and From 773c6ed834909461e057ed5815c3b4b9223ab628 Mon Sep 17 00:00:00 2001 From: c Date: Mon, 18 Mar 2024 07:51:10 -0600 Subject: [PATCH 07/11] prePR Added ImageSettings Object with static values for sRGB and displayP3. --- api-reports/2_12.txt | 2 ++ dom/src/main/scala/org/scalajs/dom/ImageSettings.scala | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index ec001e53..5043750e 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -15655,6 +15655,8 @@ ImageData[JC] def data: Uint8ClampedArray ImageData[JC] def height: Int ImageData[JC] def width: Int ImageSettings[JT] var colorSpace: js.UndefOr[String] +ImageSettings[SO] lazy val displayP3: ImageSettings +ImageSettings[SO] lazy val sRGB: ImageSettings InputEvent[JC] def bubbles: Boolean InputEvent[JC] def cancelBubble: Boolean InputEvent[JC] def cancelable: Boolean diff --git a/dom/src/main/scala/org/scalajs/dom/ImageSettings.scala b/dom/src/main/scala/org/scalajs/dom/ImageSettings.scala index 4e18a417..e4a2555e 100644 --- a/dom/src/main/scala/org/scalajs/dom/ImageSettings.scala +++ b/dom/src/main/scala/org/scalajs/dom/ImageSettings.scala @@ -5,3 +5,8 @@ import scala.scalajs.js trait ImageSettings extends js.Object { var colorSpace: js.UndefOr[String] = js.undefined } + +object ImageSettings { + lazy val sRGB: ImageSettings = js.Dynamic.literal(colorSpace = "srgb").asInstanceOf[ImageSettings] + lazy val displayP3: ImageSettings = js.Dynamic.literal(colorSpace = "display-p3").asInstanceOf[ImageSettings] +} From b874db299d0b26edabaf25eba031ef2d034fbb0a Mon Sep 17 00:00:00 2001 From: c Date: Mon, 18 Mar 2024 08:00:50 -0600 Subject: [PATCH 08/11] prePR got left out of the previous commit. --- api-reports/2_13.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index ec001e53..5043750e 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -15655,6 +15655,8 @@ ImageData[JC] def data: Uint8ClampedArray ImageData[JC] def height: Int ImageData[JC] def width: Int ImageSettings[JT] var colorSpace: js.UndefOr[String] +ImageSettings[SO] lazy val displayP3: ImageSettings +ImageSettings[SO] lazy val sRGB: ImageSettings InputEvent[JC] def bubbles: Boolean InputEvent[JC] def cancelBubble: Boolean InputEvent[JC] def cancelable: Boolean From e48cc27714aac99bbba471709ab2662219ad5f40 Mon Sep 17 00:00:00 2001 From: c Date: Wed, 20 Mar 2024 11:55:42 -0600 Subject: [PATCH 09/11] Renamed ImageSettings to ImageDataSettings, and removed its companion object Added enum PredefinedColorSpace --- api-reports/2_12.txt | 7 ++++--- api-reports/2_13.txt | 7 ++++--- .../org/scalajs/dom/PredefinedColorSpace.scala | 12 ++++++++++++ .../org/scalajs/dom/PredefinedColorSpace.scala | 11 +++++++++++ dom/src/main/scala/org/scalajs/dom/ImageData.scala | 4 ++-- .../scala/org/scalajs/dom/ImageDataSettings.scala | 7 +++++++ .../main/scala/org/scalajs/dom/ImageSettings.scala | 12 ------------ 7 files changed, 40 insertions(+), 20 deletions(-) create mode 100644 dom/src/main/scala-2/org/scalajs/dom/PredefinedColorSpace.scala create mode 100644 dom/src/main/scala-3/org/scalajs/dom/PredefinedColorSpace.scala create mode 100644 dom/src/main/scala/org/scalajs/dom/ImageDataSettings.scala delete mode 100644 dom/src/main/scala/org/scalajs/dom/ImageSettings.scala diff --git a/api-reports/2_12.txt b/api-reports/2_12.txt index 5043750e..f1dafa17 100644 --- a/api-reports/2_12.txt +++ b/api-reports/2_12.txt @@ -15654,9 +15654,7 @@ ImageCapture[JC] val track: MediaStreamTrack ImageData[JC] def data: Uint8ClampedArray ImageData[JC] def height: Int ImageData[JC] def width: Int -ImageSettings[JT] var colorSpace: js.UndefOr[String] -ImageSettings[SO] lazy val displayP3: ImageSettings -ImageSettings[SO] lazy val sRGB: ImageSettings +ImageDataSettings[JT] var colorSpace: js.UndefOr[PredefinedColorSpace] InputEvent[JC] def bubbles: Boolean InputEvent[JC] def cancelBubble: Boolean InputEvent[JC] def cancelable: Boolean @@ -17212,6 +17210,9 @@ PositionError[JT] def message: String PositionOptions[JC] var enableHighAccuracy: Boolean PositionOptions[JC] var maximumAge: Int PositionOptions[JC] var timeout: Int +PredefinedColorSpace[JT] +PredefinedColorSpace[SO] val `display-p3`: PredefinedColorSpace +PredefinedColorSpace[SO] val srgb: PredefinedColorSpace PresentationStyle[JT] PresentationStyle[SO] val attachment: PresentationStyle PresentationStyle[SO] val inline: PresentationStyle diff --git a/api-reports/2_13.txt b/api-reports/2_13.txt index 5043750e..f1dafa17 100644 --- a/api-reports/2_13.txt +++ b/api-reports/2_13.txt @@ -15654,9 +15654,7 @@ ImageCapture[JC] val track: MediaStreamTrack ImageData[JC] def data: Uint8ClampedArray ImageData[JC] def height: Int ImageData[JC] def width: Int -ImageSettings[JT] var colorSpace: js.UndefOr[String] -ImageSettings[SO] lazy val displayP3: ImageSettings -ImageSettings[SO] lazy val sRGB: ImageSettings +ImageDataSettings[JT] var colorSpace: js.UndefOr[PredefinedColorSpace] InputEvent[JC] def bubbles: Boolean InputEvent[JC] def cancelBubble: Boolean InputEvent[JC] def cancelable: Boolean @@ -17212,6 +17210,9 @@ PositionError[JT] def message: String PositionOptions[JC] var enableHighAccuracy: Boolean PositionOptions[JC] var maximumAge: Int PositionOptions[JC] var timeout: Int +PredefinedColorSpace[JT] +PredefinedColorSpace[SO] val `display-p3`: PredefinedColorSpace +PredefinedColorSpace[SO] val srgb: PredefinedColorSpace PresentationStyle[JT] PresentationStyle[SO] val attachment: PresentationStyle PresentationStyle[SO] val inline: PresentationStyle diff --git a/dom/src/main/scala-2/org/scalajs/dom/PredefinedColorSpace.scala b/dom/src/main/scala-2/org/scalajs/dom/PredefinedColorSpace.scala new file mode 100644 index 00000000..74eec11c --- /dev/null +++ b/dom/src/main/scala-2/org/scalajs/dom/PredefinedColorSpace.scala @@ -0,0 +1,12 @@ +package org.scalajs.dom + +import scala.scalajs.js + +@js.native +sealed trait PredefinedColorSpace extends js.Any + +object PredefinedColorSpace { + val srgb: PredefinedColorSpace = "srgb".asInstanceOf[PredefinedColorSpace] + + val `display-p3`: PredefinedColorSpace = "display-p3".asInstanceOf[PredefinedColorSpace] +} diff --git a/dom/src/main/scala-3/org/scalajs/dom/PredefinedColorSpace.scala b/dom/src/main/scala-3/org/scalajs/dom/PredefinedColorSpace.scala new file mode 100644 index 00000000..ef16528b --- /dev/null +++ b/dom/src/main/scala-3/org/scalajs/dom/PredefinedColorSpace.scala @@ -0,0 +1,11 @@ +package org.scalajs.dom + +import scala.scalajs.js + +opaque type PredefinedColorSpace <: String = String + +object PredefinedColorSpace { + val srgb: PredefinedColorSpace = "srgb" + + val `display-p3`: PredefinedColorSpace = "display-p3" +} \ No newline at end of file diff --git a/dom/src/main/scala/org/scalajs/dom/ImageData.scala b/dom/src/main/scala/org/scalajs/dom/ImageData.scala index b2ccf295..82c1b863 100644 --- a/dom/src/main/scala/org/scalajs/dom/ImageData.scala +++ b/dom/src/main/scala/org/scalajs/dom/ImageData.scala @@ -52,7 +52,7 @@ class ImageData extends js.Object { * @param settings * image settings */ - def this(width: Int, height: Int, settings: ImageSettings) = this() + def this(width: Int, height: Int, settings: ImageDataSettings) = this() /** Create a blank ImageData instance from specified pixel data, width, height, and settings object. * @param data @@ -64,7 +64,7 @@ class ImageData extends js.Object { * @param settings * image settings */ - def this(data: Uint8ClampedArray, width: Int, height: Int, settings: ImageSettings) = this() + def this(data: Uint8ClampedArray, width: Int, height: Int, settings: ImageDataSettings) = this() /** Is an unsigned long representing the actual width, in pixels, of the ImageData. */ def width: Int = js.native diff --git a/dom/src/main/scala/org/scalajs/dom/ImageDataSettings.scala b/dom/src/main/scala/org/scalajs/dom/ImageDataSettings.scala new file mode 100644 index 00000000..d611dbef --- /dev/null +++ b/dom/src/main/scala/org/scalajs/dom/ImageDataSettings.scala @@ -0,0 +1,7 @@ +package org.scalajs.dom + +import scala.scalajs.js + +trait ImageDataSettings extends js.Object { + var colorSpace: js.UndefOr[PredefinedColorSpace] = js.undefined +} diff --git a/dom/src/main/scala/org/scalajs/dom/ImageSettings.scala b/dom/src/main/scala/org/scalajs/dom/ImageSettings.scala deleted file mode 100644 index e4a2555e..00000000 --- a/dom/src/main/scala/org/scalajs/dom/ImageSettings.scala +++ /dev/null @@ -1,12 +0,0 @@ -package org.scalajs.dom - -import scala.scalajs.js - -trait ImageSettings extends js.Object { - var colorSpace: js.UndefOr[String] = js.undefined -} - -object ImageSettings { - lazy val sRGB: ImageSettings = js.Dynamic.literal(colorSpace = "srgb").asInstanceOf[ImageSettings] - lazy val displayP3: ImageSettings = js.Dynamic.literal(colorSpace = "display-p3").asInstanceOf[ImageSettings] -} From 50b673b2cdb1284d123735fa0609f9440bf02e3f Mon Sep 17 00:00:00 2001 From: c Date: Wed, 20 Mar 2024 12:34:35 -0600 Subject: [PATCH 10/11] Added ImageDataTest --- .../org/scalajs/dom/tests/shared/BrowserTests.scala | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala index c0e55b4a..2558b6a4 100644 --- a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala +++ b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala @@ -128,4 +128,14 @@ trait BrowserTests extends WebCryptoApiTests { _ <- reasonPromise.future.map(assertEquals(expectedReason, _)) } yield () } + + @Test + final def ImageDataTest(): Unit = { + import org.scalajs.dom.{ImageData, ImageDataSettings, PredefinedColorSpace} + import PredefinedColorSpace._ + + val defaultImageData: ImageData = new ImageData(200, 100, new ImageDataSettings { colorSpace = `display-p3` }) + assertEquals(defaultImageData.width, 200) + assertEquals(defaultImageData.height, 100) + } } From 995cb29378b80bfe4cabf708b79b7523b5210906 Mon Sep 17 00:00:00 2001 From: c Date: Wed, 20 Mar 2024 13:37:14 -0600 Subject: [PATCH 11/11] Revised ImageDataTest to cover all constructors currently supported by firefox. --- .../dom/tests/shared/BrowserTests.scala | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala index 2558b6a4..37fb639a 100644 --- a/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala +++ b/tests-shared/src/main/scala/org/scalajs/dom/tests/shared/BrowserTests.scala @@ -131,11 +131,41 @@ trait BrowserTests extends WebCryptoApiTests { @Test final def ImageDataTest(): Unit = { + // Test ImageDataConstructors + // from https://developer.mozilla.org/en-US/docs/Web/API/ImageData/ImageData + import org.scalajs.dom.{ImageData, ImageDataSettings, PredefinedColorSpace} import PredefinedColorSpace._ - val defaultImageData: ImageData = new ImageData(200, 100, new ImageDataSettings { colorSpace = `display-p3` }) - assertEquals(defaultImageData.width, 200) - assertEquals(defaultImageData.height, 100) + val width:Int = 200 + val height:Int = 100 + + // new ImageData(width, height) + val imgDat1: ImageData = new ImageData(width, height) + assertEquals(imgDat1.width, width) + assertEquals(imgDat1.height, height) + assertEquals(imgDat1.data.length, width * height * 4) + + // new ImageData(width, height, settings) // Firefox doesn't support this constructor. + // val defaultImageData: ImageData = new ImageData(width, height, new ImageDataSettings { colorSpace = `display-p3` }) + // assertEquals(defaultImageData.width, width) + // assertEquals(defaultImageData.height, height) + + // new ImageData(dataArray, width) + val imgDat2: ImageData = new ImageData(imgDat1.data, width) + assertEquals(imgDat2.width, width) + assertEquals(imgDat2.height, height) + assertEquals(imgDat2.data.length, width * height * 4) + + // new ImageData(dataArray, width, height) + val imgDat3: ImageData = new ImageData(imgDat2.data, width, height) + assertEquals(imgDat3.width, width) + assertEquals(imgDat3.height, height) + assertEquals(imgDat3.data.length, width * height * 4) + + // new ImageData(dataArray, width, height, settings) + val defaultImageData: ImageData = new ImageData(imgDat3.data, width, height, new ImageDataSettings { colorSpace = `display-p3` }) + assertEquals(defaultImageData.width, width) + assertEquals(defaultImageData.height, height) } }