@babylonjs/gui 9.15.0 → 9.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/2D/controls/checkbox.pure.js +164 -153
  2. package/2D/controls/checkbox.pure.js.map +1 -1
  3. package/2D/controls/colorpicker.pure.js +1300 -1289
  4. package/2D/controls/colorpicker.pure.js.map +1 -1
  5. package/2D/controls/container.pure.js +597 -582
  6. package/2D/controls/container.pure.js.map +1 -1
  7. package/2D/controls/control.pure.js +2474 -2434
  8. package/2D/controls/control.pure.js.map +1 -1
  9. package/2D/controls/displayGrid.pure.js +201 -190
  10. package/2D/controls/displayGrid.pure.js.map +1 -1
  11. package/2D/controls/ellipse.pure.js +96 -85
  12. package/2D/controls/ellipse.pure.js.map +1 -1
  13. package/2D/controls/grid.pure.js +511 -500
  14. package/2D/controls/grid.pure.js.map +1 -1
  15. package/2D/controls/image.pure.js +888 -877
  16. package/2D/controls/image.pure.js.map +1 -1
  17. package/2D/controls/inputText.pure.js +988 -973
  18. package/2D/controls/inputText.pure.js.map +1 -1
  19. package/2D/controls/inputTextArea.pure.js +955 -944
  20. package/2D/controls/inputTextArea.pure.js.map +1 -1
  21. package/2D/controls/line.pure.js +237 -226
  22. package/2D/controls/line.pure.js.map +1 -1
  23. package/2D/controls/multiLine.pure.js +233 -222
  24. package/2D/controls/multiLine.pure.js.map +1 -1
  25. package/2D/controls/radioButton.pure.js +182 -169
  26. package/2D/controls/radioButton.pure.js.map +1 -1
  27. package/2D/controls/rectangle.pure.js +211 -200
  28. package/2D/controls/rectangle.pure.js.map +1 -1
  29. package/2D/controls/scrollViewers/scrollViewer.pure.js +579 -567
  30. package/2D/controls/scrollViewers/scrollViewer.pure.js.map +1 -1
  31. package/2D/controls/sliders/baseSlider.js +291 -280
  32. package/2D/controls/sliders/baseSlider.js.map +1 -1
  33. package/2D/controls/sliders/imageBasedSlider.pure.js +158 -147
  34. package/2D/controls/sliders/imageBasedSlider.pure.js.map +1 -1
  35. package/2D/controls/sliders/imageScrollBar.js +237 -223
  36. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  37. package/2D/controls/sliders/scrollBar.pure.js +169 -158
  38. package/2D/controls/sliders/scrollBar.pure.js.map +1 -1
  39. package/2D/controls/sliders/slider.pure.js +251 -240
  40. package/2D/controls/sliders/slider.pure.js.map +1 -1
  41. package/2D/controls/stackPanel.pure.js +236 -221
  42. package/2D/controls/stackPanel.pure.js.map +1 -1
  43. package/2D/controls/textBlock.pure.js +637 -626
  44. package/2D/controls/textBlock.pure.js.map +1 -1
  45. package/3D/materials/fluent/fluentMaterial.pure.d.ts +4 -4
  46. package/3D/materials/fluent/fluentMaterial.pure.js +322 -273
  47. package/3D/materials/fluent/fluentMaterial.pure.js.map +1 -1
  48. package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.js +510 -454
  49. package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.js.map +1 -1
  50. package/3D/materials/fluentButton/fluentButtonMaterial.pure.js +612 -529
  51. package/3D/materials/fluentButton/fluentButtonMaterial.pure.js.map +1 -1
  52. package/3D/materials/mrdl/mrdlBackglowMaterial.pure.js +313 -274
  53. package/3D/materials/mrdl/mrdlBackglowMaterial.pure.js.map +1 -1
  54. package/3D/materials/mrdl/mrdlBackplateMaterial.pure.js +462 -405
  55. package/3D/materials/mrdl/mrdlBackplateMaterial.pure.js.map +1 -1
  56. package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.js +583 -501
  57. package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.js.map +1 -1
  58. package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.js +226 -203
  59. package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.js.map +1 -1
  60. package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.js +961 -825
  61. package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.js.map +1 -1
  62. package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.js +961 -825
  63. package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.js.map +1 -1
  64. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"colorpicker.pure.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/colorpicker.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"core/Misc/observable\";\r\nimport { type Vector2 } from \"core/Maths/math.vector.pure\";\r\n\r\nimport { Control } from \"./control.pure\";\r\nimport { type Measure } from \"../measure\";\r\nimport { InputText } from \"./inputText.pure\";\r\nimport { Rectangle } from \"./rectangle.pure\";\r\nimport { Button } from \"./button.pure\";\r\nimport { Grid } from \"./grid.pure\";\r\nimport { type AdvancedDynamicTexture } from \"../advancedDynamicTexture\";\r\nimport { TextBlock } from \"../controls/textBlock.pure\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { Color3 } from \"core/Maths/math.color.pure\";\r\nimport { type PointerInfoBase } from \"core/Events/pointerEvents\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport { type ICanvas, type ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\nimport { EngineStore } from \"core/Engines/engineStore\";\r\n\r\n/** Class used to create color pickers */\r\nexport class ColorPicker extends Control {\r\n private static _Epsilon = 0.000001;\r\n private _colorWheelCanvas: ICanvas;\r\n\r\n private _value: Color3 = Color3.Red();\r\n private _tmpColor = new Color3();\r\n\r\n private _pointerStartedOnSquare = false;\r\n private _pointerStartedOnWheel = false;\r\n\r\n private _squareLeft = 0;\r\n private _squareTop = 0;\r\n private _squareSize = 0;\r\n\r\n private _h = 360;\r\n private _s = 1;\r\n private _v = 1;\r\n\r\n private _lastPointerDownId = -1;\r\n\r\n /**\r\n * Observable raised when the value changes\r\n */\r\n public onValueChangedObservable = new Observable<Color3>();\r\n\r\n /** Gets or sets the color of the color picker */\r\n @serialize()\r\n public get value(): Color3 {\r\n return this._value;\r\n }\r\n\r\n public set value(value: Color3) {\r\n if (this._value.equals(value)) {\r\n return;\r\n }\r\n\r\n this._value.copyFrom(value);\r\n\r\n this._value.toHSVToRef(this._tmpColor);\r\n\r\n this._h = this._tmpColor.r;\r\n this._s = Math.max(this._tmpColor.g, 0.00001);\r\n this._v = Math.max(this._tmpColor.b, 0.00001);\r\n\r\n this._markAsDirty();\r\n\r\n if (this._value.r <= ColorPicker._Epsilon) {\r\n this._value.r = 0;\r\n }\r\n\r\n if (this._value.g <= ColorPicker._Epsilon) {\r\n this._value.g = 0;\r\n }\r\n\r\n if (this._value.b <= ColorPicker._Epsilon) {\r\n this._value.b = 0;\r\n }\r\n\r\n if (this._value.r >= 1.0 - ColorPicker._Epsilon) {\r\n this._value.r = 1.0;\r\n }\r\n\r\n if (this._value.g >= 1.0 - ColorPicker._Epsilon) {\r\n this._value.g = 1.0;\r\n }\r\n\r\n if (this._value.b >= 1.0 - ColorPicker._Epsilon) {\r\n this._value.b = 1.0;\r\n }\r\n\r\n this.onValueChangedObservable.notifyObservers(this._value, undefined, this, this);\r\n }\r\n\r\n /**\r\n * Gets or sets control width\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size\r\n */\r\n @serialize()\r\n public override get width(): string | number {\r\n return this._width.toString(this._host);\r\n }\r\n\r\n public override set width(value: string | number) {\r\n if (this._width.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._width.fromString(value)) {\r\n if (this._width.getValue(this._host) === 0) {\r\n value = \"1px\";\r\n this._width.fromString(value);\r\n }\r\n this._height.fromString(value);\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets control height\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size\r\n */\r\n @serialize()\r\n public override get height(): string | number {\r\n return this._height.toString(this._host);\r\n }\r\n\r\n /** Gets or sets control height */\r\n public override set height(value: string | number) {\r\n if (this._height.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._height.fromString(value)) {\r\n if (this._height.getValue(this._host) === 0) {\r\n value = \"1px\";\r\n this._height.fromString(value);\r\n }\r\n this._width.fromString(value);\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets control size */\r\n @serialize()\r\n public get size(): string | number {\r\n return this.width;\r\n }\r\n\r\n public set size(value: string | number) {\r\n this.width = value;\r\n }\r\n\r\n /**\r\n * Creates a new ColorPicker\r\n * @param name defines the control name\r\n */\r\n constructor(public override name?: string) {\r\n super(name);\r\n this.value = new Color3(0.88, 0.1, 0.1);\r\n this.size = \"200px\";\r\n this.isPointerBlocker = true;\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"ColorPicker\";\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected override _preMeasure(parentMeasure: Measure): void {\r\n if (parentMeasure.width < parentMeasure.height) {\r\n this._currentMeasure.height = parentMeasure.width;\r\n } else {\r\n this._currentMeasure.width = parentMeasure.height;\r\n }\r\n }\r\n\r\n private _updateSquareProps(): void {\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const wheelThickness = radius * 0.2;\r\n const innerDiameter = (radius - wheelThickness) * 2;\r\n const squareSize = innerDiameter / Math.sqrt(2);\r\n const offset = radius - squareSize * 0.5;\r\n\r\n this._squareLeft = this._currentMeasure.left + offset;\r\n this._squareTop = this._currentMeasure.top + offset;\r\n this._squareSize = squareSize;\r\n }\r\n\r\n private _drawGradientSquare(hueValue: number, left: number, top: number, width: number, height: number, context: ICanvasRenderingContext) {\r\n const lgh = context.createLinearGradient(left, top, width + left, top);\r\n lgh.addColorStop(0, \"#fff\");\r\n lgh.addColorStop(1, \"hsl(\" + hueValue + \", 100%, 50%)\");\r\n\r\n context.fillStyle = lgh;\r\n context.fillRect(left, top, width, height);\r\n\r\n const lgv = context.createLinearGradient(left, top, left, height + top);\r\n lgv.addColorStop(0, \"rgba(0,0,0,0)\");\r\n lgv.addColorStop(1, \"#000\");\r\n\r\n context.fillStyle = lgv;\r\n context.fillRect(left, top, width, height);\r\n }\r\n\r\n private _drawCircle(centerX: number, centerY: number, radius: number, context: ICanvasRenderingContext) {\r\n context.beginPath();\r\n context.arc(centerX, centerY, radius + 1, 0, 2 * Math.PI, false);\r\n context.lineWidth = 3;\r\n context.strokeStyle = \"#333333\";\r\n context.stroke();\r\n context.beginPath();\r\n context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);\r\n context.lineWidth = 3;\r\n context.strokeStyle = \"#ffffff\";\r\n context.stroke();\r\n }\r\n\r\n private _createColorWheelCanvas(radius: number, thickness: number): ICanvas {\r\n // Shoudl abstract platform instead of using LastCreatedEngine\r\n const engine = EngineStore.LastCreatedEngine;\r\n if (!engine) {\r\n throw new Error(\"Invalid engine. Unable to create a canvas.\");\r\n }\r\n const canvas = engine.createCanvas(radius * 2, radius * 2);\r\n const context = canvas.getContext(\"2d\");\r\n const image = context.getImageData(0, 0, radius * 2, radius * 2);\r\n const data = image.data;\r\n\r\n const color = this._tmpColor;\r\n const maxDistSq = radius * radius;\r\n const innerRadius = radius - thickness;\r\n const minDistSq = innerRadius * innerRadius;\r\n\r\n for (let x = -radius; x < radius; x++) {\r\n for (let y = -radius; y < radius; y++) {\r\n const distSq = x * x + y * y;\r\n\r\n if (distSq > maxDistSq || distSq < minDistSq) {\r\n continue;\r\n }\r\n\r\n const dist = Math.sqrt(distSq);\r\n const ang = Math.atan2(y, x);\r\n\r\n Color3.HSVtoRGBToRef((ang * 180) / Math.PI + 180, dist / radius, 1, color);\r\n\r\n const index = (x + radius + (y + radius) * 2 * radius) * 4;\r\n\r\n data[index] = color.r * 255;\r\n data[index + 1] = color.g * 255;\r\n data[index + 2] = color.b * 255;\r\n\r\n //apply less alpha to bigger color pickers\r\n let alphaAmount: number;\r\n const maxAlpha = 0.2;\r\n const minAlpha = 0.04;\r\n const lowerRadius = 50;\r\n const upperRadius = 150;\r\n\r\n if (radius < lowerRadius) {\r\n alphaAmount = maxAlpha;\r\n } else if (radius > upperRadius) {\r\n alphaAmount = minAlpha;\r\n } else {\r\n alphaAmount = ((minAlpha - maxAlpha) * (radius - lowerRadius)) / (upperRadius - lowerRadius) + maxAlpha;\r\n }\r\n\r\n const alphaRatio = (dist - innerRadius) / (radius - innerRadius);\r\n\r\n if (alphaRatio < alphaAmount) {\r\n data[index + 3] = 255 * (alphaRatio / alphaAmount);\r\n } else if (alphaRatio > 1 - alphaAmount) {\r\n data[index + 3] = 255 * (1.0 - (alphaRatio - (1 - alphaAmount)) / alphaAmount);\r\n } else {\r\n data[index + 3] = 255;\r\n }\r\n }\r\n }\r\n\r\n context.putImageData(image, 0, 0);\r\n\r\n return canvas;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _draw(context: ICanvasRenderingContext): void {\r\n context.save();\r\n\r\n this._applyStates(context);\r\n\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const wheelThickness = radius * 0.2;\r\n const left = this._currentMeasure.left;\r\n const top = this._currentMeasure.top;\r\n\r\n if (!this._colorWheelCanvas || this._colorWheelCanvas.width != radius * 2) {\r\n this._colorWheelCanvas = this._createColorWheelCanvas(radius, wheelThickness);\r\n }\r\n\r\n this._updateSquareProps();\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowColor = this.shadowColor;\r\n context.shadowBlur = this.shadowBlur;\r\n context.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio;\r\n context.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio;\r\n\r\n context.fillRect(this._squareLeft, this._squareTop, this._squareSize, this._squareSize);\r\n }\r\n\r\n context.drawImage(this._colorWheelCanvas, left, top);\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowBlur = 0;\r\n context.shadowOffsetX = 0;\r\n context.shadowOffsetY = 0;\r\n }\r\n\r\n this._drawGradientSquare(this._h, this._squareLeft, this._squareTop, this._squareSize, this._squareSize, context);\r\n\r\n let cx = this._squareLeft + this._squareSize * this._s;\r\n let cy = this._squareTop + this._squareSize * (1 - this._v);\r\n\r\n this._drawCircle(cx, cy, radius * 0.04, context);\r\n\r\n const dist = radius - wheelThickness * 0.5;\r\n cx = left + radius + Math.cos(((this._h - 180) * Math.PI) / 180) * dist;\r\n cy = top + radius + Math.sin(((this._h - 180) * Math.PI) / 180) * dist;\r\n this._drawCircle(cx, cy, wheelThickness * 0.35, context);\r\n\r\n context.restore();\r\n }\r\n\r\n // Events\r\n private _pointerIsDown = false;\r\n\r\n private _updateValueFromPointer(x: number, y: number): void {\r\n if (this._pointerStartedOnWheel) {\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const centerX = radius + this._currentMeasure.left;\r\n const centerY = radius + this._currentMeasure.top;\r\n this._h = (Math.atan2(y - centerY, x - centerX) * 180) / Math.PI + 180;\r\n } else if (this._pointerStartedOnSquare) {\r\n this._updateSquareProps();\r\n this._s = (x - this._squareLeft) / this._squareSize;\r\n this._v = 1 - (y - this._squareTop) / this._squareSize;\r\n this._s = Math.min(this._s, 1);\r\n this._s = Math.max(this._s, ColorPicker._Epsilon);\r\n this._v = Math.min(this._v, 1);\r\n this._v = Math.max(this._v, ColorPicker._Epsilon);\r\n }\r\n\r\n Color3.HSVtoRGBToRef(this._h, this._s, this._v, this._tmpColor);\r\n\r\n this.value = this._tmpColor;\r\n }\r\n\r\n private _isPointOnSquare(x: number, y: number): boolean {\r\n this._updateSquareProps();\r\n\r\n const left = this._squareLeft;\r\n const top = this._squareTop;\r\n const size = this._squareSize;\r\n\r\n if (x >= left && x <= left + size && y >= top && y <= top + size) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _isPointOnWheel(x: number, y: number): boolean {\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const centerX = radius + this._currentMeasure.left;\r\n const centerY = radius + this._currentMeasure.top;\r\n const wheelThickness = radius * 0.2;\r\n const innerRadius = radius - wheelThickness;\r\n const radiusSq = radius * radius;\r\n const innerRadiusSq = innerRadius * innerRadius;\r\n\r\n const dx = x - centerX;\r\n const dy = y - centerY;\r\n\r\n const distSq = dx * dx + dy * dy;\r\n\r\n if (distSq <= radiusSq && distSq >= innerRadiusSq) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public override _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\r\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\r\n return false;\r\n }\r\n\r\n if (this.isReadOnly) {\r\n return true;\r\n }\r\n\r\n this._pointerIsDown = true;\r\n\r\n this._pointerStartedOnSquare = false;\r\n this._pointerStartedOnWheel = false;\r\n\r\n // Invert transform\r\n this._invertTransformMatrix.transformCoordinates(coordinates.x, coordinates.y, this._transformedPosition);\r\n\r\n const x = this._transformedPosition.x;\r\n const y = this._transformedPosition.y;\r\n\r\n if (this._isPointOnSquare(x, y)) {\r\n this._pointerStartedOnSquare = true;\r\n } else if (this._isPointOnWheel(x, y)) {\r\n this._pointerStartedOnWheel = true;\r\n }\r\n\r\n this._updateValueFromPointer(x, y);\r\n this._host._capturingControl[pointerId] = this;\r\n this._lastPointerDownId = pointerId;\r\n return true;\r\n }\r\n\r\n public override _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void {\r\n // Only listen to pointer move events coming from the last pointer to click on the element (To support dual vr controller interaction)\r\n if (pointerId != this._lastPointerDownId) {\r\n return;\r\n }\r\n\r\n if (!this.isReadOnly) {\r\n // Invert transform\r\n this._invertTransformMatrix.transformCoordinates(coordinates.x, coordinates.y, this._transformedPosition);\r\n\r\n const x = this._transformedPosition.x;\r\n const y = this._transformedPosition.y;\r\n\r\n if (this._pointerIsDown) {\r\n this._updateValueFromPointer(x, y);\r\n }\r\n }\r\n\r\n super._onPointerMove(target, coordinates, pointerId, pi);\r\n }\r\n\r\n public override _onPointerUp(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, notifyClick: boolean, pi: PointerInfoBase): void {\r\n this._pointerIsDown = false;\r\n\r\n delete this._host._capturingControl[pointerId];\r\n super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick, pi);\r\n }\r\n\r\n public override _onCanvasBlur() {\r\n this._forcePointerUp();\r\n super._onCanvasBlur();\r\n }\r\n\r\n /**\r\n * This function expands the color picker by creating a color picker dialog with manual\r\n * color value input and the ability to save colors into an array to be used later in\r\n * subsequent launches of the dialogue.\r\n * @param advancedTexture defines the AdvancedDynamicTexture the dialog is assigned to\r\n * @param options defines size for dialog and options for saved colors. Also accepts last color picked as hex string and saved colors array as hex strings.\r\n * @param options.pickerWidth\r\n * @param options.pickerHeight\r\n * @param options.headerHeight\r\n * @param options.lastColor\r\n * @param options.swatchLimit\r\n * @param options.numSwatchesPerLine\r\n * @param options.savedColors\r\n * @returns picked color as a hex string and the saved colors array as hex strings.\r\n */\r\n public static async ShowPickerDialogAsync(\r\n advancedTexture: AdvancedDynamicTexture,\r\n options: {\r\n pickerWidth?: string;\r\n pickerHeight?: string;\r\n headerHeight?: string;\r\n lastColor?: string;\r\n swatchLimit?: number;\r\n numSwatchesPerLine?: number;\r\n savedColors?: Array<string>;\r\n }\r\n ): Promise<{\r\n savedColors?: string[];\r\n pickedColor: string;\r\n }> {\r\n return await new Promise((resolve) => {\r\n // Default options\r\n options.pickerWidth = options.pickerWidth || \"640px\";\r\n options.pickerHeight = options.pickerHeight || \"400px\";\r\n options.headerHeight = options.headerHeight || \"35px\";\r\n options.lastColor = options.lastColor || \"#000000\";\r\n options.swatchLimit = options.swatchLimit || 20;\r\n options.numSwatchesPerLine = options.numSwatchesPerLine || 10;\r\n\r\n // Window size settings\r\n const drawerMaxRows: number = options.swatchLimit / options.numSwatchesPerLine;\r\n const rawSwatchSize: number = parseFloat(options.pickerWidth) / options.numSwatchesPerLine;\r\n const gutterSize: number = Math.floor(rawSwatchSize * 0.25);\r\n const colGutters: number = gutterSize * (options.numSwatchesPerLine + 1);\r\n const swatchSize: number = Math.floor((parseFloat(options.pickerWidth) - colGutters) / options.numSwatchesPerLine);\r\n const drawerMaxSize: number = swatchSize * drawerMaxRows + gutterSize * (drawerMaxRows + 1);\r\n const containerSize: string = (parseInt(options.pickerHeight) + drawerMaxSize + Math.floor(swatchSize * 0.25)).toString() + \"px\";\r\n\r\n // Button Colors\r\n const buttonColor: string = \"#c0c0c0\";\r\n const buttonBackgroundColor: string = \"#535353\";\r\n const buttonBackgroundHoverColor: string = \"#414141\";\r\n const buttonBackgroundClickColor: string = \"515151\";\r\n const buttonDisabledColor: string = \"#555555\";\r\n const buttonDisabledBackgroundColor: string = \"#454545\";\r\n const currentSwatchesOutlineColor: string = \"#404040\";\r\n const luminanceLimitColor: Color3 = Color3.FromHexString(\"#dddddd\");\r\n const luminanceLimit: number = luminanceLimitColor.r + luminanceLimitColor.g + luminanceLimitColor.b;\r\n const iconColorDark: string = \"#aaaaaa\";\r\n const iconColorLight: string = \"#ffffff\";\r\n\r\n // Button settings\r\n let buttonFontSize: number;\r\n let butEdit: Button;\r\n\r\n // Input Text Colors\r\n const inputFieldLabels: string[] = [\"R\", \"G\", \"B\"];\r\n const inputTextBackgroundColor: string = \"#454545\";\r\n const inputTextColor: string = \"#f0f0f0\";\r\n\r\n // This int is used for naming swatches and serves as the index for calling them from the list\r\n let swatchNumber: number;\r\n\r\n // Menu Panel options. We need to know if the swatchDrawer exists so we can create it if needed.\r\n let swatchDrawer: Grid;\r\n let editSwatchMode: boolean = false;\r\n\r\n // Color InputText fields that will be updated upon value change\r\n let butSave: Button;\r\n let lastVal: string;\r\n let activeField: string;\r\n\r\n // Dialog menu container which will contain both the main dialogue window and the swatch drawer which opens once a color is saved.\r\n const dialogContainer: Grid = new Grid();\r\n dialogContainer.name = \"Dialog Container\";\r\n dialogContainer.width = options.pickerWidth;\r\n if (options.savedColors) {\r\n dialogContainer.height = containerSize;\r\n const topRow: number = parseInt(options.pickerHeight) / parseInt(containerSize);\r\n dialogContainer.addRowDefinition(topRow, false);\r\n dialogContainer.addRowDefinition(1.0 - topRow, false);\r\n } else {\r\n dialogContainer.height = options.pickerHeight;\r\n dialogContainer.addRowDefinition(1.0, false);\r\n }\r\n advancedTexture.addControl(dialogContainer);\r\n\r\n // Swatch drawer which contains all saved color buttons\r\n if (options.savedColors) {\r\n swatchDrawer = new Grid();\r\n swatchDrawer.name = \"Swatch Drawer\";\r\n swatchDrawer.verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;\r\n swatchDrawer.background = buttonBackgroundColor;\r\n swatchDrawer.width = options.pickerWidth!;\r\n const initialRows: number = options.savedColors.length / options.numSwatchesPerLine;\r\n let gutterCount: number;\r\n if (initialRows == 0) {\r\n gutterCount = 0;\r\n } else {\r\n gutterCount = initialRows + 1;\r\n }\r\n swatchDrawer.height = (swatchSize * initialRows + gutterCount * gutterSize).toString() + \"px\";\r\n swatchDrawer.top = Math.floor(swatchSize * 0.25).toString() + \"px\";\r\n for (let i = 0; i < Math.ceil(options.savedColors.length / options.numSwatchesPerLine) * 2 + 1; i++) {\r\n if (i % 2 != 0) {\r\n swatchDrawer.addRowDefinition(swatchSize, true);\r\n } else {\r\n swatchDrawer.addRowDefinition(gutterSize, true);\r\n }\r\n }\r\n for (let i = 0; i < options.numSwatchesPerLine * 2 + 1; i++) {\r\n if (i % 2 != 0) {\r\n swatchDrawer.addColumnDefinition(swatchSize, true);\r\n } else {\r\n swatchDrawer.addColumnDefinition(gutterSize, true);\r\n }\r\n }\r\n dialogContainer.addControl(swatchDrawer, 1, 0);\r\n }\r\n\r\n // Picker container\r\n const pickerPanel: Grid = new Grid();\r\n pickerPanel.name = \"Picker Panel\";\r\n pickerPanel.height = options.pickerHeight;\r\n const panelHead: number = parseInt(options.headerHeight) / parseInt(options.pickerHeight);\r\n const pickerPanelRows: number[] = [panelHead, 1.0 - panelHead];\r\n pickerPanel.addRowDefinition(pickerPanelRows[0], false);\r\n pickerPanel.addRowDefinition(pickerPanelRows[1], false);\r\n dialogContainer.addControl(pickerPanel, 0, 0);\r\n\r\n // Picker container header\r\n const header: Rectangle = new Rectangle();\r\n header.name = \"Dialogue Header Bar\";\r\n header.background = \"#cccccc\";\r\n header.thickness = 0;\r\n pickerPanel.addControl(header, 0, 0);\r\n\r\n // Header close button\r\n const closeButton: Button = Button.CreateSimpleButton(\"closeButton\", \"a\");\r\n closeButton.fontFamily = \"coreglyphs\";\r\n const headerColor3: Color3 = Color3.FromHexString(header.background);\r\n const closeIconColor = new Color3(1.0 - headerColor3.r, 1.0 - headerColor3.g, 1.0 - headerColor3.b);\r\n closeButton.color = closeIconColor.toHexString();\r\n closeButton.fontSize = Math.floor(parseInt(options.headerHeight) * 0.6);\r\n closeButton.textBlock!.textVerticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n closeButton.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_RIGHT;\r\n closeButton.height = closeButton.width = options.headerHeight;\r\n closeButton.background = header.background;\r\n closeButton.thickness = 0;\r\n closeButton.pointerDownAnimation = () => {};\r\n closeButton.pointerUpAnimation = () => {\r\n closeButton.background = header.background;\r\n };\r\n closeButton.pointerEnterAnimation = () => {\r\n closeButton.color = header.background;\r\n closeButton.background = \"red\";\r\n };\r\n closeButton.pointerOutAnimation = () => {\r\n closeButton.color = closeIconColor.toHexString();\r\n closeButton.background = header.background;\r\n };\r\n closeButton.onPointerClickObservable.add(() => {\r\n closePicker(currentSwatch.background);\r\n });\r\n pickerPanel.addControl(closeButton, 0, 0);\r\n\r\n // Dialog container body\r\n const dialogBody: Grid = new Grid();\r\n dialogBody.name = \"Dialogue Body\";\r\n dialogBody.background = buttonBackgroundColor;\r\n const dialogBodyCols: number[] = [0.4375, 0.5625];\r\n dialogBody.addRowDefinition(1.0, false);\r\n dialogBody.addColumnDefinition(dialogBodyCols[0], false);\r\n dialogBody.addColumnDefinition(dialogBodyCols[1], false);\r\n pickerPanel.addControl(dialogBody, 1, 0);\r\n\r\n // Picker grid\r\n const pickerGrid: Grid = new Grid();\r\n pickerGrid.name = \"Picker Grid\";\r\n pickerGrid.addRowDefinition(0.85, false);\r\n pickerGrid.addRowDefinition(0.15, false);\r\n dialogBody.addControl(pickerGrid, 0, 0);\r\n\r\n // Picker control\r\n const picker = new ColorPicker();\r\n picker.name = \"GUI Color Picker\";\r\n if (options.pickerHeight < options.pickerWidth) {\r\n picker.width = 0.89;\r\n } else {\r\n picker.height = 0.89;\r\n }\r\n picker.value = Color3.FromHexString(options.lastColor);\r\n picker.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;\r\n picker.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n picker.onPointerDownObservable.add(() => {\r\n activeField = picker.name!;\r\n lastVal = \"\";\r\n editSwatches(false);\r\n });\r\n picker.onValueChangedObservable.add(function (value) {\r\n // value is a color3\r\n if (activeField == picker.name) {\r\n updateValues(value, picker.name);\r\n }\r\n });\r\n pickerGrid.addControl(picker, 0, 0);\r\n\r\n // Picker body right quarant\r\n const pickerBodyRight: Grid = new Grid();\r\n pickerBodyRight.name = \"Dialogue Right Half\";\r\n pickerBodyRight.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n const pickerBodyRightRows: number[] = [0.514, 0.486];\r\n pickerBodyRight.addRowDefinition(pickerBodyRightRows[0], false);\r\n pickerBodyRight.addRowDefinition(pickerBodyRightRows[1], false);\r\n dialogBody.addControl(pickerBodyRight, 1, 1);\r\n\r\n // Picker container swatches and buttons\r\n const pickerSwatchesButtons: Grid = new Grid();\r\n pickerSwatchesButtons.name = \"Swatches and Buttons\";\r\n const pickerButtonsCol: number[] = [0.417, 0.583];\r\n pickerSwatchesButtons.addRowDefinition(1.0, false);\r\n pickerSwatchesButtons.addColumnDefinition(pickerButtonsCol[0], false);\r\n pickerSwatchesButtons.addColumnDefinition(pickerButtonsCol[1], false);\r\n pickerBodyRight.addControl(pickerSwatchesButtons, 0, 0);\r\n\r\n // Picker Swatches quadrant\r\n const pickerSwatches: Grid = new Grid();\r\n pickerSwatches.name = \"New and Current Swatches\";\r\n const pickeSwatchesRows: number[] = [0.04, 0.16, 0.64, 0.16];\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[0], false);\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[1], false);\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[2], false);\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[3], false);\r\n pickerSwatchesButtons.addControl(pickerSwatches, 0, 0);\r\n\r\n // Active swatches\r\n const activeSwatches: Grid = new Grid();\r\n activeSwatches.name = \"Active Swatches\";\r\n activeSwatches.width = 0.67;\r\n activeSwatches.addRowDefinition(0.5, false);\r\n activeSwatches.addRowDefinition(0.5, false);\r\n pickerSwatches.addControl(activeSwatches, 2, 0);\r\n\r\n const labelWidth: number = Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[0] * 0.11);\r\n const labelHeight: number = Math.floor(parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * pickeSwatchesRows[1] * 0.5);\r\n\r\n let labelTextSize: number;\r\n if (options.pickerWidth > options.pickerHeight) {\r\n labelTextSize = labelHeight;\r\n } else {\r\n labelTextSize = labelWidth;\r\n }\r\n // New color swatch and previous color button\r\n const newText: TextBlock = new TextBlock();\r\n newText.text = \"new\";\r\n newText.name = \"New Color Label\";\r\n newText.color = buttonColor;\r\n newText.fontSize = labelTextSize;\r\n pickerSwatches.addControl(newText, 1, 0);\r\n\r\n const newSwatch = new Rectangle();\r\n newSwatch.name = \"New Color Swatch\";\r\n newSwatch.background = options.lastColor;\r\n newSwatch.thickness = 0;\r\n activeSwatches.addControl(newSwatch, 0, 0);\r\n\r\n const currentSwatch: Button = Button.CreateSimpleButton(\"currentSwatch\", \"\");\r\n currentSwatch.background = options.lastColor;\r\n currentSwatch.thickness = 0;\r\n currentSwatch.onPointerClickObservable.add(() => {\r\n const revertColor = Color3.FromHexString(currentSwatch.background);\r\n updateValues(revertColor, currentSwatch.name!);\r\n editSwatches(false);\r\n });\r\n currentSwatch.pointerDownAnimation = () => {};\r\n currentSwatch.pointerUpAnimation = () => {};\r\n currentSwatch.pointerEnterAnimation = () => {};\r\n currentSwatch.pointerOutAnimation = () => {};\r\n activeSwatches.addControl(currentSwatch, 1, 0);\r\n\r\n const swatchOutline: Rectangle = new Rectangle();\r\n swatchOutline.name = \"Swatch Outline\";\r\n swatchOutline.width = 0.67;\r\n swatchOutline.thickness = 2;\r\n swatchOutline.color = currentSwatchesOutlineColor;\r\n swatchOutline.isHitTestVisible = false;\r\n pickerSwatches.addControl(swatchOutline, 2, 0);\r\n\r\n const currentText: TextBlock = new TextBlock();\r\n currentText.name = \"Current Color Label\";\r\n currentText.text = \"current\";\r\n currentText.color = buttonColor;\r\n currentText.fontSize = labelTextSize;\r\n pickerSwatches.addControl(currentText, 3, 0);\r\n\r\n // Buttons grid\r\n const buttonGrid: Grid = new Grid();\r\n buttonGrid.name = \"Button Grid\";\r\n buttonGrid.height = 0.8;\r\n const buttonGridRows: number = 1 / 3;\r\n buttonGrid.addRowDefinition(buttonGridRows, false);\r\n buttonGrid.addRowDefinition(buttonGridRows, false);\r\n buttonGrid.addRowDefinition(buttonGridRows, false);\r\n pickerSwatchesButtons.addControl(buttonGrid, 0, 1);\r\n\r\n // Determine pixel width and height for all buttons from overall panel dimensions\r\n const buttonWidth = Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[1] * 0.67).toString() + \"px\";\r\n const buttonHeight =\r\n Math.floor(\r\n parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * (parseFloat(buttonGrid.height.toString()) / 100) * buttonGridRows * 0.7\r\n ).toString() + \"px\";\r\n\r\n // Determine button type size\r\n if (parseFloat(buttonWidth) > parseFloat(buttonHeight)) {\r\n buttonFontSize = Math.floor(parseFloat(buttonHeight) * 0.45);\r\n } else {\r\n buttonFontSize = Math.floor(parseFloat(buttonWidth) * 0.11);\r\n }\r\n\r\n // Panel Buttons\r\n const butOK: Button = Button.CreateSimpleButton(\"butOK\", \"OK\");\r\n butOK.width = buttonWidth;\r\n butOK.height = buttonHeight;\r\n butOK.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n butOK.thickness = 2;\r\n butOK.color = buttonColor;\r\n butOK.fontSize = buttonFontSize;\r\n butOK.background = buttonBackgroundColor;\r\n butOK.onPointerEnterObservable.add(() => {\r\n butOK.background = buttonBackgroundHoverColor;\r\n });\r\n butOK.onPointerOutObservable.add(() => {\r\n butOK.background = buttonBackgroundColor;\r\n });\r\n butOK.pointerDownAnimation = () => {\r\n butOK.background = buttonBackgroundClickColor;\r\n };\r\n butOK.pointerUpAnimation = () => {\r\n butOK.background = buttonBackgroundHoverColor;\r\n };\r\n butOK.onPointerClickObservable.add(() => {\r\n editSwatches(false);\r\n closePicker(newSwatch.background);\r\n });\r\n buttonGrid.addControl(butOK, 0, 0);\r\n\r\n const butCancel: Button = Button.CreateSimpleButton(\"butCancel\", \"Cancel\");\r\n butCancel.width = buttonWidth;\r\n butCancel.height = buttonHeight;\r\n butCancel.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n butCancel.thickness = 2;\r\n butCancel.color = buttonColor;\r\n butCancel.fontSize = buttonFontSize;\r\n butCancel.background = buttonBackgroundColor;\r\n butCancel.onPointerEnterObservable.add(() => {\r\n butCancel.background = buttonBackgroundHoverColor;\r\n });\r\n butCancel.onPointerOutObservable.add(() => {\r\n butCancel.background = buttonBackgroundColor;\r\n });\r\n butCancel.pointerDownAnimation = () => {\r\n butCancel.background = buttonBackgroundClickColor;\r\n };\r\n butCancel.pointerUpAnimation = () => {\r\n butCancel.background = buttonBackgroundHoverColor;\r\n };\r\n butCancel.onPointerClickObservable.add(() => {\r\n editSwatches(false);\r\n closePicker(currentSwatch.background);\r\n });\r\n buttonGrid.addControl(butCancel, 1, 0);\r\n\r\n if (options.savedColors) {\r\n butSave = Button.CreateSimpleButton(\"butSave\", \"Save\");\r\n butSave.width = buttonWidth;\r\n butSave.height = buttonHeight;\r\n butSave.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n butSave.thickness = 2;\r\n butSave.fontSize = buttonFontSize;\r\n if (options.savedColors.length < options.swatchLimit) {\r\n butSave.color = buttonColor;\r\n butSave.background = buttonBackgroundColor;\r\n } else {\r\n disableButton(butSave, true);\r\n }\r\n butSave.onPointerEnterObservable.add(() => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundHoverColor;\r\n }\r\n }\r\n });\r\n butSave.onPointerOutObservable.add(() => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundColor;\r\n }\r\n }\r\n });\r\n butSave.pointerDownAnimation = () => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundClickColor;\r\n }\r\n }\r\n };\r\n butSave.pointerUpAnimation = () => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundHoverColor;\r\n }\r\n }\r\n };\r\n butSave.onPointerClickObservable.add(() => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length == 0) {\r\n setEditButtonVisibility(true);\r\n }\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n updateSwatches(newSwatch.background, butSave);\r\n }\r\n editSwatches(false);\r\n }\r\n });\r\n if (options.savedColors.length > 0) {\r\n setEditButtonVisibility(true);\r\n }\r\n buttonGrid.addControl(butSave, 2, 0);\r\n }\r\n\r\n // Picker color values input\r\n const pickerColorValues: Grid = new Grid();\r\n pickerColorValues.name = \"Dialog Lower Right\";\r\n pickerColorValues.addRowDefinition(0.02, false);\r\n pickerColorValues.addRowDefinition(0.63, false);\r\n pickerColorValues.addRowDefinition(0.21, false);\r\n pickerColorValues.addRowDefinition(0.14, false);\r\n pickerBodyRight.addControl(pickerColorValues, 1, 0);\r\n\r\n // RGB values text boxes\r\n const currentColor = Color3.FromHexString(options.lastColor);\r\n const rgbValuesQuadrant: Grid = new Grid();\r\n rgbValuesQuadrant.name = \"RGB Values\";\r\n rgbValuesQuadrant.width = 0.82;\r\n rgbValuesQuadrant.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\r\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\r\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\r\n rgbValuesQuadrant.addColumnDefinition(0.1, false);\r\n rgbValuesQuadrant.addColumnDefinition(0.2, false);\r\n rgbValuesQuadrant.addColumnDefinition(0.7, false);\r\n pickerColorValues.addControl(rgbValuesQuadrant, 1, 0);\r\n\r\n for (let i = 0; i < inputFieldLabels.length; i++) {\r\n const labelText: TextBlock = new TextBlock();\r\n labelText.text = inputFieldLabels[i];\r\n labelText.color = buttonColor;\r\n labelText.fontSize = buttonFontSize;\r\n rgbValuesQuadrant.addControl(labelText, i, 0);\r\n }\r\n\r\n // Input fields for RGB values\r\n const rValInt = new InputText();\r\n rValInt.width = 0.83;\r\n rValInt.height = 0.72;\r\n rValInt.name = \"rIntField\";\r\n rValInt.fontSize = buttonFontSize;\r\n rValInt.text = (currentColor.r * 255).toString();\r\n rValInt.color = inputTextColor;\r\n rValInt.background = inputTextBackgroundColor;\r\n rValInt.onFocusObservable.add(() => {\r\n activeField = rValInt.name!;\r\n lastVal = rValInt.text;\r\n editSwatches(false);\r\n });\r\n rValInt.onBlurObservable.add(() => {\r\n if (rValInt.text == \"\") {\r\n rValInt.text = \"0\";\r\n }\r\n updateInt(rValInt, \"r\");\r\n if (activeField == rValInt.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n rValInt.onTextChangedObservable.add(() => {\r\n if (activeField == rValInt.name) {\r\n updateInt(rValInt, \"r\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(rValInt, 0, 1);\r\n\r\n const gValInt = new InputText();\r\n gValInt.width = 0.83;\r\n gValInt.height = 0.72;\r\n gValInt.name = \"gIntField\";\r\n gValInt.fontSize = buttonFontSize;\r\n gValInt.text = (currentColor.g * 255).toString();\r\n gValInt.color = inputTextColor;\r\n gValInt.background = inputTextBackgroundColor;\r\n gValInt.onFocusObservable.add(() => {\r\n activeField = gValInt.name!;\r\n lastVal = gValInt.text;\r\n editSwatches(false);\r\n });\r\n gValInt.onBlurObservable.add(() => {\r\n if (gValInt.text == \"\") {\r\n gValInt.text = \"0\";\r\n }\r\n updateInt(gValInt, \"g\");\r\n if (activeField == gValInt.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n gValInt.onTextChangedObservable.add(() => {\r\n if (activeField == gValInt.name) {\r\n updateInt(gValInt, \"g\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(gValInt, 1, 1);\r\n\r\n const bValInt = new InputText();\r\n bValInt.width = 0.83;\r\n bValInt.height = 0.72;\r\n bValInt.name = \"bIntField\";\r\n bValInt.fontSize = buttonFontSize;\r\n bValInt.text = (currentColor.b * 255).toString();\r\n bValInt.color = inputTextColor;\r\n bValInt.background = inputTextBackgroundColor;\r\n bValInt.onFocusObservable.add(() => {\r\n activeField = bValInt.name!;\r\n lastVal = bValInt.text;\r\n editSwatches(false);\r\n });\r\n bValInt.onBlurObservable.add(() => {\r\n if (bValInt.text == \"\") {\r\n bValInt.text = \"0\";\r\n }\r\n updateInt(bValInt, \"b\");\r\n if (activeField == bValInt.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n bValInt.onTextChangedObservable.add(() => {\r\n if (activeField == bValInt.name) {\r\n updateInt(bValInt, \"b\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(bValInt, 2, 1);\r\n\r\n const rValDec = new InputText();\r\n rValDec.width = 0.95;\r\n rValDec.height = 0.72;\r\n rValDec.name = \"rDecField\";\r\n rValDec.fontSize = buttonFontSize;\r\n rValDec.text = currentColor.r.toString();\r\n rValDec.color = inputTextColor;\r\n rValDec.background = inputTextBackgroundColor;\r\n rValDec.onFocusObservable.add(() => {\r\n activeField = rValDec.name!;\r\n lastVal = rValDec.text;\r\n editSwatches(false);\r\n });\r\n rValDec.onBlurObservable.add(() => {\r\n if (parseFloat(rValDec.text) == 0 || rValDec.text == \"\") {\r\n rValDec.text = \"0\";\r\n updateFloat(rValDec, \"r\");\r\n }\r\n if (activeField == rValDec.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n rValDec.onTextChangedObservable.add(() => {\r\n if (activeField == rValDec.name) {\r\n updateFloat(rValDec, \"r\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(rValDec, 0, 2);\r\n\r\n const gValDec = new InputText();\r\n gValDec.width = 0.95;\r\n gValDec.height = 0.72;\r\n gValDec.name = \"gDecField\";\r\n gValDec.fontSize = buttonFontSize;\r\n gValDec.text = currentColor.g.toString();\r\n gValDec.color = inputTextColor;\r\n gValDec.background = inputTextBackgroundColor;\r\n gValDec.onFocusObservable.add(() => {\r\n activeField = gValDec.name!;\r\n lastVal = gValDec.text;\r\n editSwatches(false);\r\n });\r\n gValDec.onBlurObservable.add(() => {\r\n if (parseFloat(gValDec.text) == 0 || gValDec.text == \"\") {\r\n gValDec.text = \"0\";\r\n updateFloat(gValDec, \"g\");\r\n }\r\n if (activeField == gValDec.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n gValDec.onTextChangedObservable.add(() => {\r\n if (activeField == gValDec.name) {\r\n updateFloat(gValDec, \"g\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(gValDec, 1, 2);\r\n\r\n const bValDec = new InputText();\r\n bValDec.width = 0.95;\r\n bValDec.height = 0.72;\r\n bValDec.name = \"bDecField\";\r\n bValDec.fontSize = buttonFontSize;\r\n bValDec.text = currentColor.b.toString();\r\n bValDec.color = inputTextColor;\r\n bValDec.background = inputTextBackgroundColor;\r\n bValDec.onFocusObservable.add(() => {\r\n activeField = bValDec.name!;\r\n lastVal = bValDec.text;\r\n editSwatches(false);\r\n });\r\n bValDec.onBlurObservable.add(() => {\r\n if (parseFloat(bValDec.text) == 0 || bValDec.text == \"\") {\r\n bValDec.text = \"0\";\r\n updateFloat(bValDec, \"b\");\r\n }\r\n if (activeField == bValDec.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n bValDec.onTextChangedObservable.add(() => {\r\n if (activeField == bValDec.name) {\r\n updateFloat(bValDec, \"b\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(bValDec, 2, 2);\r\n\r\n // Hex value input\r\n const hexValueQuadrant: Grid = new Grid();\r\n hexValueQuadrant.name = \"Hex Value\";\r\n hexValueQuadrant.width = 0.82;\r\n hexValueQuadrant.addRowDefinition(1.0, false);\r\n hexValueQuadrant.addColumnDefinition(0.1, false);\r\n hexValueQuadrant.addColumnDefinition(0.9, false);\r\n pickerColorValues.addControl(hexValueQuadrant, 2, 0);\r\n\r\n const labelText: TextBlock = new TextBlock();\r\n labelText.text = \"#\";\r\n labelText.color = buttonColor;\r\n labelText.fontSize = buttonFontSize;\r\n hexValueQuadrant.addControl(labelText, 0, 0);\r\n\r\n const hexVal = new InputText();\r\n hexVal.width = 0.96;\r\n hexVal.height = 0.72;\r\n hexVal.name = \"hexField\";\r\n hexVal.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;\r\n hexVal.fontSize = buttonFontSize;\r\n const minusPound = options.lastColor.split(\"#\");\r\n hexVal.text = minusPound[1];\r\n hexVal.color = inputTextColor;\r\n hexVal.background = inputTextBackgroundColor;\r\n hexVal.onFocusObservable.add(() => {\r\n activeField = hexVal.name!;\r\n lastVal = hexVal.text;\r\n editSwatches(false);\r\n });\r\n hexVal.onBlurObservable.add(() => {\r\n if (hexVal.text.length == 3) {\r\n const val = hexVal.text.split(\"\");\r\n hexVal.text = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\r\n }\r\n if (hexVal.text == \"\") {\r\n hexVal.text = \"000000\";\r\n updateValues(Color3.FromHexString(hexVal.text), \"b\");\r\n }\r\n if (activeField == hexVal.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n hexVal.onTextChangedObservable.add(() => {\r\n let newHexValue: string = hexVal.text;\r\n const checkHex: boolean = /[^0-9A-F]/i.test(newHexValue);\r\n if ((hexVal.text.length > 6 || checkHex) && activeField == hexVal.name) {\r\n hexVal.text = lastVal;\r\n } else {\r\n if (hexVal.text.length < 6) {\r\n const leadingZero: number = 6 - hexVal.text.length;\r\n for (let i = 0; i < leadingZero; i++) {\r\n newHexValue = \"0\" + newHexValue;\r\n }\r\n }\r\n if (hexVal.text.length == 3) {\r\n const val: string[] = hexVal.text.split(\"\");\r\n newHexValue = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\r\n }\r\n newHexValue = \"#\" + newHexValue;\r\n if (activeField == hexVal.name) {\r\n lastVal = hexVal.text;\r\n updateValues(Color3.FromHexString(newHexValue), hexVal.name);\r\n }\r\n }\r\n });\r\n hexValueQuadrant.addControl(hexVal, 0, 1);\r\n\r\n if (options.savedColors && options.savedColors.length > 0) {\r\n updateSwatches(\"\", butSave!);\r\n }\r\n\r\n /**\r\n * Will update all values for InputText and ColorPicker controls based on the BABYLON.Color3 passed to this function.\r\n * Each InputText control and the ColorPicker control will be tested to see if they are the activeField and if they\r\n * are will receive no update. This is to prevent the input from the user being overwritten.\r\n * @param value\r\n * @param inputField\r\n */\r\n function updateValues(value: Color3, inputField: string) {\r\n activeField = inputField;\r\n const pickedColor: string = value.toHexString();\r\n newSwatch.background = pickedColor;\r\n if (rValInt.name != activeField) {\r\n rValInt.text = Math.floor(value.r * 255).toString();\r\n }\r\n if (gValInt.name != activeField) {\r\n gValInt.text = Math.floor(value.g * 255).toString();\r\n }\r\n if (bValInt.name != activeField) {\r\n bValInt.text = Math.floor(value.b * 255).toString();\r\n }\r\n if (rValDec.name != activeField) {\r\n rValDec.text = value.r.toString();\r\n }\r\n if (gValDec.name != activeField) {\r\n gValDec.text = value.g.toString();\r\n }\r\n if (bValDec.name != activeField) {\r\n bValDec.text = value.b.toString();\r\n }\r\n if (hexVal.name != activeField) {\r\n const minusPound: string[] = pickedColor.split(\"#\");\r\n hexVal.text = minusPound[1];\r\n }\r\n if (picker.name != activeField) {\r\n picker.value = value;\r\n }\r\n }\r\n\r\n // When the user enters an integer for R, G, or B we check to make sure it is a valid number and replace if not.\r\n function updateInt(field: InputText, channel: string) {\r\n let newValue: string = field.text;\r\n const checkVal: boolean = /[^0-9]/g.test(newValue);\r\n if (checkVal) {\r\n field.text = lastVal;\r\n return;\r\n } else {\r\n if (newValue != \"\") {\r\n if (Math.floor(parseInt(newValue)) < 0) {\r\n newValue = \"0\";\r\n } else if (Math.floor(parseInt(newValue)) > 255) {\r\n newValue = \"255\";\r\n } else if (isNaN(parseInt(newValue))) {\r\n newValue = \"0\";\r\n }\r\n }\r\n if (activeField == field.name) {\r\n lastVal = newValue;\r\n }\r\n }\r\n if (newValue != \"\") {\r\n newValue = parseInt(newValue).toString();\r\n field.text = newValue;\r\n const newSwatchRGB: Color3 = Color3.FromHexString(newSwatch.background);\r\n if (activeField == field.name) {\r\n if (channel == \"r\") {\r\n updateValues(new Color3(parseInt(newValue) / 255, newSwatchRGB.g, newSwatchRGB.b), field.name);\r\n } else if (channel == \"g\") {\r\n updateValues(new Color3(newSwatchRGB.r, parseInt(newValue) / 255, newSwatchRGB.b), field.name);\r\n } else {\r\n updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, parseInt(newValue) / 255), field.name);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // When the user enters a float for R, G, or B we check to make sure it is a valid number and replace if not.\r\n function updateFloat(field: InputText, channel: string) {\r\n let newValue: string = field.text;\r\n const checkVal: boolean = /[^0-9.]/g.test(newValue);\r\n if (checkVal) {\r\n field.text = lastVal;\r\n return;\r\n } else {\r\n if (newValue != \"\" && newValue != \".\" && parseFloat(newValue) != 0) {\r\n if (parseFloat(newValue) < 0.0) {\r\n newValue = \"0.0\";\r\n } else if (parseFloat(newValue) > 1.0) {\r\n newValue = \"1.0\";\r\n } else if (isNaN(parseFloat(newValue))) {\r\n newValue = \"0.0\";\r\n }\r\n }\r\n if (activeField == field.name) {\r\n lastVal = newValue;\r\n }\r\n }\r\n if (newValue != \"\" && newValue != \".\" && parseFloat(newValue) != 0) {\r\n newValue = parseFloat(newValue).toString();\r\n field.text = newValue;\r\n } else {\r\n newValue = \"0.0\";\r\n }\r\n const newSwatchRGB = Color3.FromHexString(newSwatch.background);\r\n if (activeField == field.name) {\r\n if (channel == \"r\") {\r\n updateValues(new Color3(parseFloat(newValue), newSwatchRGB.g, newSwatchRGB.b), field.name);\r\n } else if (channel == \"g\") {\r\n updateValues(new Color3(newSwatchRGB.r, parseFloat(newValue), newSwatchRGB.b), field.name);\r\n } else {\r\n updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, parseFloat(newValue)), field.name);\r\n }\r\n }\r\n }\r\n\r\n // Removes the current index from the savedColors array. Drawer can then be regenerated.\r\n function deleteSwatch(index: number) {\r\n if (options.savedColors) {\r\n options.savedColors.splice(index, 1);\r\n }\r\n if (options.savedColors && options.savedColors.length == 0) {\r\n setEditButtonVisibility(false);\r\n editSwatchMode = false;\r\n }\r\n }\r\n\r\n // Creates and styles an individual swatch when updateSwatches is called.\r\n function createSwatch() {\r\n if (options.savedColors && options.savedColors[swatchNumber]) {\r\n let icon: string;\r\n if (editSwatchMode) {\r\n icon = \"b\";\r\n } else {\r\n icon = \"\";\r\n }\r\n const swatch: Button = Button.CreateSimpleButton(\"Swatch_\" + swatchNumber, icon);\r\n swatch.fontFamily = \"coreglyphs\";\r\n const swatchColor: Color3 = Color3.FromHexString(options.savedColors[swatchNumber]);\r\n const swatchLuminence: number = swatchColor.r + swatchColor.g + swatchColor.b;\r\n\r\n // Set color of outline and textBlock based on luminance of the color swatch so feedback always visible\r\n if (swatchLuminence > luminanceLimit) {\r\n swatch.color = iconColorDark;\r\n } else {\r\n swatch.color = iconColorLight;\r\n }\r\n swatch.fontSize = Math.floor(swatchSize * 0.7);\r\n swatch.textBlock!.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n swatch.height = swatch.width = swatchSize.toString() + \"px\";\r\n swatch.background = options.savedColors[swatchNumber];\r\n swatch.thickness = 2;\r\n const metadata = swatchNumber;\r\n swatch.pointerDownAnimation = () => {\r\n swatch.thickness = 4;\r\n };\r\n swatch.pointerUpAnimation = () => {\r\n swatch.thickness = 3;\r\n };\r\n swatch.pointerEnterAnimation = () => {\r\n swatch.thickness = 3;\r\n };\r\n swatch.pointerOutAnimation = () => {\r\n swatch.thickness = 2;\r\n };\r\n swatch.onPointerClickObservable.add(() => {\r\n if (!editSwatchMode) {\r\n if (options.savedColors) {\r\n updateValues(Color3.FromHexString(options.savedColors[metadata]), swatch.name!);\r\n }\r\n } else {\r\n deleteSwatch(metadata);\r\n updateSwatches(\"\", butSave);\r\n }\r\n });\r\n return swatch;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n // Mode switch to render button text and close symbols on swatch controls\r\n function editSwatches(mode?: boolean) {\r\n if (mode !== undefined) {\r\n editSwatchMode = mode;\r\n }\r\n let thisButton: Button;\r\n if (editSwatchMode) {\r\n for (let i = 0; i < swatchDrawer.children.length; i++) {\r\n thisButton = swatchDrawer.children[i] as Button;\r\n thisButton.textBlock!.text = \"b\";\r\n }\r\n if (butEdit !== undefined) {\r\n butEdit.textBlock!.text = \"Done\";\r\n }\r\n } else {\r\n for (let i = 0; i < swatchDrawer.children.length; i++) {\r\n thisButton = swatchDrawer.children[i] as Button;\r\n thisButton.textBlock!.text = \"\";\r\n }\r\n if (butEdit !== undefined) {\r\n butEdit.textBlock!.text = \"Edit\";\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * When Save Color button is pressed this function will first create a swatch drawer if one is not already\r\n * made. Then all controls are removed from the drawer and we step through the savedColors array and\r\n * creates one swatch per color. It will also set the height of the drawer control based on how many\r\n * saved colors there are and how many can be stored per row.\r\n * @param color\r\n * @param button\r\n */\r\n function updateSwatches(color: string, button: Button) {\r\n if (options.savedColors) {\r\n if (color != \"\") {\r\n options.savedColors.push(color);\r\n }\r\n swatchNumber = 0;\r\n swatchDrawer.clearControls();\r\n const rowCount: number = Math.ceil(options.savedColors.length / options.numSwatchesPerLine!);\r\n let gutterCount: number;\r\n if (rowCount == 0) {\r\n gutterCount = 0;\r\n } else {\r\n gutterCount = rowCount + 1;\r\n }\r\n if (swatchDrawer.rowCount != rowCount + gutterCount) {\r\n const currentRows: number = swatchDrawer.rowCount;\r\n for (let i = 0; i < currentRows; i++) {\r\n swatchDrawer.removeRowDefinition(0);\r\n }\r\n for (let i = 0; i < rowCount + gutterCount; i++) {\r\n if (i % 2) {\r\n swatchDrawer.addRowDefinition(swatchSize, true);\r\n } else {\r\n swatchDrawer.addRowDefinition(gutterSize, true);\r\n }\r\n }\r\n }\r\n swatchDrawer.height = (swatchSize * rowCount + gutterCount * gutterSize).toString() + \"px\";\r\n\r\n for (let y = 1, thisRow = 1; y < rowCount + gutterCount; y += 2, thisRow++) {\r\n // Determine number of buttons to create per row based on the button limit per row and number of saved colors\r\n let totalButtonsThisRow: number;\r\n if (options.savedColors.length > thisRow * options.numSwatchesPerLine!) {\r\n totalButtonsThisRow = options.numSwatchesPerLine!;\r\n } else {\r\n totalButtonsThisRow = options.savedColors.length - (thisRow - 1) * options.numSwatchesPerLine!;\r\n }\r\n const buttonIterations: number = Math.min(Math.max(totalButtonsThisRow, 0), options.numSwatchesPerLine!);\r\n for (let x = 0, w = 1; x < buttonIterations; x++) {\r\n if (x > options.numSwatchesPerLine!) {\r\n continue;\r\n }\r\n const swatch: Button | null = createSwatch();\r\n if (swatch != null) {\r\n swatchDrawer.addControl(swatch, y, w);\r\n w += 2;\r\n swatchNumber++;\r\n } else {\r\n continue;\r\n }\r\n }\r\n }\r\n if (options.savedColors.length >= options.swatchLimit!) {\r\n disableButton(button, true);\r\n } else {\r\n disableButton(button, false);\r\n }\r\n }\r\n }\r\n\r\n // Shows or hides edit swatches button depending on if there are saved swatches\r\n function setEditButtonVisibility(enableButton: boolean) {\r\n if (enableButton) {\r\n butEdit = Button.CreateSimpleButton(\"butEdit\", \"Edit\");\r\n butEdit.width = buttonWidth;\r\n butEdit.height = buttonHeight;\r\n butEdit.left = Math.floor(parseInt(buttonWidth) * 0.1).toString() + \"px\";\r\n butEdit.top = (parseFloat(butEdit.left) * -1).toString() + \"px\";\r\n butEdit.verticalAlignment = Control.VERTICAL_ALIGNMENT_BOTTOM;\r\n butEdit.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n butEdit.thickness = 2;\r\n butEdit.color = buttonColor;\r\n butEdit.fontSize = buttonFontSize;\r\n butEdit.background = buttonBackgroundColor;\r\n butEdit.onPointerEnterObservable.add(() => {\r\n butEdit.background = buttonBackgroundHoverColor;\r\n });\r\n butEdit.onPointerOutObservable.add(() => {\r\n butEdit.background = buttonBackgroundColor;\r\n });\r\n butEdit.pointerDownAnimation = () => {\r\n butEdit.background = buttonBackgroundClickColor;\r\n };\r\n butEdit.pointerUpAnimation = () => {\r\n butEdit.background = buttonBackgroundHoverColor;\r\n };\r\n butEdit.onPointerClickObservable.add(() => {\r\n if (editSwatchMode) {\r\n editSwatchMode = false;\r\n } else {\r\n editSwatchMode = true;\r\n }\r\n editSwatches();\r\n });\r\n pickerGrid.addControl(butEdit, 1, 0);\r\n } else {\r\n pickerGrid.removeControl(butEdit);\r\n }\r\n }\r\n\r\n // Called when the user hits the limit of saved colors in the drawer.\r\n function disableButton(button: Button, disabled: boolean) {\r\n if (disabled) {\r\n button.color = buttonDisabledColor;\r\n button.background = buttonDisabledBackgroundColor;\r\n } else {\r\n button.color = buttonColor;\r\n button.background = buttonBackgroundColor;\r\n }\r\n }\r\n\r\n // Passes last chosen color back to scene and kills dialog by removing from AdvancedDynamicTexture\r\n function closePicker(color: string) {\r\n if (options.savedColors && options.savedColors.length > 0) {\r\n resolve({\r\n savedColors: options.savedColors,\r\n pickedColor: color,\r\n });\r\n } else {\r\n resolve({\r\n pickedColor: color,\r\n });\r\n }\r\n advancedTexture.removeControl(dialogContainer);\r\n }\r\n });\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the ColorPicker class with the type store for serialization support.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterColorPicker(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.GUI.ColorPicker\", ColorPicker);\r\n}\r\n"]}
1
+ {"version":3,"file":"colorpicker.pure.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/colorpicker.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"core/Misc/observable\";\r\nimport { type Vector2 } from \"core/Maths/math.vector.pure\";\r\n\r\nimport { Control } from \"./control.pure\";\r\nimport { type Measure } from \"../measure\";\r\nimport { InputText } from \"./inputText.pure\";\r\nimport { Rectangle } from \"./rectangle.pure\";\r\nimport { Button } from \"./button.pure\";\r\nimport { Grid } from \"./grid.pure\";\r\nimport { type AdvancedDynamicTexture } from \"../advancedDynamicTexture\";\r\nimport { TextBlock } from \"../controls/textBlock.pure\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { Color3 } from \"core/Maths/math.color.pure\";\r\nimport { type PointerInfoBase } from \"core/Events/pointerEvents\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport { type ICanvas, type ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\nimport { EngineStore } from \"core/Engines/engineStore\";\r\n\r\n/** Class used to create color pickers */\r\nexport class ColorPicker extends Control {\r\n private static _Epsilon = 0.000001;\r\n private _colorWheelCanvas: ICanvas;\r\n\r\n private _value: Color3 = Color3.Red();\r\n private _tmpColor = new Color3();\r\n\r\n private _pointerStartedOnSquare = false;\r\n private _pointerStartedOnWheel = false;\r\n\r\n private _squareLeft = 0;\r\n private _squareTop = 0;\r\n private _squareSize = 0;\r\n\r\n private _h = 360;\r\n private _s = 1;\r\n private _v = 1;\r\n\r\n private _lastPointerDownId = -1;\r\n\r\n /**\r\n * Observable raised when the value changes\r\n */\r\n public onValueChangedObservable = new Observable<Color3>();\r\n\r\n /** Gets or sets the color of the color picker */\r\n @serialize()\r\n public get value(): Color3 {\r\n return this._value;\r\n }\r\n\r\n public set value(value: Color3) {\r\n if (this._value.equals(value)) {\r\n return;\r\n }\r\n\r\n this._value.copyFrom(value);\r\n\r\n this._value.toHSVToRef(this._tmpColor);\r\n\r\n this._h = this._tmpColor.r;\r\n this._s = Math.max(this._tmpColor.g, 0.00001);\r\n this._v = Math.max(this._tmpColor.b, 0.00001);\r\n\r\n this._markAsDirty();\r\n\r\n if (this._value.r <= ColorPicker._Epsilon) {\r\n this._value.r = 0;\r\n }\r\n\r\n if (this._value.g <= ColorPicker._Epsilon) {\r\n this._value.g = 0;\r\n }\r\n\r\n if (this._value.b <= ColorPicker._Epsilon) {\r\n this._value.b = 0;\r\n }\r\n\r\n if (this._value.r >= 1.0 - ColorPicker._Epsilon) {\r\n this._value.r = 1.0;\r\n }\r\n\r\n if (this._value.g >= 1.0 - ColorPicker._Epsilon) {\r\n this._value.g = 1.0;\r\n }\r\n\r\n if (this._value.b >= 1.0 - ColorPicker._Epsilon) {\r\n this._value.b = 1.0;\r\n }\r\n\r\n this.onValueChangedObservable.notifyObservers(this._value, undefined, this, this);\r\n }\r\n\r\n /**\r\n * Gets or sets control width\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size\r\n */\r\n @serialize()\r\n public override get width(): string | number {\r\n return this._width.toString(this._host);\r\n }\r\n\r\n public override set width(value: string | number) {\r\n if (this._width.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._width.fromString(value)) {\r\n if (this._width.getValue(this._host) === 0) {\r\n value = \"1px\";\r\n this._width.fromString(value);\r\n }\r\n this._height.fromString(value);\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets control height\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size\r\n */\r\n @serialize()\r\n public override get height(): string | number {\r\n return this._height.toString(this._host);\r\n }\r\n\r\n /** Gets or sets control height */\r\n public override set height(value: string | number) {\r\n if (this._height.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._height.fromString(value)) {\r\n if (this._height.getValue(this._host) === 0) {\r\n value = \"1px\";\r\n this._height.fromString(value);\r\n }\r\n this._width.fromString(value);\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets control size */\r\n @serialize()\r\n public get size(): string | number {\r\n return this.width;\r\n }\r\n\r\n public set size(value: string | number) {\r\n this.width = value;\r\n }\r\n\r\n /**\r\n * Creates a new ColorPicker\r\n * @param name defines the control name\r\n */\r\n constructor(public override name?: string) {\r\n super(name);\r\n this.value = new Color3(0.88, 0.1, 0.1);\r\n this.size = \"200px\";\r\n this.isPointerBlocker = true;\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"ColorPicker\";\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected override _preMeasure(parentMeasure: Measure): void {\r\n if (parentMeasure.width < parentMeasure.height) {\r\n this._currentMeasure.height = parentMeasure.width;\r\n } else {\r\n this._currentMeasure.width = parentMeasure.height;\r\n }\r\n }\r\n\r\n private _updateSquareProps(): void {\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const wheelThickness = radius * 0.2;\r\n const innerDiameter = (radius - wheelThickness) * 2;\r\n const squareSize = innerDiameter / Math.sqrt(2);\r\n const offset = radius - squareSize * 0.5;\r\n\r\n this._squareLeft = this._currentMeasure.left + offset;\r\n this._squareTop = this._currentMeasure.top + offset;\r\n this._squareSize = squareSize;\r\n }\r\n\r\n private _drawGradientSquare(hueValue: number, left: number, top: number, width: number, height: number, context: ICanvasRenderingContext) {\r\n const lgh = context.createLinearGradient(left, top, width + left, top);\r\n lgh.addColorStop(0, \"#fff\");\r\n lgh.addColorStop(1, \"hsl(\" + hueValue + \", 100%, 50%)\");\r\n\r\n context.fillStyle = lgh;\r\n context.fillRect(left, top, width, height);\r\n\r\n const lgv = context.createLinearGradient(left, top, left, height + top);\r\n lgv.addColorStop(0, \"rgba(0,0,0,0)\");\r\n lgv.addColorStop(1, \"#000\");\r\n\r\n context.fillStyle = lgv;\r\n context.fillRect(left, top, width, height);\r\n }\r\n\r\n private _drawCircle(centerX: number, centerY: number, radius: number, context: ICanvasRenderingContext) {\r\n context.beginPath();\r\n context.arc(centerX, centerY, radius + 1, 0, 2 * Math.PI, false);\r\n context.lineWidth = 3;\r\n context.strokeStyle = \"#333333\";\r\n context.stroke();\r\n context.beginPath();\r\n context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);\r\n context.lineWidth = 3;\r\n context.strokeStyle = \"#ffffff\";\r\n context.stroke();\r\n }\r\n\r\n private _createColorWheelCanvas(radius: number, thickness: number): ICanvas {\r\n // Shoudl abstract platform instead of using LastCreatedEngine\r\n const engine = EngineStore.LastCreatedEngine;\r\n if (!engine) {\r\n throw new Error(\"Invalid engine. Unable to create a canvas.\");\r\n }\r\n const canvas = engine.createCanvas(radius * 2, radius * 2);\r\n const context = canvas.getContext(\"2d\");\r\n const image = context.getImageData(0, 0, radius * 2, radius * 2);\r\n const data = image.data;\r\n\r\n const color = this._tmpColor;\r\n const maxDistSq = radius * radius;\r\n const innerRadius = radius - thickness;\r\n const minDistSq = innerRadius * innerRadius;\r\n\r\n for (let x = -radius; x < radius; x++) {\r\n for (let y = -radius; y < radius; y++) {\r\n const distSq = x * x + y * y;\r\n\r\n if (distSq > maxDistSq || distSq < minDistSq) {\r\n continue;\r\n }\r\n\r\n const dist = Math.sqrt(distSq);\r\n const ang = Math.atan2(y, x);\r\n\r\n Color3.HSVtoRGBToRef((ang * 180) / Math.PI + 180, dist / radius, 1, color);\r\n\r\n const index = (x + radius + (y + radius) * 2 * radius) * 4;\r\n\r\n data[index] = color.r * 255;\r\n data[index + 1] = color.g * 255;\r\n data[index + 2] = color.b * 255;\r\n\r\n //apply less alpha to bigger color pickers\r\n let alphaAmount: number;\r\n const maxAlpha = 0.2;\r\n const minAlpha = 0.04;\r\n const lowerRadius = 50;\r\n const upperRadius = 150;\r\n\r\n if (radius < lowerRadius) {\r\n alphaAmount = maxAlpha;\r\n } else if (radius > upperRadius) {\r\n alphaAmount = minAlpha;\r\n } else {\r\n alphaAmount = ((minAlpha - maxAlpha) * (radius - lowerRadius)) / (upperRadius - lowerRadius) + maxAlpha;\r\n }\r\n\r\n const alphaRatio = (dist - innerRadius) / (radius - innerRadius);\r\n\r\n if (alphaRatio < alphaAmount) {\r\n data[index + 3] = 255 * (alphaRatio / alphaAmount);\r\n } else if (alphaRatio > 1 - alphaAmount) {\r\n data[index + 3] = 255 * (1.0 - (alphaRatio - (1 - alphaAmount)) / alphaAmount);\r\n } else {\r\n data[index + 3] = 255;\r\n }\r\n }\r\n }\r\n\r\n context.putImageData(image, 0, 0);\r\n\r\n return canvas;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _draw(context: ICanvasRenderingContext): void {\r\n context.save();\r\n\r\n this._applyStates(context);\r\n\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const wheelThickness = radius * 0.2;\r\n const left = this._currentMeasure.left;\r\n const top = this._currentMeasure.top;\r\n\r\n if (!this._colorWheelCanvas || this._colorWheelCanvas.width != radius * 2) {\r\n this._colorWheelCanvas = this._createColorWheelCanvas(radius, wheelThickness);\r\n }\r\n\r\n this._updateSquareProps();\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowColor = this.shadowColor;\r\n context.shadowBlur = this.shadowBlur;\r\n context.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio;\r\n context.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio;\r\n\r\n context.fillRect(this._squareLeft, this._squareTop, this._squareSize, this._squareSize);\r\n }\r\n\r\n context.drawImage(this._colorWheelCanvas, left, top);\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowBlur = 0;\r\n context.shadowOffsetX = 0;\r\n context.shadowOffsetY = 0;\r\n }\r\n\r\n this._drawGradientSquare(this._h, this._squareLeft, this._squareTop, this._squareSize, this._squareSize, context);\r\n\r\n let cx = this._squareLeft + this._squareSize * this._s;\r\n let cy = this._squareTop + this._squareSize * (1 - this._v);\r\n\r\n this._drawCircle(cx, cy, radius * 0.04, context);\r\n\r\n const dist = radius - wheelThickness * 0.5;\r\n cx = left + radius + Math.cos(((this._h - 180) * Math.PI) / 180) * dist;\r\n cy = top + radius + Math.sin(((this._h - 180) * Math.PI) / 180) * dist;\r\n this._drawCircle(cx, cy, wheelThickness * 0.35, context);\r\n\r\n context.restore();\r\n }\r\n\r\n // Events\r\n private _pointerIsDown = false;\r\n\r\n private _updateValueFromPointer(x: number, y: number): void {\r\n if (this._pointerStartedOnWheel) {\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const centerX = radius + this._currentMeasure.left;\r\n const centerY = radius + this._currentMeasure.top;\r\n this._h = (Math.atan2(y - centerY, x - centerX) * 180) / Math.PI + 180;\r\n } else if (this._pointerStartedOnSquare) {\r\n this._updateSquareProps();\r\n this._s = (x - this._squareLeft) / this._squareSize;\r\n this._v = 1 - (y - this._squareTop) / this._squareSize;\r\n this._s = Math.min(this._s, 1);\r\n this._s = Math.max(this._s, ColorPicker._Epsilon);\r\n this._v = Math.min(this._v, 1);\r\n this._v = Math.max(this._v, ColorPicker._Epsilon);\r\n }\r\n\r\n Color3.HSVtoRGBToRef(this._h, this._s, this._v, this._tmpColor);\r\n\r\n this.value = this._tmpColor;\r\n }\r\n\r\n private _isPointOnSquare(x: number, y: number): boolean {\r\n this._updateSquareProps();\r\n\r\n const left = this._squareLeft;\r\n const top = this._squareTop;\r\n const size = this._squareSize;\r\n\r\n if (x >= left && x <= left + size && y >= top && y <= top + size) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _isPointOnWheel(x: number, y: number): boolean {\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const centerX = radius + this._currentMeasure.left;\r\n const centerY = radius + this._currentMeasure.top;\r\n const wheelThickness = radius * 0.2;\r\n const innerRadius = radius - wheelThickness;\r\n const radiusSq = radius * radius;\r\n const innerRadiusSq = innerRadius * innerRadius;\r\n\r\n const dx = x - centerX;\r\n const dy = y - centerY;\r\n\r\n const distSq = dx * dx + dy * dy;\r\n\r\n if (distSq <= radiusSq && distSq >= innerRadiusSq) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public override _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\r\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\r\n return false;\r\n }\r\n\r\n if (this.isReadOnly) {\r\n return true;\r\n }\r\n\r\n this._pointerIsDown = true;\r\n\r\n this._pointerStartedOnSquare = false;\r\n this._pointerStartedOnWheel = false;\r\n\r\n // Invert transform\r\n this._invertTransformMatrix.transformCoordinates(coordinates.x, coordinates.y, this._transformedPosition);\r\n\r\n const x = this._transformedPosition.x;\r\n const y = this._transformedPosition.y;\r\n\r\n if (this._isPointOnSquare(x, y)) {\r\n this._pointerStartedOnSquare = true;\r\n } else if (this._isPointOnWheel(x, y)) {\r\n this._pointerStartedOnWheel = true;\r\n }\r\n\r\n this._updateValueFromPointer(x, y);\r\n this._host._capturingControl[pointerId] = this;\r\n this._lastPointerDownId = pointerId;\r\n return true;\r\n }\r\n\r\n public override _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void {\r\n // Only listen to pointer move events coming from the last pointer to click on the element (To support dual vr controller interaction)\r\n if (pointerId != this._lastPointerDownId) {\r\n return;\r\n }\r\n\r\n if (!this.isReadOnly) {\r\n // Invert transform\r\n this._invertTransformMatrix.transformCoordinates(coordinates.x, coordinates.y, this._transformedPosition);\r\n\r\n const x = this._transformedPosition.x;\r\n const y = this._transformedPosition.y;\r\n\r\n if (this._pointerIsDown) {\r\n this._updateValueFromPointer(x, y);\r\n }\r\n }\r\n\r\n super._onPointerMove(target, coordinates, pointerId, pi);\r\n }\r\n\r\n public override _onPointerUp(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, notifyClick: boolean, pi: PointerInfoBase): void {\r\n this._pointerIsDown = false;\r\n\r\n delete this._host._capturingControl[pointerId];\r\n super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick, pi);\r\n }\r\n\r\n public override _onCanvasBlur() {\r\n this._forcePointerUp();\r\n super._onCanvasBlur();\r\n }\r\n\r\n /**\r\n * This function expands the color picker by creating a color picker dialog with manual\r\n * color value input and the ability to save colors into an array to be used later in\r\n * subsequent launches of the dialogue.\r\n * @param advancedTexture defines the AdvancedDynamicTexture the dialog is assigned to\r\n * @param options defines size for dialog and options for saved colors. Also accepts last color picked as hex string and saved colors array as hex strings.\r\n * @param options.pickerWidth\r\n * @param options.pickerHeight\r\n * @param options.headerHeight\r\n * @param options.lastColor\r\n * @param options.swatchLimit\r\n * @param options.numSwatchesPerLine\r\n * @param options.savedColors\r\n * @returns picked color as a hex string and the saved colors array as hex strings.\r\n */\r\n public static async ShowPickerDialogAsync(\r\n advancedTexture: AdvancedDynamicTexture,\r\n options: {\r\n pickerWidth?: string;\r\n pickerHeight?: string;\r\n headerHeight?: string;\r\n lastColor?: string;\r\n swatchLimit?: number;\r\n numSwatchesPerLine?: number;\r\n savedColors?: Array<string>;\r\n }\r\n ): Promise<{\r\n savedColors?: string[];\r\n pickedColor: string;\r\n }> {\r\n return await new Promise((resolve) => {\r\n // Default options\r\n options.pickerWidth = options.pickerWidth || \"640px\";\r\n options.pickerHeight = options.pickerHeight || \"400px\";\r\n options.headerHeight = options.headerHeight || \"35px\";\r\n options.lastColor = options.lastColor || \"#000000\";\r\n options.swatchLimit = options.swatchLimit || 20;\r\n options.numSwatchesPerLine = options.numSwatchesPerLine || 10;\r\n\r\n // Window size settings\r\n const drawerMaxRows: number = options.swatchLimit / options.numSwatchesPerLine;\r\n const rawSwatchSize: number = parseFloat(options.pickerWidth) / options.numSwatchesPerLine;\r\n const gutterSize: number = Math.floor(rawSwatchSize * 0.25);\r\n const colGutters: number = gutterSize * (options.numSwatchesPerLine + 1);\r\n const swatchSize: number = Math.floor((parseFloat(options.pickerWidth) - colGutters) / options.numSwatchesPerLine);\r\n const drawerMaxSize: number = swatchSize * drawerMaxRows + gutterSize * (drawerMaxRows + 1);\r\n const containerSize: string = (parseInt(options.pickerHeight) + drawerMaxSize + Math.floor(swatchSize * 0.25)).toString() + \"px\";\r\n\r\n // Button Colors\r\n const buttonColor: string = \"#c0c0c0\";\r\n const buttonBackgroundColor: string = \"#535353\";\r\n const buttonBackgroundHoverColor: string = \"#414141\";\r\n const buttonBackgroundClickColor: string = \"515151\";\r\n const buttonDisabledColor: string = \"#555555\";\r\n const buttonDisabledBackgroundColor: string = \"#454545\";\r\n const currentSwatchesOutlineColor: string = \"#404040\";\r\n const luminanceLimitColor: Color3 = Color3.FromHexString(\"#dddddd\");\r\n const luminanceLimit: number = luminanceLimitColor.r + luminanceLimitColor.g + luminanceLimitColor.b;\r\n const iconColorDark: string = \"#aaaaaa\";\r\n const iconColorLight: string = \"#ffffff\";\r\n\r\n // Button settings\r\n let buttonFontSize: number;\r\n let butEdit: Button;\r\n\r\n // Input Text Colors\r\n const inputFieldLabels: string[] = [\"R\", \"G\", \"B\"];\r\n const inputTextBackgroundColor: string = \"#454545\";\r\n const inputTextColor: string = \"#f0f0f0\";\r\n\r\n // This int is used for naming swatches and serves as the index for calling them from the list\r\n let swatchNumber: number;\r\n\r\n // Menu Panel options. We need to know if the swatchDrawer exists so we can create it if needed.\r\n let swatchDrawer: Grid;\r\n let editSwatchMode: boolean = false;\r\n\r\n // Color InputText fields that will be updated upon value change\r\n let butSave: Button;\r\n let lastVal: string;\r\n let activeField: string;\r\n\r\n // Dialog menu container which will contain both the main dialogue window and the swatch drawer which opens once a color is saved.\r\n const dialogContainer: Grid = new Grid();\r\n dialogContainer.name = \"Dialog Container\";\r\n dialogContainer.width = options.pickerWidth;\r\n if (options.savedColors) {\r\n dialogContainer.height = containerSize;\r\n const topRow: number = parseInt(options.pickerHeight) / parseInt(containerSize);\r\n dialogContainer.addRowDefinition(topRow, false);\r\n dialogContainer.addRowDefinition(1.0 - topRow, false);\r\n } else {\r\n dialogContainer.height = options.pickerHeight;\r\n dialogContainer.addRowDefinition(1.0, false);\r\n }\r\n advancedTexture.addControl(dialogContainer);\r\n\r\n // Swatch drawer which contains all saved color buttons\r\n if (options.savedColors) {\r\n swatchDrawer = new Grid();\r\n swatchDrawer.name = \"Swatch Drawer\";\r\n swatchDrawer.verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;\r\n swatchDrawer.background = buttonBackgroundColor;\r\n swatchDrawer.width = options.pickerWidth!;\r\n const initialRows: number = options.savedColors.length / options.numSwatchesPerLine;\r\n let gutterCount: number;\r\n if (initialRows == 0) {\r\n gutterCount = 0;\r\n } else {\r\n gutterCount = initialRows + 1;\r\n }\r\n swatchDrawer.height = (swatchSize * initialRows + gutterCount * gutterSize).toString() + \"px\";\r\n swatchDrawer.top = Math.floor(swatchSize * 0.25).toString() + \"px\";\r\n for (let i = 0; i < Math.ceil(options.savedColors.length / options.numSwatchesPerLine) * 2 + 1; i++) {\r\n if (i % 2 != 0) {\r\n swatchDrawer.addRowDefinition(swatchSize, true);\r\n } else {\r\n swatchDrawer.addRowDefinition(gutterSize, true);\r\n }\r\n }\r\n for (let i = 0; i < options.numSwatchesPerLine * 2 + 1; i++) {\r\n if (i % 2 != 0) {\r\n swatchDrawer.addColumnDefinition(swatchSize, true);\r\n } else {\r\n swatchDrawer.addColumnDefinition(gutterSize, true);\r\n }\r\n }\r\n dialogContainer.addControl(swatchDrawer, 1, 0);\r\n }\r\n\r\n // Picker container\r\n const pickerPanel: Grid = new Grid();\r\n pickerPanel.name = \"Picker Panel\";\r\n pickerPanel.height = options.pickerHeight;\r\n const panelHead: number = parseInt(options.headerHeight) / parseInt(options.pickerHeight);\r\n const pickerPanelRows: number[] = [panelHead, 1.0 - panelHead];\r\n pickerPanel.addRowDefinition(pickerPanelRows[0], false);\r\n pickerPanel.addRowDefinition(pickerPanelRows[1], false);\r\n dialogContainer.addControl(pickerPanel, 0, 0);\r\n\r\n // Picker container header\r\n const header: Rectangle = new Rectangle();\r\n header.name = \"Dialogue Header Bar\";\r\n header.background = \"#cccccc\";\r\n header.thickness = 0;\r\n pickerPanel.addControl(header, 0, 0);\r\n\r\n // Header close button\r\n const closeButton: Button = Button.CreateSimpleButton(\"closeButton\", \"a\");\r\n closeButton.fontFamily = \"coreglyphs\";\r\n const headerColor3: Color3 = Color3.FromHexString(header.background);\r\n const closeIconColor = new Color3(1.0 - headerColor3.r, 1.0 - headerColor3.g, 1.0 - headerColor3.b);\r\n closeButton.color = closeIconColor.toHexString();\r\n closeButton.fontSize = Math.floor(parseInt(options.headerHeight) * 0.6);\r\n closeButton.textBlock!.textVerticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n closeButton.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_RIGHT;\r\n closeButton.height = closeButton.width = options.headerHeight;\r\n closeButton.background = header.background;\r\n closeButton.thickness = 0;\r\n closeButton.pointerDownAnimation = () => {};\r\n closeButton.pointerUpAnimation = () => {\r\n closeButton.background = header.background;\r\n };\r\n closeButton.pointerEnterAnimation = () => {\r\n closeButton.color = header.background;\r\n closeButton.background = \"red\";\r\n };\r\n closeButton.pointerOutAnimation = () => {\r\n closeButton.color = closeIconColor.toHexString();\r\n closeButton.background = header.background;\r\n };\r\n closeButton.onPointerClickObservable.add(() => {\r\n closePicker(currentSwatch.background);\r\n });\r\n pickerPanel.addControl(closeButton, 0, 0);\r\n\r\n // Dialog container body\r\n const dialogBody: Grid = new Grid();\r\n dialogBody.name = \"Dialogue Body\";\r\n dialogBody.background = buttonBackgroundColor;\r\n const dialogBodyCols: number[] = [0.4375, 0.5625];\r\n dialogBody.addRowDefinition(1.0, false);\r\n dialogBody.addColumnDefinition(dialogBodyCols[0], false);\r\n dialogBody.addColumnDefinition(dialogBodyCols[1], false);\r\n pickerPanel.addControl(dialogBody, 1, 0);\r\n\r\n // Picker grid\r\n const pickerGrid: Grid = new Grid();\r\n pickerGrid.name = \"Picker Grid\";\r\n pickerGrid.addRowDefinition(0.85, false);\r\n pickerGrid.addRowDefinition(0.15, false);\r\n dialogBody.addControl(pickerGrid, 0, 0);\r\n\r\n // Picker control\r\n const picker = new ColorPicker();\r\n picker.name = \"GUI Color Picker\";\r\n if (options.pickerHeight < options.pickerWidth) {\r\n picker.width = 0.89;\r\n } else {\r\n picker.height = 0.89;\r\n }\r\n picker.value = Color3.FromHexString(options.lastColor);\r\n picker.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;\r\n picker.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n picker.onPointerDownObservable.add(() => {\r\n activeField = picker.name!;\r\n lastVal = \"\";\r\n editSwatches(false);\r\n });\r\n picker.onValueChangedObservable.add(function (value) {\r\n // value is a color3\r\n if (activeField == picker.name) {\r\n updateValues(value, picker.name);\r\n }\r\n });\r\n pickerGrid.addControl(picker, 0, 0);\r\n\r\n // Picker body right quarant\r\n const pickerBodyRight: Grid = new Grid();\r\n pickerBodyRight.name = \"Dialogue Right Half\";\r\n pickerBodyRight.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n const pickerBodyRightRows: number[] = [0.514, 0.486];\r\n pickerBodyRight.addRowDefinition(pickerBodyRightRows[0], false);\r\n pickerBodyRight.addRowDefinition(pickerBodyRightRows[1], false);\r\n dialogBody.addControl(pickerBodyRight, 1, 1);\r\n\r\n // Picker container swatches and buttons\r\n const pickerSwatchesButtons: Grid = new Grid();\r\n pickerSwatchesButtons.name = \"Swatches and Buttons\";\r\n const pickerButtonsCol: number[] = [0.417, 0.583];\r\n pickerSwatchesButtons.addRowDefinition(1.0, false);\r\n pickerSwatchesButtons.addColumnDefinition(pickerButtonsCol[0], false);\r\n pickerSwatchesButtons.addColumnDefinition(pickerButtonsCol[1], false);\r\n pickerBodyRight.addControl(pickerSwatchesButtons, 0, 0);\r\n\r\n // Picker Swatches quadrant\r\n const pickerSwatches: Grid = new Grid();\r\n pickerSwatches.name = \"New and Current Swatches\";\r\n const pickeSwatchesRows: number[] = [0.04, 0.16, 0.64, 0.16];\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[0], false);\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[1], false);\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[2], false);\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[3], false);\r\n pickerSwatchesButtons.addControl(pickerSwatches, 0, 0);\r\n\r\n // Active swatches\r\n const activeSwatches: Grid = new Grid();\r\n activeSwatches.name = \"Active Swatches\";\r\n activeSwatches.width = 0.67;\r\n activeSwatches.addRowDefinition(0.5, false);\r\n activeSwatches.addRowDefinition(0.5, false);\r\n pickerSwatches.addControl(activeSwatches, 2, 0);\r\n\r\n const labelWidth: number = Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[0] * 0.11);\r\n const labelHeight: number = Math.floor(parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * pickeSwatchesRows[1] * 0.5);\r\n\r\n let labelTextSize: number;\r\n if (options.pickerWidth > options.pickerHeight) {\r\n labelTextSize = labelHeight;\r\n } else {\r\n labelTextSize = labelWidth;\r\n }\r\n // New color swatch and previous color button\r\n const newText: TextBlock = new TextBlock();\r\n newText.text = \"new\";\r\n newText.name = \"New Color Label\";\r\n newText.color = buttonColor;\r\n newText.fontSize = labelTextSize;\r\n pickerSwatches.addControl(newText, 1, 0);\r\n\r\n const newSwatch = new Rectangle();\r\n newSwatch.name = \"New Color Swatch\";\r\n newSwatch.background = options.lastColor;\r\n newSwatch.thickness = 0;\r\n activeSwatches.addControl(newSwatch, 0, 0);\r\n\r\n const currentSwatch: Button = Button.CreateSimpleButton(\"currentSwatch\", \"\");\r\n currentSwatch.background = options.lastColor;\r\n currentSwatch.thickness = 0;\r\n currentSwatch.onPointerClickObservable.add(() => {\r\n const revertColor = Color3.FromHexString(currentSwatch.background);\r\n updateValues(revertColor, currentSwatch.name!);\r\n editSwatches(false);\r\n });\r\n currentSwatch.pointerDownAnimation = () => {};\r\n currentSwatch.pointerUpAnimation = () => {};\r\n currentSwatch.pointerEnterAnimation = () => {};\r\n currentSwatch.pointerOutAnimation = () => {};\r\n activeSwatches.addControl(currentSwatch, 1, 0);\r\n\r\n const swatchOutline: Rectangle = new Rectangle();\r\n swatchOutline.name = \"Swatch Outline\";\r\n swatchOutline.width = 0.67;\r\n swatchOutline.thickness = 2;\r\n swatchOutline.color = currentSwatchesOutlineColor;\r\n swatchOutline.isHitTestVisible = false;\r\n pickerSwatches.addControl(swatchOutline, 2, 0);\r\n\r\n const currentText: TextBlock = new TextBlock();\r\n currentText.name = \"Current Color Label\";\r\n currentText.text = \"current\";\r\n currentText.color = buttonColor;\r\n currentText.fontSize = labelTextSize;\r\n pickerSwatches.addControl(currentText, 3, 0);\r\n\r\n // Buttons grid\r\n const buttonGrid: Grid = new Grid();\r\n buttonGrid.name = \"Button Grid\";\r\n buttonGrid.height = 0.8;\r\n const buttonGridRows: number = 1 / 3;\r\n buttonGrid.addRowDefinition(buttonGridRows, false);\r\n buttonGrid.addRowDefinition(buttonGridRows, false);\r\n buttonGrid.addRowDefinition(buttonGridRows, false);\r\n pickerSwatchesButtons.addControl(buttonGrid, 0, 1);\r\n\r\n // Determine pixel width and height for all buttons from overall panel dimensions\r\n const buttonWidth = Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[1] * 0.67).toString() + \"px\";\r\n const buttonHeight =\r\n Math.floor(\r\n parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * (parseFloat(buttonGrid.height.toString()) / 100) * buttonGridRows * 0.7\r\n ).toString() + \"px\";\r\n\r\n // Determine button type size\r\n if (parseFloat(buttonWidth) > parseFloat(buttonHeight)) {\r\n buttonFontSize = Math.floor(parseFloat(buttonHeight) * 0.45);\r\n } else {\r\n buttonFontSize = Math.floor(parseFloat(buttonWidth) * 0.11);\r\n }\r\n\r\n // Panel Buttons\r\n const butOK: Button = Button.CreateSimpleButton(\"butOK\", \"OK\");\r\n butOK.width = buttonWidth;\r\n butOK.height = buttonHeight;\r\n butOK.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n butOK.thickness = 2;\r\n butOK.color = buttonColor;\r\n butOK.fontSize = buttonFontSize;\r\n butOK.background = buttonBackgroundColor;\r\n butOK.onPointerEnterObservable.add(() => {\r\n butOK.background = buttonBackgroundHoverColor;\r\n });\r\n butOK.onPointerOutObservable.add(() => {\r\n butOK.background = buttonBackgroundColor;\r\n });\r\n butOK.pointerDownAnimation = () => {\r\n butOK.background = buttonBackgroundClickColor;\r\n };\r\n butOK.pointerUpAnimation = () => {\r\n butOK.background = buttonBackgroundHoverColor;\r\n };\r\n butOK.onPointerClickObservable.add(() => {\r\n editSwatches(false);\r\n closePicker(newSwatch.background);\r\n });\r\n buttonGrid.addControl(butOK, 0, 0);\r\n\r\n const butCancel: Button = Button.CreateSimpleButton(\"butCancel\", \"Cancel\");\r\n butCancel.width = buttonWidth;\r\n butCancel.height = buttonHeight;\r\n butCancel.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n butCancel.thickness = 2;\r\n butCancel.color = buttonColor;\r\n butCancel.fontSize = buttonFontSize;\r\n butCancel.background = buttonBackgroundColor;\r\n butCancel.onPointerEnterObservable.add(() => {\r\n butCancel.background = buttonBackgroundHoverColor;\r\n });\r\n butCancel.onPointerOutObservable.add(() => {\r\n butCancel.background = buttonBackgroundColor;\r\n });\r\n butCancel.pointerDownAnimation = () => {\r\n butCancel.background = buttonBackgroundClickColor;\r\n };\r\n butCancel.pointerUpAnimation = () => {\r\n butCancel.background = buttonBackgroundHoverColor;\r\n };\r\n butCancel.onPointerClickObservable.add(() => {\r\n editSwatches(false);\r\n closePicker(currentSwatch.background);\r\n });\r\n buttonGrid.addControl(butCancel, 1, 0);\r\n\r\n if (options.savedColors) {\r\n butSave = Button.CreateSimpleButton(\"butSave\", \"Save\");\r\n butSave.width = buttonWidth;\r\n butSave.height = buttonHeight;\r\n butSave.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n butSave.thickness = 2;\r\n butSave.fontSize = buttonFontSize;\r\n if (options.savedColors.length < options.swatchLimit) {\r\n butSave.color = buttonColor;\r\n butSave.background = buttonBackgroundColor;\r\n } else {\r\n disableButton(butSave, true);\r\n }\r\n butSave.onPointerEnterObservable.add(() => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundHoverColor;\r\n }\r\n }\r\n });\r\n butSave.onPointerOutObservable.add(() => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundColor;\r\n }\r\n }\r\n });\r\n butSave.pointerDownAnimation = () => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundClickColor;\r\n }\r\n }\r\n };\r\n butSave.pointerUpAnimation = () => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundHoverColor;\r\n }\r\n }\r\n };\r\n butSave.onPointerClickObservable.add(() => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length == 0) {\r\n setEditButtonVisibility(true);\r\n }\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n updateSwatches(newSwatch.background, butSave);\r\n }\r\n editSwatches(false);\r\n }\r\n });\r\n if (options.savedColors.length > 0) {\r\n setEditButtonVisibility(true);\r\n }\r\n buttonGrid.addControl(butSave, 2, 0);\r\n }\r\n\r\n // Picker color values input\r\n const pickerColorValues: Grid = new Grid();\r\n pickerColorValues.name = \"Dialog Lower Right\";\r\n pickerColorValues.addRowDefinition(0.02, false);\r\n pickerColorValues.addRowDefinition(0.63, false);\r\n pickerColorValues.addRowDefinition(0.21, false);\r\n pickerColorValues.addRowDefinition(0.14, false);\r\n pickerBodyRight.addControl(pickerColorValues, 1, 0);\r\n\r\n // RGB values text boxes\r\n const currentColor = Color3.FromHexString(options.lastColor);\r\n const rgbValuesQuadrant: Grid = new Grid();\r\n rgbValuesQuadrant.name = \"RGB Values\";\r\n rgbValuesQuadrant.width = 0.82;\r\n rgbValuesQuadrant.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\r\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\r\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\r\n rgbValuesQuadrant.addColumnDefinition(0.1, false);\r\n rgbValuesQuadrant.addColumnDefinition(0.2, false);\r\n rgbValuesQuadrant.addColumnDefinition(0.7, false);\r\n pickerColorValues.addControl(rgbValuesQuadrant, 1, 0);\r\n\r\n for (let i = 0; i < inputFieldLabels.length; i++) {\r\n const labelText: TextBlock = new TextBlock();\r\n labelText.text = inputFieldLabels[i];\r\n labelText.color = buttonColor;\r\n labelText.fontSize = buttonFontSize;\r\n rgbValuesQuadrant.addControl(labelText, i, 0);\r\n }\r\n\r\n // Input fields for RGB values\r\n const rValInt = new InputText();\r\n rValInt.width = 0.83;\r\n rValInt.height = 0.72;\r\n rValInt.name = \"rIntField\";\r\n rValInt.fontSize = buttonFontSize;\r\n rValInt.text = (currentColor.r * 255).toString();\r\n rValInt.color = inputTextColor;\r\n rValInt.background = inputTextBackgroundColor;\r\n rValInt.onFocusObservable.add(() => {\r\n activeField = rValInt.name!;\r\n lastVal = rValInt.text;\r\n editSwatches(false);\r\n });\r\n rValInt.onBlurObservable.add(() => {\r\n if (rValInt.text == \"\") {\r\n rValInt.text = \"0\";\r\n }\r\n updateInt(rValInt, \"r\");\r\n if (activeField == rValInt.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n rValInt.onTextChangedObservable.add(() => {\r\n if (activeField == rValInt.name) {\r\n updateInt(rValInt, \"r\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(rValInt, 0, 1);\r\n\r\n const gValInt = new InputText();\r\n gValInt.width = 0.83;\r\n gValInt.height = 0.72;\r\n gValInt.name = \"gIntField\";\r\n gValInt.fontSize = buttonFontSize;\r\n gValInt.text = (currentColor.g * 255).toString();\r\n gValInt.color = inputTextColor;\r\n gValInt.background = inputTextBackgroundColor;\r\n gValInt.onFocusObservable.add(() => {\r\n activeField = gValInt.name!;\r\n lastVal = gValInt.text;\r\n editSwatches(false);\r\n });\r\n gValInt.onBlurObservable.add(() => {\r\n if (gValInt.text == \"\") {\r\n gValInt.text = \"0\";\r\n }\r\n updateInt(gValInt, \"g\");\r\n if (activeField == gValInt.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n gValInt.onTextChangedObservable.add(() => {\r\n if (activeField == gValInt.name) {\r\n updateInt(gValInt, \"g\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(gValInt, 1, 1);\r\n\r\n const bValInt = new InputText();\r\n bValInt.width = 0.83;\r\n bValInt.height = 0.72;\r\n bValInt.name = \"bIntField\";\r\n bValInt.fontSize = buttonFontSize;\r\n bValInt.text = (currentColor.b * 255).toString();\r\n bValInt.color = inputTextColor;\r\n bValInt.background = inputTextBackgroundColor;\r\n bValInt.onFocusObservable.add(() => {\r\n activeField = bValInt.name!;\r\n lastVal = bValInt.text;\r\n editSwatches(false);\r\n });\r\n bValInt.onBlurObservable.add(() => {\r\n if (bValInt.text == \"\") {\r\n bValInt.text = \"0\";\r\n }\r\n updateInt(bValInt, \"b\");\r\n if (activeField == bValInt.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n bValInt.onTextChangedObservable.add(() => {\r\n if (activeField == bValInt.name) {\r\n updateInt(bValInt, \"b\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(bValInt, 2, 1);\r\n\r\n const rValDec = new InputText();\r\n rValDec.width = 0.95;\r\n rValDec.height = 0.72;\r\n rValDec.name = \"rDecField\";\r\n rValDec.fontSize = buttonFontSize;\r\n rValDec.text = currentColor.r.toString();\r\n rValDec.color = inputTextColor;\r\n rValDec.background = inputTextBackgroundColor;\r\n rValDec.onFocusObservable.add(() => {\r\n activeField = rValDec.name!;\r\n lastVal = rValDec.text;\r\n editSwatches(false);\r\n });\r\n rValDec.onBlurObservable.add(() => {\r\n if (parseFloat(rValDec.text) == 0 || rValDec.text == \"\") {\r\n rValDec.text = \"0\";\r\n updateFloat(rValDec, \"r\");\r\n }\r\n if (activeField == rValDec.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n rValDec.onTextChangedObservable.add(() => {\r\n if (activeField == rValDec.name) {\r\n updateFloat(rValDec, \"r\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(rValDec, 0, 2);\r\n\r\n const gValDec = new InputText();\r\n gValDec.width = 0.95;\r\n gValDec.height = 0.72;\r\n gValDec.name = \"gDecField\";\r\n gValDec.fontSize = buttonFontSize;\r\n gValDec.text = currentColor.g.toString();\r\n gValDec.color = inputTextColor;\r\n gValDec.background = inputTextBackgroundColor;\r\n gValDec.onFocusObservable.add(() => {\r\n activeField = gValDec.name!;\r\n lastVal = gValDec.text;\r\n editSwatches(false);\r\n });\r\n gValDec.onBlurObservable.add(() => {\r\n if (parseFloat(gValDec.text) == 0 || gValDec.text == \"\") {\r\n gValDec.text = \"0\";\r\n updateFloat(gValDec, \"g\");\r\n }\r\n if (activeField == gValDec.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n gValDec.onTextChangedObservable.add(() => {\r\n if (activeField == gValDec.name) {\r\n updateFloat(gValDec, \"g\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(gValDec, 1, 2);\r\n\r\n const bValDec = new InputText();\r\n bValDec.width = 0.95;\r\n bValDec.height = 0.72;\r\n bValDec.name = \"bDecField\";\r\n bValDec.fontSize = buttonFontSize;\r\n bValDec.text = currentColor.b.toString();\r\n bValDec.color = inputTextColor;\r\n bValDec.background = inputTextBackgroundColor;\r\n bValDec.onFocusObservable.add(() => {\r\n activeField = bValDec.name!;\r\n lastVal = bValDec.text;\r\n editSwatches(false);\r\n });\r\n bValDec.onBlurObservable.add(() => {\r\n if (parseFloat(bValDec.text) == 0 || bValDec.text == \"\") {\r\n bValDec.text = \"0\";\r\n updateFloat(bValDec, \"b\");\r\n }\r\n if (activeField == bValDec.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n bValDec.onTextChangedObservable.add(() => {\r\n if (activeField == bValDec.name) {\r\n updateFloat(bValDec, \"b\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(bValDec, 2, 2);\r\n\r\n // Hex value input\r\n const hexValueQuadrant: Grid = new Grid();\r\n hexValueQuadrant.name = \"Hex Value\";\r\n hexValueQuadrant.width = 0.82;\r\n hexValueQuadrant.addRowDefinition(1.0, false);\r\n hexValueQuadrant.addColumnDefinition(0.1, false);\r\n hexValueQuadrant.addColumnDefinition(0.9, false);\r\n pickerColorValues.addControl(hexValueQuadrant, 2, 0);\r\n\r\n const labelText: TextBlock = new TextBlock();\r\n labelText.text = \"#\";\r\n labelText.color = buttonColor;\r\n labelText.fontSize = buttonFontSize;\r\n hexValueQuadrant.addControl(labelText, 0, 0);\r\n\r\n const hexVal = new InputText();\r\n hexVal.width = 0.96;\r\n hexVal.height = 0.72;\r\n hexVal.name = \"hexField\";\r\n hexVal.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;\r\n hexVal.fontSize = buttonFontSize;\r\n const minusPound = options.lastColor.split(\"#\");\r\n hexVal.text = minusPound[1];\r\n hexVal.color = inputTextColor;\r\n hexVal.background = inputTextBackgroundColor;\r\n hexVal.onFocusObservable.add(() => {\r\n activeField = hexVal.name!;\r\n lastVal = hexVal.text;\r\n editSwatches(false);\r\n });\r\n hexVal.onBlurObservable.add(() => {\r\n if (hexVal.text.length == 3) {\r\n const val = hexVal.text.split(\"\");\r\n hexVal.text = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\r\n }\r\n if (hexVal.text == \"\") {\r\n hexVal.text = \"000000\";\r\n updateValues(Color3.FromHexString(hexVal.text), \"b\");\r\n }\r\n if (activeField == hexVal.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n hexVal.onTextChangedObservable.add(() => {\r\n let newHexValue: string = hexVal.text;\r\n const checkHex: boolean = /[^0-9A-F]/i.test(newHexValue);\r\n if ((hexVal.text.length > 6 || checkHex) && activeField == hexVal.name) {\r\n hexVal.text = lastVal;\r\n } else {\r\n if (hexVal.text.length < 6) {\r\n const leadingZero: number = 6 - hexVal.text.length;\r\n for (let i = 0; i < leadingZero; i++) {\r\n newHexValue = \"0\" + newHexValue;\r\n }\r\n }\r\n if (hexVal.text.length == 3) {\r\n const val: string[] = hexVal.text.split(\"\");\r\n newHexValue = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\r\n }\r\n newHexValue = \"#\" + newHexValue;\r\n if (activeField == hexVal.name) {\r\n lastVal = hexVal.text;\r\n updateValues(Color3.FromHexString(newHexValue), hexVal.name);\r\n }\r\n }\r\n });\r\n hexValueQuadrant.addControl(hexVal, 0, 1);\r\n\r\n if (options.savedColors && options.savedColors.length > 0) {\r\n updateSwatches(\"\", butSave!);\r\n }\r\n\r\n /**\r\n * Will update all values for InputText and ColorPicker controls based on the BABYLON.Color3 passed to this function.\r\n * Each InputText control and the ColorPicker control will be tested to see if they are the activeField and if they\r\n * are will receive no update. This is to prevent the input from the user being overwritten.\r\n * @param value\r\n * @param inputField\r\n */\r\n function updateValues(value: Color3, inputField: string) {\r\n activeField = inputField;\r\n const pickedColor: string = value.toHexString();\r\n newSwatch.background = pickedColor;\r\n if (rValInt.name != activeField) {\r\n rValInt.text = Math.floor(value.r * 255).toString();\r\n }\r\n if (gValInt.name != activeField) {\r\n gValInt.text = Math.floor(value.g * 255).toString();\r\n }\r\n if (bValInt.name != activeField) {\r\n bValInt.text = Math.floor(value.b * 255).toString();\r\n }\r\n if (rValDec.name != activeField) {\r\n rValDec.text = value.r.toString();\r\n }\r\n if (gValDec.name != activeField) {\r\n gValDec.text = value.g.toString();\r\n }\r\n if (bValDec.name != activeField) {\r\n bValDec.text = value.b.toString();\r\n }\r\n if (hexVal.name != activeField) {\r\n const minusPound: string[] = pickedColor.split(\"#\");\r\n hexVal.text = minusPound[1];\r\n }\r\n if (picker.name != activeField) {\r\n picker.value = value;\r\n }\r\n }\r\n\r\n // When the user enters an integer for R, G, or B we check to make sure it is a valid number and replace if not.\r\n function updateInt(field: InputText, channel: string) {\r\n let newValue: string = field.text;\r\n const checkVal: boolean = /[^0-9]/g.test(newValue);\r\n if (checkVal) {\r\n field.text = lastVal;\r\n return;\r\n } else {\r\n if (newValue != \"\") {\r\n if (Math.floor(parseInt(newValue)) < 0) {\r\n newValue = \"0\";\r\n } else if (Math.floor(parseInt(newValue)) > 255) {\r\n newValue = \"255\";\r\n } else if (isNaN(parseInt(newValue))) {\r\n newValue = \"0\";\r\n }\r\n }\r\n if (activeField == field.name) {\r\n lastVal = newValue;\r\n }\r\n }\r\n if (newValue != \"\") {\r\n newValue = parseInt(newValue).toString();\r\n field.text = newValue;\r\n const newSwatchRGB: Color3 = Color3.FromHexString(newSwatch.background);\r\n if (activeField == field.name) {\r\n if (channel == \"r\") {\r\n updateValues(new Color3(parseInt(newValue) / 255, newSwatchRGB.g, newSwatchRGB.b), field.name);\r\n } else if (channel == \"g\") {\r\n updateValues(new Color3(newSwatchRGB.r, parseInt(newValue) / 255, newSwatchRGB.b), field.name);\r\n } else {\r\n updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, parseInt(newValue) / 255), field.name);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // When the user enters a float for R, G, or B we check to make sure it is a valid number and replace if not.\r\n function updateFloat(field: InputText, channel: string) {\r\n let newValue: string = field.text;\r\n const checkVal: boolean = /[^0-9.]/g.test(newValue);\r\n if (checkVal) {\r\n field.text = lastVal;\r\n return;\r\n } else {\r\n if (newValue != \"\" && newValue != \".\" && parseFloat(newValue) != 0) {\r\n if (parseFloat(newValue) < 0.0) {\r\n newValue = \"0.0\";\r\n } else if (parseFloat(newValue) > 1.0) {\r\n newValue = \"1.0\";\r\n } else if (isNaN(parseFloat(newValue))) {\r\n newValue = \"0.0\";\r\n }\r\n }\r\n if (activeField == field.name) {\r\n lastVal = newValue;\r\n }\r\n }\r\n if (newValue != \"\" && newValue != \".\" && parseFloat(newValue) != 0) {\r\n newValue = parseFloat(newValue).toString();\r\n field.text = newValue;\r\n } else {\r\n newValue = \"0.0\";\r\n }\r\n const newSwatchRGB = Color3.FromHexString(newSwatch.background);\r\n if (activeField == field.name) {\r\n if (channel == \"r\") {\r\n updateValues(new Color3(parseFloat(newValue), newSwatchRGB.g, newSwatchRGB.b), field.name);\r\n } else if (channel == \"g\") {\r\n updateValues(new Color3(newSwatchRGB.r, parseFloat(newValue), newSwatchRGB.b), field.name);\r\n } else {\r\n updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, parseFloat(newValue)), field.name);\r\n }\r\n }\r\n }\r\n\r\n // Removes the current index from the savedColors array. Drawer can then be regenerated.\r\n function deleteSwatch(index: number) {\r\n if (options.savedColors) {\r\n options.savedColors.splice(index, 1);\r\n }\r\n if (options.savedColors && options.savedColors.length == 0) {\r\n setEditButtonVisibility(false);\r\n editSwatchMode = false;\r\n }\r\n }\r\n\r\n // Creates and styles an individual swatch when updateSwatches is called.\r\n function createSwatch() {\r\n if (options.savedColors && options.savedColors[swatchNumber]) {\r\n let icon: string;\r\n if (editSwatchMode) {\r\n icon = \"b\";\r\n } else {\r\n icon = \"\";\r\n }\r\n const swatch: Button = Button.CreateSimpleButton(\"Swatch_\" + swatchNumber, icon);\r\n swatch.fontFamily = \"coreglyphs\";\r\n const swatchColor: Color3 = Color3.FromHexString(options.savedColors[swatchNumber]);\r\n const swatchLuminence: number = swatchColor.r + swatchColor.g + swatchColor.b;\r\n\r\n // Set color of outline and textBlock based on luminance of the color swatch so feedback always visible\r\n if (swatchLuminence > luminanceLimit) {\r\n swatch.color = iconColorDark;\r\n } else {\r\n swatch.color = iconColorLight;\r\n }\r\n swatch.fontSize = Math.floor(swatchSize * 0.7);\r\n swatch.textBlock!.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n swatch.height = swatch.width = swatchSize.toString() + \"px\";\r\n swatch.background = options.savedColors[swatchNumber];\r\n swatch.thickness = 2;\r\n const metadata = swatchNumber;\r\n swatch.pointerDownAnimation = () => {\r\n swatch.thickness = 4;\r\n };\r\n swatch.pointerUpAnimation = () => {\r\n swatch.thickness = 3;\r\n };\r\n swatch.pointerEnterAnimation = () => {\r\n swatch.thickness = 3;\r\n };\r\n swatch.pointerOutAnimation = () => {\r\n swatch.thickness = 2;\r\n };\r\n swatch.onPointerClickObservable.add(() => {\r\n if (!editSwatchMode) {\r\n if (options.savedColors) {\r\n updateValues(Color3.FromHexString(options.savedColors[metadata]), swatch.name!);\r\n }\r\n } else {\r\n deleteSwatch(metadata);\r\n updateSwatches(\"\", butSave);\r\n }\r\n });\r\n return swatch;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n // Mode switch to render button text and close symbols on swatch controls\r\n function editSwatches(mode?: boolean) {\r\n if (mode !== undefined) {\r\n editSwatchMode = mode;\r\n }\r\n let thisButton: Button;\r\n if (editSwatchMode) {\r\n for (let i = 0; i < swatchDrawer.children.length; i++) {\r\n thisButton = swatchDrawer.children[i] as Button;\r\n thisButton.textBlock!.text = \"b\";\r\n }\r\n if (butEdit !== undefined) {\r\n butEdit.textBlock!.text = \"Done\";\r\n }\r\n } else {\r\n for (let i = 0; i < swatchDrawer.children.length; i++) {\r\n thisButton = swatchDrawer.children[i] as Button;\r\n thisButton.textBlock!.text = \"\";\r\n }\r\n if (butEdit !== undefined) {\r\n butEdit.textBlock!.text = \"Edit\";\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * When Save Color button is pressed this function will first create a swatch drawer if one is not already\r\n * made. Then all controls are removed from the drawer and we step through the savedColors array and\r\n * creates one swatch per color. It will also set the height of the drawer control based on how many\r\n * saved colors there are and how many can be stored per row.\r\n * @param color\r\n * @param button\r\n */\r\n function updateSwatches(color: string, button: Button) {\r\n if (options.savedColors) {\r\n if (color != \"\") {\r\n options.savedColors.push(color);\r\n }\r\n swatchNumber = 0;\r\n swatchDrawer.clearControls();\r\n const rowCount: number = Math.ceil(options.savedColors.length / options.numSwatchesPerLine!);\r\n let gutterCount: number;\r\n if (rowCount == 0) {\r\n gutterCount = 0;\r\n } else {\r\n gutterCount = rowCount + 1;\r\n }\r\n if (swatchDrawer.rowCount != rowCount + gutterCount) {\r\n const currentRows: number = swatchDrawer.rowCount;\r\n for (let i = 0; i < currentRows; i++) {\r\n swatchDrawer.removeRowDefinition(0);\r\n }\r\n for (let i = 0; i < rowCount + gutterCount; i++) {\r\n if (i % 2) {\r\n swatchDrawer.addRowDefinition(swatchSize, true);\r\n } else {\r\n swatchDrawer.addRowDefinition(gutterSize, true);\r\n }\r\n }\r\n }\r\n swatchDrawer.height = (swatchSize * rowCount + gutterCount * gutterSize).toString() + \"px\";\r\n\r\n for (let y = 1, thisRow = 1; y < rowCount + gutterCount; y += 2, thisRow++) {\r\n // Determine number of buttons to create per row based on the button limit per row and number of saved colors\r\n let totalButtonsThisRow: number;\r\n if (options.savedColors.length > thisRow * options.numSwatchesPerLine!) {\r\n totalButtonsThisRow = options.numSwatchesPerLine!;\r\n } else {\r\n totalButtonsThisRow = options.savedColors.length - (thisRow - 1) * options.numSwatchesPerLine!;\r\n }\r\n const buttonIterations: number = Math.min(Math.max(totalButtonsThisRow, 0), options.numSwatchesPerLine!);\r\n for (let x = 0, w = 1; x < buttonIterations; x++) {\r\n if (x > options.numSwatchesPerLine!) {\r\n continue;\r\n }\r\n const swatch: Button | null = createSwatch();\r\n if (swatch != null) {\r\n swatchDrawer.addControl(swatch, y, w);\r\n w += 2;\r\n swatchNumber++;\r\n } else {\r\n continue;\r\n }\r\n }\r\n }\r\n if (options.savedColors.length >= options.swatchLimit!) {\r\n disableButton(button, true);\r\n } else {\r\n disableButton(button, false);\r\n }\r\n }\r\n }\r\n\r\n // Shows or hides edit swatches button depending on if there are saved swatches\r\n function setEditButtonVisibility(enableButton: boolean) {\r\n if (enableButton) {\r\n butEdit = Button.CreateSimpleButton(\"butEdit\", \"Edit\");\r\n butEdit.width = buttonWidth;\r\n butEdit.height = buttonHeight;\r\n butEdit.left = Math.floor(parseInt(buttonWidth) * 0.1).toString() + \"px\";\r\n butEdit.top = (parseFloat(butEdit.left) * -1).toString() + \"px\";\r\n butEdit.verticalAlignment = Control.VERTICAL_ALIGNMENT_BOTTOM;\r\n butEdit.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n butEdit.thickness = 2;\r\n butEdit.color = buttonColor;\r\n butEdit.fontSize = buttonFontSize;\r\n butEdit.background = buttonBackgroundColor;\r\n butEdit.onPointerEnterObservable.add(() => {\r\n butEdit.background = buttonBackgroundHoverColor;\r\n });\r\n butEdit.onPointerOutObservable.add(() => {\r\n butEdit.background = buttonBackgroundColor;\r\n });\r\n butEdit.pointerDownAnimation = () => {\r\n butEdit.background = buttonBackgroundClickColor;\r\n };\r\n butEdit.pointerUpAnimation = () => {\r\n butEdit.background = buttonBackgroundHoverColor;\r\n };\r\n butEdit.onPointerClickObservable.add(() => {\r\n if (editSwatchMode) {\r\n editSwatchMode = false;\r\n } else {\r\n editSwatchMode = true;\r\n }\r\n editSwatches();\r\n });\r\n pickerGrid.addControl(butEdit, 1, 0);\r\n } else {\r\n pickerGrid.removeControl(butEdit);\r\n }\r\n }\r\n\r\n // Called when the user hits the limit of saved colors in the drawer.\r\n function disableButton(button: Button, disabled: boolean) {\r\n if (disabled) {\r\n button.color = buttonDisabledColor;\r\n button.background = buttonDisabledBackgroundColor;\r\n } else {\r\n button.color = buttonColor;\r\n button.background = buttonBackgroundColor;\r\n }\r\n }\r\n\r\n // Passes last chosen color back to scene and kills dialog by removing from AdvancedDynamicTexture\r\n function closePicker(color: string) {\r\n if (options.savedColors && options.savedColors.length > 0) {\r\n resolve({\r\n savedColors: options.savedColors,\r\n pickedColor: color,\r\n });\r\n } else {\r\n resolve({\r\n pickedColor: color,\r\n });\r\n }\r\n advancedTexture.removeControl(dialogContainer);\r\n }\r\n });\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the ColorPicker class with the type store for serialization support.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterColorPicker(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.GUI.ColorPicker\", ColorPicker);\r\n}\r\n"]}