<?xml version="1.0" encoding="UTF-8" ?>
<class name="Gradient" inherits="Resource" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A color transition.
	</brief_description>
	<description>
		This resource describes a color transition by defining a set of colored points and how to interpolate between them.
		See also [Curve] which supports more complex easing methods, but does not support colors.
	</description>
	<tutorials>
	</tutorials>
	<methods>
		<method name="add_point">
			<return type="void" />
			<param index="0" name="offset" type="float" />
			<param index="1" name="color" type="Color" />
			<description>
				Adds the specified color to the gradient, with the specified offset.
			</description>
		</method>
		<method name="get_color">
			<return type="Color" />
			<param index="0" name="point" type="int" />
			<description>
				Returns the color of the gradient color at index [param point].
			</description>
		</method>
		<method name="get_offset">
			<return type="float" />
			<param index="0" name="point" type="int" />
			<description>
				Returns the offset of the gradient color at index [param point].
			</description>
		</method>
		<method name="get_point_count" qualifiers="const">
			<return type="int" />
			<description>
				Returns the number of colors in the gradient.
			</description>
		</method>
		<method name="remove_point">
			<return type="void" />
			<param index="0" name="point" type="int" />
			<description>
				Removes the color at index [param point].
			</description>
		</method>
		<method name="reverse">
			<return type="void" />
			<description>
				Reverses/mirrors the gradient.
				[b]Note:[/b] This method mirrors all points around the middle of the gradient, which may produce unexpected results when [member interpolation_mode] is set to [constant GRADIENT_INTERPOLATE_CONSTANT].
			</description>
		</method>
		<method name="sample">
			<return type="Color" />
			<param index="0" name="offset" type="float" />
			<description>
				Returns the interpolated color specified by [param offset]. [param offset] should be between [code]0.0[/code] and [code]1.0[/code] (inclusive). Using a value lower than [code]0.0[/code] will return the same color as [code]0.0[/code], and using a value higher than [code]1.0[/code] will return the same color as [code]1.0[/code]. If your input value is not within this range, consider using [method @GlobalScope.remap] on the input value with output values set to [code]0.0[/code] and [code]1.0[/code].
			</description>
		</method>
		<method name="set_color">
			<return type="void" />
			<param index="0" name="point" type="int" />
			<param index="1" name="color" type="Color" />
			<description>
				Sets the color of the gradient color at index [param point].
			</description>
		</method>
		<method name="set_offset">
			<return type="void" />
			<param index="0" name="point" type="int" />
			<param index="1" name="offset" type="float" />
			<description>
				Sets the offset for the gradient color at index [param point].
			</description>
		</method>
	</methods>
	<members>
		<member name="colors" type="PackedColorArray" setter="set_colors" getter="get_colors" default="PackedColorArray(0, 0, 0, 1, 1, 1, 1, 1)">
			Gradient's colors as a [PackedColorArray].
			[b]Note:[/b] Setting this property updates all colors at once. To update any color individually use [method set_color].
		</member>
		<member name="interpolation_color_space" type="int" setter="set_interpolation_color_space" getter="get_interpolation_color_space" enum="Gradient.ColorSpace" default="0">
			The color space used to interpolate between points of the gradient. It does not affect the returned colors, which will always be in sRGB space.
			[b]Note:[/b] This setting has no effect when [member interpolation_mode] is set to [constant GRADIENT_INTERPOLATE_CONSTANT].
		</member>
		<member name="interpolation_mode" type="int" setter="set_interpolation_mode" getter="get_interpolation_mode" enum="Gradient.InterpolationMode" default="0">
			The algorithm used to interpolate between points of the gradient.
		</member>
		<member name="offsets" type="PackedFloat32Array" setter="set_offsets" getter="get_offsets" default="PackedFloat32Array(0, 1)">
			Gradient's offsets as a [PackedFloat32Array].
			[b]Note:[/b] Setting this property updates all offsets at once. To update any offset individually use [method set_offset].
		</member>
	</members>
	<constants>
		<constant name="GRADIENT_INTERPOLATE_LINEAR" value="0" enum="InterpolationMode">
			Linear interpolation.
		</constant>
		<constant name="GRADIENT_INTERPOLATE_CONSTANT" value="1" enum="InterpolationMode">
			Constant interpolation, color changes abruptly at each point and stays uniform between. This might cause visible aliasing when used for a gradient texture in some cases.
		</constant>
		<constant name="GRADIENT_INTERPOLATE_CUBIC" value="2" enum="InterpolationMode">
			Cubic interpolation.
		</constant>
		<constant name="GRADIENT_COLOR_SPACE_SRGB" value="0" enum="ColorSpace">
			sRGB color space.
		</constant>
		<constant name="GRADIENT_COLOR_SPACE_LINEAR_SRGB" value="1" enum="ColorSpace">
			Linear sRGB color space.
		</constant>
		<constant name="GRADIENT_COLOR_SPACE_OKLAB" value="2" enum="ColorSpace">
			[url=https://bottosson.github.io/posts/oklab/]Oklab[/url] color space. This color space provides a smooth and uniform-looking transition between colors.
		</constant>
	</constants>
</class>
