Widget resources

Initial widgets for application window can be created by using the widget definition file. Widget definitions compiles to C, and is further compiled and linked as static part of the application. Provided widget definition compiler is written in perl, which handles widget syntax explained below. When widget definitions is compiled, resulting file widget_defs.h is produced. Compatible file can be produced by some other mechanism if provided compiler or widget definition syntax feels discomfortable.

Widget resource compiler expects input file to be UTF-8 encoded, and supports include-directive, so resource file can be divided into several files:

include "the_other_widget_file.w2c"

In addition to widget definition file, widget_*() functions can be used to create and manipulate some of the widget parameters at runtime.

Provided widget set looks a bit like knobs in some old school audio equipment, see widgets example screenshots. Widget graphics can be replaced with some effort, see Custom widgets section at the bottom of this page for details.

Widget set has couple of widget types: background, block, label, lamp, led, pushbutton, turnswitch and slideswitch. Also support for toggleswitch widget exists, but no graphics is provided for it, therefore it is not documented here. There is no support for widgets familiar in other, more general user interface libraries, like scrollable text lists, text input fields, or ordinary rectangular and gray buttons with text in it. User interface can be extended in to that direction, for example, by using Redtools requester library, which is a part of Detroit engine.

Definitions

Widget definition file has widgets listed in top of each other. Before any widget definitions there must be a window definition to tell which window the following widgets are drawn. This value must match to WIDGET_STACK_ID which is passed to window_open() function when window is created in Ano script.

Inside the window block, a set block must be defined. One or more widget can form a set. Visible widget set can be changed by calling widget_change_set() function which takes set number as parameter. Set 0 is a special case, widgets defined under this set are always on window regardless of the currently active set, in other words, they are member of every set.

Widget definition file can also contain header tags to affect widget appearance and set some common defaults. Tags must be commented out and they must start with @. Tags include:

@WIDGET_DEFAULT_COLOR			rgb:#ffffff
					default widget color, for example block

@WIDGET_DEFAULT_HUE			0
					default widget hue value

@WIDGET_DEFAULT_LIGHT			no
					default lamp or led light on state, yes or no

@WIDGET_DEFAULT_STATE			enable
					default widget state, enabled or disabled

@WIDGET_DEFAULT_STICKY			no
					default pushbutton mode, can be yes or no

@WIDGET_DEFAULT_TITLE_CHARSET		UTF-8
					default title charset

@WIDGET_DEFAULT_TITLE_COLOR		rgb:#ffffff
					default title font color

@WIDGET_DEFAULT_TITLE_DPI		96
					default title font DPI

@WIDGET_DEFAULT_TITLE_FONT		path_to_the_font_file
					default title font file

@WIDGET_DEFAULT_TITLE_JUSTIFICATION	center
					default title justification

@WIDGET_DEFAULT_TITLE_POSITION		above
					default title position relative to widget

@WIDGET_DEFAULT_TITLE_SIZE		11
					default title font size in 1/64th points

@WIDGET_DEFAULT_TRIGGER			constant
					default for widget 'trigger' parameter,
					can be one of: constant alias drag, or release
					alias once

@WIDGET_DEFAULT_TYPE			0
					default for widget 'type' parameter

@WIDGET_DEFAULT_VALUE			0
					default for widget 'value' parameter

@WIDGET_USE_BOUNDING_BOXES		no
					if set to yes, draw a bounding box around the
					widget and its shadow, for debug use only to
					help leveling

Widget example, this is Vesmir example program widget definition:

;
; @WIDGET_USE_BOUNDING_BOXES no
;

window "1" {
	set "0" {
		widget "background" {
			name		"background"
			state		enable

			image		"examples/datafiles/background.tga"
		}

		widget "label" {
			name		"help"
			state		enable

			position	x = 20, y = 580

			label		"LMB + mouse to move view, wheel to zoom, enter to select, backspace to previous view", \
					charset = UTF-8, size = 8, \
					color = rgb:#ffffff, \
					justification = left
		}

		widget "pushbutton_2"
			name		"render_object"
			state		enable
			type		3

			position	x = 40, y = 100

			title		"Render object", \
					charset = UTF-8, size = 10, \
					color = rgb:#ffffff, \
					justification = center, \
					position = above, x = 0, y = -10

			sticky		no

			action		push = cb_push_renderobject
		}

		widget "pushbutton_2" {
			name		"print_object"
			state		enable
			type		3

			position	x = 160, y = 100

			title		"Print object", \
					charset = UTF-8, size = 10, \
					color = rgb:#ffffff, \
					justification = center, \
					position = above, x = 0, y = -10

			sticky		no

			action		push = cb_push_printobject
		}

		widget "pushbutton_2" {
			name		"save_object"
			state		enable
			type		3

			position	x = 280, y = 100

			title		"Save object", \
					charset = UTF-8, size = 10, \
					color = rgb:#ffffff, \
					justification = center, \
					position = above, x = 0, y = -10

			sticky		no

			action		push = cb_push_saveobject
		}

		widget "pushbutton_2" {
			name		"view_reset"
			state		enable
			type		1

			position	x = 440, y = 100

			title		"View reset", \
					charset = UTF-8, size = 10, \
					color = rgb:#ffffff, \
					justification = center, \
					position = above, x = 0, y = -10

			sticky		no

			action		push = cb_push_viewreset
		}

		widget "pushbutton_2" {
			name		"time_reset"
			state		enable
			type		1

			position	x = 560, y = 100

			title		"Time reset", \
					charset = UTF-8, size = 10, \
					color = rgb:#ffffff, \
					justification = center, \
					position = above, x = 0, y = -10

			sticky		no

			action		push = cb_push_timereset
		}

		widget "turnswitch" {
			name		"time_warp"
			state		enable
			type		1

			position	x = 670, y = 60

			angle		min = 5, max = 355
			steps		start = 2, total = 1000

			title		"Time warp", \
					charset = UTF-8, size = 10, \
					color = rgb:#ffffff, \
					justification = center, \
					position = above, x = 0, y = -5

			trigger		constant

			action		turn = cb_turn_timewarp
		}
	}
}

Background

Background widget sets the window background. Background can be either solid color, a translucent color or an image file. If image file is too large for the window it will be cropped, too small file will be tiled to fill the whole window. If color is used instead of an image, alpha value can be used to adjust background widget translucency. Alpha value of zero makes completely transparent background, and alpha value of 255 makes completely opaque color.

Example:

widget "background" {
	name		"my_background"
	state		enable

; This color definition is 100% opaque (alpha is 0xff)
;	color		"rgba:0x804020ff"
; This color definition is 100% transparent (alpha is zero)
;	color		"rgba:#80402000"
	image		"@/path/background.tga"

	hue		0.0
	value		0.0
}

Block

Block window makes rectangular object filled either single color or image file. If image file is too large for the block size it will be cropped, too small file will be tiled to fill the whole block.

Example:

widget "block" {
	name		"my_block"
	state		enable

	position	x = 100, y = 100
	size		width = 400, height = 20

;	color		"rgb:ee4422"
	image		"@/path/block.tga"

	border		color = rgb:#ff00ff, thickness = 2

	action		keypress = cb_key_press
}

Label

Label widget makes a single line of text.

Example:

widget "label" {
	name		"my_label"
	state		enable

	position	x = 100, y = 100

	label		"This is label", \
			charset = UTF-8, font = , size = 16, dpi = 0, \
			color = rgb:#aa8844, \
			justification = left
}

Lamp

Lamp widget is just like any lamp, usually indicating something when it lights. Lamp has six subtypes, explained in type section below. Lamp can be set on and off by widget_step_set() function.

Example:

widget "lamp" {
	name		"my_lamp"
	state		enable
	type		1

	position	x = 100, y = 100

	title		"This is lamp", \
			charset = UTF-8, font = , size = 11, dpi = 0, \
			color = rgb:#aa8844, \
			justification = center, position = left, x = 20, y = 0

	light		no

	hue		0.0
}

Led_1, Led_2, Led_3

Led is like a lamp, but smaller, and usually indicates that some minor function is turned on. Led has three types; type 1 round shaped led, type 2 is horizontal rectangle, and type 3 is vertical rectangle. Each type has six subtypes, explained in type section below. Led can be set on and off by widget_step_set() function.

Example:

widget "led_1" {
	name		"my_led"
	state		enable
	type		1

	position	x = 100, y = 100

	title		"This is led", \
			charset = UTF-8, font = , size = 9, dpi = 0, \
			color = rgb:#aa8844, \
			justification = center, position = below, x = 0, y = 0

	light		no

	hue		0.0
}

Pushbutton_1, Pushbutton_2, Pushbutton_3

Pushbutton widget is the one to push to get something done. Pushbutton has three types; type 1 is small square button, type 2 is also a square but a bit bigger, and type 3 is shaped as horizontal rectangle. Each type has six subtypes, explained in type section below.

Example:

widget "pushbutton_1" {
	name		"my_pushbutton"
	state		enable
	type		1

	position	x = 100, y = 100

	title		"This is pushbutton", \
			charset = UTF-8, font = , size = 11, dpi = 0, \
			color = rgb:#aa8844, \
			justification = center, position = above, x = 0, y = 10

	sticky		yes

	hue		0.0

	action		push = cb_push, \
			keypress = cb_key_press, \
			buttonpress = cb_btn_press, \
			buttonrelease = cb_btn_release
}

Slideswitch

Slideswitch widget works like a slider in mixing table. Slideswitch has six subtypes, explained in type section below.

Example:

widget "slideswitch" {
	name		"my_slideswitch"
	state		enable
	type		1

	position	x = 100, y = 100

	slide		length = 150, start = 1, total = 100

	title		"This is slideswitch", \
			charset = UTF-8, font = , size = 11, dpi = 0, \
			color = rgb:#aa8844, \
			justification = center, position = above, x = 0, y = 0

;	trigger		release
	trigger		constant

	hue		0.0

	action		slide = cb_slide, \
			buttonpress = cb_btn_press, \
			buttonrelease = cb_btn_release
}

Turnswitch

Turnswitch widget is round-shaped knob which can be turned back and forth, like volume knob in audio amplifier. Turnswitch has six subtypes, explained in type section below.

Example:

widget "turnswitch" {
	name		"my_turnswitch"
	state		enable
	type		1

	position	x = 100, y = 100

	angle		min = 45, max = 315
	steps		start = 1, total = 100

	title		"This is turnswitch", \
			charset = UTF-8, font = , size = 11, dpi = 0, \
			color = rgb:#aa8844, \
			justification = center, position = above, x = 0, y = 0

;	trigger		release
	trigger		constant

	hue		0.0

	action		turn = cb_turn, \
			buttonpress = cb_btn_press, \
			buttonrelease = cb_btn_release
}

Keywords

Angle

Range of the widget. For example, volume knob's minimum range is around 45 and maximum usually around 315 degrees. Needed attributes:

Needed by: turnswitch.

Border

Border color, its alpha channel value (transparency) and thickness to draw around the widget. Set alpha channel value to zero not to draw border. Needed attributes:

Needed by: block.

Color

Widget color and alpha channel value (transparency). Color definition must be double quoted. Format is:

The pound sign # in front of rgba (red, green, blue, alpha) value is optional, it can be replaced with 0x or leave out completely, so valid format also includes:

Also, individual color components can be dropped out too:

Color definition supports X11 named colors in addition to above. For example, if color value is banana, it maps to rgb value of 0xe3cf57 (red: 0xe3, green: 0xcf, blue: 0x57). All possible color names are listed in color chart, and possibly system rgb.txt file, which usually located at <X11_root>/lib/X11/rgb.txt or somewhere nearby.

Supported by: block and background.

Hue

Adjust the hue value of the widget in HSV color space. This can, for example, use to finetune green lamp to look a bit more or less green. Hue value is measured in degrees on HSV color wheel where range starts from 0 (no adjust) to 359, where actual widget color stands at 0 degree position. Keep temperance in mind when setting hue values, as widget graphics are cached by hue value for faster drawing, which can take a considerably amount of memory.

Supported by: background, lamp, led_*, pushbutton_*, slideswitch, turnswitch.

Image

Image to use to fill the widget. If image file is too large for the widget it will be cropped, too small file will be tiled to fill the whole widget. Supported file formats for images are BMP and TGA, unpacked true color, alpha channel recommended for transparency. If this strings starts with @, it is substituted with application installation prefix, so if image is /where/ever/app/is/installed/share/images/someimage.tga, that can be written to widget definition as @/share/images/someimage.tga. Using this trick is recommended, because paths will work even if installation prefix changes.

Supported by: background and block.

Label

Label for the widget. Label string to be displayed must be defined as a first attribute in double quotes. Other needed attributes:

Additional attributes for title keyword:

Needed by: label, lamp, led_*, pushbutton_*, slideswitch, turnswitch.

Light

Either yes, enable, true or 1 if the light is on initially, or no, disable, false or 0 if not.

Needed by: lamp and led_*.

Name

Unique name or other identifier of the widget. Keep as short as possible. This must be supplied to almost all widget_*() functions.

Needed by: all.

Position

Widget position in pixels from upper left corner of the container window. Needed attributes:

Needed by: all except background.

Size

Widget dimensions in pixels. Needed attributes:

Needed by: block.

Slide

Slideswitch slider attributes. Attributes include:

Needed by: slideswitch.

State

Initial state of the widget, either enable, true or 1 if the widget is initially enabled, or disable, false or 0 if not.

Needed by: all.

Steps

Needed by: turnswitch.

Sticky

Makes button sticky. Sticky buttons keeps its position pressed until pressed again. Unsticky buttons pops back to off state when released. Can be either yes, enable, true or 1 if the button is sticky, or no, disable, false or 0 if not.

Needed by: pushbutton.

Title

See label.

Trigger

Set the callback function trigger mode, can be either constant alias drag or release alias once. Constant/drag means callback is called continuously while widget is being turn, release mode triggers callback only once when widget is released.

Needed by: slideswitch, turnswitch.

Type

Subtype of the widgets.

lamp and led_* subtypes are:

pushbutton_* subtypes are:

slideswitch subtypes are:

turnswitch subtypes are:

Needed by: lamp, led_*, pushbutton_*, slideswitch, turnswitch.

Value

Adjust color value of the widget in HSV color space. Color value is measured in degrees on HSV color wheel where range starts from 0 (no adjust) to 359, where actual widget color stands at 0 degree position.

Needed by: background

Actions

Most widgets can have Ano script callback functions attached to them for certain events. Each action event is explained below.

Buttonpress

Generic callback function to call when button is pressed on widget. Callback function must have six parameters as shown below. Each parameter is initialized as explained in XButtonEvent(3).

Supported by: all, including background.

Example:

callback cb_btn_press (_x, _y, _x_root, _y_root, _state, _button) {
	dump	_x
	dump	_y
	dump	_x_root
	dump	_y_root
	dump	_state
	dump	_button
}

Buttonrelease

Generic callback function to call when button is released on widget. Callback function must have six parameters as shown below. Each parameter is initialized as explained in XButtonEvent(3).

Supported by: all, including background.

Example:

callback cb_btn_release (_x, _y, _x_root, _y_root, _state, _button) {
	dump	_x
	dump	_y
	dump	_x_root
	dump	_y_root
	dump	_state
	dump	_button
}

Keypress

Generic callback function to call when key is pressed on widget. Callback function must have seven parameters as shown below. Each parameter is initialized as explained in XKeyEvent(3). The last parameter, key, is printable character of which key was pressed.

Supported by: all, including background.

Example:

callback cb_key_press (_x, _y, _x_root, _y_root, _state, _keycode, _key) {
	dump	_x
	dump	_y
	dump	_x_root
	dump	_y_root
	dump	_state
	dump	_keycode
	dump	_key
}

Keyrelease

Generic callback function to call when key is released on widget. Callback function must have seven parameters as shown below. Each parameter is initialized as explained in XKeyEvent(3). The last parameter, key, is printable character of which key was released.

Supported by: all, including background.

Example:

callback cb_key_release (_x, _y, _x_root, _y_root, _state, _keycode, _key) {
	dump	_x
	dump	_y
	dump	_x_root
	dump	_y_root
	dump	_state
	dump	_keycode
	dump	_key
}

Push

Pushbutton callback function to call when button is pushed. Callback function must have six parameters as shown below. Each parameter is initialized with current widget state.

Needed by: pushbutton_*

Example:

callback cb_push (_widget_name, _widget_id, _min, _max, _steps, _step) {
	dump	_widget_name
	dump	_widget_id
	dump	_min
	dump	_max
	dump	_steps
	dump	_step
}

Slide

Slideswitch callback function to call when switch is moved. Callback function must have six parameters as shown below. Each parameter is initialized with current widget state.

Needed by: slideswitch

Example:

callback cb_slide (_widget_name, _widget_id, _min, _length, _steps, _step) {
	dump	_widget_name
	dump	_widget_id
	dump	_min
	dump	_length
	dump	_steps
	dump	_step
}

Turn

Turnswitch callback function to call when switch is turned. Callback function must have six parameters as shown below. Each parameter is initialized with current widget state.

Needed by: turnswitch

Example:

callback cb_turn (_widget_name, _widget_id, _min, _max, _steps, _step) {
	dump	_widget_name
	dump	_widget_id
	dump	_min
	dump	_max
	dump	_steps
	dump	_step
}

Custom widgets

Every moving widget is made of image frames. Moving means that widget has more than one state, or user can turn it or press it in a way that widget image changes. For that we need image frames, one frame per widget state or step. For example, lamp has two images, on and off. Same with leds, they can be on and off, nothing more. Turnswitch is different, it can have hundreds of states, depending how many steps there is between min and max angles. Provided turnswitch widget contains 360 frames, one per angle. If memory is a concern, less frames may be better. It does not really matter how many frames turnswitch or any other widget has, engine has capability to automatically display a frame that best suits to current angle of the widget. Lamps and leds of course needs two frames in order them to work.

As said, to create own widget, we need a bunch of images which forms the animation. A good starting point is to have every frame in its own image file, any empty borders cropped off and resized to final resolution, like 64x64 pixels. Any areas meant to be transparent must have alpha value of zero. There is tools available for packing widget frames together to create properly formatted widget pack useable by the engine. Tools and some scripts for the job is located in engine/tools directory. Further details and instructions can be found in this tutorial.

Color chart

Color table supported by widget resource compiler. Color name can be used in place of RGB (Red, Green, Blue) value to get the color in preview column.

NameRGBPreview
aliceblue#f0f8ff 
alizarincrimson#e32636 
antiquewhite#faebd7 
antiquewhite1#ffefdb 
antiquewhite2#eedfcc 
antiquewhite3#cdc0b0 
antiquewhite4#8b8378 
aqua#00ffff 
aquamarine#7fffd4 
aquamarine1#7fffd4 
aquamarine2#76eec6 
aquamarine3#66cdaa 
aquamarine4#458b74 
aquamarinemedium#66cdaa 
aureolineyellow#ffa824 
azure#f0ffff 
azure1#f0ffff 
azure2#e0eeee 
azure3#c1cdcd 
azure4#838b8b 
banana#e3cf57 
beige#a39480 
bisque#ffe4c4 
bisque1#ffe4c4 
bisque2#eed5b7 
bisque3#cdb79e 
bisque4#8b7d6b 
black#000000 
blanchedalmond#ffebcd 
blue#0000ff 
blue1#0000ff 
blue2#0000ee 
blue3#0000cd 
blue4#00008b 
bluelight#add8e6 
bluemedium#0000cd 
blueviolet#8a2be2 
brick#9c661f 
brown#802a2a 
brown1#ff4040 
brown2#ee3b3b 
brown3#cd3333 
brown4#8b2323 
brownmadder#db2929 
brownochre#87421f 
burlywood#deb887 
burlywood1#ffd39b 
burlywood2#eec591 
burlywood3#cdaa7d 
burlywood4#8b7355 
burntsienna#8a360f 
burntumber#8a3324 
cadet#5f9ea0 
cadetblue#7e7da0 
cadetblue1#98f5ff 
cadetblue2#8ee5ee 
cadetblue3#7ac5cd 
cadetblue4#53868b 
cadmiumlemon#ffe303 
cadmiumorange#ff6103 
cadmiumreddeep#e3170d 
cadmiumredlight#ff030d 
cadmiumyellow#ff9912 
cadmiumyellowlight#ffb00f 
carrot#ed9121 
cerulean#05b8cc 
chartreuse#7fff00 
chartreuse1#7fff00 
chartreuse2#76ee00 
chartreuse3#66cd00 
chartreuse4#458b00 
chocolate#d2691e 
chocolate1#ff7f24 
chocolate2#ee7621 
chocolate3#cd661d 
chocolate4#8b4513 
chromeoxidegreen#668014 
cinnabargreen#61b329 
cobalt#3d59ab 
cobaltgreen#3d9140 
cobaltvioletdeep#91219e 
coldgray#808a87 
coral#ff7f50 
coral1#ff7256 
coral2#ee6a50 
coral3#cd5b45 
coral4#8b3e2f 
corallight#f08080 
cornflower#6495ed 
cornflowerblue#6495ed 
cornsilk#fff8dc 
cornsilk1#fff8dc 
cornsilk2#eee8cd 
cornsilk3#cdc8b1 
cornsilk4#8b8878 
cyan#00ffff 
cyan1#00ffff 
cyan2#00eeee 
cyan3#00cdcd 
cyan4#008b8b 
cyanwhite#e0ffff 
darkblue#00008b 
darkcyan#008b8b 
darkgoldenrod1#ffb90f 
darkgoldenrod2#eead0e 
darkgoldenrod3#cd950c 
darkgoldenrod4#8b6508 
darkgray#a9a9a9 
darkgreen#005300 
darkkhaki#bdb76b 
darkmagenta#8b008b 
darkolivegreen#4f4f2f 
darkolivegreen1#caff70 
darkolivegreen2#bcee68 
darkolivegreen3#a2cd5a 
darkolivegreen4#6e8b3d 
darkorange#ff8c00 
darkorange1#ff7f00 
darkorange2#ee7600 
darkorange3#cd6600 
darkorange4#8b4500 
darkorchid#6a2566 
darkorchid1#bf3eff 
darkorchid2#b23aee 
darkorchid3#9a32cd 
darkorchid4#68228b 
darkred#8b0000 
darksalmon#e9967a 
darkseagreen#8fbc8f 
darkseagreen1#c1ffc1 
darkseagreen2#b4eeb4 
darkseagreen3#9bcd9b 
darkseagreen4#698b69 
darkslateblue#333e63 
darkslategray#3c404a 
darkslategray1#97ffff 
darkslategray2#8deeee 
darkslategray3#79cdcd 
darkslategray4#528b8b 
darkturquoise#1d6f75 
darkviolet#9400d3 
deepochre#733d1a 
deeppink#ff1493 
deeppink1#ff1493 
deeppink2#ee1289 
deeppink3#cd1076 
deeppink4#8b0a50 
deepskyblue#00bfff 
deepskyblue1#00bfff 
deepskyblue2#00b2ee 
deepskyblue3#009acd 
deepskyblue4#00688b 
dimgray#696969 
dodgerblue#1e90ff 
dodgerblue1#1e90ff 
dodgerblue2#1c86ee 
dodgerblue3#1874cd 
dodgerblue4#104e8b 
eggshell#fce6c9 
emeraldgreen#00c957 
englishred#d43d1a 
firebrick#b22222 
firebrick1#ff3030 
firebrick2#ee2c2c 
firebrick3#cd2626 
firebrick4#8b1a1a 
flesh#ff7d40 
fleshochre#ff5721 
floralwhite#fffaf0 
forestgreen#55c034 
fuchsia#ff00ff 
gainsboro#dcdcdc 
geraniumlake#e31230 
ghostwhite#f8f8ff 
gold#ffd700 
gold1#ffd700 
gold2#eec900 
gold3#cdad00 
gold4#8b7500 
goldenrod#daa520 
goldenrod1#ffc125 
goldenrod2#eeb422 
goldenrod3#cd9b1d 
goldenrod4#8b6914 
goldenroddark#b8860b 
goldenrodlight#fafad2 
goldenrodpale#eee8aa 
goldochre#c77826 
gray#808080 
gray0#000000 
gray1#030303 
gray2#050505 
gray3#080808 
gray4#0a0a0a 
gray5#0d0d0d 
gray6#0f0f0f 
gray7#121212 
gray8#141414 
gray9#171717 
gray10#1a1a1a 
gray11#1c1c1c 
gray12#1f1f1f 
gray13#212121 
gray14#242424 
gray15#262626 
gray16#292929 
gray17#2b2b2b 
gray18#2e2e2e 
gray19#303030 
gray20#333333 
gray21#363636 
gray22#383838 
gray23#3b3b3b 
gray24#3d3d3d 
gray25#404040 
gray26#424242 
gray27#454545 
gray28#474747 
gray29#4a4a4a 
gray30#4d4d4d 
gray31#4f4f4f 
gray32#525252 
gray33#545454 
gray34#575757 
gray35#595959 
gray36#5c5c5c 
gray37#5e5e5e 
gray38#616161 
gray39#636363 
gray40#666666 
gray41#696969 
gray42#6b6b6b 
gray43#6e6e6e 
gray44#707070 
gray45#737373 
gray46#757575 
gray47#787878 
gray48#7a7a7a 
gray49#7d7d7d 
gray50#7f7f7f 
gray51#828282 
gray52#858585 
gray53#878787 
gray54#8a8a8a 
gray55#8c8c8c 
gray56#8f8f8f 
gray57#919191 
gray58#949494 
gray59#969696 
gray60#999999 
gray61#9c9c9c 
gray62#9e9e9e 
gray63#a1a1a1 
gray64#a3a3a3 
gray65#a6a6a6 
gray66#a8a8a8 
gray67#ababab 
gray68#adadad 
gray69#b0b0b0 
gray70#b3b3b3 
gray71#b5b5b5 
gray72#b8b8b8 
gray73#bababa 
gray74#bdbdbd 
gray75#bfbfbf 
gray76#c2c2c2 
gray77#c4c4c4 
gray78#c7c7c7 
gray79#c9c9c9 
gray80#cccccc 
gray81#cfcfcf 
gray82#d1d1d1 
gray83#d4d4d4 
gray84#d6d6d6 
gray85#d9d9d9 
gray86#dbdbdb 
gray87#dedede 
gray88#e0e0e0 
gray89#e3e3e3 
gray90#e5e5e5 
gray91#e8e8e8 
gray92#ebebeb 
gray93#ededed 
gray94#f0f0f0 
gray95#f2f2f2 
gray96#f5f5f5 
gray97#f7f7f7 
gray98#fafafa 
gray99#fcfcfc 
gray100#ffffff 
green#008000 
green1#00ff00 
green2#00ee00 
green3#00cd00 
green4#008b00 
greendark#006400 
greenishumber#ff3d0d 
greenpale#98fb98 
greenyellow#adff2f 
honeydew#f0fff0 
honeydew1#f0fff0 
honeydew2#e0eee0 
honeydew3#c1cdc1 
honeydew4#838b83 
hotpink#ff69b4 
hotpink1#ff6eb4 
hotpink2#ee6aa7 
hotpink3#cd6090 
hotpink4#8b3a62 
indianred#b0171f 
indianred1#ff6a6a 
indianred2#ee6363 
indianred3#cd5555 
indianred4#8b3a3a 
indigo#2e0854 
ivory#fffff0 
ivory1#fffff0 
ivory2#eeeee0 
ivory3#cdcdc1 
ivory4#8b8b83 
ivoryblack#292421 
khaki#f0e68c 
khaki1#fff68f 
khaki2#eee685 
khaki3#cdc673 
khaki4#8b864e 
khakidark#bdb76b 
lampblack#2e473b 
lavender#e6e6fa 
lavenderblush#fff0f5 
lavenderblush1#fff0f5 
lavenderblush2#eee0e5 
lavenderblush3#cdc1c5 
lavenderblush4#8b8386 
lawngreen#7cfc00 
lemonchiffon#fffacd 
lemonchiffon1#fffacd 
lemonchiffon2#eee9bf 
lemonchiffon3#cdc9a5 
lemonchiffon4#8b8970 
lightbeige#f5f5dc 
lightblue#abc5ff 
lightblue1#bfefff 
lightblue2#b2dfee 
lightblue3#9ac0cd 
lightblue4#68838b 
lightcoral#f08080 
lightcyan#e0ffff 
lightcyan1#e0ffff 
lightcyan2#d1eeee 
lightcyan3#b4cdcd 
lightcyan4#7a8b8b 
lightgoldenrod#eedd82 
lightgoldenrod1#ffec8b 
lightgoldenrod2#eedc82 
lightgoldenrod3#cdbe70 
lightgoldenrod4#8b814c 
lightgoldenrodyellow#fafad2 
lightgray#d3d3d3 
lightgreen#90ee90 
lightpink#ffb6c1 
lightpink1#ffaeb9 
lightpink2#eea2ad 
lightpink3#cd8c95 
lightpink4#8b5f65 
lightsalmon#ffa07a 
lightsalmon1#ffa07a 
lightsalmon2#ee9572 
lightsalmon3#cd8162 
lightsalmon4#8b5742 
lightseagreen#20b2aa 
lightskyblue#87cefa 
lightskyblue1#b0e2ff 
lightskyblue2#a4d3ee 
lightskyblue3#8db6cd 
lightskyblue4#607b8b 
lightslateblue#8470ff 
lightslategray#778899 
lightsteelblue#3498ca 
lightsteelblue1#cae1ff 
lightsteelblue2#bcd2ee 
lightsteelblue3#a2b5cd 
lightsteelblue4#6e7b8b 
lightyellow#ffffe0 
lightyellow1#ffffe0 
lightyellow2#eeeed1 
lightyellow3#cdcdb4 
lightyellow4#8b8b7a 
lime#00ff00 
limegreen#32cd32 
linen#faf0e6 
madderlakedeep#e32e30 
magenta#ff00d3 
magenta1#ff00ff 
magenta2#ee00ee 
magenta3#cd00cd 
magenta4#8b008b 
manganeseblue#03a89e 
maroon#800000 
maroon1#ff34b3 
maroon2#ee30a7 
maroon3#cd2990 
maroon4#8b1c62 
marsorange#964514 
marsyellow#e3701a 
mediumaquamarine#158776 
mediumblue#3d62d0 
mediumforestgreen#6b8e23 
mediumgoldenrod#b8860b 
mediumorchid#ac4da6 
mediumorchid1#e066ff 
mediumorchid2#d15fee 
mediumorchid3#b452cd 
mediumorchid4#7a378b 
mediumpurple#9370db 
mediumpurple1#ab82ff 
mediumpurple2#9f79ee 
mediumpurple3#8968cd 
mediumpurple4#5d478b 
mediumseagreen#1b8656 
mediumslateblue#5f6d9a 
mediumspringgreen#3c8d23 
mediumturquoise#3eacb5 
mediumvioletred#c71585 
melon#e3a869 
midnightblue#191970 
mint#bdfcc9 
mintcream#f5fffa 
mistyrose#ffe4e1 
mistyrose1#ffe4e1 
mistyrose2#eed5d2 
mistyrose3#cdb7b5 
mistyrose4#8b7d7b 
moccasin#ffe4b5 
naplesyellowdeep#ffa812 
navajowhite#ffdead 
navajowhite1#ffdead 
navajowhite2#eecfa1 
navajowhite3#cdb38b 
navajowhite4#8b795e 
navy#000080 
navyblue#00008e 
oldlace#fdf5e6 
olive#808000 
olivedrab#6b8e23 
olivedrab1#c0ff3e 
olivedrab2#b3ee3a 
olivedrab3#9acd32 
olivedrab4#698b22 
olivegreendark#556b2f 
orange#ff8a00 
orange1#ffa500 
orange2#ee9a00 
orange3#cd8500 
orange4#8b5a00 
orangered#e2412a 
orangered1#ff4500 
orangered2#ee4000 
orangered3#cd3700 
orangered4#8b2500 
orchid#da6bd4 
orchid1#ff83fa 
orchid2#ee7ae9 
orchid3#cd69c9 
orchid4#8b4789 
orchiddark#9932cc 
orchidmedium#ba55d3 
palegoldenrod#eee8aa 
palegreen#98ff98 
palegreen1#9aff9a 
palegreen2#90ee90 
palegreen3#7ccd7c 
palegreen4#548b54 
paleturquoise#afeeee 
paleturquoise1#bbffff 
paleturquoise2#aeeeee 
paleturquoise3#96cdcd 
paleturquoise4#668b8b 
palevioletred#db7093 
palevioletred1#ff82ab 
palevioletred2#ee799f 
palevioletred3#cd6889 
palevioletred4#8b475d 
papayawhip#ffefd5 
peachpuff#ffdab9 
peachpuff1#ffdab9 
peachpuff2#eecbad 
peachpuff3#cdaf95 
peachpuff4#8b7765 
peacock#33a1c9 
permanentgreen#0ac92b 
permanentredviolet#db2645 
peru#cd853f 
pink#ffc0cb 
pink1#ffb5c5 
pink2#eea9b8 
pink3#cd919e 
pink4#8b636c 
pinklight#ffb6c1 
plum#dda0dd 
plum1#ffbbff 
plum2#eeaeee 
plum3#cd96cd 
plum4#8b668b 
powderblue#b0e0e6 
purple#800080 
purple1#9b30ff 
purple2#912cee 
purple3#7d26cd 
purple4#551a8b 
purplemedium#9370db 
raspberry#872657 
rawsienna#c76114 
rawumber#734a12 
red#ff0000 
red1#ff0000 
red2#ee0000 
red3#cd0000 
red4#8b0000 
rosemadder#e33638 
rosybrown#bc8f8f 
rosybrown1#ffc1c1 
rosybrown2#eeb4b4 
rosybrown3#cd9b9b 
rosybrown4#8b6969 
royalblue#4169e1 
royalblue1#4876ff 
royalblue2#436eee 
royalblue3#3a5fcd 
royalblue4#27408b 
saddlebrown#8b4513 
salmon#f86d68 
salmon1#ff8c69 
salmon2#ee8262 
salmon3#cd7054 
salmon4#8b4c39 
sandybrown#b28f56 
sapgreen#308014 
seagreen#2e8b57 
seagreen1#54ff9f 
seagreen2#4eee94 
seagreen3#43cd80 
seagreen4#2e8b57 
seagreendark#8fbc8f 
seagreenlight#20b2aa 
seagreenmedium#3cb371 
seashell#fff5ee 
seashell1#fff5ee 
seashell2#eee5de 
seashell3#cdc5bf 
seashell4#8b8682 
sepia#5e2612 
sienna#8e6b23 
sienna1#ff8247 
sienna2#ee7942 
sienna3#cd6839 
sienna4#8b4726 
silver#c0c0c0 
skyblue#87ceeb 
skyblue1#87ceff 
skyblue2#7ec0ee 
skyblue3#6ca6cd 
skyblue4#4a708b 
skybluedeep#00bfff 
skybluelight#87cefa 
slateblue#7586be 
slateblue1#836fff 
slateblue2#7a67ee 
slateblue3#6959cd 
slateblue4#473c8b 
slatebluedark#483d8b 
slatebluelight#8470ff 
slatebluemedium#7b68ee 
slategray#708090 
slategray1#c6e2ff 
slategray2#b9d3ee 
slategray3#9fb6cd 
slategray4#6c7b8b 
slategraydark#2f4f4f 
slategraylight#778899 
snow#fffafa 
snow1#fffafa 
snow2#eee9e9 
snow3#cdc9c9 
snow4#8b8989 
springgreen#00ff7f 
springgreen1#00ff7f 
springgreen2#00ee76 
springgreen3#00cd66 
springgreen4#008b45 
springgreenmedium#00fa9a 
steelblue#4682b4 
steelblue1#63b8ff 
steelblue2#5cacee 
steelblue3#4f94cd 
steelblue4#36648b 
steelbluelight#b0c4de 
tan#d2b48c 
tan1#ffa54f 
tan2#ee9a49 
tan3#cd853f 
tan4#8b5a2b 
teal#008080 
terreverte#385e0f 
thistle#d8bfd8 
thistle1#ffe1ff 
thistle2#eed2ee 
thistle3#cdb5cd 
thistle4#8b7b8b 
titaniumwhite#fcfff0 
tomato#ff6347 
tomato1#ff6347 
tomato2#ee5c42 
tomato3#cd4f39 
tomato4#8b3626 
turquoise#48d1cc 
turquoise1#00f5ff 
turquoise2#00e5ee 
turquoise3#00c5cd 
turquoise4#00868b 
turquoiseblue#00c78c 
turquoisedark#00ced1 
turquoisemedium#48d1cc 
turquoisepale#afeeee 
ultramarine#120a8f 
ultramarineviolet#5c246e 
vandykebrown#5e2605 
venetianred#d41a1f 
violet#9400d3 
violetdark#9400d3 
violetred#ff0094 
violetred1#ff3e96 
violetred2#ee3a8c 
violetred3#cd3278 
violetred4#8b2252 
violetredmedium#c71585 
violetredpale#db7093 
viridianlight#6eff70 
warmgray#808069 
wheat#f5deb3 
wheat1#ffe7ba 
wheat2#eed8ae 
wheat3#cdba96 
wheat4#8b7e66 
white#ffffff 
whitesmoke#f5f5f5 
yellow#ffff00 
yellow1#ffff00 
yellow2#eeee00 
yellow3#cdcd00 
yellow4#8b8b00 
yellowgreen#9acd32 
yellowlight#ffffe0 
yellowochre#e38217 
zincwhite#fdf8ff 

Copyright © 2024, Jani Salonen <salojan at goto10 piste co>. Piste is finnish word and means dot. All rights reserved.