## File: README.md

**raygui is a simple and easy-to-use immediate-mode-gui library.**

`raygui` was originally inspired by [Unity IMGUI](https://docs.unity3d.com/Manual/GUIScriptingGuide.html) (immediate mode GUI API).

`raygui` was designed as an auxiliary module for [raylib](https://github.com/raysan5/raylib) to create simple GUI interfaces using raylib graphic style (simple colors, plain rectangular shapes, wide borders...) but it can be adapted to other engines/frameworks.

`raygui` is intended for **tools development**; it has already been used to develop [multiple published tools](https://raylibtech.itch.io).



**WARNING: Latest `raygui` from master branch is always aligned with latest `raylib` from master branch and all raylibtech tools. Make sure to use the latest versions.**

**WARNING: Latest `raygui 5.0` introduces some API-BREAKING changes, now all functions return a result value.**

*NOTE: raygui is a single-file header-only library (despite its internal dependency on raylib), so, functions definition AND implementation reside in the same file `raygui.h`, when including `raygui.h` in a module, `RAYGUI_IMPLEMENTATION` must be previously defined to include the implementation part of `raygui.h` BUT only in one compilation unit, other modules could also include `raygui.h` but `RAYGUI_IMPLEMENTATION` must not be defined again.*

## features

 - **Immediate-mode gui, no retained data**
 - **+25** controls provided (basic and advanced)
 - Powerful **styling system** for colors, font and metrics
 - Standalone usage mode supported (for other graphic libs)
 - **Icons support**, embedding a complete 1-bit icons pack
 - Multiple **tools** provided for raygui development

## code sample
```c
#include "raylib.h"

#define RAYGUI_IMPLEMENTATION
#include "raygui.h"

int main()
{
    InitWindow(400, 200, "raygui - controls test suite");
    SetTargetFPS(60);

    bool showMessageBox = false;

    while (!WindowShouldClose())
    {
        // Draw
        //----------------------------------------------------------------------------------
        BeginDrawing();
            ClearBackground(GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR)));

            if (GuiButton((Rectangle){ 24, 24, 120, 30 }, "#191#Show Message")) showMessageBox = true;

            if (showMessageBox)
            {
                int btnActive = -1;
                GuiMessageBox((Rectangle){ 85, 70, 250, 100 },
                    "#191#Message Box", "Hi! This is a message!", "Nice;Cool", &btnActive);

                if (btnActive >= 0) showMessageBox = false;
            }

        EndDrawing();
    }

    CloseWindow();
    return 0;
}
```


## raygui controls

### basic controls
```
Label       |  Button      |  LabelButton |  Toggle      |  ToggleGroup  |  ToggleSlider
CheckBox    |  ComboBox    |  DropdownBox |  TextBox     |  ValueBox     |  Spinner
Slider      |  SliderBar   |  ProgressBar |  StatusBar   |  DummyRec     |  Grid
```
### container/separator controls
```
WindowBox   |  GroupBox    |  Line        |  Panel       |  ScrollPanel  | TabBar
```
### advanced controls
```
ListView    |  ColorPicker |  MessageBox  |  TextInputBox
```


## raygui styles

`raygui` comes with a [default](styles/default) style automatically loaded at runtime:



Some additional styles are also provided for convenience, just check [styles directory](styles) for details:



Custom styles can also be created very easily using [rGuiStyler](https://raylibtech.itch.io/rguistyler) tool.

Styles can be loaded at runtime using raygui `GuiLoadStyle()` function. Simple and easy-to-use.

## raygui icons

`raygui` supports custom icons, by default, a predefined set of icons is provided inside `raygui` as an array of binary data; it contains **512 possible icons** defined as **16x16 pixels** each; each pixel is codified using **1-bit**. The total size of the array is `4096 bytes`.



To use any of those icons just prefix the *#iconId#* number to **any text** written within `raygui` controls:
```c
if (GuiButton(rec, "#05#Open Image")) { /* ACTION */ }
```
It's also possible to use the provided `GuiIconText()` function to prefix it automatically, using a clearer identifier (defined in `raygui.h`).
```c
if (GuiButton(rec, GuiIconText(ICON_FILE_OPEN, "Open Image"))) { /* ACTION */ }
```
Provided set of icons can be reviewed and customized using [rGuiIcons](https://raylibtech.itch.io/rguiicons) tool.

## raygui support tools

 - [**rGuiStyler**](https://raylibtech.itch.io/rguistyler) - A simple and easy-to-use raygui styles editor.

   

 - [**rGuiIcons**](https://raylibtech.itch.io/rguiicons) - A simple and easy-to-use raygui icons editor.

   

 - [**rGuiLayout**](https://raylibtech.itch.io/rguilayout) - A simple and easy-to-use raygui layouts editor.

   

## building

`raygui` is intended to be used as a portable single-file header-only library, to be directly integrated into any C/C++ codebase but some users could require a shared/dynamic version of the library, for example, to create bindings:

 - **Windows (MinGW, GCC)**
```
copy src/raygui.h src/raygui.c
gcc -o src/raygui.dll src/raygui.c -shared -DRAYGUI_IMPLEMENTATION -DBUILD_LIBTYPE_SHARED -static-libgcc -lopengl32 -lgdi32 -lwinmm -Wl,--out-implib,src/librayguidll.a
```

 - **Windows (MSVC)**
```
copy src\raygui.h src\raygui.c
# For `cl` to be accessible open "Developer Command Prompt for VS 2022".
cl /O2 /I<RELATIVE_PATH_TO_RAYLIB_INCLUDE_DIR> /D_USRDLL /D_WINDLL /DRAYGUI_IMPLEMENTATION /DBUILD_LIBTYPE_SHARED src/raygui.c /LD /Feraygui.dll /link /LIBPATH <RELATIVE_PATH_TO_RAYLIB_IMPORT_LIBRARY> msvcrt.lib winmm.lib gdi32.lib user32.lib shell32.lib /subsystem:windows /machine:x64

# Example:
# cl /O2 /I../raylib-6_0_win64_msvc16/include /D_USRDLL /D_WINDLL /DRAYGUI_IMPLEMENTATION /DBUILD_LIBTYPE_SHARED src/raygui.c /LD /Feraygui.dll /link /LIBPATH ../raylib-6_0_win64_msvc16/lib/raylibdll.lib msvcrt.lib winmm.lib gdi32.lib user32.lib shell32.lib /subsystem:windows /machine:x64
```

 - **Linux (GCC)**
```
mv src/raygui.h src/raygui.c
gcc -o raygui.so src/raygui.c -shared -fpic -DRAYGUI_IMPLEMENTATION -lraylib -lGL -lm -lpthread -ldl -lrt -lX11
mv src/raygui.c src/raygui.h
```

- **Mac (clang, homebrew installed raylib)**
```
cp src/raygui.h src/raygui.c
brew install raylib
gcc -o raygui.dynlib src/raygui.c -shared -fpic -DRAYGUI_IMPLEMENTATION -framework OpenGL -lm -lpthread -ldl $(pkg-config --libs --cflags raylib)
```


## license

raygui is licensed under an unmodified zlib/libpng license, which is an OSI-certified, BSD-like license that allows static linking with closed source software. Check [LICENSE](LICENSE) for further details.

---

## File: projects/CMake/README.md

# raygui CMake Definitions

This provides CMake definition files for raygui.

## Usage

```
cd projects/CMake
mkdir build
cd build
cmake ..
make
```

---

## File: styles/lavanda/README.md

## style: lavanda

Walking throught fields full of lavanda, it feels like a dream, a fantasy, just relax and close your eyes, could you feel it?



## style: provided files

Several options are provided to add the style to a `raygui` application, choose the one that better fits the project.

| file name | description |
| :-------- | :---------- |
| `style_lavanda.rgs` | Binary style file (raygui 4.0), font data compressed (recs, glyphs) |
| `style_lavanda.txt.rgs` | Text style file, no font data, requires external font provided |
| `style_lavanda.old.rgs` | Binary style file (raygui 3.x), font data uncompressed (recs, glyphs) |
| `style_lavanda.h` | Embeddable style as code file, self-contained, includes font data |
| `style_lavanda.png` | Style table image, contains `rGSf` chunk with binary `rgs` file data |

## screenshot



## about font

"Cartridge" font by [jeti](https://fontenddev.com/)

Licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), downloaded from dafont.com: [cartridge](https://www.dafont.com/cartridge.font)

---

## File: styles/jungle/README.md

## style: jungle

Sunset in the jungle, trees do not let to see the last rays of sun on the horizon, small creek in the path, mug on the shoes, a touch of danger and the adventure feeling, get into your jeep and drive with this style.  



## style: provided files

Several options are provided to add the style to a `raygui` application, choose the one that better fits the project.

| file name | description |
| :-------- | :---------- |
| `style_jungle.rgs` | Binary style file (raygui 4.0), font data compressed (recs, glyphs) |
| `style_jungle.txt.rgs` | Text style file, no font data, requires external font provided |
| `style_jungle.old.rgs` | Binary style file (raygui 3.x), font data uncompressed (recs, glyphs) |
| `style_jungle.h` | Embeddable style as code file, self-contained, includes font data |
| `style_jungle.png` | Style table image, contains `rGSf` chunk with binary `rgs` file data |

## screenshot



## about font

"Pixel Intv" font by [Pixel Sagas](http://www.pixelsagas.com) (Neale and Shayna Davidson).

100% free font, downloaded from dafont.com: [pixel-intv](https://www.dafont.com/pixel-intv.font)

---

## File: styles/enefete/README.md

## style: enefete

Inspired by money and pain, a desperate jump into the trendings train, a train to nowhere. Don't stare at it for too long!



## style: provided files

Several options are provided to add the style to a `raygui` application, choose the one that better fits the project.

| file name | description |
| :-------- | :---------- |
| `style_enefete.rgs` | Binary style file (raygui 4.0), font data compressed (recs, glyphs) |
| `style_enefete.txt.rgs` | Text style file, no font data, requires external font provided |
| `style_enefete.old.rgs` | Binary style file (raygui 3.x), font data uncompressed (recs, glyphs) |
| `style_enefete.h` | Embeddable style as code file, self-contained, includes font data |
| `style_enefete.png` | Style table image, contains `rGSf` chunk with binary `rgs` file data |

## screenshot



## about font

"Generic Mobile System" font by de Jayvee Enaguas.

CC0 1.0 Universal, downloaded from dafont.com: [generic-mobile-system](https://www.dafont.com/generic-mobile-system.font)

---

## File: styles/default/README.md

## style: default

raylib style, simple and easy-to-use. Light colors, wide borders, a sophisticated touch.



## style: provided files

Several options are provided to add the style to a `raygui` application, choose the one that better fits the project.

| file name | description |
| :-------- | :---------- |
| `style_default.txt.rgs` | Text style file, no font data, uses raylib default font |
| `style_default.png` | Style table image, contains `rGSf` chunk with binary `rgs` file data |

## screenshot



## about font

raylib font by Ramon Santamaria ([@raysan5](https://github.com/raysan5)).

---

## File: styles/dark/README.md

## style: dark

Classical dark style with an extra high-def colour touch! Elegant and professional, perfect for the expensive tools!



## style: provided files

Several options are provided to add the style to a `raygui` application, choose the one that better fits the project.

| file name | description |
| :-------- | :---------- |
| `style_dark.rgs` | Binary style file (raygui 4.0), font data compressed (recs, glyphs) |
| `style_dark.txt.rgs` | Text style file, no font data, requires external font provided |
| `style_dark.old.rgs` | Binary style file (raygui 3.x), font data uncompressed (recs, glyphs) |
| `style_dark.h` | Embeddable style as code file, self-contained, includes font data |
| `style_dark.png` | Style table image, contains `rGSf` chunk with binary `rgs` file data |

## screenshot



## about font

"Pixel Operator" font by de Jayvee Enaguas.

CC0 1.0 Universal, downloaded from dafont.com: [pixel-operator](https://www.dafont.com/pixel-operator.font)

---

## File: styles/cyber/README.md

## style: cyber

Future is now! Neons and shadows, city never sleeps! Robots waiting in the corners and expensive vending machines! You got the style!



## style: provided files

Several options are provided to add the style to a `raygui` application, choose the one that better fits the project.

| file name | description |
| :-------- | :---------- |
| `style_cyber.rgs` | Binary style file (raygui 4.0), font data compressed (recs, glyphs) |
| `style_cyber.txt.rgs` | Text style file, no font data, requires external font provided |
| `style_cyber.old.rgs` | Binary style file (raygui 3.x), font data uncompressed (recs, glyphs) |
| `style_cyber.h` | Embeddable style as code file, self-contained, includes font data |
| `style_cyber.png` | Style table image, contains `rGSf` chunk with binary `rgs` file data |

## screenshot



## about font

"Grixel Kyrou 7 Wide" font by [Nikos Giannakopoulos](http://www.grixel.gr/).

100% free font, downloaded from dafont.com: [grixel-kyrou-7-wide](https://www.dafont.com/grixel-kyrou-7-wide.font)

---

## File: styles/cherry/README.md

## style: cherry

Sweet with a touch of liquour, covered in chocolate, just give it a try! Not suitable for every palate, only the most demanding. 



## style: provided files

Several options are provided to add the style to a `raygui` application, choose the one that better fits the project.

| file name | description |
| :-------- | :---------- |
| `style_cherry.rgs` | Binary style file (raygui 4.0), font data compressed (recs, glyphs) |
| `style_cherry.txt.rgs` | Text style file, no font data, requires external font provided |
| `style_cherry.old.rgs` | Binary style file (raygui 3.x), font data uncompressed (recs, glyphs) |
| `style_cherry.h` | Embeddable style as code file, self-contained, includes font data |
| `style_cherry.png` | Style table image, contains `rGSf` chunk with binary `rgs` file data |

## screenshot



## about font

"Westington" font by Hazel Abbiati.

100% free font, downloaded from dafont.com: [westington](https://www.dafont.com/westington.font)

---

## File: styles/candy/README.md

## style: candy

Sweet, colorful, tasty! Enjoy this funfair ride and be careful with the witch of the candy house!



## style: provided files

Several options are provided to add the style to a `raygui` application, choose the one that better fits the project.

| file name | description |
| :-------- | :---------- |
| `style_candy.rgs` | Binary style file (raygui 4.0), font data compressed (recs, glyphs) |
| `style_candy.txt.rgs` | Text style file, no font data, requires external font provided |
| `style_candy.old.rgs` | Binary style file (raygui 3.x), font data uncompressed (recs, glyphs) |
| `style_candy.h` | Embeddable style as code file, self-contained, includes font data |
| `style_candy.png` | Style table image, contains `rGSf` chunk with binary `rgs` file data |

## screenshot



## about font

"V5 Eastergothic" font by vFive Digital (Roberto Christen).

100% free font, downloaded from dafont.com: [v5eastergothic](https://www.dafont.com/v5eastergothic.font)