2018-10-09 11:58:04 +02:00
/*******************************************************************************************
*
2018-11-08 10:41:31 +01:00
* raygui - controls test suite
*
* TEST CONTROLS :
* - GuiDropdownBox ( )
2019-09-02 23:18:25 +02:00
* - GuiCheckBox ( )
2018-11-08 10:41:31 +01:00
* - GuiSpinner ( )
2019-09-02 23:18:25 +02:00
* - GuiValueBox ( )
2018-11-08 10:41:31 +01:00
* - GuiTextBox ( )
2019-09-02 23:18:25 +02:00
* - GuiButton ( )
* - GuiComboBox ( )
2018-11-08 10:41:31 +01:00
* - GuiListView ( )
2019-09-02 23:18:25 +02:00
* - GuiToggleGroup ( )
* - GuiTextBoxMulti ( )
* - GuiColorPicker ( )
* - GuiSlider ( )
* - GuiSliderBar ( )
* - GuiProgressBar ( )
* - GuiColorBarAlpha ( )
* - GuiScrollPanel ( )
*
2018-11-08 10:41:31 +01:00
*
* DEPENDENCIES :
2021-10-05 11:23:58 +02:00
* raylib 4.0 - Windowing / input management and drawing .
2022-01-12 11:54:19 +01:00
* raygui 3.2 - Immediate - mode GUI controls .
2018-11-08 10:41:31 +01:00
*
* COMPILATION ( Windows - MinGW ) :
* gcc - o $ ( NAME_PART ) . exe $ ( FILE_NAME ) - I . . / . . / src - lraylib - lopengl32 - lgdi32 - std = c99
2018-10-09 11:58:04 +02:00
*
* LICENSE : zlib / libpng
*
2021-12-31 20:06:32 +01:00
* Copyright ( c ) 2016 - 2022 Ramon Santamaria ( @ raysan5 )
2018-10-09 11:58:04 +02:00
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include "raylib.h"
# define RAYGUI_IMPLEMENTATION
2021-12-21 23:26:30 +01:00
//#define RAYGUI_CUSTOM_ICONS // It requires providing gui_icons.h in the same directory
//#include "gui_icons.h" // External icons data provided, it can be generated with rGuiIcons tool
2018-10-09 11:58:04 +02:00
# include "../../src/raygui.h"
2021-10-05 18:33:02 +02:00
# include <string.h> // Required for: strcpy()
2018-10-09 11:58:04 +02:00
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main ( )
{
// Initialization
//---------------------------------------------------------------------------------------
2021-10-05 14:10:35 +02:00
const int screenWidth = 690 ;
const int screenHeight = 560 ;
2021-03-19 20:12:50 +01:00
2018-11-08 10:41:31 +01:00
InitWindow ( screenWidth , screenHeight , " raygui - controls test suite " ) ;
2019-02-22 18:33:35 +01:00
SetExitKey ( 0 ) ;
2018-10-09 11:58:04 +02:00
2018-11-08 10:41:31 +01:00
// GUI controls initialization
2018-10-09 11:58:04 +02:00
//----------------------------------------------------------------------------------
2018-10-30 12:55:48 +01:00
int dropdownBox000Active = 0 ;
bool dropDown000EditMode = false ;
2021-03-19 20:12:50 +01:00
2018-10-30 12:55:48 +01:00
int dropdownBox001Active = 0 ;
2021-03-19 20:12:50 +01:00
bool dropDown001EditMode = false ;
2018-10-30 12:55:48 +01:00
int spinner001Value = 0 ;
2018-10-09 13:46:13 +02:00
bool spinnerEditMode = false ;
2021-03-19 20:12:50 +01:00
2018-10-30 12:55:48 +01:00
int valueBox002Value = 0 ;
2018-10-09 13:46:13 +02:00
bool valueBoxEditMode = false ;
2021-03-19 20:12:50 +01:00
2018-10-30 12:55:48 +01:00
char textBoxText [ 64 ] = " Text box " ;
2018-10-09 13:46:13 +02:00
bool textBoxEditMode = false ;
2021-03-19 20:12:50 +01:00
2018-11-13 18:16:37 +01:00
int listViewScrollIndex = 0 ;
2018-10-30 12:55:48 +01:00
int listViewActive = - 1 ;
2019-08-07 00:37:54 +02:00
2018-10-30 12:55:48 +01:00
int listViewExScrollIndex = 0 ;
2019-08-07 00:37:54 +02:00
int listViewExActive = 2 ;
2018-10-31 14:36:36 +01:00
int listViewExFocus = - 1 ;
2019-02-12 12:54:26 +01:00
const char * listViewExList [ 8 ] = { " This " , " is " , " a " , " list view " , " with " , " disable " , " elements " , " amazing! " } ;
2019-08-16 16:30:37 +02:00
2020-03-11 16:00:09 +01:00
char multiTextBoxText [ 256 ] = " Multi text box " ;
2018-11-13 12:56:12 +01:00
bool multiTextBoxEditMode = false ;
Color colorPickerValue = RED ;
2021-03-19 20:12:50 +01:00
2018-11-13 18:16:37 +01:00
int sliderValue = 50 ;
int sliderBarValue = 60 ;
float progressValue = 0.4f ;
2021-03-19 20:12:50 +01:00
2018-10-30 12:55:48 +01:00
bool forceSquaredChecked = false ;
2021-03-19 20:12:50 +01:00
2019-07-03 01:29:18 +02:00
float alphaValue = 0.5f ;
2021-03-19 20:12:50 +01:00
2018-11-20 11:21:41 +01:00
int comboBoxActive = 1 ;
2021-03-19 20:12:50 +01:00
2018-11-28 17:17:14 +01:00
int toggleGroupActive = 0 ;
2021-03-19 20:12:50 +01:00
2019-01-09 00:43:33 +01:00
Vector2 viewScroll = { 0 , 0 } ;
2018-10-09 11:58:04 +02:00
//----------------------------------------------------------------------------------
2019-08-08 22:56:56 +02:00
2018-11-08 10:41:31 +01:00
// Custom GUI font loading
2018-10-30 12:55:48 +01:00
//Font font = LoadFontEx("fonts/rainyhearts16.ttf", 12, 0, 0);
2019-08-26 00:56:58 +02:00
//GuiSetFont(font);
2021-03-19 20:12:50 +01:00
2019-02-22 18:33:35 +01:00
bool exitWindow = false ;
bool showMessageBox = false ;
2021-03-19 20:12:50 +01:00
2019-08-02 17:19:00 +02:00
char textInput [ 256 ] = { 0 } ;
bool showTextInputBox = false ;
2021-03-19 20:12:50 +01:00
2019-08-10 13:12:40 +02:00
char textInputFileName [ 256 ] = { 0 } ;
2018-10-09 11:58:04 +02:00
SetTargetFPS ( 60 ) ;
//--------------------------------------------------------------------------------------
// Main game loop
2019-02-22 18:33:35 +01:00
while ( ! exitWindow ) // Detect window close button or ESC key
2018-10-09 11:58:04 +02:00
{
// Update
//----------------------------------------------------------------------------------
2019-02-22 18:33:35 +01:00
exitWindow = WindowShouldClose ( ) ;
2021-03-19 20:12:50 +01:00
2019-02-22 19:18:09 +01:00
if ( IsKeyPressed ( KEY_ESCAPE ) ) showMessageBox = ! showMessageBox ;
2021-03-19 20:12:50 +01:00
2019-08-02 17:19:00 +02:00
if ( IsKeyDown ( KEY_LEFT_CONTROL ) & & IsKeyPressed ( KEY_S ) ) showTextInputBox = true ;
2021-03-19 20:12:50 +01:00
2019-06-25 18:40:02 +02:00
if ( IsFileDropped ( ) )
{
2021-09-02 00:36:37 +02:00
int dropFileCount = 0 ;
char * * droppedFiles = GetDroppedFiles ( & dropFileCount ) ;
2021-03-19 20:12:50 +01:00
2021-09-02 00:36:37 +02:00
if ( ( dropFileCount > 0 ) & & IsFileExtension ( droppedFiles [ 0 ] , " .rgs " ) ) GuiLoadStyle ( droppedFiles [ 0 ] ) ;
2021-03-19 20:12:50 +01:00
2019-06-25 18:40:02 +02:00
ClearDroppedFiles ( ) ; // Clear internal buffers
}
2018-10-09 11:58:04 +02:00
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing ( ) ;
2018-11-13 12:56:12 +01:00
ClearBackground ( GetColor ( GuiGetStyle ( DEFAULT , BACKGROUND_COLOR ) ) ) ;
2021-03-19 20:12:50 +01:00
2018-10-09 11:58:04 +02:00
// raygui: controls drawing
//----------------------------------------------------------------------------------
2019-08-11 12:02:18 +02:00
if ( dropDown000EditMode | | dropDown001EditMode ) GuiLock ( ) ;
2021-10-05 11:23:58 +02:00
else if ( ! dropDown000EditMode & & ! dropDown001EditMode ) GuiUnlock ( ) ;
2018-10-24 12:45:04 +02:00
//GuiDisable();
2021-03-19 20:12:50 +01:00
2018-10-30 12:55:48 +01:00
// First GUI column
2019-08-16 17:23:18 +02:00
//GuiSetStyle(CHECKBOX, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_LEFT);
forceSquaredChecked = GuiCheckBox ( ( Rectangle ) { 25 , 108 , 15 , 15 } , " FORCE CHECK! " , forceSquaredChecked ) ;
2021-03-19 20:12:50 +01:00
2019-02-18 18:06:36 +01:00
GuiSetStyle ( TEXTBOX , TEXT_ALIGNMENT , GUI_TEXT_ALIGN_CENTER ) ;
2019-08-18 17:59:00 +02:00
//GuiSetStyle(VALUEBOX, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_LEFT);
if ( GuiSpinner ( ( Rectangle ) { 25 , 135 , 125 , 30 } , NULL , & spinner001Value , 0 , 100 , spinnerEditMode ) ) spinnerEditMode = ! spinnerEditMode ;
if ( GuiValueBox ( ( Rectangle ) { 25 , 175 , 125 , 30 } , NULL , & valueBox002Value , 0 , 100 , valueBoxEditMode ) ) valueBoxEditMode = ! valueBoxEditMode ;
2019-02-18 18:06:36 +01:00
GuiSetStyle ( TEXTBOX , TEXT_ALIGNMENT , GUI_TEXT_ALIGN_LEFT ) ;
2018-10-30 12:55:48 +01:00
if ( GuiTextBox ( ( Rectangle ) { 25 , 215 , 125 , 30 } , textBoxText , 64 , textBoxEditMode ) ) textBoxEditMode = ! textBoxEditMode ;
2021-03-19 20:12:50 +01:00
2019-06-25 18:40:02 +02:00
GuiSetStyle ( BUTTON , TEXT_ALIGNMENT , GUI_TEXT_ALIGN_CENTER ) ;
2021-03-19 20:12:50 +01:00
2021-12-29 20:04:21 +01:00
if ( GuiButton ( ( Rectangle ) { 25 , 255 , 125 , 30 } , GuiIconText ( RAYGUI_ICON_FILE_SAVE , " Save File " ) ) ) showTextInputBox = true ;
2021-03-19 20:12:50 +01:00
2019-02-14 17:02:02 +01:00
GuiGroupBox ( ( Rectangle ) { 25 , 310 , 125 , 150 } , " STATES " ) ;
2021-10-05 11:23:58 +02:00
//GuiLock();
2019-09-03 15:45:14 +02:00
GuiSetState ( GUI_STATE_NORMAL ) ; if ( GuiButton ( ( Rectangle ) { 30 , 320 , 115 , 30 } , " NORMAL " ) ) { }
GuiSetState ( GUI_STATE_FOCUSED ) ; if ( GuiButton ( ( Rectangle ) { 30 , 355 , 115 , 30 } , " FOCUSED " ) ) { }
GuiSetState ( GUI_STATE_PRESSED ) ; if ( GuiButton ( ( Rectangle ) { 30 , 390 , 115 , 30 } , " #15#PRESSED " ) ) { }
GuiSetState ( GUI_STATE_DISABLED ) ; if ( GuiButton ( ( Rectangle ) { 30 , 425 , 115 , 30 } , " DISABLED " ) ) { }
GuiSetState ( GUI_STATE_NORMAL ) ;
2021-10-05 11:23:58 +02:00
//GuiUnlock();
2021-03-19 20:12:50 +01:00
2018-12-23 14:23:56 +01:00
comboBoxActive = GuiComboBox ( ( Rectangle ) { 25 , 470 , 125 , 30 } , " ONE;TWO;THREE;FOUR " , comboBoxActive ) ;
2021-03-19 20:12:50 +01:00
2018-11-13 12:56:12 +01:00
// NOTE: GuiDropdownBox must draw after any other control that can be covered on unfolding
2019-02-14 17:02:02 +01:00
GuiSetStyle ( DROPDOWNBOX , TEXT_ALIGNMENT , GUI_TEXT_ALIGN_LEFT ) ;
2019-02-14 16:25:33 +01:00
if ( GuiDropdownBox ( ( Rectangle ) { 25 , 65 , 125 , 30 } , " #01#ONE;#02#TWO;#03#THREE;#04#FOUR " , & dropdownBox001Active , dropDown001EditMode ) ) dropDown001EditMode = ! dropDown001EditMode ;
2019-08-07 00:37:54 +02:00
2019-02-14 17:02:02 +01:00
GuiSetStyle ( DROPDOWNBOX , TEXT_ALIGNMENT , GUI_TEXT_ALIGN_CENTER ) ;
2018-12-23 14:23:56 +01:00
if ( GuiDropdownBox ( ( Rectangle ) { 25 , 25 , 125 , 30 } , " ONE;TWO;THREE " , & dropdownBox000Active , dropDown000EditMode ) ) dropDown000EditMode = ! dropDown000EditMode ;
2019-08-07 00:37:54 +02:00
// Second GUI column
listViewActive = GuiListView ( ( Rectangle ) { 165 , 25 , 140 , 140 } , " Charmander;Bulbasaur;#18#Squirtel;Pikachu;Eevee;Pidgey " , & listViewScrollIndex , listViewActive ) ;
listViewExActive = GuiListViewEx ( ( Rectangle ) { 165 , 180 , 140 , 200 } , listViewExList , 8 , & listViewExFocus , & listViewExScrollIndex , listViewExActive ) ;
2019-02-14 16:25:33 +01:00
toggleGroupActive = GuiToggleGroup ( ( Rectangle ) { 165 , 400 , 140 , 25 } , " #1#ONE \n #3#TWO \n #8#THREE \n #23# " , toggleGroupActive ) ;
2021-03-19 20:12:50 +01:00
2018-10-30 12:55:48 +01:00
// Third GUI column
2020-03-11 16:00:09 +01:00
if ( GuiTextBoxMulti ( ( Rectangle ) { 320 , 25 , 225 , 140 } , multiTextBoxText , 256 , multiTextBoxEditMode ) ) multiTextBoxEditMode = ! multiTextBoxEditMode ;
2022-01-12 11:54:19 +01:00
colorPickerValue = GuiColorPicker ( ( Rectangle ) { 320 , 185 , 196 , 192 } , NULL , colorPickerValue ) ;
2021-03-19 20:12:50 +01:00
2019-08-16 16:59:27 +02:00
sliderValue = GuiSlider ( ( Rectangle ) { 355 , 400 , 165 , 20 } , " TEST " , TextFormat ( " %2.2f " , ( float ) sliderValue ) , sliderValue , - 50 , 100 ) ;
sliderBarValue = GuiSliderBar ( ( Rectangle ) { 320 , 430 , 200 , 20 } , NULL , TextFormat ( " %i " , ( int ) sliderBarValue ) , sliderBarValue , 0 , 100 ) ;
progressValue = GuiProgressBar ( ( Rectangle ) { 320 , 460 , 200 , 20 } , NULL , NULL , progressValue , 0 , 1 ) ;
2019-02-14 16:25:33 +01:00
2019-08-16 16:30:37 +02:00
// NOTE: View rectangle could be used to perform some scissor test
2022-02-05 18:35:55 +01:00
Rectangle view = GuiScrollPanel ( ( Rectangle ) { 560 , 25 , 100 , 160 } , NULL , ( Rectangle ) { 560 , 25 , 200 , 400 } , & viewScroll ) ;
GuiPanel ( ( Rectangle ) { 560 , 25 + 180 , 100 , 160 } , " Panel Info " ) ;
GuiGrid ( ( Rectangle ) { 560 , 25 + 180 + 180 , 100 , 120 } , NULL , 20 , 2 ) ;
2021-03-19 20:12:50 +01:00
2019-02-18 18:06:36 +01:00
GuiStatusBar ( ( Rectangle ) { 0 , GetScreenHeight ( ) - 20 , GetScreenWidth ( ) , 20 } , " This is a status bar " ) ;
2021-03-19 20:12:50 +01:00
2022-01-12 11:54:19 +01:00
alphaValue = GuiColorBarAlpha ( ( Rectangle ) { 320 , 490 , 200 , 30 } , NULL , alphaValue ) ;
2019-08-07 00:37:54 +02:00
2019-02-22 18:33:35 +01:00
if ( showMessageBox )
{
2019-02-22 19:18:09 +01:00
DrawRectangle ( 0 , 0 , GetScreenWidth ( ) , GetScreenHeight ( ) , Fade ( RAYWHITE , 0.8f ) ) ;
2021-12-29 20:04:21 +01:00
int result = GuiMessageBox ( ( Rectangle ) { GetScreenWidth ( ) / 2 - 125 , GetScreenHeight ( ) / 2 - 50 , 250 , 100 } , GuiIconText ( RAYGUI_ICON_EXIT , " Close Window " ) , " Do you really want to exit? " , " Yes;No " ) ;
2021-03-19 20:12:50 +01:00
2019-08-02 17:19:00 +02:00
if ( ( result = = 0 ) | | ( result = = 2 ) ) showMessageBox = false ;
else if ( result = = 1 ) exitWindow = true ;
}
2021-03-19 20:12:50 +01:00
2019-08-02 17:19:00 +02:00
if ( showTextInputBox )
{
DrawRectangle ( 0 , 0 , GetScreenWidth ( ) , GetScreenHeight ( ) , Fade ( RAYWHITE , 0.8f ) ) ;
2022-03-14 17:20:20 -04:00
int result = GuiTextInputBox ( ( Rectangle ) { GetScreenWidth ( ) / 2 - 120 , GetScreenHeight ( ) / 2 - 60 , 240 , 140 } , " Save " , GuiIconText ( RAYGUI_ICON_FILE_SAVE , " Save file as... " ) , " Introduce a save file name " , " Ok;Cancel " , textInput , NULL ) ;
2021-03-19 20:12:50 +01:00
2019-08-10 13:12:40 +02:00
if ( result = = 1 )
{
// TODO: Validate textInput value and save
2021-03-19 20:12:50 +01:00
2019-08-10 13:12:40 +02:00
strcpy ( textInputFileName , textInput ) ;
}
2021-03-19 20:12:50 +01:00
if ( ( result = = 0 ) | | ( result = = 1 ) | | ( result = = 2 ) )
2019-08-10 13:12:40 +02:00
{
showTextInputBox = false ;
strcpy ( textInput , " \0 " ) ;
}
2019-02-22 18:33:35 +01:00
}
2018-10-09 11:58:04 +02:00
//----------------------------------------------------------------------------------
EndDrawing ( ) ;
//----------------------------------------------------------------------------------
}
2018-11-08 10:41:31 +01:00
2018-10-09 11:58:04 +02:00
// De-Initialization
//--------------------------------------------------------------------------------------
CloseWindow ( ) ; // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0 ;
}