/******************************************************************************************* * * raygui - custom file dialog to load image * * DEPENDENCIES: * raylib 4.0 - Windowing/input management and drawing. * raygui 3.0 - Immediate-mode GUI controls. * * COMPILATION (Windows - MinGW): * gcc -o $(NAME_PART).exe $(FILE_NAME) -I../../src -lraylib -lopengl32 -lgdi32 -std=c99 * * LICENSE: zlib/libpng * * Copyright (c) 2016-2023 Ramon Santamaria (@raysan5) * **********************************************************************************************/ #include "raylib.h" #define RAYGUI_IMPLEMENTATION #include "../../src/raygui.h" #undef RAYGUI_IMPLEMENTATION // Avoid including raygui implementation again #define GUI_FILE_DIALOG_IMPLEMENTATION #include "gui_file_dialog.h" //------------------------------------------------------------------------------------ // Program main entry point //------------------------------------------------------------------------------------ int main() { // Initialization //--------------------------------------------------------------------------------------- int screenWidth = 800; int screenHeight = 560; InitWindow(screenWidth, screenHeight, "raygui - custom modal dialog"); SetExitKey(0); // Custom file dialog GuiFileDialogState fileDialogState = InitGuiFileDialog(GetWorkingDirectory()); bool exitWindow = false; char fileNameToLoad[512] = { 0 }; Texture texture = { 0 }; SetTargetFPS(60); //-------------------------------------------------------------------------------------- // Main game loop while (!exitWindow) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- exitWindow = WindowShouldClose(); if (fileDialogState.SelectFilePressed) { // Load image file (if supported extension) if (IsFileExtension(fileDialogState.fileNameText, ".png")) { strcpy(fileNameToLoad, TextFormat("%s/%s", fileDialogState.dirPathText, fileDialogState.fileNameText)); UnloadTexture(texture); texture = LoadTexture(fileNameToLoad); } fileDialogState.SelectFilePressed = false; } //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- BeginDrawing(); ClearBackground(GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR))); DrawTexture(texture, GetScreenWidth()/2 - texture.width/2, GetScreenHeight()/2 - texture.height/2 - 5, WHITE); DrawRectangleLines(GetScreenWidth()/2 - texture.width/2, GetScreenHeight()/2 - texture.height/2 - 5, texture.width, texture.height, BLACK); DrawText(fileNameToLoad, 208, GetScreenHeight() - 20, 10, GRAY); // raygui: controls drawing //---------------------------------------------------------------------------------- if (fileDialogState.windowActive) GuiLock(); if (GuiButton((Rectangle){ 20, 20, 140, 30 }, GuiIconText(ICON_FILE_OPEN, "Open Image"))) fileDialogState.windowActive = true; GuiUnlock(); // GUI: Dialog Window //-------------------------------------------------------------------------------- GuiFileDialog(&fileDialogState); //-------------------------------------------------------------------------------- //---------------------------------------------------------------------------------- EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- UnloadTexture(texture); // Unload texture CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; }