'' Dialog example

#include once "allegro.bi"

#define S_RED 2
#define S_GREEN 3
#define S_BLUE 4

declare function update_color cdecl (byval dp3 as any ptr, byval d2 as integer) as integer

type xPOINT
	x as integer
	y as integer
end type

'' Allegro's dialog callback reads this module-level dialog state.
'' FB-LINTER: DISABLE-NEXT-LINE FBL301
dim shared midpoint As xPOINT = (30, 50)
dim shared five_midpoints(0 to 4) As xPOINT = {(30, 50), (62, 19), (11, 15), (38, 30), (27, 82)}

dim shared color_builder(0 TO 5) As DIALOG = _
{ _
	(@d_clear_proc, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, NULL, NULL), _
	(@d_box_proc, 0, 0, 100, 100, 0, 254, 0, 0, 0, 0, NULL, NULL, NULL), _
	(@d_slider_proc, 10, 110, 16, 64, 1, 0, 0, 0, 63, 0, NULL, @update_color, NULL), _
	(@d_slider_proc, 42, 110, 16, 64, 2, 0, 0, 0, 63, 0, NULL, @update_color, NULL), _
	(@d_slider_proc, 74, 110, 16, 64, 4, 0, 0, 0, 63, 0, NULL, @update_color, NULL), _
	(NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL) _
}

'' Callback
function update_color cdecl (byval dp3 as any ptr, byval d2 as integer) as integer
	dim col as RGB
	col.r = color_builder(S_RED).d2
	col.g = color_builder(S_GREEN).d2
	col.b = color_builder(S_BLUE).d2
	vsync()
	set_color( 254, @col )
	return 0
end function


'' Main

	allegro_init( )
	install_keyboard( )
	install_mouse( )
	install_timer( )
	set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 )
	set_palette( @desktop_palette(0) )

	'initialize the color box
	update_color( NULL, 0 )

	'run the dialog
	do_dialog( @color_builder(0), -1 )

	END_OF_MAIN()
