Gitignore zig crap

This commit is contained in:
2026-05-05 23:15:08 +02:00
parent 823d0ae29b
commit e11ac4b05c
1396 changed files with 613924 additions and 0 deletions

View File

@ -0,0 +1,402 @@
#**************************************************************************************************
#
# raylib makefile for Desktop platform and HTML5
#
# Copyright (c) 2019 Ramon Santamaria (@raysan5)
#
# This software is provided "as-is", without any express or implied warranty. In no event
# will the authors be held liable for any damages arising from the use of this software.
#
# Permission is granted to anyone to use this software for any purpose, including commercial
# applications, and to alter it and redistribute it freely, subject to the following restrictions:
#
# 1. The origin of this software must not be misrepresented; you must not claim that you
# wrote the original software. If you use this software in a product, an acknowledgment
# in the product documentation would be appreciated but is not required.
#
# 2. Altered source versions must be plainly marked as such, and must not be misrepresented
# as being the original software.
#
# 3. This notice may not be removed or altered from any source distribution.
#
#**************************************************************************************************
.PHONY: all clean
# Define required raylib variables
RAYLIB_PATH ?= ../../raylib
RAYGUI_PATH ?= ../src
# Define default options
# One of PLATFORM_DESKTOP, PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
PLATFORM ?= PLATFORM_DESKTOP
# Locations of your newly installed library and associated headers. See ../src/Makefile
# On Linux, if you have installed raylib but cannot compile the examples, check that
# the *_INSTALL_PATH values here are the same as those in src/Makefile or point to known locations.
# To enable system-wide compile-time and runtime linking to libraylib.so, run ../src/$ sudo make install RAYLIB_LIBTYPE_SHARED.
# To enable compile-time linking to a special version of libraylib.so, change these variables here.
# To enable runtime linking to a special version of libraylib.so, see EXAMPLE_RUNTIME_PATH below.
# If there is a libraylib in both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH, at runtime,
# the library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over the one at RAYLIB_INSTALL_PATH.
# RAYLIB_INSTALL_PATH should be the desired full path to libraylib. No relative paths.
DESTDIR ?= /usr/local
RAYLIB_INSTALL_PATH ?= $(DESTDIR)/lib
# RAYLIB_H_INSTALL_PATH locates the installed raylib header and associated source files.
RAYLIB_H_INSTALL_PATH ?= $(DESTDIR)/include
# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
RAYLIB_LIBTYPE ?= STATIC
# Build mode for project: DEBUG or RELEASE
BUILD_MODE ?= RELEASE
# Use external GLFW library instead of rglfw module
# TODO: Review usage on Linux. Target version of choice. Switch on -lglfw or -lglfw3
USE_EXTERNAL_GLFW ?= FALSE
# Use Wayland display server protocol on Linux desktop
# by default it uses X11 windowing system
USE_WAYLAND_DISPLAY ?= FALSE
# Determine PLATFORM_OS in case PLATFORM_DESKTOP selected
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
# No uname.exe on MinGW!, but OS=Windows_NT on Windows!
# ifeq ($(UNAME),Msys) -> Windows
ifeq ($(OS),Windows_NT)
PLATFORM_OS=WINDOWS
else
UNAMEOS=$(shell uname)
ifeq ($(UNAMEOS),Linux)
PLATFORM_OS=LINUX
endif
ifeq ($(UNAMEOS),FreeBSD)
PLATFORM_OS=BSD
endif
ifeq ($(UNAMEOS),OpenBSD)
PLATFORM_OS=BSD
endif
ifeq ($(UNAMEOS),NetBSD)
PLATFORM_OS=BSD
endif
ifeq ($(UNAMEOS),DragonFly)
PLATFORM_OS=BSD
endif
ifeq ($(UNAMEOS),Darwin)
PLATFORM_OS=OSX
endif
endif
endif
ifeq ($(PLATFORM),PLATFORM_RPI)
UNAMEOS=$(shell uname)
ifeq ($(UNAMEOS),Linux)
PLATFORM_OS=LINUX
endif
endif
# RAYLIB_PATH adjustment for different platforms.
# If using GNU make, we can get the full path to the top of the tree. Windows? BSD?
# Required for ldconfig or other tools that do not perform path expansion.
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(PLATFORM_OS),LINUX)
RAYLIB_PREFIX ?= ..
RAYLIB_PATH = $(realpath $(RAYLIB_PREFIX))
endif
endif
# Default path for raylib on Raspberry Pi, if installed in different path, update it!
# This is not currently used by src/Makefile. Not sure of its origin or usage. Refer to wiki.
# TODO: update install: target in src/Makefile for RPI, consider relation to LINUX.
ifeq ($(PLATFORM),PLATFORM_RPI)
RAYLIB_PATH ?= /home/pi/raylib
endif
ifeq ($(PLATFORM),PLATFORM_WEB)
# Emscripten required variables
EMSDK_PATH ?= C:/raylib/emsdk
EMSCRIPTEN_VERSION ?= 1.38.32
CLANG_VERSION = e$(EMSCRIPTEN_VERSION)_64bit
PYTHON_VERSION = 2.7.13.1_64bit\python-2.7.13.amd64
NODE_VERSION = 8.9.1_64bit
export PATH = $(EMSDK_PATH);$(EMSDK_PATH)\clang\$(CLANG_VERSION);$(EMSDK_PATH)\node\$(NODE_VERSION)\bin;$(EMSDK_PATH)\python\$(PYTHON_VERSION);$(EMSDK_PATH)\emscripten\$(EMSCRIPTEN_VERSION);C:\raylib\MinGW\bin:$$(PATH)
EMSCRIPTEN = $(EMSDK_PATH)\emscripten\$(EMSCRIPTEN_VERSION)
endif
# Define raylib release directory for compiled library.
# RAYLIB_RELEASE_PATH points to provided binaries or your freshly built version
RAYLIB_RELEASE_PATH ?= $(RAYLIB_PATH)/src
# EXAMPLE_RUNTIME_PATH embeds a custom runtime location of libraylib.so or other desired libraries
# into each example binary compiled with RAYLIB_LIBTYPE=SHARED. It defaults to RAYLIB_RELEASE_PATH
# so that these examples link at runtime with your version of libraylib.so in ../release/libs/linux
# without formal installation from ../src/Makefile. It aids portability and is useful if you have
# multiple versions of raylib, have raylib installed to a non-standard location, or want to
# bundle libraylib.so with your game. Change it to your liking.
# NOTE: If, at runtime, there is a libraylib.so at both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH,
# The library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over RAYLIB_INSTALL_PATH,
# Implemented for LINUX below with CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
# To see the result, run readelf -d core/core_basic_window; looking at the RPATH or RUNPATH attribute.
# To see which libraries a built example is linking to, ldd core/core_basic_window;
# Look for libraylib.so.1 => $(RAYLIB_INSTALL_PATH)/libraylib.so.1 or similar listing.
EXAMPLE_RUNTIME_PATH ?= $(RAYLIB_RELEASE_PATH)
# Define default C compiler: gcc
# NOTE: define g++ compiler if using C++
CC = gcc
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(PLATFORM_OS),OSX)
# OSX default compiler
CC = clang
endif
ifeq ($(PLATFORM_OS),BSD)
# FreeBSD, OpenBSD, NetBSD, DragonFly default compiler
CC = clang
endif
endif
ifeq ($(PLATFORM),PLATFORM_RPI)
ifeq ($(USE_RPI_CROSS_COMPILER),TRUE)
# Define RPI cross-compiler
#CC = armv6j-hardfloat-linux-gnueabi-gcc
CC = $(RPI_TOOLCHAIN)/bin/arm-linux-gnueabihf-gcc
endif
endif
ifeq ($(PLATFORM),PLATFORM_WEB)
# HTML5 emscripten compiler
# WARNING: To compile to HTML5, code must be redesigned
# to use emscripten.h and emscripten_set_main_loop()
CC = emcc
endif
# Define default make program: Mingw32-make
MAKE = mingw32-make
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(PLATFORM_OS),LINUX)
MAKE = make
endif
endif
# Define compiler flags:
# -O1 defines optimization level
# -g include debug information on compilation
# -s strip unnecessary data from build
# -Wall turns on most, but not all, compiler warnings
# -std=c99 defines C language mode (standard C from 1999 revision)
# -std=gnu99 defines C language mode (GNU C from 1999 revision)
# -Wno-missing-braces ignore invalid warning (GCC bug 53119)
# -D_DEFAULT_SOURCE use with -std=c99 on Linux and PLATFORM_WEB, required for timespec
CFLAGS += -Wall -std=c99 -D_DEFAULT_SOURCE -Wno-missing-braces
ifeq ($(BUILD_MODE),DEBUG)
CFLAGS += -g
endif
ifeq ($(RAYLIB_BUILD_MODE),RELEASE)
CFLAGS += -O1 -s
endif
# Additional flags for compiler (if desired)
#CFLAGS += -Wextra -Wmissing-prototypes -Wstrict-prototypes
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(PLATFORM_OS),WINDOWS)
# resource file contains windows executable icon and properties
# -Wl,--subsystem,windows hides the console window
CFLAGS += $(RAYLIB_PATH)/src/raylib.rc.data -Wl,--subsystem,windows
endif
ifeq ($(PLATFORM_OS),LINUX)
ifeq ($(RAYLIB_LIBTYPE),STATIC)
CFLAGS += -D_DEFAULT_SOURCE
endif
ifeq ($(RAYLIB_LIBTYPE),SHARED)
# Explicitly enable runtime link to libraylib.so
CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
endif
endif
endif
ifeq ($(PLATFORM),PLATFORM_RPI)
CFLAGS += -std=gnu99
endif
ifeq ($(PLATFORM),PLATFORM_WEB)
# -Os # size optimization
# -O2 # optimization level 2, if used, also set --memory-init-file 0
# -sUSE_GLFW=3 # Use glfw3 library (context/input management)
# -sALLOW_MEMORY_GROWTH=1 # to allow memory resizing -> WARNING: Audio buffers could FAIL!
# -sTOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB) (67108864 = 64MB)
# -sUSE_PTHREADS=1 # multithreading support
# -sWASM=0 # disable Web Assembly, emitted by default
# -sASYNCIFY # lets synchronous C/C++ code interact with asynchronous JS
# -sFORCE_FILESYSTEM=1 # force filesystem to load/save files data
# -sASSERTIONS=1 # enable runtime checks for common memory allocation errors (-O1 and above turn it off)
# -sMINIFY_HTML=0 # minify generated html from shell.html
# --profiling # include information for code profiling
# --memory-init-file 0 # to avoid an external memory initialization code file (.mem)
# --preload-file resources # specify a resources folder for data compilation
# --source-map-base # allow debugging in browser with source map
# --shell-file shell.html # define a custom shell .html and output extension
CFLAGS += -Os -sUSE_GLFW=3 -sFORCE_FILESYSTEM=1 -sASYNCIFY --preload-file $(dir $<)resources@resources -sMINIFY_HTML=0
ifeq ($(BUILD_MODE), DEBUG)
CFLAGS += -sASSERTIONS=1 --profiling
endif
# NOTE: Simple raylib examples are compiled to be interpreter by emterpreter, that way,
# we can compile same code for ALL platforms with no change required, but, working on bigger
# projects, code needs to be refactored to avoid a blocking while() loop, moving Update and Draw
# logic to a self contained function: UpdateDrawFrame(), check core_basic_window_web.c for reference.
# Define a custom shell .html and output extension
CFLAGS += --shell-file $(RAYLIB_PATH)/src/shell.html
EXT = .html
endif
# Define include paths for required headers
# NOTE: Several external required libraries (stb and others)
INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external -I$(RAYGUI_PATH)
# Define additional directories containing required header files
ifeq ($(PLATFORM),PLATFORM_RPI)
# RPI required libraries
INCLUDE_PATHS += -I/opt/vc/include
INCLUDE_PATHS += -I/opt/vc/include/interface/vmcs_host/linux
INCLUDE_PATHS += -I/opt/vc/include/interface/vcos/pthreads
endif
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(PLATFORM_OS),BSD)
# Consider -L$(RAYLIB_H_INSTALL_PATH)
INCLUDE_PATHS += -I/usr/local/include
endif
ifeq ($(PLATFORM_OS),LINUX)
# Reset everything.
# Precedence: immediately local, installed version, raysan5 provided libs -I$(RAYLIB_H_INSTALL_PATH) -I$(RAYLIB_PATH)/release/include
INCLUDE_PATHS = -I$(RAYLIB_H_INSTALL_PATH) -isystem. -isystem$(RAYLIB_PATH)/src -isystem$(RAYLIB_PATH)/release/include -isystem$(RAYLIB_PATH)/src/external
endif
endif
# Define library paths containing required libs.
LDFLAGS = -L. -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(PLATFORM_OS),BSD)
# Consider -L$(RAYLIB_INSTALL_PATH)
LDFLAGS += -L. -Lsrc -L/usr/local/lib
ifeq ($(shell uname),OpenBSD)
LDFLAGS += -L/usr/X11R6/lib
endif
endif
ifeq ($(PLATFORM_OS),LINUX)
# Reset everything.
# Precedence: immediately local, installed version, raysan5 provided libs
LDFLAGS = -L. -L$(RAYLIB_INSTALL_PATH) -L$(RAYLIB_RELEASE_PATH)
endif
endif
ifeq ($(PLATFORM),PLATFORM_RPI)
LDFLAGS += -L/opt/vc/lib
endif
# Define any libraries required on linking
# if you want to link libraries (libname.so or libname.a), use the -lname
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(PLATFORM_OS),WINDOWS)
# Libraries for Windows desktop compilation
# NOTE: WinMM library required to set high-res timer resolution
LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm
# Required for physac examples
LDLIBS += -static -lpthread
endif
ifeq ($(PLATFORM_OS),LINUX)
# Libraries for Debian GNU/Linux desktop compiling
# NOTE: Required packages: libegl1-mesa-dev
LDLIBS = -lraylib -lGL -lm -lpthread -ldl -lrt
# On X11 requires also below libraries
LDLIBS += -lX11
# NOTE: It seems additional libraries are not required any more, latest GLFW just dlopen them
#LDLIBS += -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
# On Wayland windowing system, additional libraries requires
ifeq ($(USE_WAYLAND_DISPLAY),TRUE)
LDLIBS += -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon
endif
# Explicit link to libc
ifeq ($(RAYLIB_LIBTYPE),SHARED)
LDLIBS += -lc
endif
endif
ifeq ($(PLATFORM_OS),OSX)
# Libraries for OSX 10.9 desktop compiling
# NOTE: Required packages: libopenal-dev libegl1-mesa-dev
LDLIBS = -lraylib -framework OpenGL -framework Cocoa -framework IOKit -framework CoreAudio -framework CoreVideo
endif
ifeq ($(PLATFORM_OS),BSD)
# Libraries for FreeBSD, OpenBSD, NetBSD, DragonFly desktop compiling
# NOTE: Required packages: mesa-libs
LDLIBS = -lraylib -lGL -lpthread -lm
# On XWindow requires also below libraries
LDLIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
endif
ifeq ($(USE_EXTERNAL_GLFW),TRUE)
# NOTE: It could require additional packages installed: libglfw3-dev
LDLIBS += -lglfw
endif
endif
ifeq ($(PLATFORM),PLATFORM_RPI)
# Libraries for Raspberry Pi compiling
# NOTE: Required packages: libasound2-dev (ALSA)
LDLIBS = -lraylib -lGLESv2 -lEGL -lpthread -lrt -lm -ldrm -lgbm -ldl
endif
ifeq ($(PLATFORM),PLATFORM_WEB)
# Libraries for web (HTML5) compiling
LDLIBS = $(RAYLIB_RELEASE_PATH)/libraylib.bc
endif
# Define all source files required
EXAMPLES = \
controls_test_suite/controls_test_suite \
custom_file_dialog/custom_file_dialog \
custom_input_box/custom_input_box\
image_exporter/image_exporter \
image_importer_raw/image_importer_raw \
property_list/property_list \
portable_window/portable_window \
scroll_panel/scroll_panel \
style_selector/style_selector \
custom_sliders/custom_sliders \
animation_curve/animation_curve \
floating_window/floating_window \
CURRENT_MAKEFILE = $(lastword $(MAKEFILE_LIST))
# Default target entry
all: $(EXAMPLES)
# Generic compilation pattern
# NOTE: Examples must be ready for Android compilation!
%: %.c
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM)
# Clean everything
clean:
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(PLATFORM_OS),WINDOWS)
del *.o *.exe /s
endif
ifeq ($(PLATFORM_OS),LINUX)
rm -f $(EXAMPLES)
endif
ifeq ($(PLATFORM_OS),OSX)
find . -type f -perm +ugo+x -delete
rm -f *.o
endif
ifeq ($(shell uname),OpenBSD)
find . -type f -perm 0755 -delete
rm -f *.o
endif
endif
ifeq ($(PLATFORM),PLATFORM_RPI)
find . -type f -executable -delete
rm -fv *.o
endif
ifeq ($(PLATFORM),PLATFORM_WEB)
del *.o *.html *.js
endif
@echo Cleaning done

View File

@ -0,0 +1,477 @@
/*******************************************************************************************
*
* Animation curves - An example demo for animation curves
*
* 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) 2023 Pierre Jaffuer (@smallcluster)
*
**********************************************************************************************/
#include "raylib.h"
#define RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT 24
#define RAYGUI_IMPLEMENTATION
#include "../../src/raygui.h"
// raygui embedded styles
#include "../styles/style_cyber.h" // raygui style: cyber
#include "../styles/style_jungle.h" // raygui style: jungle
#include "../styles/style_lavanda.h" // raygui style: lavanda
#include "../styles/style_dark.h" // raygui style: dark
#include "../styles/style_bluish.h" // raygui style: bluish
#include "../styles/style_terminal.h" // raygui style: terminal
#undef RAYGUI_IMPLEMENTATION // Avoid including raygui implementation again
#define GUI_CURVE_EDITOR_IMPLEMENTATION
#include "gui_curve_editor.h"
//------------------------------------------------------------------------------------
// Helper function
//------------------------------------------------------------------------------------
void LoadCurveDefaults(GuiCurveEditorState curves[]);
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main()
{
// Initialization
//---------------------------------------------------------------------------------------
const int screenWidth = 800;
const int screenHeight = 540;
InitWindow(screenWidth, screenHeight, "raygui - animation curves");
SetTargetFPS(60);
// Gui style
GuiLoadStyleDefault();
int visualStyleActive = 0;
int prevVisualStyleActive = 0;
float fontSize = GuiGetStyle(DEFAULT, TEXT_SIZE);
const float margin = 8;
// Gui states
Vector2 scrollOffset = (Vector2){ 0, 0 };
Rectangle contentRect = (Rectangle){ 0, 0, 0, 0 };
bool moveSlider = false;
bool sectionActive[5] = { 0 };
sectionActive[0] = true;
const char *sectionNames[5] = { "X Position", "Y Position", "Width", "Height", "Rotation" };
bool editValueBox[5][4] = { 0 };
char *valTextBox[5][4][20] = { 0 };
bool playAnimation = true;
bool showHelp = true;
Rectangle settingsRect = (Rectangle){ screenWidth - screenWidth/3, 0, screenWidth/3, screenHeight };
// Animation curves
// 0 -> Ball X position
// 1 -> Ball Y position
// 2 -> Ball Width
// 3 -> Ball Height
// 4 -> Ball rotation
GuiCurveEditorState curves[5] = { 0 };
LoadCurveDefaults(curves);
// Animation time
float time = 0.0f;
float animationTime = 4.0f;
//SetTargetFPS(60);
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
if (playAnimation) time += GetFrameTime();
// Reset timer
if (time > animationTime) time = 0;
// Ball animation
const float t = time/animationTime;
Vector2 ballPos = (Vector2){ GuiCurveEval(&curves[0], t), GuiCurveEval(&curves[1], t) };
Vector2 ballSize = (Vector2){ GuiCurveEval(&curves[2], t), GuiCurveEval(&curves[3], t) };
float ballRotation = GuiCurveEval(&curves[4], t);
// Update style
if (visualStyleActive != prevVisualStyleActive)
{
switch (visualStyleActive)
{
case 0: GuiLoadStyleDefault(); break;
case 1: GuiLoadStyleJungle(); break;
case 2: GuiLoadStyleLavanda(); break;
case 3: GuiLoadStyleDark(); break;
case 4: GuiLoadStyleBluish(); break;
case 5: GuiLoadStyleCyber(); break;
case 6: GuiLoadStyleTerminal(); break;
default: break;
}
fontSize = GuiGetStyle(DEFAULT, TEXT_SIZE);
prevVisualStyleActive = visualStyleActive;
}
// Update settings panel rect
Rectangle sliderRect = (Rectangle){ settingsRect.x - 4, settingsRect.y, 4, settingsRect.height };
if (CheckCollisionPointRec(GetMousePosition(), sliderRect) && IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) moveSlider = true;
if (IsMouseButtonUp(MOUSE_BUTTON_LEFT)) moveSlider = false;
if (moveSlider)
{
settingsRect.x = GetMouseX();
// Minimum-Maximum size
if (settingsRect.x > (screenWidth - 4)) settingsRect.x = screenWidth - 4;
else if (settingsRect.x < 4) settingsRect.x = 4;
settingsRect.width = screenWidth - settingsRect.x;
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(GetColor( GuiGetStyle(DEFAULT, BACKGROUND_COLOR)));
// Scene
//----------------------------------------------------------------------------------
DrawRectangle(curves[0].start, curves[1].end, curves[0].end-curves[0].start, curves[1].start-curves[1].end, BLUE); // Sky
DrawRectangle(curves[0].start, curves[1].start, curves[0].end-curves[0].start, 32, DARKGREEN); // Ground
BeginScissorMode(curves[0].start, curves[1].end, curves[0].end-curves[0].start, curves[1].start-curves[1].end+32);
DrawRectanglePro((Rectangle){ballPos.x, ballPos.y, ballSize.x, ballSize.y}, (Vector2){ballSize.x/2.f,ballSize.y/2.f}, ballRotation, PINK); // Ball
DrawLine(ballPos.x, ballPos.y, ballPos.x + cosf(ballRotation*DEG2RAD)*ballSize.x, ballPos.y +sinf(ballRotation*DEG2RAD)*ballSize.y, RED);
DrawLine(ballPos.x, ballPos.y, ballPos.x + cosf((ballRotation+90)*DEG2RAD)*ballSize.x, ballPos.y +sinf((ballRotation+90)*DEG2RAD)*ballSize.y, GREEN);
EndScissorMode();
// Bounds
DrawRectangleLines(curves[0].start, curves[1].end, curves[0].end-curves[0].start, curves[1].start-curves[1].end+32, GetColor(GuiGetStyle(DEFAULT, BORDER_COLOR_NORMAL)));
//----------------------------------------------------------------------------------
// GUI
//----------------------------------------------------------------------------------
if (showHelp)
{
if (GuiWindowBox((Rectangle) {margin, margin, settingsRect.x-2*margin, curves[1].end-2*margin}, "help")) showHelp = false;
Rectangle helpTextRect = (Rectangle) { 2*margin, 2*margin+RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT, settingsRect.x - 4 - 4*margin, 0 };
GuiLabel((Rectangle) {helpTextRect.x, helpTextRect.y+helpTextRect.height, helpTextRect.width, fontSize}, "Curve widget controls:");
helpTextRect.height += fontSize+margin;
GuiLabel((Rectangle) {helpTextRect.x, helpTextRect.y+helpTextRect.height, helpTextRect.width, fontSize}, "- Left click to move/add point or move tangents");
helpTextRect.height += fontSize+margin/2;
GuiLabel((Rectangle) {helpTextRect.x, helpTextRect.y+helpTextRect.height, helpTextRect.width, fontSize}, "- While moving a tangent, hold SHIFT to disable tangent symetry");
helpTextRect.height += fontSize+margin/2;
GuiLabel((Rectangle) {helpTextRect.x, helpTextRect.y+helpTextRect.height, helpTextRect.width, fontSize}, "- Right click to remove a point");
helpTextRect.height += fontSize+margin/2;
DrawRectangleGradientV(margin, margin+curves[1].end - 2*margin, settingsRect.x - 2*margin, 12, (Color){ 0,0,0,100 }, BLANK);
}
// Settings panel
GuiScrollPanel(settingsRect, "Settings", contentRect, &scrollOffset, NULL);
BeginScissorMode(settingsRect.x, settingsRect.y+RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT, settingsRect.width, settingsRect.height);
// Rebuild the content Rect
contentRect = (Rectangle){ settingsRect.x + margin, RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT+margin, settingsRect.width - 2*margin - GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH), 0 };
// Help button
if (GuiButton((Rectangle){ contentRect.x, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width, 1.5*fontSize }, GuiIconText(showHelp? ICON_EYE_ON : ICON_EYE_OFF, "Curve controls help"))) showHelp = !showHelp;
contentRect.height += 1.5*fontSize + margin;
// Animation Time slider
GuiSlider((Rectangle){ contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width/2, fontSize }, NULL, TextFormat("Animation Time: %.2fs", animationTime), &animationTime, 1, 8);
contentRect.height += fontSize + margin;
// Load default curves
if (GuiButton((Rectangle){ contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width, 1.5*fontSize }, "Load default"))
{
LoadCurveDefaults(curves);
animationTime = 4.0f;
time = 0.0f;
}
contentRect.height += 1.5f*fontSize + margin;
// Styles
GuiLabel((Rectangle){ contentRect.x, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width, fontSize }, "Style:");
contentRect.height += fontSize;
GuiComboBox((Rectangle){contentRect.x, contentRect.y+contentRect.height+scrollOffset.y, contentRect.width, 1.5*fontSize }, "default;Jungle;Lavanda;Dark;Bluish;Cyber;Terminal", &visualStyleActive);
contentRect.height += 1.5f*fontSize + margin;
// Draw curves with their controls
//----------------------------------------------------------------------------------
for (int i = 0; i < 5; i++)
{
// Collapsing section
Rectangle headerRect = (Rectangle){ contentRect.x, contentRect.y + contentRect.height+scrollOffset.y, contentRect.width, 1.5f*fontSize };
GuiStatusBar(headerRect, NULL);
if (GuiLabelButton(headerRect, GuiIconText(sectionActive[i] ? ICON_ARROW_DOWN_FILL : ICON_ARROW_RIGHT_FILL, sectionNames[i]))) sectionActive[i] = !sectionActive[i];
contentRect.height += 1.5f*fontSize + margin;
// Skip this section
if (!sectionActive[i]) continue;
// Draw curve control
Rectangle curveRect = (Rectangle){ contentRect.x, contentRect.y+contentRect.height + scrollOffset.y, contentRect.width, fontSize*12 };
EndScissorMode(); // Stop clipping from setting rect
// Curves can leaks from control boundary... scissor it !
BeginScissorMode(curveRect.x, curveRect.y, curveRect.width, curveRect.height);
GuiCurveEditor(&curves[i], curveRect);
EndScissorMode();
// Resume clipping from setting rect
BeginScissorMode(settingsRect.x, settingsRect.y + RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT, settingsRect.width, settingsRect.height);
contentRect.height += fontSize*12 + margin;
// Draw selected point controls
GuiCurveEditorPoint *p = &(curves[i].points[curves[i].selectedIndex]);
GuiCheckBox((Rectangle){ contentRect.x, contentRect.y + contentRect.height + scrollOffset.y, 1.5f*fontSize, 1.5f*fontSize }, "Left Linear", &p->leftLinear);
GuiCheckBox((Rectangle){ contentRect.x+contentRect.width/2, contentRect.y + contentRect.height + scrollOffset.y, 1.5f*fontSize, 1.5f*fontSize }, "Right Linear", &p->rightLinear);
contentRect.height += 1.5f*fontSize + margin;
// Positions
GuiLabel((Rectangle){ contentRect.x, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width, fontSize }, "Position");
contentRect.height += fontSize;
if (!editValueBox[i][0]) gcvt(p->position.x, 6, (char *)valTextBox[i][0]); // Transform x position to string
if (!editValueBox[i][1]) gcvt(curves[i].start + (curves[i].end-curves[i].start)*p->position.y, 6, (char *)valTextBox[i][1]); // Transform y position to string
// X pos
if (GuiTextBox((Rectangle){ contentRect.x, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width/2-margin, 1.5f*fontSize }, (char *)valTextBox[i][0], 20, editValueBox[i][0]))
{
editValueBox[i][0] = !editValueBox[i][0];
// Input ended
if (!editValueBox[i][0])
{
// Try to convert text to float and assign it to the point
char *endPtr = NULL;
double value = strtod((char *)valTextBox[i][0], &endPtr);
if (endPtr != (char *)valTextBox[i][0]) p->position.x = (value < 0)? 0 : (value > 1)? 1 : value;
}
}
// Y pos
if (GuiTextBox((Rectangle){ contentRect.x + contentRect.width/2, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width/2.0f, 1.5f*fontSize }, (char *)valTextBox[i][1], 20, editValueBox[i][1]))
{
editValueBox[i][1] = !editValueBox[i][1];
// Input ended
if (!editValueBox[i][1])
{
// Try to convert text to float and assign it to the point
char *endPtr = NULL;
double value = strtod((char *)valTextBox[i][1], &endPtr);
if (endPtr != (char *)valTextBox[i][1])
{
float normalizedVal = (value - curves[i].start)/(curves[i].end - curves[i].start);
p->position.y = (normalizedVal < 0)? 0 : (normalizedVal > 1)? 1 : normalizedVal;
}
}
}
contentRect.height += 1.5f*fontSize + margin;
// Tangents
GuiLabel((Rectangle){ contentRect.x, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width, fontSize }, "Tangents");
contentRect.height += fontSize;
if (!editValueBox[i][2]) gcvt(p->tangents.x, 6, (char *)valTextBox[i][2]); // Transform left tangent to string
if (!editValueBox[i][3]) gcvt(p->tangents.y, 6, (char *)valTextBox[i][3]); // Transform right tangent to string
// Left tan
if (GuiTextBox((Rectangle){ contentRect.x, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width/2 - margin, 1.5f*fontSize }, (char *)valTextBox[i][2], 20, editValueBox[i][2]))
{
editValueBox[i][2] = !editValueBox[i][2];
// Input ended
if (!editValueBox[i][2])
{
// Try to convert text to float and assign it to the point
char *endPtr = NULL;
double value = strtod((char *)valTextBox[i][2], &endPtr);
if (endPtr != (char *)valTextBox[i][2]) p->tangents.x = value;
}
}
// Right tan
if (GuiTextBox((Rectangle){ contentRect.x + contentRect.width/2.0f, contentRect.y + contentRect.height + scrollOffset.y, contentRect.width/2.0f, 1.5f*fontSize }, (char *)valTextBox[i][3], 20, editValueBox[i][3]))
{
editValueBox[i][3] = !editValueBox[i][3];
// Input ended
if (!editValueBox[i][3])
{
// Try to convert text to float and assign it to the point
char *endPtr = NULL;
double value = strtod((char *)valTextBox[i][3], &endPtr);
if (endPtr != (char *)valTextBox[i][3]) p->tangents.y = value;
}
}
contentRect.height += 1.5*fontSize + margin;
}
contentRect.height += margin;
EndScissorMode();
// Settings panel shadow
DrawRectangleGradientH(settingsRect.x - 12, 0, 12, settingsRect.height, BLANK, (Color){ 0, 0, 0, 100 });
// Slider
if (moveSlider) DrawRectangle(sliderRect.x, sliderRect.y, sliderRect.width, sliderRect.height, GetColor(GuiGetStyle(DEFAULT, BASE_COLOR_PRESSED)));
else if(CheckCollisionPointRec(GetMousePosition(), sliderRect)) DrawRectangle(sliderRect.x, sliderRect.y, sliderRect.width, sliderRect.height, GetColor(GuiGetStyle(DEFAULT, BASE_COLOR_FOCUSED)));
// Draw Time controls
//----------------------------------------------------------------------------------
Rectangle timeLineRect = (Rectangle){ 0, screenHeight-4*fontSize, settingsRect.x, 4*fontSize };
GuiPanel((Rectangle){ timeLineRect.x, timeLineRect.y, timeLineRect.width, 2*fontSize }, NULL);
GuiLabel((Rectangle){ timeLineRect.x, timeLineRect.y, timeLineRect.width, 2*fontSize }, TextFormat("Normalized Time: %.3f", time/animationTime));
if (GuiButton((Rectangle){ timeLineRect.x+timeLineRect.width/2 - 2*fontSize - margin/4, timeLineRect.y, 2*fontSize, 2*fontSize }, GuiIconText((playAnimation? ICON_PLAYER_PAUSE : ICON_PLAYER_PLAY), ""))) playAnimation = !playAnimation;
if (GuiButton((Rectangle){ timeLineRect.x+timeLineRect.width/2 + margin/4, timeLineRect.y, 2*fontSize, 2*fontSize }, GuiIconText(ICON_PLAYER_STOP, "")))
{
playAnimation = false;
time = 0;
}
float animTime = time/animationTime;
GuiSlider((Rectangle){timeLineRect.x, timeLineRect.y + 2*fontSize, timeLineRect.width, timeLineRect.height - 2*fontSize }, NULL, NULL, &animTime, 0, 1);
time = animationTime*animTime;
// Time panel shadow
DrawRectangleGradientV(timeLineRect.x, timeLineRect.y - 12, timeLineRect.width, 12, BLANK, (Color){ 0, 0, 0, 100 });
EndDrawing();
//----------------------------------------------------------------------------------
}
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}
void LoadCurveDefaults(GuiCurveEditorState curves[])
{
// X pos
curves[0].start = 28;
curves[0].end = 506;
curves[0].numPoints = 4;
curves[0].selectedIndex = 0;
curves[0].editLeftTangent = false;
curves[0].editRightTangent = false;
curves[0].points[0].position =(Vector2) {0.000000, 0.000000}; curves[0].points[0].tangents = (Vector2) {0.000000, 1.515101}; curves[0].points[0].leftLinear = 1;curves[0].points[0].rightLinear = 1;
curves[0].points[1].position =(Vector2) {0.422414, 0.640000}; curves[0].points[1].tangents = (Vector2) {-2.824348, -4.494999};curves[0].points[1].leftLinear = 0;curves[0].points[1].rightLinear = 0;
curves[0].points[2].position =(Vector2) {0.732759, 0.210000}; curves[0].points[2].tangents = (Vector2) {0.000000, 2.956133}; curves[0].points[2].leftLinear = 0;curves[0].points[2].rightLinear = 1;
curves[0].points[3].position =(Vector2) {1.000000, 1.000000}; curves[0].points[3].tangents = (Vector2) {2.956133, 0.000000}; curves[0].points[3].leftLinear = 1;curves[0].points[3].rightLinear = 1;
// Y pos
curves[1].start = 405;
curves[1].end = 135;
curves[1].numPoints = 7;
curves[1].selectedIndex = 0;
curves[1].editLeftTangent = false;
curves[1].editRightTangent = false;
curves[1].points[0].position = (Vector2) {0.000000, 1.000000};curves[1].points[0].tangents = (Vector2) { 0.000000 , 0.000000};curves[1].points[0].leftLinear = 0;curves[1].points[0].rightLinear = 0;
curves[1].points[1].position = (Vector2) {0.140000, 0.000000};curves[1].points[1].tangents = (Vector2) {-10.000000 ,10.000000};curves[1].points[1].leftLinear = 0;curves[1].points[1].rightLinear = 0;
curves[1].points[2].position = (Vector2) {0.450000, 0.000000};curves[1].points[2].tangents = (Vector2) {-10.000000 ,10.000000};curves[1].points[2].leftLinear = 0;curves[1].points[2].rightLinear = 0;
curves[1].points[3].position = (Vector2) {0.670000, 0.000000};curves[1].points[3].tangents = (Vector2) {-10.000000 ,10.000000};curves[1].points[3].leftLinear = 0;curves[1].points[3].rightLinear = 0;
curves[1].points[4].position = (Vector2) {0.830000, 0.000000};curves[1].points[4].tangents = (Vector2) {-10.000000 ,10.000000};curves[1].points[4].leftLinear = 0;curves[1].points[4].rightLinear = 0;
curves[1].points[5].position = (Vector2) {0.940000, 0.000000};curves[1].points[5].tangents = (Vector2) {-10.000000 ,10.000000};curves[1].points[5].leftLinear = 0;curves[1].points[5].rightLinear = 0;
curves[1].points[6].position = (Vector2) {1.000000, 0.000000};curves[1].points[6].tangents = (Vector2) {-10.000000 , 0.000000};curves[1].points[6].leftLinear = 0;curves[1].points[6].rightLinear = 0;
// X size
curves[2].start = 1;
curves[2].end = 64;
curves[2].numPoints = 16;
curves[2].selectedIndex = 0;
curves[2].editLeftTangent = false;
curves[2].editRightTangent = false;
curves[2].points[0].position = (Vector2) {0.000000, 0.492063}; curves[2].points[0].tangents = (Vector2) {0,0}; curves[2].points[0].leftLinear = 0; curves[2].points[0].rightLinear = 0;
curves[2].points[1].position = (Vector2) {0.130000, 0.492063}; curves[2].points[1].tangents = (Vector2) {0,0}; curves[2].points[1].leftLinear = 0; curves[2].points[1].rightLinear = 0;
curves[2].points[2].position = (Vector2) {0.140000, 0.746032}; curves[2].points[2].tangents = (Vector2) {0,0}; curves[2].points[2].leftLinear = 0; curves[2].points[2].rightLinear = 0;
curves[2].points[3].position = (Vector2) {0.150000, 0.492063}; curves[2].points[3].tangents = (Vector2) {0,0}; curves[2].points[3].leftLinear = 0; curves[2].points[3].rightLinear = 0;
curves[2].points[4].position = (Vector2) {0.440000, 0.490000}; curves[2].points[4].tangents = (Vector2) {0,0}; curves[2].points[4].leftLinear = 0; curves[2].points[4].rightLinear = 0;
curves[2].points[5].position = (Vector2) {0.450000, 0.682540}; curves[2].points[5].tangents = (Vector2) {0,0}; curves[2].points[5].leftLinear = 0; curves[2].points[5].rightLinear = 0;
curves[2].points[6].position = (Vector2) {0.460000, 0.480000}; curves[2].points[6].tangents = (Vector2) {0,0}; curves[2].points[6].leftLinear = 0; curves[2].points[6].rightLinear = 0;
curves[2].points[7].position = (Vector2) {0.660000, 0.492063}; curves[2].points[7].tangents = (Vector2) {0,0}; curves[2].points[7].leftLinear = 0; curves[2].points[7].rightLinear = 0;
curves[2].points[8].position = (Vector2) {0.670000, 0.619048}; curves[2].points[8].tangents = (Vector2) {0,0}; curves[2].points[8].leftLinear = 0; curves[2].points[8].rightLinear = 0;
curves[2].points[9].position = (Vector2) {0.680000, 0.492063}; curves[2].points[9].tangents = (Vector2) {0,0}; curves[2].points[9].leftLinear = 0; curves[2].points[9].rightLinear = 0;
curves[2].points[10].position = (Vector2) {0.820000, 0.492063}; curves[2].points[10].tangents = (Vector2) {0,0}; curves[2].points[10].leftLinear = 0; curves[2].points[10].rightLinear = 0;
curves[2].points[11].position = (Vector2) {0.830000, 0.619048}; curves[2].points[11].tangents = (Vector2) {0,0}; curves[2].points[11].leftLinear = 0; curves[2].points[11].rightLinear = 0;
curves[2].points[12].position = (Vector2) {0.840000, 0.492063}; curves[2].points[12].tangents = (Vector2) {0,0}; curves[2].points[12].leftLinear = 0; curves[2].points[12].rightLinear = 0;
curves[2].points[13].position = (Vector2) {0.930000, 0.492063}; curves[2].points[13].tangents = (Vector2) {0,0}; curves[2].points[13].leftLinear = 0; curves[2].points[13].rightLinear = 0;
curves[2].points[14].position = (Vector2) {0.940000, 0.619048}; curves[2].points[14].tangents = (Vector2) {0,0}; curves[2].points[14].leftLinear = 0; curves[2].points[14].rightLinear = 0;
curves[2].points[15].position = (Vector2) {0.950000, 0.492063}; curves[2].points[15].tangents = (Vector2) {0,0}; curves[2].points[15].leftLinear = 0; curves[2].points[15].rightLinear = 0;
// Y Size
curves[3].start = 1;
curves[3].end = 64;
curves[3].numPoints = 16;
curves[3].selectedIndex = 0;
curves[3].editLeftTangent = false;
curves[3].editRightTangent = false;
curves[3].points[0].position = (Vector2) {0.000000, 0.492063};curves[3].points[0].tangents = (Vector2) {0,0};curves[3].points[0].leftLinear = 0;curves[3].points[0].rightLinear = 0;
curves[3].points[1].position = (Vector2) {0.130000, 0.492063};curves[3].points[1].tangents = (Vector2) {0,0};curves[3].points[1].leftLinear = 0;curves[3].points[1].rightLinear = 0;
curves[3].points[2].position = (Vector2) {0.140000, 0.238095};curves[3].points[2].tangents = (Vector2) {0,0};curves[3].points[2].leftLinear = 0;curves[3].points[2].rightLinear = 0;
curves[3].points[3].position = (Vector2) {0.150000, 0.492063};curves[3].points[3].tangents = (Vector2) {0,0};curves[3].points[3].leftLinear = 0;curves[3].points[3].rightLinear = 0;
curves[3].points[4].position = (Vector2) {0.440000, 0.492063};curves[3].points[4].tangents = (Vector2) {0,0};curves[3].points[4].leftLinear = 0;curves[3].points[4].rightLinear = 0;
curves[3].points[5].position = (Vector2) {0.450000, 0.301587};curves[3].points[5].tangents = (Vector2) {0,0};curves[3].points[5].leftLinear = 0;curves[3].points[5].rightLinear = 0;
curves[3].points[6].position = (Vector2) {0.460000, 0.492063};curves[3].points[6].tangents = (Vector2) {0,0};curves[3].points[6].leftLinear = 0;curves[3].points[6].rightLinear = 0;
curves[3].points[7].position = (Vector2) {0.660000, 0.492063};curves[3].points[7].tangents = (Vector2) {0,0};curves[3].points[7].leftLinear = 0;curves[3].points[7].rightLinear = 0;
curves[3].points[8].position = (Vector2) {0.670000, 0.365079};curves[3].points[8].tangents = (Vector2) {0,0};curves[3].points[8].leftLinear = 0;curves[3].points[8].rightLinear = 0;
curves[3].points[9].position = (Vector2) {0.680000, 0.492063};curves[3].points[9].tangents = (Vector2) {0,0};curves[3].points[9].leftLinear = 0;curves[3].points[9].rightLinear = 0;
curves[3].points[10].position = (Vector2) {0.820000, 0.492063};curves[3].points[10].tangents = (Vector2) {0,0};curves[3].points[10].leftLinear = 0;curves[3].points[10].rightLinear = 0;
curves[3].points[11].position = (Vector2) {0.830000, 0.365079};curves[3].points[11].tangents = (Vector2) {0,0};curves[3].points[11].leftLinear = 0;curves[3].points[11].rightLinear = 0;
curves[3].points[12].position = (Vector2) {0.840000, 0.492063};curves[3].points[12].tangents = (Vector2) {0,0};curves[3].points[12].leftLinear = 0;curves[3].points[12].rightLinear = 0;
curves[3].points[13].position = (Vector2) {0.930000, 0.492063};curves[3].points[13].tangents = (Vector2) {0,0};curves[3].points[13].leftLinear = 0;curves[3].points[13].rightLinear = 0;
curves[3].points[14].position = (Vector2) {0.940000, 0.365079};curves[3].points[14].tangents = (Vector2) {0,0};curves[3].points[14].leftLinear = 0;curves[3].points[14].rightLinear = 0;
curves[3].points[15].position = (Vector2) {0.950000, 0.507937};curves[3].points[15].tangents = (Vector2) {0,0};curves[3].points[15].leftLinear = 0;curves[3].points[15].rightLinear = 0;
// Rotation
curves[4].start = -360;
curves[4].end = 360;
curves[4].numPoints = 9;
curves[4].selectedIndex = 0;
curves[4].editLeftTangent = false;
curves[4].editRightTangent = false;
curves[4].points[0].position = (Vector2) {0.140000, 0.500000};curves[4].points[0].tangents = (Vector2) {0,0};curves[4].points[0].leftLinear = 0;curves[4].points[0].rightLinear = 0;
curves[4].points[1].position = (Vector2) {0.450000, 0.500000};curves[4].points[1].tangents = (Vector2) {0,0};curves[4].points[1].leftLinear = 0;curves[4].points[1].rightLinear = 0;
curves[4].points[2].position = (Vector2) {0.670000, 0.500000};curves[4].points[2].tangents = (Vector2) {0,0};curves[4].points[2].leftLinear = 0;curves[4].points[2].rightLinear = 0;
curves[4].points[3].position = (Vector2) {0.830000, 0.500000};curves[4].points[3].tangents = (Vector2) {0,0};curves[4].points[3].leftLinear = 0;curves[4].points[3].rightLinear = 0;
curves[4].points[4].position = (Vector2) {0.940000, 0.500000};curves[4].points[4].tangents = (Vector2) {0,0};curves[4].points[4].leftLinear = 0;curves[4].points[4].rightLinear = 0;
curves[4].points[5].position = (Vector2) {1.000000, 0.500000};curves[4].points[5].tangents = (Vector2) {0,0};curves[4].points[5].leftLinear = 0;curves[4].points[5].rightLinear = 0;
curves[4].points[6].position = (Vector2) {0.000000, 0.472222};curves[4].points[6].tangents = (Vector2) {0,0};curves[4].points[6].leftLinear = 0;curves[4].points[6].rightLinear = 0;
curves[4].points[7].position = (Vector2) {0.302752, 0.527778};curves[4].points[7].tangents = (Vector2) {0,0};curves[4].points[7].leftLinear = 0;curves[4].points[7].rightLinear = 0;
curves[4].points[8].position = (Vector2) {0.577982, 0.472222};curves[4].points[8].tangents = (Vector2) {0,0};curves[4].points[8].leftLinear = 0;curves[4].points[8].rightLinear = 0;
}

View File

@ -0,0 +1,543 @@
/*******************************************************************************************
*
* CurveEdit v1.0 - A cubic Hermite editor for making animation curves
*
* MODULE USAGE:
* #define GUI_CURVE_EDITOR_IMPLEMENTATION
* #include "gui_curve_edit.h"
*
* INIT: GuiCurveEditState state = InitCurveEdit();
* EVALUATE: float y = EvalGuiCurve(&state, t); // 0 <= t <= 1
* DRAW: BeginScissorMode(bounds.x,bounds.y,bounds.width,bounds.height);
* GuiCurveEdit(&state, bounds, pointSize);
* EndScissorMode();
*
* NOTE: See 'Module Structures Declaration' section for more informations.
*
* NOTE: This module uses functions of the stdlib:
* - qsort
*
* NOTE: Built-in interactions:
* - Left click to move/add point or move tangents
* - While moving a tangent, hold (left/right) SHIFT to disable tangent symetry
* - Right click to remove a point
*
*
* LICENSE: zlib/libpng
*
* Copyright (c) 2023 Pierre Jaffuer (@smallcluster)
*
* This software is provided "as-is", without any express or implied warranty. In no event
* will the authors be held liable for any damages arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose, including commercial
* applications, and to alter it and redistribute it freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not claim that you
* wrote the original software. If you use this software in a product, an acknowledgment
* in the product documentation would be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be misrepresented
* as being the original software.
*
* 3. This notice may not be removed or altered from any source distribution.
*
**********************************************************************************************/
#include "raylib.h"
#ifndef GUI_CURVE_EDITOR_H
#define GUI_CURVE_EDITOR_H
#ifndef GUI_CURVE_EDITOR_MAX_POINTS
#define GUI_CURVE_EDITOR_MAX_POINTS 30
#endif
//----------------------------------------------------------------------------------
// Module Structures Declaration
//----------------------------------------------------------------------------------
typedef struct {
Vector2 position; // In normalized space [0.0f, 1.0f]
Vector2 tangents; // The derivatives (left/right) of the 1D curve
// Let the curve editor calculate tangents to linearize part of the curve
bool leftLinear;
bool rightLinear;
} GuiCurveEditorPoint;
typedef struct {
float start; // Value at y = 0
float end; // Value at y = 1
// Always valid (unless you manualy change state's point array). Make sure to set it to -1 before init
int selectedIndex;
// Unsorted array with at least one point (constant curve)
GuiCurveEditorPoint points[GUI_CURVE_EDITOR_MAX_POINTS];
int numPoints;
// Private variables
bool editLeftTangent;
bool editRightTangent;
Vector2 mouseOffset;
} GuiCurveEditorState;
#ifdef __cplusplus
extern "C" { // Prevents name mangling of functions
#endif
//----------------------------------------------------------------------------------
// Module Functions Declaration
//----------------------------------------------------------------------------------
GuiCurveEditorState InitGuiCurveEditor(); // Initialize curve editor state
void GuiCurveEditor(GuiCurveEditorState *state, Rectangle bounds); // Draw and update curve control
// 1D Interpolation
// Returns the y value (in [start, end]) of the curve at x = t
// t must be normalized [0.f, 1.f]
float GuiCurveEval(GuiCurveEditorState *state, float t);
#ifdef __cplusplus
}
#endif
#endif // GUI_CURVE_EDITOR_H
/***********************************************************************************
*
* GUI_CURVE_EDITOR IMPLEMENTATION
*
************************************************************************************/
#if defined(GUI_CURVE_EDITOR_IMPLEMENTATION)
#include "../../src/raygui.h" // Change this to fit your project
#include "stdlib.h" // Required for qsort
//----------------------------------------------------------------------------------
// Module Functions Definition
//----------------------------------------------------------------------------------
GuiCurveEditorState InitGuiCurveEditor()
{
GuiCurveEditorState state = { 0 };
state.start = 0;
state.end = 1;
state.selectedIndex = 0;
state.editLeftTangent = false;
state.editRightTangent = false;
state.mouseOffset = (Vector2){ 0.0f, 0.0f };
// At least one point (AVG by default)
state.numPoints = 1;
state.points[0].position = (Vector2){ 0.5f, 0.5f };
state.points[0].tangents = (Vector2){ 0.0f, 0.0f };
state.points[0].leftLinear = false;
state.points[0].rightLinear = false;
return state;
}
static int CompareGuiCurveEditPointPtr(const void *a, const void *b)
{
float fa = (*(GuiCurveEditorPoint**)a)->position.x;
float fb = (*(GuiCurveEditorPoint**)b)->position.x;
return ((fa > fb) - (fa < fb));
}
float GuiCurveEval(GuiCurveEditorState *state, float t)
{
// Sort points
GuiCurveEditorPoint* sortedPoints[GUI_CURVE_EDITOR_MAX_POINTS];
for (int i=0; i < state->numPoints; i++) sortedPoints[i] = &state->points[i];
qsort(sortedPoints, state->numPoints, sizeof(GuiCurveEditorPoint*), CompareGuiCurveEditPointPtr);
if (state->numPoints == 0) return state->start;
// Constants part on edges
if (t <= sortedPoints[0]->position.x) return state->start + (state->end-state->start)*sortedPoints[0]->position.y;
if (t >= sortedPoints[state->numPoints-1]->position.x) return state->start + (state->end-state->start)*sortedPoints[state->numPoints-1]->position.y;
// Find curve portion
for (int i=0; i < state->numPoints-1; i++)
{
const GuiCurveEditorPoint *p1 = sortedPoints[i];
const GuiCurveEditorPoint *p2 = sortedPoints[i+1];
// Skip this range
if (!((t >= p1->position.x) && (t < p2->position.x)) || (p1->position.x == p2->position.x)) continue;
float scale = (p2->position.x-p1->position.x);
float T = (t-p1->position.x)/scale;
float startTangent = scale*p1->tangents.y;
float endTangent = scale*p2->tangents.x;
float T2 = T*T;
float T3 = T*T*T;
return (state->start + (state->end-state->start)*((2*T3 - 3*T2 + 1)*p1->position.y + (T3 - 2*T2 + T)*startTangent + (3*T2 - 2*T3)*p2->position.y + (T3 - T2)*endTangent));
}
return state->start;
}
void GuiCurveEditor(GuiCurveEditorState *state, Rectangle bounds)
{
// CONST
//----------------------------------------------------------------------------------
const float pointSize = 10.0f;
const float fontSize = GuiGetStyle(DEFAULT, TEXT_SIZE);
const float handleLength = pointSize*2.5f;
const float handleSize = pointSize/1.5f;
const Rectangle innerBounds = (Rectangle){ bounds.x + fontSize, bounds.y + fontSize, bounds.width - 2*fontSize, bounds.height - 2*fontSize };
const Vector2 mouse = GetMousePosition();
const Vector2 mouseLocal = (Vector2){ (mouse.x - innerBounds.x)/innerBounds.width, (innerBounds.y + innerBounds.height-mouse.y)/innerBounds.height};
//----------------------------------------------------------------------------------
// UPDATE STATE
//----------------------------------------------------------------------------------
// Find first point under mouse (-1 if not found)
int hoveredPointIndex = -1;
for (int i = 0; i < state->numPoints; i++)
{
const GuiCurveEditorPoint *p = &state->points[i];
const Vector2 screenPos = (Vector2){ p->position.x*innerBounds.width + innerBounds.x, innerBounds.y + innerBounds.height-p->position.y*innerBounds.height };
const Rectangle pointRect = (Rectangle){ screenPos.x - pointSize/2.0f, screenPos.y - pointSize/2.0f, pointSize, pointSize };
if (CheckCollisionPointRec(mouse, pointRect))
{
hoveredPointIndex = i;
break;
}
}
// Unselect tangents
if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT))
{
state->editLeftTangent = false;
state->editRightTangent = false;
}
// Select a tangent if possible
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && (state->selectedIndex != -1) && CheckCollisionPointRec(mouse, bounds))
{
const GuiCurveEditorPoint* p = &state->points[state->selectedIndex];
const Vector2 screenPos = (Vector2){ p->position.x*innerBounds.width+innerBounds.x, innerBounds.y+innerBounds.height-p->position.y*innerBounds.height };
// Left control
Vector2 target = (Vector2){ (p->position.x-1)*innerBounds.width + innerBounds.x, innerBounds.y + innerBounds.height - (p->position.y-p->tangents.x)*innerBounds.height };
Vector2 dir = (Vector2){ target.x-screenPos.x, target.y-screenPos.y };
float d = sqrt(dir.x*dir.x + dir.y*dir.y);
Vector2 control = (Vector2){ screenPos.x + dir.x/d*handleLength, screenPos.y + dir.y/d*handleLength };
Rectangle controlRect = (Rectangle){ control.x - handleSize/2.0f, control.y - handleSize/2.0f, handleSize, handleSize };
// Edit left tangent
if (CheckCollisionPointRec(mouse, controlRect)) state->editLeftTangent = true;
// Right control
target = (Vector2){ (p->position.x + 1)*innerBounds.width + innerBounds.x, innerBounds.y + innerBounds.height - (p->position.y + p->tangents.y)*innerBounds.height };
dir = (Vector2){ target.x-screenPos.x, target.y-screenPos.y };
d = sqrt(dir.x*dir.x + dir.y*dir.y);
control = (Vector2){ screenPos.x + dir.x/d*handleLength, screenPos.y + dir.y/d*handleLength };
controlRect = (Rectangle){ control.x - handleSize/2.0f, control.y - handleSize/2.0f, handleSize, handleSize };
// Edit right tangent
if (CheckCollisionPointRec(mouse, controlRect)) state->editRightTangent = true;
}
// Move tangents
if (IsMouseButtonDown(MOUSE_BUTTON_LEFT) && state->editRightTangent)
{
// editRightTangent == true implies selectedIndex != -1
GuiCurveEditorPoint *p = &state->points[state->selectedIndex];
const Vector2 dir = (Vector2){ mouseLocal.x - p->position.x, mouseLocal.y - p->position.y};
// Calculate right tangent slope
p->tangents.y = (dir.x < 0.001f)? dir.y/0.001f : dir.y/dir.x;
p->rightLinear = false; // Stop right linearization update
// Tangents are symetric by default unless SHIFT is pressed
if (!(IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT)))
{
p->tangents.x = p->tangents.y;
p->leftLinear = false; // Stop left linearization update
}
}
else if (IsMouseButtonDown(MOUSE_BUTTON_LEFT) && state->editLeftTangent)
{
// editLeftTangent == true implies selectedIndex != -1
GuiCurveEditorPoint *p = &state->points[state->selectedIndex];
const Vector2 dir = (Vector2){ mouseLocal.x - p->position.x, mouseLocal.y - p->position.y };
// Calculate left tangent slope
p->tangents.x = (dir.x > -0.001f)? dir.y/(-0.001f) : dir.y/dir.x;
p->leftLinear = false; // Stop left linearization update
// Tangents are symetric by default unless SHIFT is pressed
if (!(IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT)))
{
p->tangents.y = p->tangents.x;
p->rightLinear = false; // Stop right linearization update
}
}
// Select a point
else if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && (hoveredPointIndex != -1) && CheckCollisionPointRec(mouse, bounds))
{
state->selectedIndex = hoveredPointIndex;
const GuiCurveEditorPoint *p = &state->points[state->selectedIndex];
state->mouseOffset = (Vector2){ p->position.x - mouseLocal.x, p->position.y - mouseLocal.y };
}
// Remove a point (check against bounds)
else if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT) && (hoveredPointIndex != -1) && CheckCollisionPointRec(mouse, bounds) && (state->numPoints > 1))
{
// Deselect everything
state->selectedIndex = 0; // select first point by default
state->editLeftTangent = false;
state->editRightTangent = false;
// Remove point
state->numPoints -= 1;
for (int i = hoveredPointIndex; i < state->numPoints; i++) state->points[i] = state->points[i+1];
}
// Add a point (check against innerBounds)
else if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(mouse, innerBounds) && (state->numPoints < GUI_CURVE_EDITOR_MAX_POINTS))
{
state->editLeftTangent = false;
state->editRightTangent = false;
// Create new point
GuiCurveEditorPoint p;
p.tangents = (Vector2){ 0.0f, 0.0f };
p.position = mouseLocal;
p.leftLinear = false;
p.rightLinear = false;
// Append point
state->points[state->numPoints] = p;
state->selectedIndex = state->numPoints; // select new point
state->numPoints += 1;
// Point is add on mouse pos
state->mouseOffset = (Vector2){ 0, 0 };
}
// Move selected point
else if ((state->selectedIndex != -1) && IsMouseButtonDown(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(mouse, bounds))
{
GuiCurveEditorPoint *p = &state->points[state->selectedIndex];
// use mouse offset on click to prevent point teleporting to mouse
const Vector2 newLocalPos = (Vector2){ mouseLocal.x + state->mouseOffset.x, mouseLocal.y + state->mouseOffset.y };
// Clamp to innerbounds
p->position.x = (newLocalPos.x < 0)? 0 : ((newLocalPos.x > 1)? 1 : newLocalPos.x);
p->position.y = (newLocalPos.y < 0)? 0 : ((newLocalPos.y > 1)? 1 : newLocalPos.y);
}
// Sort points
GuiCurveEditorPoint *sortedPoints[GUI_CURVE_EDITOR_MAX_POINTS] = { 0 };
for (int i = 0; i < state->numPoints; i++) sortedPoints[i] = &state->points[i];
qsort(sortedPoints, state->numPoints, sizeof(GuiCurveEditorPoint*), CompareGuiCurveEditPointPtr);
// Update linear tangents
for (int i = 0; i < state->numPoints; i++)
{
GuiCurveEditorPoint *p = sortedPoints[i];
// Left tangent
if ((i > 0) && p->leftLinear)
{
const GuiCurveEditorPoint *p2 = sortedPoints[i - 1];
Vector2 dir = (Vector2){ p2->position.x - p->position.x, p2->position.y - p->position.y };
p->tangents.x = (dir.x == 0)? 0 : dir.y/dir.x;
}
// Right tangent
if ((i < state->numPoints - 1) && p->rightLinear)
{
const GuiCurveEditorPoint *p2 = sortedPoints[i + 1];
Vector2 dir = (Vector2){ p2->position.x - p->position.x, p2->position.y - p->position.y };
p->tangents.y = (dir.x == 0)? 0 : dir.y/dir.x;
}
}
//----------------------------------------------------------------------------------
// DRAWING
//----------------------------------------------------------------------------------
DrawRectangle(bounds.x, bounds.y, bounds.width, bounds.height, GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR)));
// Draw grid
// H lines
const Color lineColor = GetColor(GuiGetStyle(DEFAULT, BORDER_COLOR_NORMAL));
DrawLine(bounds.x, innerBounds.y, bounds.x+bounds.width, innerBounds.y, lineColor); // end
DrawLine(bounds.x, innerBounds.y+innerBounds.height/2, bounds.x+bounds.width, innerBounds.y+innerBounds.height/2, lineColor); // avg
DrawLine(bounds.x, innerBounds.y+innerBounds.height, bounds.x+bounds.width, innerBounds.y+innerBounds.height, lineColor); // start
// V lines
DrawLine(innerBounds.x, bounds.y, innerBounds.x, bounds.y+bounds.height, lineColor); // 0
DrawLine(innerBounds.x + innerBounds.width/4, bounds.y, innerBounds.x + innerBounds.width/4, bounds.y + bounds.height, lineColor); // 0.25
DrawLine(innerBounds.x + innerBounds.width/2, bounds.y, innerBounds.x + innerBounds.width/2, bounds.y + bounds.height, lineColor); // 0.5
DrawLine(innerBounds.x + 3*innerBounds.width/4, bounds.y, innerBounds.x + 3*innerBounds.width/4, bounds.y + bounds.height, lineColor); // 0.75
DrawLine(innerBounds.x + innerBounds.width, bounds.y, innerBounds.x + innerBounds.width, bounds.y + bounds.height, lineColor); // 1
Font font = GuiGetFont();
// V labels
DrawTextEx(font, "0", (Vector2){ innerBounds.x, bounds.y + bounds.height-fontSize}, fontSize, GuiGetStyle(DEFAULT, TEXT_SPACING), lineColor);
DrawTextEx(font, "0.25", (Vector2){ innerBounds.x + innerBounds.width/4.0f, bounds.y + bounds.height - fontSize}, fontSize, GuiGetStyle(DEFAULT, TEXT_SPACING), lineColor);
DrawTextEx(font, "0.5", (Vector2){ innerBounds.x + innerBounds.width/2.0f, bounds.y + bounds.height - fontSize}, fontSize, GuiGetStyle(DEFAULT, TEXT_SPACING), lineColor);
DrawTextEx(font, "0.75", (Vector2){ innerBounds.x + 3.0f*innerBounds.width/4.0f, bounds.y + bounds.height-fontSize}, fontSize, GuiGetStyle(DEFAULT, TEXT_SPACING), lineColor);
DrawTextEx(font, "1", (Vector2){ innerBounds.x + innerBounds.width, bounds.y+bounds.height - fontSize}, fontSize, GuiGetStyle(DEFAULT, TEXT_SPACING), lineColor);
// H labels
DrawTextEx(font, TextFormat("%.2f", state->start), (Vector2){ innerBounds.x, innerBounds.y - fontSize+innerBounds.height }, fontSize, GuiGetStyle(DEFAULT, TEXT_SPACING), lineColor);
DrawTextEx(font, TextFormat("%.2f", state->start + (state->end-state->start)/2.f), (Vector2){ innerBounds.x, innerBounds.y - fontSize + innerBounds.height/2.0f }, fontSize, GuiGetStyle(DEFAULT, TEXT_SPACING), lineColor);
DrawTextEx(font, TextFormat("%.2f", state->end), (Vector2){ innerBounds.x, innerBounds.y }, fontSize, GuiGetStyle(DEFAULT, TEXT_SPACING), lineColor);
// Draw contours
if (CheckCollisionPointRec(mouse, bounds)) DrawRectangleLines(bounds.x, bounds.y, bounds.width, bounds.height, GetColor(GuiGetStyle(DEFAULT, BORDER_COLOR_FOCUSED)));
else DrawRectangleLines(bounds.x, bounds.y, bounds.width, bounds.height, GetColor(GuiGetStyle(DEFAULT, BORDER_COLOR_NORMAL)));
// Draw points
for (int i = 0; i < state->numPoints; i++)
{
const GuiCurveEditorPoint *p = sortedPoints[i];
const Vector2 screenPos = (Vector2){ p->position.x*innerBounds.width + innerBounds.x, innerBounds.y + innerBounds.height - p->position.y*innerBounds.height };
const Rectangle pointRect = (Rectangle){ screenPos.x - pointSize/2.0f, screenPos.y - pointSize/2.0f, pointSize, pointSize };
Color pointColor = { 0 };
Color pointBorderColor = { 0 };
// Draw point
if (&state->points[state->selectedIndex] == p)
{
// Draw left handle
if (i > 0)
{
const Vector2 target = (Vector2){ (p->position.x - 1)*innerBounds.width + innerBounds.x, innerBounds.y + innerBounds.height - (p->position.y - p->tangents.x)*innerBounds.height };
const Vector2 dir = (Vector2){ target.x - screenPos.x, target.y - screenPos.y };
const float d = sqrt(dir.x*dir.x + dir.y*dir.y);
const Vector2 control = (Vector2){ screenPos.x + dir.x/d*handleLength, screenPos.y + dir.y/d*handleLength };
const Rectangle controlRect = (Rectangle){ control.x - handleSize/2.0f, control.y - handleSize/2.0f, handleSize, handleSize };
Color controlColor = { 0 };
if (state->editLeftTangent)
{
controlColor = GetColor(GuiGetStyle(DEFAULT, BASE_COLOR_PRESSED));
}
else if (CheckCollisionPointRec(mouse, controlRect))
{
controlColor = GetColor(GuiGetStyle(DEFAULT, BASE_COLOR_FOCUSED));
}
else
{
controlColor = GetColor(GuiGetStyle(BUTTON, BASE_COLOR_NORMAL));
}
DrawLine(screenPos.x,screenPos.y, control.x, control.y, controlColor);
DrawRectangle(controlRect.x, controlRect.y, controlRect.width, controlRect.height, controlColor);
DrawRectangleLines(controlRect.x, controlRect.y, controlRect.width, controlRect.height, controlColor);
}
// Draw right handle
if (i < state->numPoints - 1)
{
const Vector2 target = (Vector2){ (p->position.x + 1)*innerBounds.width + innerBounds.x, innerBounds.y + innerBounds.height - (p->position.y + p->tangents.y)*innerBounds.height };
const Vector2 dir = (Vector2){ target.x - screenPos.x, target.y - screenPos.y };
const float d = sqrt(dir.x*dir.x + dir.y*dir.y);
const Vector2 control = (Vector2){ screenPos.x + dir.x/d*handleLength, screenPos.y + dir.y/d*handleLength };
const Rectangle controlRect = (Rectangle){ control.x - handleSize/2.0f, control.y - handleSize/2.0f, handleSize, handleSize };
Color controlColor = { 0 };
if (state->editRightTangent)
{
controlColor = GetColor(GuiGetStyle(DEFAULT, BASE_COLOR_PRESSED));
}
else if (CheckCollisionPointRec(mouse, controlRect))
{
controlColor = GetColor(GuiGetStyle(DEFAULT, BASE_COLOR_FOCUSED));
}
else
{
controlColor = GetColor(GuiGetStyle(BUTTON, BASE_COLOR_NORMAL));
}
DrawLine(screenPos.x,screenPos.y, control.x, control.y, controlColor);
DrawRectangle(controlRect.x, controlRect.y, controlRect.width, controlRect.height, controlColor);
DrawRectangleLines(controlRect.x, controlRect.y, controlRect.width, controlRect.height, controlColor);
}
pointColor = GetColor(GuiGetStyle(DEFAULT, BASE_COLOR_PRESSED));
pointBorderColor = GetColor(GuiGetStyle(DEFAULT, BORDER_COLOR_NORMAL));
}
else if (&state->points[hoveredPointIndex] == p)
{
pointColor = GetColor(GuiGetStyle(DEFAULT, BASE_COLOR_FOCUSED));
pointBorderColor = GetColor(GuiGetStyle(DEFAULT, BORDER_COLOR_NORMAL));
}
else
{
pointColor = GetColor(GuiGetStyle(BUTTON, BASE_COLOR_NORMAL));
pointBorderColor = GetColor(GuiGetStyle(BUTTON, BORDER_COLOR_NORMAL));
}
DrawRectangle(pointRect.x, pointRect.y, pointRect.width, pointRect.height, pointColor);
DrawRectangleLines(pointRect.x, pointRect.y, pointRect.width, pointRect.height, pointBorderColor);
}
// Draw curve
Color curveColor = GetColor(GuiGetStyle(LABEL, TEXT_COLOR_FOCUSED));
if (state->numPoints == 1)
{
const GuiCurveEditorPoint *p = sortedPoints[0];
const Vector2 screenPos = (Vector2){ p->position.x*innerBounds.width + innerBounds.x, innerBounds.y + innerBounds.height - p->position.y*innerBounds.height };
DrawLine(innerBounds.x, screenPos.y, innerBounds.x+innerBounds.width, screenPos.y, curveColor);
}
else
{
for (int i = 0; i < state->numPoints - 1; i++)
{
const GuiCurveEditorPoint *p1 = sortedPoints[i];
const GuiCurveEditorPoint *p2 = sortedPoints[i + 1];
const Vector2 screenPos1 = (Vector2){ p1->position.x*innerBounds.width + innerBounds.x, innerBounds.y + innerBounds.height - p1->position.y*innerBounds.height };
const Vector2 screenPos2 = (Vector2){ p2->position.x*innerBounds.width + innerBounds.x, innerBounds.y + innerBounds.height - p2->position.y*innerBounds.height };
// Constant on edge
if ((screenPos1.x > innerBounds.x) && (i == 0))
{
DrawLine(innerBounds.x, screenPos1.y, screenPos1.x, screenPos1.y, curveColor);
}
if ((screenPos2.x < innerBounds.x + innerBounds.width) && (i == (state->numPoints - 2)))
{
DrawLine(screenPos2.x, screenPos2.y, innerBounds.x+innerBounds.width, screenPos2.y, curveColor);
}
// Draw cubic Hermite curve
const float scale = (p2->position.x - p1->position.x)/3.0f;
const Vector2 offset1 = (Vector2){ scale, scale*p1->tangents.y };
// negative endTangent => top part => need to invert value to calculate offset
const Vector2 offset2 = (Vector2){ -scale, -scale*p2->tangents.x };
const Vector2 c1 = (Vector2){ p1->position.x + offset1.x, p1->position.y + offset1.y };
const Vector2 c2 = (Vector2){ p2->position.x + offset2.x, p2->position.y + offset2.y };
const Vector2 screenC1 = (Vector2){ c1.x*innerBounds.width + innerBounds.x, innerBounds.y + innerBounds.height - c1.y*innerBounds.height };
const Vector2 screenC2 = (Vector2){ c2.x*innerBounds.width + innerBounds.x, innerBounds.y + innerBounds.height - c2.y*innerBounds.height };
DrawSplineSegmentBezierCubic(screenPos1, screenC1, screenC2, screenPos2, 1, curveColor);
}
}
}
#endif // GUI_CURVE_EDITOR_IMPLEMENTATION

View File

@ -0,0 +1,339 @@
/*******************************************************************************************
*
* raygui - controls test suite
*
* TEST CONTROLS:
* - GuiDropdownBox()
* - GuiCheckBox()
* - GuiSpinner()
* - GuiValueBox()
* - GuiTextBox()
* - GuiButton()
* - GuiComboBox()
* - GuiListView()
* - GuiToggleGroup()
* - GuiColorPicker()
* - GuiSlider()
* - GuiSliderBar()
* - GuiProgressBar()
* - GuiColorBarAlpha()
* - GuiScrollPanel()
*
*
* DEPENDENCIES:
* raylib 4.5 - Windowing/input management and drawing
* raygui 3.5 - Immediate-mode GUI controls with custom styling and icons
*
* COMPILATION (Windows - MinGW):
* gcc -o $(NAME_PART).exe $(FILE_NAME) -I../../src -lraylib -lopengl32 -lgdi32 -std=c99
*
* LICENSE: zlib/libpng
*
* Copyright (c) 2016-2024 Ramon Santamaria (@raysan5)
*
**********************************************************************************************/
#include "raylib.h"
//#define RAYGUI_DEBUG_RECS_BOUNDS
//#define RAYGUI_DEBUG_TEXT_BOUNDS
#define RAYGUI_IMPLEMENTATION
//#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
#include "../../src/raygui.h"
// raygui embedded styles
#include "../styles/style_cyber.h" // raygui style: cyber
#include "../styles/style_jungle.h" // raygui style: jungle
#include "../styles/style_lavanda.h" // raygui style: lavanda
#include "../styles/style_dark.h" // raygui style: dark
#include "../styles/style_bluish.h" // raygui style: bluish
#include "../styles/style_terminal.h" // raygui style: terminal
#include "../styles/style_candy.h" // raygui style: candy
#include "../styles/style_cherry.h" // raygui style: cherry
#include "../styles/style_ashes.h" // raygui style: ashes
#include "../styles/style_enefete.h" // raygui style: enefete
#include "../styles/style_sunny.h" // raygui style: sunny
#include "../styles/style_amber.h" // raygui style: amber
#include "../styles/style_genesis.h" // raygui style: genesis
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main()
{
// Initialization
//---------------------------------------------------------------------------------------
const int screenWidth = 960;
const int screenHeight = 560;
InitWindow(screenWidth, screenHeight, "raygui - controls test suite");
SetExitKey(0);
// GUI controls initialization
//----------------------------------------------------------------------------------
int dropdownBox000Active = 0;
bool dropDown000EditMode = false;
int dropdownBox001Active = 0;
bool dropDown001EditMode = false;
int spinner001Value = 0;
bool spinnerEditMode = false;
int valueBox002Value = 0;
bool valueBoxEditMode = false;
char textBoxText[64] = "Text box";
bool textBoxEditMode = false;
char textBoxMultiText[1024] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n\nThisisastringlongerthanexpectedwithoutspacestotestcharbreaksforthosecases,checkingifworkingasexpected.\n\nExcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
bool textBoxMultiEditMode = false;
int listViewScrollIndex = 0;
int listViewActive = -1;
int listViewExScrollIndex = 0;
int listViewExActive = 2;
int listViewExFocus = -1;
char *listViewExList[8] = { "This", "is", "a", "list view", "with", "disable", "elements", "amazing!" };
Color colorPickerValue = RED;
float sliderValue = 50.0f;
float sliderBarValue = 60;
float progressValue = 0.1f;
bool forceSquaredChecked = false;
float alphaValue = 0.5f;
//int comboBoxActive = 1;
int visualStyleActive = 0;
int prevVisualStyleActive = 0;
int toggleGroupActive = 0;
int toggleSliderActive = 0;
Vector2 viewScroll = { 0, 0 };
//----------------------------------------------------------------------------------
// Custom GUI font loading
//Font font = LoadFontEx("fonts/rainyhearts16.ttf", 12, 0, 0);
//GuiSetFont(font);
bool exitWindow = false;
bool showMessageBox = false;
char textInput[256] = { 0 };
char textInputFileName[256] = { 0 };
bool showTextInputBox = false;
float alpha = 1.0f;
// DEBUG: Testing how those two properties affect all controls!
//GuiSetStyle(DEFAULT, TEXT_PADDING, 0);
//GuiSetStyle(DEFAULT, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER);
SetTargetFPS(60);
//--------------------------------------------------------------------------------------
// Main game loop
while (!exitWindow) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
exitWindow = WindowShouldClose();
if (IsKeyPressed(KEY_ESCAPE)) showMessageBox = !showMessageBox;
if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_S)) showTextInputBox = true;
if (IsFileDropped())
{
FilePathList droppedFiles = LoadDroppedFiles();
if ((droppedFiles.count > 0) && IsFileExtension(droppedFiles.paths[0], ".rgs")) GuiLoadStyle(droppedFiles.paths[0]);
UnloadDroppedFiles(droppedFiles); // Clear internal buffers
}
//alpha -= 0.002f;
if (alpha < 0.0f) alpha = 0.0f;
if (IsKeyPressed(KEY_SPACE)) alpha = 1.0f;
GuiSetAlpha(alpha);
//progressValue += 0.002f;
if (IsKeyPressed(KEY_LEFT)) progressValue -= 0.1f;
else if (IsKeyPressed(KEY_RIGHT)) progressValue += 0.1f;
if (progressValue > 1.0f) progressValue = 1.0f;
else if (progressValue < 0.0f) progressValue = 0.0f;
if (visualStyleActive != prevVisualStyleActive)
{
GuiLoadStyleDefault();
switch (visualStyleActive)
{
case 0: break; // Default style
case 1: GuiLoadStyleJungle(); break;
case 2: GuiLoadStyleLavanda(); break;
case 3: GuiLoadStyleDark(); break;
case 4: GuiLoadStyleBluish(); break;
case 5: GuiLoadStyleCyber(); break;
case 6: GuiLoadStyleTerminal(); break;
case 7: GuiLoadStyleCandy(); break;
case 8: GuiLoadStyleCherry(); break;
case 9: GuiLoadStyleAshes(); break;
case 10: GuiLoadStyleEnefete(); break;
case 11: GuiLoadStyleSunny(); break;
case 12: GuiLoadStyleAmber(); break;
case 13: GuiLoadStyleGenesis(); break;
default: break;
}
GuiSetStyle(LABEL, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT);
prevVisualStyleActive = visualStyleActive;
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR)));
// raygui: controls drawing
//----------------------------------------------------------------------------------
// Check all possible events that require GuiLock
if (dropDown000EditMode || dropDown001EditMode) GuiLock();
if (showTextInputBox) GuiLock();
// First GUI column
//GuiSetStyle(CHECKBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT);
GuiCheckBox((Rectangle){ 25, 108, 15, 15 }, "FORCE CHECK!", &forceSquaredChecked);
GuiSetStyle(TEXTBOX, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER);
//GuiSetStyle(VALUEBOX, TEXT_ALIGNMENT, 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;
GuiSetStyle(TEXTBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT);
if (GuiTextBox((Rectangle){ 25, 215, 125, 30 }, textBoxText, 64, textBoxEditMode)) textBoxEditMode = !textBoxEditMode;
GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER);
if (GuiButton((Rectangle){ 25, 255, 125, 30 }, GuiIconText(ICON_FILE_SAVE, "Save File"))) showTextInputBox = true;
GuiGroupBox((Rectangle){ 25, 310, 125, 150 }, "STATES");
//GuiLock();
GuiSetState(STATE_NORMAL); if (GuiButton((Rectangle){ 30, 320, 115, 30 }, "NORMAL")) { }
GuiSetState(STATE_FOCUSED); if (GuiButton((Rectangle){ 30, 355, 115, 30 }, "FOCUSED")) { }
GuiSetState(STATE_PRESSED); if (GuiButton((Rectangle){ 30, 390, 115, 30 }, "#15#PRESSED")) { }
GuiSetState(STATE_DISABLED); if (GuiButton((Rectangle){ 30, 425, 115, 30 }, "DISABLED")) { }
GuiSetState(STATE_NORMAL);
//GuiUnlock();
GuiComboBox((Rectangle){ 25, 480, 125, 30 },
"default;Jungle;Lavanda;Dark;Bluish;Cyber;Terminal;Candy;Cherry;Ashes;Enefete;Sunny;Amber;Genesis", &visualStyleActive);
// NOTE: GuiDropdownBox must draw after any other control that can be covered on unfolding
if (dropDown000EditMode || dropDown001EditMode) GuiUnlock();
if (showTextInputBox) GuiLock(); // Stay locked
GuiSetStyle(DROPDOWNBOX, TEXT_PADDING, 4);
GuiSetStyle(DROPDOWNBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT);
if (GuiDropdownBox((Rectangle){ 25, 65, 125, 30 }, "#01#ONE;#02#TWO;#03#THREE;#04#FOUR", &dropdownBox001Active, dropDown001EditMode)) dropDown001EditMode = !dropDown001EditMode;
GuiSetStyle(DROPDOWNBOX, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER);
GuiSetStyle(DROPDOWNBOX, TEXT_PADDING, 0);
if (GuiDropdownBox((Rectangle){ 25, 25, 125, 30 }, "ONE;TWO;THREE", &dropdownBox000Active, dropDown000EditMode)) dropDown000EditMode = !dropDown000EditMode;
// Second GUI column
//GuiSetStyle(LISTVIEW, LIST_ITEMS_BORDER_NORMAL, 1);
GuiListView((Rectangle){ 165, 25, 140, 124 }, "Charmander;Bulbasaur;#18#Squirtel;Pikachu;Eevee;Pidgey", &listViewScrollIndex, &listViewActive);
GuiListViewEx((Rectangle){ 165, 162, 140, 184 }, listViewExList, 8, &listViewExScrollIndex, &listViewExActive, &listViewExFocus);
GuiSetStyle(LISTVIEW, LIST_ITEMS_BORDER_NORMAL, 0);
//GuiToggle((Rectangle){ 165, 400, 140, 25 }, "#1#ONE", &toggleGroupActive);
GuiToggleGroup((Rectangle){ 165, 360, 140, 24 }, "#1#ONE\n#3#TWO\n#8#THREE\n#23#", &toggleGroupActive);
//GuiDisable();
GuiSetStyle(SLIDER, SLIDER_PADDING, 2);
GuiToggleSlider((Rectangle){ 165, 480, 140, 30 }, "ON;OFF", &toggleSliderActive);
GuiSetStyle(SLIDER, SLIDER_PADDING, 0);
// Third GUI column
GuiPanel((Rectangle){ 320, 25, 225, 140 }, "Panel Info");
GuiColorPicker((Rectangle){ 320, 185, 196, 192 }, NULL, &colorPickerValue);
//GuiDisable();
GuiSlider((Rectangle){ 355, 400, 165, 20 }, "TEST", TextFormat("%2.2f", sliderValue), &sliderValue, -50, 100);
GuiSliderBar((Rectangle){ 320, 430, 200, 20 }, NULL, TextFormat("%i", (int)sliderBarValue), &sliderBarValue, 0, 100);
GuiProgressBar((Rectangle){ 320, 460, 200, 20 }, NULL, TextFormat("%i%%", (int)(progressValue*100)), &progressValue, 0.0f, 1.0f);
GuiEnable();
// NOTE: View rectangle could be used to perform some scissor test
Rectangle view = { 0 };
GuiScrollPanel((Rectangle){ 560, 25, 102, 354 }, NULL, (Rectangle){ 560, 25, 300, 1200 }, &viewScroll, &view);
Vector2 mouseCell = { 0 };
GuiGrid((Rectangle) { 560, 25 + 180 + 195, 100, 120 }, NULL, 20, 3, &mouseCell);
GuiColorBarAlpha((Rectangle){ 320, 490, 200, 30 }, NULL, &alphaValue);
GuiSetStyle(DEFAULT, TEXT_ALIGNMENT_VERTICAL, TEXT_ALIGN_TOP); // WARNING: Word-wrap does not work as expected in case of no-top alignment
GuiSetStyle(DEFAULT, TEXT_WRAP_MODE, TEXT_WRAP_WORD); // WARNING: If wrap mode enabled, text editing is not supported
if (GuiTextBox((Rectangle){ 678, 25, 258, 492 }, textBoxMultiText, 1024, textBoxMultiEditMode)) textBoxMultiEditMode = !textBoxMultiEditMode;
GuiSetStyle(DEFAULT, TEXT_WRAP_MODE, TEXT_WRAP_NONE);
GuiSetStyle(DEFAULT, TEXT_ALIGNMENT_VERTICAL, TEXT_ALIGN_MIDDLE);
GuiSetStyle(DEFAULT, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT);
GuiStatusBar((Rectangle){ 0, (float)GetScreenHeight() - 20, (float)GetScreenWidth(), 20 }, "This is a status bar");
GuiSetStyle(DEFAULT, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER);
//GuiSetStyle(STATUSBAR, TEXT_INDENTATION, 20);
if (showMessageBox)
{
DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(RAYWHITE, 0.8f));
int result = GuiMessageBox((Rectangle){ (float)GetScreenWidth()/2 - 125, (float)GetScreenHeight()/2 - 50, 250, 100 }, GuiIconText(ICON_EXIT, "Close Window"), "Do you really want to exit?", "Yes;No");
if ((result == 0) || (result == 2)) showMessageBox = false;
else if (result == 1) exitWindow = true;
}
if (showTextInputBox)
{
GuiUnlock();
DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(RAYWHITE, 0.8f));
int result = GuiTextInputBox((Rectangle){ (float)GetScreenWidth()/2 - 120, (float)GetScreenHeight()/2 - 60, 240, 140 }, GuiIconText(ICON_FILE_SAVE, "Save file as..."), "Introduce output file name:", "Ok;Cancel", textInput, 255, NULL);
if (result == 1)
{
// TODO: Validate textInput value and save
TextCopy(textInputFileName, textInput);
}
if ((result == 0) || (result == 1) || (result == 2))
{
showTextInputBox = false;
TextCopy(textInput, "\0");
}
}
//----------------------------------------------------------------------------------
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -0,0 +1,71 @@
/*******************************************************************************************
*
* raygui - controls test suite
*
* COMPILATION (Windows - MinGW):
* gcc -o $(NAME_PART).exe $(FILE_NAME) -I../../src -lraylib -lopengl32 -lgdi32 -std=c99
*
* LICENSE: zlib/libpng
*
* Copyright (c) 2016-2024 Ramon Santamaria (@raysan5)
*
**********************************************************************************************/
#include "raylib.h"
#define RAYGUI_IMPLEMENTATION
#include "../../src/raygui.h"
#include <stdio.h>
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main()
{
// Initialization
//---------------------------------------------------------------------------------------
const int screenWidth = 800;
const int screenHeight = 450;
InitWindow(screenWidth, screenHeight, "raygui - controls test suite");
float valueBoxValue = 0.0f;
bool valueBoxEditMode = false;
char valueBoxTextValue[32] = { 0 };
SetTargetFPS(60);
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR)));
if (GuiValueBoxFloat((Rectangle){ 25, 175, 125, 30 }, NULL, valueBoxTextValue, &valueBoxValue, valueBoxEditMode))
{
valueBoxEditMode = !valueBoxEditMode;
printf("Value: %2.2f\n", valueBoxValue);
}
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 KiB

View File

@ -0,0 +1,112 @@
/*******************************************************************************************
*
* 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-2024 Ramon Santamaria (@raysan5)
*
**********************************************************************************************/
#include "raylib.h"
#define RAYGUI_IMPLEMENTATION
#include "../../src/raygui.h"
#undef RAYGUI_IMPLEMENTATION // Avoid including raygui implementation again
#define GUI_WINDOW_FILE_DIALOG_IMPLEMENTATION
#include "gui_window_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
GuiWindowFileDialogState fileDialogState = InitGuiWindowFileDialog(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" PATH_SEPERATOR "%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
//--------------------------------------------------------------------------------
GuiWindowFileDialog(&fileDialogState);
//--------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
UnloadTexture(texture); // Unload texture
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}

View File

@ -0,0 +1,624 @@
/*******************************************************************************************
*
* Window File Dialog v1.2 - Modal file dialog to open/save files
*
* MODULE USAGE:
* #define GUI_WINDOW_FILE_DIALOG_IMPLEMENTATION
* #include "gui_window_file_dialog.h"
*
* INIT: GuiWindowFileDialogState state = GuiInitWindowFileDialog();
* DRAW: GuiWindowFileDialog(&state);
*
* NOTE: This module depends on some raylib file system functions:
* - LoadDirectoryFiles()
* - UnloadDirectoryFiles()
* - GetWorkingDirectory()
* - DirectoryExists()
* - FileExists()
*
* LICENSE: zlib/libpng
*
* Copyright (c) 2019-2024 Ramon Santamaria (@raysan5)
*
* This software is provided "as-is", without any express or implied warranty. In no event
* will the authors be held liable for any damages arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose, including commercial
* applications, and to alter it and redistribute it freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not claim that you
* wrote the original software. If you use this software in a product, an acknowledgment
* in the product documentation would be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be misrepresented
* as being the original software.
*
* 3. This notice may not be removed or altered from any source distribution.
*
**********************************************************************************************/
#include "raylib.h"
#ifndef GUI_WINDOW_FILE_DIALOG_H
#define GUI_WINDOW_FILE_DIALOG_H
// Gui file dialog context data
typedef struct {
// Window management variables
bool windowActive;
Rectangle windowBounds;
Vector2 panOffset;
bool dragMode;
bool supportDrag;
// UI variables
bool dirPathEditMode;
char dirPathText[1024];
int filesListScrollIndex;
bool filesListEditMode;
int filesListActive;
bool fileNameEditMode;
char fileNameText[1024];
bool SelectFilePressed;
bool CancelFilePressed;
int fileTypeActive;
int itemFocused;
// Custom state variables
FilePathList dirFiles;
char filterExt[256];
char dirPathTextCopy[1024];
char fileNameTextCopy[1024];
int prevFilesListActive;
bool saveFileMode;
} GuiWindowFileDialogState;
#ifdef __cplusplus
extern "C" { // Prevents name mangling of functions
#endif
//----------------------------------------------------------------------------------
// Defines and Macros
//----------------------------------------------------------------------------------
//...
//----------------------------------------------------------------------------------
// Types and Structures Definition
//----------------------------------------------------------------------------------
// ...
//----------------------------------------------------------------------------------
// Global Variables Definition
//----------------------------------------------------------------------------------
//...
//----------------------------------------------------------------------------------
// Module Functions Declaration
//----------------------------------------------------------------------------------
GuiWindowFileDialogState InitGuiWindowFileDialog(const char *initPath);
void GuiWindowFileDialog(GuiWindowFileDialogState *state);
#ifdef __cplusplus
}
#endif
#endif // GUI_WINDOW_FILE_DIALOG_H
/***********************************************************************************
*
* GUI_WINDOW_FILE_DIALOG IMPLEMENTATION
*
************************************************************************************/
#if defined(GUI_WINDOW_FILE_DIALOG_IMPLEMENTATION)
#include "../../src/raygui.h"
#include <string.h> // Required for: strcpy()
//----------------------------------------------------------------------------------
// Defines and Macros
//----------------------------------------------------------------------------------
#define MAX_DIRECTORY_FILES 2048
#define MAX_ICON_PATH_LENGTH 512
#ifdef _WIN32
#define PATH_SEPERATOR "\\"
#else
#define PATH_SEPERATOR "/"
#endif
//----------------------------------------------------------------------------------
// Types and Structures Definition
//----------------------------------------------------------------------------------
#if defined(USE_CUSTOM_LISTVIEW_FILEINFO)
// Detailed file info type
typedef struct FileInfo {
const char *name;
int size;
int modTime;
int type;
int icon;
} FileInfo;
#else
// Filename only
typedef char *FileInfo; // Files are just a path string
#endif
//----------------------------------------------------------------------------------
// Global Variables Definition
//----------------------------------------------------------------------------------
FileInfo *dirFilesIcon = NULL; // Path string + icon (for fancy drawing)
//----------------------------------------------------------------------------------
// Internal Module Functions Definition
//----------------------------------------------------------------------------------
// Read files in new path
static void ReloadDirectoryFiles(GuiWindowFileDialogState *state);
#if defined(USE_CUSTOM_LISTVIEW_FILEINFO)
// List View control for files info with extended parameters
static int GuiListViewFiles(Rectangle bounds, FileInfo *files, int count, int *focus, int *scrollIndex, int active);
#endif
//----------------------------------------------------------------------------------
// Module Functions Definition
//----------------------------------------------------------------------------------
GuiWindowFileDialogState InitGuiWindowFileDialog(const char *initPath)
{
GuiWindowFileDialogState state = { 0 };
// Init window data
state.windowBounds = (Rectangle){ GetScreenWidth()/2 - 440/2, GetScreenHeight()/2 - 310/2, 440, 310 };
state.windowActive = false;
state.supportDrag = true;
state.dragMode = false;
state.panOffset = (Vector2){ 0, 0 };
// Init path data
state.dirPathEditMode = false;
state.filesListActive = -1;
state.prevFilesListActive = state.filesListActive;
state.filesListScrollIndex = 0;
state.fileNameEditMode = false;
state.SelectFilePressed = false;
state.CancelFilePressed = false;
state.fileTypeActive = 0;
strcpy(state.fileNameText, "\0");
// Custom variables initialization
if (initPath && DirectoryExists(initPath))
{
strcpy(state.dirPathText, initPath);
}
else if (initPath && FileExists(initPath))
{
strcpy(state.dirPathText, GetDirectoryPath(initPath));
strcpy(state.fileNameText, GetFileName(initPath));
}
else strcpy(state.dirPathText, GetWorkingDirectory());
// TODO: Why we keep a copy?
strcpy(state.dirPathTextCopy, state.dirPathText);
strcpy(state.fileNameTextCopy, state.fileNameText);
state.filterExt[0] = '\0';
//strcpy(state.filterExt, "all");
state.dirFiles.count = 0;
return state;
}
// Update and draw file dialog
void GuiWindowFileDialog(GuiWindowFileDialogState *state)
{
if (state->windowActive)
{
// Update window dragging
//----------------------------------------------------------------------------------------
if (state->supportDrag)
{
Vector2 mousePosition = GetMousePosition();
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
{
// Window can be dragged from the top window bar
if (CheckCollisionPointRec(mousePosition, (Rectangle){ state->windowBounds.x, state->windowBounds.y, (float)state->windowBounds.width, RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT }))
{
state->dragMode = true;
state->panOffset.x = mousePosition.x - state->windowBounds.x;
state->panOffset.y = mousePosition.y - state->windowBounds.y;
}
}
if (state->dragMode)
{
state->windowBounds.x = (mousePosition.x - state->panOffset.x);
state->windowBounds.y = (mousePosition.y - state->panOffset.y);
// Check screen limits to avoid moving out of screen
if (state->windowBounds.x < 0) state->windowBounds.x = 0;
else if (state->windowBounds.x > (GetScreenWidth() - state->windowBounds.width)) state->windowBounds.x = GetScreenWidth() - state->windowBounds.width;
if (state->windowBounds.y < 0) state->windowBounds.y = 0;
else if (state->windowBounds.y > (GetScreenHeight() - state->windowBounds.height)) state->windowBounds.y = GetScreenHeight() - state->windowBounds.height;
if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) state->dragMode = false;
}
}
//----------------------------------------------------------------------------------------
// Load dirFilesIcon and state->dirFiles lazily on windows open
// NOTE: They are automatically unloaded at fileDialog closing
//----------------------------------------------------------------------------------------
if (dirFilesIcon == NULL)
{
dirFilesIcon = (FileInfo *)RL_CALLOC(MAX_DIRECTORY_FILES, sizeof(FileInfo)); // Max files to read
for (int i = 0; i < MAX_DIRECTORY_FILES; i++) dirFilesIcon[i] = (char *)RL_CALLOC(MAX_ICON_PATH_LENGTH, 1); // Max file name length
}
// Load current directory files
if (state->dirFiles.paths == NULL) ReloadDirectoryFiles(state);
//----------------------------------------------------------------------------------------
// Draw window and controls
//----------------------------------------------------------------------------------------
state->windowActive = !GuiWindowBox(state->windowBounds, "#198# Select File Dialog");
// Draw previous directory button + logic
if (GuiButton((Rectangle){ state->windowBounds.x + state->windowBounds.width - 48, state->windowBounds.y + 24 + 12, 40, 24 }, "< .."))
{
// Move dir path one level up
strcpy(state->dirPathText, GetPrevDirectoryPath(state->dirPathText));
// Reload directory files (frees previous list)
ReloadDirectoryFiles(state);
state->filesListActive = -1;
memset(state->fileNameText, 0, 1024);
memset(state->fileNameTextCopy, 0, 1024);
}
// Draw current directory text box info + path editing logic
if (GuiTextBox((Rectangle){ state->windowBounds.x + 8, state->windowBounds.y + 24 + 12, state->windowBounds.width - 48 - 16, 24 }, state->dirPathText, 1024, state->dirPathEditMode))
{
if (state->dirPathEditMode)
{
// Verify if a valid path has been introduced
if (DirectoryExists(state->dirPathText))
{
// Reload directory files (frees previous list)
ReloadDirectoryFiles(state);
strcpy(state->dirPathTextCopy, state->dirPathText);
}
else strcpy(state->dirPathText, state->dirPathTextCopy);
}
state->dirPathEditMode = !state->dirPathEditMode;
}
// List view elements are aligned left
int prevTextAlignment = GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT);
int prevElementsHeight = GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT);
GuiSetStyle(LISTVIEW, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT);
GuiSetStyle(LISTVIEW, LIST_ITEMS_HEIGHT, 24);
# if defined(USE_CUSTOM_LISTVIEW_FILEINFO)
state->filesListActive = GuiListViewFiles((Rectangle){ state->position.x + 8, state->position.y + 48 + 20, state->windowBounds.width - 16, state->windowBounds.height - 60 - 16 - 68 }, fileInfo, state->dirFiles.count, &state->itemFocused, &state->filesListScrollIndex, state->filesListActive);
# else
GuiListViewEx((Rectangle){ state->windowBounds.x + 8, state->windowBounds.y + 48 + 20, state->windowBounds.width - 16, state->windowBounds.height - 60 - 16 - 68 },
(const char**)dirFilesIcon, state->dirFiles.count, &state->filesListScrollIndex, &state->filesListActive, &state->itemFocused);
# endif
GuiSetStyle(LISTVIEW, TEXT_ALIGNMENT, prevTextAlignment);
GuiSetStyle(LISTVIEW, LIST_ITEMS_HEIGHT, prevElementsHeight);
// Check if a path has been selected, if it is a directory, move to that directory (and reload paths)
if ((state->filesListActive >= 0) && (state->filesListActive != state->prevFilesListActive))
//&& (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) || IsKeyPressed(KEY_ENTER) || IsKeyPressed(KEY_DPAD_A)))
{
strcpy(state->fileNameText, GetFileName(state->dirFiles.paths[state->filesListActive]));
if (DirectoryExists(TextFormat("%s/%s", state->dirPathText, state->fileNameText)))
{
if (TextIsEqual(state->fileNameText, "..")) strcpy(state->dirPathText, GetPrevDirectoryPath(state->dirPathText));
else strcpy(state->dirPathText, TextFormat("%s/%s", (strcmp(state->dirPathText, "/") == 0)? "" : state->dirPathText, state->fileNameText));
strcpy(state->dirPathTextCopy, state->dirPathText);
// Reload directory files (frees previous list)
ReloadDirectoryFiles(state);
strcpy(state->dirPathTextCopy, state->dirPathText);
state->filesListActive = -1;
strcpy(state->fileNameText, "\0");
strcpy(state->fileNameTextCopy, state->fileNameText);
}
state->prevFilesListActive = state->filesListActive;
}
// Draw bottom controls
//--------------------------------------------------------------------------------------
GuiLabel((Rectangle){ state->windowBounds.x + 8, state->windowBounds.y + state->windowBounds.height - 68, 60, 24 }, "File name:");
if (GuiTextBox((Rectangle){ state->windowBounds.x + 72, state->windowBounds.y + state->windowBounds.height - 68, state->windowBounds.width - 184, 24 }, state->fileNameText, 128, state->fileNameEditMode))
{
if (*state->fileNameText)
{
// Verify if a valid filename has been introduced
if (FileExists(TextFormat("%s/%s", state->dirPathText, state->fileNameText)))
{
// Select filename from list view
for (unsigned int i = 0; i < state->dirFiles.count; i++)
{
if (TextIsEqual(state->fileNameText, state->dirFiles.paths[i]))
{
state->filesListActive = i;
strcpy(state->fileNameTextCopy, state->fileNameText);
break;
}
}
}
else if (!state->saveFileMode)
{
strcpy(state->fileNameText, state->fileNameTextCopy);
}
}
state->fileNameEditMode = !state->fileNameEditMode;
}
GuiLabel((Rectangle){ state->windowBounds.x + 8, state->windowBounds.y + state->windowBounds.height - 24 - 12, 68, 24 }, "File filter:");
GuiComboBox((Rectangle){ state->windowBounds.x + 72, state->windowBounds.y + state->windowBounds.height - 24 - 12, state->windowBounds.width - 184, 24 }, "All files", &state->fileTypeActive);
state->SelectFilePressed = GuiButton((Rectangle){ state->windowBounds.x + state->windowBounds.width - 96 - 8, state->windowBounds.y + state->windowBounds.height - 68, 96, 24 }, "Select");
if (GuiButton((Rectangle){ state->windowBounds.x + state->windowBounds.width - 96 - 8, state->windowBounds.y + state->windowBounds.height - 24 - 12, 96, 24 }, "Cancel")) state->windowActive = false;
//--------------------------------------------------------------------------------------
// Exit on file selected
if (state->SelectFilePressed) state->windowActive = false;
// File dialog has been closed, free all memory before exit
if (!state->windowActive)
{
// Free dirFilesIcon memory
for (int i = 0; i < MAX_DIRECTORY_FILES; i++) RL_FREE(dirFilesIcon[i]);
RL_FREE(dirFilesIcon);
dirFilesIcon = NULL;
// Unload directory file paths
UnloadDirectoryFiles(state->dirFiles);
// Reset state variables
state->dirFiles.count = 0;
state->dirFiles.paths = NULL;
}
}
}
// Compare two files from a directory
static inline int FileCompare(const char *d1, const char *d2, const char *dir)
{
const bool b1 = DirectoryExists(TextFormat("%s/%s", dir, d1));
const bool b2 = DirectoryExists(TextFormat("%s/%s", dir, d2));
if (b1 && !b2) return -1;
if (!b1 && b2) return 1;
if (!FileExists(TextFormat("%s/%s", dir, d1))) return 1;
if (!FileExists(TextFormat("%s/%s", dir, d2))) return -1;
return strcmp(d1, d2);
}
// Read files in new path
static void ReloadDirectoryFiles(GuiWindowFileDialogState *state)
{
UnloadDirectoryFiles(state->dirFiles);
state->dirFiles = LoadDirectoryFilesEx(state->dirPathText, (state->filterExt[0] == '\0')? NULL : state->filterExt, false);
state->itemFocused = 0;
// Reset dirFilesIcon memory
for (int i = 0; i < MAX_DIRECTORY_FILES; i++) memset(dirFilesIcon[i], 0, MAX_ICON_PATH_LENGTH);
// Copy paths as icon + fileNames into dirFilesIcon
for (unsigned int i = 0; i < state->dirFiles.count; i++)
{
if (IsPathFile(state->dirFiles.paths[i]))
{
// Path is a file, a file icon for convenience (for some recognized extensions)
if (IsFileExtension(state->dirFiles.paths[i], ".png;.bmp;.tga;.gif;.jpg;.jpeg;.psd;.hdr;.qoi;.dds;.pkm;.ktx;.pvr;.astc"))
{
strcpy(dirFilesIcon[i], TextFormat("#12#%s", GetFileName(state->dirFiles.paths[i])));
}
else if (IsFileExtension(state->dirFiles.paths[i], ".wav;.mp3;.ogg;.flac;.xm;.mod;.it;.wma;.aiff"))
{
strcpy(dirFilesIcon[i], TextFormat("#11#%s", GetFileName(state->dirFiles.paths[i])));
}
else if (IsFileExtension(state->dirFiles.paths[i], ".txt;.info;.md;.nfo;.xml;.json;.c;.cpp;.cs;.lua;.py;.glsl;.vs;.fs"))
{
strcpy(dirFilesIcon[i], TextFormat("#10#%s", GetFileName(state->dirFiles.paths[i])));
}
else if (IsFileExtension(state->dirFiles.paths[i], ".exe;.bin;.raw;.msi"))
{
strcpy(dirFilesIcon[i], TextFormat("#200#%s", GetFileName(state->dirFiles.paths[i])));
}
else strcpy(dirFilesIcon[i], TextFormat("#218#%s", GetFileName(state->dirFiles.paths[i])));
}
else
{
// Path is a directory, add a directory icon
strcpy(dirFilesIcon[i], TextFormat("#1#%s", GetFileName(state->dirFiles.paths[i])));
}
}
}
#if defined(USE_CUSTOM_LISTVIEW_FILEINFO)
// List View control for files info with extended parameters
static int GuiListViewFiles(Rectangle bounds, FileInfo *files, int count, int *focus, int *scrollIndex, int *active)
{
int result = 0;
GuiState state = guiState;
int itemFocused = (focus == NULL)? -1 : *focus;
int itemSelected = *active;
// Check if we need a scroll bar
bool useScrollBar = false;
if ((GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING))*count > bounds.height) useScrollBar = true;
// Define base item rectangle [0]
Rectangle itemBounds = { 0 };
itemBounds.x = bounds.x + GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING);
itemBounds.y = bounds.y + GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING) + GuiGetStyle(DEFAULT, BORDER_WIDTH);
itemBounds.width = bounds.width - 2*GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING) - GuiGetStyle(DEFAULT, BORDER_WIDTH);
itemBounds.height = GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT);
if (useScrollBar) itemBounds.width -= GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH);
// Get items on the list
int visibleItems = bounds.height/(GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING));
if (visibleItems > count) visibleItems = count;
int startIndex = (scrollIndex == NULL)? 0 : *scrollIndex;
if ((startIndex < 0) || (startIndex > (count - visibleItems))) startIndex = 0;
int endIndex = startIndex + visibleItems;
// Update control
//--------------------------------------------------------------------
if ((state != GUI_STATE_DISABLED) && !guiLocked)
{
Vector2 mousePoint = GetMousePosition();
// Check mouse inside list view
if (CheckCollisionPointRec(mousePoint, bounds))
{
state = GUI_STATE_FOCUSED;
// Check focused and selected item
for (int i = 0; i < visibleItems; i++)
{
if (CheckCollisionPointRec(mousePoint, itemBounds))
{
itemFocused = startIndex + i;
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) itemSelected = startIndex + i;
break;
}
// Update item rectangle y position for next item
itemBounds.y += (GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING));
}
if (useScrollBar)
{
int wheelMove = GetMouseWheelMove();
startIndex -= wheelMove;
if (startIndex < 0) startIndex = 0;
else if (startIndex > (count - visibleItems)) startIndex = count - visibleItems;
endIndex = startIndex + visibleItems;
if (endIndex > count) endIndex = count;
}
}
else itemFocused = -1;
// Reset item rectangle y to [0]
itemBounds.y = bounds.y + GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING) + GuiGetStyle(DEFAULT, BORDER_WIDTH);
}
//--------------------------------------------------------------------
// Draw control
//--------------------------------------------------------------------
DrawRectangleRec(bounds, GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR))); // Draw background
DrawRectangleLinesEx(bounds, GuiGetStyle(DEFAULT, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER + state*3)), guiAlpha));
// TODO: Draw list view header with file sections: icon+name | size | type | modTime
// Draw visible items
for (int i = 0; i < visibleItems; i++)
{
if (state == GUI_STATE_DISABLED)
{
if ((startIndex + i) == itemSelected)
{
DrawRectangleRec(itemBounds, Fade(GetColor(GuiGetStyle(LISTVIEW, BASE_COLOR_DISABLED)), guiAlpha));
DrawRectangleLinesEx(itemBounds, GuiGetStyle(LISTVIEW, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER_COLOR_DISABLED)), guiAlpha));
}
// TODO: Draw full file info line: icon+name | size | type | modTime
GuiDrawText(files[startIndex + i].name, GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_DISABLED)), guiAlpha));
}
else
{
if ((startIndex + i) == itemSelected)
{
// Draw item selected
DrawRectangleRec(itemBounds, Fade(GetColor(GuiGetStyle(LISTVIEW, BASE_COLOR_PRESSED)), guiAlpha));
DrawRectangleLinesEx(itemBounds, GuiGetStyle(LISTVIEW, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER_COLOR_PRESSED)), guiAlpha));
GuiDrawText(files[startIndex + i].name, GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_PRESSED)), guiAlpha));
}
else if ((startIndex + i) == itemFocused)
{
// Draw item focused
DrawRectangleRec(itemBounds, Fade(GetColor(GuiGetStyle(LISTVIEW, BASE_COLOR_FOCUSED)), guiAlpha));
DrawRectangleLinesEx(itemBounds, GuiGetStyle(LISTVIEW, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER_COLOR_FOCUSED)), guiAlpha));
GuiDrawText(files[startIndex + i].name, GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_FOCUSED)), guiAlpha));
}
else
{
// Draw item normal
GuiDrawText(files[startIndex + i].name, GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_NORMAL)), guiAlpha));
}
}
// Update item rectangle y position for next item
itemBounds.y += (GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING));
}
if (useScrollBar)
{
Rectangle scrollBarBounds = {
bounds.x + bounds.width - GuiGetStyle(LISTVIEW, BORDER_WIDTH) - GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH),
bounds.y + GuiGetStyle(LISTVIEW, BORDER_WIDTH), (float)GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH),
bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH)
};
// Calculate percentage of visible items and apply same percentage to scrollbar
float percentVisible = (float)(endIndex - startIndex)/count;
float sliderSize = bounds.height*percentVisible;
int prevSliderSize = GuiGetStyle(SCROLLBAR, SLIDER_WIDTH); // Save default slider size
int prevScrollSpeed = GuiGetStyle(SCROLLBAR, SCROLL_SPEED); // Save default scroll speed
GuiSetStyle(SCROLLBAR, SLIDER_WIDTH, sliderSize); // Change slider size
GuiSetStyle(SCROLLBAR, SCROLL_SPEED, count - visibleItems); // Change scroll speed
startIndex = GuiScrollBar(scrollBarBounds, startIndex, 0, count - visibleItems);
GuiSetStyle(SCROLLBAR, SCROLL_SPEED, prevScrollSpeed); // Reset scroll speed to default
GuiSetStyle(SCROLLBAR, SLIDER_WIDTH, prevSliderSize); // Reset slider size to default
}
//--------------------------------------------------------------------
if (focus != NULL) *focus = itemFocused;
if (scrollIndex != NULL) *scrollIndex = startIndex;
*active = itemSelected;
return result;
}
#endif // USE_CUSTOM_LISTVIEW_FILEINFO
#endif // GUI_FILE_DIALOG_IMPLEMENTATION

View File

@ -0,0 +1,223 @@
/*******************************************************************************************
*
* raygui - basic calculator app with custom input box for float values
*
* DEPENDENCIES:
* raylib 4.5 - Windowing/input management and drawing.
* raygui 3.5 - Immediate-mode GUI controls.
*
* COMPILATION (Windows - MinGW):
* gcc -o $(NAME_PART).exe $(FILE_NAME) -I../../src -lraylib -lopengl32 -lgdi32 -std=c99
*
**********************************************************************************************/
#include "raylib.h"
#define RAYGUI_IMPLEMENTATION
#include "../../src/raygui.h"
int guiFloatingPointIndex = 0; // Global variable shared by all GuiFloatBox()
int GuiFloatBox(Rectangle bounds, const char* text, float* value, int minValue, int maxValue, bool editMode); // Custom input box that works with float values. Basicly GuiValueBox(), but with some changes
int main()
{
InitWindow(250, 100, "Basic calculator");
// General variables
SetTargetFPS(60);
float variableA = 0.0f;
float variableB = 0.0f;
float result = 0.0f;
char operation[2];
operation[0] = '+';
operation[1] = '\0';
bool variableAMode = false;
bool variableBMode = false;
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose())
{
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(RAYWHITE);
if (GuiFloatBox((Rectangle){ 10, 10, 100, 20 }, NULL, &variableA, -1000000.0, 1000000.0, variableAMode)) variableAMode = !variableAMode;
if (GuiFloatBox((Rectangle){ 140, 10, 100, 20 }, NULL, &variableB, -1000000.0, 1000000.0, variableBMode)) variableBMode = !variableBMode;
if (GuiButton((Rectangle){ 10, 70, 50, 20 }, "+"))
{
result = variableA + variableB;
operation[0] = '+';
}
if (GuiButton((Rectangle){ 70, 70, 50, 20 }, "-"))
{
result = variableA - variableB;
operation[0] = '-';
}
if (GuiButton((Rectangle){ 130, 70, 50, 20 }, "*"))
{
result = variableA * variableB;
operation[0] = '*';
}
if (GuiButton((Rectangle){ 190, 70, 50, 20 }, "/"))
{
result = variableA / variableB;
operation[0] = '/';
}
DrawText(operation, 123, 15, 10, DARKGRAY);
GuiFloatBox((Rectangle){ 55, 40, 135, 20 }, "= ", &result, -2000000.0, 2000000.0, false);
EndDrawing();
//----------------------------------------------------------------------------------
}
CloseWindow();
}
// Float Box control, updates input text with numbers
int GuiFloatBox(Rectangle bounds, const char* text, float* value, int minValue, int maxValue, bool editMode)
{
#if !defined(RAYGUI_VALUEBOX_MAX_CHARS)
#define RAYGUI_VALUEBOX_MAX_CHARS 32
#endif
int result = 0;
GuiState state = guiState;
char textValue[RAYGUI_VALUEBOX_MAX_CHARS + 1] = "\0";
Rectangle textBounds = { 0 };
if (text != NULL)
{
textBounds.width = (float)GuiGetTextWidth(text) + 2;
textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE);
textBounds.x = bounds.x + bounds.width + GuiGetStyle(VALUEBOX, TEXT_PADDING);
textBounds.y = bounds.y + bounds.height / 2.0f - GuiGetStyle(DEFAULT, TEXT_SIZE) / 2.0f;
if (GuiGetStyle(VALUEBOX, TEXT_ALIGNMENT) == TEXT_ALIGN_LEFT) textBounds.x = bounds.x - textBounds.width - GuiGetStyle(VALUEBOX, TEXT_PADDING);
}
// Update control
//--------------------------------------------------------------------
if ((state != STATE_DISABLED) && !guiLocked && !guiControlExclusiveMode)
{
Vector2 mousePoint = GetMousePosition();
if (*value >= 0) sprintf(textValue, "+%.3f", *value);
else sprintf(textValue, "%.3f", *value);
bool valueHasChanged = false;
int keyCount = (int)strlen(textValue) - guiFloatingPointIndex;
if (editMode)
{
state = STATE_PRESSED;
// Only allow keys in range [48..57]
if (keyCount < RAYGUI_VALUEBOX_MAX_CHARS)
{
if (GuiGetTextWidth(textValue) < bounds.width)
{
int key = GetCharPressed();
if ((key >= 48) && (key <= 57) && guiFloatingPointIndex)
{
if (guiFloatingPointIndex && guiFloatingPointIndex != 4) guiFloatingPointIndex--;
textValue[keyCount] = (char)key;
textValue[++keyCount] = '\0';
valueHasChanged = true;
}
}
}
// Delete text
if (keyCount > 0)
{
if (IsKeyPressed(KEY_BACKSPACE))
{
if (guiFloatingPointIndex < 4) guiFloatingPointIndex++;
keyCount--;
textValue[keyCount] = '\0';
valueHasChanged = true;
}
}
// Change sign
if (IsKeyPressed(KEY_MINUS))
{
if (textValue[0] == '+') textValue[0] = '-';
else if (textValue[0] == '-') textValue[0] = '+';
valueHasChanged = true;
}
// Add decimal separator
if ((IsKeyPressed(KEY_COMMA) || IsKeyPressed(KEY_PERIOD)) && guiFloatingPointIndex == 4)
{
guiFloatingPointIndex--;
valueHasChanged = true;
}
if (valueHasChanged)
{
*value = atof(textValue);
}
if (IsKeyPressed(KEY_ENTER) || (!CheckCollisionPointRec(mousePoint, bounds) && IsMouseButtonPressed(MOUSE_LEFT_BUTTON)))
{
guiFloatingPointIndex = 0;
result = 1;
}
}
else
{
if (*value > maxValue) *value = maxValue;
else if (*value < minValue) *value = minValue;
if (CheckCollisionPointRec(mousePoint, bounds))
{
state = STATE_FOCUSED;
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) result = 1;
}
}
}
//--------------------------------------------------------------------
// Draw control
//--------------------------------------------------------------------
Color baseColor = BLANK;
sprintf(textValue, "%.3f", *value);
if (state == STATE_PRESSED)
{
baseColor = GetColor(GuiGetStyle(VALUEBOX, BASE_COLOR_PRESSED));
textValue[(int)strlen(textValue) - guiFloatingPointIndex] = '\0';
}
else if (state == STATE_DISABLED) baseColor = GetColor(GuiGetStyle(VALUEBOX, BASE_COLOR_DISABLED));
// WARNING: BLANK color does not work properly with Fade()
GuiDrawRectangle(bounds, GuiGetStyle(VALUEBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(VALUEBOX, BORDER + (state * 3))), guiAlpha), baseColor);
GuiDrawText(textValue, GetTextBounds(VALUEBOX, bounds), TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(VALUEBOX, TEXT + (state * 3))), guiAlpha));
// Draw cursor
if (editMode)
{
// NOTE: ValueBox internal text is always centered
Rectangle cursor = { bounds.x + GuiGetTextWidth(textValue) / 2.0f + bounds.width / 2.0f + 1, bounds.y + 2.0f * GuiGetStyle(VALUEBOX, BORDER_WIDTH), 4, bounds.height - 4 * GuiGetStyle(VALUEBOX, BORDER_WIDTH) };
GuiDrawRectangle(cursor, 0, BLANK, Fade(GetColor(GuiGetStyle(VALUEBOX, BORDER_COLOR_PRESSED)), guiAlpha));
}
// Draw text label if provided
GuiDrawText(text, textBounds, (GuiGetStyle(VALUEBOX, TEXT_ALIGNMENT) == TEXT_ALIGN_RIGHT) ? TEXT_ALIGN_LEFT : TEXT_ALIGN_RIGHT, Fade(GetColor(GuiGetStyle(LABEL, TEXT + (state * 3))), guiAlpha));
//--------------------------------------------------------------------
return result;
}

View File

@ -0,0 +1,470 @@
/*******************************************************************************************
*
* raygui - custom sliders
*
* 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-2024 Ramon Santamaria (@raysan5)
*
**********************************************************************************************/
#include "raylib.h"
#define RAYGUI_IMPLEMENTATION
#include "../../src/raygui.h"
//----------------------------------------------------------------------------------
// Controls Functions Declaration
//----------------------------------------------------------------------------------
float GuiVerticalSlider(Rectangle bounds, const char *textTop, const char *textBottom, float value, float minValue, float maxValue);
float GuiVerticalSliderBar(Rectangle bounds, const char *textTop, const char *textBottom, float value, float minValue, float maxValue);
float GuiVerticalSliderPro(Rectangle bounds, const char *textTop, const char *textBottom, float value, float minValue, float maxValue, int sliderHeight);
bool GuiSliderOwning(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue, bool editMode);
bool GuiSliderBarOwning(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue, bool editMode);
bool GuiSliderProOwning(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue, int sliderWidth, bool editMode);
bool GuiVerticalSliderOwning(Rectangle bounds, const char *textTop, const char *textBottom, float *value, float minValue, float maxValue, bool editMode);
bool GuiVerticalSliderBarOwning(Rectangle bounds, const char *textTop, const char *textBottom, float *value, float minValue, float maxValue, bool editMode);
bool GuiVerticalSliderProOwning(Rectangle bounds, const char *textTop, const char *textBottom, float *value, float minValue, float maxValue, int sliderHeight, bool editMode);
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main()
{
// Initialization
//---------------------------------------------------------------------------------------
int screenWidth = 800;
int screenHeight = 450;
InitWindow(screenWidth, screenHeight, "raygui - custom sliders");
float value = 0.5f;
bool sliderEditMode = false;
bool vSliderEditMode = false;
bool vSliderBarEditMode = false;
SetTargetFPS(60);
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
// TODO: Implement required update logic
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR)));
if (vSliderEditMode || vSliderBarEditMode) GuiLock();
else GuiUnlock();
// raygui: controls drawing
//----------------------------------------------------------------------------------
GuiGroupBox((Rectangle){ 66, 24, 276, 312 }, "STANDARD");
GuiSlider((Rectangle){ 96, 48, 216, 16 }, TextFormat("%0.2f", value), NULL, &value, 0.0f, 1.0f);
value = GuiVerticalSlider((Rectangle){ 120, 120, 24, 192 }, TextFormat("%0.2f", value), NULL, value, 0.0f, 1.0f);
value = GuiVerticalSliderBar((Rectangle){ 264, 120, 24, 192 }, TextFormat("%0.2f", value), NULL, value, 0.0f, 1.0f);
GuiGroupBox((Rectangle){ 378, 24, 276, 312 }, "OWNING");
if (GuiSliderOwning((Rectangle){ 408, 48, 216, 16 }, NULL, TextFormat("%0.2f", value), &value, 0.0f, 1.0f, sliderEditMode)) sliderEditMode = !sliderEditMode;
if (GuiVerticalSliderOwning((Rectangle){ 432, 120, 24, 192 }, NULL, TextFormat("%0.2f", value), &value, 0.0f, 1.0f, vSliderEditMode)) vSliderEditMode = !vSliderEditMode;
if (GuiVerticalSliderBarOwning((Rectangle){ 576, 120, 24, 192 }, NULL, TextFormat("%0.2f", value), &value, 0.0f, 1.0f, vSliderBarEditMode)) vSliderBarEditMode = !vSliderBarEditMode;
//----------------------------------------------------------------------------------
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}
//------------------------------------------------------------------------------------
// Controls Functions Definitions (local)
//------------------------------------------------------------------------------------
float GuiVerticalSliderPro(Rectangle bounds, const char *textTop, const char *textBottom, float value, float minValue, float maxValue, int sliderHeight)
{
GuiState state = (GuiState)GuiGetState();
int sliderValue = (int)(((value - minValue)/(maxValue - minValue)) * (bounds.height - 2 * GuiGetStyle(SLIDER, BORDER_WIDTH)));
Rectangle slider = {
bounds.x + GuiGetStyle(SLIDER, BORDER_WIDTH) + GuiGetStyle(SLIDER, SLIDER_PADDING),
bounds.y + bounds.height - sliderValue,
bounds.width - 2*GuiGetStyle(SLIDER, BORDER_WIDTH) - 2*GuiGetStyle(SLIDER, SLIDER_PADDING),
0.0f,
};
if (sliderHeight > 0) // Slider
{
slider.y -= sliderHeight/2;
slider.height = (float)sliderHeight;
}
else if (sliderHeight == 0) // SliderBar
{
slider.y -= GuiGetStyle(SLIDER, BORDER_WIDTH);
slider.height = (float)sliderValue;
}
// Update control
//--------------------------------------------------------------------
if ((state != STATE_DISABLED) && !guiLocked)
{
Vector2 mousePoint = GetMousePosition();
if (CheckCollisionPointRec(mousePoint, bounds))
{
if (IsMouseButtonDown(MOUSE_LEFT_BUTTON))
{
state = STATE_PRESSED;
// Get equivalent value and slider position from mousePoint.x
float normalizedValue = (bounds.y + bounds.height - mousePoint.y - (float)(sliderHeight / 2)) / (bounds.height - (float)sliderHeight);
value = (maxValue - minValue) * normalizedValue + minValue;
if (sliderHeight > 0) slider.y = mousePoint.y - slider.height / 2; // Slider
else if (sliderHeight == 0) // SliderBar
{
slider.y = mousePoint.y;
slider.height = bounds.y + bounds.height - slider.y - GuiGetStyle(SLIDER, BORDER_WIDTH);
}
}
else state = STATE_FOCUSED;
}
if (value > maxValue) value = maxValue;
else if (value < minValue) value = minValue;
}
// Bar limits check
if (sliderHeight > 0) // Slider
{
if (slider.y < (bounds.y + GuiGetStyle(SLIDER, BORDER_WIDTH))) slider.y = bounds.y + GuiGetStyle(SLIDER, BORDER_WIDTH);
else if ((slider.y + slider.height) >= (bounds.y + bounds.height)) slider.y = bounds.y + bounds.height - slider.height - GuiGetStyle(SLIDER, BORDER_WIDTH);
}
else if (sliderHeight == 0) // SliderBar
{
if (slider.y < (bounds.y + GuiGetStyle(SLIDER, BORDER_WIDTH)))
{
slider.y = bounds.y + GuiGetStyle(SLIDER, BORDER_WIDTH);
slider.height = bounds.height - 2*GuiGetStyle(SLIDER, BORDER_WIDTH);
}
}
//--------------------------------------------------------------------
// Draw control
//--------------------------------------------------------------------
GuiDrawRectangle(bounds, GuiGetStyle(SLIDER, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(SLIDER, BORDER + (state*3))), guiAlpha), Fade(GetColor(GuiGetStyle(SLIDER, (state != STATE_DISABLED)? BASE_COLOR_NORMAL : BASE_COLOR_DISABLED)), guiAlpha));
// Draw slider internal bar (depends on state)
if ((state == STATE_NORMAL) || (state == STATE_PRESSED)) GuiDrawRectangle(slider, 0, BLANK, Fade(GetColor(GuiGetStyle(SLIDER, BASE_COLOR_PRESSED)), guiAlpha));
else if (state == STATE_FOCUSED) GuiDrawRectangle(slider, 0, BLANK, Fade(GetColor(GuiGetStyle(SLIDER, TEXT_COLOR_FOCUSED)), guiAlpha));
// Draw top/bottom text if provided
if (textTop != NULL)
{
Rectangle textBounds = { 0 };
textBounds.width = (float)GuiGetTextWidth(textTop);
textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE);
textBounds.x = bounds.x + bounds.width/2 - textBounds.width/2;
textBounds.y = bounds.y - textBounds.height - GuiGetStyle(SLIDER, TEXT_PADDING);
GuiDrawText(textTop, textBounds, TEXT_ALIGN_RIGHT, Fade(GetColor(GuiGetStyle(SLIDER, TEXT + (state*3))), guiAlpha));
}
if (textBottom != NULL)
{
Rectangle textBounds = { 0 };
textBounds.width = (float)GuiGetTextWidth(textBottom);
textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE);
textBounds.x = bounds.x + bounds.width/2 - textBounds.width/2;
textBounds.y = bounds.y + bounds.height + GuiGetStyle(SLIDER, TEXT_PADDING);
GuiDrawText(textBottom, textBounds, TEXT_ALIGN_LEFT, Fade(GetColor(GuiGetStyle(SLIDER, TEXT + (state*3))), guiAlpha));
}
//--------------------------------------------------------------------
return value;
}
float GuiVerticalSlider(Rectangle bounds, const char *textTop, const char *textBottom, float value, float minValue, float maxValue)
{
return GuiVerticalSliderPro(bounds, textTop, textBottom, value, minValue, maxValue, GuiGetStyle(SLIDER, SLIDER_WIDTH));
}
float GuiVerticalSliderBar(Rectangle bounds, const char *textTop, const char *textBottom, float value, float minValue, float maxValue)
{
return GuiVerticalSliderPro(bounds, textTop, textBottom, value, minValue, maxValue, 0);
}
bool GuiSliderProOwning(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue, int sliderWidth, bool editMode)
{
GuiState state = (GuiState)GuiGetState();
float tempValue = *value;
bool pressed = false;
int sliderValue = (int)(((tempValue - minValue)/(maxValue - minValue))*(bounds.width - 2*GuiGetStyle(SLIDER, BORDER_WIDTH)));
Rectangle slider = {
bounds.x,
bounds.y + GuiGetStyle(SLIDER, BORDER_WIDTH) + GuiGetStyle(SLIDER, SLIDER_PADDING),
0,
bounds.height - 2*GuiGetStyle(SLIDER, BORDER_WIDTH) - 2*GuiGetStyle(SLIDER, SLIDER_PADDING)
};
if (sliderWidth > 0) // Slider
{
slider.x += (sliderValue - sliderWidth/2);
slider.width = (float)sliderWidth;
}
else if (sliderWidth == 0) // SliderBar
{
slider.x += GuiGetStyle(SLIDER, BORDER_WIDTH);
slider.width = (float)sliderValue;
}
// Update control
//--------------------------------------------------------------------
if ((state != STATE_DISABLED) && (editMode || !guiLocked))
{
Vector2 mousePoint = GetMousePosition();
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
{
if (CheckCollisionPointRec(mousePoint, bounds))
{
pressed = true;
}
}
else if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON) && editMode)
{
pressed = true;
}
if (editMode)
{
state = STATE_PRESSED;
tempValue = ((maxValue - minValue)*(mousePoint.x - (float)(bounds.x + sliderWidth/2)))/(float)(bounds.width - sliderWidth) + minValue;
if (sliderWidth > 0) slider.x = mousePoint.x - slider.width/2; // Slider
else if (sliderWidth == 0) slider.width = (float)sliderValue; // SliderBar
}
else if (CheckCollisionPointRec(mousePoint, bounds))
{
state = STATE_FOCUSED;
}
if (tempValue > maxValue) tempValue = maxValue;
else if (tempValue < minValue) tempValue = minValue;
}
// Bar limits check
if (sliderWidth > 0) // Slider
{
if (slider.x <= (bounds.x + GuiGetStyle(SLIDER, BORDER_WIDTH))) slider.x = bounds.x + GuiGetStyle(SLIDER, BORDER_WIDTH);
else if ((slider.x + slider.width) >= (bounds.x + bounds.width)) slider.x = bounds.x + bounds.width - slider.width - GuiGetStyle(SLIDER, BORDER_WIDTH);
}
else if (sliderWidth == 0) // SliderBar
{
if (slider.width > bounds.width) slider.width = bounds.width - 2*GuiGetStyle(SLIDER, BORDER_WIDTH);
}
//--------------------------------------------------------------------
// Draw control
//--------------------------------------------------------------------
GuiDrawRectangle(bounds, GuiGetStyle(SLIDER, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(SLIDER, BORDER + (state*3))), guiAlpha), Fade(GetColor(GuiGetStyle(SLIDER, (state != STATE_DISABLED)? BASE_COLOR_NORMAL : BASE_COLOR_DISABLED)), guiAlpha));
// Draw slider internal bar (depends on state)
if ((state == STATE_NORMAL) || (state == STATE_PRESSED))
GuiDrawRectangle(slider, 0, BLANK, Fade(GetColor(GuiGetStyle(SLIDER, BASE_COLOR_PRESSED)), guiAlpha));
else if (state == STATE_FOCUSED)
GuiDrawRectangle(slider, 0, BLANK, Fade(GetColor(GuiGetStyle(SLIDER, TEXT_COLOR_FOCUSED)), guiAlpha));
// Draw left/right text if provided
if (textLeft != NULL)
{
Rectangle textBounds = { 0 };
textBounds.width = (float)GuiGetTextWidth(textLeft);
textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE);
textBounds.x = bounds.x - textBounds.width - GuiGetStyle(SLIDER, TEXT_PADDING);
textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2;
GuiDrawText(textLeft, textBounds, TEXT_ALIGN_RIGHT, Fade(GetColor(GuiGetStyle(SLIDER, TEXT + (state*3))), guiAlpha));
}
if (textRight != NULL)
{
Rectangle textBounds = { 0 };
textBounds.width = (float)GuiGetTextWidth(textRight);
textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE);
textBounds.x = bounds.x + bounds.width + GuiGetStyle(SLIDER, TEXT_PADDING);
textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2;
GuiDrawText(textRight, textBounds, TEXT_ALIGN_LEFT, Fade(GetColor(GuiGetStyle(SLIDER, TEXT + (state*3))), guiAlpha));
}
//--------------------------------------------------------------------
*value = tempValue;
return pressed;
}
bool GuiSliderOwning(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue, bool editMode)
{
return GuiSliderProOwning(bounds, textLeft, textRight, value, minValue, maxValue, GuiGetStyle(SLIDER, SLIDER_WIDTH), editMode);
}
bool GuiSliderBarOwning(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue, bool editMode)
{
return GuiSliderProOwning(bounds, textLeft, textRight, value, minValue, maxValue, 0, editMode);
}
bool GuiVerticalSliderProOwning(Rectangle bounds, const char *textTop, const char *textBottom, float *value, float minValue, float maxValue, int sliderHeight, bool editMode)
{
GuiState state = (GuiState)GuiGetState();
float tempValue = *value;
bool pressed = false;
int sliderValue = (int)(((tempValue - minValue)/(maxValue - minValue)) * (bounds.height - 2 * GuiGetStyle(SLIDER, BORDER_WIDTH)));
Rectangle slider = {
bounds.x + GuiGetStyle(SLIDER, BORDER_WIDTH) + GuiGetStyle(SLIDER, SLIDER_PADDING),
bounds.y + bounds.height - sliderValue,
bounds.width - 2*GuiGetStyle(SLIDER, BORDER_WIDTH) - 2*GuiGetStyle(SLIDER, SLIDER_PADDING),
0.0f,
};
if (sliderHeight > 0) // Slider
{
slider.y -= sliderHeight/2;
slider.height = (float)sliderHeight;
}
else if (sliderHeight == 0) // SliderBar
{
slider.y -= GuiGetStyle(SLIDER, BORDER_WIDTH);
slider.height = (float)sliderValue;
}
// Update control
//--------------------------------------------------------------------
if ((state != STATE_DISABLED) && (editMode || !guiLocked))
{
Vector2 mousePoint = GetMousePosition();
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
{
if (CheckCollisionPointRec(mousePoint, bounds))
{
pressed = true;
}
}
else if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON) && editMode)
{
pressed = true;
}
if (editMode)
{
state = STATE_PRESSED;
float normalizedValue = (bounds.y + bounds.height - mousePoint.y - (float)(sliderHeight / 2)) / (bounds.height - (float)sliderHeight);
tempValue = (maxValue - minValue) * normalizedValue + minValue;
if (sliderHeight > 0) slider.y = mousePoint.y - slider.height / 2; // Slider
else if (sliderHeight == 0) // SliderBar
{
slider.y = mousePoint.y;
slider.height = bounds.y + bounds.height - slider.y - GuiGetStyle(SLIDER, BORDER_WIDTH);
}
}
else if (CheckCollisionPointRec(mousePoint, bounds))
{
state = STATE_FOCUSED;
}
if (tempValue > maxValue) tempValue = maxValue;
else if (tempValue < minValue) tempValue = minValue;
}
// Bar limits check
if (sliderHeight > 0) // Slider
{
if (slider.y < (bounds.y + GuiGetStyle(SLIDER, BORDER_WIDTH))) slider.y = bounds.y + GuiGetStyle(SLIDER, BORDER_WIDTH);
else if ((slider.y + slider.height) >= (bounds.y + bounds.height)) slider.y = bounds.y + bounds.height - slider.height - GuiGetStyle(SLIDER, BORDER_WIDTH);
}
else if (sliderHeight == 0) // SliderBar
{
if (slider.y < (bounds.y + GuiGetStyle(SLIDER, BORDER_WIDTH)))
{
slider.y = bounds.y + GuiGetStyle(SLIDER, BORDER_WIDTH);
slider.height = bounds.height - 2*GuiGetStyle(SLIDER, BORDER_WIDTH);
}
}
//--------------------------------------------------------------------
// Draw control
//--------------------------------------------------------------------
GuiDrawRectangle(bounds, GuiGetStyle(SLIDER, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(SLIDER, BORDER + (state*3))), guiAlpha), Fade(GetColor(GuiGetStyle(SLIDER, (state != STATE_DISABLED)? BASE_COLOR_NORMAL : BASE_COLOR_DISABLED)), guiAlpha));
// Draw slider internal bar (depends on state)
if ((state == STATE_NORMAL) || (state == STATE_PRESSED))
GuiDrawRectangle(slider, 0, BLANK, Fade(GetColor(GuiGetStyle(SLIDER, BASE_COLOR_PRESSED)), guiAlpha));
else if (state == STATE_FOCUSED)
GuiDrawRectangle(slider, 0, BLANK, Fade(GetColor(GuiGetStyle(SLIDER, TEXT_COLOR_FOCUSED)), guiAlpha));
// Draw top/bottom text if provided
if (textTop != NULL)
{
Rectangle textBounds = { 0 };
textBounds.width = (float)GuiGetTextWidth(textTop);
textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE);
textBounds.x = bounds.x + bounds.width/2 - textBounds.width/2;
textBounds.y = bounds.y - textBounds.height - GuiGetStyle(SLIDER, TEXT_PADDING);
GuiDrawText(textTop, textBounds, TEXT_ALIGN_RIGHT, Fade(GetColor(GuiGetStyle(SLIDER, TEXT + (state*3))), guiAlpha));
}
if (textBottom != NULL)
{
Rectangle textBounds = { 0 };
textBounds.width = (float)GuiGetTextWidth(textBottom);
textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE);
textBounds.x = bounds.x + bounds.width/2 - textBounds.width/2;
textBounds.y = bounds.y + bounds.height + GuiGetStyle(SLIDER, TEXT_PADDING);
GuiDrawText(textBottom, textBounds, TEXT_ALIGN_LEFT, Fade(GetColor(GuiGetStyle(SLIDER, TEXT + (state*3))), guiAlpha));
}
//--------------------------------------------------------------------
*value = tempValue;
return pressed;
}
bool GuiVerticalSliderOwning(Rectangle bounds, const char *textTop, const char *textBottom, float *value, float minValue, float maxValue, bool editMode)
{
return GuiVerticalSliderProOwning(bounds, textTop, textBottom, value, minValue, maxValue, GuiGetStyle(SLIDER, SLIDER_WIDTH), editMode);
}
bool GuiVerticalSliderBarOwning(Rectangle bounds, const char *textTop, const char *textBottom, float *value, float minValue, float maxValue, bool editMode)
{
return GuiVerticalSliderProOwning(bounds, textTop, textBottom, value, minValue, maxValue, 0, editMode);
}

View File

@ -0,0 +1,148 @@
#include "raylib.h"
#define RAYGUI_IMPLEMENTATION
#include "../../src/raygui.h"
#include "../../styles/dark/style_dark.h"
static Vector2 window_position = { 10, 10 };
static Vector2 window_size = { 200, 400 };
static bool minimized = false;
static bool moving = false;
static bool resizing = false;
static Vector2 scroll;
static Vector2 window2_position = { 250, 10 };
static Vector2 window2_size = { 200, 400 };
static bool minimized2 = false;
static bool moving2 = false;
static bool resizing2 = false;
static Vector2 scroll2;
void GuiWindowFloating(Vector2 *position, Vector2 *size, bool *minimized, bool *moving, bool *resizing, void (*draw_content)(Vector2, Vector2), Vector2 content_size, Vector2 *scroll, const char* title) {
#if !defined(RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT)
#define RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT 24
#endif
#if !defined(RAYGUI_WINDOW_CLOSEBUTTON_SIZE)
#define RAYGUI_WINDOW_CLOSEBUTTON_SIZE 18
#endif
int close_title_size_delta_half = (RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT - RAYGUI_WINDOW_CLOSEBUTTON_SIZE) / 2;
// window movement and resize input and collision check
if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && !*moving && !*resizing) {
Vector2 mouse_position = GetMousePosition();
Rectangle title_collision_rect = { position->x, position->y, size->x - (RAYGUI_WINDOW_CLOSEBUTTON_SIZE + close_title_size_delta_half), RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT };
Rectangle resize_collision_rect = { position->x + size->x - 20, position->y + size->y - 20, 20, 20 };
if(CheckCollisionPointRec(mouse_position, title_collision_rect)) {
*moving = true;
} else if(!*minimized && CheckCollisionPointRec(mouse_position, resize_collision_rect)) {
*resizing = true;
}
}
// window movement and resize update
if(*moving) {
Vector2 mouse_delta = GetMouseDelta();
position->x += mouse_delta.x;
position->y += mouse_delta.y;
if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) {
*moving = false;
// clamp window position keep it inside the application area
if(position->x < 0) position->x = 0;
else if(position->x > GetScreenWidth() - size->x) position->x = GetScreenWidth() - size->x;
if(position->y < 0) position->y = 0;
else if(position->y > GetScreenHeight()) position->y = GetScreenHeight() - RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT;
}
} else if(*resizing) {
Vector2 mouse = GetMousePosition();
if (mouse.x > position->x)
size->x = mouse.x - position->x;
if (mouse.y > position->y)
size->y = mouse.y - position->y;
// clamp window size to an arbitrary minimum value and the window size as the maximum
if(size->x < 100) size->x = 100;
else if(size->x > GetScreenWidth()) size->x = GetScreenWidth();
if(size->y < 100) size->y = 100;
else if(size->y > GetScreenHeight()) size->y = GetScreenHeight();
if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) {
*resizing = false;
}
}
// window and content drawing with scissor and scroll area
if(*minimized) {
GuiStatusBar((Rectangle){ position->x, position->y, size->x, RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT }, title);
if (GuiButton((Rectangle){ position->x + size->x - RAYGUI_WINDOW_CLOSEBUTTON_SIZE - close_title_size_delta_half,
position->y + close_title_size_delta_half,
RAYGUI_WINDOW_CLOSEBUTTON_SIZE,
RAYGUI_WINDOW_CLOSEBUTTON_SIZE },
"#120#")) {
*minimized = false;
}
} else {
*minimized = GuiWindowBox((Rectangle) { position->x, position->y, size->x, size->y }, title);
// scissor and draw content within a scroll panel
if(draw_content != NULL) {
Rectangle scissor = { 0 };
GuiScrollPanel((Rectangle) { position->x, position->y + RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT, size->x, size->y - RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT },
NULL,
(Rectangle) { position->x, position->y, content_size.x, content_size.y },
scroll,
&scissor);
bool require_scissor = size->x < content_size.x || size->y < content_size.y;
if(require_scissor) {
BeginScissorMode(scissor.x, scissor.y, scissor.width, scissor.height);
}
draw_content(*position, *scroll);
if(require_scissor) {
EndScissorMode();
}
}
// draw the resize button/icon
GuiDrawIcon(71, position->x + size->x - 20, position->y + size->y - 20, 1, WHITE);
}
}
static void DrawContent(Vector2 position, Vector2 scroll) {
GuiButton((Rectangle) { position.x + 20 + scroll.x, position.y + 50 + scroll.y, 100, 25 }, "Button 1");
GuiButton((Rectangle) { position.x + 20 + scroll.x, position.y + 100 + scroll.y, 100, 25 }, "Button 2");
GuiButton((Rectangle) { position.x + 20 + scroll.x, position.y + 150 + scroll.y, 100, 25 }, "Button 3");
GuiLabel((Rectangle) { position.x + 20 + scroll.x, position.y + 200 + scroll.y, 250, 25 }, "A Label");
GuiLabel((Rectangle) { position.x + 20 + scroll.x, position.y + 250 + scroll.y, 250, 25 }, "Another Label");
GuiLabel((Rectangle) { position.x + 20 + scroll.x, position.y + 300 + scroll.y, 250, 25 }, "Yet Another Label");
}
int main(void) {
InitWindow(960, 560, "raygui - floating window example");
SetTargetFPS(60);
GuiLoadStyleDark();
while(!WindowShouldClose()) {
BeginDrawing();
ClearBackground(DARKGREEN);
GuiWindowFloating(&window_position, &window_size, &minimized, &moving, &resizing, &DrawContent, (Vector2) { 140, 320 }, &scroll, "Movable & Scalable Window");
GuiWindowFloating(&window2_position, &window2_size, &minimized2, &moving2, &resizing2, &DrawContent, (Vector2) { 140, 320 }, &scroll2, "Another window");
EndDrawing();
}
CloseWindow();
return 0;
}

View File

@ -0,0 +1,192 @@
/*******************************************************************************************
*
* raygui - image exporter
*
* 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) 2015-2024 Ramon Santamaria (@raysan5)
*
********************************************************************************************/
#include "raylib.h"
#define RAYGUI_IMPLEMENTATION
#include "../../src/raygui.h"
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main(int argc, char *argv[])
{
// Initialization
//--------------------------------------------------------------------------------------
const int screenWidth = 800;
const int screenHeight = 450;
InitWindow(screenWidth, screenHeight, "raygui - image exporter");
// GUI controls initialization
//----------------------------------------------------------------------------------
Rectangle windowBoxRec = { screenWidth/2 - 110, screenHeight/2 - 100, 220, 190 };
bool windowBoxActive = false;
int fileFormatActive = 0;
const char *fileFormatTextList[3] = { "IMAGE (.png)", "DATA (.raw)", "CODE (.h)" };
int pixelFormatActive = 0;
const char *pixelFormatTextList[7] = { "GRAYSCALE", "GRAY ALPHA", "R5G6B5", "R8G8B8", "R5G5B5A1", "R4G4B4A4", "R8G8B8A8" };
bool textBoxEditMode = false;
char fileName[64] = "untitled";
//--------------------------------------------------------------------------------------
Image image = { 0 };
Texture2D texture = { 0 };
bool imageLoaded = false;
float imageScale = 1.0f;
Rectangle imageRec = { 0 };
bool btnExportPressed = false;
SetTargetFPS(60);
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
if (IsFileDropped())
{
FilePathList droppedFiles = LoadDroppedFiles();
if (droppedFiles.count == 1)
{
Image imTemp = LoadImage(droppedFiles.paths[0]);
if (imTemp.data != NULL)
{
UnloadImage(image);
image = imTemp;
UnloadTexture(texture);
texture = LoadTextureFromImage(image);
imageLoaded = true;
pixelFormatActive = image.format - 1;
if (texture.height > texture.width) imageScale = (float)(screenHeight - 100)/(float)texture.height;
else imageScale = (float)(screenWidth - 100)/(float)texture.width;
}
}
UnloadDroppedFiles(droppedFiles);
}
if (btnExportPressed)
{
if (imageLoaded)
{
ImageFormat(&image, pixelFormatActive + 1);
if (fileFormatActive == 0) // PNG
{
if ((GetFileExtension(fileName) == NULL) || (!IsFileExtension(fileName, ".png"))) strcat(fileName, ".png\0"); // No extension provided
ExportImage(image, fileName);
}
else if (fileFormatActive == 1) // RAW
{
if ((GetFileExtension(fileName) == NULL) || (!IsFileExtension(fileName, ".raw"))) strcat(fileName, ".raw\0"); // No extension provided
int dataSize = GetPixelDataSize(image.width, image.height, image.format);
FILE *rawFile = fopen(fileName, "wb");
fwrite(image.data, 1, dataSize, rawFile);
fclose(rawFile);
}
else if (fileFormatActive == 2) // CODE
{
ExportImageAsCode(image, fileName);
}
}
windowBoxActive = false;
}
if (imageLoaded)
{
imageScale += (float)GetMouseWheelMove()*0.05f; // Image scale control
if (imageScale <= 0.1f) imageScale = 0.1f;
else if (imageScale >= 5) imageScale = 5;
imageRec = (Rectangle){ screenWidth/2 - (float)image.width*imageScale/2,
screenHeight/2 - (float)image.height*imageScale/2,
(float)image.width*imageScale, (float)image.height*imageScale };
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(RAYWHITE);
if (texture.id > 0)
{
DrawTextureEx(texture, (Vector2){ screenWidth/2 - (float)texture.width*imageScale/2, screenHeight/2 - (float)texture.height*imageScale/2 }, 0.0f, imageScale, WHITE);
DrawRectangleLinesEx(imageRec, 1, CheckCollisionPointRec(GetMousePosition(), imageRec) ? RED : DARKGRAY);
DrawText(TextFormat("SCALE: %.2f%%", imageScale*100.0f), 20, screenHeight - 40, 20, GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)));
}
else
{
DrawText("DRAG & DROP YOUR IMAGE!", 350, 200, 10, DARKGRAY);
GuiDisable();
}
if (GuiButton((Rectangle){ screenWidth - 170, screenHeight - 50, 150, 30 }, "Image Export")) windowBoxActive = true;
GuiEnable();
// Draw window box: windowBoxName
//-----------------------------------------------------------------------------
if (windowBoxActive)
{
DrawRectangle(0, 0, screenWidth, screenHeight, Fade(GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR)), 0.7f));
windowBoxActive = !GuiWindowBox((Rectangle){ windowBoxRec.x, windowBoxRec.y, 220, 190 }, "Image Export Options");
GuiLabel((Rectangle){ windowBoxRec.x + 10, windowBoxRec.y + 35, 60, 25 }, "File format:");
GuiComboBox((Rectangle){ windowBoxRec.x + 80, windowBoxRec.y + 35, 130, 25 }, TextJoin(fileFormatTextList, 3, ";"), &fileFormatActive);
GuiLabel((Rectangle){ windowBoxRec.x + 10, windowBoxRec.y + 70, 63, 25 }, "Pixel format:");
GuiComboBox((Rectangle){ windowBoxRec.x + 80, windowBoxRec.y + 70, 130, 25 }, TextJoin(pixelFormatTextList, 7, ";"), &pixelFormatActive);
GuiLabel((Rectangle){ windowBoxRec.x + 10, windowBoxRec.y + 105, 50, 25 }, "File name:");
if (GuiTextBox((Rectangle){ windowBoxRec.x + 80, windowBoxRec.y + 105, 130, 25 }, fileName, 64, textBoxEditMode)) textBoxEditMode = !textBoxEditMode;
btnExportPressed = GuiButton((Rectangle){ windowBoxRec.x + 10, windowBoxRec.y + 145, 200, 30 }, "Export Image");
}
else btnExportPressed = false;
if (btnExportPressed) DrawText("Image exported!", 20, screenHeight - 20, 20, RED);
//-----------------------------------------------------------------------------
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
UnloadImage(image);
UnloadTexture(texture);
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -0,0 +1,228 @@
/*******************************************************************************************
*
* raygui - image raw importer
*
* 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) 2015-2024 Ramon Santamaria (@raysan5)
*
**********************************************************************************************/
#include "raylib.h"
#define RAYGUI_IMPLEMENTATION
#include "../../src/raygui.h"
#include <string.h> // Required for: strcpy()
#include <stdlib.h> // Required for: atoi()
#include <math.h> // Required for: round()
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main()
{
// Initialization
//---------------------------------------------------------------------------------------
const int screenWidth = 800;
const int screenHeight = 600;
InitWindow(screenWidth, screenHeight, "raygui - image raw importer");
Texture2D texture = { 0 };
// GUI controls initialization
//----------------------------------------------------------------------------------
Vector2 windowOffset = { screenWidth/2 - 200/2, screenHeight/2 - 465/2 };
bool importWindowActive = false;
int widthValue = 0;
bool widthEditMode = false;
int heightValue = 0;
bool heightEditMode = false;
int pixelFormatActive = 0;
const char *pixelFormatTextList[8] = { "CUSTOM", "GRAYSCALE", "GRAY ALPHA", "R5G6B5", "R8G8B8", "R5G5B5A1", "R4G4B4A4", "R8G8B8A8" };
int channelsActive = 3;
const char *channelsTextList[4] = { "1", "2", "3", "4" };
int bitDepthActive = 0;
const char *bitDepthTextList[3] = { "8", "16", "32" };
int headerSizeValue = 0;
bool headerSizeEditMode = false;
//----------------------------------------------------------------------------------
// Image file info
int dataSize = 0;
char fileNamePath[256] = "\0";
char fileName[64] = "\0";
bool btnLoadPressed = false;
bool imageLoaded = false;
float imageScale = 1.0f;
SetTargetFPS(60);
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
// Check if a file is dropped
if (IsFileDropped())
{
FilePathList droppedFiles = LoadDroppedFiles();
// Check file extensions for drag-and-drop
if ((droppedFiles.count == 1) && IsFileExtension(droppedFiles.paths[0], ".raw"))
{
FILE *imageFile = fopen(droppedFiles.paths[0], "rb");
fseek(imageFile, 0L, SEEK_END);
dataSize = ftell(imageFile);
fclose(imageFile);
// NOTE: Returned string is just a pointer to droppedFiles[0],
// we need to make a copy of that data somewhere else: fileName
strcpy(fileNamePath, droppedFiles.paths[0]);
strcpy(fileName, GetFileName(droppedFiles.paths[0]));
// Try to guess possible raw values
// Let's assume image is square, RGBA, 8 bit per channel
widthValue = round(sqrt(dataSize/4));
heightValue = widthValue;
headerSizeValue = dataSize - widthValue*heightValue*4;
if (headerSizeValue < 0) headerSizeValue = 0;
importWindowActive = true;
}
UnloadDroppedFiles(droppedFiles);
}
// Check if load button has been pressed
if (btnLoadPressed)
{
// Depending on channels and bit depth, select correct pixel format
if ((widthValue != 0) && (heightValue != 0))
{
int format = -1;
if (pixelFormatActive == 0)
{
int channels = atoi(channelsTextList[channelsActive]);
int bpp = atoi(bitDepthTextList[bitDepthActive]);
// Select correct format depending on channels and bpp
if (bpp == 8)
{
if (channels == 1) format = PIXELFORMAT_UNCOMPRESSED_GRAYSCALE;
else if (channels == 2) format = PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA;
else if (channels == 3) format = PIXELFORMAT_UNCOMPRESSED_R8G8B8;
else if (channels == 4) format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8;
}
else if (bpp == 32)
{
if (channels == 1) format = PIXELFORMAT_UNCOMPRESSED_R32;
else if (channels == 2) TraceLog(LOG_WARNING, "Channel bit-depth not supported!");
else if (channels == 3) format = PIXELFORMAT_UNCOMPRESSED_R32G32B32;
else if (channels == 4) format = PIXELFORMAT_UNCOMPRESSED_R32G32B32A32;
}
else if (bpp == 16) TraceLog(LOG_WARNING, "Channel bit-depth not supported!");
}
else format = pixelFormatActive;
if (format != -1)
{
Image image = LoadImageRaw(fileNamePath, widthValue, heightValue, format, headerSizeValue);
texture = LoadTextureFromImage(image);
UnloadImage(image);
importWindowActive = false;
btnLoadPressed = false;
if (texture.id > 0)
{
imageLoaded = true;
imageScale = (float)(screenHeight - 100)/texture.height;
}
}
}
}
if (imageLoaded) imageScale += (float)GetMouseWheelMove(); // Image scale control
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR)));
if (texture.id != 0)
{
DrawTextureEx(texture, (Vector2){ screenWidth/2 - texture.width*imageScale/2, screenHeight/2 - texture.height*imageScale/2 }, 0, imageScale, WHITE);
DrawText(TextFormat("SCALE x%.0f", imageScale), 20, screenHeight - 40, 20, GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)));
}
else DrawText("drag & drop RAW image file", 320, 180, 10, GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)));
// raygui: controls drawing
//----------------------------------------------------------------------------------
if (importWindowActive)
{
importWindowActive = !GuiWindowBox((Rectangle){ windowOffset.x + 0, windowOffset.y + 0, 200, 465 }, "Image RAW Import Options");
GuiLabel((Rectangle){ windowOffset.x + 10, windowOffset.y + 30, 65, 20 }, "Import file:");
GuiLabel((Rectangle){ windowOffset.x + 85, windowOffset.y + 30, 75, 20 }, fileName);
GuiLabel((Rectangle){ windowOffset.x + 10, windowOffset.y + 50, 65, 20 }, "File size:");
GuiLabel((Rectangle){ windowOffset.x + 85, windowOffset.y + 50, 75, 20 }, TextFormat("%i bytes", dataSize));
GuiGroupBox((Rectangle){ windowOffset.x + 10, windowOffset.y + 85, 180, 80 }, "Resolution");
GuiLabel((Rectangle){ windowOffset.x + 20, windowOffset.y + 100, 33, 25 }, "Width:");
if (GuiValueBox((Rectangle){ windowOffset.x + 60, windowOffset.y + 100, 80, 25 }, NULL, &widthValue, 0, 8192, widthEditMode)) widthEditMode = !widthEditMode;
GuiLabel((Rectangle){ windowOffset.x + 145, windowOffset.y + 100, 30, 25 }, "pixels");
GuiLabel((Rectangle){ windowOffset.x + 20, windowOffset.y + 130, 33, 25 }, "Height:");
if (GuiValueBox((Rectangle){ windowOffset.x + 60, windowOffset.y + 130, 80, 25 }, NULL, &heightValue, 0, 8192, heightEditMode)) heightEditMode = !heightEditMode;
GuiLabel((Rectangle){ windowOffset.x + 145, windowOffset.y + 130, 30, 25 }, "pixels");
GuiGroupBox((Rectangle){ windowOffset.x + 10, windowOffset.y + 180, 180, 160 }, "Pixel Format");
GuiComboBox((Rectangle){ windowOffset.x + 20, windowOffset.y + 195, 160, 25 }, TextJoin(pixelFormatTextList, 8, ";"), &pixelFormatActive);
GuiLine((Rectangle){ windowOffset.x + 20, windowOffset.y + 220, 160, 20 }, NULL);
if (pixelFormatActive != 0) GuiDisable();
GuiLabel((Rectangle){ windowOffset.x + 20, windowOffset.y + 235, 50, 20 }, "Channels:");
GuiToggleGroup((Rectangle){ windowOffset.x + 20, windowOffset.y + 255, 156/4, 25 }, TextJoin(channelsTextList, 4, ";"), &channelsActive);
GuiLabel((Rectangle){ windowOffset.x + 20, windowOffset.y + 285, 50, 20 }, "Bit Depth:");
GuiToggleGroup((Rectangle){ windowOffset.x + 20, windowOffset.y + 305, 160/3, 25 }, TextJoin(bitDepthTextList, 3, ";"), &bitDepthActive);
GuiEnable();
GuiGroupBox((Rectangle){ windowOffset.x + 10, windowOffset.y + 355, 180, 50 }, "Header");
GuiLabel((Rectangle){ windowOffset.x + 25, windowOffset.y + 370, 27, 25 }, "Size:");
if (GuiValueBox((Rectangle){ windowOffset.x + 55, windowOffset.y + 370, 85, 25 }, NULL, &headerSizeValue, 0, 10000, headerSizeEditMode)) headerSizeEditMode = !headerSizeEditMode;
GuiLabel((Rectangle){ windowOffset.x + 145, windowOffset.y + 370, 30, 25 }, "bytes");
btnLoadPressed = GuiButton((Rectangle){ windowOffset.x + 10, windowOffset.y + 420, 180, 30 }, "Import RAW");
}
//----------------------------------------------------------------------------------
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
if (texture.id != 0) UnloadTexture(texture);
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}

View File

@ -0,0 +1,98 @@
/*******************************************************************************************
*
* raygui - portable window
*
* 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-2024 Ramon Santamaria (@raysan5)
*
**********************************************************************************************/
#include "raylib.h"
#define RAYGUI_IMPLEMENTATION
#include "../../src/raygui.h"
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main()
{
// Initialization
//---------------------------------------------------------------------------------------
const int screenWidth = 800;
const int screenHeight = 600;
SetConfigFlags(FLAG_WINDOW_UNDECORATED);
InitWindow(screenWidth, screenHeight, "raygui - portable window");
// General variables
Vector2 mousePosition = { 0 };
Vector2 windowPosition = { 500, 200 };
Vector2 panOffset = mousePosition;
bool dragWindow = false;
SetWindowPosition(windowPosition.x, windowPosition.y);
bool exitWindow = false;
SetTargetFPS(60);
//--------------------------------------------------------------------------------------
// Main game loop
while (!exitWindow && !WindowShouldClose()) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
mousePosition = GetMousePosition();
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && !dragWindow)
{
if (CheckCollisionPointRec(mousePosition, (Rectangle){ 0, 0, screenWidth, 20 }))
{
windowPosition = GetWindowPosition();
dragWindow = true;
panOffset = mousePosition;
}
}
if (dragWindow)
{
windowPosition.x += (mousePosition.x - panOffset.x);
windowPosition.y += (mousePosition.y - panOffset.y);
SetWindowPosition((int)windowPosition.x, (int)windowPosition.y);
if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) dragWindow = false;
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(RAYWHITE);
exitWindow = GuiWindowBox((Rectangle){ 0, 0, screenWidth, screenHeight }, "#198# PORTABLE WINDOW");
DrawText(TextFormat("Mouse Position: [ %.0f, %.0f ]", mousePosition.x, mousePosition.y), 10, 40, 10, DARKGRAY);
DrawText(TextFormat("Window Position: [ %.0f, %.0f ]", windowPosition.x, windowPosition.y), 10, 60, 10, DARKGRAY);
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}

View File

@ -0,0 +1,868 @@
/*******************************************************************************************
*
* PropertyListControl v1.0.1 - A custom control that displays a set of properties as a list
*
* UPDATES: last updated - 10 march 2020 (v1.0.1)
* v1.0.1 - Made it work with latest raygui version
* - Added `GuiDMSaveProperties()` for saving properties to a text file
* - A `GuiDMLoadProperties()` is planed but not implemented yet
* - Added a section property that can work as a way to group multiple properties
* - Fixed issue with section not having the correct height
* v1.0.0 - Initial release
*
*
* MODULE USAGE:
* #define GUI_PROPERTY_LIST_IMPLEMENTATION
* #include "dm_property_list.h"
*
* INIT: GuiDMProperty props[] = { // initialize a set of properties first
PCOLOR(),
PINT(),
PFLOAT(),
...
};
* DRAW: GuiDMPropertyList(bounds, props, sizeof(props)/sizeof(props[0]), ...);
*
*
* NOTE: This module also contains 2 extra controls used internally by the property list
* - GuiDMValueBox() - a value box that supports displaying float values
* - GuiDMSpinner() - a `better` GuiSpinner()
*
* LICENSE: zlib/libpng
*
* Copyright (c) 2020 Vlad Adrian (@Demizdor - https://github.com/Demizdor).
*
**********************************************************************************************/
#include "raylib.h"
// WARNING: raygui implementation is expected to be defined before including this header
#undef RAYGUI_IMPLEMENTATION
#include "../../src/raygui.h"
#ifndef GUI_PROPERTY_LIST_H
#define GUI_PROPERTY_LIST_H
#ifdef __cplusplus
extern "C" { // Prevents name mangling of functions
#endif
//----------------------------------------------------------------------------------
// Defines and Macros
//----------------------------------------------------------------------------------
// A bunch of usefull macros for modifying the flags of each property
// Set flag `F` of property `P`. `P` must be a pointer!
#define PROP_SET_FLAG(P, F) ((P)->flags |= (F))
// Clear flag `F` of property `P`. `P` must be a pointer!
#define PROP_CLEAR_FLAG(P, F) ((P)->flags &= ~(F))
// Toggles flag `F` of property `P`. `P` must be a pointer!
#define PROP_TOGGLE_FLAG(P, F) ((P)->flags ^= (F))
// Checks if flag `F` of property `P` is set . `P` must be a pointer!
#define PROP_CHECK_FLAG(P, F) ((P)->flags & (F))
// Some usefull macros for creating properties
// Create a bool property with name `N`, flags `F` and value `V`
#define PBOOL(N, F, V) RAYGUI_CLITERAL(GuiDMProperty){N, GUI_PROP_BOOL, F, .value.vbool = V}
// Create a int property with name `N`, flags `F` and value `V`
#define PINT(N, F, V) RAYGUI_CLITERAL(GuiDMProperty){N, GUI_PROP_INT, F, .value.vint = {V,0,0,1}}
// Create a ranged int property within `MIN` and `MAX` with name `N`, flags `F` value `V`.
// Pressing the spinner buttons will increase/decrease the value by `S`.
#define PINT_RANGE(N, F, V, S, MIN, MAX) RAYGUI_CLITERAL(GuiDMProperty){N, GUI_PROP_INT, F, .value.vint = {V,MIN,MAX,S}}
// Create a float property with name `N`, flags `F` and value `V`
#define PFLOAT(N, F, V) RAYGUI_CLITERAL(GuiDMProperty){N, GUI_PROP_FLOAT, F, .value.vfloat = {V,0.f,0.f,1.0f,3}}
// Create a ranged float property within `MIN` and `MAX` with name `N`, flags `F` value `V` with `P` decimal digits to show.
// Pressing the spinner buttons will increase/decrease the value by `S`.
#define PFLOAT_RANGE(N, F, V, S, P, MIN, MAX) RAYGUI_CLITERAL(GuiDMProperty){N, GUI_PROP_FLOAT, F, .value.vfloat = {V,MIN,MAX,S,P}}
// Create a text property with name `N`, flags `F` value `V` and max text size `S`
#define PTEXT(N, F, V, S) RAYGUI_CLITERAL(GuiDMProperty){N, GUI_PROP_TEXT, F, .value.vtext = {V, S} }
// Create a text property with name `N`, flags `F` value `V` and max text size `S`
#define PSELECT(N, F, V, A) RAYGUI_CLITERAL(GuiDMProperty){N, GUI_PROP_SELECT, F, .value.vselect = {V, A} }
// Create a 2D vector property with name `N`, flags `F` and the `X`, `Y` coordinates
#define PVEC2(N, F, X, Y) RAYGUI_CLITERAL(GuiDMProperty){N, GUI_PROP_VECTOR2, F, .value.v2 = {X, Y} }
// Create a 3D vector property with name `N`, flags `F` and the `X`, `Y`, `Z` coordinates
#define PVEC3(N, F, X, Y, Z) RAYGUI_CLITERAL(GuiDMProperty){N, GUI_PROP_VECTOR3, F, .value.v3 = {X, Y, Z} }
// Create a 4D vector property with name `N`, flags `F` and the `X`, `Y`, `Z`, `W` coordinates
#define PVEC4(N, F, X, Y, Z, W) RAYGUI_CLITERAL(GuiDMProperty){N, GUI_PROP_VECTOR4, F, .value.v4 = {X, Y, Z, W} }
// Create a rectangle property with name `N`, flags `F`, `X`, `Y` coordinates and `W` and `H` size
#define PRECT(N, F, X, Y, W, H) RAYGUI_CLITERAL(GuiDMProperty){N, GUI_PROP_RECT, F, .value.vrect = {X, Y, W, H} }
// Create a 3D vector property with name `N`, flags `F` and the `R`, `G`, `B`, `A` channel values
#define PCOLOR(N, F, R, G, B, A) RAYGUI_CLITERAL(GuiDMProperty){N, GUI_PROP_COLOR, F, .value.vcolor = {R, G, B, A} }
// Create a collapsable section named `N` with `F` flags and the next `C` properties as children.
// !! A section cannot hold another section as a child !!
#define PSECTION(N, F, C) RAYGUI_CLITERAL(GuiDMProperty){N, GUI_PROP_SECTION, F, .value.vsection = (C)}
//----------------------------------------------------------------------------------
// Types and Structures Definition
//----------------------------------------------------------------------------------
enum GuiDMPropertyTypes {
GUI_PROP_BOOL = 0,
GUI_PROP_INT,
GUI_PROP_FLOAT,
GUI_PROP_TEXT,
GUI_PROP_SELECT,
GUI_PROP_VECTOR2,
GUI_PROP_VECTOR3,
GUI_PROP_VECTOR4,
GUI_PROP_RECT,
GUI_PROP_COLOR,
GUI_PROP_SECTION,
};
enum GuiDMPropertyFlags {
GUI_PFLAG_COLLAPSED = 1 << 0, // is the property expanded or collapsed?
GUI_PFLAG_DISABLED = 1 << 1, // is this property disabled or enabled?
};
// Data structure for each property
typedef struct {
char* name;
short type;
short flags;
union {
bool vbool;
struct { int val; int min; int max; int step; } vint;
struct { float val; float min; float max; float step; int precision; } vfloat;
struct { char* val; int size; } vtext;
struct { char* val; int active; } vselect;
int vsection;
Vector2 v2;
Vector3 v3;
Vector4 v4;
Rectangle vrect;
Color vcolor;
} value;
} GuiDMProperty;
//----------------------------------------------------------------------------------
// Global Variables Definition
//----------------------------------------------------------------------------------
//...
//----------------------------------------------------------------------------------
// Module Functions Declaration
//----------------------------------------------------------------------------------
// A more advanced `GuiValueBox()` supporting float/int values with specified `precision`, cursor movements, cut/copy/paste and
// other keybord shortcuts. Needed by `GuiDMSpinner()` !!
// `precision` should be between 1-7 for float values and 0 for int values (maybe 15 for doubles but that was not tested)
// WARNING: The bounds should be set big enough else the text will overflow and things will break
// WARNING: Sometimes the last decimal value could differ, this is probably due to rounding
double GuiDMValueBox(Rectangle bounds, double value, double minValue, double maxValue, int precision, bool editMode);
// A more advanced `GuiSpinner()` using `GuiDMValueBox()` for displaying the values.
// This was needed because `GuiSpinner()` can't display float values and editing values is somewhat hard.
// This is by no means perfect but should be more user friendly than the default control provided by raygui.
double GuiDMSpinner(Rectangle bounds, double value, double minValue, double maxValue, double step, int precision, bool editMode);
// Works just like `GuiListViewEx()` but with an array of properties instead of text.
void GuiDMPropertyList(Rectangle bounds, GuiDMProperty* props, int count, int* focus, int* scrollIndex);
// Handy function to save properties to a file. Returns false on failure or true otherwise.
bool GuiDMSaveProperties(const char* file, GuiDMProperty* props, int count);
#ifdef __cplusplus
}
#endif
#endif // GUI_PROPERTY_LIST_H
/***********************************************************************************
*
* GUI_PROPERTY_LIST_IMPLEMENTATION
*
************************************************************************************/
#if defined(GUI_PROPERTY_LIST_IMPLEMENTATION)
#include "../../src/raygui.h"
#include <stdlib.h> // for calloc()
#include <string.h> // for memmove(), strlen()
#include <stdio.h> // for sscanf(), snprintf()
#ifndef __cplusplus
#if __STDC_VERSION__ >= 199901L
#include <stdbool.h> // for bool if >= C99
#endif
#endif
double GuiDMValueBox(Rectangle bounds, double value, double minValue, double maxValue, int precision, bool editMode) {
// FIXME: Hope all those `memmove()` functions are correctly used so we won't leak memory or overflow the buffer !!!
static int framesCounter = 0; // Required for blinking cursor
static int cursor = 0; // Required for tracking the cursor position (only for a single active valuebox)
enum {cursorTimer = 6, maxChars = 31, textPadding = 2};
GuiState state = GuiGetState();
// Make sure value is in range
if(maxValue != minValue){
if(value < minValue) value = minValue;
if(value > maxValue) value = maxValue;
}
char textValue[maxChars + 1] = "\0";
snprintf(textValue, maxChars, "%.*f", precision, value); // NOTE: use `snprintf` here so we don't overflow the buffer
int len = strlen(textValue);
bool valueHasChanged = false;
// Update control
//--------------------------------------------------------------------
if ((state != STATE_DISABLED) && !guiLocked)
{
if (editMode)
{
// Make sure cursor position is correct
if(cursor > len) cursor = len;
if(cursor < 0) cursor = 0;
state = STATE_PRESSED;
framesCounter++;
if(IsKeyPressed(KEY_RIGHT) || (IsKeyDown(KEY_RIGHT) && (framesCounter%cursorTimer == 0))) {
// MOVE CURSOR TO RIGHT
++cursor;
framesCounter = 0;
} else if(IsKeyPressed(KEY_LEFT) || (IsKeyDown(KEY_LEFT) && (framesCounter%cursorTimer == 0))) {
// MOVE CURSOR TO LEFT
--cursor;
framesCounter = 0;
} else if (IsKeyPressed(KEY_BACKSPACE) || (IsKeyDown(KEY_BACKSPACE) && (framesCounter%cursorTimer) == 0)) {
// HANDLE BACKSPACE
if(cursor > 0) {
if(textValue[cursor-1] != '.') {
if(cursor < len )
memmove(&textValue[cursor-1], &textValue[cursor], len-cursor);
textValue[len - 1] = '\0';
valueHasChanged = true;
}
--cursor;
}
framesCounter = 0;
} else if (IsKeyPressed(KEY_DELETE) || (IsKeyDown(KEY_DELETE) && (framesCounter%cursorTimer) == 0)) {
// HANDLE DEL
if(len > 0 && cursor < len && textValue[cursor] != '.') {
memmove(&textValue[cursor], &textValue[cursor+1], len-cursor);
textValue[len] = '\0';
len -= 1;
valueHasChanged = true;
}
} else if (IsKeyPressed(KEY_HOME)) {
// MOVE CURSOR TO START
cursor = 0;
} else if (IsKeyPressed(KEY_END)) {
// MOVE CURSOR TO END
cursor = len;
} else if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_C)) {
// COPY
SetClipboardText(textValue);
} else if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_X)) {
// CUT
SetClipboardText(textValue);
textValue[0] = '\0';
cursor = len = 0;
value = 0.0; // set it to 0 and pretend the value didn't change
} else if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_V)) {
// PASTE
const char* clip = GetClipboardText();
int clipLen = strlen(clip);
clipLen = clipLen > maxChars ? maxChars : clipLen;
memcpy(textValue, clip, clipLen);
len = clipLen;
textValue[len] = '\0';
valueHasChanged = true;
}
else {
// HANDLE KEY PRESS
int key = GetKeyPressed();
if( ((len < maxChars) && (key >= 48) && (key <= 57)) || (key == 46) || (key == 45) ) // only allow 0..9, minus(-) and dot(.)
{
if(precision != 0 && cursor < len) { // when we have decimals we can't insert at the end
memmove(&textValue[cursor], &textValue[cursor-1], len+1-cursor);
textValue[len+1] = '\0';
textValue[cursor] = (char)key;
cursor++;
valueHasChanged = true;
}
else if(precision == 0) {
if(cursor < len) memmove(&textValue[cursor], &textValue[cursor-1], len+1-cursor);
len += 1;
textValue[len+1] = '\0';
textValue[cursor] = (char)key;
cursor++;
valueHasChanged = true;
}
}
}
// Make sure cursor position is correct
if(cursor > len) cursor = len;
if(cursor < 0) cursor = 0;
}
else
{
if (CheckCollisionPointRec(GetMousePosition(), bounds))
{
state = STATE_FOCUSED;
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) framesCounter = 0;
}
}
}
//--------------------------------------------------------------------
// Draw control
//--------------------------------------------------------------------
DrawRectangleLinesEx(bounds, GuiGetStyle(VALUEBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(VALUEBOX, BORDER + (state*3))), guiAlpha));
Rectangle textBounds = {bounds.x + GuiGetStyle(VALUEBOX, BORDER_WIDTH) + textPadding, bounds.y + GuiGetStyle(VALUEBOX, BORDER_WIDTH),
bounds.width - 2*(GuiGetStyle(VALUEBOX, BORDER_WIDTH) + textPadding), bounds.height - 2*GuiGetStyle(VALUEBOX, BORDER_WIDTH)};
int textWidth = GuiGetTextWidth(textValue);
if(textWidth > textBounds.width) textBounds.width = textWidth;
if (state == STATE_PRESSED)
{
DrawRectangle(bounds.x + GuiGetStyle(VALUEBOX, BORDER_WIDTH), bounds.y + GuiGetStyle(VALUEBOX, BORDER_WIDTH), bounds.width - 2*GuiGetStyle(VALUEBOX, BORDER_WIDTH), bounds.height - 2*GuiGetStyle(VALUEBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(VALUEBOX, BASE_COLOR_PRESSED)), guiAlpha));
// Draw blinking cursor
// NOTE: ValueBox internal text is always centered
if (editMode && ((framesCounter/20)%2 == 0)) {
// Measure text until the cursor
int textWidthCursor = -2;
if(cursor > 0) {
char c = textValue[cursor];
textValue[cursor] = '\0';
textWidthCursor = GuiGetTextWidth(textValue);
textValue[cursor] = c;
}
//DrawRectangle(bounds.x + textWidthCursor + textPadding + 2, bounds.y + 2*GuiGetStyle(VALUEBOX, BORDER_WIDTH), 1, bounds.height - 4*GuiGetStyle(VALUEBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(VALUEBOX, BORDER_COLOR_PRESSED)), guiAlpha));
DrawRectangle(bounds.x + textWidthCursor + (int)((bounds.width - textWidth - textPadding)/2.0f) + 2, bounds.y + 2*GuiGetStyle(VALUEBOX, BORDER_WIDTH), 1, bounds.height - 4*GuiGetStyle(VALUEBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(VALUEBOX, BORDER_COLOR_PRESSED)), guiAlpha));
}
}
else if (state == STATE_DISABLED)
{
DrawRectangle(bounds.x + GuiGetStyle(VALUEBOX, BORDER_WIDTH), bounds.y + GuiGetStyle(VALUEBOX, BORDER_WIDTH), bounds.width - 2*GuiGetStyle(VALUEBOX, BORDER_WIDTH), bounds.height - 2*GuiGetStyle(VALUEBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(VALUEBOX, BASE_COLOR_DISABLED)), guiAlpha));
}
GuiDrawText(textValue, textBounds, TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(VALUEBOX, TEXT + (state*3))), guiAlpha));
value = valueHasChanged ? strtod(textValue, NULL) : value;
// Make sure value is in range
if(maxValue != minValue){
if(value < minValue) value = minValue;
if(value > maxValue) value = maxValue;
}
return value;
}
double GuiDMSpinner(Rectangle bounds, double value, double minValue, double maxValue, double step, int precision, bool editMode) {
GuiState state = GuiGetState();
Rectangle spinner = { bounds.x + GuiGetStyle(VALUEBOX, SPINNER_BUTTON_WIDTH) + GuiGetStyle(VALUEBOX, SPINNER_BUTTON_SPACING), bounds.y,
bounds.width - 2*(GuiGetStyle(VALUEBOX, SPINNER_BUTTON_WIDTH) + GuiGetStyle(VALUEBOX, SPINNER_BUTTON_SPACING)), bounds.height };
Rectangle leftButtonBound = { (float)bounds.x, (float)bounds.y, (float)GuiGetStyle(VALUEBOX, SPINNER_BUTTON_WIDTH), (float)bounds.height };
Rectangle rightButtonBound = { (float)bounds.x + bounds.width - GuiGetStyle(VALUEBOX, SPINNER_BUTTON_WIDTH),
(float)bounds.y, (float)GuiGetStyle(VALUEBOX, SPINNER_BUTTON_WIDTH), (float)bounds.height };
// Update control
//--------------------------------------------------------------------
if ((state != STATE_DISABLED) && !guiLocked)
{
Vector2 mousePoint = GetMousePosition();
// Check spinner state
if (CheckCollisionPointRec(mousePoint, bounds))
{
if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED;
else state = STATE_FOCUSED;
}
}
//--------------------------------------------------------------------
// Draw control
//--------------------------------------------------------------------
// Draw value selector custom buttons
// NOTE: BORDER_WIDTH and TEXT_ALIGNMENT forced values
int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH);
int tempTextAlign = GuiGetStyle(BUTTON, TEXT_ALIGNMENT);
GuiSetStyle(BUTTON, BORDER_WIDTH, GuiGetStyle(VALUEBOX, BORDER_WIDTH));
GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER);
#if defined(RAYGUI_SUPPORT_RICONS)
if (GuiButton(leftButtonBound, GuiIconText(RICON_ARROW_LEFT_FILL, NULL))) value -= step;
if (GuiButton(rightButtonBound, GuiIconText(RICON_ARROW_RIGHT_FILL, NULL))) value += step;
#else
if (GuiButton(leftButtonBound, "<")) value -= step;
if (GuiButton(rightButtonBound, ">")) value += step;
#endif
GuiSetStyle(BUTTON, TEXT_ALIGNMENT, tempTextAlign);
GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth);
value = GuiDMValueBox(spinner, value, minValue, maxValue, precision, editMode);
return value;
}
void GuiDMPropertyList(Rectangle bounds, GuiDMProperty* props, int count, int* focus, int* scrollIndex) {
#ifdef RAYGUI_SUPPORT_RICONS
#define PROPERTY_COLLAPSED_ICON "#120#"
#define PROPERTY_EXPANDED_ICON "#121#"
#else
#define PROPERTY_COLLAPSED_ICON "+"
#define PROPERTY_EXPANDED_ICON "-"
#endif
#define PROPERTY_PADDING 6
#define PROPERTY_ICON_SIZE 16
#define PROPERTY_DECIMAL_DIGITS 3 //how many digits to show (used only for the vector properties)
// NOTE: Using ListView style for everything !!
GuiState state = GuiGetState();
int propFocused = (focus == NULL)? -1 : *focus;
int scroll = *scrollIndex > 0 ? 0 : *scrollIndex; // NOTE: scroll should always be negative or 0
// Each property occupies a certain number of slots, highly synchronized with the properties enum (GUI_PROP_BOOL ... GUI_PROP_SECTION)
// NOTE: If you add a custom property type make sure to add the number of slots it occupies here !!
const int propSlots[] = {1,1,1,2,1,3,4,5,5,5,1};
Rectangle absoluteBounds = {0}; // total bounds for all of the properties (unclipped)
// We need to loop over all the properties to get total height so we can see if we need a scrollbar or not
for(int p=0; p<count; ++p) {
// Calculate height of this property (properties can occupy 1 or more slots)
int height = GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT);
if(props[p].type < (sizeof(propSlots)/sizeof(propSlots[0]))) {
if(!PROP_CHECK_FLAG(&props[p], GUI_PFLAG_COLLAPSED)) height = propSlots[props[p].type]*GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT);
if(props[p].type == GUI_PROP_SECTION && (PROP_CHECK_FLAG(&props[p], GUI_PFLAG_COLLAPSED))) p += props[p].value.vsection; // skip slots for collapsed section
}
absoluteBounds.height += height+1;
}
// Check if we need a scrollbar and adjust bounds when necesary
bool useScrollBar = absoluteBounds.height > bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) ? true : false;
if(!useScrollBar && scroll != 0) scroll = 0; // make sure scroll is 0 when there's no scrollbar
Rectangle scrollBarBounds = {bounds.x + GuiGetStyle(LISTVIEW, BORDER_WIDTH), bounds.y + GuiGetStyle(LISTVIEW, BORDER_WIDTH),
GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH), bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH)};
absoluteBounds.x = bounds.x + GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING) + GuiGetStyle(DEFAULT, BORDER_WIDTH);
absoluteBounds.y = bounds.y + GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING) + GuiGetStyle(DEFAULT, BORDER_WIDTH) + scroll;
absoluteBounds.width = bounds.width - 2*(GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING) + GuiGetStyle(DEFAULT, BORDER_WIDTH));
if(useScrollBar) {
if(GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)
absoluteBounds.x += GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH); // scrollbar is on the LEFT, adjust bounds
else
scrollBarBounds.x = bounds.x + bounds.width - GuiGetStyle(LISTVIEW, BORDER_WIDTH) - GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH); // scrollbar is on the RIGHT
absoluteBounds.width -= GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH); // adjust width to fit the scrollbar
}
int maxScroll = absoluteBounds.height + 2*(GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING) + GuiGetStyle(DEFAULT, BORDER_WIDTH))-bounds.height;
// Update control
//--------------------------------------------------------------------
Vector2 mousePos = GetMousePosition();
// NOTE: most of the update code is actually done in the draw control section
if ((state != STATE_DISABLED) && !guiLocked) {
if(!CheckCollisionPointRec(mousePos, bounds)) {
propFocused = -1;
}
if (useScrollBar)
{
int wheelMove = GetMouseWheelMove();
scroll += wheelMove*count;
if(-scroll > maxScroll) scroll = -maxScroll;
}
}
//--------------------------------------------------------------------
// Draw control
//--------------------------------------------------------------------
DrawRectangleRec(bounds, Fade(GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR)), guiAlpha) ); // Draw background
DrawRectangleLinesEx(bounds, GuiGetStyle(DEFAULT, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER + state*3)), guiAlpha)); // Draw border
BeginScissorMode(absoluteBounds.x, bounds.y + GuiGetStyle(DEFAULT, BORDER_WIDTH), absoluteBounds.width, bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH));
int currentHeight = 0;
for(int p=0; p<count; ++p)
{
int height = GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT);
if(props[p].type < (sizeof(propSlots)/sizeof(propSlots[0])) && !PROP_CHECK_FLAG(&props[p], GUI_PFLAG_COLLAPSED) )
height = propSlots[props[p].type]*GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT); // get property height based on how many slots it occupies
// Even with scissor mode on, draw only properties that we can see (comment out both BeginScissorMode() / EndScissorMode() to see this)
if(absoluteBounds.y + currentHeight + height >= bounds.y && absoluteBounds.y + currentHeight <= bounds.y + bounds.height)
{
Rectangle propBounds = {absoluteBounds.x, absoluteBounds.y + currentHeight, absoluteBounds.width, height};
Color textColor = Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_NORMAL)), guiAlpha);
int propState = STATE_NORMAL;
// Get the state of this property and do some initial drawing
if(PROP_CHECK_FLAG(&props[p], GUI_PFLAG_DISABLED)) {
propState = STATE_DISABLED;
propBounds.height += 1;
DrawRectangleRec(propBounds, Fade(GetColor(GuiGetStyle(LISTVIEW, BASE_COLOR_DISABLED)), guiAlpha));
propBounds.height -= 1;
textColor = Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_DISABLED)), guiAlpha);
} else {
if(CheckCollisionPointRec(mousePos, propBounds) && !guiLocked) {
if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) {
propState = STATE_PRESSED;
//DrawRectangleRec(propRect, Fade(GetColor(GuiGetStyle(LISTVIEW, BASE_COLOR_PRESSED)), guiAlpha));
textColor = Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_PRESSED)), guiAlpha);
} else {
propState = STATE_FOCUSED;
propFocused = p;
//DrawRectangleRec(propRect, Fade(GetColor(GuiGetStyle(LISTVIEW, BASE_COLOR_FOCUSED)), guiAlpha));
textColor = Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_FOCUSED)), guiAlpha);
}
} else propState = STATE_NORMAL;
}
if(propState == STATE_DISABLED) GuiSetState(propState);
switch(props[p].type)
{
case GUI_PROP_BOOL: {
// draw property name
GuiDrawText(props[p].name, (Rectangle){propBounds.x + PROPERTY_PADDING, propBounds.y, propBounds.width/2-PROPERTY_PADDING, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)}, TEXT_ALIGN_LEFT, textColor);
if(propState == STATE_PRESSED) props[p].value.vbool = !props[p].value.vbool; // toggle the property value when clicked
// draw property value
const bool locked = guiLocked;
GuiLock(); // lock the checkbox since we changed the value manually
GuiCheckBox((Rectangle){propBounds.x+propBounds.width/2, propBounds.y + height/4, height/2, height/2}, props[p].value.vbool? "Yes" : "No", &props[p].value.vbool);
if(!locked) GuiUnlock(); // only unlock when needed
} break;
case GUI_PROP_INT:
// draw property name
GuiDrawText(props[p].name, (Rectangle){propBounds.x + PROPERTY_PADDING, propBounds.y, propBounds.width/2-PROPERTY_PADDING, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)}, TEXT_ALIGN_LEFT, textColor);
// draw property value
props[p].value.vint.val = GuiDMSpinner((Rectangle){propBounds.x+propBounds.width/2, propBounds.y + 1, propBounds.width/2, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) - 2},
props[p].value.vint.val, props[p].value.vint.min, props[p].value.vint.max, props[p].value.vint.step, 0, (propState == STATE_FOCUSED) );
break;
case GUI_PROP_FLOAT:
// draw property name
GuiDrawText(props[p].name, (Rectangle){propBounds.x + PROPERTY_PADDING, propBounds.y, propBounds.width/2-PROPERTY_PADDING, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)}, TEXT_ALIGN_LEFT, textColor);
// draw property value
props[p].value.vfloat.val = GuiDMSpinner((Rectangle){propBounds.x+propBounds.width/2, propBounds.y + 1, propBounds.width/2, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) - 2},
props[p].value.vfloat.val, props[p].value.vfloat.min, props[p].value.vfloat.max, props[p].value.vfloat.step, props[p].value.vfloat.precision, (propState == STATE_FOCUSED) );
break;
case GUI_PROP_TEXT: {
Rectangle titleBounds = { propBounds.x, propBounds.y, propBounds.width, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) };
// Collapse/Expand property on click
if((propState == STATE_PRESSED) && CheckCollisionPointRec(mousePos, titleBounds))
PROP_TOGGLE_FLAG(&props[p], GUI_PFLAG_COLLAPSED);
// draw property name
GuiDrawText(PROP_CHECK_FLAG(&props[p], GUI_PFLAG_COLLAPSED) ? PROPERTY_COLLAPSED_ICON : PROPERTY_EXPANDED_ICON, titleBounds, TEXT_ALIGN_LEFT, textColor);
GuiDrawText(props[p].name, (Rectangle){propBounds.x+PROPERTY_ICON_SIZE+PROPERTY_PADDING, propBounds.y, propBounds.width-PROPERTY_ICON_SIZE-PROPERTY_PADDING, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)}, TEXT_ALIGN_LEFT, textColor);
GuiDrawText(TextFormat("%i/%i", strlen(props[p].value.vtext.val), props[p].value.vtext.size), (Rectangle){propBounds.x+propBounds.width/2, propBounds.y + 1, propBounds.width/2, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) - 2}, TEXT_ALIGN_LEFT, textColor);
// draw property value
if(!PROP_CHECK_FLAG(&props[p], GUI_PFLAG_COLLAPSED))
GuiTextBox((Rectangle){propBounds.x, propBounds.y + GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)+1, propBounds.width, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)-2}, props[p].value.vtext.val, props[p].value.vtext.size, (propState == STATE_FOCUSED));
} break;
case GUI_PROP_SELECT: {
// TODO: Create a custom dropdownbox control instead of using the raygui combobox
// draw property name
GuiDrawText(props[p].name, (Rectangle){propBounds.x + PROPERTY_PADDING, propBounds.y, propBounds.width/2-PROPERTY_PADDING, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)}, TEXT_ALIGN_LEFT, textColor);
// draw property value
GuiComboBox((Rectangle){propBounds.x+propBounds.width/2, propBounds.y + 1, propBounds.width/2, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) - 2},
props[p].value.vselect.val, &props[p].value.vselect.active);
} break;
case GUI_PROP_VECTOR2: case GUI_PROP_VECTOR3: case GUI_PROP_VECTOR4: {
Rectangle titleBounds = { propBounds.x, propBounds.y, propBounds.width, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) };
// Collapse/Expand property on click
if((propState == STATE_PRESSED) && CheckCollisionPointRec(mousePos, titleBounds))
PROP_TOGGLE_FLAG(&props[p], GUI_PFLAG_COLLAPSED);
const char* fmt = "";
if(props[p].type == GUI_PROP_VECTOR2) fmt = TextFormat("[%.0f, %.0f]", props[p].value.v2.x, props[p].value.v2.y);
else if(props[p].type == GUI_PROP_VECTOR3) fmt = TextFormat("[%.0f, %.0f, %.0f]", props[p].value.v3.x, props[p].value.v3.y, props[p].value.v3.z);
else fmt = TextFormat("[%.0f, %.0f, %.0f, %.0f]", props[p].value.v4.x, props[p].value.v4.y, props[p].value.v4.z, props[p].value.v4.w);
// draw property name
GuiDrawText(PROP_CHECK_FLAG(&props[p], GUI_PFLAG_COLLAPSED) ? PROPERTY_COLLAPSED_ICON : PROPERTY_EXPANDED_ICON, titleBounds, TEXT_ALIGN_LEFT, textColor);
GuiDrawText(props[p].name, (Rectangle){propBounds.x+PROPERTY_ICON_SIZE+PROPERTY_PADDING, propBounds.y, propBounds.width-PROPERTY_ICON_SIZE-PROPERTY_PADDING, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)}, TEXT_ALIGN_LEFT, textColor);
GuiDrawText(fmt, (Rectangle){propBounds.x+propBounds.width/2, propBounds.y + 1, propBounds.width/2, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) - 2}, TEXT_ALIGN_LEFT, textColor);
// draw X, Y, Z, W values (only when expanded)
if(!PROP_CHECK_FLAG(&props[p], GUI_PFLAG_COLLAPSED)) {
Rectangle slotBounds = { propBounds.x, propBounds.y+GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)+1, propBounds.width, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)-2};
Rectangle lblBounds = { propBounds.x+PROPERTY_PADDING, slotBounds.y, GuiGetTextWidth("A"), slotBounds.height};
Rectangle valBounds = { lblBounds.x+lblBounds.width+PROPERTY_PADDING, slotBounds.y, propBounds.width-lblBounds.width-2*PROPERTY_PADDING, slotBounds.height};
GuiDrawText("X", lblBounds, TEXT_ALIGN_LEFT, textColor);
props[p].value.v2.x = GuiDMSpinner(valBounds, props[p].value.v2.x, 0.0, 0.0, 1.0, PROPERTY_DECIMAL_DIGITS, (propState == STATE_FOCUSED) && CheckCollisionPointRec(mousePos, slotBounds) );
slotBounds.y += GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT);
lblBounds.y = valBounds.y = slotBounds.y;
GuiDrawText("Y", lblBounds, TEXT_ALIGN_LEFT, textColor);
props[p].value.v2.y = GuiDMSpinner(valBounds, props[p].value.v2.y, 0.0, 0.0, 1.0, PROPERTY_DECIMAL_DIGITS, (propState == STATE_FOCUSED) && CheckCollisionPointRec(mousePos, slotBounds) );
slotBounds.y += GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT);
lblBounds.y = valBounds.y = slotBounds.y;
if(props[p].type >= GUI_PROP_VECTOR3) {
GuiDrawText("Z", lblBounds, TEXT_ALIGN_LEFT, textColor);
props[p].value.v3.z = GuiDMSpinner(valBounds, props[p].value.v3.z, 0.0, 0.0, 1.0, PROPERTY_DECIMAL_DIGITS, (propState == STATE_FOCUSED) && CheckCollisionPointRec(mousePos, slotBounds) );
slotBounds.y += GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT);
lblBounds.y = valBounds.y = slotBounds.y;
}
if(props[p].type >= GUI_PROP_VECTOR4) {
GuiDrawText("W", lblBounds, TEXT_ALIGN_LEFT, textColor);
props[p].value.v4.w = GuiDMSpinner(valBounds, props[p].value.v4.w, 0.0, 0.0, 1.0, PROPERTY_DECIMAL_DIGITS, (propState == STATE_FOCUSED) && CheckCollisionPointRec(mousePos, slotBounds) );
}
}
} break;
case GUI_PROP_RECT:{
Rectangle titleBounds = { propBounds.x, propBounds.y, propBounds.width, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) };
// Collapse/Expand property on click
if((propState == STATE_PRESSED) && CheckCollisionPointRec(mousePos, titleBounds))
PROP_TOGGLE_FLAG(&props[p], GUI_PFLAG_COLLAPSED);
// draw property name
GuiDrawText(PROP_CHECK_FLAG(&props[p], GUI_PFLAG_COLLAPSED) ? PROPERTY_COLLAPSED_ICON : PROPERTY_EXPANDED_ICON, titleBounds, TEXT_ALIGN_LEFT, textColor);
GuiDrawText(props[p].name, (Rectangle){propBounds.x+PROPERTY_ICON_SIZE+PROPERTY_PADDING, propBounds.y, propBounds.width-PROPERTY_ICON_SIZE-PROPERTY_PADDING, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)}, TEXT_ALIGN_LEFT, textColor);
GuiDrawText(TextFormat("[%.0f, %.0f, %.0f, %.0f]", props[p].value.vrect.x, props[p].value.vrect.y, props[p].value.vrect.width, props[p].value.vrect.height),
(Rectangle){propBounds.x+propBounds.width/2, propBounds.y + 1, propBounds.width/2, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) - 2}, TEXT_ALIGN_LEFT, textColor);
// draw X, Y, Width, Height values (only when expanded)
if(!PROP_CHECK_FLAG(&props[p], GUI_PFLAG_COLLAPSED)) {
Rectangle slotBounds = { propBounds.x, propBounds.y+GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)+1, propBounds.width, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)-2};
Rectangle lblBounds = { propBounds.x+PROPERTY_PADDING, slotBounds.y, GuiGetTextWidth("Height"), slotBounds.height};
Rectangle valBounds = { lblBounds.x+lblBounds.width+PROPERTY_PADDING, slotBounds.y, propBounds.width-lblBounds.width-2*PROPERTY_PADDING, slotBounds.height};
GuiDrawText("X", lblBounds, TEXT_ALIGN_LEFT, textColor);
props[p].value.vrect.x = GuiDMSpinner(valBounds, props[p].value.vrect.x, 0.0, 0.0, 1.0, 0, (propState == STATE_FOCUSED) && CheckCollisionPointRec(mousePos, slotBounds) );
slotBounds.y += GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT);
lblBounds.y = valBounds.y = slotBounds.y;
GuiDrawText("Y", lblBounds, TEXT_ALIGN_LEFT, textColor);
props[p].value.vrect.y = GuiDMSpinner(valBounds, props[p].value.vrect.y, 0.0, 0.0, 1.0, 0, (propState == STATE_FOCUSED) && CheckCollisionPointRec(mousePos, slotBounds) );
slotBounds.y += GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT);
lblBounds.y = valBounds.y = slotBounds.y;
GuiDrawText("Width", lblBounds, TEXT_ALIGN_LEFT, textColor);
props[p].value.vrect.width = GuiDMSpinner(valBounds, props[p].value.vrect.width, 0.0, 0.0, 1.0, 0, (propState == STATE_FOCUSED) && CheckCollisionPointRec(mousePos, slotBounds) );
slotBounds.y += GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT);
lblBounds.y = valBounds.y = slotBounds.y;
GuiDrawText("Height", lblBounds, TEXT_ALIGN_LEFT, textColor);
props[p].value.vrect.height = GuiDMSpinner(valBounds, props[p].value.vrect.height, 0.0, 0.0, 1.0, 0, (propState == STATE_FOCUSED) && CheckCollisionPointRec(mousePos, slotBounds) );
}
} break;
case GUI_PROP_COLOR: {
Rectangle titleBounds = { propBounds.x, propBounds.y, propBounds.width, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) };
// Collapse/Expand property on click
if((propState == STATE_PRESSED) && CheckCollisionPointRec(mousePos, titleBounds))
PROP_TOGGLE_FLAG(&props[p], GUI_PFLAG_COLLAPSED);
// draw property name
GuiDrawText(PROP_CHECK_FLAG(&props[p], GUI_PFLAG_COLLAPSED) ? PROPERTY_COLLAPSED_ICON : PROPERTY_EXPANDED_ICON, titleBounds, TEXT_ALIGN_LEFT, textColor);
GuiDrawText(props[p].name, (Rectangle){propBounds.x+PROPERTY_ICON_SIZE+PROPERTY_PADDING, propBounds.y+1, propBounds.width-PROPERTY_ICON_SIZE-PROPERTY_PADDING, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)-2}, TEXT_ALIGN_LEFT, textColor);
DrawLineEx( (Vector2){propBounds.x+propBounds.width/2, propBounds.y + GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) - 5}, (Vector2){propBounds.x+propBounds.width, propBounds.y + GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) - 5}, 6.0f, props[p].value.vcolor);
const char* fmt = TextFormat("#%02X%02X%02X%02X", props[p].value.vcolor.r, props[p].value.vcolor.g, props[p].value.vcolor.b, props[p].value.vcolor.a);
char clip[10] = "\0";
memcpy(clip, fmt, 10*sizeof(char)); // copy to temporary buffer since we can't be sure when TextFormat() will be called again and our text will be overwritten
GuiDrawText(fmt, (Rectangle){propBounds.x+propBounds.width/2, propBounds.y + 1, propBounds.width/2, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) - 2}, TEXT_ALIGN_LEFT, textColor);
// draw R, G, B, A values (only when expanded)
if(!PROP_CHECK_FLAG(&props[p], GUI_PFLAG_COLLAPSED)) {
Rectangle slotBounds = { propBounds.x, propBounds.y+GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)+1, propBounds.width, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)-2};
Rectangle lblBounds = { propBounds.x+PROPERTY_PADDING, slotBounds.y, GuiGetTextWidth("A"), slotBounds.height};
Rectangle valBounds = { lblBounds.x+lblBounds.width+PROPERTY_PADDING, slotBounds.y, GuiGetTextWidth("000000"), slotBounds.height};
Rectangle sbarBounds = { valBounds.x + valBounds.width + PROPERTY_PADDING, slotBounds.y, slotBounds.width - 3*PROPERTY_PADDING - lblBounds.width - valBounds.width, slotBounds.height };
if(sbarBounds.width <= GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)-2) valBounds.width = propBounds.width-lblBounds.width-2*PROPERTY_PADDING; // hide slider when no space
// save current scrollbar style
int tmpSliderPadding = GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING);
int tmpPadding = GuiGetStyle(SCROLLBAR, SCROLL_PADDING);
int tmpBorder = GuiGetStyle(SCROLLBAR, BORDER_WIDTH);
int tmpSliderSize = GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE);
int tmpArrows = GuiGetStyle(SCROLLBAR, ARROWS_VISIBLE);
Color tmpBG1 = GetColor(GuiGetStyle(DEFAULT, BORDER_COLOR_DISABLED));
// set a custom scrollbar style
GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING, 3);
GuiSetStyle(SCROLLBAR, SCROLL_PADDING, 10);
GuiSetStyle(SCROLLBAR, BORDER_WIDTH, 0);
GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, 6);
GuiSetStyle(SCROLLBAR, ARROWS_VISIBLE, 0);
GuiSetStyle(DEFAULT, BORDER_COLOR_DISABLED, GuiGetStyle(DEFAULT, BACKGROUND_COLOR)); // disable scrollbar background
GuiDrawText("R", lblBounds, TEXT_ALIGN_LEFT, textColor);
props[p].value.vcolor.r = GuiDMValueBox(valBounds, props[p].value.vcolor.r, 0.0, 255.0, 0, (propState == STATE_FOCUSED) && CheckCollisionPointRec(mousePos, slotBounds) );
if(sbarBounds.width > GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)-2)
props[p].value.vcolor.r = GuiScrollBar(sbarBounds, props[p].value.vcolor.r, 0, 255);
slotBounds.y += GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT);
lblBounds.y = valBounds.y = sbarBounds.y = slotBounds.y;
GuiDrawText("G", lblBounds, TEXT_ALIGN_LEFT, textColor);
props[p].value.vcolor.g = GuiDMValueBox(valBounds, props[p].value.vcolor.g, 0.0, 255.0, 0, (propState == STATE_FOCUSED) && CheckCollisionPointRec(mousePos, slotBounds) );
if(sbarBounds.width > GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)-2)
props[p].value.vcolor.g = GuiScrollBar(sbarBounds, props[p].value.vcolor.g, 0, 255);
slotBounds.y += GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT);
lblBounds.y = valBounds.y = sbarBounds.y = slotBounds.y;
GuiDrawText("B", lblBounds, TEXT_ALIGN_LEFT, textColor);
props[p].value.vcolor.b = GuiDMValueBox(valBounds, props[p].value.vcolor.b, 0.0, 255.0, 0, (propState == STATE_FOCUSED) && CheckCollisionPointRec(mousePos, slotBounds) );
if(sbarBounds.width > GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)-2)
props[p].value.vcolor.b = GuiScrollBar(sbarBounds, props[p].value.vcolor.b, 0, 255);
slotBounds.y += GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT);
lblBounds.y = valBounds.y = sbarBounds.y = slotBounds.y;
GuiDrawText("A", lblBounds, TEXT_ALIGN_LEFT, textColor);
props[p].value.vcolor.a = GuiDMValueBox(valBounds, props[p].value.vcolor.a, 0.0, 255.0, 0, (propState == STATE_FOCUSED) && CheckCollisionPointRec(mousePos, slotBounds) );
if(sbarBounds.width > GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)-2)
props[p].value.vcolor.a = GuiScrollBar(sbarBounds, props[p].value.vcolor.a, 0, 255);
// load saved scrollbar style
GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING, tmpSliderPadding);
GuiSetStyle(SCROLLBAR, SCROLL_PADDING, tmpPadding);
GuiSetStyle(SCROLLBAR, BORDER_WIDTH, tmpBorder);
GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, tmpSliderSize);
GuiSetStyle(SCROLLBAR, ARROWS_VISIBLE, tmpArrows);
GuiSetStyle(DEFAULT, BORDER_COLOR_DISABLED, ColorToInt(tmpBG1));
}
// support COPY/PASTE (need to do this here since GuiDMValueBox() also has COPY/PASTE so we need to overwrite it)
if((propState == STATE_FOCUSED)) {
if(IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_C))
SetClipboardText(clip);
else if(IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_V)){
unsigned int a = props[p].value.vcolor.a, r = props[p].value.vcolor.r, g=props[p].value.vcolor.g, b=props[p].value.vcolor.b;
sscanf(GetClipboardText(), "#%02X%02X%02X%02X", &r, &g, &b, &a);
props[p].value.vcolor.r=r; props[p].value.vcolor.g=g; props[p].value.vcolor.b=b; props[p].value.vcolor.a=a;
}
}
} break;
case GUI_PROP_SECTION: {
Rectangle titleBounds = { propBounds.x, propBounds.y, propBounds.width, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) };
// Collapse/Expand section on click
if( (propState == STATE_PRESSED) && CheckCollisionPointRec(mousePos, titleBounds) )
PROP_TOGGLE_FLAG(&props[p], GUI_PFLAG_COLLAPSED);
if(!PROP_CHECK_FLAG(&props[p], GUI_PFLAG_COLLAPSED)) {
GuiDrawText(PROPERTY_EXPANDED_ICON, titleBounds, TEXT_ALIGN_LEFT, textColor);
GuiDrawText(props[p].name, (Rectangle){propBounds.x+PROPERTY_ICON_SIZE+PROPERTY_PADDING, propBounds.y, propBounds.width-PROPERTY_ICON_SIZE-PROPERTY_PADDING, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)}, TEXT_ALIGN_CENTER, textColor);
} else {
GuiDrawText(PROPERTY_COLLAPSED_ICON, titleBounds, TEXT_ALIGN_LEFT, textColor);
GuiDrawText(TextFormat("%s [%i]", props[p].name, props[p].value.vsection), (Rectangle){propBounds.x+PROPERTY_ICON_SIZE+PROPERTY_PADDING, propBounds.y, propBounds.width-PROPERTY_ICON_SIZE-PROPERTY_PADDING, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)}, TEXT_ALIGN_CENTER, textColor);
}
} break;
// NOTE: Add your custom property here !!
default: {
// draw property name
GuiDrawText(props[p].name, (Rectangle){propBounds.x + PROPERTY_PADDING, propBounds.y, propBounds.width/2-PROPERTY_PADDING, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT)}, TEXT_ALIGN_LEFT, textColor);
// draw property type
GuiDrawText(TextFormat("TYPE %i", props[p].type), (Rectangle){propBounds.x+propBounds.width/2, propBounds.y + 1, propBounds.width/2, GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) - 2}, TEXT_ALIGN_LEFT, textColor);
} break;
} // end of switch()
GuiSetState(state);
}
currentHeight += height + 1;
// Skip collapsed section. Don't put this code inside the switch !!
if(props[p].type == GUI_PROP_SECTION && (PROP_CHECK_FLAG(&props[p], GUI_PFLAG_COLLAPSED))) p += props[p].value.vsection;
} // end for
EndScissorMode();
if(useScrollBar) {
scroll = -GuiScrollBar(scrollBarBounds, -scroll, 0, maxScroll);
*scrollIndex = scroll;
}
//--------------------------------------------------------------------
if(focus != NULL) *focus = propFocused;
}
bool GuiDMSaveProperties(const char* file, GuiDMProperty* props, int count) {
if(file == NULL || props == NULL) return false;
if(count == 0) return true;
FILE* f = fopen(file, "w");
if(f == NULL) return false;
// write header
fprintf(f, "#\n# Property types:\n"
"# b <name> <flags> <value> // Bool\n"
"# i <name> <flags> <value> <min> <max> <step> // Int\n"
"# f <name> <flags> <value> <min> <max> <step> <precision> // Float\n"
"# t <name> <flags> <value> <edit_length> // Text\n"
"# l <name> <flags> <value> <active> // Select\n"
"# g <name> <flags> <value> // Section (Group)\n"
"# v2 <name> <flags> <x> <y> // Vector 2D\n"
"# v3 <name> <flags> <x> <y> <z> // Vector 3D\n"
"# v4 <name> <flags> <x> <y> <z> <w> // Vector 4D\n"
"# r <name> <flags> <x> <y> <width> <height> // Rectangle\n"
"# c <name> <flags> <r> <g> <b> <a> // Color\n"
"#\n\n");
for(int p=0; p<count; ++p)
{
switch(props[p].type) {
case GUI_PROP_BOOL: fprintf(f, "b %s %i %i\n", props[p].name, (int)props[p].flags, (int)props[p].value.vbool);
break;
case GUI_PROP_INT: fprintf(f, "i %s %i %i %i %i %i\n", props[p].name, (int)props[p].flags, props[p].value.vint.val, props[p].value.vint.min,
props[p].value.vint.max, props[p].value.vint.step);
break;
case GUI_PROP_FLOAT: fprintf(f, "f %s %i %f %f %f %f %i\n", props[p].name, (int)props[p].flags, props[p].value.vfloat.val, props[p].value.vfloat.min,
props[p].value.vfloat.max, props[p].value.vfloat.step, props[p].value.vfloat.precision);
break;
case GUI_PROP_TEXT: fprintf(f, "t %s %i %s %i\n", props[p].name, (int)props[p].flags, props[p].value.vtext.val, props[p].value.vtext.size);
break;
case GUI_PROP_SELECT: fprintf(f, "l %s %i %s %i\n", props[p].name, (int)props[p].flags, props[p].value.vselect.val, props[p].value.vselect.active);
break;
case GUI_PROP_SECTION: fprintf(f, "g %s %i %i\n", props[p].name, (int)props[p].flags, props[p].value.vsection);
break;
case GUI_PROP_VECTOR2: fprintf(f, "v2 %s %i %f %f\n", props[p].name, (int)props[p].flags, props[p].value.v2.x, props[p].value.v2.y);
break;
case GUI_PROP_VECTOR3: fprintf(f, "v3 %s %i %f %f %f\n", props[p].name, (int)props[p].flags, props[p].value.v3.x, props[p].value.v3.y, props[p].value.v3.z);
break;
case GUI_PROP_VECTOR4: fprintf(f, "v4 %s %i %f %f %f %f\n", props[p].name, (int)props[p].flags, props[p].value.v4.x, props[p].value.v4.y,
props[p].value.v4.z, props[p].value.v4.w);
break;
case GUI_PROP_RECT: fprintf(f, "r %s %i %i %i %i %i\n", props[p].name, (int)props[p].flags, (int)props[p].value.vrect.x, (int)props[p].value.vrect.y,
(int)props[p].value.vrect.width, (int)props[p].value.vrect.height);
break;
case GUI_PROP_COLOR: fprintf(f, "c %s %i %i %i %i %i\n", props[p].name, (int)props[p].flags, props[p].value.vcolor.r, props[p].value.vcolor.g,
props[p].value.vcolor.b, props[p].value.vcolor.a);
break;
}
}
fclose(f);
return true;
}
#endif // GUI_PROPERTY_LIST_IMPLEMENTATION

View File

@ -0,0 +1,101 @@
/*******************************************************************************************
*
* raygui - custom property list control
*
* 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) 2020-2024 Vlad Adrian (@Demizdor) and Ramon Santamaria (@raysan5)
*
**********************************************************************************************/
#include "raylib.h"
#define RAYGUI_IMPLEMENTATION
#include "../../src/raygui.h"
#undef RAYGUI_IMPLEMENTATION // Avoid including raygui implementation again
#define GUI_PROPERTY_LIST_IMPLEMENTATION
#include "dm_property_list.h"
#define SIZEOF(A) (sizeof(A)/sizeof(A[0]))
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main()
{
// Initialization
//---------------------------------------------------------------------------------------
const int screenWidth = 800;
const int screenHeight = 450;
InitWindow(screenWidth, screenHeight, "raygui - property list");
GuiDMProperty prop[] = {
PBOOL("Bool", 0, true),
PSECTION("#102#SECTION", 0, 2),
PINT("Int", 0, 123),
PFLOAT("Float", 0, 0.99f),
PTEXT("Text", 0, (char*)&(char[30]){"Hello!"}, 30),
PSELECT("Select", 0, "ONE;TWO;THREE;FOUR", 0),
PINT_RANGE("Int Range", 0, 32, 1, 0, 100),
PRECT("Rect", 0, 0, 0, 100, 200),
PVEC2("Vec2", 0, 20, 20),
PVEC3("Vec3", 0, 12, 13, 14),
PVEC4("Vec4", 0, 12, 13, 14, 15),
PCOLOR("Color", 0, 0, 255, 0, 255),
};
int focus = 0, scroll = 0; // Needed by GuiDMPropertyList()
GuiLoadStyleDefault();
// Tweak the default raygui style a bit
GuiSetStyle(LISTVIEW, LIST_ITEMS_HEIGHT, 24);
GuiSetStyle(LISTVIEW, SCROLLBAR_WIDTH, 12);
Vector2 gridMouseCell = { 0 };
SetTargetFPS(60);
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR)));
GuiGrid((Rectangle){0, 0, screenWidth, screenHeight}, "Property List", 20.0f, 2, &gridMouseCell); // Draw a fancy grid
GuiDMPropertyList((Rectangle){(screenWidth - 180)/2, (screenHeight - 280)/2, 180, 280}, prop, SIZEOF(prop), &focus, &scroll);
if (prop[0].value.vbool >= 1)
{
DrawText(TextFormat("FOCUS:%i | SCROLL:%i | FPS:%i", focus, scroll, GetFPS()), prop[8].value.v2.x, prop[8].value.v2.y, 20, prop[11].value.vcolor);
}
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
GuiDMSaveProperties("test.props", prop, SIZEOF(prop)); // Save properties to `test.props` file at exit
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}

View File

@ -0,0 +1,27 @@
#
# Property types:
# b <name> <flags> <value> // Bool
# i <name> <flags> <value> <min> <max> <step> // Int
# f <name> <flags> <value> <min> <max> <step> <precision> // Float
# t <name> <flags> <value> <edit_length> // Text
# l <name> <flags> <value> <active> // Select
# g <name> <flags> <value> // Section (Group)
# v2 <name> <flags> <x> <y> // Vector 2D
# v3 <name> <flags> <x> <y> <z> // Vector 3D
# v4 <name> <flags> <x> <y> <z> <w> // Vector 4D
# r <name> <flags> <x> <y> <width> <height> // Rectangle
# c <name> <flags> <r> <g> <b> <a> // Color
#
b Bool 0 1
g #102#SECTION 0 2
i Int 0 123 0 0 1
f Float 0 0.990000 0.000000 0.000000 1.000000 3
t Text 1 Hello! 30
l Select 0 ONE;TWO;THREE;FOUR 3
i Int Range 0 32 0 100 1
r Rect 1 0 0 100 200
v2 Vec2 1 20.000000 20.000000
v3 Vec3 1 12.000000 13.000000 14.000000
v4 Vec4 1 12.000000 13.000000 14.000000 15.000000
c Color 1 94 68 197 160

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

View File

@ -0,0 +1,27 @@
GLFW_ICON ICON "raygui.ico"
1 VERSIONINFO
FILEVERSION 4,0,0,0
PRODUCTVERSION 4,0,0,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
//BLOCK "080904E4" // English UK
BLOCK "040904E4" // English US
BEGIN
//VALUE "CompanyName", "raylib technologies"
VALUE "FileDescription", "raygui application (www.raylib.com)"
VALUE "FileVersion", "4.0.0"
VALUE "InternalName", "raygui app"
VALUE "LegalCopyright", "(c) 2023 Ramon Santamaria (@raysan5)"
//VALUE "OriginalFilename", "raygui_app.exe"
VALUE "ProductName", "raygui app"
VALUE "ProductVersion", "4.0.0"
END
END
BLOCK "VarFileInfo"
BEGIN
//VALUE "Translation", 0x809, 1252 // English UK
VALUE "Translation", 0x409, 1252 // English US
END
END

View File

@ -0,0 +1,153 @@
/*******************************************************************************************
*
* raygui - Controls test
*
* TEST CONTROLS:
* - GuiScrollPanel()
*
* 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
*
* COMPILATION (Linux - gcc):
* gcc -o $(NAME_PART) $(FILE_NAME) -I../../src -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 -std=c99
*
* LICENSE: zlib/libpng
*
* Copyright (c) 2019-2024 Vlad Adrian (@Demizdor) and Ramon Santamaria (@raysan5)
*
**********************************************************************************************/
#include "raylib.h"
#define RAYGUI_IMPLEMENTATION
#include "../../src/raygui.h"
static void DrawStyleEditControls(void); // Draw and process scroll bar style edition controls
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main()
{
// Initialization
//---------------------------------------------------------------------------------------
const int screenWidth = 800;
const int screenHeight = 450;
InitWindow(screenWidth, screenHeight, "raygui - GuiScrollPanel()");
Rectangle panelRec = { 20, 40, 200, 150 };
Rectangle panelContentRec = {0, 0, 340, 340 };
Rectangle panelView = { 0 };
Vector2 panelScroll = { 99, -20 };
bool showContentArea = true;
SetTargetFPS(60);
//---------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
// TODO: Implement required update logic
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(RAYWHITE);
DrawText(TextFormat("[%f, %f]", panelScroll.x, panelScroll.y), 4, 4, 20, RED);
GuiScrollPanel(panelRec, NULL, panelContentRec, &panelScroll, &panelView);
BeginScissorMode(panelView.x, panelView.y, panelView.width, panelView.height);
GuiGrid((Rectangle){panelRec.x + panelScroll.x, panelRec.y + panelScroll.y, panelContentRec.width, panelContentRec.height}, NULL, 16, 3, NULL);
EndScissorMode();
if (showContentArea) DrawRectangle(panelRec.x + panelScroll.x, panelRec.y + panelScroll.y, panelContentRec.width, panelContentRec.height, Fade(RED, 0.1));
DrawStyleEditControls();
GuiCheckBox((Rectangle){ 565, 80, 20, 20 }, "SHOW CONTENT AREA", &showContentArea);
GuiSliderBar((Rectangle){ 590, 385, 145, 15}, "WIDTH", TextFormat("%i", (int)panelContentRec.width), &panelContentRec.width, 1, 600);
GuiSliderBar((Rectangle){ 590, 410, 145, 15 }, "HEIGHT", TextFormat("%i", (int)panelContentRec.height), &panelContentRec.height, 1, 400);
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}
// Draw and process scroll bar style edition controls
static void DrawStyleEditControls(void)
{
// ScrollPanel style controls
//----------------------------------------------------------
GuiGroupBox((Rectangle){ 550, 170, 220, 205 }, "SCROLLBAR STYLE");
int style = GuiGetStyle(SCROLLBAR, BORDER_WIDTH);
GuiLabel((Rectangle){ 555, 195, 110, 10 }, "BORDER_WIDTH");
GuiSpinner((Rectangle){ 670, 190, 90, 20 }, NULL, &style, 0, 6, false);
GuiSetStyle(SCROLLBAR, BORDER_WIDTH, style);
style = GuiGetStyle(SCROLLBAR, ARROWS_SIZE);
GuiLabel((Rectangle){ 555, 220, 110, 10 }, "ARROWS_SIZE");
GuiSpinner((Rectangle){ 670, 215, 90, 20 }, NULL, &style, 4, 14, false);
GuiSetStyle(SCROLLBAR, ARROWS_SIZE, style);
style = GuiGetStyle(SCROLLBAR, SLIDER_PADDING);
GuiLabel((Rectangle){ 555, 245, 110, 10 }, "SLIDER_PADDING");
GuiSpinner((Rectangle){ 670, 240, 90, 20 }, NULL, &style, 0, 14, false);
GuiSetStyle(SCROLLBAR, SLIDER_PADDING, style);
bool scrollBarArrows = GuiGetStyle(SCROLLBAR, ARROWS_VISIBLE);
GuiCheckBox((Rectangle){ 565, 280, 20, 20 }, "ARROWS_VISIBLE", &scrollBarArrows);
GuiSetStyle(SCROLLBAR, ARROWS_VISIBLE, scrollBarArrows);
style = GuiGetStyle(SCROLLBAR, SLIDER_PADDING);
GuiLabel((Rectangle){ 555, 325, 110, 10 }, "SLIDER_PADDING");
GuiSpinner((Rectangle){ 670, 320, 90, 20 }, NULL, &style, 0, 14, false);
GuiSetStyle(SCROLLBAR, SLIDER_PADDING, style);
style = GuiGetStyle(SCROLLBAR, SLIDER_WIDTH);
GuiLabel((Rectangle){ 555, 350, 110, 10 }, "SLIDER_WIDTH");
GuiSpinner((Rectangle){ 670, 345, 90, 20 }, NULL, &style, 2, 100, false);
GuiSetStyle(SCROLLBAR, SLIDER_WIDTH, style);
const char *text = GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE? "SCROLLBAR: LEFT" : "SCROLLBAR: RIGHT";
bool toggleScrollBarSide = GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE);
GuiToggle((Rectangle){ 560, 110, 200, 35 }, text, &toggleScrollBarSide);
GuiSetStyle(LISTVIEW, SCROLLBAR_SIDE, toggleScrollBarSide);
//----------------------------------------------------------
// ScrollBar style controls
//----------------------------------------------------------
GuiGroupBox((Rectangle){ 550, 20, 220, 135 }, "SCROLLPANEL STYLE");
style = GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH);
GuiLabel((Rectangle){ 555, 35, 110, 10 }, "SCROLLBAR_WIDTH");
GuiSpinner((Rectangle){ 670, 30, 90, 20 }, NULL, &style, 6, 30, false);
GuiSetStyle(LISTVIEW, SCROLLBAR_WIDTH, style);
style = GuiGetStyle(DEFAULT, BORDER_WIDTH);
GuiLabel((Rectangle){ 555, 60, 110, 10 }, "BORDER_WIDTH");
GuiSpinner((Rectangle){ 670, 55, 90, 20 }, NULL, &style, 0, 20, false);
GuiSetStyle(DEFAULT, BORDER_WIDTH, style);
//----------------------------------------------------------
}

View File

@ -0,0 +1,181 @@
/*******************************************************************************************
*
* raygui - Standalone mode custom backend
*
* Just edit this file to include your custom implementation to your graphic API
*
* LICENSE: <your_license>
*
* Copyright (c) <year> <developer_name>
*
**********************************************************************************************/
//#include "my_cool_graphic_api.h"
//----------------------------------------------------------------------------------
// Defines and Macros
// TODO: Define input keys required by raygui
//----------------------------------------------------------------------------------
#define KEY_RIGHT 262
#define KEY_LEFT 263
#define KEY_DOWN 264
#define KEY_UP 265
#define KEY_BACKSPACE 259
#define KEY_ENTER 257
#define MOUSE_LEFT_BUTTON 0
//----------------------------------------------------------------------------------
// Types and Structures Definition
// TODO: Define required structures, maybe Font/Texture2D should be defined here?
//----------------------------------------------------------------------------------
// ...
//----------------------------------------------------------------------------------
// Global Variables Definition
//----------------------------------------------------------------------------------
// ...
//----------------------------------------------------------------------------------
// Module Functions Definition
// TODO: Define all raygui required functions (previously provided by raylib)
//----------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
// Input required functions
//-------------------------------------------------------------------------------
static Vector2 GetMousePosition(void)
{
Vector2 position = { 0 };
// TODO: Mouse position
return position;
}
static int GetMouseWheelMove(void)
{
// TODO: Mouse wheel movement variation, reseted every frame
return 0;
}
static bool IsMouseButtonDown(int button)
{
// TODO: Return true while mouse button [0..2] is being down
return false;
}
static bool IsMouseButtonPressed(int button)
{
// TODO: Return true when mouse button [0..2] has been pressed: up->down
return false;
}
static bool IsMouseButtonReleased(int button)
{
// TODO: Return true when mouse button [0..2] has been released: down->up
return false;
}
static bool IsKeyDown(int key)
{
// TODO: Return true while key is being down
return false;
}
static bool IsKeyPressed(int key)
{
// TODO: Return true when key has been pressed: up->down
return false;
}
// USED IN: GuiTextBox(), GuiValueBox()
static int GetKeyPressed(void)
{
// TODO: Return last key pressed (up->down) in the frame
return 0;
}
//-------------------------------------------------------------------------------
// Drawing required functions
//-------------------------------------------------------------------------------
static void DrawRectangle(int x, int y, int width, int height, Color color)
{
// TODO: Draw rectangle on the screen
}
// USED IN: GuiColorPicker()
static void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4)
{
// TODO: Draw rectangle with gradients (4 vertex colors) on the screen
}
// USED IN: GuiDropdownBox(), GuiScrollBar()
static void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color)
{
// TODO: Draw triangle on the screen, required for arrows
}
//-------------------------------------------------------------------------------
// Text required functions
//-------------------------------------------------------------------------------
// USED IN: GuiLoadStyleDefault()
static Font GetFontDefault(void)
{
Font font = { 0 };
// TODO: Return default rendering Font for the UI
return font;
}
// USED IN: GetTextWidth()
static Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing)
{
Vector2 size = { 0 };
// TODO: Return text size (width, height) on screen depending on the Font, text, fontSize and spacing
return size;
}
// USED IN: GuiDrawText()
static void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint)
{
// TODO: Draw text on the screen
}
//-------------------------------------------------------------------------------
// GuiLoadStyle() required functions
//-------------------------------------------------------------------------------
static Font LoadFontEx(const char *fileName, int fontSize, int *fontChars, int glyphCount)
{
Font font = { 0 };
// TODO: Load a new font from a file
return font;
}
static char *LoadText(const char *fileName)
{
// TODO: Load text file data, used by GuiLoadStyle() to load characters list required on Font generation,
// this is a .rgs feature, probably this function is not required in most cases
return NULL;
}
static const char *GetDirectoryPath(const char *filePath)
{
// TODO: Get directory path for .rgs file, required to look for a possible .ttf/.otf font file referenced,
// this is a .rgs feature, probably this function is not required in most cases
return NULL;
}

View File

@ -0,0 +1,36 @@
/*******************************************************************************************
*
* raygui - Standalone mode usage template
*
* DEPENDENCIES:
* raygui 2.6 - Immediate-mode GUI controls.
*
*
* LICENSE: zlib/libpng
*
* Copyright (c) 2020 Ramon Santamaria (@raysan5)
*
**********************************************************************************************/
#define RAYGUI_IMPLEMENTATION
#define RAYGUI_STANDALONE
#include "../../src/raygui.h"
#include "custom_backend.h"
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main()
{
// TODO: Initialize your systems (window, graphics, inputs)
// TODO: Create your game loop
{
// TODO: Use raygui API
}
// TODO: De-initialize all resources
return 0;
}

View File

@ -0,0 +1,145 @@
/*******************************************************************************************
*
* raygui - style selector
*
* DEPENDENCIES:
* raylib 4.5 - Windowing/input management and drawing
* raygui 3.5 - Immediate-mode GUI controls with custom styling and icons
*
* COMPILATION (Windows - MinGW):
* gcc -o $(NAME_PART).exe $(FILE_NAME) -I../../src -lraylib -lopengl32 -lgdi32 -std=c99
*
* LICENSE: zlib/libpng
*
* Copyright (c) 2016-2024 Ramon Santamaria (@raysan5)
*
**********************************************************************************************/
#include "raylib.h"
#define RAYGUI_IMPLEMENTATION
//#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
#include "../../src/raygui.h"
// raygui embedded styles
// NOTE: Included in the same order as selector
#define MAX_GUI_STYLES_AVAILABLE 12 // NOTE: Included light style
#include "../styles/style_jungle.h" // raygui style: jungle
#include "../styles/style_candy.h" // raygui style: candy
#include "../styles/style_lavanda.h" // raygui style: lavanda
#include "../styles/style_cyber.h" // raygui style: cyber
#include "../styles/style_terminal.h" // raygui style: terminal
#include "../styles/style_ashes.h" // raygui style: ashes
#include "../styles/style_bluish.h" // raygui style: bluish
#include "../styles/style_dark.h" // raygui style: dark
#include "../styles/style_cherry.h" // raygui style: cherry
#include "../styles/style_sunny.h" // raygui style: sunny
#include "../styles/style_enefete.h" // raygui style: enefete
#include <string.h> // Required for: strcpy()
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main()
{
// Initialization
//---------------------------------------------------------------------------------------
const int screenWidth = 800;
const int screenHeight = 480;
InitWindow(screenWidth, screenHeight, "raygui - styles selector");
SetExitKey(0);
// Custom GUI font loading
//Font font = LoadFontEx("fonts/custom_font.ttf", 12, 0, 0);
//GuiSetFont(font);
bool exitWindow = false;
bool showMessageBox = false;
// Load default style
GuiLoadStyleBluish();
int visualStyleActive = 4;
int prevVisualStyleActive = 4;
SetTargetFPS(60);
//--------------------------------------------------------------------------------------
// Main game loop
while (!exitWindow) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
exitWindow = WindowShouldClose();
if (IsKeyPressed(KEY_ESCAPE)) showMessageBox = !showMessageBox;
if (IsFileDropped())
{
FilePathList droppedFiles = LoadDroppedFiles();
if ((droppedFiles.count > 0) && IsFileExtension(droppedFiles.paths[0], ".rgs")) GuiLoadStyle(droppedFiles.paths[0]);
UnloadDroppedFiles(droppedFiles); // Clear internal buffers
}
if (visualStyleActive != prevVisualStyleActive)
{
// Reset to default internal style
// NOTE: Required to unload any previously loaded font texture
GuiLoadStyleDefault();
switch (visualStyleActive)
{
case 1: GuiLoadStyleJungle(); break;
case 2: GuiLoadStyleCandy(); break;
case 3: GuiLoadStyleLavanda(); break;
case 4: GuiLoadStyleCyber(); break;
case 5: GuiLoadStyleTerminal(); break;
case 6: GuiLoadStyleAshes(); break;
case 7: GuiLoadStyleBluish(); break;
case 8: GuiLoadStyleDark(); break;
case 9: GuiLoadStyleCherry(); break;
case 10: GuiLoadStyleSunny(); break;
case 11: GuiLoadStyleEnefete(); break;
default: break;
}
prevVisualStyleActive = visualStyleActive;
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR)));
// Visuals options
GuiLabel((Rectangle){ 10, 10, 60, 24 }, "Style:");
GuiComboBox((Rectangle){ 60,10, 120, 24 }, "default;Jungle;Candy;Lavanda;Cyber;Terminal;Ashes;Bluish;Dark;Cherry;Sunny;Enefete", &visualStyleActive);
DrawRectangle(10, 44, GuiGetFont().texture.width, GuiGetFont().texture.height, BLACK);
DrawTexture(GuiGetFont().texture, 10, 44, WHITE);
DrawRectangleLines(10, 44, GuiGetFont().texture.width, GuiGetFont().texture.height,
GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)));
//GuiSetIconScale(2);
//GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_RIGHT);
//GuiButton((Rectangle){ 25, 255, 300, 30 }, GuiIconText(ICON_FILE_SAVE, "Save File"));
//GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER);
//----------------------------------------------------------------------------------
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}

View File

@ -0,0 +1,608 @@
//////////////////////////////////////////////////////////////////////////////////
// //
// StyleAsCode exporter v2.0 - Style data exported as a values array //
// //
// USAGE: On init call: GuiLoadStyleAmber(); //
// //
// more info and bugs-report: github.com/raysan5/raygui //
// feedback and support: ray[at]raylibtech.com //
// //
// Copyright (c) 2020-2025 raylib technologies (@raylibtech) //
// //
//////////////////////////////////////////////////////////////////////////////////
#define AMBER_STYLE_PROPS_COUNT 18
// Custom style name: Amber
static const GuiStyleProp amberStyleProps[AMBER_STYLE_PROPS_COUNT] = {
{ 0, 0, (int)0x898988ff }, // DEFAULT_BORDER_COLOR_NORMAL
{ 0, 1, (int)0x292929ff }, // DEFAULT_BASE_COLOR_NORMAL
{ 0, 2, (int)0xd4d4d4ff }, // DEFAULT_TEXT_COLOR_NORMAL
{ 0, 3, (int)0xeb891dff }, // DEFAULT_BORDER_COLOR_FOCUSED
{ 0, 4, (int)0x292929ff }, // DEFAULT_BASE_COLOR_FOCUSED
{ 0, 5, (int)0xffffffff }, // DEFAULT_TEXT_COLOR_FOCUSED
{ 0, 6, (int)0xf1cf9dff }, // DEFAULT_BORDER_COLOR_PRESSED
{ 0, 7, (int)0xf39333ff }, // DEFAULT_BASE_COLOR_PRESSED
{ 0, 8, (int)0x191410ff }, // DEFAULT_TEXT_COLOR_PRESSED
{ 0, 9, (int)0x6a6a6aff }, // DEFAULT_BORDER_COLOR_DISABLED
{ 0, 10, (int)0x818181ff }, // DEFAULT_BASE_COLOR_DISABLED
{ 0, 11, (int)0x606060ff }, // DEFAULT_TEXT_COLOR_DISABLED
{ 0, 16, (int)0x00000010 }, // DEFAULT_TEXT_SIZE
{ 0, 18, (int)0xef922aff }, // DEFAULT_LINE_COLOR
{ 0, 19, (int)0x333333ff }, // DEFAULT_BACKGROUND_COLOR
{ 0, 20, (int)0x00000008 }, // DEFAULT_TEXT_LINE_SPACING
{ 1, 8, (int)0xe7e0d4ff }, // LABEL_TEXT_COLOR_PRESSED
{ 4, 8, (int)0xf1cf9dff }, // SLIDER_TEXT_COLOR_PRESSED
};
// WARNING: This style uses a custom font: "hello-world.ttf" (size: 16, spacing: 1)
#define AMBER_STYLE_FONT_ATLAS_COMP_SIZE 2605
// Font atlas image pixels data: DEFLATE compressed
static unsigned char amberFontData[AMBER_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed,
0xdd, 0x8b, 0x8e, 0x9c, 0xb8, 0x12, 0x00, 0x50, 0xf8, 0xff, 0x7f, 0x76, 0x5d, 0xe9, 0x66, 0xb3, 0xd2, 0xee, 0x8e, 0x6d,
0xaa, 0x30, 0x8f, 0xee, 0x9c, 0x1c, 0x45, 0x91, 0x9a, 0x34, 0x18, 0xdb, 0x85, 0x0d, 0x33, 0x94, 0x63, 0x03, 0x00, 0x00,
0x00, 0x88, 0x2d, 0x5a, 0xe7, 0xb3, 0xcc, 0xe7, 0x5b, 0xf7, 0xf3, 0xf6, 0xd7, 0xe7, 0x6d, 0xb0, 0xed, 0xe8, 0xbe, 0xfa,
0x65, 0xda, 0x92, 0xfb, 0x89, 0xee, 0x37, 0xe2, 0x87, 0x4f, 0x7e, 0xff, 0xc9, 0xec, 0xa7, 0x77, 0xbe, 0xf9, 0xda, 0xcb,
0x6e, 0x19, 0x1f, 0xbd, 0x25, 0x4b, 0x56, 0xff, 0xce, 0xd1, 0x7a, 0xcf, 0xd4, 0xe1, 0xef, 0x3f, 0x2d, 0xb1, 0x97, 0x71,
0x79, 0x7e, 0xde, 0xdb, 0x36, 0x39, 0xeb, 0xdc, 0x79, 0xb7, 0xe9, 0x96, 0xda, 0xb7, 0xd6, 0xc4, 0x7f, 0xaf, 0x4d, 0x32,
0x9f, 0x6f, 0xdd, 0x7a, 0xfc, 0x15, 0x37, 0xbd, 0xb8, 0xdd, 0x13, 0xfd, 0xa4, 0x17, 0x23, 0xfb, 0x20, 0xca, 0x23, 0xb5,
0xff, 0x71, 0x2f, 0x5a, 0x71, 0x4d, 0xed, 0x95, 0xf6, 0xe7, 0xab, 0x4b, 0xff, 0x1b, 0x6d, 0x78, 0xe6, 0xb5, 0x6b, 0x55,
0xbf, 0x1e, 0xf7, 0x1f, 0xbe, 0x5b, 0x2b, 0xdb, 0xf1, 0x72, 0x45, 0xba, 0x2d, 0x62, 0xd8, 0x6b, 0xf6, 0xee, 0x35, 0x23,
0x77, 0x76, 0x51, 0x38, 0xef, 0x98, 0x6c, 0xd9, 0x52, 0xa3, 0x5a, 0x5b, 0x3c, 0xfe, 0xaf, 0x88, 0xff, 0xf8, 0x7f, 0x2d,
0xee, 0xa9, 0xf1, 0x36, 0x92, 0x65, 0xca, 0x47, 0xed, 0xde, 0x39, 0x6e, 0x7f, 0x3c, 0xbf, 0xba, 0x4e, 0x7b, 0xdb, 0xf6,
0x42, 0x6d, 0xf4, 0xb6, 0xb4, 0xee, 0x79, 0x6f, 0xe5, 0xab, 0x5e, 0x24, 0xce, 0x26, 0x4e, 0x5f, 0x4b, 0x63, 0xd0, 0xd2,
0xe3, 0xb6, 0x8b, 0x74, 0x49, 0xa3, 0xf0, 0x9d, 0xf1, 0x96, 0x6d, 0xe9, 0x77, 0xae, 0x1b, 0xa3, 0xf2, 0xfb, 0x1b, 0xcf,
0xbe, 0xa2, 0x18, 0x0f, 0xe7, 0xcb, 0xb9, 0xa7, 0xaf, 0x89, 0x71, 0xf1, 0x3d, 0x55, 0x36, 0xfe, 0xb7, 0x85, 0xf1, 0x1f,
0xe9, 0xfa, 0xbe, 0x2f, 0xfe, 0x9f, 0x18, 0xff, 0xb7, 0x49, 0xfc, 0x6f, 0xe2, 0x3f, 0xf5, 0x7f, 0x73, 0xf7, 0x05, 0xe3,
0x71, 0x3b, 0x12, 0xf3, 0x99, 0x58, 0x18, 0xcf, 0x71, 0x7b, 0xf4, 0x8f, 0x7a, 0x5b, 0x65, 0x26, 0xd8, 0xbf, 0xdf, 0xea,
0xc7, 0xd9, 0xe8, 0x1e, 0x2d, 0xd2, 0x33, 0xce, 0xd1, 0xdd, 0x55, 0xe6, 0x79, 0x49, 0x2c, 0xeb, 0x99, 0x5b, 0x29, 0xfe,
0x23, 0xf5, 0xcc, 0x27, 0x26, 0x35, 0x9f, 0x8d, 0xff, 0x18, 0x5c, 0xff, 0x46, 0xfd, 0x28, 0x2e, 0xbd, 0xff, 0xcf, 0xc6,
0xff, 0x36, 0x99, 0x95, 0x6d, 0xa9, 0x9e, 0x5a, 0x29, 0x65, 0x7b, 0xd1, 0x13, 0xd5, 0x95, 0xf1, 0x1f, 0xc9, 0xb3, 0x8e,
0x03, 0x4f, 0xc3, 0x7a, 0xc7, 0xa8, 0xdc, 0xbd, 0xb5, 0x93, 0xfd, 0x2a, 0x1e, 0x6c, 0x93, 0x33, 0x23, 0x76, 0x7b, 0x7c,
0xfc, 0x8f, 0xc7, 0xe6, 0xff, 0x91, 0x9e, 0x1b, 0x5c, 0x1f, 0xff, 0xf1, 0xf2, 0xe8, 0xaf, 0xcd, 0xff, 0xa3, 0x38, 0x2f,
0x8f, 0x45, 0x73, 0xf9, 0xea, 0xdd, 0xcc, 0xbb, 0x5a, 0x64, 0x9b, 0x3e, 0x4f, 0xf8, 0xc4, 0xf9, 0x7f, 0x3c, 0x54, 0x8f,
0x51, 0xb8, 0x37, 0x10, 0xff, 0x95, 0xf8, 0xaf, 0xcd, 0x69, 0x67, 0x4f, 0x37, 0x63, 0xe9, 0x95, 0xe9, 0xb3, 0xe3, 0xbf,
0x1e, 0xb1, 0xe2, 0xff, 0xe8, 0xdc, 0x36, 0x86, 0xcf, 0x65, 0x63, 0x49, 0x1b, 0x7e, 0xc6, 0x58, 0xb3, 0x2e, 0xfe, 0xe3,
0xc4, 0x5d, 0xc3, 0x9f, 0x18, 0xff, 0xdb, 0x8d, 0xf1, 0x1f, 0x5f, 0x3b, 0xff, 0xaf, 0xdc, 0xff, 0xc7, 0xf0, 0x27, 0xd2,
0xb1, 0x68, 0x06, 0xf0, 0xfe, 0xd1, 0xbf, 0xf2, 0xb4, 0x67, 0xfc, 0x9b, 0x47, 0x91, 0xfe, 0xb9, 0x40, 0xe5, 0x69, 0xd3,
0x6c, 0xee, 0xbc, 0xa5, 0xcb, 0xf6, 0xe9, 0xe3, 0x7f, 0xfe, 0xbc, 0x63, 0xba, 0x25, 0x0a, 0xfd, 0xe8, 0x6d, 0xd7, 0xd7,
0x78, 0x7c, 0x64, 0x05, 0xbe, 0x97, 0xf8, 0x07, 0x57, 0x00, 0xd1, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc0, 0x77, 0x6a, 0xff, 0xfa, 0xf7, 0x9f, 0xdb, 0xda, 0x8f, 0xd9, 0x8c, 0x5b, 0x77, 0x4b, 0x6f, 0x5f, 0xad,
0x70, 0xfc, 0x7c, 0xc9, 0x56, 0xe7, 0x60, 0xdf, 0x06, 0x67, 0x5a, 0xaf, 0x83, 0xeb, 0xb7, 0x8c, 0x4b, 0x9d, 0x69, 0x9b,
0x7e, 0xbd, 0x6c, 0xa9, 0x77, 0x92, 0x73, 0x79, 0x02, 0xdb, 0xe4, 0x0d, 0xd7, 0xec, 0xba, 0x0e, 0xb3, 0x1c, 0x86, 0x99,
0xcc, 0x87, 0xed, 0x50, 0x34, 0xcd, 0x3f, 0xcf, 0x96, 0x67, 0x1b, 0x66, 0xc5, 0x8c, 0x72, 0xde, 0xbf, 0x5a, 0xee, 0xe9,
0x3d, 0x99, 0xf9, 0x69, 0xf4, 0x3e, 0x7a, 0x4b, 0x67, 0x67, 0xbe, 0x2b, 0x07, 0xfb, 0xa8, 0x3e, 0xf7, 0x74, 0xf6, 0x8b,
0xca, 0x96, 0xbd, 0xbb, 0xae, 0xca, 0x2c, 0xd7, 0xc3, 0x7e, 0xb8, 0x15, 0x46, 0x39, 0x92, 0xf7, 0x6e, 0x1e, 0xf1, 0x5c,
0x5f, 0x5b, 0x95, 0xfb, 0x3e, 0xa6, 0x25, 0x8e, 0xe4, 0x77, 0xda, 0xf0, 0x38, 0x71, 0xd9, 0x3b, 0x65, 0x91, 0xac, 0xad,
0xed, 0xef, 0x1c, 0x1b, 0xb9, 0xba, 0x3c, 0x13, 0xff, 0x95, 0xfc, 0xd2, 0x5b, 0x3a, 0x03, 0xea, 0xde, 0xc9, 0x4b, 0xff,
0xfb, 0x7a, 0x76, 0x57, 0xa6, 0x95, 0x6c, 0x5b, 0xdf, 0x11, 0xff, 0xf3, 0xdc, 0x69, 0x91, 0x1a, 0x07, 0xf3, 0x7d, 0xf1,
0x89, 0xdc, 0x0d, 0x77, 0xe5, 0x23, 0x3f, 0xd3, 0x8a, 0x57, 0xc6, 0x7f, 0x3e, 0x4f, 0x6c, 0x3d, 0xf3, 0xcf, 0xfa, 0xf8,
0xcf, 0xe7, 0xab, 0x8a, 0x6e, 0x3e, 0x15, 0xf1, 0x5f, 0x8d, 0xff, 0xf8, 0x80, 0xf8, 0x5f, 0x99, 0x49, 0x7b, 0xb6, 0xb7,
0x48, 0x65, 0x3e, 0x9f, 0x65, 0xf9, 0x69, 0x83, 0xb9, 0xec, 0xb1, 0xbb, 0x8f, 0x38, 0x30, 0xff, 0xb8, 0x27, 0xfe, 0x67,
0x99, 0x7b, 0x73, 0xfd, 0xab, 0xba, 0x9f, 0x55, 0x6b, 0x30, 0xcc, 0x7a, 0x4e, 0xb6, 0x45, 0x23, 0xb9, 0x52, 0xe0, 0xea,
0xf8, 0x1f, 0x47, 0x6d, 0xad, 0x6c, 0xdb, 0xd2, 0x11, 0xf7, 0xec, 0x08, 0x18, 0x4b, 0xef, 0x0c, 0xee, 0xb9, 0x8a, 0xef,
0xa7, 0x57, 0x8f, 0x8b, 0xe1, 0x1d, 0xe6, 0xba, 0xbe, 0x75, 0xef, 0xf8, 0x1f, 0x8b, 0xf3, 0xa9, 0xc7, 0x8d, 0x99, 0x56,
0xf3, 0xab, 0x5c, 0x64, 0xeb, 0xb3, 0x92, 0x23, 0x35, 0x9f, 0x55, 0xf9, 0x5b, 0xe2, 0xff, 0xfa, 0x2d, 0xeb, 0x23, 0x2d,
0x17, 0xff, 0x71, 0xc3, 0xdc, 0xf2, 0x13, 0xe6, 0xff, 0xdb, 0x30, 0x5f, 0xfd, 0x5d, 0xf1, 0x5f, 0x6d, 0x8d, 0x6b, 0xe3,
0x3f, 0x0a, 0xf3, 0xf6, 0x95, 0xf3, 0xfc, 0x67, 0xe6, 0xff, 0xe3, 0x31, 0x26, 0xd2, 0xf5, 0x5e, 0xcd, 0x61, 0x7a, 0x65,
0xfc, 0xc7, 0x2d, 0xf7, 0x96, 0xf7, 0xc7, 0xff, 0xda, 0xb8, 0x5c, 0x1b, 0xff, 0x2b, 0xd7, 0xab, 0x10, 0xff, 0xf7, 0xcf,
0x0c, 0xd6, 0x7e, 0xa7, 0x72, 0x77, 0xf0, 0xe4, 0xf8, 0x7f, 0x7f, 0x5d, 0x3f, 0x1f, 0xff, 0x2b, 0xe7, 0xff, 0xf1, 0x70,
0xfc, 0x57, 0xd6, 0xff, 0xba, 0x67, 0x96, 0x2f, 0xfe, 0x9f, 0x88, 0xff, 0x37, 0xd4, 0x7a, 0x7e, 0xde, 0x34, 0x7f, 0x5a,
0x98, 0x5b, 0x35, 0xb1, 0xf6, 0x54, 0x3c, 0x8a, 0x2b, 0x87, 0x47, 0xa1, 0xd4, 0x95, 0x99, 0xe3, 0xb6, 0xe4, 0x5e, 0xbe,
0x76, 0x35, 0xa9, 0x64, 0x8e, 0xaf, 0xae, 0x33, 0x76, 0xe7, 0x7d, 0xc1, 0x35, 0xdf, 0xca, 0xb5, 0x62, 0x4c, 0xeb, 0x7e,
0xc5, 0x75, 0x64, 0x7b, 0x61, 0x16, 0x7f, 0x3e, 0x5d, 0xdc, 0xf4, 0x1d, 0xd4, 0x22, 0xe2, 0x1f, 0xb5, 0xc8, 0x9b, 0x7a,
0x61, 0x24, 0xef, 0xa9, 0xcd, 0x42, 0xd7, 0xd4, 0xba, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x56, 0xfd, 0x7e, 0x72, 0x36, 0xa7, 0xf8, 0x28, 0x6f, 0x62, 0x7e, 0x7f, 0xb3, 0x2c, 0x68, 0xed, 0xc1, 0x2d, 0xa3,
0x5a, 0x68, 0x07, 0xcf, 0xa6, 0x25, 0xf3, 0xbc, 0xf5, 0xeb, 0xa4, 0x9f, 0x5f, 0xbe, 0x25, 0xb7, 0xb5, 0xc9, 0x1e, 0x8f,
0xee, 0xfd, 0x78, 0x1b, 0xf7, 0xb3, 0xa8, 0xe5, 0xea, 0xbd, 0x9f, 0x99, 0xbf, 0x25, 0x57, 0x2c, 0x98, 0xd5, 0xe8, 0x96,
0x68, 0xc9, 0x23, 0xbd, 0x69, 0xb4, 0xd6, 0xc4, 0xd1, 0x76, 0x38, 0x7a, 0x0e, 0x71, 0xf0, 0xad, 0xa3, 0x59, 0xae, 0xc5,
0xd1, 0x96, 0x4c, 0x56, 0xa3, 0x33, 0xb9, 0x27, 0x56, 0xe6, 0xd2, 0x5d, 0x95, 0x4b, 0x3f, 0x97, 0xbb, 0x71, 0x1f, 0xb6,
0x51, 0x9c, 0xbc, 0x52, 0xb7, 0xc1, 0x31, 0x5a, 0x21, 0xef, 0xc3, 0xf1, 0xbd, 0x1f, 0x6f, 0xe3, 0x3d, 0x9d, 0xdd, 0x64,
0x65, 0xfe, 0xfd, 0x96, 0xce, 0xd8, 0xb9, 0x27, 0x57, 0xc4, 0x38, 0x9e, 0x4f, 0x62, 0x4f, 0x67, 0xae, 0x98, 0xf5, 0xc3,
0xfd, 0xc4, 0x15, 0xe0, 0xce, 0xfc, 0x3b, 0x6f, 0x88, 0xff, 0x55, 0xb9, 0xb4, 0xaf, 0xce, 0xca, 0xd3, 0xba, 0xa5, 0x6f,
0x17, 0xd7, 0x6d, 0x3d, 0xe2, 0x62, 0x98, 0x01, 0x23, 0xca, 0x63, 0xd4, 0xd1, 0x63, 0x8c, 0x22, 0x67, 0xb4, 0x62, 0xd1,
0xf1, 0xeb, 0x66, 0x2c, 0x88, 0xff, 0x33, 0x6f, 0x03, 0x1f, 0x1f, 0x5b, 0x8e, 0xd6, 0xef, 0x7d, 0x19, 0xf3, 0xc7, 0x39,
0xd8, 0x73, 0x59, 0xd8, 0x57, 0x67, 0xcc, 0x59, 0x17, 0xe7, 0xab, 0xf2, 0xe8, 0xe4, 0xa2, 0x25, 0xd2, 0xf3, 0xf1, 0x4c,
0xfc, 0xc7, 0xe1, 0xd9, 0x7f, 0x36, 0x9f, 0x4d, 0x3e, 0x1a, 0x62, 0xf1, 0x1b, 0xb5, 0xfd, 0xf2, 0xb6, 0x8b, 0xc6, 0xff,
0xd5, 0xf1, 0xbf, 0x9d, 0x88, 0xfe, 0x7b, 0x57, 0xcc, 0xd8, 0x8a, 0xeb, 0x52, 0x5c, 0x9d, 0x4b, 0x33, 0x0a, 0x65, 0x7b,
0x2e, 0xfe, 0xb3, 0x2b, 0x18, 0x8c, 0x8e, 0xd0, 0x0e, 0x97, 0xa4, 0x5d, 0x14, 0x9b, 0x51, 0xec, 0xd5, 0xf1, 0x48, 0x66,
0x8e, 0x73, 0xe3, 0xff, 0x76, 0x3a, 0xfe, 0xd7, 0xd7, 0xab, 0xf8, 0xaf, 0xcf, 0x67, 0xee, 0x8d, 0xff, 0xad, 0xb0, 0x4e,
0x4b, 0x14, 0x66, 0x5d, 0xf5, 0x2b, 0xc0, 0x5d, 0xfd, 0xfa, 0xed, 0xcf, 0xd3, 0x67, 0xfd, 0xe0, 0x5d, 0xe7, 0x30, 0xeb,
0x21, 0x99, 0x7e, 0x15, 0x93, 0xa3, 0xe4, 0xef, 0x8d, 0x2b, 0x7d, 0x7e, 0x2b, 0x66, 0x88, 0xaf, 0xe4, 0x2d, 0x3d, 0x7f,
0xbf, 0x70, 0xfe, 0x2a, 0x52, 0x5d, 0xbf, 0x2b, 0x4e, 0xf7, 0x91, 0x4c, 0x7b, 0xad, 0xed, 0xaf, 0xef, 0xbd, 0x0e, 0xcc,
0xb3, 0xc6, 0x7e, 0x46, 0x3e, 0xa0, 0xb8, 0xed, 0x5a, 0xfc, 0x96, 0xfa, 0x88, 0x45, 0x77, 0x8e, 0x57, 0x8d, 0xff, 0x6b,
0x9f, 0xad, 0x66, 0xe3, 0xe8, 0xfb, 0xb2, 0x58, 0xc5, 0x25, 0xd7, 0x92, 0x58, 0x7a, 0xbf, 0x23, 0xfe, 0xc5, 0xff, 0x15,
0xf1, 0x7f, 0xfc, 0x18, 0xf1, 0xb5, 0xf1, 0xff, 0x44, 0x2f, 0x12, 0xff, 0x67, 0xe6, 0x97, 0x6f, 0x9a, 0x51, 0x5e, 0x1b,
0xff, 0xeb, 0xc6, 0xb1, 0xca, 0x7d, 0xd7, 0x9b, 0x5a, 0x47, 0xfc, 0xf3, 0x49, 0xed, 0xfc, 0x9e, 0x75, 0x34, 0x00, 0xf1,
0x0f, 0x5c, 0x33, 0xef, 0x3e, 0xf6, 0x93, 0x7b, 0xd1, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x59, 0xad, 0x9b, 0x59, 0x3c, 0xba, 0x59, 0xcc, 0xff, 0xf9, 0xef, 0xcf, 0x5b, 0x9f, 0x3d, 0x9f, 0x2d, 0x55, 0xb6,
0x36, 0xcc, 0xf8, 0xde, 0x1e, 0x2e, 0xf5, 0x95, 0x47, 0x68, 0xb7, 0x9d, 0xe1, 0xda, 0x5a, 0xe9, 0xbd, 0x47, 0xdb, 0x6e,
0xa8, 0xc9, 0x5a, 0x7b, 0xb5, 0xe1, 0xb6, 0x96, 0xee, 0xb3, 0xb5, 0x2d, 0xff, 0xfd, 0x9f, 0xfb, 0xb0, 0x86, 0xf7, 0x64,
0x5e, 0xde, 0xda, 0x9b, 0xd1, 0xb5, 0x6c, 0x5a, 0x3f, 0x6f, 0xdb, 0xff, 0xfa, 0xdb, 0xdb, 0x96, 0xa9, 0x83, 0x71, 0xee,
0xfb, 0x95, 0xe7, 0x33, 0x2a, 0xf5, 0x9a, 0x0c, 0xc4, 0x3f, 0x1f, 0x21, 0x06, 0x67, 0x18, 0xa5, 0x6c, 0x66, 0x77, 0xb5,
0x65, 0x6f, 0x4d, 0x86, 0xbd, 0xb0, 0xda, 0xca, 0x1d, 0xed, 0x15, 0xa5, 0xf5, 0x1b, 0xb6, 0x49, 0xdf, 0xcc, 0xf5, 0xe7,
0x4c, 0xdd, 0x8f, 0xf2, 0xcd, 0x8e, 0xce, 0xb3, 0x7f, 0xe4, 0xfe, 0x99, 0xec, 0xc9, 0x33, 0xf9, 0xf5, 0xf9, 0x9e, 0xbc,
0x96, 0xb6, 0xc1, 0x3c, 0xa7, 0xf2, 0xd6, 0xee, 0xca, 0xf3, 0x19, 0x8d, 0xc3, 0xfd, 0x3a, 0xc8, 0x1f, 0xe3, 0x78, 0x5b,
0x8e, 0xea, 0xf8, 0xf9, 0xb6, 0x1c, 0xf5, 0xcc, 0x48, 0x47, 0x52, 0xbe, 0xcc, 0xfd, 0xbe, 0xde, 0xdb, 0xdb, 0x6c, 0x3d,
0x9d, 0x67, 0xde, 0x11, 0x9f, 0xc5, 0x7f, 0xa4, 0xe3, 0x7f, 0xbc, 0x0a, 0xcc, 0xf1, 0x4f, 0x47, 0x57, 0xd9, 0x7d, 0x30,
0x96, 0xf7, 0x6a, 0xb9, 0x0d, 0xeb, 0xbf, 0xf6, 0xd6, 0xfe, 0xaa, 0xf3, 0xa9, 0x1c, 0x67, 0x4f, 0xd7, 0x59, 0x2e, 0x2b,
0xea, 0x3e, 0x3c, 0x93, 0x67, 0xdb, 0x72, 0xd4, 0x9b, 0xdb, 0x20, 0x4b, 0xff, 0xea, 0xf6, 0x8a, 0xc4, 0xde, 0xaa, 0x6b,
0xd6, 0x8c, 0xd6, 0xe0, 0xcb, 0x6e, 0xe9, 0x45, 0x79, 0x65, 0xf6, 0x97, 0x9d, 0x13, 0xe7, 0xc7, 0xe5, 0xea, 0x58, 0xbe,
0xa5, 0xb3, 0x96, 0xcf, 0x56, 0xc9, 0xc8, 0x8c, 0xd8, 0x95, 0x2d, 0x51, 0xb8, 0x37, 0x6c, 0xe9, 0x27, 0x16, 0xa3, 0x9c,
0xe2, 0x91, 0x1c, 0xe3, 0x9e, 0x6d, 0xcb, 0xd9, 0x68, 0x96, 0x39, 0x9b, 0xca, 0x96, 0xd1, 0xac, 0xa9, 0xff, 0x9d, 0xfc,
0xca, 0x98, 0x67, 0x56, 0xe7, 0x6b, 0x97, 0xcd, 0xff, 0xe7, 0x39, 0xb6, 0xd7, 0x8c, 0xcb, 0xd5, 0xb1, 0x7c, 0x2b, 0xac,
0x5a, 0x10, 0x97, 0xdf, 0x31, 0x56, 0x57, 0x47, 0xdb, 0xbb, 0xf7, 0xc6, 0xb9, 0xcf, 0xab, 0x6b, 0x1f, 0xc4, 0x0b, 0xdb,
0x32, 0x1f, 0xff, 0xd7, 0xac, 0x73, 0xb1, 0x76, 0x6d, 0xbc, 0x76, 0x5b, 0x9f, 0x3a, 0x3e, 0xca, 0xaf, 0x5e, 0xe5, 0xee,
0xfa, 0x5a, 0xae, 0xe5, 0xf2, 0x7f, 0x3a, 0xfe, 0x63, 0xe1, 0x8a, 0x02, 0xab, 0xe2, 0xbf, 0xbd, 0x24, 0x62, 0xfe, 0x94,
0xf8, 0xcf, 0xad, 0xc2, 0x11, 0xa5, 0x95, 0x3b, 0x32, 0x31, 0x9e, 0x7f, 0x96, 0xff, 0x9e, 0x5a, 0xfe, 0x9e, 0xf1, 0xff,
0xb9, 0xf8, 0x8f, 0x0f, 0x8c, 0xff, 0xf7, 0x96, 0xf9, 0xf9, 0xb1, 0xf1, 0xd9, 0xf8, 0xaf, 0x8c, 0xcb, 0xf5, 0x75, 0x79,
0xd6, 0xc6, 0x7f, 0x24, 0x46, 0xec, 0xf5, 0x99, 0xb8, 0x9f, 0x8a, 0xff, 0xf7, 0x8e, 0xa5, 0xb3, 0xba, 0x7a, 0xb2, 0x64,
0xb3, 0x55, 0xe6, 0xdf, 0x15, 0xff, 0xd5, 0x15, 0x55, 0x23, 0x39, 0x93, 0x7d, 0xff, 0xf8, 0x1f, 0xa9, 0x35, 0xf7, 0xbe,
0x67, 0xfc, 0x8f, 0xc9, 0xda, 0xbc, 0x9f, 0x37, 0xff, 0x8f, 0x47, 0x63, 0x2c, 0x4a, 0x2b, 0xc9, 0x66, 0x57, 0xda, 0x5b,
0x35, 0xff, 0xbf, 0xf3, 0xe7, 0x8c, 0x9f, 0x36, 0x9b, 0x3c, 0xf7, 0xa4, 0xe3, 0x33, 0xe2, 0x7f, 0x3e, 0x92, 0x7e, 0x5e,
0x8b, 0x3d, 0x3d, 0xc6, 0xca, 0xf6, 0xfc, 0x4d, 0xf1, 0xbf, 0xdd, 0x32, 0xfe, 0x57, 0x57, 0x3a, 0xcd, 0xfe, 0xfe, 0xd9,
0x27, 0xc5, 0xff, 0xca, 0x95, 0x87, 0xee, 0x2c, 0x99, 0xf8, 0x7f, 0xdb, 0x3d, 0xce, 0x8a, 0x92, 0xdf, 0xf5, 0x13, 0x99,
0xbb, 0xc7, 0xf9, 0xf7, 0x5e, 0xb1, 0xdf, 0xdb, 0xff, 0xaa, 0xbf, 0xe7, 0x2e, 0xfe, 0x3f, 0x2f, 0xfe, 0xb3, 0x23, 0x76,
0x65, 0xcb, 0xfc, 0x48, 0xe7, 0x3f, 0x5f, 0xd7, 0x62, 0xeb, 0x9f, 0x7e, 0xde, 0x71, 0xb7, 0x7a, 0x5f, 0xc9, 0xc4, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xad, 0x36, 0xcc, 0xe4, 0x9f, 0xcd, 0x4a, 0x3e, 0xca, 0x0c,
0x18, 0xb7, 0xe4, 0x38, 0xaf, 0xe6, 0xff, 0x3f, 0xfe, 0x79, 0xbe, 0xc6, 0x2a, 0x65, 0x5a, 0x7b, 0xee, 0x6d, 0xd2, 0x66,
0x3f, 0x7f, 0xde, 0x0a, 0xab, 0x3c, 0xdc, 0xd1, 0x62, 0xad, 0xd4, 0x9f, 0xf9, 0xa9, 0xb6, 0xf6, 0x85, 0xb5, 0x35, 0x5b,
0x33, 0xe0, 0x99, 0x1c, 0xe7, 0xb3, 0xe3, 0xb4, 0x45, 0xc7, 0x18, 0x67, 0xb8, 0xce, 0x95, 0xa9, 0x72, 0xee, 0xeb, 0xdb,
0xb2, 0x5f, 0x8a, 0x7b, 0x5a, 0xac, 0xf9, 0x0d, 0xfb, 0x47, 0xdf, 0xd9, 0xa9, 0x64, 0x18, 0x8e, 0x64, 0xf6, 0xa3, 0xfb,
0x4a, 0xbd, 0xee, 0x08, 0xfd, 0xab, 0xd8, 0xfe, 0xd2, 0xb1, 0x67, 0x9c, 0x7b, 0x76, 0x94, 0x15, 0xb1, 0xdd, 0xf4, 0x66,
0x58, 0x4b, 0xbf, 0xcb, 0xd3, 0x16, 0xed, 0x4d, 0x94, 0xaf, 0xca, 0x3d, 0xbc, 0x4d, 0xf3, 0x72, 0xad, 0xba, 0xce, 0xe4,
0x4b, 0xbd, 0x0d, 0xf6, 0x95, 0xfb, 0x7c, 0x4b, 0xe6, 0x6a, 0x89, 0xc5, 0x59, 0xdc, 0xd7, 0xd6, 0xca, 0x36, 0xb9, 0x8e,
0x47, 0x22, 0xc6, 0xce, 0x6c, 0xc9, 0x1f, 0xe7, 0x6d, 0x6b, 0x69, 0x7c, 0xee, 0x7b, 0xb9, 0xfb, 0xa2, 0xdc, 0xc3, 0xf5,
0x4c, 0x9a, 0xab, 0x72, 0x9c, 0xd7, 0x32, 0xb3, 0xac, 0xcb, 0xa4, 0xb7, 0x77, 0xfb, 0xf1, 0xda, 0x33, 0xbc, 0xbe, 0x56,
0x3e, 0x21, 0x97, 0xee, 0x1b, 0xdf, 0x0c, 0xff, 0xec, 0xf7, 0xf3, 0x8f, 0x8c, 0x67, 0xdb, 0x74, 0xce, 0xf8, 0x64, 0xfb,
0x5f, 0x9f, 0x49, 0x67, 0xfb, 0xc8, 0x0c, 0x87, 0x5b, 0x39, 0x03, 0x98, 0xf8, 0xff, 0xf6, 0xf9, 0x7f, 0xdc, 0x90, 0x17,
0x69, 0x76, 0x2d, 0x59, 0x9b, 0xff, 0x77, 0x13, 0xff, 0x27, 0xa3, 0xe2, 0xf9, 0x5c, 0x9a, 0xf3, 0xab, 0xfc, 0x26, 0xfe,
0x17, 0x8d, 0xfb, 0xdf, 0x96, 0x49, 0xd3, 0xf8, 0x7f, 0x5d, 0x54, 0x7c, 0xea, 0x5a, 0x1a, 0x6c, 0x85, 0xb1, 0x7c, 0x65,
0x86, 0xe1, 0xb8, 0xe1, 0x0a, 0x54, 0xc9, 0xcc, 0x98, 0xff, 0xfc, 0xd3, 0xa2, 0x7c, 0x65, 0x8e, 0xad, 0x6b, 0xca, 0xb6,
0x26, 0xfe, 0xdf, 0x99, 0xfd, 0xfa, 0x13, 0xe7, 0xff, 0xf7, 0x3c, 0x63, 0xd8, 0x6e, 0xce, 0xcc, 0x16, 0x4b, 0x3e, 0xdf,
0x92, 0x77, 0x38, 0x2b, 0xef, 0x97, 0x9e, 0xcf, 0xa4, 0x77, 0x5f, 0x56, 0xfa, 0xda, 0x5d, 0x9e, 0xf1, 0x1f, 0xbe, 0xfb,
0xd9, 0xb4, 0xf8, 0x07, 0xf1, 0x6f, 0xf6, 0x0f, 0xee, 0x4c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xc7, 0xaf, 0x3f, 0xea, 0x01, 0xc4, 0x3f, 0xf0, 0xc7,
0xc5, 0xff, 0xff, 0x00 };
// Font glyphs rectangles data (on atlas)
static const Rectangle amberFontRecs[189] = {
{ 4, 4, 5 , 16 },
{ 17, 4, 2 , 10 },
{ 27, 4, 4 , 4 },
{ 39, 4, 5 , 10 },
{ 52, 4, 5 , 11 },
{ 65, 4, 5 , 10 },
{ 78, 4, 5 , 10 },
{ 91, 4, 2 , 4 },
{ 101, 4, 4 , 13 },
{ 113, 4, 5 , 13 },
{ 126, 4, 4 , 4 },
{ 138, 4, 5 , 6 },
{ 151, 4, 3 , 2 },
{ 162, 4, 5 , 2 },
{ 175, 4, 2 , 1 },
{ 185, 4, 5 , 10 },
{ 198, 4, 5 , 10 },
{ 211, 4, 4 , 10 },
{ 223, 4, 5 , 10 },
{ 236, 4, 5 , 10 },
{ 249, 4, 5 , 10 },
{ 262, 4, 5 , 10 },
{ 275, 4, 5 , 10 },
{ 288, 4, 5 , 10 },
{ 301, 4, 5 , 10 },
{ 314, 4, 5 , 10 },
{ 327, 4, 2 , 6 },
{ 337, 4, 2 , 6 },
{ 347, 4, 5 , 6 },
{ 360, 4, 5 , 4 },
{ 373, 4, 5 , 6 },
{ 386, 4, 5 , 10 },
{ 399, 4, 5 , 7 },
{ 412, 4, 5 , 10 },
{ 425, 4, 5 , 10 },
{ 438, 4, 5 , 10 },
{ 451, 4, 5 , 10 },
{ 464, 4, 5 , 10 },
{ 477, 4, 5 , 10 },
{ 490, 4, 5 , 10 },
{ 4, 28, 5 , 10 },
{ 17, 28, 4 , 10 },
{ 29, 28, 5 , 10 },
{ 42, 28, 5 , 10 },
{ 55, 28, 5 , 10 },
{ 68, 28, 5 , 10 },
{ 81, 28, 5 , 10 },
{ 94, 28, 5 , 10 },
{ 107, 28, 5 , 10 },
{ 120, 28, 5 , 10 },
{ 133, 28, 5 , 10 },
{ 146, 28, 5 , 10 },
{ 159, 28, 5 , 10 },
{ 172, 28, 5 , 10 },
{ 185, 28, 5 , 10 },
{ 198, 28, 5 , 10 },
{ 211, 28, 5 , 10 },
{ 224, 28, 5 , 10 },
{ 237, 28, 5 , 10 },
{ 250, 28, 3 , 13 },
{ 261, 28, 5 , 10 },
{ 274, 28, 3 , 13 },
{ 285, 28, 4 , 3 },
{ 297, 28, 5 , 1 },
{ 310, 28, 3 , 3 },
{ 321, 28, 5 , 7 },
{ 334, 28, 5 , 10 },
{ 347, 28, 5 , 7 },
{ 360, 28, 5 , 10 },
{ 373, 28, 5 , 7 },
{ 386, 28, 5 , 10 },
{ 399, 28, 5 , 10 },
{ 412, 28, 5 , 10 },
{ 425, 28, 4 , 10 },
{ 437, 28, 3 , 13 },
{ 448, 28, 5 , 10 },
{ 461, 28, 5 , 10 },
{ 474, 28, 5 , 7 },
{ 487, 28, 5 , 7 },
{ 4, 52, 5 , 7 },
{ 17, 52, 5 , 10 },
{ 30, 52, 5 , 10 },
{ 43, 52, 5 , 7 },
{ 56, 52, 5 , 7 },
{ 69, 52, 5 , 10 },
{ 82, 52, 5 , 7 },
{ 95, 52, 5 , 7 },
{ 108, 52, 5 , 7 },
{ 121, 52, 5 , 7 },
{ 134, 52, 5 , 10 },
{ 147, 52, 5 , 7 },
{ 160, 52, 4 , 13 },
{ 172, 52, 2 , 13 },
{ 182, 52, 4 , 13 },
{ 194, 52, 5 , 4 },
{ 207, 52, 2 , 9 },
{ 217, 52, 5 , 7 },
{ 230, 52, 5 , 10 },
{ 243, 52, 5 , 10 },
{ 256, 52, 5 , 10 },
{ 269, 52, 0 , 0 },
{ 277, 52, 5 , 10 },
{ 290, 52, 0 , 0 },
{ 298, 52, 5 , 7 },
{ 311, 52, 3 , 5 },
{ 322, 52, 5 , 5 },
{ 335, 52, 5 , 3 },
{ 348, 52, 5 , 7 },
{ 361, 52, 5 , 2 },
{ 374, 52, 4 , 4 },
{ 386, 52, 5 , 8 },
{ 399, 52, 3 , 5 },
{ 410, 52, 3 , 6 },
{ 421, 52, 0 , 0 },
{ 429, 52, 5 , 10 },
{ 442, 52, 5 , 10 },
{ 455, 52, 2 , 3 },
{ 465, 52, 0 , 0 },
{ 473, 52, 3 , 5 },
{ 484, 52, 4 , 4 },
{ 496, 52, 5 , 5 },
{ 4, 76, 5 , 10 },
{ 17, 76, 5 , 7 },
{ 30, 76, 5 , 10 },
{ 43, 76, 5 , 10 },
{ 56, 76, 5 , 14 },
{ 69, 76, 5 , 14 },
{ 82, 76, 5 , 14 },
{ 95, 76, 5 , 14 },
{ 108, 76, 5 , 12 },
{ 121, 76, 5 , 12 },
{ 134, 76, 5 , 10 },
{ 147, 76, 5 , 13 },
{ 160, 76, 5 , 14 },
{ 173, 76, 5 , 14 },
{ 186, 76, 5 , 14 },
{ 199, 76, 5 , 12 },
{ 212, 76, 4 , 14 },
{ 224, 76, 4 , 14 },
{ 236, 76, 4 , 14 },
{ 248, 76, 4 , 12 },
{ 260, 76, 5 , 10 },
{ 273, 76, 5 , 14 },
{ 286, 76, 5 , 14 },
{ 299, 76, 5 , 14 },
{ 312, 76, 5 , 14 },
{ 325, 76, 5 , 14 },
{ 338, 76, 5 , 12 },
{ 351, 76, 4 , 3 },
{ 363, 76, 5 , 10 },
{ 376, 76, 5 , 14 },
{ 389, 76, 5 , 14 },
{ 402, 76, 5 , 14 },
{ 415, 76, 5 , 12 },
{ 428, 76, 5 , 14 },
{ 441, 76, 5 , 10 },
{ 454, 76, 5 , 10 },
{ 467, 76, 5 , 10 },
{ 480, 76, 5 , 10 },
{ 493, 76, 5 , 10 },
{ 4, 100, 5 , 10 },
{ 17, 100, 5 , 9 },
{ 30, 100, 5 , 9 },
{ 43, 100, 5 , 7 },
{ 56, 100, 5 , 10 },
{ 69, 100, 5 , 10 },
{ 82, 100, 5 , 10 },
{ 95, 100, 5 , 10 },
{ 108, 100, 5 , 9 },
{ 121, 100, 4 , 10 },
{ 133, 100, 4 , 10 },
{ 145, 100, 4 , 10 },
{ 157, 100, 4 , 9 },
{ 169, 100, 5 , 10 },
{ 182, 100, 5 , 10 },
{ 195, 100, 5 , 10 },
{ 208, 100, 5 , 10 },
{ 221, 100, 5 , 10 },
{ 234, 100, 5 , 10 },
{ 247, 100, 5 , 9 },
{ 260, 100, 5 , 6 },
{ 273, 100, 5 , 7 },
{ 286, 100, 5 , 10 },
{ 299, 100, 5 , 10 },
{ 312, 100, 5 , 10 },
{ 325, 100, 5 , 9 },
{ 338, 100, 5 , 13 },
{ 351, 100, 5 , 10 },
{ 364, 100, 5 , 12 },
};
// Font glyphs info data
// NOTE: No glyphs.image data provided
static const GlyphInfo amberFontGlyphs[189] = {
{ 32, 0, 0, 5, { 0 }},
{ 33, 1, 3, 5, { 0 }},
{ 34, 0, 3, 5, { 0 }},
{ 35, 0, 3, 5, { 0 }},
{ 36, 0, 3, 5, { 0 }},
{ 37, 0, 3, 5, { 0 }},
{ 38, 0, 3, 5, { 0 }},
{ 39, 1, 4, 5, { 0 }},
{ 40, 0, 3, 5, { 0 }},
{ 41, 0, 3, 5, { 0 }},
{ 42, 0, 3, 5, { 0 }},
{ 43, 0, 7, 5, { 0 }},
{ 44, 0, 12, 5, { 0 }},
{ 45, 0, 9, 5, { 0 }},
{ 46, 1, 12, 5, { 0 }},
{ 47, 0, 3, 5, { 0 }},
{ 48, 0, 3, 5, { 0 }},
{ 49, 0, 3, 5, { 0 }},
{ 50, 0, 3, 5, { 0 }},
{ 51, 0, 3, 5, { 0 }},
{ 52, 0, 3, 5, { 0 }},
{ 53, 0, 3, 5, { 0 }},
{ 54, 0, 3, 5, { 0 }},
{ 55, 0, 3, 5, { 0 }},
{ 56, 0, 3, 5, { 0 }},
{ 57, 0, 3, 5, { 0 }},
{ 58, 0, 7, 5, { 0 }},
{ 59, 0, 7, 5, { 0 }},
{ 60, 0, 7, 5, { 0 }},
{ 61, 0, 8, 5, { 0 }},
{ 62, 0, 7, 5, { 0 }},
{ 63, 0, 3, 5, { 0 }},
{ 64, 0, 6, 5, { 0 }},
{ 65, 0, 3, 5, { 0 }},
{ 66, 0, 3, 5, { 0 }},
{ 67, 0, 3, 5, { 0 }},
{ 68, 0, 3, 5, { 0 }},
{ 69, 0, 3, 5, { 0 }},
{ 70, 0, 3, 5, { 0 }},
{ 71, 0, 3, 5, { 0 }},
{ 72, 0, 3, 5, { 0 }},
{ 73, 0, 3, 5, { 0 }},
{ 74, 0, 3, 5, { 0 }},
{ 75, 0, 3, 5, { 0 }},
{ 76, 0, 3, 5, { 0 }},
{ 77, 0, 3, 5, { 0 }},
{ 78, 0, 3, 5, { 0 }},
{ 79, 0, 3, 5, { 0 }},
{ 80, 0, 3, 5, { 0 }},
{ 81, 0, 3, 5, { 0 }},
{ 82, 0, 3, 5, { 0 }},
{ 83, 0, 3, 5, { 0 }},
{ 84, 0, 3, 5, { 0 }},
{ 85, 0, 3, 5, { 0 }},
{ 86, 0, 3, 5, { 0 }},
{ 87, 0, 3, 5, { 0 }},
{ 88, 0, 3, 5, { 0 }},
{ 89, 0, 3, 5, { 0 }},
{ 90, 0, 3, 5, { 0 }},
{ 91, 0, 3, 5, { 0 }},
{ 92, 0, 3, 5, { 0 }},
{ 93, 0, 3, 5, { 0 }},
{ 94, 0, 3, 5, { 0 }},
{ 95, 0, 12, 5, { 0 }},
{ 96, 1, 4, 5, { 0 }},
{ 97, 0, 6, 5, { 0 }},
{ 98, 0, 3, 5, { 0 }},
{ 99, 0, 6, 5, { 0 }},
{ 100, 0, 3, 5, { 0 }},
{ 101, 0, 6, 5, { 0 }},
{ 102, 0, 3, 5, { 0 }},
{ 103, 0, 6, 5, { 0 }},
{ 104, 0, 3, 5, { 0 }},
{ 105, 0, 3, 5, { 0 }},
{ 106, 0, 3, 5, { 0 }},
{ 107, 0, 3, 5, { 0 }},
{ 108, 0, 3, 5, { 0 }},
{ 109, 0, 6, 5, { 0 }},
{ 110, 0, 6, 5, { 0 }},
{ 111, 0, 6, 5, { 0 }},
{ 112, 0, 6, 5, { 0 }},
{ 113, 0, 6, 5, { 0 }},
{ 114, 0, 6, 5, { 0 }},
{ 115, 0, 6, 5, { 0 }},
{ 116, 0, 3, 5, { 0 }},
{ 117, 0, 6, 5, { 0 }},
{ 118, 0, 6, 5, { 0 }},
{ 119, 0, 6, 5, { 0 }},
{ 120, 0, 6, 5, { 0 }},
{ 121, 0, 6, 5, { 0 }},
{ 122, 0, 6, 5, { 0 }},
{ 123, 0, 3, 5, { 0 }},
{ 124, 1, 3, 5, { 0 }},
{ 125, 0, 3, 5, { 0 }},
{ 126, 0, 8, 5, { 0 }},
{ 161, 1, 4, 5, { 0 }},
{ 162, 0, 6, 5, { 0 }},
{ 163, 0, 3, 5, { 0 }},
{ 8364, 0, 3, 5, { 0 }},
{ 165, 0, 3, 5, { 0 }},
{ 352, 0, 0, 0, { 0 }},
{ 167, 0, 3, 5, { 0 }},
{ 353, 0, 0, 0, { 0 }},
{ 169, 0, 6, 5, { 0 }},
{ 170, 2, 3, 5, { 0 }},
{ 171, 0, 8, 5, { 0 }},
{ 172, 0, 6, 5, { 0 }},
{ 174, 0, 6, 5, { 0 }},
{ 175, 0, 3, 5, { 0 }},
{ 176, 1, 3, 5, { 0 }},
{ 177, 0, 5, 5, { 0 }},
{ 178, 2, 3, 5, { 0 }},
{ 179, 2, 3, 5, { 0 }},
{ 381, 0, 0, 0, { 0 }},
{ 181, 0, 6, 5, { 0 }},
{ 182, 0, 3, 5, { 0 }},
{ 183, 1, 6, 5, { 0 }},
{ 382, 0, 0, 0, { 0 }},
{ 185, 0, 3, 5, { 0 }},
{ 186, 0, 3, 5, { 0 }},
{ 187, 0, 8, 5, { 0 }},
{ 338, 0, 3, 5, { 0 }},
{ 339, 0, 6, 5, { 0 }},
{ 376, 0, 3, 5, { 0 }},
{ 191, 0, 3, 5, { 0 }},
{ 192, 0, -1, 5, { 0 }},
{ 193, 0, -1, 5, { 0 }},
{ 194, 0, -1, 5, { 0 }},
{ 195, 0, -1, 5, { 0 }},
{ 196, 0, 1, 5, { 0 }},
{ 197, 0, 1, 5, { 0 }},
{ 198, 0, 3, 5, { 0 }},
{ 199, 0, 3, 5, { 0 }},
{ 200, 0, -1, 5, { 0 }},
{ 201, 0, -1, 5, { 0 }},
{ 202, 0, -1, 5, { 0 }},
{ 203, 0, 1, 5, { 0 }},
{ 204, 0, -1, 5, { 0 }},
{ 205, 0, -1, 5, { 0 }},
{ 206, 0, -1, 5, { 0 }},
{ 207, 0, 1, 5, { 0 }},
{ 208, 0, 3, 5, { 0 }},
{ 209, 0, -1, 5, { 0 }},
{ 210, 0, -1, 5, { 0 }},
{ 211, 0, -1, 5, { 0 }},
{ 212, 0, -1, 5, { 0 }},
{ 213, 0, -1, 5, { 0 }},
{ 214, 0, 1, 5, { 0 }},
{ 215, 0, 10, 5, { 0 }},
{ 216, 0, 3, 5, { 0 }},
{ 217, 0, -1, 5, { 0 }},
{ 218, 0, -1, 5, { 0 }},
{ 219, 0, -1, 5, { 0 }},
{ 220, 0, 1, 5, { 0 }},
{ 221, 0, -1, 5, { 0 }},
{ 222, 0, 3, 5, { 0 }},
{ 223, 0, 3, 5, { 0 }},
{ 224, 0, 3, 5, { 0 }},
{ 225, 0, 3, 5, { 0 }},
{ 226, 0, 3, 5, { 0 }},
{ 227, 0, 3, 5, { 0 }},
{ 228, 0, 4, 5, { 0 }},
{ 229, 0, 4, 5, { 0 }},
{ 230, 0, 6, 5, { 0 }},
{ 231, 0, 6, 5, { 0 }},
{ 232, 0, 3, 5, { 0 }},
{ 233, 0, 3, 5, { 0 }},
{ 234, 0, 3, 5, { 0 }},
{ 235, 0, 4, 5, { 0 }},
{ 236, 0, 3, 5, { 0 }},
{ 237, 0, 3, 5, { 0 }},
{ 238, 0, 3, 5, { 0 }},
{ 239, 0, 4, 5, { 0 }},
{ 240, 0, 3, 5, { 0 }},
{ 241, 0, 3, 5, { 0 }},
{ 242, 0, 3, 5, { 0 }},
{ 243, 0, 3, 5, { 0 }},
{ 244, 0, 3, 5, { 0 }},
{ 245, 0, 3, 5, { 0 }},
{ 246, 0, 4, 5, { 0 }},
{ 247, 0, 7, 5, { 0 }},
{ 248, 0, 6, 5, { 0 }},
{ 249, 0, 3, 5, { 0 }},
{ 250, 0, 3, 5, { 0 }},
{ 251, 0, 3, 5, { 0 }},
{ 252, 0, 4, 5, { 0 }},
{ 253, 0, 3, 5, { 0 }},
{ 254, 0, 3, 5, { 0 }},
{ 255, 0, 4, 5, { 0 }},
};
// Style loading function: Amber
static void GuiLoadStyleAmber(void)
{
// Load style properties provided
// NOTE: Default properties are propagated
for (int i = 0; i < AMBER_STYLE_PROPS_COUNT; i++)
{
GuiSetStyle(amberStyleProps[i].controlId, amberStyleProps[i].propertyId, amberStyleProps[i].propertyValue);
}
// Custom font loading
// NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function
int amberFontDataSize = 0;
unsigned char *data = DecompressData(amberFontData, AMBER_STYLE_FONT_ATLAS_COMP_SIZE, &amberFontDataSize);
Image imFont = { data, 512, 256, 1, 2 };
Font font = { 0 };
font.baseSize = 16;
font.glyphCount = 189;
// Load texture from image
font.texture = LoadTextureFromImage(imFont);
UnloadImage(imFont); // Uncompressed image data can be unloaded from memory
// Copy char recs data from global fontRecs
// NOTE: Required to avoid issues if trying to free font
font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle));
memcpy(font.recs, amberFontRecs, font.glyphCount*sizeof(Rectangle));
// Copy font char info data from global fontChars
// NOTE: Required to avoid issues if trying to free font
font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo));
memcpy(font.glyphs, amberFontGlyphs, font.glyphCount*sizeof(GlyphInfo));
GuiSetFont(font);
// Setup a white rectangle on the font to be used on shapes drawing,
// it makes possible to draw shapes and text (full UI) in a single draw call
Rectangle fontWhiteRec = { 510, 254, 1, 1 };
SetShapesTexture(font.texture, fontWhiteRec);
//-----------------------------------------------------------------
// TODO: Custom user style setup: Set specific properties here (if required)
// i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT
}

View File

@ -0,0 +1,565 @@
//////////////////////////////////////////////////////////////////////////////////
// //
// StyleAsCode exporter v2.0 - Style data exported as a values array //
// //
// USAGE: On init call: GuiLoadStyleAshes(); //
// //
// more info and bugs-report: github.com/raysan5/raygui //
// feedback and support: ray[at]raylibtech.com //
// //
// Copyright (c) 2020-2025 raylib technologies (@raylibtech) //
// //
//////////////////////////////////////////////////////////////////////////////////
#define ASHES_STYLE_PROPS_COUNT 16
// Custom style name: Ashes
static const GuiStyleProp ashesStyleProps[ASHES_STYLE_PROPS_COUNT] = {
{ 0, 0, (int)0xf0f0f0ff }, // DEFAULT_BORDER_COLOR_NORMAL
{ 0, 1, (int)0x868686ff }, // DEFAULT_BASE_COLOR_NORMAL
{ 0, 2, (int)0xe6e6e6ff }, // DEFAULT_TEXT_COLOR_NORMAL
{ 0, 3, (int)0x929999ff }, // DEFAULT_BORDER_COLOR_FOCUSED
{ 0, 4, (int)0xeaeaeaff }, // DEFAULT_BASE_COLOR_FOCUSED
{ 0, 5, (int)0x98a1a8ff }, // DEFAULT_TEXT_COLOR_FOCUSED
{ 0, 6, (int)0x3f3f3fff }, // DEFAULT_BORDER_COLOR_PRESSED
{ 0, 7, (int)0xf6f6f6ff }, // DEFAULT_BASE_COLOR_PRESSED
{ 0, 8, (int)0x414141ff }, // DEFAULT_TEXT_COLOR_PRESSED
{ 0, 9, (int)0x8b8b8bff }, // DEFAULT_BORDER_COLOR_DISABLED
{ 0, 10, (int)0x777777ff }, // DEFAULT_BASE_COLOR_DISABLED
{ 0, 11, (int)0x959595ff }, // DEFAULT_TEXT_COLOR_DISABLED
{ 0, 16, (int)0x00000010 }, // DEFAULT_TEXT_SIZE
{ 0, 18, (int)0x9dadb1ff }, // DEFAULT_LINE_COLOR
{ 0, 19, (int)0x6b6b6bff }, // DEFAULT_BACKGROUND_COLOR
{ 0, 20, (int)0x00000008 }, // DEFAULT_TEXT_LINE_SPACING
};
// WARNING: This style uses a custom font: "v5loxical.ttf" (size: 16, spacing: 1)
#define ASHES_STYLE_FONT_ATLAS_COMP_SIZE 1800
// Font atlas image pixels data: DEFLATE compressed
static unsigned char ashesFontData[ASHES_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed,
0x9d, 0x51, 0xb6, 0xa4, 0x36, 0x0c, 0x44, 0xbd, 0xff, 0x4d, 0x57, 0xbe, 0x72, 0x32, 0xc9, 0x49, 0x83, 0x25, 0x97, 0xb0,
0x0c, 0x77, 0xee, 0x5f, 0xbf, 0x1e, 0x1a, 0x5c, 0xc8, 0x06, 0xbb, 0x24, 0x6b, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfd,
0xef, 0x27, 0xfa, 0xf9, 0x4d, 0x4d, 0x1f, 0xe7, 0xdf, 0x9f, 0xeb, 0xc7, 0x5f, 0x63, 0xc7, 0xd3, 0xf4, 0xef, 0x66, 0xfe,
0xa2, 0xff, 0x3d, 0x3f, 0x2d, 0xff, 0xaa, 0xa6, 0xaf, 0xe6, 0xea, 0xbb, 0x57, 0xbf, 0xa9, 0xa6, 0xfa, 0xeb, 0xe2, 0x78,
0xd7, 0x47, 0xd4, 0xc2, 0x3d, 0x31, 0xf7, 0xbb, 0xf3, 0x9a, 0xae, 0xb7, 0xe7, 0xaf, 0x7b, 0x6b, 0xfe, 0xbb, 0xf7, 0x6d,
0x5c, 0xab, 0xff, 0x9f, 0xff, 0xc6, 0x8f, 0xbf, 0xe6, 0x34, 0xae, 0x89, 0xf4, 0xeb, 0x33, 0x95, 0x49, 0xed, 0xf9, 0xbb,
0x56, 0x4b, 0xfd, 0x50, 0xe6, 0xe8, 0xf9, 0x33, 0x1e, 0x41, 0xb5, 0x74, 0x73, 0x17, 0x2a, 0x7c, 0xc4, 0xd5, 0xfe, 0x3c,
0x13, 0xff, 0x5d, 0xf4, 0xcf, 0xdd, 0xcd, 0x6a, 0xa0, 0x7f, 0x46, 0x39, 0x19, 0xce, 0x54, 0xa6, 0xf1, 0xbf, 0x42, 0xfd,
0xa8, 0xfe, 0x32, 0xb6, 0x80, 0x53, 0xff, 0x6c, 0xff, 0x9f, 0xe9, 0xff, 0x46, 0x13, 0x3d, 0x9f, 0xd7, 0x5f, 0x8f, 0xb7,
0x80, 0x23, 0xfe, 0xc7, 0x6d, 0x6f, 0xab, 0x9b, 0xa7, 0x1a, 0xbd, 0x40, 0x7f, 0xc7, 0xfd, 0x9f, 0x1d, 0x29, 0xfb, 0x8e,
0xff, 0x9a, 0xe8, 0xeb, 0xf4, 0x8a, 0xf8, 0x8f, 0x8f, 0x72, 0xf3, 0xef, 0x9b, 0x77, 0x23, 0xa5, 0xb6, 0x5f, 0x7b, 0xee,
0x09, 0xe4, 0xef, 0xff, 0x77, 0x7e, 0xfc, 0x77, 0x19, 0x83, 0x76, 0x9d, 0xb7, 0xb6, 0xc6, 0x17, 0xfa, 0x7f, 0xe1, 0xfa,
0x45, 0xcb, 0x73, 0x97, 0xa1, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xca, 0x59,
0x10, 0x77, 0x22, 0x68, 0xd9, 0xe3, 0xe6, 0xf1, 0xdf, 0x2b, 0xdc, 0x02, 0x19, 0xdf, 0xfd, 0xaf, 0xf3, 0x8a, 0x7d, 0x7f,
0x84, 0x3d, 0x75, 0x4a, 0xae, 0x83, 0x29, 0xed, 0xea, 0x5a, 0x77, 0xa8, 0x57, 0xac, 0x20, 0xe7, 0xbd, 0x76, 0x11, 0x8f,
0xae, 0x4c, 0x3e, 0x2d, 0x99, 0x73, 0x54, 0xdc, 0xfa, 0x8f, 0xed, 0xfa, 0xab, 0xd4, 0x0f, 0xa2, 0x1b, 0xbf, 0xd9, 0x17,
0xf4, 0xcf, 0x3a, 0x77, 0x23, 0xfd, 0xbc, 0xec, 0xde, 0xc9, 0xf8, 0xf9, 0xdd, 0xe7, 0x03, 0x7c, 0x51, 0xff, 0x11, 0x8e,
0xdb, 0x78, 0x0f, 0x3b, 0x3b, 0x52, 0x6b, 0x63, 0xfc, 0x5f, 0x8d, 0xdb, 0x0a, 0x44, 0x4d, 0x54, 0x9d, 0xd8, 0xef, 0xfe,
0x73, 0xae, 0xeb, 0x4f, 0x44, 0x4f, 0xe9, 0x3f, 0x16, 0x7d, 0x9c, 0xb2, 0xf5, 0x18, 0xd9, 0x71, 0xae, 0x5f, 0xfc, 0xbb,
0x9f, 0xff, 0xea, 0xf4, 0x97, 0xc1, 0x8d, 0xa5, 0x52, 0x2f, 0x68, 0x26, 0x47, 0xe5, 0x3d, 0xfa, 0x67, 0xde, 0x70, 0x3c,
0xc7, 0x39, 0xc1, 0x87, 0xfa, 0x05, 0xfd, 0x01, 0xfd, 0xf1, 0xa1, 0x67, 0x9e, 0xdb, 0xea, 0xe6, 0x7f, 0x14, 0xee, 0xaf,
0xd1, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0xeb, 0xdb, 0xd9, 0x2a,
0xe0, 0x8e, 0xef, 0x67, 0x7f, 0x41, 0x36, 0xc7, 0xa7, 0xcf, 0x3f, 0xfa, 0x7b, 0xfd, 0xd8, 0x91, 0xeb, 0x50, 0xa7, 0xff,
0xb0, 0xbb, 0x68, 0xe3, 0x9e, 0xb4, 0x78, 0x7d, 0xfc, 0xd1, 0x4c, 0xff, 0x11, 0x68, 0x77, 0x15, 0xe6, 0x4c, 0xa0, 0x7f,
0x7f, 0xfd, 0x7d, 0x95, 0x2f, 0xdf, 0xae, 0xff, 0x38, 0x4a, 0xff, 0xb5, 0x1d, 0x01, 0x5c, 0xfa, 0xe7, 0xfd, 0xed, 0xae,
0x51, 0x70, 0x3d, 0xc7, 0x60, 0xa4, 0x77, 0x12, 0x72, 0xe9, 0x3f, 0x12, 0x79, 0x7f, 0x0e, 0x6f, 0xfc, 0x1b, 0xe2, 0x7f,
0x18, 0xe2, 0x7f, 0x34, 0xed, 0xff, 0x87, 0xc9, 0x0f, 0x8a, 0xfe, 0xdf, 0xd6, 0xdf, 0x53, 0xfb, 0xf8, 0xbd, 0xfa, 0x77,
0x7d, 0xfe, 0x43, 0xff, 0x13, 0xf5, 0x97, 0xed, 0xca, 0x7d, 0xfa, 0xaf, 0x66, 0x4d, 0x7a, 0x9e, 0xb4, 0x94, 0x7e, 0x6e,
0x57, 0x38, 0x57, 0x2b, 0x9e, 0x7d, 0xea, 0xc8, 0x14, 0xbc, 0xab, 0x10, 0x11, 0x9b, 0x4d, 0x8a, 0x56, 0xd7, 0xa8, 0xd3,
0xff, 0xcc, 0x8a, 0x25, 0xcc, 0xd0, 0x56, 0x64, 0xbb, 0xc0, 0x3b, 0xee, 0xf9, 0x2f, 0x46, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xad, 0x84, 0xc7, 0x56, 0x23, 0x5d, 0x6b, 0xb9, 0xc3, 0xb2, 0xbb, 0x80,
0x0c, 0xeb, 0xeb, 0x6b, 0xff, 0x5f, 0x7f, 0xac, 0x0c, 0xbb, 0x72, 0x1c, 0x1c, 0x9f, 0xcf, 0x3a, 0x1b, 0x32, 0xeb, 0x8b,
0x55, 0x8e, 0x06, 0x25, 0x7c, 0xd1, 0x15, 0xeb, 0xe2, 0x0a, 0xaf, 0xc1, 0xef, 0xf2, 0x44, 0x2b, 0x78, 0x45, 0xb2, 0xac,
0x51, 0x3a, 0x9c, 0xc4, 0x5a, 0x76, 0x0a, 0xc7, 0x7d, 0xc2, 0x2a, 0xb8, 0x0f, 0xcf, 0xd0, 0xdf, 0x3b, 0x86, 0x54, 0x45,
0xae, 0x37, 0xfe, 0xb5, 0xa0, 0x7f, 0x74, 0x37, 0x1b, 0xf4, 0xf7, 0xe8, 0x1f, 0x7b, 0x12, 0xa9, 0xd3, 0x9f, 0xf8, 0xdf,
0x17, 0xff, 0xab, 0x1e, 0x3e, 0xf4, 0xff, 0x86, 0xfe, 0x32, 0xd5, 0xe1, 0x46, 0xff, 0x75, 0x8f, 0x5a, 0xcc, 0x01, 0xeb,
0x72, 0x0a, 0xf7, 0x89, 0xff, 0x61, 0xf3, 0x44, 0xfb, 0x2a, 0x88, 0x77, 0xe8, 0x17, 0x1c, 0xdf, 0xee, 0x3d, 0xfe, 0x3f,
0xe9, 0x00, 0xee, 0xec, 0xf7, 0xac, 0xf4, 0xae, 0x76, 0xd1, 0xbf, 0x5e, 0x81, 0x73, 0xf5, 0x3f, 0x37, 0x47, 0xa0, 0x53,
0xab, 0xa2, 0x7f, 0xff, 0xac, 0x0b, 0xa0, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8,
0x3c, 0xd3, 0x9d, 0xf3, 0x4f, 0xc8, 0xe4, 0x82, 0x88, 0xfa, 0x00, 0xc7, 0x74, 0x8d, 0x7c, 0xa5, 0x9c, 0xc7, 0xab, 0xbe,
0x93, 0xbb, 0x56, 0x96, 0x71, 0x45, 0x42, 0x97, 0xad, 0x54, 0xeb, 0xcf, 0xda, 0x55, 0x1f, 0x3d, 0x53, 0xe3, 0x71, 0x25,
0x0b, 0xc2, 0xed, 0x3b, 0x90, 0xcd, 0x19, 0xa3, 0xe0, 0xfa, 0xa5, 0xcb, 0x87, 0x9f, 0xd3, 0x3f, 0xee, 0x1a, 0xab, 0xfb,
0xd4, 0x91, 0x8b, 0x94, 0xcd, 0x1b, 0x91, 0x6d, 0x2d, 0x5a, 0x97, 0xf9, 0x4f, 0xbb, 0xfa, 0xff, 0xea, 0xfa, 0xf8, 0x4f,
0xea, 0x1f, 0xf7, 0x00, 0x5d, 0x8f, 0x5a, 0x6b, 0x3a, 0x5d, 0x1d, 0x4f, 0xcb, 0x57, 0xd9, 0x4f, 0x7f, 0x5f, 0x8d, 0x6f,
0x6f, 0xcb, 0xdc, 0xab, 0xbc, 0x16, 0xd9, 0x91, 0xfe, 0x5f, 0xe1, 0xfe, 0xdf, 0x93, 0x59, 0x51, 0xef, 0x82, 0x7e, 0x7e,
0x7f, 0x04, 0x19, 0x7a, 0xf9, 0xbb, 0x2c, 0x58, 0xa1, 0x7f, 0x59, 0x1e, 0x48, 0x07, 0xfd, 0xaf, 0x9f, 0xc7, 0x65, 0x75,
0x24, 0xd5, 0x8e, 0xff, 0xf9, 0x7a, 0xda, 0xae, 0x3a, 0xe3, 0x8e, 0x7d, 0x53, 0x6a, 0xfa, 0xff, 0xda, 0xf8, 0x1f, 0x45,
0xcf, 0xff, 0x9d, 0xbd, 0x8f, 0x2e, 0x27, 0xf8, 0xb3, 0xcf, 0x7f, 0x9e, 0xf7, 0x99, 0x7c, 0x66, 0x44, 0xec, 0xfd, 0xbf,
0xb3, 0x03, 0xb2, 0xa7, 0xfe, 0xf1, 0x3d, 0x25, 0x73, 0xfd, 0xe6, 0xb7, 0x1d, 0xa9, 0xeb, 0x7b, 0x58, 0x56, 0xf6, 0x6d,
0x78, 0x83, 0x4f, 0xbd, 0x63, 0xde, 0x97, 0x19, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0xf3, 0xc8, 0xac, 0xae, 0x38, 0x2b, 0x51, 0x01, 0xdc, 0xb7, 0x6e, 0x73, 0xe7, 0x2f, 0xd1, 0x42, 0x2d, 0xb7, 0x4c,
0x1d, 0xe8, 0x2b, 0x77, 0x8c, 0x82, 0xde, 0x19, 0xdf, 0xba, 0x94, 0x16, 0xd5, 0xcf, 0xfa, 0xaa, 0x64, 0x73, 0xd1, 0x64,
0xdc, 0x6d, 0x0a, 0xd6, 0x88, 0x9f, 0xcb, 0x36, 0xf1, 0xf9, 0x42, 0xee, 0xbd, 0xf3, 0x75, 0xeb, 0xa6, 0x0a, 0xc6, 0x81,
0x42, 0x8e, 0xb3, 0xdf, 0x6d, 0xb5, 0x1e, 0x95, 0xeb, 0xfa, 0xe7, 0xe3, 0x5f, 0xb6, 0xba, 0xf6, 0x59, 0xfd, 0x73, 0x11,
0xb2, 0x1e, 0xff, 0x4a, 0x65, 0xd0, 0x54, 0x79, 0x76, 0x56, 0xf5, 0x1f, 0x66, 0xfd, 0x9f, 0x8b, 0x7f, 0x6d, 0x18, 0xff,
0xff, 0x1c, 0xa1, 0x64, 0xfb, 0xdd, 0x35, 0x9f, 0xe4, 0x1e, 0xfd, 0xb3, 0xde, 0x3f, 0xdd, 0xb8, 0x63, 0xf5, 0xa8, 0xb7,
0x25, 0xdb, 0x83, 0xa8, 0xa1, 0x2f, 0xe6, 0x2e, 0xef, 0xac, 0x87, 0xc3, 0x71, 0xfd, 0x09, 0x7c, 0xa5, 0x87, 0x5c, 0xbd,
0x6b, 0x9c, 0xfa, 0xbb, 0xbc, 0xab, 0xb3, 0xb1, 0x87, 0xfe, 0xde, 0xf7, 0xc7, 0x7e, 0xf1, 0x7f, 0xed, 0xbb, 0xed, 0xad,
0x7f, 0xec, 0xfd, 0x4f, 0x9b, 0x5b, 0xb9, 0xa3, 0x3f, 0x59, 0xa9, 0x27, 0xd0, 0x3e, 0xfa, 0xef, 0x3a, 0xd6, 0xdb, 0xe7,
0xb6, 0xba, 0xe8, 0x7f, 0x37, 0xff, 0x73, 0x5a, 0xc6, 0xc6, 0x49, 0xfa, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x71, 0x8d, 0x74, 0x76, 0x95, 0x51, 0x41, 0x27, 0xf1, 0x75, 0xa5, 0xb4, 0xeb, 0x7c,
0x82, 0xaa, 0xab, 0x58, 0xdd, 0x1f, 0x3e, 0x5a, 0x1b, 0x55, 0x41, 0xb7, 0xa3, 0x4b, 0xab, 0xbc, 0x13, 0x53, 0x26, 0xef,
0xab, 0xaf, 0xf2, 0xbf, 0xfb, 0x2a, 0x66, 0x75, 0x55, 0xc0, 0xd5, 0xee, 0x69, 0x4b, 0xd7, 0x55, 0xf6, 0xf1, 0x66, 0x0d,
0xa3, 0xfe, 0xa7, 0xf6, 0xbc, 0xfb, 0x3d, 0x48, 0x6a, 0xf4, 0x79, 0x56, 0xff, 0xf8, 0x78, 0xb1, 0x3a, 0xbe, 0xac, 0xef,
0x38, 0xa2, 0xcb, 0x2c, 0x98, 0xca, 0xb6, 0xf7, 0xf7, 0xcf, 0xbe, 0xcf, 0x65, 0xcb, 0x19, 0x74, 0xd6, 0x05, 0xf7, 0xeb,
0xbf, 0xaf, 0x8d, 0x7b, 0xeb, 0xbf, 0x53, 0x67, 0xf4, 0x47, 0xff, 0xaf, 0xe9, 0x1f, 0xab, 0xb4, 0x5f, 0xff, 0x79, 0x4e,
0xb7, 0xda, 0xd1, 0x9f, 0xf8, 0x27, 0xfe, 0xd1, 0xff, 0xc9, 0xcf, 0x63, 0x11, 0x7a, 0xaa, 0xfe, 0x2a, 0x9d, 0x33, 0x39,
0x51, 0x7f, 0x5f, 0xde, 0x6d, 0x7f, 0xfd, 0x77, 0x69, 0x72, 0xb6, 0xfe, 0xe3, 0x35, 0xf1, 0x8f, 0xfe, 0xbe, 0x7a, 0x05,
0xe7, 0xcd, 0xff, 0xe4, 0xb3, 0xd6, 0x9d, 0xf3, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
0x5e, 0xff, 0xbf, 0xc2, 0xf3, 0xf6, 0x19, 0x27, 0x7a, 0xa5, 0x3f, 0x7f, 0x7e, 0x96, 0x5d, 0xa9, 0x19, 0xfa, 0xbd, 0x79,
0x10, 0xb3, 0xd7, 0x91, 0x5d, 0x4d, 0x89, 0xd7, 0xac, 0x8e, 0xfa, 0x70, 0xea, 0xfd, 0xf9, 0x91, 0xbd, 0x0a, 0x1c, 0xfb,
0x0e, 0x54, 0xe7, 0x41, 0x64, 0xf2, 0x51, 0x9e, 0xf2, 0x92, 0x5f, 0x57, 0x54, 0xed, 0xbc, 0xe2, 0x94, 0xe9, 0x3f, 0xb4,
0xd1, 0x7f, 0x1f, 0xd5, 0x3f, 0xb7, 0x03, 0x80, 0xc2, 0x3d, 0xa5, 0xc2, 0xeb, 0x96, 0x3d, 0x56, 0x93, 0xcf, 0xa9, 0x91,
0xaa, 0x54, 0xfc, 0xfb, 0x22, 0x22, 0x33, 0xfe, 0x9f, 0xa1, 0xbf, 0x8e, 0xca, 0x83, 0x89, 0xfa, 0xdd, 0x54, 0xac, 0x7f,
0xd6, 0xb7, 0x70, 0x46, 0xfc, 0xf7, 0xf1, 0x9d, 0xe6, 0x47, 0x2a, 0xa1, 0xff, 0xad, 0xbe, 0xda, 0xe2, 0x20, 0x8a, 0x3b,
0x5a, 0xd1, 0x3f, 0xf2, 0x16, 0xb5, 0xa2, 0x7f, 0x3f, 0x1f, 0x5c, 0xf6, 0xfd, 0xef, 0x9b, 0xfa, 0xaf, 0xc6, 0xff, 0x69,
0x3e, 0xc8, 0xd8, 0x5e, 0x8b, 0x4f, 0xe9, 0xaf, 0x03, 0xf4, 0x57, 0xab, 0x11, 0xca, 0xe9, 0x83, 0xd5, 0x03, 0xcf, 0xff,
0xf1, 0x99, 0xc4, 0x8e, 0xf1, 0x7f, 0xbe, 0xfe, 0x4f, 0xec, 0x90, 0xe8, 0xd9, 0xcf, 0xed, 0x0c, 0xfd, 0xbb, 0xbd, 0xff,
0x79, 0xe7, 0x92, 0x9c, 0xf3, 0x3f, 0x67, 0x55, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xf8, 0x72, 0x0e, 0xc0, 0xaa, 0x03, 0x5f, 0xcb, 0x2b, 0x55, 0x0a, 0x38, 0xf8, 0xd5, 0xc8, 0xbf, 0x3f, 0x26, 0x6b, 0x2c,
0x57, 0x9c, 0xad, 0xa7, 0x5a, 0x7a, 0x55, 0x85, 0xfc, 0x61, 0xa9, 0x92, 0x1f, 0x73, 0x1f, 0x3f, 0xed, 0xdf, 0x5f, 0x5b,
0x11, 0xdf, 0x9d, 0x0f, 0x51, 0xe1, 0x25, 0x7e, 0x3e, 0x1f, 0x61, 0xa7, 0x7f, 0xff, 0xae, 0x5a, 0xb9, 0x36, 0x65, 0x1b,
0xb0, 0x1a, 0xda, 0x3d, 0xdb, 0xa4, 0x53, 0xfe, 0x9f, 0x67, 0xa5, 0x7d, 0x35, 0x4f, 0x49, 0x8b, 0x3d, 0xea, 0x2e, 0x87,
0x81, 0x8e, 0xf5, 0x43, 0x7b, 0x8f, 0xfc, 0x8c, 0xfe, 0xe7, 0xf8, 0xb4, 0xd0, 0x1f, 0xfd, 0xd1, 0xff, 0xcb, 0xfa, 0xeb,
0x00, 0xfd, 0x3d, 0xfb, 0x36, 0xa0, 0x7f, 0x27, 0x3f, 0x74, 0x34, 0xfe, 0x87, 0x25, 0xc3, 0x1c, 0xfd, 0xbb, 0xf8, 0xa1,
0xd1, 0xbf, 0x4f, 0x9e, 0x46, 0x6f, 0xfd, 0xcf, 0x7b, 0xff, 0x1b, 0xc5, 0xb5, 0xd1, 0xdf, 0xe3, 0x87, 0x67, 0x0e, 0x88,
0xf9, 0x27, 0x40, 0x7f, 0xf8, 0xa2, 0xf6, 0xa8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, 0x7a, 0x16,
0x01, 0xfd, 0x01, 0x00, 0x80, 0xfe, 0x1f, 0xd0, 0x1f, 0xd0, 0x1f, 0xd0, 0x1f, 0xd0, 0x1f, 0xd0, 0x1f, 0xd0, 0x1f, 0xb2,
0x15, 0x0d, 0x68, 0x07, 0x7a, 0x01, 0x40, 0x7f, 0xc0, 0x39, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xbb, 0x01, 0xfd, 0x61, 0xab, 0xfe, 0x7f, 0x01 };
// Font glyphs rectangles data (on atlas)
static const Rectangle ashesFontRecs[189] = {
{ 4, 4, 4 , 16 },
{ 16, 4, 1 , 10 },
{ 25, 4, 3 , 3 },
{ 36, 4, 6 , 8 },
{ 50, 4, 5 , 11 },
{ 63, 4, 7 , 8 },
{ 78, 4, 6 , 9 },
{ 92, 4, 1 , 3 },
{ 101, 4, 3 , 12 },
{ 112, 4, 3 , 12 },
{ 123, 4, 5 , 5 },
{ 136, 4, 5 , 5 },
{ 149, 4, 2 , 2 },
{ 159, 4, 4 , 1 },
{ 171, 4, 1 , 1 },
{ 180, 4, 5 , 10 },
{ 193, 4, 4 , 8 },
{ 205, 4, 2 , 8 },
{ 215, 4, 4 , 8 },
{ 227, 4, 4 , 8 },
{ 239, 4, 6 , 8 },
{ 4, 28, 4 , 8 },
{ 16, 28, 4 , 8 },
{ 28, 28, 4 , 8 },
{ 40, 28, 4 , 8 },
{ 52, 28, 4 , 8 },
{ 64, 28, 1 , 5 },
{ 73, 28, 2 , 6 },
{ 83, 28, 4 , 7 },
{ 95, 28, 4 , 4 },
{ 107, 28, 4 , 7 },
{ 119, 28, 4 , 10 },
{ 131, 28, 8 , 7 },
{ 147, 28, 4 , 10 },
{ 159, 28, 4 , 10 },
{ 171, 28, 4 , 10 },
{ 183, 28, 4 , 10 },
{ 195, 28, 4 , 10 },
{ 207, 28, 5 , 10 },
{ 220, 28, 4 , 10 },
{ 232, 28, 4 , 10 },
{ 244, 28, 1 , 10 },
{ 4, 52, 3 , 10 },
{ 15, 52, 4 , 10 },
{ 27, 52, 4 , 10 },
{ 39, 52, 7 , 10 },
{ 54, 52, 4 , 10 },
{ 66, 52, 4 , 10 },
{ 78, 52, 4 , 10 },
{ 90, 52, 5 , 11 },
{ 103, 52, 4 , 10 },
{ 115, 52, 4 , 10 },
{ 127, 52, 5 , 10 },
{ 140, 52, 4 , 10 },
{ 152, 52, 4 , 10 },
{ 164, 52, 7 , 10 },
{ 179, 52, 4 , 10 },
{ 191, 52, 4 , 10 },
{ 203, 52, 4 , 10 },
{ 215, 52, 2 , 12 },
{ 225, 52, 5 , 10 },
{ 238, 52, 2 , 12 },
{ 4, 76, 5 , 3 },
{ 17, 76, 5 , 1 },
{ 30, 76, 2 , 2 },
{ 40, 76, 4 , 8 },
{ 52, 76, 4 , 10 },
{ 64, 76, 3 , 8 },
{ 75, 76, 4 , 10 },
{ 87, 76, 4 , 8 },
{ 99, 76, 3 , 10 },
{ 110, 76, 5 , 11 },
{ 123, 76, 4 , 10 },
{ 135, 76, 1 , 10 },
{ 144, 76, 3 , 13 },
{ 155, 76, 4 , 10 },
{ 167, 76, 2 , 10 },
{ 177, 76, 7 , 8 },
{ 192, 76, 4 , 8 },
{ 204, 76, 4 , 8 },
{ 216, 76, 4 , 11 },
{ 228, 76, 4 , 11 },
{ 240, 76, 3 , 8 },
{ 4, 100, 4 , 8 },
{ 16, 100, 3 , 10 },
{ 27, 100, 4 , 8 },
{ 39, 100, 5 , 8 },
{ 52, 100, 7 , 8 },
{ 67, 100, 4 , 8 },
{ 79, 100, 4 , 11 },
{ 91, 100, 4 , 8 },
{ 103, 100, 4 , 12 },
{ 115, 100, 1 , 10 },
{ 124, 100, 4 , 12 },
{ 136, 100, 4 , 2 },
{ 148, 100, 1 , 10 },
{ 157, 100, 4 , 12 },
{ 169, 100, 5 , 10 },
{ 182, 100, 5 , 10 },
{ 195, 100, 5 , 10 },
{ 208, 100, 0 , 0 },
{ 216, 100, 4 , 10 },
{ 228, 100, 0 , 0 },
{ 236, 100, 7 , 9 },
{ 4, 124, 3 , 7 },
{ 15, 124, 6 , 5 },
{ 29, 124, 0 , 0 },
{ 37, 124, 7 , 9 },
{ 52, 124, 4 , 1 },
{ 64, 124, 3 , 5 },
{ 75, 124, 5 , 7 },
{ 88, 124, 3 , 5 },
{ 99, 124, 0 , 0 },
{ 107, 124, 0 , 0 },
{ 115, 124, 4 , 11 },
{ 127, 124, 6 , 10 },
{ 141, 124, 3 , 3 },
{ 152, 124, 0 , 0 },
{ 160, 124, 2 , 5 },
{ 170, 124, 3 , 5 },
{ 181, 124, 6 , 5 },
{ 195, 124, 7 , 10 },
{ 210, 124, 7 , 8 },
{ 225, 124, 0 , 0 },
{ 233, 124, 4 , 10 },
{ 4, 148, 4 , 13 },
{ 16, 148, 4 , 13 },
{ 28, 148, 4 , 13 },
{ 40, 148, 4 , 13 },
{ 52, 148, 4 , 13 },
{ 64, 148, 4 , 13 },
{ 76, 148, 7 , 10 },
{ 91, 148, 4 , 13 },
{ 103, 148, 4 , 13 },
{ 115, 148, 4 , 13 },
{ 127, 148, 4 , 13 },
{ 139, 148, 4 , 13 },
{ 151, 148, 2 , 13 },
{ 161, 148, 2 , 13 },
{ 171, 148, 3 , 13 },
{ 182, 148, 3 , 13 },
{ 193, 148, 5 , 10 },
{ 206, 148, 4 , 13 },
{ 218, 148, 4 , 13 },
{ 230, 148, 4 , 13 },
{ 242, 148, 4 , 13 },
{ 4, 172, 4 , 13 },
{ 16, 172, 4 , 13 },
{ 28, 172, 5 , 5 },
{ 41, 172, 6 , 12 },
{ 55, 172, 4 , 13 },
{ 67, 172, 4 , 13 },
{ 79, 172, 4 , 13 },
{ 91, 172, 4 , 13 },
{ 103, 172, 4 , 13 },
{ 115, 172, 0 , 0 },
{ 123, 172, 5 , 12 },
{ 136, 172, 4 , 12 },
{ 148, 172, 4 , 12 },
{ 160, 172, 4 , 12 },
{ 172, 172, 4 , 12 },
{ 184, 172, 4 , 12 },
{ 196, 172, 4 , 12 },
{ 208, 172, 7 , 8 },
{ 223, 172, 3 , 11 },
{ 234, 172, 4 , 12 },
{ 4, 196, 4 , 12 },
{ 16, 196, 4 , 12 },
{ 28, 196, 4 , 12 },
{ 40, 196, 3 , 12 },
{ 51, 196, 3 , 12 },
{ 62, 196, 3 , 12 },
{ 73, 196, 3 , 12 },
{ 84, 196, 0 , 0 },
{ 92, 196, 4 , 12 },
{ 104, 196, 4 , 12 },
{ 116, 196, 4 , 12 },
{ 128, 196, 4 , 12 },
{ 140, 196, 4 , 12 },
{ 152, 196, 4 , 12 },
{ 164, 196, 5 , 5 },
{ 177, 196, 6 , 10 },
{ 191, 196, 4 , 12 },
{ 203, 196, 4 , 12 },
{ 215, 196, 4 , 12 },
{ 227, 196, 4 , 12 },
{ 239, 196, 4 , 15 },
{ 4, 220, 0 , 0 },
{ 12, 220, 4 , 15 },
};
// Font glyphs info data
// NOTE: No glyphs.image data provided
static const GlyphInfo ashesFontGlyphs[189] = {
{ 32, 0, 0, 4, { 0 }},
{ 33, 0, 3, 4, { 0 }},
{ 34, 0, 1, 5, { 0 }},
{ 35, 0, 4, 8, { 0 }},
{ 36, 0, 2, 7, { 0 }},
{ 37, 0, 5, 9, { 0 }},
{ 38, 0, 4, 8, { 0 }},
{ 39, 0, 1, 3, { 0 }},
{ 40, 0, 2, 5, { 0 }},
{ 41, 0, 2, 5, { 0 }},
{ 42, 0, 3, 7, { 0 }},
{ 43, 0, 6, 7, { 0 }},
{ 44, 0, 12, 4, { 0 }},
{ 45, 0, 9, 5, { 0 }},
{ 46, 0, 12, 3, { 0 }},
{ 47, 0, 3, 7, { 0 }},
{ 48, 0, 5, 6, { 0 }},
{ 49, 0, 5, 4, { 0 }},
{ 50, 0, 5, 6, { 0 }},
{ 51, 0, 5, 6, { 0 }},
{ 52, 0, 5, 8, { 0 }},
{ 53, 0, 5, 6, { 0 }},
{ 54, 0, 5, 6, { 0 }},
{ 55, 0, 5, 6, { 0 }},
{ 56, 0, 5, 6, { 0 }},
{ 57, 0, 5, 6, { 0 }},
{ 58, 0, 8, 3, { 0 }},
{ 59, 0, 8, 4, { 0 }},
{ 60, 0, 5, 6, { 0 }},
{ 61, 0, 7, 7, { 0 }},
{ 62, 0, 5, 6, { 0 }},
{ 63, 1, 3, 7, { 0 }},
{ 64, 0, 5, 10, { 0 }},
{ 65, 0, 3, 6, { 0 }},
{ 66, 0, 3, 6, { 0 }},
{ 67, 0, 3, 6, { 0 }},
{ 68, 0, 3, 6, { 0 }},
{ 69, 0, 3, 6, { 0 }},
{ 70, 0, 3, 6, { 0 }},
{ 71, 0, 3, 6, { 0 }},
{ 72, 0, 3, 6, { 0 }},
{ 73, 0, 3, 3, { 0 }},
{ 74, 0, 3, 5, { 0 }},
{ 75, 0, 3, 6, { 0 }},
{ 76, 0, 3, 6, { 0 }},
{ 77, 0, 3, 9, { 0 }},
{ 78, 0, 3, 6, { 0 }},
{ 79, 0, 3, 6, { 0 }},
{ 80, 0, 3, 6, { 0 }},
{ 81, 0, 3, 7, { 0 }},
{ 82, 0, 3, 6, { 0 }},
{ 83, 0, 3, 6, { 0 }},
{ 84, 0, 3, 6, { 0 }},
{ 85, 0, 3, 6, { 0 }},
{ 86, 0, 3, 6, { 0 }},
{ 87, 0, 3, 9, { 0 }},
{ 88, 0, 3, 6, { 0 }},
{ 89, 0, 3, 6, { 0 }},
{ 90, 0, 3, 6, { 0 }},
{ 91, 0, 2, 4, { 0 }},
{ 92, 0, 3, 7, { 0 }},
{ 93, 0, 2, 4, { 0 }},
{ 94, 0, 3, 7, { 0 }},
{ 95, 0, 12, 7, { 0 }},
{ 96, 0, 1, 4, { 0 }},
{ 97, 0, 5, 6, { 0 }},
{ 98, 0, 3, 6, { 0 }},
{ 99, 0, 5, 5, { 0 }},
{ 100, 0, 3, 6, { 0 }},
{ 101, 0, 5, 6, { 0 }},
{ 102, 0, 3, 5, { 0 }},
{ 103, 0, 5, 6, { 0 }},
{ 104, 0, 3, 6, { 0 }},
{ 105, 0, 3, 3, { 0 }},
{ 106, 0, 3, 5, { 0 }},
{ 107, 0, 3, 6, { 0 }},
{ 108, 0, 3, 4, { 0 }},
{ 109, 0, 5, 9, { 0 }},
{ 110, 0, 5, 6, { 0 }},
{ 111, 0, 5, 6, { 0 }},
{ 112, 0, 5, 6, { 0 }},
{ 113, 0, 5, 6, { 0 }},
{ 114, 0, 5, 5, { 0 }},
{ 115, 0, 5, 6, { 0 }},
{ 116, 0, 3, 5, { 0 }},
{ 117, 0, 5, 6, { 0 }},
{ 118, 0, 5, 7, { 0 }},
{ 119, 0, 5, 9, { 0 }},
{ 120, 0, 5, 6, { 0 }},
{ 121, 0, 5, 6, { 0 }},
{ 122, 0, 5, 6, { 0 }},
{ 123, 0, 2, 6, { 0 }},
{ 124, 0, 3, 3, { 0 }},
{ 125, 0, 2, 6, { 0 }},
{ 126, 0, 1, 6, { 0 }},
{ 161, 0, 4, 4, { 0 }},
{ 162, 0, 3, 6, { 0 }},
{ 163, 0, 3, 7, { 0 }},
{ 8364, 0, 3, 7, { 0 }},
{ 165, 0, 3, 7, { 0 }},
{ 352, 0, 0, 0, { 0 }},
{ 167, 0, 3, 6, { 0 }},
{ 353, 0, 0, 0, { 0 }},
{ 169, 0, 1, 9, { 0 }},
{ 170, 0, 1, 5, { 0 }},
{ 171, 0, 6, 8, { 0 }},
{ 172, 0, 0, 0, { 0 }},
{ 174, 0, 1, 9, { 0 }},
{ 175, 0, 0, 6, { 0 }},
{ 176, 0, 1, 5, { 0 }},
{ 177, 0, 5, 7, { 0 }},
{ 178, 0, 1, 5, { 0 }},
{ 179, 0, 0, 0, { 0 }},
{ 381, 0, 0, 0, { 0 }},
{ 181, 0, 5, 6, { 0 }},
{ 182, 0, 3, 8, { 0 }},
{ 183, 0, 7, 5, { 0 }},
{ 382, 0, 0, 0, { 0 }},
{ 185, 0, 1, 4, { 0 }},
{ 186, 0, 1, 5, { 0 }},
{ 187, 0, 6, 8, { 0 }},
{ 338, 0, 3, 9, { 0 }},
{ 339, 0, 5, 9, { 0 }},
{ 376, 0, 0, 0, { 0 }},
{ 191, 0, 4, 6, { 0 }},
{ 192, 0, 0, 6, { 0 }},
{ 193, 0, 0, 6, { 0 }},
{ 194, 0, 0, 6, { 0 }},
{ 195, 0, 0, 6, { 0 }},
{ 196, 0, 0, 6, { 0 }},
{ 197, 0, 0, 6, { 0 }},
{ 198, 0, 3, 9, { 0 }},
{ 199, 0, 3, 6, { 0 }},
{ 200, 0, 0, 6, { 0 }},
{ 201, 0, 0, 6, { 0 }},
{ 202, 0, 0, 6, { 0 }},
{ 203, 0, 0, 6, { 0 }},
{ 204, 0, 0, 4, { 0 }},
{ 205, 0, 0, 4, { 0 }},
{ 206, 0, 0, 5, { 0 }},
{ 207, 0, 0, 5, { 0 }},
{ 208, 0, 3, 7, { 0 }},
{ 209, 0, 0, 6, { 0 }},
{ 210, 0, 0, 6, { 0 }},
{ 211, 0, 0, 6, { 0 }},
{ 212, 0, 0, 6, { 0 }},
{ 213, 0, 0, 6, { 0 }},
{ 214, 0, 0, 6, { 0 }},
{ 215, 0, 7, 7, { 0 }},
{ 216, 0, 2, 8, { 0 }},
{ 217, 0, 0, 6, { 0 }},
{ 218, 0, 0, 6, { 0 }},
{ 219, 0, 0, 6, { 0 }},
{ 220, 0, 0, 6, { 0 }},
{ 221, 0, 0, 6, { 0 }},
{ 222, 0, 0, 0, { 0 }},
{ 223, 0, 3, 7, { 0 }},
{ 224, 0, 1, 6, { 0 }},
{ 225, 0, 1, 6, { 0 }},
{ 226, 0, 1, 6, { 0 }},
{ 227, 0, 1, 6, { 0 }},
{ 228, 0, 1, 6, { 0 }},
{ 229, 0, 1, 6, { 0 }},
{ 230, 0, 5, 9, { 0 }},
{ 231, 0, 5, 5, { 0 }},
{ 232, 0, 1, 6, { 0 }},
{ 233, 0, 1, 6, { 0 }},
{ 234, 0, 1, 6, { 0 }},
{ 235, 0, 1, 6, { 0 }},
{ 236, 0, 1, 5, { 0 }},
{ 237, 0, 1, 5, { 0 }},
{ 238, 0, 1, 5, { 0 }},
{ 239, 0, 1, 5, { 0 }},
{ 240, 0, 0, 0, { 0 }},
{ 241, 0, 1, 6, { 0 }},
{ 242, 0, 1, 6, { 0 }},
{ 243, 0, 1, 6, { 0 }},
{ 244, 0, 1, 6, { 0 }},
{ 245, 0, 1, 6, { 0 }},
{ 246, 0, 1, 6, { 0 }},
{ 247, 0, 7, 7, { 0 }},
{ 248, 0, 4, 8, { 0 }},
{ 249, 0, 1, 6, { 0 }},
{ 250, 0, 1, 6, { 0 }},
{ 251, 0, 1, 6, { 0 }},
{ 252, 0, 1, 6, { 0 }},
{ 253, 0, 1, 6, { 0 }},
{ 254, 0, 0, 0, { 0 }},
{ 255, 0, 1, 6, { 0 }},
};
// Style loading function: Ashes
static void GuiLoadStyleAshes(void)
{
// Load style properties provided
// NOTE: Default properties are propagated
for (int i = 0; i < ASHES_STYLE_PROPS_COUNT; i++)
{
GuiSetStyle(ashesStyleProps[i].controlId, ashesStyleProps[i].propertyId, ashesStyleProps[i].propertyValue);
}
// Custom font loading
// NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function
int ashesFontDataSize = 0;
unsigned char *data = DecompressData(ashesFontData, ASHES_STYLE_FONT_ATLAS_COMP_SIZE, &ashesFontDataSize);
Image imFont = { data, 256, 256, 1, 2 };
Font font = { 0 };
font.baseSize = 16;
font.glyphCount = 189;
// Load texture from image
font.texture = LoadTextureFromImage(imFont);
UnloadImage(imFont); // Uncompressed image data can be unloaded from memory
// Copy char recs data from global fontRecs
// NOTE: Required to avoid issues if trying to free font
font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle));
memcpy(font.recs, ashesFontRecs, font.glyphCount*sizeof(Rectangle));
// Copy font char info data from global fontChars
// NOTE: Required to avoid issues if trying to free font
font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo));
memcpy(font.glyphs, ashesFontGlyphs, font.glyphCount*sizeof(GlyphInfo));
GuiSetFont(font);
// Setup a white rectangle on the font to be used on shapes drawing,
// it makes possible to draw shapes and text (full UI) in a single draw call
Rectangle fontWhiteRec = { 254, 254, 1, 1 };
SetShapesTexture(font.texture, fontWhiteRec);
//-----------------------------------------------------------------
// TODO: Custom user style setup: Set specific properties here (if required)
// i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT
}

View File

@ -0,0 +1,610 @@
//////////////////////////////////////////////////////////////////////////////////
// //
// StyleAsCode exporter v2.0 - Style data exported as a values array //
// //
// USAGE: On init call: GuiLoadStyleBluish(); //
// //
// more info and bugs-report: github.com/raysan5/raygui //
// feedback and support: ray[at]raylibtech.com //
// //
// Copyright (c) 2020-2025 raylib technologies (@raylibtech) //
// //
//////////////////////////////////////////////////////////////////////////////////
#define BLUISH_STYLE_PROPS_COUNT 14
// Custom style name: Bluish
static const GuiStyleProp bluishStyleProps[BLUISH_STYLE_PROPS_COUNT] = {
{ 0, 0, (int)0x5ca6a6ff }, // DEFAULT_BORDER_COLOR_NORMAL
{ 0, 1, (int)0xb4e8f3ff }, // DEFAULT_BASE_COLOR_NORMAL
{ 0, 2, (int)0x447e77ff }, // DEFAULT_TEXT_COLOR_NORMAL
{ 0, 3, (int)0x5f8792ff }, // DEFAULT_BORDER_COLOR_FOCUSED
{ 0, 4, (int)0xcdeff7ff }, // DEFAULT_BASE_COLOR_FOCUSED
{ 0, 5, (int)0x4c6c74ff }, // DEFAULT_TEXT_COLOR_FOCUSED
{ 0, 6, (int)0x3b5b5fff }, // DEFAULT_BORDER_COLOR_PRESSED
{ 0, 7, (int)0xeaffffff }, // DEFAULT_BASE_COLOR_PRESSED
{ 0, 8, (int)0x275057ff }, // DEFAULT_TEXT_COLOR_PRESSED
{ 0, 9, (int)0x96aaacff }, // DEFAULT_BORDER_COLOR_DISABLED
{ 0, 10, (int)0xc8d7d9ff }, // DEFAULT_BASE_COLOR_DISABLED
{ 0, 11, (int)0x8c9c9eff }, // DEFAULT_TEXT_COLOR_DISABLED
{ 0, 18, (int)0x84adb7ff }, // DEFAULT_LINE_COLOR
{ 0, 19, (int)0xe8eef1ff }, // DEFAULT_BACKGROUND_COLOR
};
// WARNING: This style uses a custom font: "homespun.ttf" (size: 10, spacing: 1)
#define BLUISH_STYLE_FONT_ATLAS_COMP_SIZE 2730
// Font atlas image pixels data: DEFLATE compressed
static unsigned char bluishFontData[BLUISH_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed,
0x9d, 0xdb, 0x92, 0xdb, 0x38, 0x0c, 0x44, 0x45, 0xee, 0xff, 0xff, 0xf1, 0x90, 0xdc, 0xca, 0xc8, 0x33, 0xa9, 0x4d, 0xd4,
0x10, 0x01, 0x41, 0x17, 0xef, 0x9c, 0x9c, 0x4a, 0x1e, 0x44, 0x8b, 0x26, 0x09, 0x4a, 0x76, 0x84, 0x76, 0x63, 0x2c, 0x00,
0x00, 0x00, 0x00, 0x7f, 0x51, 0xc5, 0xb1, 0x2a, 0x5f, 0x5d, 0x1d, 0x3d, 0xad, 0xc7, 0xab, 0xd1, 0xee, 0xeb, 0xad, 0x3a,
0x7a, 0xb0, 0x5a, 0xec, 0xb6, 0x3f, 0x29, 0x2f, 0x32, 0x56, 0xb6, 0x7e, 0xaf, 0xc7, 0xf6, 0x2a, 0x79, 0x5e, 0x5f, 0x5d,
0xb3, 0xd8, 0x66, 0x88, 0x63, 0x7d, 0x73, 0xbe, 0x63, 0x14, 0xd1, 0x52, 0xc7, 0x10, 0xe3, 0x19, 0x9f, 0x67, 0x6d, 0xf7,
0x68, 0x9d, 0xb5, 0xf5, 0x1e, 0x6d, 0xa3, 0x8f, 0x26, 0x77, 0xc5, 0xaf, 0x77, 0x54, 0x2b, 0xd4, 0x45, 0x3c, 0xc7, 0xe6,
0x6b, 0x57, 0xca, 0xd4, 0xab, 0xad, 0x77, 0x18, 0xa3, 0x8d, 0xf6, 0x5a, 0x8f, 0x3f, 0x67, 0x31, 0x5c, 0xaf, 0xd7, 0x2d,
0xc7, 0xe3, 0xdf, 0x3f, 0xc7, 0x53, 0x36, 0xae, 0x83, 0x5f, 0xd1, 0xea, 0x22, 0x5e, 0x6a, 0x3c, 0xeb, 0xca, 0x95, 0xcd,
0x1e, 0xad, 0xb3, 0x96, 0xe9, 0xd5, 0xde, 0x3e, 0x7f, 0x1d, 0xe9, 0xf6, 0x3c, 0xca, 0x67, 0xdb, 0xd6, 0xda, 0xb5, 0xa4,
0xfb, 0xaa, 0x9a, 0xef, 0x62, 0x5e, 0x5b, 0xdb, 0xab, 0xd0, 0x5d, 0x2d, 0xc7, 0xe3, 0xaf, 0x77, 0xf4, 0x78, 0xfd, 0x55,
0x33, 0x6b, 0x62, 0x3c, 0x45, 0xb4, 0xd8, 0x67, 0x1d, 0x89, 0x7f, 0x79, 0x8d, 0xb4, 0x8a, 0xeb, 0x79, 0x88, 0x2b, 0xfa,
0xcc, 0xe8, 0xfb, 0xe3, 0x5f, 0x5e, 0x7b, 0xb5, 0x88, 0x4f, 0xa5, 0x6b, 0xe3, 0x5f, 0x5e, 0xf7, 0xff, 0x2a, 0x46, 0x5f,
0x64, 0xf4, 0xf5, 0xdd, 0xd6, 0xf3, 0xb9, 0xea, 0xbb, 0xfe, 0xd7, 0x75, 0x56, 0x7b, 0xeb, 0xbc, 0xd8, 0xdb, 0xf3, 0xf5,
0xc5, 0x7f, 0xc8, 0x4f, 0x9e, 0xaf, 0x5d, 0x7c, 0x74, 0x16, 0x3d, 0xe9, 0xfa, 0xef, 0x72, 0x3c, 0xe5, 0x75, 0xff, 0xdf,
0x9e, 0xb3, 0xe7, 0x2a, 0xf4, 0xc4, 0x7f, 0x2f, 0xc6, 0x67, 0x5e, 0xfb, 0xba, 0x6f, 0x7f, 0xfc, 0xd7, 0x1e, 0xb7, 0xde,
0xe5, 0xec, 0x5d, 0xbc, 0xb8, 0xbe, 0xff, 0x15, 0xe3, 0x3b, 0xcf, 0xd7, 0xde, 0xf1, 0xcc, 0x2f, 0x2b, 0xce, 0xd7, 0x33,
0x76, 0x67, 0xe0, 0x89, 0x7f, 0x91, 0xab, 0x5a, 0x2e, 0xff, 0xfc, 0xb7, 0xe2, 0x6f, 0x8d, 0xd4, 0x8a, 0xbf, 0x6f, 0x16,
0xc3, 0xf9, 0x1d, 0xfc, 0x79, 0xf1, 0x1f, 0xdf, 0xff, 0x1f, 0x9a, 0x9b, 0x9b, 0x7a, 0xbd, 0xd5, 0xd3, 0x3d, 0xb3, 0x8e,
0x8c, 0xe7, 0x69, 0xb3, 0x80, 0x23, 0x7c, 0x04, 0xe2, 0xf8, 0x41, 0xec, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xd2, 0x54, 0x3e, 0x59, 0x0a, 0x93, 0xec, 0x96, 0x63, 0xaa, 0x20, 0xad, 0xce, 0xb1, 0x14, 0x49, 0xf6, 0x28, 0xaf, 0x5a,
0x8f, 0xe5, 0x22, 0xcd, 0xcf, 0x08, 0x28, 0x52, 0xae, 0x6a, 0x69, 0xd3, 0x2a, 0x8c, 0xed, 0x6c, 0xae, 0x56, 0xe7, 0x74,
0xb1, 0x56, 0x7b, 0xa3, 0xbc, 0x6e, 0x3d, 0x6a, 0x60, 0x74, 0x91, 0xa7, 0xe5, 0x63, 0x27, 0x3b, 0xd7, 0x5c, 0x2d, 0x7d,
0x37, 0xd7, 0xe7, 0x53, 0xbe, 0x1c, 0xcb, 0xab, 0x5a, 0xea, 0x3c, 0xa5, 0xff, 0xb0, 0x46, 0xa9, 0x74, 0x15, 0x23, 0x3c,
0xeb, 0x96, 0x7a, 0x4e, 0x0b, 0xc5, 0x5f, 0xcf, 0x4a, 0xe7, 0xe6, 0x6d, 0xd5, 0xa3, 0xee, 0xcd, 0xd7, 0x32, 0xaf, 0x3e,
0x50, 0x31, 0xd6, 0x1a, 0x09, 0xaf, 0x76, 0x66, 0x18, 0xba, 0x8a, 0xbd, 0xb9, 0x35, 0x57, 0x6e, 0x72, 0xec, 0xac, 0xe1,
0x71, 0xb5, 0xcc, 0x9c, 0x3a, 0xa3, 0x1b, 0xf3, 0xb5, 0x15, 0x26, 0xdd, 0x75, 0x4e, 0x4f, 0xd0, 0xab, 0x78, 0x77, 0x8f,
0xa5, 0xc3, 0xe9, 0x46, 0xfc, 0xab, 0x73, 0x6e, 0x6b, 0x4b, 0x75, 0xe5, 0x82, 0xc7, 0xce, 0x1a, 0x1e, 0x57, 0xcb, 0xcc,
0xad, 0x5f, 0x09, 0xdf, 0xb1, 0xb3, 0xce, 0x39, 0x6f, 0x07, 0x0c, 0x77, 0x3f, 0xe3, 0x7b, 0xa7, 0x66, 0xde, 0xff, 0x4b,
0xe0, 0x13, 0xb9, 0x1c, 0xd6, 0x6a, 0xcc, 0xdf, 0xb1, 0x63, 0x0a, 0x93, 0xac, 0x73, 0x9e, 0xa5, 0xdd, 0x28, 0xc1, 0x3b,
0xf6, 0x35, 0x2d, 0x67, 0xc4, 0x3f, 0xaa, 0x30, 0xe9, 0x69, 0xe7, 0x2c, 0x97, 0x6b, 0x7a, 0x86, 0xbc, 0xfe, 0xad, 0xf5,
0xc8, 0x5c, 0x43, 0x4b, 0x07, 0x64, 0x8f, 0xe0, 0x27, 0xd0, 0x78, 0x66, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xe0, 0xd0, 0xff, 0xd8, 0xea, 0x1b, 0x9f, 0x42, 0xc5, 0x56, 0xed, 0x78, 0x3d, 0x7a, 0xea, 0xe5, 0xaa, 0x9b, 0xec,
0x96, 0xc8, 0x5a, 0xec, 0xb5, 0xf8, 0xce, 0xdc, 0x7f, 0xde, 0xad, 0x35, 0x25, 0xea, 0xa9, 0x76, 0xfb, 0x3c, 0x2b, 0x27,
0xfb, 0x37, 0x76, 0x47, 0xb6, 0xfe, 0x5b, 0x1f, 0xa8, 0x4f, 0xb2, 0x94, 0x4b, 0x5f, 0x23, 0xcf, 0xcc, 0x16, 0xae, 0x2d,
0x6d, 0x73, 0x2d, 0xa2, 0x39, 0xb4, 0x88, 0x0e, 0xc5, 0xce, 0x86, 0xe5, 0xc5, 0x3f, 0x3a, 0xe7, 0x6b, 0x5b, 0xbc, 0x3e,
0x22, 0xcf, 0x8b, 0xbf, 0xa5, 0xf2, 0xc9, 0x8a, 0xff, 0x31, 0x1d, 0x4c, 0x5e, 0xfc, 0x23, 0x1a, 0x2e, 0x3d, 0x76, 0x4b,
0x07, 0x75, 0x65, 0xfc, 0xb5, 0x8f, 0xd6, 0x4c, 0xfc, 0xfd, 0x2a, 0x1f, 0x7f, 0xfc, 0x8f, 0xe9, 0x60, 0xf2, 0xe2, 0x1f,
0xd1, 0x70, 0x74, 0xc3, 0x2d, 0xaa, 0xbb, 0xbd, 0x47, 0xc6, 0x8e, 0xc6, 0xb0, 0x05, 0xe2, 0x5f, 0xe4, 0x18, 0x8f, 0xea,
0x3f, 0x3d, 0xd7, 0x7f, 0x39, 0x4d, 0x07, 0x93, 0x7b, 0xff, 0xcf, 0x5a, 0x87, 0xb2, 0xa3, 0x3e, 0x2c, 0x01, 0xb5, 0x48,
0x4f, 0x5e, 0x8b, 0x39, 0xbd, 0x43, 0x4e, 0xfc, 0x23, 0x7d, 0xcd, 0x9d, 0xe3, 0x8d, 0x7f, 0x09, 0xc4, 0x3f, 0x73, 0xec,
0x76, 0xfc, 0x8b, 0xa1, 0x16, 0xd9, 0x3f, 0x27, 0x3b, 0xfe, 0x51, 0x55, 0x4b, 0x49, 0xec, 0x6b, 0x24, 0xc7, 0xdf, 0xaf,
0x93, 0xc9, 0x1d, 0xbb, 0x1d, 0xff, 0xf8, 0xe8, 0xd6, 0x3f, 0xf5, 0x04, 0x0d, 0x3d, 0xe0, 0x38, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x2c, 0x46, 0x45, 0x2a, 0x5b, 0x65, 0x34, 0xaf, 0x16, 0xfa, 0x52, 0x50, 0x6c,
0xeb, 0x27, 0x72, 0x9c, 0x7e, 0xf6, 0x6b, 0x77, 0x79, 0xdf, 0x47, 0xad, 0x56, 0x64, 0x6c, 0x67, 0xd7, 0x38, 0x9b, 0x53,
0xf9, 0x58, 0xba, 0x17, 0xdf, 0x6f, 0x50, 0x95, 0x37, 0x4d, 0x15, 0x4e, 0x37, 0xde, 0xdf, 0xee, 0x5b, 0x5e, 0x15, 0xba,
0x9f, 0x4c, 0x17, 0x8b, 0x21, 0xf7, 0xeb, 0x08, 0x8c, 0xad, 0x89, 0xa3, 0xaa, 0x8f, 0x1a, 0xfe, 0xa5, 0x74, 0xdc, 0xcb,
0x61, 0xd6, 0x53, 0x49, 0x67, 0x0c, 0xd7, 0x5c, 0xb7, 0x77, 0x07, 0x74, 0x79, 0x8d, 0x6d, 0x8f, 0xb5, 0x4a, 0x7d, 0xcb,
0x22, 0xab, 0x99, 0xf9, 0xbd, 0x6a, 0x86, 0xa8, 0x1a, 0x66, 0xe7, 0x8f, 0xd4, 0xd8, 0x54, 0xb5, 0xa4, 0x45, 0xf4, 0xd1,
0xc2, 0xbf, 0x09, 0x1f, 0x3b, 0x75, 0xa4, 0x3c, 0x3d, 0x5b, 0x3b, 0xc0, 0xaa, 0xe4, 0xd6, 0x12, 0x6a, 0x95, 0xf8, 0xbd,
0x6a, 0x2c, 0xe5, 0x81, 0xdd, 0x9b, 0xd7, 0x9b, 0x45, 0xef, 0x19, 0xdf, 0x9d, 0x21, 0xcb, 0x61, 0x66, 0xee, 0xce, 0x59,
0x8c, 0x19, 0x2d, 0xee, 0x1d, 0x70, 0x6e, 0x25, 0x8f, 0xf3, 0x94, 0x07, 0xb3, 0xb3, 0xc8, 0xce, 0x2c, 0xcf, 0xc7, 0x7f,
0x39, 0xe4, 0x09, 0x52, 0xc2, 0x5a, 0x19, 0xdf, 0x0e, 0x38, 0x3b, 0xfe, 0x67, 0x29, 0x0f, 0xb2, 0x1c, 0x38, 0xfa, 0x43,
0xe3, 0xbf, 0xe7, 0x36, 0xe3, 0x8f, 0xa5, 0x5f, 0x31, 0xba, 0xdc, 0x72, 0x67, 0xc8, 0x3e, 0x67, 0x71, 0xff, 0x4f, 0xe6,
0x19, 0xf1, 0x8f, 0x39, 0xd4, 0x14, 0xb7, 0x97, 0xd0, 0x5d, 0xf1, 0xf7, 0xd7, 0x91, 0x8a, 0x9d, 0x93, 0xaf, 0xbd, 0xbc,
0x22, 0xfe, 0xf0, 0x3e, 0xce, 0x47, 0x0d, 0x7d, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x29, 0xff,
0xc1, 0xa3, 0x5e, 0xb9, 0xbf, 0xa5, 0xee, 0x64, 0xb5, 0x4a, 0xb8, 0xa5, 0xa4, 0xf5, 0x69, 0x69, 0x8c, 0x8e, 0xd6, 0x3c,
0xfb, 0xea, 0xbb, 0x84, 0xd5, 0x3f, 0xbf, 0x73, 0xd0, 0xeb, 0xbf, 0x35, 0x29, 0xb3, 0x9e, 0xdf, 0x72, 0xfe, 0xaf, 0xf9,
0xcf, 0xf0, 0x1b, 0xb0, 0x1c, 0x22, 0xea, 0xb4, 0xb6, 0xa2, 0xc9, 0x9c, 0x6a, 0x97, 0x9e, 0x01, 0x2d, 0x90, 0x83, 0xb8,
0xdf, 0x65, 0xa7, 0x39, 0xeb, 0x50, 0xd5, 0x0b, 0x3d, 0x36, 0xfa, 0x8e, 0x1e, 0xc6, 0xa7, 0xa1, 0xd1, 0x1e, 0x0a, 0x8b,
0xeb, 0xb5, 0xaa, 0x26, 0x51, 0x79, 0xcb, 0xf8, 0x2f, 0x4e, 0x6d, 0x5f, 0x9f, 0xf0, 0xcb, 0xc8, 0xf2, 0xd8, 0x28, 0x01,
0x85, 0x4f, 0x31, 0xea, 0x8f, 0xf9, 0xe2, 0xaf, 0xaa, 0xd5, 0xf9, 0xef, 0x8d, 0x57, 0xb8, 0x6c, 0xe4, 0x57, 0xb0, 0xc9,
0x73, 0xf3, 0xc8, 0xf7, 0xd8, 0xb0, 0x32, 0xe5, 0x5a, 0x57, 0xe9, 0x8b, 0xbf, 0xd7, 0xdb, 0xe1, 0x8a, 0xf8, 0x47, 0x6b,
0xdb, 0xe4, 0x3a, 0x73, 0x94, 0x87, 0x78, 0x6c, 0x78, 0x1d, 0x42, 0x8e, 0xdf, 0xff, 0xb3, 0xf5, 0x08, 0x79, 0x99, 0xea,
0x6b, 0x7c, 0x36, 0x22, 0x3a, 0x9d, 0xb3, 0x32, 0xf3, 0xfe, 0xec, 0xbc, 0x47, 0x5b, 0xd9, 0xdf, 0x2a, 0xfe, 0x4f, 0xd6,
0xf6, 0x3c, 0x89, 0x33, 0x6b, 0x9e, 0xa1, 0xfe, 0x79, 0xd7, 0x3d, 0xcd, 0x1a, 0xfc, 0x6c, 0x95, 0x17, 0x6b, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x38, 0x00, 0x2d, 0xd2, 0xd3, 0x66, 0xbe, 0x87, 0x9a, 0xe6, 0x2f, 0xb4, 0x77,
0x4e, 0x75, 0xd6, 0x25, 0x2b, 0x6e, 0x7d, 0xce, 0xb1, 0xda, 0x63, 0xbe, 0x95, 0x8e, 0xf4, 0x35, 0xb7, 0x5e, 0x33, 0xfa,
0x2f, 0x4b, 0x45, 0xd1, 0xa6, 0x9e, 0xae, 0x0f, 0xe3, 0x79, 0x76, 0xfb, 0x9c, 0xc3, 0x87, 0xb3, 0x7a, 0x96, 0x7d, 0x8e,
0xaa, 0x08, 0xa6, 0xfa, 0x2b, 0x9f, 0x2a, 0x89, 0xe6, 0xd2, 0xe7, 0xec, 0xbf, 0x93, 0xfa, 0x4d, 0x77, 0x73, 0x57, 0x04,
0xb0, 0xab, 0x88, 0x95, 0xc3, 0x1e, 0x3e, 0x31, 0xe7, 0x94, 0x35, 0xbf, 0xd6, 0xa6, 0xde, 0xbf, 0x1a, 0x2e, 0x32, 0x4d,
0xea, 0x5f, 0xb4, 0xf7, 0x8b, 0x75, 0x4e, 0x79, 0x65, 0xfd, 0xea, 0xe6, 0xf5, 0xb2, 0xad, 0xc2, 0x2a, 0xa6, 0x37, 0x8d,
0xd6, 0x09, 0x95, 0x5d, 0x5f, 0xa3, 0xad, 0xb5, 0xe8, 0xc2, 0x53, 0xa8, 0x8b, 0x2b, 0x4d, 0x8d, 0x5b, 0x1d, 0xcf, 0x8d,
0xbf, 0x76, 0x41, 0x1a, 0x93, 0x33, 0xff, 0xad, 0x20, 0x2c, 0x8e, 0x3b, 0xa5, 0xe5, 0x7e, 0x54, 0x0c, 0xcf, 0xa6, 0x2e,
0xe3, 0xa9, 0xaf, 0xbd, 0x2e, 0x77, 0xa7, 0xb5, 0x2e, 0x7d, 0x77, 0xe7, 0xa8, 0x5c, 0x70, 0x71, 0xad, 0x91, 0xaa, 0x14,
0x78, 0xcd, 0xf5, 0xaf, 0x34, 0x14, 0x7d, 0x5a, 0x75, 0x62, 0xed, 0xed, 0x3d, 0xc7, 0x24, 0xbf, 0xe2, 0x73, 0x8d, 0xc7,
0x76, 0xfc, 0x6b, 0x9a, 0x1a, 0x60, 0x7c, 0xaf, 0x68, 0x0f, 0x7e, 0xb2, 0xce, 0xdf, 0xff, 0xd5, 0x27, 0x70, 0x99, 0xdc,
0xb5, 0xc7, 0xe2, 0x5f, 0x4c, 0xcf, 0x96, 0x72, 0xf0, 0xfa, 0xb7, 0xd4, 0x9b, 0xb6, 0xcb, 0x9a, 0xff, 0xfa, 0xef, 0x52,
0x6d, 0xf7, 0xec, 0xf8, 0xab, 0x71, 0xcf, 0xce, 0xe7, 0x58, 0xfc, 0x6d, 0x85, 0xd2, 0x6c, 0xaf, 0xf6, 0xdc, 0x86, 0xeb,
0xbb, 0x97, 0xf5, 0xad, 0xac, 0x7c, 0xbf, 0xa6, 0x5e, 0xe0, 0x1b, 0x74, 0xc5, 0x3b, 0xdd, 0xad, 0x83, 0xfa, 0x70, 0xd7,
0xa9, 0xd2, 0xca, 0x39, 0x6f, 0x8d, 0xbc, 0xa8, 0x9e, 0x6e, 0x4c, 0x7f, 0x37, 0x39, 0xaa, 0x2d, 0xca, 0x7a, 0xa7, 0x71,
0xa2, 0x5a, 0xe9, 0xc9, 0x3a, 0xa8, 0x98, 0xcb, 0xde, 0x7b, 0xeb, 0xba, 0xd0, 0x8c, 0xcc, 0xc4, 0x32, 0xa6, 0x9a, 0x04,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0xfa, 0xc7, 0xaa, 0x5c, 0x35, 0x77, 0xfe, 0xbc, 0x72, 0xa5, 0xc8,
0x5e, 0xeb, 0x44, 0x05, 0xad, 0xe2, 0xd6, 0xbe, 0x54, 0xb7, 0xe6, 0xc9, 0x56, 0xe9, 0xe8, 0xe3, 0x79, 0xda, 0xa7, 0x88,
0xea, 0x68, 0x09, 0x3f, 0xa3, 0x5e, 0xff, 0x34, 0xb3, 0x3e, 0x8f, 0xfd, 0xec, 0x71, 0x38, 0x54, 0x30, 0x5d, 0xd6, 0x7b,
0x5a, 0xcf, 0x68, 0x32, 0x1f, 0x3c, 0x44, 0x46, 0xa8, 0x99, 0x39, 0x8c, 0x26, 0x8f, 0xff, 0x23, 0xa3, 0xfc, 0x21, 0xdd,
0x7a, 0xb6, 0xcf, 0x1a, 0x9f, 0xc7, 0xbb, 0x6b, 0x6c, 0xc3, 0xac, 0xad, 0x36, 0x8c, 0x36, 0xa5, 0x08, 0xd0, 0x33, 0x9a,
0x89, 0x7f, 0x39, 0x90, 0x37, 0x1d, 0x32, 0x4f, 0xbf, 0xad, 0xc4, 0xd2, 0x1e, 0x3a, 0x76, 0x9b, 0xd2, 0xc8, 0x2c, 0xa6,
0x43, 0x96, 0xde, 0xb7, 0xde, 0x1d, 0xa3, 0x62, 0xd9, 0xa4, 0x5e, 0xc9, 0xd6, 0xbe, 0x54, 0x43, 0xe1, 0x60, 0xf9, 0x0c,
0x79, 0x47, 0xfe, 0xa4, 0xf8, 0x77, 0xd3, 0xf7, 0x40, 0x6b, 0x48, 0xf6, 0x7c, 0x6e, 0xb4, 0xe2, 0xaa, 0x84, 0xee, 0xbe,
0x39, 0x2d, 0xf6, 0x55, 0xde, 0x64, 0x86, 0xdb, 0x5a, 0x07, 0xfb, 0x53, 0x3c, 0xa2, 0x49, 0xe8, 0xa7, 0xc4, 0xbf, 0x06,
0xf5, 0x56, 0x3e, 0xcf, 0x26, 0x3b, 0x8b, 0xa8, 0xfd, 0x9a, 0xae, 0x72, 0xae, 0x5b, 0x02, 0xb9, 0x4f, 0x4b, 0x4b, 0xb3,
0x98, 0x15, 0xeb, 0xa2, 0x31, 0xec, 0x87, 0xe2, 0x7f, 0x44, 0xb9, 0xf2, 0xf7, 0x1d, 0xa3, 0x38, 0x73, 0xe7, 0x96, 0x8a,
0x48, 0xaf, 0x56, 0xa4, 0xbe, 0xe3, 0x55, 0x2d, 0xd6, 0x3a, 0xd8, 0xfd, 0x1d, 0xd1, 0x25, 0xdd, 0xed, 0xa2, 0xf3, 0x75,
0x8d, 0x77, 0xb7, 0x8b, 0x8e, 0xad, 0x15, 0xea, 0xb7, 0x3b, 0x57, 0xfa, 0xef, 0x19, 0x5d, 0x46, 0x59, 0x5f, 0x05, 0xfd,
0xe0, 0x15, 0x7c, 0x7f, 0xfc, 0x63, 0xaa, 0x8f, 0x12, 0x50, 0x91, 0x5c, 0xeb, 0x69, 0xe8, 0x6f, 0xe9, 0xc6, 0x3a, 0x58,
0xae, 0x51, 0x3f, 0x51, 0x49, 0x11, 0xaf, 0xd5, 0xf7, 0xcc, 0xf8, 0xef, 0x69, 0xf5, 0x2c, 0x2f, 0xd1, 0xfb, 0x9d, 0xd0,
0x9e, 0xa4, 0x2f, 0xfa, 0x3f, 0xc6, 0xff, 0x1d, 0x15, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x64, 0x07,
0x20, 0x5b, 0x6b, 0x52, 0x53, 0x74, 0x35, 0xfa, 0x68, 0x75, 0x7a, 0x12, 0x55, 0xf3, 0xac, 0x7b, 0xf5, 0x3e, 0xc5, 0x7c,
0x3a, 0x7b, 0xfe, 0x98, 0xed, 0xe8, 0x7b, 0x15, 0x2f, 0x96, 0x16, 0xa2, 0xba, 0xde, 0xa5, 0x1a, 0xef, 0xf0, 0x21, 0x9e,
0x74, 0xfa, 0x75, 0x38, 0xf7, 0xeb, 0x7d, 0x94, 0xa2, 0xa3, 0x1a, 0x1e, 0x2f, 0x99, 0x63, 0xb6, 0x15, 0x5c, 0x5e, 0xc5,
0x8b, 0xa5, 0x36, 0xf0, 0xa9, 0x53, 0x9a, 0x68, 0xd1, 0xfd, 0xeb, 0x27, 0xdd, 0xcd, 0xf0, 0x0d, 0xba, 0x5b, 0xef, 0xa3,
0x6b, 0x4e, 0x29, 0x1d, 0x48, 0x95, 0x3b, 0x60, 0x75, 0xb2, 0xaa, 0xae, 0x31, 0x2f, 0x01, 0xe5, 0x48, 0x44, 0xd7, 0xe2,
0x75, 0x32, 0x53, 0xc7, 0x57, 0x0d, 0x9c, 0xf6, 0x24, 0xf2, 0x39, 0x0d, 0xdd, 0xaf, 0xf7, 0xe9, 0xa6, 0xcb, 0x54, 0x56,
0xee, 0x20, 0xe2, 0x03, 0xb7, 0xe7, 0xcf, 0xe3, 0xab, 0xd5, 0xa7, 0x3c, 0x83, 0xbc, 0xc7, 0x17, 0xe9, 0xe3, 0x34, 0x8c,
0xec, 0xf8, 0x13, 0x72, 0xf7, 0xbe, 0xac, 0xce, 0xaa, 0x7a, 0x18, 0x37, 0x66, 0x95, 0xb4, 0x72, 0x24, 0xd2, 0xb2, 0xec,
0x54, 0x57, 0xcb, 0x3a, 0xfe, 0xdc, 0xdc, 0xbd, 0x37, 0xfe, 0xe3, 0xf6, 0xf8, 0xdb, 0x2a, 0x39, 0x5f, 0x0b, 0xf1, 0xf7,
0xc6, 0xbf, 0x27, 0xde, 0xff, 0x63, 0xf1, 0xd7, 0x2a, 0x39, 0x7f, 0xcb, 0x15, 0xf1, 0x1f, 0x66, 0xe5, 0xbc, 0x77, 0x8b,
0x7f, 0xb9, 0x59, 0x55, 0x90, 0x5b, 0xc5, 0xf3, 0xfc, 0xf8, 0xc7, 0x54, 0x1d, 0xe5, 0xe6, 0x16, 0xbf, 0x6e, 0xe3, 0x9a,
0xf7, 0xcf, 0xaf, 0xe2, 0x79, 0xee, 0xf1, 0x68, 0xfc, 0xf3, 0xe7, 0x38, 0x52, 0x7c, 0xab, 0xda, 0x45, 0x71, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x3f, 0x35, 0x49, 0x99, 0x12, 0x75, 0xa8, 0xb9, 0xd7, 0x73, 0xc7, 0xf2, 0x17,
0xd2, 0x2d, 0xd9, 0x33, 0xf2, 0x6a, 0xaa, 0x72, 0x7c, 0x80, 0x2c, 0xcd, 0x40, 0x95, 0x1a, 0x1c, 0x7f, 0x06, 0xdc, 0xd6,
0x06, 0xb5, 0x80, 0x06, 0xa7, 0x1a, 0x1a, 0x9c, 0xe6, 0xf2, 0xdc, 0xe8, 0x86, 0xbf, 0x90, 0xe5, 0xac, 0x90, 0x39, 0x23,
0x3d, 0xee, 0x26, 0x76, 0x45, 0x13, 0x7a, 0xaa, 0x9a, 0x74, 0xfd, 0x6b, 0x9d, 0x49, 0x34, 0x03, 0x1e, 0xd3, 0xe0, 0x34,
0x97, 0x06, 0xc7, 0xaa, 0x1d, 0x55, 0x77, 0x6a, 0x73, 0xe9, 0x9c, 0x4a, 0xae, 0x8b, 0x90, 0x6f, 0xdc, 0x7a, 0x05, 0xe6,
0xf5, 0x54, 0xd7, 0xfd, 0x16, 0xb6, 0x08, 0xa5, 0x5b, 0xe4, 0x0e, 0x1b, 0x69, 0xd1, 0x7e, 0x10, 0x56, 0xcd, 0xbe, 0x48,
0xfd, 0xa2, 0xdc, 0x71, 0x5b, 0x75, 0xf8, 0x8a, 0xc3, 0xd9, 0x2a, 0x33, 0x6b, 0x16, 0x73, 0xaf, 0xd9, 0xae, 0x97, 0x93,
0x5b, 0x07, 0x48, 0xb7, 0x14, 0xe9, 0x91, 0x52, 0xcc, 0x4a, 0x54, 0xdd, 0x5d, 0x05, 0x27, 0x5b, 0x3b, 0x54, 0x0c, 0x95,
0xe0, 0xfc, 0x7d, 0x29, 0x33, 0x6b, 0x16, 0x73, 0xaf, 0x59, 0x8c, 0xd5, 0x3f, 0xbf, 0x65, 0x84, 0xaa, 0x4a, 0xd9, 0x99,
0xb3, 0x7e, 0x89, 0x8b, 0x50, 0x37, 0xf4, 0x36, 0x77, 0xc4, 0x7f, 0x7f, 0xbd, 0xfc, 0x77, 0x86, 0x6b, 0xae, 0x23, 0xef,
0x0e, 0x8c, 0x7a, 0x6e, 0x44, 0x94, 0x93, 0x96, 0xc7, 0x99, 0xcf, 0x61, 0xed, 0xec, 0xf8, 0x97, 0x9d, 0xfb, 0xbf, 0x76,
0xf1, 0x1a, 0xb7, 0x6a, 0x30, 0xfc, 0xf7, 0xeb, 0x3c, 0xdf, 0xbb, 0x23, 0x2d, 0x76, 0x1d, 0xbe, 0xf3, 0xe2, 0x9f, 0xa9,
0x26, 0xb9, 0x56, 0x67, 0x32, 0x92, 0x94, 0x4e, 0x4f, 0x98, 0x91, 0x77, 0xa7, 0xe5, 0xc5, 0xff, 0xa7, 0xa8, 0x49, 0x50,
0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xcf, 0xd5, 0xff, 0xf8, 0x3c, 0x78, 0x9e, 0xec, 0xb3, 0x93, 0xe7,
0x40, 0x94, 0xad, 0xe2, 0x89, 0xa9, 0xa9, 0x96, 0x03, 0x95, 0xbd, 0xe6, 0xf5, 0x3f, 0x4d, 0xaa, 0x5b, 0x54, 0xed, 0xaa,
0x7a, 0x81, 0x22, 0x26, 0xa2, 0xf1, 0x51, 0x47, 0xad, 0xdc, 0xcf, 0x35, 0x2a, 0x1e, 0xdd, 0xdb, 0xd8, 0xd1, 0x66, 0xb5,
0x93, 0x9f, 0x58, 0x16, 0x63, 0xf6, 0x55, 0xee, 0x98, 0xf6, 0x48, 0x8d, 0x4f, 0x44, 0x5d, 0x91, 0xab, 0xe2, 0xd1, 0x2b,
0xda, 0xa4, 0xc2, 0xc0, 0xae, 0xbf, 0x58, 0x4e, 0x7f, 0x2e, 0xae, 0xc7, 0xdb, 0x6f, 0x54, 0xf2, 0x44, 0xb4, 0x32, 0xdd,
0x54, 0xf1, 0x74, 0x57, 0xc4, 0x22, 0x2d, 0x7b, 0xd9, 0xd4, 0x92, 0xa8, 0xa6, 0x3b, 0x37, 0xfe, 0x11, 0x85, 0xc5, 0x13,
0x7c, 0x76, 0x8a, 0xe1, 0x72, 0xf2, 0x8e, 0xb5, 0x60, 0xee, 0x8a, 0xff, 0x7b, 0xae, 0x98, 0xed, 0x4a, 0xf1, 0x6e, 0x51,
0x1e, 0x41, 0xc5, 0x4a, 0x4e, 0xfc, 0x9f, 0xbd, 0x2e, 0x79, 0x3e, 0x1b, 0xd7, 0x8c, 0x2c, 0xa6, 0x09, 0xbb, 0x22, 0x63,
0x3d, 0x12, 0xaf, 0x98, 0xbb, 0x35, 0x3e, 0x11, 0x9f, 0x8d, 0xab, 0xd4, 0x47, 0x51, 0x9d, 0xc5, 0x3d, 0x55, 0x9d, 0x62,
0x57, 0xcc, 0xdd, 0x1a, 0x9f, 0x27, 0xab, 0x78, 0xfc, 0x6a, 0x3a, 0xad, 0x58, 0x87, 0x77, 0x43, 0xc7, 0xb2, 0xb1, 0x3a,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xd6, 0x3f,
0xac, 0x03, 0xf1, 0x87, 0x1f, 0x1b, 0xff, 0x7f, 0x01 };
// Font glyphs rectangles data (on atlas)
static const Rectangle bluishFontRecs[189] = {
{ 4, 4, 5 , 10 },
{ 17, 4, 2 , 8 },
{ 27, 4, 4 , 3 },
{ 39, 4, 6 , 8 },
{ 53, 4, 5 , 10 },
{ 66, 4, 6 , 8 },
{ 80, 4, 5 , 10 },
{ 93, 4, 2 , 3 },
{ 103, 4, 3 , 8 },
{ 114, 4, 3 , 8 },
{ 125, 4, 6 , 6 },
{ 139, 4, 6 , 6 },
{ 153, 4, 2 , 3 },
{ 163, 4, 5 , 2 },
{ 176, 4, 2 , 2 },
{ 186, 4, 6 , 8 },
{ 200, 4, 5 , 8 },
{ 213, 4, 3 , 8 },
{ 224, 4, 5 , 8 },
{ 237, 4, 5 , 8 },
{ 4, 22, 5 , 8 },
{ 17, 22, 5 , 8 },
{ 30, 22, 5 , 8 },
{ 43, 22, 5 , 8 },
{ 56, 22, 5 , 8 },
{ 69, 22, 5 , 8 },
{ 82, 22, 2 , 8 },
{ 92, 22, 2 , 9 },
{ 102, 22, 4 , 6 },
{ 114, 22, 5 , 4 },
{ 127, 22, 4 , 6 },
{ 139, 22, 5 , 8 },
{ 152, 22, 6 , 8 },
{ 166, 22, 5 , 8 },
{ 179, 22, 5 , 8 },
{ 192, 22, 5 , 8 },
{ 205, 22, 5 , 8 },
{ 218, 22, 5 , 8 },
{ 231, 22, 5 , 8 },
{ 4, 40, 5 , 8 },
{ 17, 40, 5 , 8 },
{ 30, 40, 4 , 8 },
{ 42, 40, 5 , 8 },
{ 55, 40, 5 , 8 },
{ 68, 40, 5 , 8 },
{ 81, 40, 8 , 8 },
{ 97, 40, 5 , 8 },
{ 110, 40, 5 , 8 },
{ 123, 40, 5 , 8 },
{ 136, 40, 5 , 9 },
{ 149, 40, 5 , 8 },
{ 162, 40, 5 , 8 },
{ 175, 40, 6 , 8 },
{ 189, 40, 5 , 8 },
{ 202, 40, 5 , 8 },
{ 215, 40, 8 , 8 },
{ 231, 40, 5 , 8 },
{ 4, 58, 5 , 8 },
{ 17, 58, 5 , 8 },
{ 30, 58, 3 , 8 },
{ 41, 58, 6 , 8 },
{ 55, 58, 3 , 8 },
{ 66, 58, 6 , 4 },
{ 80, 58, 5 , 1 },
{ 93, 58, 2 , 3 },
{ 103, 58, 5 , 6 },
{ 116, 58, 5 , 8 },
{ 129, 58, 5 , 6 },
{ 142, 58, 5 , 8 },
{ 155, 58, 5 , 6 },
{ 168, 58, 5 , 8 },
{ 181, 58, 5 , 7 },
{ 194, 58, 5 , 8 },
{ 207, 58, 2 , 8 },
{ 217, 58, 3 , 9 },
{ 228, 58, 5 , 8 },
{ 241, 58, 2 , 8 },
{ 4, 76, 8 , 6 },
{ 20, 76, 5 , 6 },
{ 33, 76, 5 , 6 },
{ 46, 76, 5 , 7 },
{ 59, 76, 5 , 7 },
{ 72, 76, 5 , 6 },
{ 85, 76, 5 , 6 },
{ 98, 76, 5 , 8 },
{ 111, 76, 5 , 6 },
{ 124, 76, 5 , 6 },
{ 137, 76, 8 , 6 },
{ 153, 76, 5 , 6 },
{ 166, 76, 5 , 7 },
{ 179, 76, 5 , 6 },
{ 192, 76, 4 , 8 },
{ 204, 76, 2 , 10 },
{ 214, 76, 4 , 8 },
{ 226, 76, 6 , 4 },
{ 240, 76, 2 , 8 },
{ 4, 94, 5 , 8 },
{ 17, 94, 5 , 8 },
{ 30, 94, 0 , 0 },
{ 38, 94, 6 , 8 },
{ 52, 94, 5 , 10 },
{ 65, 94, 5 , 10 },
{ 78, 94, 5 , 9 },
{ 91, 94, 7 , 8 },
{ 106, 94, 4 , 6 },
{ 118, 94, 5 , 4 },
{ 131, 94, 5 , 3 },
{ 144, 94, 7 , 8 },
{ 159, 94, 5 , 2 },
{ 172, 94, 4 , 4 },
{ 184, 94, 6 , 8 },
{ 198, 94, 4 , 6 },
{ 210, 94, 4 , 6 },
{ 222, 94, 0 , 0 },
{ 230, 94, 5 , 9 },
{ 4, 112, 6 , 8 },
{ 18, 112, 2 , 2 },
{ 28, 112, 0 , 0 },
{ 36, 112, 3 , 6 },
{ 47, 112, 4 , 6 },
{ 59, 112, 5 , 4 },
{ 72, 112, 6 , 8 },
{ 86, 112, 6 , 6 },
{ 100, 112, 5 , 10 },
{ 113, 112, 5 , 8 },
{ 126, 112, 5 , 10 },
{ 139, 112, 5 , 10 },
{ 152, 112, 5 , 10 },
{ 165, 112, 5 , 10 },
{ 178, 112, 5 , 10 },
{ 191, 112, 5 , 10 },
{ 204, 112, 6 , 8 },
{ 218, 112, 5 , 9 },
{ 231, 112, 5 , 10 },
{ 4, 130, 5 , 10 },
{ 17, 130, 5 , 10 },
{ 30, 130, 5 , 10 },
{ 43, 130, 4 , 10 },
{ 55, 130, 4 , 10 },
{ 67, 130, 4 , 10 },
{ 79, 130, 4 , 10 },
{ 91, 130, 6 , 8 },
{ 105, 130, 5 , 10 },
{ 118, 130, 5 , 10 },
{ 131, 130, 5 , 10 },
{ 144, 130, 5 , 10 },
{ 157, 130, 5 , 10 },
{ 170, 130, 5 , 10 },
{ 183, 130, 4 , 4 },
{ 195, 130, 5 , 10 },
{ 208, 130, 5 , 10 },
{ 221, 130, 5 , 10 },
{ 234, 130, 5 , 10 },
{ 4, 148, 5 , 10 },
{ 17, 148, 5 , 10 },
{ 30, 148, 5 , 8 },
{ 43, 148, 5 , 8 },
{ 56, 148, 5 , 9 },
{ 69, 148, 5 , 9 },
{ 82, 148, 5 , 9 },
{ 95, 148, 5 , 9 },
{ 108, 148, 5 , 8 },
{ 121, 148, 5 , 10 },
{ 134, 148, 6 , 6 },
{ 148, 148, 5 , 7 },
{ 161, 148, 5 , 9 },
{ 174, 148, 5 , 9 },
{ 187, 148, 5 , 9 },
{ 200, 148, 5 , 8 },
{ 213, 148, 3 , 9 },
{ 224, 148, 3 , 9 },
{ 235, 148, 4 , 9 },
{ 4, 166, 4 , 8 },
{ 16, 166, 5 , 9 },
{ 29, 166, 5 , 9 },
{ 42, 166, 5 , 9 },
{ 55, 166, 5 , 9 },
{ 68, 166, 5 , 9 },
{ 81, 166, 5 , 9 },
{ 94, 166, 5 , 8 },
{ 107, 166, 4 , 6 },
{ 119, 166, 5 , 8 },
{ 132, 166, 5 , 9 },
{ 145, 166, 5 , 9 },
{ 158, 166, 5 , 9 },
{ 171, 166, 5 , 8 },
{ 184, 166, 5 , 10 },
{ 197, 166, 5 , 10 },
{ 210, 166, 5 , 9 },
};
// Font glyphs info data
// NOTE: No glyphs.image data provided
static const GlyphInfo bluishFontGlyphs[189] = {
{ 32, 0, 0, 5, { 0 }},
{ 33, 0, 1, 2, { 0 }},
{ 34, 0, 1, 4, { 0 }},
{ 35, 0, 1, 6, { 0 }},
{ 36, 0, 0, 5, { 0 }},
{ 37, 0, 1, 6, { 0 }},
{ 38, 0, 0, 5, { 0 }},
{ 39, 0, 1, 2, { 0 }},
{ 40, 0, 1, 3, { 0 }},
{ 41, 0, 1, 3, { 0 }},
{ 42, 0, 1, 6, { 0 }},
{ 43, 0, 2, 6, { 0 }},
{ 44, 0, 7, 2, { 0 }},
{ 45, 0, 4, 5, { 0 }},
{ 46, 0, 7, 2, { 0 }},
{ 47, 0, 1, 6, { 0 }},
{ 48, 0, 1, 5, { 0 }},
{ 49, 0, 1, 3, { 0 }},
{ 50, 0, 1, 5, { 0 }},
{ 51, 0, 1, 5, { 0 }},
{ 52, 0, 1, 5, { 0 }},
{ 53, 0, 1, 5, { 0 }},
{ 54, 0, 1, 5, { 0 }},
{ 55, 0, 1, 5, { 0 }},
{ 56, 0, 1, 5, { 0 }},
{ 57, 0, 1, 5, { 0 }},
{ 58, 0, 1, 2, { 0 }},
{ 59, 0, 1, 2, { 0 }},
{ 60, 0, 2, 4, { 0 }},
{ 61, 0, 3, 5, { 0 }},
{ 62, 0, 2, 4, { 0 }},
{ 63, 0, 1, 5, { 0 }},
{ 64, 0, 1, 6, { 0 }},
{ 65, 0, 1, 5, { 0 }},
{ 66, 0, 1, 5, { 0 }},
{ 67, 0, 1, 5, { 0 }},
{ 68, 0, 1, 5, { 0 }},
{ 69, 0, 1, 5, { 0 }},
{ 70, 0, 1, 5, { 0 }},
{ 71, 0, 1, 5, { 0 }},
{ 72, 0, 1, 5, { 0 }},
{ 73, 0, 1, 4, { 0 }},
{ 74, 0, 1, 5, { 0 }},
{ 75, 0, 1, 5, { 0 }},
{ 76, 0, 1, 5, { 0 }},
{ 77, 0, 1, 8, { 0 }},
{ 78, 0, 1, 5, { 0 }},
{ 79, 0, 1, 5, { 0 }},
{ 80, 0, 1, 5, { 0 }},
{ 81, 0, 1, 5, { 0 }},
{ 82, 0, 1, 5, { 0 }},
{ 83, 0, 1, 5, { 0 }},
{ 84, 0, 1, 6, { 0 }},
{ 85, 0, 1, 5, { 0 }},
{ 86, 0, 1, 5, { 0 }},
{ 87, 0, 1, 8, { 0 }},
{ 88, 0, 1, 5, { 0 }},
{ 89, 0, 1, 5, { 0 }},
{ 90, 0, 1, 5, { 0 }},
{ 91, 0, 1, 3, { 0 }},
{ 92, 0, 1, 6, { 0 }},
{ 93, 0, 1, 3, { 0 }},
{ 94, 0, 1, 6, { 0 }},
{ 95, 0, 9, 5, { 0 }},
{ 96, 0, 1, 2, { 0 }},
{ 97, 0, 3, 5, { 0 }},
{ 98, 0, 1, 5, { 0 }},
{ 99, 0, 3, 5, { 0 }},
{ 100, 0, 1, 5, { 0 }},
{ 101, 0, 3, 5, { 0 }},
{ 102, 0, 1, 5, { 0 }},
{ 103, 0, 3, 5, { 0 }},
{ 104, 0, 1, 5, { 0 }},
{ 105, 0, 1, 2, { 0 }},
{ 106, 0, 1, 3, { 0 }},
{ 107, 0, 1, 5, { 0 }},
{ 108, 0, 1, 2, { 0 }},
{ 109, 0, 3, 8, { 0 }},
{ 110, 0, 3, 5, { 0 }},
{ 111, 0, 3, 5, { 0 }},
{ 112, 0, 3, 5, { 0 }},
{ 113, 0, 3, 5, { 0 }},
{ 114, 0, 3, 5, { 0 }},
{ 115, 0, 3, 5, { 0 }},
{ 116, 0, 1, 5, { 0 }},
{ 117, 0, 3, 5, { 0 }},
{ 118, 0, 3, 5, { 0 }},
{ 119, 0, 3, 8, { 0 }},
{ 120, 0, 3, 5, { 0 }},
{ 121, 0, 3, 5, { 0 }},
{ 122, 0, 3, 5, { 0 }},
{ 123, 0, 1, 4, { 0 }},
{ 124, 0, 0, 2, { 0 }},
{ 125, 0, 1, 4, { 0 }},
{ 126, 0, 3, 6, { 0 }},
{ 161, 0, 1, 2, { 0 }},
{ 162, 0, 2, 5, { 0 }},
{ 163, 0, 1, 5, { 0 }},
{ 8364, 0, 0, 0, { 0 }},
{ 165, 0, 1, 6, { 0 }},
{ 352, 0, -1, 5, { 0 }},
{ 167, 0, 0, 5, { 0 }},
{ 353, 0, 0, 5, { 0 }},
{ 169, 0, 1, 7, { 0 }},
{ 170, 0, -1, 4, { 0 }},
{ 171, 0, 3, 5, { 0 }},
{ 172, 0, 4, 5, { 0 }},
{ 174, 0, 1, 7, { 0 }},
{ 175, 0, -1, 5, { 0 }},
{ 176, 0, -1, 4, { 0 }},
{ 177, 0, 1, 6, { 0 }},
{ 178, 0, -1, 4, { 0 }},
{ 179, 0, -1, 4, { 0 }},
{ 381, 0, 0, 0, { 0 }},
{ 181, 0, 1, 5, { 0 }},
{ 182, 0, 1, 6, { 0 }},
{ 183, 0, 4, 2, { 0 }},
{ 382, 0, 0, 0, { 0 }},
{ 185, 0, -1, 3, { 0 }},
{ 186, 0, -1, 4, { 0 }},
{ 187, 0, 3, 5, { 0 }},
{ 338, 0, 1, 6, { 0 }},
{ 339, 0, 3, 6, { 0 }},
{ 376, 0, -1, 5, { 0 }},
{ 191, 0, 1, 5, { 0 }},
{ 192, 0, -1, 5, { 0 }},
{ 193, 0, -1, 5, { 0 }},
{ 194, 0, -1, 5, { 0 }},
{ 195, 0, -1, 5, { 0 }},
{ 196, 0, -1, 5, { 0 }},
{ 197, 0, -1, 5, { 0 }},
{ 198, 0, 1, 6, { 0 }},
{ 199, 0, 1, 5, { 0 }},
{ 200, 0, -1, 5, { 0 }},
{ 201, 0, -1, 5, { 0 }},
{ 202, 0, -1, 5, { 0 }},
{ 203, 0, -1, 5, { 0 }},
{ 204, 0, -1, 4, { 0 }},
{ 205, 0, -1, 4, { 0 }},
{ 206, 0, -1, 4, { 0 }},
{ 207, 0, -1, 4, { 0 }},
{ 208, 0, 1, 6, { 0 }},
{ 209, 0, -1, 5, { 0 }},
{ 210, 0, -1, 5, { 0 }},
{ 211, 0, -1, 5, { 0 }},
{ 212, 0, -1, 5, { 0 }},
{ 213, 0, -1, 5, { 0 }},
{ 214, 0, -1, 5, { 0 }},
{ 215, 0, 3, 4, { 0 }},
{ 216, 0, 0, 5, { 0 }},
{ 217, 0, -1, 5, { 0 }},
{ 218, 0, -1, 5, { 0 }},
{ 219, 0, -1, 5, { 0 }},
{ 220, 0, -1, 5, { 0 }},
{ 221, 0, -1, 5, { 0 }},
{ 222, 0, 1, 5, { 0 }},
{ 223, 0, 1, 5, { 0 }},
{ 224, 0, 0, 5, { 0 }},
{ 225, 0, 0, 5, { 0 }},
{ 226, 0, 0, 5, { 0 }},
{ 227, 0, 0, 5, { 0 }},
{ 228, 0, 1, 5, { 0 }},
{ 229, 0, -1, 5, { 0 }},
{ 230, 0, 3, 6, { 0 }},
{ 231, 0, 3, 5, { 0 }},
{ 232, 0, 0, 5, { 0 }},
{ 233, 0, 0, 5, { 0 }},
{ 234, 0, 0, 5, { 0 }},
{ 235, 0, 1, 5, { 0 }},
{ 236, 0, 0, 3, { 0 }},
{ 237, 0, 0, 2, { 0 }},
{ 238, 0, 0, 3, { 0 }},
{ 239, 0, 1, 3, { 0 }},
{ 240, 0, 0, 5, { 0 }},
{ 241, 0, 0, 5, { 0 }},
{ 242, 0, 0, 5, { 0 }},
{ 243, 0, 0, 5, { 0 }},
{ 244, 0, 0, 5, { 0 }},
{ 245, 0, 0, 5, { 0 }},
{ 246, 0, 1, 5, { 0 }},
{ 247, 0, 2, 4, { 0 }},
{ 248, 0, 2, 5, { 0 }},
{ 249, 0, 0, 5, { 0 }},
{ 250, 0, 0, 5, { 0 }},
{ 251, 0, 0, 5, { 0 }},
{ 252, 0, 1, 5, { 0 }},
{ 253, 0, 0, 5, { 0 }},
{ 254, 0, 0, 5, { 0 }},
{ 255, 0, 1, 5, { 0 }},
};
// Style loading function: Bluish
static void GuiLoadStyleBluish(void)
{
// Load style properties provided
// NOTE: Default properties are propagated
for (int i = 0; i < BLUISH_STYLE_PROPS_COUNT; i++)
{
GuiSetStyle(bluishStyleProps[i].controlId, bluishStyleProps[i].propertyId, bluishStyleProps[i].propertyValue);
}
// Custom font loading
// NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function
int bluishFontDataSize = 0;
unsigned char *data = DecompressData(bluishFontData, BLUISH_STYLE_FONT_ATLAS_COMP_SIZE, &bluishFontDataSize);
Image imFont = { data, 256, 256, 1, 2 };
Font font = { 0 };
font.baseSize = 10;
font.glyphCount = 189;
// Load texture from image
font.texture = LoadTextureFromImage(imFont);
UnloadImage(imFont); // Uncompressed image data can be unloaded from memory
// Copy char recs data from global fontRecs
// NOTE: Required to avoid issues if trying to free font
font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle));
memcpy(font.recs, bluishFontRecs, font.glyphCount*sizeof(Rectangle));
// Copy font char info data from global fontChars
// NOTE: Required to avoid issues if trying to free font
font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo));
memcpy(font.glyphs, bluishFontGlyphs, font.glyphCount*sizeof(GlyphInfo));
GuiSetFont(font);
// Setup a white rectangle on the font to be used on shapes drawing,
// it makes possible to draw shapes and text (full UI) in a single draw call
Rectangle fontWhiteRec = { 254, 254, 1, 1 };
SetShapesTexture(font.texture, fontWhiteRec);
//-----------------------------------------------------------------
// TODO: Custom user style setup: Set specific properties here (if required)
// i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT
}

View File

@ -0,0 +1,582 @@
//////////////////////////////////////////////////////////////////////////////////
// //
// StyleAsCode exporter v2.0 - Style data exported as a values array //
// //
// USAGE: On init call: GuiLoadStyleCandy(); //
// //
// more info and bugs-report: github.com/raysan5/raygui //
// feedback and support: ray[at]raylibtech.com //
// //
// Copyright (c) 2020-2025 raylib technologies (@raylibtech) //
// //
//////////////////////////////////////////////////////////////////////////////////
#define CANDY_STYLE_PROPS_COUNT 17
// Custom style name: Candy
static const GuiStyleProp candyStyleProps[CANDY_STYLE_PROPS_COUNT] = {
{ 0, 0, (int)0xe58b68ff }, // DEFAULT_BORDER_COLOR_NORMAL
{ 0, 1, (int)0xfeda96ff }, // DEFAULT_BASE_COLOR_NORMAL
{ 0, 2, (int)0xe59b5fff }, // DEFAULT_TEXT_COLOR_NORMAL
{ 0, 3, (int)0xee813fff }, // DEFAULT_BORDER_COLOR_FOCUSED
{ 0, 4, (int)0xfcd85bff }, // DEFAULT_BASE_COLOR_FOCUSED
{ 0, 5, (int)0xfc6955ff }, // DEFAULT_TEXT_COLOR_FOCUSED
{ 0, 6, (int)0xb34848ff }, // DEFAULT_BORDER_COLOR_PRESSED
{ 0, 7, (int)0xeb7272ff }, // DEFAULT_BASE_COLOR_PRESSED
{ 0, 8, (int)0xbd4a4aff }, // DEFAULT_TEXT_COLOR_PRESSED
{ 0, 9, (int)0x94795dff }, // DEFAULT_BORDER_COLOR_DISABLED
{ 0, 10, (int)0xc2a37aff }, // DEFAULT_BASE_COLOR_DISABLED
{ 0, 11, (int)0x9c8369ff }, // DEFAULT_TEXT_COLOR_DISABLED
{ 0, 16, (int)0x0000000f }, // DEFAULT_TEXT_SIZE
{ 0, 17, (int)0x00000000 }, // DEFAULT_TEXT_SPACING
{ 0, 18, (int)0xd77575ff }, // DEFAULT_LINE_COLOR
{ 0, 19, (int)0xfff5e1ff }, // DEFAULT_BACKGROUND_COLOR
{ 0, 20, (int)0x00000007 }, // DEFAULT_TEXT_LINE_SPACING
};
// WARNING: This style uses a custom font: "v5easter.ttf" (size: 15, spacing: 0)
#define CANDY_STYLE_FONT_ATLAS_COMP_SIZE 2110
// Font atlas image pixels data: DEFLATE compressed
static unsigned char candyFontData[CANDY_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed,
0xdd, 0x5b, 0x76, 0xa4, 0x36, 0x10, 0x00, 0x50, 0xad, 0x2b, 0xfb, 0xdf, 0x97, 0x72, 0x92, 0x7c, 0xe4, 0xcc, 0x8c, 0x1b,
0x54, 0xa5, 0x12, 0x08, 0xfa, 0xfa, 0xfe, 0x19, 0xbb, 0x1b, 0x10, 0xa5, 0x07, 0xa0, 0x52, 0x6f, 0x00, 0x00, 0x00, 0xc0,
0x97, 0xfb, 0xe7, 0xe7, 0xcf, 0xdf, 0xb5, 0x1f, 0x7e, 0xfb, 0xff, 0xdf, 0xf6, 0x1f, 0xb7, 0x1e, 0x6d, 0xc9, 0xff, 0xe7,
0xf1, 0x9e, 0x8c, 0x7d, 0x42, 0x3b, 0xd8, 0x72, 0xbe, 0xcf, 0xbf, 0xff, 0xae, 0x97, 0x7c, 0xfb, 0xa7, 0xcf, 0x39, 0xdb,
0xa3, 0xcc, 0xb6, 0xa3, 0x4f, 0xed, 0x07, 0xc7, 0xd4, 0x06, 0xb6, 0xf4, 0xd4, 0xd1, 0xf5, 0xe9, 0x52, 0x8d, 0x95, 0xce,
0xf9, 0xf1, 0xb7, 0xf0, 0x31, 0xb6, 0x05, 0xdb, 0xfa, 0x64, 0x19, 0xaf, 0x8c, 0xff, 0xdf, 0x7f, 0x2a, 0xe3, 0xff, 0xf8,
0x33, 0x67, 0xae, 0x89, 0xff, 0x8f, 0xa6, 0x17, 0xc4, 0x7f, 0xbc, 0x16, 0x39, 0x3e, 0x82, 0xcf, 0x57, 0x71, 0x0b, 0xff,
0xcf, 0x79, 0xfd, 0x5a, 0xf9, 0xa9, 0x2b, 0xb7, 0x8d, 0x45, 0xed, 0xfc, 0x75, 0x7e, 0xb6, 0x37, 0x73, 0x65, 0x78, 0xe5,
0xb6, 0xda, 0xf8, 0x3f, 0xfb, 0xdb, 0x6c, 0xcd, 0x9e, 0xef, 0x1d, 0x8c, 0xb6, 0xe6, 0x3d, 0x74, 0xed, 0x9f, 0xb7, 0x62,
0x35, 0x67, 0x38, 0x7a, 0xc4, 0xc7, 0x75, 0xc9, 0xd9, 0xd6, 0xf9, 0x36, 0x37, 0x72, 0x6d, 0xdc, 0x71, 0x15, 0x9f, 0x97,
0x66, 0x45, 0xbb, 0xd4, 0x7f, 0x39, 0xdb, 0xe2, 0x7f, 0xf4, 0xaa, 0xed, 0x8b, 0x5b, 0xda, 0x16, 0x6e, 0x69, 0x73, 0x7d,
0x96, 0xba, 0x33, 0x5c, 0x15, 0xff, 0x7d, 0x22, 0xfa, 0x5b, 0xa2, 0xc7, 0x79, 0x5c, 0x6b, 0x9f, 0xed, 0x7f, 0xf6, 0x2a,
0xa9, 0xbd, 0x66, 0x67, 0xe3, 0xff, 0xb8, 0x3f, 0xdc, 0x0e, 0xeb, 0x9b, 0xeb, 0x7a, 0x5c, 0x3b, 0xc5, 0x7f, 0xb6, 0x87,
0x3c, 0x3e, 0xba, 0xa9, 0x6b, 0xff, 0xd7, 0xc7, 0xff, 0x59, 0x44, 0xf6, 0xe0, 0x48, 0xb5, 0xb6, 0x35, 0x1e, 0x19, 0x4f,
0x67, 0x6b, 0xf4, 0xf8, 0x18, 0xf7, 0xfa, 0xfe, 0xff, 0xf9, 0xb8, 0xb1, 0x2f, 0x1b, 0x39, 0xd5, 0x47, 0xd8, 0xbe, 0xfd,
0xff, 0xb1, 0x7e, 0xc1, 0x9a, 0xfe, 0xff, 0xd9, 0xf8, 0xbf, 0x5d, 0xde, 0xfa, 0x9f, 0x45, 0x56, 0xbe, 0xf4, 0x7b, 0xaa,
0x07, 0x34, 0x77, 0x57, 0x21, 0x57, 0x9e, 0x73, 0xf1, 0xbf, 0xa2, 0x0f, 0x10, 0x1d, 0xfd, 0xbd, 0xa3, 0xff, 0x9f, 0x39,
0x83, 0xd9, 0xfb, 0xcc, 0x55, 0x47, 0x16, 0xbf, 0xcf, 0x7f, 0xdf, 0x19, 0xab, 0xab, 0xe7, 0x67, 0xcf, 0x60, 0xfd, 0xa7,
0xe6, 0x7a, 0xd5, 0xd1, 0xab, 0xb8, 0xdf, 0xfa, 0x6c, 0xac, 0x3f, 0xe2, 0xce, 0xe9, 0x15, 0xed, 0xff, 0xd9, 0xfd, 0xff,
0x99, 0xbb, 0x03, 0xb1, 0x27, 0x1b, 0x7d, 0xc3, 0x6b, 0x45, 0xfc, 0x3f, 0xa5, 0x15, 0xab, 0xea, 0x55, 0xbb, 0xff, 0x97,
0x79, 0xa6, 0x5d, 0xd1, 0x9f, 0x7b, 0x4a, 0xfc, 0xf7, 0x81, 0xda, 0x74, 0x7c, 0x4b, 0xfe, 0x89, 0xfb, 0xaa, 0xb7, 0x0a,
0xce, 0x9e, 0x36, 0x5e, 0xf7, 0x14, 0x7b, 0xc7, 0xf8, 0x7f, 0xc6, 0xf3, 0xff, 0x3d, 0xce, 0xe5, 0xda, 0x91, 0xdc, 0x8e,
0xf1, 0x0f, 0xdf, 0xf1, 0x36, 0xe1, 0x75, 0x6f, 0x2d, 0x8a, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x9e, 0x3e, 0x3b, 0x27, 0x9f, 0x21, 0x32, 0x36, 0xe7, 0xa6, 0x2f, 0xc9, 0x8b, 0x94, 0x9b, 0x1b, 0x7d,
0x6d, 0x0e, 0xe7, 0x6c, 0xd6, 0xec, 0xb9, 0x79, 0xe1, 0x9f, 0xf3, 0x09, 0xcd, 0x7c, 0xee, 0xf1, 0x5c, 0xe4, 0xc8, 0xbc,
0xec, 0x6c, 0xae, 0xf3, 0x68, 0x4e, 0xa0, 0x4c, 0xee, 0xa4, 0xd9, 0xdc, 0xe9, 0xf1, 0x23, 0xce, 0xcc, 0x60, 0x9d, 0x9d,
0xf3, 0x76, 0x55, 0xc6, 0xe6, 0x6c, 0x9c, 0x8e, 0x65, 0xbd, 0xed, 0xe1, 0x4c, 0x75, 0xbb, 0xe5, 0x69, 0xa8, 0xce, 0x9a,
0xb1, 0x32, 0xfe, 0xdb, 0x50, 0x6e, 0xec, 0xb1, 0xf9, 0xce, 0xbd, 0x70, 0x46, 0xfb, 0x75, 0x39, 0xf7, 0xda, 0x74, 0x99,
0x44, 0x5b, 0xaa, 0xf7, 0xc7, 0x7f, 0xf6, 0xd8, 0xcf, 0xce, 0x6a, 0xdf, 0x36, 0x8b, 0xfd, 0x9d, 0xf1, 0x9f, 0xed, 0xdb,
0x1d, 0xb7, 0x7c, 0xf1, 0x8c, 0x07, 0xd7, 0x64, 0xb4, 0xe9, 0x1b, 0xc5, 0x7f, 0xfc, 0xdb, 0x56, 0xce, 0x61, 0x9f, 0x6b,
0x7b, 0x7b, 0x59, 0xfc, 0xe7, 0xfb, 0x3e, 0xbb, 0xb5, 0xf1, 0xb5, 0x59, 0x73, 0xd6, 0xc5, 0x7f, 0x2b, 0xcf, 0xca, 0xb4,
0x67, 0xfc, 0x8f, 0xb4, 0x0f, 0x99, 0xb1, 0x41, 0xfc, 0x3f, 0xb3, 0x35, 0x6e, 0xf4, 0xdb, 0x32, 0xed, 0xff, 0xf1, 0x51,
0x3e, 0xb9, 0xfd, 0xdf, 0x25, 0xfe, 0xdb, 0x56, 0xfd, 0xff, 0xd9, 0xab, 0x31, 0x16, 0xe7, 0xf7, 0xe5, 0x66, 0xdb, 0x7d,
0x25, 0xa3, 0xc8, 0x19, 0x9f, 0xcd, 0x8e, 0x9c, 0xbd, 0xef, 0x50, 0xb9, 0x62, 0xd3, 0xb3, 0xee, 0x71, 0xb5, 0xaf, 0x1c,
0xff, 0xe7, 0xef, 0xfb, 0x8a, 0xff, 0xd9, 0xfe, 0x74, 0xbb, 0x21, 0xfe, 0x57, 0x9d, 0xbb, 0x27, 0xc7, 0xff, 0x4c, 0xcf,
0xef, 0xaa, 0xf8, 0x6f, 0x1f, 0x57, 0xa1, 0x9a, 0x8d, 0xff, 0xfc, 0xda, 0x38, 0xd1, 0x38, 0xef, 0x37, 0x3e, 0xdf, 0x5a,
0x51, 0x07, 0xe6, 0x9f, 0x37, 0x34, 0xf1, 0xff, 0xa8, 0xf8, 0xbf, 0xbf, 0xfd, 0x1f, 0x5d, 0x5b, 0xf1, 0xbb, 0xe3, 0xbf,
0x4d, 0xdd, 0xe3, 0x5b, 0xf1, 0x7f, 0xbb, 0xf5, 0xff, 0xab, 0xeb, 0xce, 0x6b, 0xeb, 0xd3, 0x75, 0x7d, 0xdc, 0xdc, 0xfd,
0xa4, 0xdc, 0x6a, 0x06, 0xb9, 0xac, 0xd9, 0x6b, 0xae, 0xa9, 0x96, 0x5e, 0xc3, 0xab, 0x85, 0x6b, 0x00, 0xf1, 0xff, 0xeb,
0x96, 0x75, 0xab, 0x23, 0xc3, 0xea, 0x78, 0x7a, 0x56, 0xfc, 0xcf, 0xbd, 0x69, 0x50, 0xbf, 0xda, 0x60, 0xbf, 0xa1, 0xfd,
0x87, 0xb5, 0x4f, 0xd9, 0xeb, 0xfe, 0x9e, 0x8a, 0x3e, 0x3d, 0xf0, 0xbd, 0xfd, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x8d, 0x73, 0x05, 0x3e, 0xcf, 0xf2, 0x3c, 0xce, 0x82, 0xd1, 0x92, 0x59, 0xb0, 0xdb, 0x40,
0xe6, 0xe4, 0x9e, 0xfc, 0xbe, 0xc8, 0x2c, 0xe5, 0xdd, 0x72, 0x11, 0x44, 0xf3, 0x23, 0x46, 0x72, 0x63, 0xb7, 0x70, 0x9e,
0xaf, 0x6c, 0x16, 0x9b, 0x36, 0x99, 0x73, 0x34, 0x3f, 0xff, 0x2e, 0x3b, 0x83, 0x7a, 0x2c, 0xa3, 0xdb, 0xd8, 0xf7, 0xf4,
0xa1, 0x19, 0x7e, 0xb3, 0xa5, 0x50, 0x3f, 0x27, 0xb1, 0x5d, 0x9e, 0x75, 0xe3, 0xde, 0x6c, 0x4c, 0x4f, 0xca, 0xb7, 0x1d,
0xc9, 0xc3, 0x7b, 0x9e, 0xcf, 0x63, 0x3e, 0xfe, 0x47, 0x73, 0x0a, 0xf4, 0xc9, 0xac, 0x9f, 0xd1, 0xba, 0xe2, 0xf8, 0xbc,
0x1c, 0xcd, 0x4d, 0x8e, 0x45, 0x7f, 0x76, 0xfe, 0xcd, 0xf9, 0x3e, 0xac, 0x9b, 0x51, 0xfd, 0x1d, 0xf1, 0x1f, 0xaf, 0x41,
0x9f, 0x90, 0x6f, 0xbb, 0x15, 0xfc, 0xb6, 0x72, 0xe6, 0x7b, 0x36, 0xa7, 0x48, 0x36, 0xfe, 0x23, 0xb1, 0xf5, 0xb9, 0x96,
0x6b, 0x03, 0x19, 0xd4, 0xe6, 0xbf, 0x27, 0x13, 0xff, 0x3d, 0x9c, 0x6d, 0x25, 0xdb, 0xfe, 0xc7, 0x5a, 0x97, 0x3d, 0xe3,
0x3f, 0xd3, 0xe3, 0xec, 0x17, 0xc6, 0xff, 0x5c, 0x8e, 0xaf, 0x76, 0x79, 0xfc, 0xd7, 0xae, 0x53, 0x31, 0x36, 0x92, 0xa9,
0xe8, 0x69, 0xff, 0x34, 0x3a, 0x3c, 0x1a, 0x19, 0xd5, 0xc5, 0x7f, 0xff, 0xe1, 0x1b, 0x57, 0xb5, 0xff, 0x55, 0x19, 0x55,
0xfb, 0xc1, 0xfe, 0xbe, 0x21, 0xfe, 0xdb, 0x26, 0xfd, 0xff, 0xfa, 0xb5, 0xd4, 0xf6, 0x8c, 0xff, 0x78, 0x8f, 0x2b, 0xde,
0x7a, 0xc5, 0xfa, 0x0a, 0xe7, 0x23, 0x80, 0x5e, 0x50, 0x03, 0xf4, 0xdf, 0xd6, 0xa3, 0xaa, 0x1a, 0x85, 0xc7, 0x56, 0x12,
0xcb, 0xb5, 0xff, 0xfd, 0xb5, 0xed, 0x7f, 0xed, 0xf8, 0x7f, 0x55, 0x2e, 0xc2, 0xda, 0xf5, 0xb6, 0xaa, 0x72, 0x6d, 0xe6,
0xfa, 0x5a, 0xd9, 0xf6, 0xff, 0xac, 0x77, 0x30, 0x13, 0xff, 0x6d, 0x32, 0x2e, 0x63, 0xf5, 0x4c, 0x7f, 0x54, 0x06, 0x8e,
0x91, 0x35, 0xf2, 0xea, 0xae, 0xf4, 0xd1, 0x08, 0x8a, 0x6c, 0x9d, 0xcd, 0xaa, 0x36, 0xfe, 0xa4, 0x61, 0xa4, 0xa6, 0xfe,
0xfc, 0x94, 0x62, 0xe4, 0xac, 0x54, 0x8c, 0x01, 0x77, 0xed, 0xff, 0xdf, 0xd3, 0xfe, 0x8f, 0xb4, 0xfe, 0x35, 0x79, 0xc8,
0x7a, 0x79, 0xfe, 0x9d, 0x5e, 0xb8, 0x77, 0x75, 0x2d, 0xe4, 0x1d, 0x4f, 0x22, 0x57, 0xec, 0xd1, 0x7e, 0x59, 0xd2, 0x7a,
0xf2, 0xce, 0xf1, 0x5e, 0xfd, 0xff, 0xfc, 0xd8, 0x2a, 0x32, 0xaa, 0xaf, 0x7b, 0xfe, 0x57, 0xdd, 0x96, 0x3e, 0x2b, 0xfb,
0x96, 0xf8, 0xdf, 0xbb, 0x0c, 0xf6, 0x8a, 0xff, 0xd1, 0x55, 0xcc, 0x7b, 0xf9, 0x93, 0xf8, 0x67, 0xd4, 0xe0, 0xcf, 0x7d,
0xff, 0xe7, 0xfa, 0x95, 0x47, 0xef, 0x8e, 0xff, 0xdd, 0x6a, 0x80, 0xaa, 0x15, 0xaf, 0xdb, 0xe2, 0x37, 0x43, 0xee, 0x3f,
0x6b, 0x2b, 0x56, 0x08, 0x86, 0xb7, 0xbc, 0xbf, 0xd9, 0x5f, 0xdf, 0x6f, 0x7a, 0x62, 0x4f, 0x1b, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xd5, 0xfc, 0xbf, 0x3e, 0x39, 0x37, 0x30, 0x97, 0x59, 0xa8, 0x9d, 0xce,
0x30, 0xed, 0xe9, 0xbf, 0x89, 0x1c, 0x4b, 0x3e, 0x67, 0x45, 0x26, 0xe7, 0x76, 0x3b, 0xc9, 0x53, 0x53, 0x73, 0x6e, 0xae,
0x39, 0xce, 0xf3, 0xdc, 0x7a, 0xb1, 0xeb, 0x22, 0x72, 0xa6, 0xce, 0x73, 0xa6, 0x5c, 0x77, 0x1e, 0xb2, 0xe5, 0xdd, 0x4f,
0x66, 0x73, 0xf7, 0xc3, 0x4c, 0x35, 0x15, 0xb9, 0x54, 0xce, 0x3e, 0x3f, 0x9f, 0x79, 0xaf, 0x25, 0x32, 0xae, 0xf5, 0x3f,
0x72, 0x39, 0xf5, 0xd4, 0xdf, 0x44, 0x4b, 0x3d, 0xb7, 0x6d, 0x24, 0xa7, 0x63, 0x5d, 0x9e, 0xe8, 0xcc, 0xb9, 0x59, 0x7f,
0x9c, 0xf1, 0xeb, 0xa2, 0x17, 0x7d, 0xc3, 0x68, 0x1e, 0x92, 0xfd, 0xcb, 0xfb, 0x3c, 0x63, 0xec, 0x5c, 0x36, 0x85, 0xd5,
0xf1, 0x1f, 0xcb, 0xb9, 0x1a, 0xc9, 0x2b, 0x56, 0x19, 0xff, 0x7b, 0xf5, 0xc7, 0xf2, 0xab, 0x41, 0x54, 0x65, 0xd8, 0x7f,
0xc6, 0x2c, 0xdd, 0xfc, 0x4a, 0x04, 0xcf, 0x29, 0xef, 0xd5, 0xc7, 0x37, 0x52, 0x53, 0xce, 0xe5, 0x81, 0xb8, 0x2b, 0xfe,
0xeb, 0xfa, 0xff, 0xd9, 0xfe, 0x74, 0x66, 0x0d, 0xa4, 0xd9, 0xdc, 0x89, 0x33, 0x2b, 0x89, 0x5c, 0x7d, 0x2c, 0x73, 0xa3,
0x82, 0x91, 0x31, 0xeb, 0x0e, 0xe7, 0x61, 0xe6, 0x1c, 0xb5, 0xc9, 0x95, 0x16, 0xce, 0x23, 0xa0, 0x0f, 0x8c, 0x4f, 0xfa,
0x64, 0x0d, 0x13, 0x2d, 0xd1, 0xf3, 0x73, 0x55, 0x5b, 0x2f, 0xe6, 0x3e, 0x6f, 0xd7, 0x6d, 0x7d, 0x62, 0x1c, 0x73, 0xef,
0xca, 0x45, 0x35, 0xf1, 0x3f, 0xde, 0xab, 0xdd, 0xbd, 0x4c, 0xdb, 0xc0, 0x38, 0x79, 0xff, 0xf8, 0x8f, 0xc6, 0x61, 0x65,
0x1f, 0x77, 0x36, 0x9b, 0xf4, 0x3d, 0xdb, 0xe6, 0x57, 0x26, 0xd9, 0xfd, 0xda, 0xbe, 0x3b, 0xfe, 0xd7, 0xac, 0xfe, 0x52,
0x7d, 0x8e, 0xce, 0x46, 0x0d, 0x55, 0xed, 0xff, 0xd9, 0x08, 0xa4, 0x6f, 0x31, 0x2e, 0x1c, 0x8b, 0xed, 0xf8, 0xfd, 0xff,
0xb9, 0x6b, 0x65, 0xc5, 0xb6, 0xf9, 0xeb, 0x76, 0xdf, 0x18, 0xdf, 0x25, 0xfe, 0x9f, 0x50, 0x47, 0xce, 0xb4, 0xda, 0xd1,
0xf6, 0xbf, 0x5d, 0x18, 0xff, 0x35, 0x77, 0x2a, 0x7a, 0xe1, 0x8a, 0x76, 0x4f, 0xbf, 0x56, 0xe6, 0xef, 0xff, 0xad, 0x78,
0x02, 0xb2, 0x73, 0xfb, 0x2f, 0xfe, 0x9f, 0x16, 0xff, 0xd9, 0x67, 0xfb, 0x33, 0xfd, 0x91, 0x67, 0x8e, 0xff, 0x6b, 0xef,
0x43, 0x3d, 0xb5, 0xff, 0xff, 0xf4, 0x32, 0x9d, 0xeb, 0xb5, 0xcb, 0x90, 0xfc, 0x4d, 0x7d, 0x83, 0xd9, 0x3b, 0x9d, 0x6f,
0x8b, 0xff, 0x77, 0x97, 0x69, 0xf5, 0x0a, 0xe9, 0x7c, 0x4b, 0xfc, 0xb7, 0x0b, 0xdb, 0xc4, 0xf8, 0xfb, 0x86, 0xdf, 0x17,
0xff, 0xab, 0xde, 0x91, 0x10, 0xff, 0xcf, 0x8c, 0xff, 0xd5, 0x65, 0x7a, 0xed, 0x7b, 0x0e, 0x35, 0xef, 0xff, 0xad, 0x5a,
0xf5, 0x65, 0x87, 0xe7, 0xff, 0xcf, 0x7d, 0xf7, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8,
0xfb, 0x3d, 0xf7, 0xd8, 0x96, 0xe3, 0xb9, 0x48, 0xb1, 0xec, 0x7b, 0xbb, 0x67, 0x63, 0x6e, 0xb2, 0x6f, 0x87, 0x4a, 0x7f,
0xf4, 0x7c, 0xef, 0x54, 0xbe, 0x9f, 0x4b, 0xac, 0xdf, 0x5e, 0x66, 0xb1, 0x98, 0x8a, 0x1f, 0x67, 0xc5, 0xe7, 0xe4, 0xa3,
0xff, 0xca, 0xac, 0xd4, 0xb2, 0x6f, 0xaf, 0xce, 0xbe, 0x1d, 0x39, 0xdf, 0xfb, 0x94, 0x6f, 0x7c, 0xbe, 0xd5, 0xb5, 0x65,
0xb6, 0xd7, 0x6c, 0xbe, 0xaa, 0x19, 0x86, 0x7b, 0xcd, 0x54, 0xec, 0x13, 0x19, 0xd5, 0xbb, 0xec, 0xdb, 0x8f, 0xe8, 0xe7,
0x56, 0xac, 0x8c, 0xf1, 0x9e, 0x98, 0xba, 0x7b, 0x86, 0xeb, 0x73, 0xb2, 0x31, 0x8f, 0xf5, 0x61, 0x72, 0xab, 0x25, 0xbd,
0x27, 0xfb, 0xf6, 0x4f, 0xad, 0xdd, 0xb5, 0x33, 0x6a, 0xab, 0xca, 0xf7, 0x38, 0xc7, 0xee, 0xce, 0xd9, 0x1f, 0x9e, 0x17,
0xff, 0xbb, 0x64, 0xa5, 0x6a, 0x27, 0x25, 0x9e, 0xbf, 0xae, 0xbe, 0x29, 0xfb, 0xee, 0x3b, 0x32, 0xa8, 0xf4, 0xad, 0xae,
0xcd, 0x77, 0xc7, 0x7f, 0x26, 0x1e, 0x57, 0x6c, 0xab, 0xc9, 0x0c, 0xff, 0xed, 0xd9, 0x77, 0xdf, 0x13, 0xff, 0x4d, 0xfc,
0xdf, 0xde, 0xff, 0xbf, 0x6e, 0xdb, 0x7c, 0xdf, 0x60, 0xc5, 0xfd, 0xff, 0xe7, 0x65, 0xdf, 0x7d, 0x53, 0xfb, 0xbf, 0x4b,
0xc6, 0xc4, 0x68, 0x4c, 0xf5, 0x17, 0xc4, 0xff, 0x8e, 0xed, 0xa9, 0xec, 0x9b, 0xdf, 0x11, 0xff, 0x7d, 0xc3, 0xe3, 0xea,
0x45, 0x75, 0xd7, 0x35, 0xd7, 0x57, 0xf4, 0x2e, 0xcb, 0x2e, 0x71, 0x51, 0x7d, 0x6f, 0x70, 0xfc, 0x09, 0xfb, 0x1b, 0xb3,
0x6f, 0xbe, 0x35, 0xdb, 0xe6, 0xca, 0xfd, 0x6b, 0xe1, 0xb5, 0xf8, 0xf3, 0x4f, 0x68, 0x56, 0xd5, 0xa5, 0x15, 0x2b, 0x6f,
0xef, 0x94, 0x8d, 0x51, 0xf6, 0xcd, 0x15, 0xcf, 0xa2, 0x9e, 0x9c, 0x6d, 0xf3, 0x3c, 0x56, 0xe3, 0xdb, 0xd6, 0xc7, 0xf4,
0x55, 0x75, 0xe9, 0xfb, 0x72, 0x8f, 0xca, 0xa8, 0xca, 0x33, 0xde, 0xb7, 0xc9, 0xdd, 0xe7, 0xa8, 0xbd, 0xe6, 0x45, 0x0a,
0xdc, 0xf5, 0x6e, 0x90, 0xb6, 0x8a, 0xdd, 0xfc, 0xe5, 0x1c, 0xe8, 0x7f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfa, 0xef, 0xc7,
0x79, 0x00, 0xf1, 0x0f, 0x7c, 0x5d, 0xfc, 0xff, 0x0d };
// Font glyphs rectangles data (on atlas)
static const Rectangle candyFontRecs[189] = {
{ 4, 4, 3 , 15 },
{ 15, 4, 2 , 9 },
{ 25, 4, 3 , 2 },
{ 36, 4, 8 , 9 },
{ 52, 4, 6 , 11 },
{ 66, 4, 7 , 9 },
{ 81, 4, 7 , 9 },
{ 96, 4, 1 , 2 },
{ 105, 4, 3 , 11 },
{ 116, 4, 3 , 11 },
{ 127, 4, 7 , 7 },
{ 142, 4, 6 , 5 },
{ 156, 4, 2 , 3 },
{ 166, 4, 5 , 1 },
{ 179, 4, 2 , 2 },
{ 189, 4, 5 , 10 },
{ 202, 4, 6 , 9 },
{ 216, 4, 4 , 9 },
{ 228, 4, 6 , 9 },
{ 242, 4, 6 , 9 },
{ 256, 4, 7 , 9 },
{ 271, 4, 6 , 9 },
{ 285, 4, 6 , 9 },
{ 299, 4, 6 , 9 },
{ 313, 4, 6 , 9 },
{ 327, 4, 6 , 9 },
{ 341, 4, 2 , 6 },
{ 351, 4, 2 , 7 },
{ 361, 4, 4 , 6 },
{ 373, 4, 5 , 3 },
{ 386, 4, 4 , 6 },
{ 398, 4, 6 , 9 },
{ 412, 4, 8 , 7 },
{ 428, 4, 6 , 9 },
{ 442, 4, 6 , 9 },
{ 456, 4, 6 , 9 },
{ 470, 4, 6 , 9 },
{ 484, 4, 6 , 9 },
{ 4, 27, 6 , 9 },
{ 18, 27, 6 , 9 },
{ 32, 27, 6 , 9 },
{ 46, 27, 2 , 9 },
{ 56, 27, 6 , 9 },
{ 70, 27, 6 , 9 },
{ 84, 27, 6 , 9 },
{ 98, 27, 8 , 9 },
{ 114, 27, 6 , 9 },
{ 128, 27, 6 , 9 },
{ 142, 27, 6 , 9 },
{ 156, 27, 6 , 9 },
{ 170, 27, 6 , 9 },
{ 184, 27, 6 , 9 },
{ 198, 27, 6 , 9 },
{ 212, 27, 6 , 9 },
{ 226, 27, 6 , 9 },
{ 240, 27, 8 , 9 },
{ 256, 27, 6 , 9 },
{ 270, 27, 6 , 9 },
{ 284, 27, 6 , 9 },
{ 298, 27, 3 , 11 },
{ 309, 27, 5 , 10 },
{ 322, 27, 3 , 11 },
{ 333, 27, 6 , 4 },
{ 347, 27, 6 , 1 },
{ 361, 27, 3 , 2 },
{ 372, 27, 6 , 7 },
{ 386, 27, 6 , 10 },
{ 400, 27, 6 , 7 },
{ 414, 27, 6 , 10 },
{ 428, 27, 6 , 7 },
{ 442, 27, 5 , 10 },
{ 455, 27, 7 , 10 },
{ 470, 27, 6 , 10 },
{ 484, 27, 2 , 10 },
{ 494, 27, 2 , 12 },
{ 4, 50, 6 , 10 },
{ 18, 50, 3 , 10 },
{ 29, 50, 8 , 7 },
{ 45, 50, 6 , 7 },
{ 59, 50, 6 , 7 },
{ 73, 50, 6 , 10 },
{ 87, 50, 6 , 10 },
{ 101, 50, 6 , 7 },
{ 115, 50, 6 , 7 },
{ 129, 50, 3 , 10 },
{ 140, 50, 6 , 7 },
{ 154, 50, 6 , 7 },
{ 168, 50, 8 , 7 },
{ 184, 50, 6 , 7 },
{ 198, 50, 6 , 10 },
{ 212, 50, 6 , 7 },
{ 226, 50, 4 , 11 },
{ 238, 50, 1 , 11 },
{ 247, 50, 4 , 11 },
{ 259, 50, 6 , 2 },
{ 273, 50, 2 , 10 },
{ 283, 50, 6 , 11 },
{ 297, 50, 8 , 9 },
{ 313, 50, 7 , 9 },
{ 328, 50, 6 , 9 },
{ 342, 50, 0 , 0 },
{ 350, 50, 6 , 11 },
{ 364, 50, 0 , 0 },
{ 372, 50, 8 , 8 },
{ 388, 50, 5 , 7 },
{ 401, 50, 7 , 6 },
{ 416, 50, 0 , 0 },
{ 424, 50, 8 , 8 },
{ 440, 50, 6 , 1 },
{ 454, 50, 4 , 5 },
{ 466, 50, 6 , 7 },
{ 480, 50, 3 , 5 },
{ 491, 50, 3 , 5 },
{ 502, 50, 0 , 0 },
{ 4, 73, 6 , 9 },
{ 18, 73, 6 , 9 },
{ 32, 73, 4 , 4 },
{ 44, 73, 0 , 0 },
{ 52, 73, 2 , 5 },
{ 62, 73, 4 , 7 },
{ 74, 73, 7 , 6 },
{ 89, 73, 10 , 9 },
{ 107, 73, 10 , 7 },
{ 125, 73, 0 , 0 },
{ 133, 73, 6 , 9 },
{ 147, 73, 6 , 12 },
{ 161, 73, 6 , 12 },
{ 175, 73, 6 , 12 },
{ 189, 73, 6 , 12 },
{ 203, 73, 6 , 11 },
{ 217, 73, 6 , 12 },
{ 231, 73, 10 , 9 },
{ 249, 73, 6 , 12 },
{ 263, 73, 6 , 12 },
{ 277, 73, 6 , 12 },
{ 291, 73, 6 , 12 },
{ 305, 73, 6 , 11 },
{ 319, 73, 3 , 12 },
{ 330, 73, 3 , 12 },
{ 341, 73, 4 , 12 },
{ 353, 73, 4 , 11 },
{ 365, 73, 8 , 9 },
{ 381, 73, 6 , 12 },
{ 395, 73, 6 , 12 },
{ 409, 73, 6 , 12 },
{ 423, 73, 6 , 12 },
{ 437, 73, 6 , 12 },
{ 451, 73, 6 , 11 },
{ 465, 73, 5 , 5 },
{ 478, 73, 9 , 10 },
{ 495, 73, 6 , 12 },
{ 4, 96, 6 , 12 },
{ 18, 96, 6 , 12 },
{ 32, 96, 6 , 11 },
{ 46, 96, 6 , 12 },
{ 60, 96, 0 , 0 },
{ 68, 96, 6 , 10 },
{ 82, 96, 6 , 10 },
{ 96, 96, 6 , 10 },
{ 110, 96, 6 , 10 },
{ 124, 96, 6 , 10 },
{ 138, 96, 6 , 9 },
{ 152, 96, 6 , 11 },
{ 166, 96, 10 , 7 },
{ 184, 96, 6 , 10 },
{ 198, 96, 6 , 10 },
{ 212, 96, 6 , 10 },
{ 226, 96, 6 , 10 },
{ 240, 96, 6 , 9 },
{ 254, 96, 3 , 10 },
{ 265, 96, 3 , 10 },
{ 276, 96, 4 , 10 },
{ 288, 96, 4 , 9 },
{ 300, 96, 0 , 0 },
{ 308, 96, 6 , 13 },
{ 322, 96, 6 , 10 },
{ 336, 96, 6 , 10 },
{ 350, 96, 6 , 10 },
{ 364, 96, 6 , 10 },
{ 378, 96, 6 , 9 },
{ 392, 96, 0 , 0 },
{ 400, 96, 8 , 8 },
{ 416, 96, 6 , 10 },
{ 430, 96, 6 , 10 },
{ 444, 96, 6 , 10 },
{ 458, 96, 6 , 9 },
{ 472, 96, 6 , 13 },
{ 486, 96, 0 , 0 },
{ 494, 96, 6 , 12 },
};
// Font glyphs info data
// NOTE: No glyphs.image data provided
static const GlyphInfo candyFontGlyphs[189] = {
{ 32, 0, 0, 3, { 0 }},
{ 33, 0, 3, 3, { 0 }},
{ 34, 0, 2, 4, { 0 }},
{ 35, 0, 3, 9, { 0 }},
{ 36, 0, 2, 7, { 0 }},
{ 37, 0, 3, 8, { 0 }},
{ 38, 0, 3, 8, { 0 }},
{ 39, 0, 2, 2, { 0 }},
{ 40, 1, 2, 5, { 0 }},
{ 41, 1, 2, 5, { 0 }},
{ 42, 0, 4, 8, { 0 }},
{ 43, 0, 6, 7, { 0 }},
{ 44, 0, 10, 3, { 0 }},
{ 45, 0, 7, 6, { 0 }},
{ 46, 0, 10, 3, { 0 }},
{ 47, 1, 3, 7, { 0 }},
{ 48, 0, 3, 7, { 0 }},
{ 49, 0, 3, 5, { 0 }},
{ 50, 0, 3, 7, { 0 }},
{ 51, 0, 3, 7, { 0 }},
{ 52, 0, 3, 8, { 0 }},
{ 53, 0, 3, 7, { 0 }},
{ 54, 0, 3, 7, { 0 }},
{ 55, 0, 3, 7, { 0 }},
{ 56, 0, 3, 7, { 0 }},
{ 57, 0, 3, 7, { 0 }},
{ 58, 0, 6, 3, { 0 }},
{ 59, 0, 6, 3, { 0 }},
{ 60, 1, 5, 6, { 0 }},
{ 61, 1, 7, 7, { 0 }},
{ 62, 1, 5, 6, { 0 }},
{ 63, 0, 3, 7, { 0 }},
{ 64, 0, 4, 9, { 0 }},
{ 65, 0, 3, 7, { 0 }},
{ 66, 0, 3, 7, { 0 }},
{ 67, 0, 3, 7, { 0 }},
{ 68, 0, 3, 7, { 0 }},
{ 69, 0, 3, 7, { 0 }},
{ 70, 0, 3, 7, { 0 }},
{ 71, 0, 3, 7, { 0 }},
{ 72, 0, 3, 7, { 0 }},
{ 73, 0, 3, 3, { 0 }},
{ 74, 0, 3, 7, { 0 }},
{ 75, 0, 3, 7, { 0 }},
{ 76, 0, 3, 7, { 0 }},
{ 77, 0, 3, 9, { 0 }},
{ 78, 0, 3, 7, { 0 }},
{ 79, 0, 3, 7, { 0 }},
{ 80, 0, 3, 7, { 0 }},
{ 81, 0, 3, 7, { 0 }},
{ 82, 0, 3, 7, { 0 }},
{ 83, 0, 3, 7, { 0 }},
{ 84, 0, 3, 7, { 0 }},
{ 85, 0, 3, 7, { 0 }},
{ 86, 0, 3, 7, { 0 }},
{ 87, 0, 3, 9, { 0 }},
{ 88, 0, 3, 7, { 0 }},
{ 89, 0, 3, 7, { 0 }},
{ 90, 0, 3, 7, { 0 }},
{ 91, 1, 2, 5, { 0 }},
{ 92, 1, 3, 7, { 0 }},
{ 93, 1, 2, 5, { 0 }},
{ 94, 0, 3, 7, { 0 }},
{ 95, 0, 11, 7, { 0 }},
{ 96, 0, 0, 4, { 0 }},
{ 97, 0, 5, 7, { 0 }},
{ 98, 0, 2, 7, { 0 }},
{ 99, 0, 5, 7, { 0 }},
{ 100, 0, 2, 7, { 0 }},
{ 101, 0, 5, 7, { 0 }},
{ 102, 0, 2, 6, { 0 }},
{ 103, 0, 5, 7, { 0 }},
{ 104, 0, 2, 7, { 0 }},
{ 105, 0, 2, 3, { 0 }},
{ 106, 0, 2, 3, { 0 }},
{ 107, 0, 2, 7, { 0 }},
{ 108, 0, 2, 4, { 0 }},
{ 109, 0, 5, 9, { 0 }},
{ 110, 0, 5, 7, { 0 }},
{ 111, 0, 5, 7, { 0 }},
{ 112, 0, 5, 7, { 0 }},
{ 113, 0, 5, 7, { 0 }},
{ 114, 0, 5, 7, { 0 }},
{ 115, 0, 5, 7, { 0 }},
{ 116, 0, 2, 4, { 0 }},
{ 117, 0, 5, 7, { 0 }},
{ 118, 0, 5, 7, { 0 }},
{ 119, 0, 5, 9, { 0 }},
{ 120, 0, 5, 7, { 0 }},
{ 121, 0, 5, 7, { 0 }},
{ 122, 0, 5, 7, { 0 }},
{ 123, 1, 2, 6, { 0 }},
{ 124, 1, 2, 3, { 0 }},
{ 125, 1, 2, 6, { 0 }},
{ 126, 0, 0, 7, { 0 }},
{ 161, 0, 3, 3, { 0 }},
{ 162, 0, 2, 7, { 0 }},
{ 163, 0, 3, 9, { 0 }},
{ 8364, 0, 3, 8, { 0 }},
{ 165, 0, 3, 7, { 0 }},
{ 352, 0, 0, 0, { 0 }},
{ 167, 0, 2, 7, { 0 }},
{ 353, 0, 0, 0, { 0 }},
{ 169, 0, 0, 9, { 0 }},
{ 170, 0, 0, 6, { 0 }},
{ 171, 1, 5, 9, { 0 }},
{ 172, 0, 0, 0, { 0 }},
{ 174, 0, 0, 9, { 0 }},
{ 175, 0, 0, 7, { 0 }},
{ 176, 0, 0, 5, { 0 }},
{ 177, 0, 4, 7, { 0 }},
{ 178, 0, 0, 4, { 0 }},
{ 179, 0, 0, 4, { 0 }},
{ 381, 0, 0, 0, { 0 }},
{ 181, 0, 5, 7, { 0 }},
{ 182, 0, 3, 7, { 0 }},
{ 183, 0, 6, 5, { 0 }},
{ 382, 0, 0, 0, { 0 }},
{ 185, 0, 0, 3, { 0 }},
{ 186, 0, 0, 5, { 0 }},
{ 187, 1, 5, 9, { 0 }},
{ 338, 0, 3, 11, { 0 }},
{ 339, 0, 5, 11, { 0 }},
{ 376, 0, 0, 0, { 0 }},
{ 191, 0, 4, 7, { 0 }},
{ 192, 0, 0, 7, { 0 }},
{ 193, 0, 0, 7, { 0 }},
{ 194, 0, 0, 7, { 0 }},
{ 195, 0, 0, 7, { 0 }},
{ 196, 0, 1, 7, { 0 }},
{ 197, 0, 0, 7, { 0 }},
{ 198, 0, 3, 11, { 0 }},
{ 199, 0, 3, 7, { 0 }},
{ 200, 0, 0, 7, { 0 }},
{ 201, 0, 0, 7, { 0 }},
{ 202, 0, 0, 7, { 0 }},
{ 203, 0, 1, 7, { 0 }},
{ 204, -1, 0, 3, { 0 }},
{ 205, 0, 0, 3, { 0 }},
{ 206, -1, 0, 3, { 0 }},
{ 207, -1, 1, 3, { 0 }},
{ 208, 0, 3, 9, { 0 }},
{ 209, 0, 0, 7, { 0 }},
{ 210, 0, 0, 7, { 0 }},
{ 211, 0, 0, 7, { 0 }},
{ 212, 0, 0, 7, { 0 }},
{ 213, 0, 0, 7, { 0 }},
{ 214, 0, 1, 7, { 0 }},
{ 215, 0, 7, 6, { 0 }},
{ 216, 0, 3, 10, { 0 }},
{ 217, 0, 0, 7, { 0 }},
{ 218, 0, 0, 7, { 0 }},
{ 219, 0, 0, 7, { 0 }},
{ 220, 0, 1, 7, { 0 }},
{ 221, 0, 0, 7, { 0 }},
{ 222, 0, 0, 0, { 0 }},
{ 223, 0, 3, 7, { 0 }},
{ 224, 0, 2, 7, { 0 }},
{ 225, 0, 2, 7, { 0 }},
{ 226, 0, 2, 7, { 0 }},
{ 227, 0, 2, 7, { 0 }},
{ 228, 0, 3, 7, { 0 }},
{ 229, 0, 1, 7, { 0 }},
{ 230, 0, 5, 11, { 0 }},
{ 231, 0, 5, 7, { 0 }},
{ 232, 0, 2, 7, { 0 }},
{ 233, 0, 2, 7, { 0 }},
{ 234, 0, 2, 7, { 0 }},
{ 235, 0, 3, 7, { 0 }},
{ 236, 0, 2, 4, { 0 }},
{ 237, 0, 2, 4, { 0 }},
{ 238, 0, 2, 4, { 0 }},
{ 239, 0, 3, 4, { 0 }},
{ 240, 0, 0, 0, { 0 }},
{ 241, 0, 2, 7, { 0 }},
{ 242, 0, 2, 7, { 0 }},
{ 243, 0, 2, 7, { 0 }},
{ 244, 0, 2, 7, { 0 }},
{ 245, 0, 2, 7, { 0 }},
{ 246, 0, 3, 7, { 0 }},
{ 247, 0, 0, 0, { 0 }},
{ 248, 0, 5, 9, { 0 }},
{ 249, 0, 2, 7, { 0 }},
{ 250, 0, 2, 7, { 0 }},
{ 251, 0, 2, 7, { 0 }},
{ 252, 0, 3, 7, { 0 }},
{ 253, 0, 2, 7, { 0 }},
{ 254, 0, 0, 0, { 0 }},
{ 255, 0, 3, 7, { 0 }},
};
// Style loading function: Candy
static void GuiLoadStyleCandy(void)
{
// Load style properties provided
// NOTE: Default properties are propagated
for (int i = 0; i < CANDY_STYLE_PROPS_COUNT; i++)
{
GuiSetStyle(candyStyleProps[i].controlId, candyStyleProps[i].propertyId, candyStyleProps[i].propertyValue);
}
// Custom font loading
// NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function
int candyFontDataSize = 0;
unsigned char *data = DecompressData(candyFontData, CANDY_STYLE_FONT_ATLAS_COMP_SIZE, &candyFontDataSize);
Image imFont = { data, 512, 256, 1, 2 };
Font font = { 0 };
font.baseSize = 15;
font.glyphCount = 189;
// Load texture from image
font.texture = LoadTextureFromImage(imFont);
UnloadImage(imFont); // Uncompressed image data can be unloaded from memory
// Copy char recs data from global fontRecs
// NOTE: Required to avoid issues if trying to free font
font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle));
memcpy(font.recs, candyFontRecs, font.glyphCount*sizeof(Rectangle));
// Copy font char info data from global fontChars
// NOTE: Required to avoid issues if trying to free font
font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo));
memcpy(font.glyphs, candyFontGlyphs, font.glyphCount*sizeof(GlyphInfo));
GuiSetFont(font);
// Setup a white rectangle on the font to be used on shapes drawing,
// it makes possible to draw shapes and text (full UI) in a single draw call
Rectangle fontWhiteRec = { 510, 254, 1, 1 };
SetShapesTexture(font.texture, fontWhiteRec);
//-----------------------------------------------------------------
// TODO: Custom user style setup: Set specific properties here (if required)
// i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT
}

View File

@ -0,0 +1,617 @@
//////////////////////////////////////////////////////////////////////////////////
// //
// StyleAsCode exporter v2.0 - Style data exported as a values array //
// //
// USAGE: On init call: GuiLoadStyleCherry(); //
// //
// more info and bugs-report: github.com/raysan5/raygui //
// feedback and support: ray[at]raylibtech.com //
// //
// Copyright (c) 2020-2025 raylib technologies (@raylibtech) //
// //
//////////////////////////////////////////////////////////////////////////////////
#define CHERRY_STYLE_PROPS_COUNT 17
// Custom style name: Cherry
static const GuiStyleProp cherryStyleProps[CHERRY_STYLE_PROPS_COUNT] = {
{ 0, 0, (int)0xda5757ff }, // DEFAULT_BORDER_COLOR_NORMAL
{ 0, 1, (int)0x753233ff }, // DEFAULT_BASE_COLOR_NORMAL
{ 0, 2, (int)0xe17373ff }, // DEFAULT_TEXT_COLOR_NORMAL
{ 0, 3, (int)0xfaaa97ff }, // DEFAULT_BORDER_COLOR_FOCUSED
{ 0, 4, (int)0xe06262ff }, // DEFAULT_BASE_COLOR_FOCUSED
{ 0, 5, (int)0xfdb4aaff }, // DEFAULT_TEXT_COLOR_FOCUSED
{ 0, 6, (int)0xe03c46ff }, // DEFAULT_BORDER_COLOR_PRESSED
{ 0, 7, (int)0x5b1e20ff }, // DEFAULT_BASE_COLOR_PRESSED
{ 0, 8, (int)0xc2474fff }, // DEFAULT_TEXT_COLOR_PRESSED
{ 0, 9, (int)0xa19292ff }, // DEFAULT_BORDER_COLOR_DISABLED
{ 0, 10, (int)0x706060ff }, // DEFAULT_BASE_COLOR_DISABLED
{ 0, 11, (int)0x9e8585ff }, // DEFAULT_TEXT_COLOR_DISABLED
{ 0, 16, (int)0x0000000f }, // DEFAULT_TEXT_SIZE
{ 0, 17, (int)0x00000000 }, // DEFAULT_TEXT_SPACING
{ 0, 18, (int)0xfb8170ff }, // DEFAULT_LINE_COLOR
{ 0, 19, (int)0x3a1720ff }, // DEFAULT_BACKGROUND_COLOR
{ 0, 20, (int)0x00000007 }, // DEFAULT_TEXT_LINE_SPACING
};
// WARNING: This style uses a custom font: "Westington.ttf" (size: 15, spacing: 0)
#define CHERRY_STYLE_FONT_ATLAS_COMP_SIZE 2821
// Font atlas image pixels data: DEFLATE compressed
static unsigned char cherryFontData[CHERRY_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed,
0xdd, 0x59, 0x92, 0xdc, 0xba, 0x11, 0x05, 0x50, 0xee, 0x7f, 0xd3, 0xd7, 0xe1, 0x70, 0x84, 0xed, 0x27, 0xa9, 0x09, 0x20,
0x91, 0x20, 0xab, 0x5b, 0x47, 0xe7, 0xaf, 0xa1, 0x1a, 0x38, 0x24, 0x26, 0x16, 0x12, 0xb9, 0x00, 0x00, 0x00, 0x00, 0xf2,
0xef, 0x7f, 0x5f, 0xfd, 0xf5, 0xcf, 0x65, 0xff, 0xff, 0xaa, 0xdc, 0xbe, 0x73, 0xfd, 0xb3, 0xb3, 0xf8, 0xae, 0x59, 0xf8,
0x7f, 0xf9, 0xf2, 0xbb, 0x64, 0xfa, 0x33, 0xd7, 0x8f, 0x7b, 0xfd, 0x58, 0xef, 0xce, 0xfd, 0xfa, 0x31, 0x5c, 0x37, 0x9f,
0xbf, 0xf6, 0xdd, 0x2a, 0xaf, 0xb9, 0x2f, 0x59, 0xbf, 0x7b, 0x3a, 0xae, 0xc8, 0xdc, 0x35, 0xb8, 0x3f, 0xa7, 0xd7, 0xf0,
0x95, 0xeb, 0xef, 0x9c, 0xe1, 0x59, 0x1c, 0x7f, 0xab, 0xb5, 0x1a, 0xe0, 0xeb, 0xbf, 0x8e, 0xee, 0xa6, 0x14, 0xee, 0xab,
0xff, 0xbd, 0x22, 0x8b, 0x65, 0xa3, 0xd7, 0xec, 0xdd, 0x57, 0x59, 0xa8, 0xa5, 0x2a, 0x57, 0x21, 0x8b, 0xe7, 0x61, 0xf5,
0xdc, 0xa5, 0x54, 0xff, 0x8c, 0xbe, 0x6d, 0x5a, 0x8e, 0xe7, 0xae, 0x24, 0xd3, 0x7f, 0x1d, 0xbf, 0xa2, 0xf2, 0x6e, 0x33,
0xf7, 0xd5, 0xdd, 0xab, 0xfb, 0xdf, 0x39, 0x53, 0xf7, 0xef, 0xd9, 0xf8, 0x1f, 0xd5, 0x97, 0xf7, 0xe7, 0xfb, 0xee, 0x28,
0xf2, 0xdf, 0xde, 0x45, 0xed, 0xbe, 0xdb, 0x89, 0xf4, 0xdc, 0xdc, 0x9d, 0x29, 0x9e, 0x8d, 0xfa, 0xff, 0xbb, 0x8f, 0x97,
0x14, 0x7b, 0x5e, 0x59, 0xb8, 0x4f, 0xb3, 0x54, 0xeb, 0xcd, 0xf4, 0x26, 0x2a, 0x35, 0xdd, 0x6e, 0x2f, 0x6a, 0xbf, 0xa7,
0xfb, 0xf5, 0x35, 0xb8, 0x3b, 0xdf, 0x99, 0x3c, 0x82, 0x94, 0xe2, 0xff, 0x5a, 0xac, 0xb1, 0x9f, 0x8a, 0xff, 0x71, 0xac,
0x8c, 0xe2, 0x29, 0xc3, 0x2b, 0x9c, 0x96, 0xef, 0x9f, 0x52, 0x8d, 0x76, 0x6a, 0x9c, 0x55, 0xbf, 0x7f, 0x66, 0xcf, 0x5e,
0x06, 0xa3, 0xb9, 0xee, 0x5e, 0xe8, 0x7c, 0xaf, 0x2f, 0xc5, 0xda, 0x75, 0xa5, 0x8f, 0x9f, 0xad, 0xde, 0xfa, 0x28, 0x7e,
0xb3, 0x5c, 0x17, 0x67, 0xa2, 0x3f, 0x74, 0xa2, 0x4f, 0xf2, 0x09, 0xf1, 0x9f, 0xc2, 0x08, 0xae, 0x5a, 0xc7, 0xa7, 0xa9,
0x6d, 0xce, 0xa1, 0xfa, 0xb5, 0x3b, 0xfe, 0xd7, 0xcb, 0xc6, 0x91, 0x91, 0xd6, 0x71, 0x58, 0x4a, 0x23, 0xe9, 0x7a, 0x1b,
0xbe, 0xfb, 0xda, 0xbb, 0xb9, 0xa2, 0x4c, 0xd4, 0x9e, 0x59, 0x9e, 0x01, 0xd8, 0x89, 0xff, 0xfe, 0xf1, 0x7f, 0x4a, 0xaf,
0x98, 0xab, 0x8d, 0x6b, 0x35, 0x71, 0x16, 0xbe, 0x59, 0x9a, 0x6a, 0xb6, 0x1c, 0x9d, 0x65, 0xbd, 0x1a, 0xe3, 0xbf, 0x36,
0x72, 0x4a, 0xdb, 0xdc, 0x44, 0x7d, 0xec, 0x96, 0xa6, 0xfb, 0x35, 0xad, 0xaf, 0xb8, 0x8f, 0xff, 0xbb, 0xf6, 0x7f, 0xbf,
0xff, 0xff, 0x7e, 0xfb, 0xdf, 0x3d, 0xfa, 0x9f, 0x9f, 0xc5, 0x18, 0x9f, 0xd3, 0xe7, 0xe2, 0xff, 0x64, 0xdf, 0xbf, 0x36,
0x96, 0x4f, 0x71, 0x9e, 0x32, 0x4d, 0x23, 0xf6, 0x94, 0x47, 0xe7, 0x69, 0x99, 0xd5, 0xe9, 0xab, 0xab, 0x53, 0xfe, 0x8c,
0xfa, 0x3c, 0xf6, 0x4f, 0x1d, 0xff, 0x67, 0xe9, 0xd9, 0xc0, 0xb8, 0x6f, 0x75, 0x77, 0x66, 0xd2, 0x3e, 0xff, 0xf7, 0xde,
0x53, 0xd6, 0xb5, 0x5a, 0x27, 0x85, 0x31, 0x76, 0x65, 0xd6, 0xbc, 0xfa, 0x34, 0xb1, 0xf3, 0xd9, 0xe4, 0xfb, 0xd7, 0xa9,
0x3a, 0xd7, 0x98, 0x72, 0xed, 0x9e, 0x89, 0x67, 0x3f, 0xeb, 0xb3, 0x0a, 0x4f, 0xf5, 0xa6, 0x66, 0xe6, 0x62, 0xae, 0xe2,
0xbc, 0x69, 0x0a, 0x3d, 0x9c, 0x4f, 0x8f, 0xff, 0x4f, 0xaa, 0x89, 0x3e, 0xf1, 0xf7, 0x27, 0x69, 0x1e, 0xe9, 0x77, 0x45,
0x40, 0x26, 0x46, 0xe2, 0x57, 0xa1, 0x9e, 0xfe, 0x0e, 0xcf, 0xff, 0xc7, 0xf1, 0x5f, 0x1d, 0xff, 0x67, 0xea, 0xf7, 0x18,
0x6b, 0xcf, 0x01, 0xf2, 0xe1, 0xad, 0xbf, 0x1a, 0xa0, 0x67, 0x4e, 0xfe, 0xe9, 0xfa, 0x39, 0x87, 0xc7, 0x85, 0x7f, 0xe3,
0x75, 0x05, 0xf7, 0x0f, 0x20, 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x5e, 0x37,
0xb8, 0xbe, 0x16, 0xb1, 0x3b, 0x4b, 0x6b, 0xe5, 0xfd, 0x7e, 0x2f, 0x1d, 0xbd, 0x47, 0xf5, 0x68, 0x2b, 0xb9, 0xa0, 0x33,
0xf5, 0xdd, 0xb3, 0xbc, 0xa2, 0x73, 0x74, 0x34, 0xf9, 0xc7, 0x1a, 0xd5, 0x99, 0x73, 0xba, 0x73, 0x5d, 0xc6, 0x99, 0x77,
0x57, 0xf2, 0xfb, 0xae, 0xad, 0x06, 0x5e, 0x5d, 0x21, 0xd0, 0x99, 0xed, 0x60, 0xf6, 0xfa, 0x56, 0xee, 0xa8, 0x95, 0x4f,
0xdb, 0x59, 0x8b, 0x78, 0x9f, 0x81, 0xf9, 0x1a, 0x66, 0x88, 0xee, 0xca, 0x51, 0x97, 0x8d, 0x35, 0xfb, 0xbf, 0xdf, 0xc9,
0x95, 0x55, 0xdb, 0xe3, 0x7b, 0xaa, 0x92, 0x77, 0xa9, 0x9a, 0xb3, 0x39, 0x2d, 0x9f, 0x3b, 0xf3, 0xcd, 0xe6, 0x32, 0xfa,
0xd4, 0x33, 0xb6, 0x5f, 0x8b, 0xfb, 0x30, 0xac, 0xad, 0xe5, 0xce, 0xf2, 0x5a, 0xf8, 0xb4, 0xe5, 0x8b, 0x48, 0xf1, 0x3d,
0x6b, 0xf7, 0xda, 0x99, 0xec, 0x3f, 0xd5, 0x2c, 0x59, 0x67, 0xe2, 0x3f, 0xe5, 0xef, 0x92, 0xdb, 0x7b, 0xe2, 0x1a, 0x66,
0x28, 0xaa, 0x66, 0x5e, 0xca, 0x46, 0xbd, 0x96, 0x8d, 0xb5, 0xee, 0x5d, 0xf1, 0xbf, 0x13, 0xe1, 0xb3, 0xf9, 0x7b, 0xd3,
0xb2, 0xba, 0x7f, 0x25, 0x1b, 0x7a, 0xb5, 0x1f, 0xdc, 0x19, 0x21, 0x77, 0xc7, 0x9e, 0x8d, 0x33, 0x73, 0x26, 0xfe, 0xf3,
0x01, 0xf1, 0xbf, 0x53, 0x17, 0x7d, 0xcf, 0xf8, 0x4f, 0x43, 0xed, 0x9c, 0xd2, 0x15, 0xfa, 0x3d, 0x76, 0x2b, 0x7b, 0x59,
0x5c, 0xe5, 0x8c, 0xce, 0x69, 0x6e, 0x8f, 0x3a, 0xd6, 0x14, 0x3f, 0x19, 0xff, 0xeb, 0xf5, 0xcd, 0xa9, 0xf8, 0xbf, 0xdb,
0xad, 0x23, 0xa5, 0xdd, 0x9e, 0xfa, 0xf6, 0xc1, 0x5a, 0xa9, 0x8b, 0x32, 0x9d, 0x5b, 0xb4, 0x12, 0xff, 0x19, 0xee, 0xa0,
0x51, 0xd9, 0xb7, 0xa0, 0x9a, 0x0d, 0xb9, 0x23, 0xfe, 0xe7, 0xf3, 0x9b, 0x67, 0xb2, 0xee, 0xed, 0x88, 0xf3, 0x77, 0xe2,
0x7f, 0x74, 0x05, 0x53, 0xcc, 0xd6, 0xb7, 0x9e, 0xe5, 0x7b, 0xfc, 0x69, 0xbd, 0x59, 0xd4, 0x67, 0xf6, 0x9a, 0xc9, 0x37,
0x68, 0xff, 0xcf, 0xc7, 0x7f, 0xe5, 0x5d, 0x67, 0xe7, 0x66, 0xf2, 0x5a, 0xfc, 0x67, 0xbb, 0x85, 0x4f, 0xf3, 0xe8, 0xf2,
0x8d, 0xbc, 0x5f, 0x33, 0xf3, 0x05, 0xb5, 0x18, 0x4f, 0xeb, 0x78, 0xa3, 0xf6, 0x69, 0x27, 0x7a, 0x98, 0xeb, 0xf1, 0x9f,
0xa3, 0xe3, 0xff, 0x95, 0x4f, 0xa8, 0xf7, 0xff, 0xef, 0x3e, 0xbb, 0x77, 0xfe, 0xaf, 0x6b, 0xee, 0x69, 0xa6, 0xed, 0x4e,
0x43, 0x2f, 0xe2, 0x7c, 0xcd, 0x90, 0xd7, 0x9e, 0x91, 0x55, 0x3e, 0xff, 0x44, 0x44, 0x56, 0x63, 0xab, 0x1a, 0xff, 0xbd,
0xf3, 0xff, 0x1d, 0xf3, 0xcc, 0x73, 0x47, 0x9f, 0x42, 0xa4, 0xa6, 0x38, 0xbe, 0xca, 0xd6, 0x0c, 0x79, 0x36, 0xe2, 0x3f,
0x0d, 0xf1, 0x7f, 0xf7, 0xfc, 0x6e, 0x37, 0xfe, 0x33, 0x78, 0xbe, 0x91, 0x6f, 0x13, 0xff, 0x29, 0xc5, 0x7f, 0x9a, 0x23,
0x32, 0xe5, 0xd8, 0xba, 0x96, 0x9f, 0x4f, 0x9e, 0x79, 0xfe, 0x3f, 0x7e, 0xca, 0xba, 0xf3, 0x24, 0x79, 0xf6, 0x3b, 0xd5,
0x7f, 0xed, 0x30, 0x3a, 0x4b, 0x59, 0x8e, 0xb0, 0x94, 0x72, 0xf3, 0xcf, 0x8f, 0xf9, 0xb2, 0xd9, 0x4a, 0x8d, 0x6b, 0x88,
0x6a, 0x4e, 0xea, 0xd5, 0x7d, 0xd5, 0xf3, 0xfa, 0xbe, 0x36, 0xcf, 0xbc, 0x72, 0x67, 0xaf, 0x06, 0x39, 0x89, 0xf9, 0x19,
0xbf, 0x49, 0x73, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xd6, 0x60,
0xa6, 0x94, 0xd5, 0x6b, 0xf6, 0x7f, 0x55, 0x73, 0x90, 0xe5, 0x36, 0xcb, 0xf4, 0xda, 0x5a, 0xdf, 0x0c, 0x8f, 0xb1, 0x63,
0xa5, 0xf4, 0xd9, 0x2c, 0xdc, 0xf3, 0xe7, 0xb6, 0x76, 0xf5, 0xb3, 0x98, 0xcf, 0x32, 0xed, 0x2b, 0xd3, 0xc7, 0xeb, 0xad,
0xef, 0xd7, 0xd0, 0xd7, 0x5f, 0x77, 0x15, 0x56, 0x38, 0xaf, 0x5e, 0xad, 0x99, 0x5c, 0xf1, 0x6f, 0xd4, 0x15, 0xd7, 0x44,
0x86, 0xbb, 0x9d, 0x1c, 0xfa, 0x77, 0xe7, 0xfe, 0xeb, 0xfb, 0xf5, 0xee, 0x7b, 0xf5, 0xe5, 0x2d, 0xbc, 0xb6, 0x33, 0xe8,
0x5e, 0x8f, 0x64, 0xe1, 0xce, 0xe2, 0x7d, 0x38, 0xfb, 0x3f, 0x47, 0x59, 0x04, 0x53, 0xc8, 0xf4, 0x71, 0xee, 0x78, 0x67,
0xf2, 0x3f, 0x8d, 0xf2, 0x3c, 0xfe, 0xf9, 0xef, 0x2b, 0xf7, 0x53, 0x2d, 0x67, 0x72, 0x06, 0xb9, 0x24, 0x7b, 0xd7, 0x5a,
0xe7, 0xf6, 0x5e, 0x5d, 0xef, 0x47, 0x9c, 0xb9, 0xa2, 0xf5, 0xf8, 0x5f, 0x6f, 0x77, 0x4e, 0xc5, 0xff, 0x7e, 0x16, 0xde,
0x9d, 0x1c, 0x3d, 0xfb, 0x7f, 0xbf, 0x6f, 0xfd, 0xaf, 0xe5, 0xde, 0xd9, 0xb5, 0x95, 0xeb, 0x76, 0x9c, 0x09, 0x67, 0x9c,
0x61, 0x6a, 0xf5, 0x38, 0xae, 0xc5, 0xfc, 0xce, 0x9f, 0x13, 0xff, 0x57, 0x29, 0xfe, 0xaf, 0x0f, 0x8a, 0xff, 0xbb, 0x76,
0xe7, 0x2a, 0xee, 0x27, 0x72, 0xd7, 0x33, 0xbb, 0x1a, 0xdb, 0x9c, 0xdf, 0x6b, 0xd5, 0x94, 0xfa, 0xc3, 0x29, 0x67, 0x4f,
0x7c, 0x2b, 0x07, 0xd7, 0x78, 0x77, 0x93, 0x71, 0xdf, 0xbf, 0x56, 0x53, 0xd6, 0x32, 0x31, 0xdd, 0x8f, 0x28, 0xb2, 0xb4,
0x3b, 0x41, 0x3d, 0x2f, 0x58, 0x0e, 0x64, 0x47, 0x59, 0xad, 0xe9, 0x53, 0xe8, 0xff, 0x5f, 0x5b, 0xfb, 0x48, 0x54, 0xf3,
0x1e, 0xd7, 0x72, 0xac, 0xa7, 0xd0, 0xee, 0xcc, 0xc4, 0xdf, 0x5e, 0x16, 0xde, 0x4c, 0x8e, 0xb2, 0xae, 0xc5, 0x3a, 0xf2,
0x6a, 0xab, 0x31, 0xd6, 0x7a, 0x98, 0xd9, 0x1a, 0x6d, 0xcd, 0xd4, 0x0d, 0x59, 0xdc, 0xab, 0xa1, 0xde, 0x5e, 0x54, 0xf2,
0xc9, 0xd5, 0x6b, 0x80, 0xbc, 0x36, 0xff, 0x77, 0x15, 0x32, 0xd5, 0xaf, 0xe5, 0xe6, 0xab, 0xcc, 0xbd, 0x55, 0x8e, 0xaf,
0x96, 0x73, 0x6f, 0x26, 0x6b, 0x7b, 0x4f, 0xfe, 0xe2, 0xd5, 0xf3, 0x73, 0x4d, 0xcd, 0x6a, 0xe5, 0xa5, 0xf6, 0x7f, 0x3d,
0x02, 0xe6, 0x76, 0xa5, 0xdc, 0xe9, 0xd5, 0x54, 0x33, 0x76, 0xf7, 0xf7, 0x7e, 0xde, 0x9f, 0xff, 0x5f, 0xcb, 0xe0, 0xfd,
0x59, 0xd9, 0x59, 0xd3, 0xf0, 0x3f, 0xfa, 0x3e, 0xeb, 0xed, 0x67, 0x38, 0x39, 0x5a, 0xfb, 0xf7, 0xc6, 0x7f, 0x8a, 0xe3,
0xc9, 0xd9, 0x7a, 0x38, 0x4b, 0x39, 0x87, 0xc7, 0xf3, 0x5b, 0xe7, 0xc6, 0x3f, 0x9f, 0x78, 0x3f, 0xed, 0xe4, 0xb2, 0x7f,
0xf6, 0x7b, 0xe6, 0xb1, 0x1e, 0xd3, 0x89, 0xd9, 0x97, 0xe7, 0xce, 0xc4, 0xda, 0x31, 0xa5, 0xf1, 0x8e, 0xad, 0xcd, 0xff,
0x65, 0x63, 0x8e, 0x6f, 0x77, 0xbf, 0xde, 0x14, 0x66, 0x15, 0xff, 0x86, 0x5f, 0x0a, 0x7c, 0x3d, 0x03, 0x91, 0xbf, 0x22,
0xf7, 0xf0, 0x4f, 0x3c, 0xc6, 0x8e, 0xe7, 0xff, 0xd5, 0x7e, 0x53, 0x6d, 0xe7, 0x80, 0xb9, 0x79, 0x9f, 0xca, 0xfc, 0x6e,
0x75, 0xcc, 0x08, 0x54, 0x9e, 0x31, 0x57, 0x76, 0x0e, 0xe8, 0x18, 0xc1, 0x65, 0xf9, 0xf9, 0x3f, 0xf0, 0x53, 0x6a, 0xa2,
0xda, 0xbc, 0x22, 0xf0, 0xfd, 0x47, 0x3b, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x9e, 0xbf, 0x88, 0x5e, 0x5f, 0xeb, 0xba, 0x9e, 0xeb, 0xb0, 0x9e, 0x71, 0x65, 0x76, 0x7d, 0xea, 0x55, 0xca, 0x1a, 0xb9,
0x97, 0x9b, 0x66, 0x2e, 0x5b, 0x73, 0x3d, 0x5b, 0x5d, 0x35, 0x43, 0xd6, 0x5e, 0xe9, 0xf8, 0x95, 0xf5, 0x57, 0x5f, 0xd3,
0xe7, 0x2d, 0xaf, 0x1c, 0x77, 0x16, 0x73, 0x18, 0xac, 0xdc, 0x53, 0xfd, 0xc7, 0xba, 0x77, 0x2e, 0xae, 0x62, 0x46, 0x9f,
0x4a, 0xb6, 0xe3, 0x4a, 0xbc, 0xde, 0xe5, 0x3b, 0xcd, 0xe2, 0x67, 0x65, 0x39, 0xa7, 0xf3, 0xa8, 0x16, 0xc9, 0x60, 0xc5,
0x68, 0x26, 0xd6, 0x9c, 0xee, 0xe5, 0x1b, 0xa8, 0x96, 0x8d, 0xaf, 0x7a, 0x3d, 0xcf, 0x49, 0x16, 0xeb, 0x8f, 0xb5, 0x1c,
0x7d, 0x27, 0x8f, 0x7b, 0x7d, 0x0d, 0x73, 0x96, 0x73, 0x64, 0x5d, 0x8b, 0xad, 0x4d, 0x26, 0xda, 0x87, 0xea, 0xb9, 0x98,
0x6d, 0x01, 0x57, 0xdb, 0xcd, 0xd5, 0x9a, 0xa4, 0x1a, 0xff, 0xd5, 0xcf, 0x3a, 0x13, 0xff, 0x77, 0xc7, 0x96, 0xdb, 0x9c,
0x13, 0xd9, 0xcc, 0x6f, 0xf8, 0x6c, 0xaf, 0xb0, 0xa7, 0xfd, 0x4d, 0x71, 0x8d, 0xfe, 0xf9, 0x75, 0x81, 0xa7, 0x56, 0x07,
0xd6, 0x73, 0x47, 0xbf, 0x71, 0x0f, 0xa4, 0x2d, 0x6b, 0xe4, 0x5c, 0x3e, 0xd6, 0xf5, 0xf8, 0x5f, 0x1d, 0x2f, 0xac, 0xe6,
0x33, 0xcc, 0x44, 0xeb, 0x34, 0xdb, 0xfe, 0x67, 0xeb, 0xea, 0x3f, 0xdf, 0xff, 0xbf, 0x36, 0xda, 0xd0, 0xb9, 0xd1, 0xc1,
0x6c, 0x1e, 0x8e, 0xd5, 0xbb, 0xa9, 0x5e, 0x3a, 0xce, 0x0d, 0xbc, 0xf7, 0xd7, 0xf1, 0xfd, 0x77, 0xf7, 0x4e, 0x95, 0x91,
0x52, 0xb6, 0x33, 0x36, 0x65, 0xf9, 0x6c, 0xdc, 0x1f, 0xf5, 0x7a, 0xce, 0xe5, 0xd5, 0xf8, 0x1f, 0xd5, 0x26, 0x6b, 0x23,
0xb8, 0x71, 0xfb, 0x3f, 0x93, 0x6b, 0x72, 0x6f, 0xb7, 0x8a, 0x1c, 0x89, 0xc3, 0x7a, 0xe9, 0xce, 0x4e, 0x27, 0x7f, 0xaa,
0x13, 0x53, 0xae, 0x99, 0x72, 0xac, 0xf4, 0xc4, 0xf8, 0x7f, 0x9c, 0x71, 0x24, 0x85, 0x7c, 0x25, 0x3b, 0xa3, 0xa8, 0xdd,
0xf6, 0xa5, 0xe3, 0xdd, 0xb2, 0xb5, 0x97, 0xc3, 0xb9, 0x6f, 0xdd, 0x31, 0xfe, 0x3f, 0x3b, 0xff, 0xb7, 0xbf, 0xe3, 0x58,
0xcf, 0x6e, 0x45, 0xab, 0xb5, 0xd9, 0xaf, 0xe7, 0x22, 0x1f, 0xd2, 0xab, 0xa9, 0xd5, 0x0e, 0xfb, 0x7f, 0x1d, 0xcf, 0x59,
0xe7, 0xa5, 0xf8, 0xef, 0x1d, 0x09, 0xe5, 0xc0, 0xfc, 0xe4, 0xf3, 0xd1, 0xbf, 0x32, 0xfe, 0xef, 0x98, 0x31, 0xab, 0xee,
0x38, 0x72, 0xb6, 0xb4, 0xb2, 0xe3, 0xea, 0xfc, 0x3d, 0xf9, 0x44, 0x0b, 0xdf, 0xb5, 0x4f, 0xc2, 0x4f, 0x8d, 0xff, 0x37,
0xf7, 0x18, 0xd9, 0x89, 0xff, 0xf3, 0x59, 0x9a, 0xf3, 0x87, 0x79, 0xbd, 0xdd, 0x4f, 0x1c, 0xed, 0x11, 0x9b, 0xf6, 0x38,
0xdc, 0x8f, 0xe1, 0x9d, 0xd2, 0xb9, 0x7d, 0x78, 0x6a, 0x51, 0xba, 0x53, 0xfa, 0x56, 0xfb, 0x3f, 0x33, 0x0b, 0xf5, 0x74,
0xfc, 0x77, 0xce, 0x86, 0xe6, 0x50, 0xeb, 0xb8, 0x3e, 0x9a, 0xe8, 0x9f, 0x1b, 0xed, 0xf8, 0xc4, 0x6a, 0xcb, 0xf0, 0x4e,
0xff, 0xbf, 0xfe, 0xfb, 0x8b, 0x7f, 0xce, 0x66, 0xa5, 0x38, 0xab, 0xf5, 0x93, 0xc6, 0xff, 0xd7, 0xd4, 0xae, 0x51, 0x79,
0x69, 0xfc, 0xff, 0x19, 0xaf, 0xff, 0x7b, 0x7f, 0x81, 0x75, 0x1d, 0x6e, 0x87, 0x9f, 0x2e, 0x3d, 0xdf, 0x63, 0xdc, 0x2b,
0xcd, 0x2b, 0xed, 0xff, 0xdc, 0x48, 0xf4, 0xbd, 0xf8, 0xef, 0xea, 0x2f, 0xab, 0x09, 0x3a, 0xe7, 0x59, 0xde, 0x6d, 0xc3,
0x6b, 0xbb, 0x38, 0xee, 0xfd, 0xda, 0x66, 0x76, 0x74, 0x50, 0x2b, 0xcd, 0xe1, 0xf1, 0xff, 0xee, 0x55, 0xae, 0x1c, 0xcf,
0xa7, 0xc4, 0xbf, 0xbc, 0xea, 0xa7, 0xea, 0x8c, 0x4a, 0x1c, 0x3e, 0x15, 0xc3, 0xcf, 0xdf, 0x4d, 0x7b, 0xcf, 0xff, 0xd7,
0xeb, 0xe8, 0xb5, 0xe7, 0xff, 0x3b, 0x2d, 0xc3, 0xd3, 0xcf, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0xef, 0xb7, 0xfe, 0x6c, 0x9c, 0x99, 0xa6, 0x9e, 0xd5, 0x7b, 0x37, 0x2b, 0xc0, 0xde, 0x11, 0xa5, 0xb4, 0xf6,
0x6c, 0x36, 0xb7, 0x75, 0xf7, 0xfa, 0xb4, 0x7a, 0x7e, 0xf0, 0x6c, 0xac, 0x3a, 0xac, 0xff, 0xba, 0xfc, 0xd4, 0x71, 0x9e,
0xca, 0xc2, 0x55, 0xb9, 0x1f, 0x9e, 0xbb, 0x96, 0x69, 0xbf, 0xc2, 0xb3, 0xef, 0x51, 0xcd, 0x05, 0x9d, 0xa5, 0x1c, 0x10,
0xab, 0x71, 0x96, 0xcd, 0x0c, 0xf5, 0xf5, 0xb5, 0x67, 0xb3, 0xb5, 0x4e, 0x6f, 0xe6, 0xea, 0x6c, 0xe4, 0x87, 0xae, 0x9f,
0xa3, 0x9d, 0xd5, 0xa5, 0xdd, 0xc7, 0xb9, 0x7e, 0xc5, 0x3a, 0x72, 0x73, 0x67, 0xe3, 0xcc, 0x67, 0xf9, 0xcc, 0x64, 0x50,
0x3b, 0xe5, 0x91, 0x75, 0xa5, 0xbd, 0x99, 0x0b, 0x56, 0x57, 0x34, 0x3e, 0xb7, 0xd6, 0xb6, 0xbe, 0x0a, 0x6c, 0x37, 0xbf,
0xd5, 0x73, 0xfd, 0xb7, 0x6a, 0x5f, 0xe4, 0xd7, 0xa3, 0xcc, 0x07, 0xe4, 0x74, 0x38, 0xbb, 0x9a, 0xed, 0xcc, 0x5e, 0x23,
0xe7, 0xbf, 0xe1, 0xde, 0xde, 0x21, 0x3b, 0x6b, 0x08, 0x53, 0xec, 0x51, 0x8d, 0x32, 0x1a, 0xdc, 0xc7, 0xe7, 0x6e, 0xf9,
0x5c, 0x0e, 0xb8, 0x6b, 0x22, 0x33, 0x6d, 0x0a, 0xd9, 0x2f, 0x32, 0x58, 0xd7, 0xde, 0x5d, 0x56, 0xbb, 0x47, 0x67, 0xf2,
0x96, 0xe7, 0xc0, 0x1d, 0x75, 0xbd, 0x98, 0x9b, 0xeb, 0x5a, 0x6e, 0x93, 0x53, 0x6c, 0x7b, 0x3b, 0x4b, 0x3a, 0xea, 0xe7,
0x6a, 0x2f, 0x6f, 0xa6, 0x6c, 0x3d, 0xa3, 0xe1, 0x4c, 0xcf, 0xf2, 0x99, 0xf2, 0xf5, 0x5c, 0xe6, 0xb3, 0xd9, 0x6f, 0xf2,
0x58, 0x59, 0xca, 0x77, 0xdb, 0x35, 0x91, 0x87, 0xff, 0xd4, 0x5d, 0xf3, 0x7c, 0x36, 0x8b, 0x4a, 0x0d, 0x5a, 0xcb, 0x91,
0xf8, 0x5c, 0xc9, 0x6c, 0xae, 0x83, 0x13, 0x57, 0xeb, 0x2a, 0xde, 0x39, 0x9f, 0x11, 0xff, 0xb9, 0xbd, 0xe6, 0xd7, 0x56,
0xdd, 0xd6, 0xdd, 0x2e, 0xce, 0xb4, 0x99, 0xf5, 0x7a, 0xa3, 0xfa, 0xb9, 0xb5, 0xac, 0x34, 0x73, 0xd9, 0x79, 0xae, 0xe9,
0x91, 0x7e, 0x65, 0x8f, 0xca, 0x95, 0x4f, 0xad, 0xb4, 0x03, 0x4f, 0x95, 0x54, 0x46, 0x30, 0x4f, 0xc5, 0xff, 0x67, 0xb4,
0xef, 0xb5, 0xdd, 0x0d, 0xc7, 0xe3, 0xff, 0x94, 0x7b, 0x45, 0xfd, 0x65, 0x29, 0xcf, 0xde, 0x74, 0xcc, 0x0b, 0xa5, 0xb5,
0xec, 0x6a, 0x9a, 0x9f, 0xaf, 0xec, 0x66, 0xf7, 0xb9, 0xf1, 0x5f, 0xdd, 0x3b, 0xe6, 0xad, 0xf8, 0xcf, 0xc7, 0xb7, 0xff,
0xeb, 0xbb, 0x9b, 0xfe, 0xf9, 0x19, 0x55, 0x4a, 0x3d, 0x8b, 0xce, 0xb2, 0xab, 0xb8, 0xef, 0xda, 0x6e, 0xaf, 0xf9, 0xc4,
0xf8, 0x66, 0x36, 0x27, 0xf0, 0x93, 0xf1, 0x5f, 0xb9, 0x2a, 0xbd, 0x25, 0xbb, 0x33, 0x43, 0x6f, 0xb4, 0xff, 0xf3, 0xcf,
0x0d, 0xde, 0x8a, 0xff, 0xea, 0xf3, 0xff, 0x99, 0xbd, 0x3c, 0x4f, 0xb4, 0x8c, 0x95, 0x96, 0xfc, 0xec, 0x3e, 0x09, 0x27,
0xc6, 0x39, 0xa7, 0xdb, 0xff, 0xca, 0x78, 0xe4, 0x1a, 0xee, 0xfc, 0x7e, 0xba, 0xe4, 0xda, 0x9e, 0xf9, 0xfd, 0xb4, 0x19,
0x99, 0xa7, 0xc6, 0xf7, 0x9f, 0xb5, 0xdf, 0xea, 0xf5, 0xda, 0xf3, 0xb4, 0x9f, 0x70, 0xac, 0x1d, 0x33, 0x00, 0xcf, 0x3f,
0x73, 0xfc, 0xb4, 0x73, 0x57, 0xdd, 0x89, 0xe5, 0xb9, 0xef, 0xd3, 0x51, 0x3e, 0xf3, 0xbd, 0xe5, 0x4c, 0xe5, 0x6f, 0xfa,
0xf5, 0xef, 0x67, 0xe5, 0x10, 0x1e, 0xff, 0x86, 0x76, 0xaf, 0xfc, 0xb9, 0xdf, 0x4d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xa9, 0xdf, 0xde, 0xd7, 0xd7, 0xbd, 0x57, 0xd7, 0x7c, 0xf7, 0x67, 0xe2, 0x8e, 0x35,
0x3c, 0xd0, 0xb6, 0x16, 0x34, 0x93, 0xb9, 0xe0, 0xba, 0x63, 0x31, 0x5b, 0x99, 0x4d, 0x80, 0xf9, 0x36, 0xff, 0x8d, 0x75,
0x7e, 0xd5, 0xcf, 0xcd, 0x30, 0xf3, 0x82, 0x55, 0x7c, 0x30, 0x1f, 0xff, 0x19, 0xe6, 0x32, 0xea, 0x2e, 0xbd, 0x26, 0xb2,
0x0b, 0x5c, 0x85, 0xfc, 0x55, 0xd1, 0x47, 0x80, 0xa5, 0xf8, 0x9f, 0xc9, 0xc8, 0xfd, 0x49, 0xa5, 0x29, 0xef, 0x3e, 0x06,
0xfc, 0x79, 0x94, 0xfd, 0xbd, 0xe2, 0x7f, 0x27, 0x7f, 0x3d, 0xf0, 0x7e, 0xfc, 0xa7, 0x58, 0x5a, 0xcf, 0x15, 0x0b, 0xfc,
0xda, 0xfb, 0x9f, 0x99, 0xfd, 0x4f, 0x7b, 0xe9, 0xd5, 0xb0, 0xc7, 0x44, 0xf5, 0xa9, 0x24, 0xd0, 0xf1, 0x7c, 0x70, 0xa7,
0xb4, 0xfe, 0x9b, 0x84, 0x99, 0xe7, 0x19, 0xae, 0x1c, 0x7c, 0xff, 0xe7, 0x92, 0xb5, 0xfa, 0xca, 0x19, 0x84, 0xef, 0xdf,
0xef, 0x70, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x79, 0xff, 0xf9, 0xe7, 0x3c, 0x80, 0xf8, 0x07, 0xfe, 0xba, 0xf8, 0xff, 0x17 };
// Font glyphs rectangles data (on atlas)
static const Rectangle cherryFontRecs[189] = {
{ 4, 4, 5 , 15 },
{ 17, 4, 3 , 10 },
{ 28, 4, 5 , 2 },
{ 41, 4, 10 , 10 },
{ 59, 4, 7 , 11 },
{ 74, 4, 7 , 10 },
{ 89, 4, 8 , 10 },
{ 105, 4, 1 , 2 },
{ 114, 4, 3 , 10 },
{ 125, 4, 3 , 10 },
{ 136, 4, 3 , 3 },
{ 147, 4, 7 , 7 },
{ 162, 4, 2 , 2 },
{ 172, 4, 6 , 3 },
{ 186, 4, 1 , 1 },
{ 195, 4, 4 , 10 },
{ 207, 4, 5 , 8 },
{ 220, 4, 5 , 8 },
{ 233, 4, 5 , 8 },
{ 246, 4, 5 , 8 },
{ 259, 4, 5 , 8 },
{ 272, 4, 5 , 8 },
{ 285, 4, 5 , 8 },
{ 298, 4, 5 , 8 },
{ 311, 4, 5 , 8 },
{ 324, 4, 5 , 8 },
{ 337, 4, 3 , 10 },
{ 348, 4, 3 , 12 },
{ 359, 4, 6 , 7 },
{ 373, 4, 6 , 4 },
{ 387, 4, 6 , 7 },
{ 401, 4, 5 , 10 },
{ 414, 4, 8 , 10 },
{ 430, 4, 7 , 9 },
{ 445, 4, 7 , 9 },
{ 460, 4, 6 , 9 },
{ 474, 4, 6 , 9 },
{ 488, 4, 7 , 9 },
{ 4, 27, 6 , 9 },
{ 18, 27, 6 , 9 },
{ 32, 27, 7 , 9 },
{ 47, 27, 3 , 9 },
{ 58, 27, 6 , 9 },
{ 72, 27, 7 , 9 },
{ 87, 27, 7 , 9 },
{ 102, 27, 11 , 9 },
{ 121, 27, 8 , 9 },
{ 137, 27, 6 , 9 },
{ 151, 27, 6 , 9 },
{ 165, 27, 7 , 9 },
{ 180, 27, 7 , 9 },
{ 195, 27, 6 , 9 },
{ 209, 27, 7 , 9 },
{ 224, 27, 8 , 9 },
{ 240, 27, 9 , 9 },
{ 257, 27, 11 , 9 },
{ 276, 27, 7 , 9 },
{ 291, 27, 7 , 9 },
{ 306, 27, 7 , 9 },
{ 321, 27, 3 , 9 },
{ 332, 27, 4 , 10 },
{ 344, 27, 3 , 9 },
{ 355, 27, 3 , 3 },
{ 366, 27, 7 , 2 },
{ 381, 27, 2 , 2 },
{ 391, 27, 6 , 6 },
{ 405, 27, 6 , 9 },
{ 419, 27, 6 , 6 },
{ 433, 27, 6 , 9 },
{ 447, 27, 6 , 6 },
{ 461, 27, 5 , 9 },
{ 474, 27, 5 , 9 },
{ 487, 27, 7 , 9 },
{ 4, 50, 3 , 7 },
{ 15, 50, 3 , 8 },
{ 26, 50, 6 , 9 },
{ 40, 50, 4 , 9 },
{ 52, 50, 11 , 6 },
{ 71, 50, 7 , 6 },
{ 86, 50, 5 , 6 },
{ 99, 50, 6 , 8 },
{ 113, 50, 6 , 8 },
{ 127, 50, 5 , 6 },
{ 140, 50, 5 , 6 },
{ 153, 50, 5 , 9 },
{ 166, 50, 7 , 6 },
{ 181, 50, 7 , 6 },
{ 196, 50, 11 , 6 },
{ 215, 50, 7 , 6 },
{ 230, 50, 7 , 8 },
{ 245, 50, 6 , 6 },
{ 259, 50, 5 , 9 },
{ 272, 50, 1 , 9 },
{ 281, 50, 5 , 9 },
{ 294, 50, 7 , 3 },
{ 309, 50, 3 , 10 },
{ 320, 50, 7 , 10 },
{ 335, 50, 7 , 10 },
{ 350, 50, 6 , 9 },
{ 364, 50, 7 , 9 },
{ 379, 50, 6 , 12 },
{ 393, 50, 7 , 11 },
{ 408, 50, 5 , 9 },
{ 421, 50, 5 , 5 },
{ 434, 50, 4 , 5 },
{ 446, 50, 6 , 7 },
{ 460, 50, 6 , 3 },
{ 474, 50, 5 , 5 },
{ 487, 50, 6 , 1 },
{ 4, 73, 3 , 3 },
{ 15, 73, 7 , 10 },
{ 30, 73, 3 , 5 },
{ 41, 73, 3 , 5 },
{ 52, 73, 7 , 12 },
{ 67, 73, 6 , 8 },
{ 81, 73, 7 , 9 },
{ 96, 73, 2 , 3 },
{ 106, 73, 6 , 9 },
{ 120, 73, 3 , 5 },
{ 131, 73, 3 , 5 },
{ 142, 73, 6 , 7 },
{ 156, 73, 13 , 9 },
{ 177, 73, 10 , 6 },
{ 195, 73, 7 , 11 },
{ 210, 73, 5 , 10 },
{ 223, 73, 7 , 12 },
{ 238, 73, 7 , 12 },
{ 253, 73, 7 , 12 },
{ 268, 73, 7 , 12 },
{ 283, 73, 7 , 11 },
{ 298, 73, 7 , 11 },
{ 313, 73, 12 , 9 },
{ 333, 73, 6 , 11 },
{ 347, 73, 7 , 12 },
{ 362, 73, 7 , 12 },
{ 377, 73, 7 , 12 },
{ 392, 73, 7 , 11 },
{ 407, 73, 3 , 12 },
{ 418, 73, 3 , 12 },
{ 429, 73, 3 , 12 },
{ 440, 73, 3 , 11 },
{ 451, 73, 7 , 9 },
{ 466, 73, 8 , 12 },
{ 482, 73, 6 , 12 },
{ 496, 73, 6 , 12 },
{ 4, 96, 6 , 12 },
{ 18, 96, 6 , 12 },
{ 32, 96, 6 , 11 },
{ 46, 96, 5 , 5 },
{ 59, 96, 8 , 9 },
{ 75, 96, 8 , 12 },
{ 91, 96, 8 , 12 },
{ 107, 96, 8 , 12 },
{ 123, 96, 8 , 11 },
{ 139, 96, 7 , 12 },
{ 154, 96, 7 , 9 },
{ 169, 96, 8 , 9 },
{ 185, 96, 6 , 9 },
{ 199, 96, 6 , 9 },
{ 213, 96, 6 , 9 },
{ 227, 96, 6 , 9 },
{ 241, 96, 6 , 8 },
{ 255, 96, 6 , 10 },
{ 269, 96, 10 , 6 },
{ 287, 96, 6 , 8 },
{ 301, 96, 6 , 9 },
{ 315, 96, 6 , 9 },
{ 329, 96, 6 , 9 },
{ 343, 96, 6 , 8 },
{ 357, 96, 3 , 10 },
{ 368, 96, 3 , 10 },
{ 379, 96, 3 , 10 },
{ 390, 96, 3 , 9 },
{ 401, 96, 6 , 10 },
{ 415, 96, 7 , 9 },
{ 430, 96, 5 , 9 },
{ 443, 96, 5 , 9 },
{ 456, 96, 5 , 9 },
{ 469, 96, 5 , 9 },
{ 482, 96, 5 , 8 },
{ 495, 96, 7 , 9 },
{ 4, 119, 8 , 8 },
{ 20, 119, 7 , 9 },
{ 35, 119, 7 , 9 },
{ 50, 119, 7 , 9 },
{ 65, 119, 7 , 8 },
{ 80, 119, 7 , 11 },
{ 95, 119, 5 , 8 },
{ 108, 119, 7 , 10 },
};
// Font glyphs info data
// NOTE: No glyphs.image data provided
static const GlyphInfo cherryFontGlyphs[189] = {
{ 32, 0, 0, 5, { 0 }},
{ 33, 0, 2, 4, { 0 }},
{ 34, 0, 2, 6, { 0 }},
{ 35, 0, 2, 11, { 0 }},
{ 36, 0, 2, 8, { 0 }},
{ 37, 0, 2, 8, { 0 }},
{ 38, 0, 2, 9, { 0 }},
{ 39, 0, 2, 2, { 0 }},
{ 40, 0, 2, 4, { 0 }},
{ 41, 0, 2, 4, { 0 }},
{ 42, 0, 2, 4, { 0 }},
{ 43, 0, 4, 8, { 0 }},
{ 44, 0, 11, 3, { 0 }},
{ 45, 0, 6, 7, { 0 }},
{ 46, 0, 11, 2, { 0 }},
{ 47, 0, 2, 5, { 0 }},
{ 48, 0, 4, 6, { 0 }},
{ 49, 0, 4, 6, { 0 }},
{ 50, 0, 4, 6, { 0 }},
{ 51, 0, 4, 6, { 0 }},
{ 52, 0, 4, 6, { 0 }},
{ 53, 0, 4, 6, { 0 }},
{ 54, 0, 4, 6, { 0 }},
{ 55, 0, 4, 6, { 0 }},
{ 56, 0, 4, 6, { 0 }},
{ 57, 0, 4, 6, { 0 }},
{ 58, 0, 2, 4, { 0 }},
{ 59, 0, 2, 4, { 0 }},
{ 60, 0, 4, 7, { 0 }},
{ 61, 0, 5, 7, { 0 }},
{ 62, 0, 4, 7, { 0 }},
{ 63, 0, 2, 6, { 0 }},
{ 64, 0, 2, 9, { 0 }},
{ 65, 0, 3, 8, { 0 }},
{ 66, 0, 3, 8, { 0 }},
{ 67, 0, 3, 7, { 0 }},
{ 68, 0, 3, 7, { 0 }},
{ 69, 0, 3, 8, { 0 }},
{ 70, 0, 3, 7, { 0 }},
{ 71, 0, 3, 7, { 0 }},
{ 72, 0, 3, 8, { 0 }},
{ 73, 0, 3, 4, { 0 }},
{ 74, 0, 3, 7, { 0 }},
{ 75, 0, 3, 8, { 0 }},
{ 76, 0, 3, 8, { 0 }},
{ 77, 0, 3, 12, { 0 }},
{ 78, 0, 3, 9, { 0 }},
{ 79, 0, 3, 7, { 0 }},
{ 80, 0, 3, 7, { 0 }},
{ 81, 0, 3, 8, { 0 }},
{ 82, 0, 3, 8, { 0 }},
{ 83, 0, 3, 7, { 0 }},
{ 84, 0, 3, 8, { 0 }},
{ 85, 0, 3, 9, { 0 }},
{ 86, 0, 3, 10, { 0 }},
{ 87, 0, 3, 12, { 0 }},
{ 88, 0, 3, 8, { 0 }},
{ 89, 0, 3, 8, { 0 }},
{ 90, 0, 3, 8, { 0 }},
{ 91, 0, 3, 4, { 0 }},
{ 92, 0, 2, 5, { 0 }},
{ 93, 0, 3, 4, { 0 }},
{ 94, 0, 3, 4, { 0 }},
{ 95, 0, 10, 8, { 0 }},
{ 96, 0, 2, 3, { 0 }},
{ 97, 0, 6, 7, { 0 }},
{ 98, 0, 3, 7, { 0 }},
{ 99, 0, 6, 7, { 0 }},
{ 100, 0, 3, 7, { 0 }},
{ 101, 0, 6, 7, { 0 }},
{ 102, 0, 3, 6, { 0 }},
{ 103, 0, 5, 6, { 0 }},
{ 104, 0, 3, 8, { 0 }},
{ 105, 0, 5, 4, { 0 }},
{ 106, 0, 5, 4, { 0 }},
{ 107, 0, 3, 7, { 0 }},
{ 108, 0, 3, 5, { 0 }},
{ 109, 0, 6, 12, { 0 }},
{ 110, 0, 6, 8, { 0 }},
{ 111, 0, 6, 6, { 0 }},
{ 112, 0, 6, 7, { 0 }},
{ 113, 0, 6, 7, { 0 }},
{ 114, 0, 6, 6, { 0 }},
{ 115, 0, 6, 6, { 0 }},
{ 116, 0, 3, 6, { 0 }},
{ 117, 0, 6, 8, { 0 }},
{ 118, 0, 6, 8, { 0 }},
{ 119, 0, 6, 12, { 0 }},
{ 120, 0, 6, 8, { 0 }},
{ 121, 0, 6, 8, { 0 }},
{ 122, 0, 6, 7, { 0 }},
{ 123, 0, 3, 6, { 0 }},
{ 124, 0, 3, 2, { 0 }},
{ 125, 0, 3, 6, { 0 }},
{ 126, 0, 6, 8, { 0 }},
{ 161, 0, 4, 4, { 0 }},
{ 162, 0, 4, 8, { 0 }},
{ 163, 0, 2, 8, { 0 }},
{ 8364, 0, 3, 7, { 0 }},
{ 165, 0, 3, 8, { 0 }},
{ 352, 0, 0, 7, { 0 }},
{ 167, 0, 2, 8, { 0 }},
{ 353, 0, 3, 6, { 0 }},
{ 169, 0, 1, 6, { 0 }},
{ 170, 0, 2, 5, { 0 }},
{ 171, 0, 5, 7, { 0 }},
{ 172, 0, 6, 7, { 0 }},
{ 174, 0, 1, 6, { 0 }},
{ 175, 0, 2, 7, { 0 }},
{ 176, 0, 2, 4, { 0 }},
{ 177, 0, 3, 8, { 0 }},
{ 178, 0, 2, 4, { 0 }},
{ 179, 0, 2, 4, { 0 }},
{ 381, 0, 0, 8, { 0 }},
{ 181, 0, 6, 7, { 0 }},
{ 182, 0, 3, 8, { 0 }},
{ 183, 0, 6, 3, { 0 }},
{ 382, 0, 3, 7, { 0 }},
{ 185, 0, 2, 4, { 0 }},
{ 186, 0, 2, 4, { 0 }},
{ 187, 0, 5, 7, { 0 }},
{ 338, 0, 3, 14, { 0 }},
{ 339, 0, 6, 11, { 0 }},
{ 376, 0, 1, 8, { 0 }},
{ 191, 0, 4, 6, { 0 }},
{ 192, 0, 0, 8, { 0 }},
{ 193, 0, 0, 8, { 0 }},
{ 194, 0, 0, 8, { 0 }},
{ 195, 0, 0, 8, { 0 }},
{ 196, 0, 1, 8, { 0 }},
{ 197, 0, 1, 8, { 0 }},
{ 198, 0, 3, 13, { 0 }},
{ 199, 0, 3, 7, { 0 }},
{ 200, 0, 0, 8, { 0 }},
{ 201, 0, 0, 8, { 0 }},
{ 202, 0, 0, 8, { 0 }},
{ 203, 0, 1, 8, { 0 }},
{ 204, 0, 0, 4, { 0 }},
{ 205, 0, 0, 4, { 0 }},
{ 206, 0, 0, 4, { 0 }},
{ 207, 0, 1, 4, { 0 }},
{ 208, 0, 3, 8, { 0 }},
{ 209, 0, 0, 9, { 0 }},
{ 210, 0, 0, 7, { 0 }},
{ 211, 0, 0, 7, { 0 }},
{ 212, 0, 0, 7, { 0 }},
{ 213, 0, 0, 7, { 0 }},
{ 214, 0, 1, 7, { 0 }},
{ 215, 1, 5, 7, { 0 }},
{ 216, 0, 3, 9, { 0 }},
{ 217, 0, 0, 9, { 0 }},
{ 218, 0, 0, 9, { 0 }},
{ 219, 0, 0, 9, { 0 }},
{ 220, 0, 1, 9, { 0 }},
{ 221, 0, 0, 8, { 0 }},
{ 222, 0, 2, 8, { 0 }},
{ 223, 0, 3, 9, { 0 }},
{ 224, 0, 3, 7, { 0 }},
{ 225, 0, 3, 7, { 0 }},
{ 226, 0, 3, 7, { 0 }},
{ 227, 0, 3, 7, { 0 }},
{ 228, 0, 4, 7, { 0 }},
{ 229, 0, 2, 7, { 0 }},
{ 230, 0, 6, 11, { 0 }},
{ 231, 0, 6, 7, { 0 }},
{ 232, 0, 3, 7, { 0 }},
{ 233, 0, 3, 7, { 0 }},
{ 234, 0, 3, 7, { 0 }},
{ 235, 0, 4, 7, { 0 }},
{ 236, 0, 2, 4, { 0 }},
{ 237, 0, 2, 4, { 0 }},
{ 238, 0, 2, 4, { 0 }},
{ 239, 0, 3, 4, { 0 }},
{ 240, 0, 2, 7, { 0 }},
{ 241, 0, 3, 8, { 0 }},
{ 242, 0, 3, 6, { 0 }},
{ 243, 0, 3, 6, { 0 }},
{ 244, 0, 3, 6, { 0 }},
{ 245, 0, 3, 6, { 0 }},
{ 246, 0, 4, 6, { 0 }},
{ 247, 0, 3, 8, { 0 }},
{ 248, 0, 4, 9, { 0 }},
{ 249, 0, 3, 8, { 0 }},
{ 250, 0, 3, 8, { 0 }},
{ 251, 0, 3, 8, { 0 }},
{ 252, 0, 4, 8, { 0 }},
{ 253, 0, 3, 8, { 0 }},
{ 254, 0, 4, 6, { 0 }},
{ 255, 0, 4, 8, { 0 }},
};
// Style loading function: Cherry
static void GuiLoadStyleCherry(void)
{
// Load style properties provided
// NOTE: Default properties are propagated
for (int i = 0; i < CHERRY_STYLE_PROPS_COUNT; i++)
{
GuiSetStyle(cherryStyleProps[i].controlId, cherryStyleProps[i].propertyId, cherryStyleProps[i].propertyValue);
}
// Custom font loading
// NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function
int cherryFontDataSize = 0;
unsigned char *data = DecompressData(cherryFontData, CHERRY_STYLE_FONT_ATLAS_COMP_SIZE, &cherryFontDataSize);
Image imFont = { data, 512, 256, 1, 2 };
Font font = { 0 };
font.baseSize = 15;
font.glyphCount = 189;
// Load texture from image
font.texture = LoadTextureFromImage(imFont);
UnloadImage(imFont); // Uncompressed image data can be unloaded from memory
// Copy char recs data from global fontRecs
// NOTE: Required to avoid issues if trying to free font
font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle));
memcpy(font.recs, cherryFontRecs, font.glyphCount*sizeof(Rectangle));
// Copy font char info data from global fontChars
// NOTE: Required to avoid issues if trying to free font
font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo));
memcpy(font.glyphs, cherryFontGlyphs, font.glyphCount*sizeof(GlyphInfo));
GuiSetFont(font);
// Setup a white rectangle on the font to be used on shapes drawing,
// it makes possible to draw shapes and text (full UI) in a single draw call
Rectangle fontWhiteRec = { 510, 254, 1, 1 };
SetShapesTexture(font.texture, fontWhiteRec);
//-----------------------------------------------------------------
// TODO: Custom user style setup: Set specific properties here (if required)
// i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT
}

View File

@ -0,0 +1,592 @@
//////////////////////////////////////////////////////////////////////////////////
// //
// StyleAsCode exporter v2.0 - Style data exported as a values array //
// //
// USAGE: On init call: GuiLoadStyleCyber(); //
// //
// more info and bugs-report: github.com/raysan5/raygui //
// feedback and support: ray[at]raylibtech.com //
// //
// Copyright (c) 2020-2025 raylib technologies (@raylibtech) //
// //
//////////////////////////////////////////////////////////////////////////////////
#define CYBER_STYLE_PROPS_COUNT 17
// Custom style name: Cyber
static const GuiStyleProp cyberStyleProps[CYBER_STYLE_PROPS_COUNT] = {
{ 0, 0, (int)0x2f7486ff }, // DEFAULT_BORDER_COLOR_NORMAL
{ 0, 1, (int)0x024658ff }, // DEFAULT_BASE_COLOR_NORMAL
{ 0, 2, (int)0x51bfd3ff }, // DEFAULT_TEXT_COLOR_NORMAL
{ 0, 3, (int)0x82cde0ff }, // DEFAULT_BORDER_COLOR_FOCUSED
{ 0, 4, (int)0x3299b4ff }, // DEFAULT_BASE_COLOR_FOCUSED
{ 0, 5, (int)0xb6e1eaff }, // DEFAULT_TEXT_COLOR_FOCUSED
{ 0, 6, (int)0xeb7630ff }, // DEFAULT_BORDER_COLOR_PRESSED
{ 0, 7, (int)0xffbc51ff }, // DEFAULT_BASE_COLOR_PRESSED
{ 0, 8, (int)0xd86f36ff }, // DEFAULT_TEXT_COLOR_PRESSED
{ 0, 9, (int)0x134b5aff }, // DEFAULT_BORDER_COLOR_DISABLED
{ 0, 10, (int)0x02313dff }, // DEFAULT_BASE_COLOR_DISABLED
{ 0, 11, (int)0x17505fff }, // DEFAULT_TEXT_COLOR_DISABLED
{ 0, 16, (int)0x0000000e }, // DEFAULT_TEXT_SIZE
{ 0, 17, (int)0x00000000 }, // DEFAULT_TEXT_SPACING
{ 0, 18, (int)0x81c0d0ff }, // DEFAULT_LINE_COLOR
{ 0, 19, (int)0x00222bff }, // DEFAULT_BACKGROUND_COLOR
{ 0, 20, (int)0x00000007 }, // DEFAULT_TEXT_LINE_SPACING
};
// WARNING: This style uses a custom font: "Kyrou7Wide.ttf" (size: 14, spacing: 0)
#define CYBER_STYLE_FONT_ATLAS_COMP_SIZE 2306
// Font atlas image pixels data: DEFLATE compressed
static unsigned char cyberFontData[CYBER_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed,
0xdd, 0xdd, 0x72, 0xe3, 0x36, 0x12, 0x06, 0x50, 0x96, 0x6b, 0xdf, 0xff, 0x85, 0x1d, 0xec, 0xb7, 0xb5, 0x93, 0x4c, 0xe2,
0xa9, 0x8c, 0x88, 0x7f, 0x8a, 0x92, 0xcf, 0x9c, 0xaa, 0xb9, 0x30, 0x2d, 0x89, 0x04, 0xd1, 0x40, 0x93, 0x34, 0x5a, 0x39,
0x00, 0x00, 0x00, 0x00, 0x16, 0xcb, 0xc5, 0x9f, 0x96, 0xe6, 0x9f, 0xae, 0x3b, 0xa2, 0x9f, 0xff, 0x9e, 0x7b, 0xec, 0xfa,
0x57, 0x7f, 0xbb, 0xe7, 0xe1, 0xb9, 0xd3, 0x9e, 0x5f, 0x7f, 0x92, 0xd3, 0xdf, 0xcd, 0x50, 0xeb, 0xa6, 0x7a, 0xc6, 0xce,
0xcf, 0x4c, 0x5f, 0xbc, 0x3d, 0xde, 0x87, 0x74, 0xbf, 0x62, 0xe7, 0xc8, 0xf8, 0xf3, 0x5f, 0xe9, 0xea, 0xef, 0xe7, 0xbd,
0xb8, 0xad, 0x97, 0xa7, 0xb2, 0x47, 0x69, 0xf8, 0x8d, 0xda, 0xeb, 0x8f, 0x89, 0xbd, 0x2f, 0x97, 0xce, 0x45, 0xa9, 0x8e,
0x19, 0xc7, 0x86, 0xa3, 0xc9, 0xe4, 0xb9, 0xcc, 0xf4, 0x88, 0xd6, 0x1e, 0xff, 0xb5, 0x7e, 0x91, 0x7f, 0xfd, 0x7f, 0x0c,
0x45, 0x5a, 0x36, 0xc6, 0xff, 0xd1, 0x35, 0xbe, 0xec, 0xcf, 0x8b, 0xd2, 0x10, 0xe9, 0xfd, 0xaf, 0x69, 0x3d, 0xda, 0xb1,
0x11, 0x2f, 0xcd, 0xbf, 0x9b, 0xa1, 0x23, 0x5e, 0x75, 0x46, 0x7a, 0x47, 0xce, 0x5a, 0x6b, 0xec, 0x38, 0x9a, 0xaf, 0x3f,
0xfb, 0x9c, 0x7c, 0x7d, 0xd9, 0x3e, 0x46, 0x96, 0x86, 0x96, 0x2a, 0xc3, 0x9f, 0x98, 0x81, 0x6c, 0x6e, 0xd5, 0xd9, 0xdf,
0x9d, 0x17, 0x66, 0x38, 0x96, 0x32, 0x75, 0xf6, 0xce, 0x3f, 0x77, 0x74, 0xfe, 0xde, 0x3b, 0xe2, 0xf5, 0xe7, 0xfa, 0x59,
0x34, 0x9a, 0x8f, 0x8d, 0x66, 0x3f, 0x5b, 0x2a, 0x1b, 0xe2, 0x77, 0xdd, 0x58, 0xbc, 0x32, 0x47, 0x9a, 0xc9, 0x3b, 0xcf,
0xb6, 0x7d, 0xfe, 0xd0, 0xbe, 0x57, 0xaf, 0x32, 0xff, 0x67, 0xe2, 0xfc, 0x65, 0xa8, 0x9d, 0x6b, 0x39, 0x65, 0xeb, 0x11,
0x9f, 0x7f, 0x7a, 0x19, 0x38, 0xe6, 0x8f, 0x94, 0xbf, 0x1d, 0x4b, 0x72, 0xda, 0x2c, 0x3c, 0x97, 0xe9, 0xbe, 0x56, 0xfa,
0x33, 0x6e, 0xc7, 0x73, 0xe6, 0xe4, 0xbf, 0x3f, 0x94, 0xcd, 0xb9, 0xd8, 0x15, 0xf1, 0xff, 0xcf, 0x28, 0x96, 0x89, 0x88,
0xcd, 0xe4, 0x0c, 0xb3, 0xf6, 0xfa, 0x7f, 0x5e, 0x99, 0x3a, 0x7f, 0x59, 0x7e, 0x55, 0xfb, 0x4f, 0xf4, 0x66, 0x28, 0x7f,
0xc8, 0xb2, 0x51, 0xb6, 0x6c, 0xbc, 0x97, 0x9c, 0x4d, 0x59, 0xda, 0xa3, 0xf9, 0xff, 0xba, 0x6c, 0x67, 0xcf, 0xd5, 0x52,
0xcf, 0xbd, 0xd3, 0xd1, 0xeb, 0xff, 0x34, 0x8e, 0x2e, 0xfb, 0xe2, 0xff, 0x7a, 0x7f, 0x4c, 0x9e, 0xbf, 0x5c, 0x7c, 0x7d,
0xbe, 0xe6, 0x0a, 0x7d, 0x3c, 0xe3, 0xd9, 0x7b, 0xfd, 0x7f, 0xd5, 0x88, 0xb1, 0x23, 0xff, 0xcf, 0x8b, 0xe7, 0xff, 0x3d,
0xf7, 0xff, 0xf3, 0x26, 0xf1, 0x9f, 0xe9, 0x27, 0x52, 0x59, 0x7e, 0x7f, 0xbe, 0x2d, 0xdb, 0x9d, 0x7b, 0xbe, 0x90, 0xa9,
0x23, 0x5e, 0x75, 0x2f, 0x26, 0x8b, 0x7e, 0x37, 0x8d, 0xb3, 0xe2, 0xd8, 0xfd, 0xdd, 0xe7, 0xde, 0xff, 0xf7, 0xfc, 0x1f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x9e, 0xd5, 0x9d, 0xb9, 0xe0, 0x75,
0x23, 0xab, 0x68, 0x67, 0x56, 0xdd, 0xce, 0xac, 0xd9, 0x1d, 0x7d, 0x65, 0xbd, 0x0e, 0xd1, 0xf8, 0x3a, 0xe3, 0xf6, 0x55,
0xce, 0x7d, 0xeb, 0x86, 0xe7, 0xaa, 0xa3, 0xa4, 0xba, 0x8e, 0xbe, 0xad, 0x1e, 0x41, 0xbd, 0x76, 0x6b, 0xad, 0x92, 0xd5,
0xfe, 0xda, 0xaf, 0x3b, 0x6b, 0x53, 0x66, 0xb8, 0x05, 0x7b, 0x56, 0xbf, 0xa7, 0xab, 0x3e, 0xc1, 0xe8, 0x3a, 0xf4, 0xeb,
0xaa, 0x02, 0xce, 0xaf, 0x90, 0x3f, 0x7f, 0xe7, 0xb2, 0xfd, 0x28, 0xda, 0xf7, 0x38, 0x0b, 0xce, 0xd9, 0x8e, 0xf8, 0xcf,
0x69, 0x45, 0x80, 0x5c, 0x58, 0xdb, 0x75, 0x5f, 0x25, 0xdc, 0x7d, 0x95, 0x76, 0xea, 0xf1, 0xdf, 0x5e, 0xb3, 0x39, 0x8b,
0xa3, 0x35, 0xc3, 0xd1, 0xb3, 0x6a, 0x04, 0x18, 0x19, 0xb7, 0x56, 0xc4, 0xff, 0x68, 0xee, 0xf0, 0xda, 0xf1, 0x3f, 0x5a,
0x4f, 0x2c, 0x27, 0xe7, 0x3d, 0x8d, 0x7d, 0xfb, 0x0e, 0xdb, 0x8f, 0x9b, 0xc6, 0x7f, 0x3d, 0xa6, 0x32, 0x5d, 0xa5, 0x78,
0x5d, 0x7f, 0x5a, 0xa7, 0x34, 0x45, 0xe9, 0x58, 0x4d, 0xcf, 0x32, 0x3c, 0xb2, 0xec, 0xca, 0xff, 0x53, 0xb9, 0xf2, 0x48,
0x53, 0x2e, 0xbb, 0x76, 0x8c, 0x6d, 0x1d, 0xb5, 0x1e, 0x57, 0x14, 0xab, 0xd5, 0x2b, 0x7c, 0xfe, 0xfc, 0x3e, 0x57, 0x4f,
0xf9, 0x9a, 0xf8, 0x9f, 0x8f, 0xc4, 0x3c, 0x65, 0xce, 0x5a, 0x73, 0x6f, 0x22, 0x83, 0xf3, 0xd6, 0x9e, 0xd7, 0x5e, 0x31,
0xff, 0xe7, 0xa5, 0xe6, 0xff, 0x96, 0xeb, 0xff, 0x2c, 0xb8, 0x7a, 0x1d, 0x6b, 0xb5, 0xd2, 0x7c, 0x2e, 0x77, 0xe4, 0xff,
0x2d, 0x33, 0xfb, 0xfc, 0xfc, 0x3f, 0xb3, 0x35, 0xcd, 0xb3, 0xf0, 0xf5, 0xf1, 0xdf, 0x76, 0x4c, 0xb9, 0xf4, 0xb5, 0xaf,
0x17, 0xff, 0xb9, 0xc5, 0xfd, 0xbf, 0x6c, 0xac, 0xcd, 0x9c, 0x25, 0xa3, 0xdb, 0x9e, 0xf8, 0x6f, 0xab, 0x87, 0x3e, 0x73,
0xfd, 0x3f, 0x17, 0xe1, 0xf5, 0x08, 0xf8, 0x43, 0xfc, 0x2f, 0xca, 0xff, 0x57, 0xbd, 0xba, 0xff, 0x5e, 0xc9, 0xcc, 0x0c,
0xda, 0x7e, 0x4c, 0x59, 0x9e, 0x7f, 0xcf, 0xd6, 0xf6, 0xdd, 0x9d, 0xff, 0xaf, 0x7a, 0xfd, 0x31, 0x7c, 0xde, 0xeb, 0x5b,
0xe6, 0x7a, 0xe5, 0xf1, 0x84, 0x6f, 0x73, 0xd8, 0xfd, 0x7c, 0xcf, 0x77, 0x94, 0xbe, 0xdf, 0x53, 0x6c, 0x6d, 0x70, 0xef,
0xe7, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x5e, 0x65, 0x75, 0xbf,
0x15, 0x53, 0x69, 0x58, 0x1f, 0xda, 0x52, 0x3f, 0xf3, 0xbc, 0xfa, 0xe6, 0xa3, 0x1a, 0x12, 0xa5, 0xa9, 0xf6, 0xe6, 0xaa,
0xd6, 0x6c, 0xad, 0x83, 0x30, 0x5b, 0xa7, 0x73, 0xe4, 0xdd, 0x5b, 0x5a, 0xb9, 0xbe, 0xe6, 0x31, 0x95, 0x75, 0xc0, 0xc7,
0xc2, 0x1e, 0x58, 0x5f, 0xf3, 0x9c, 0x89, 0x9a, 0x0b, 0x33, 0x55, 0x04, 0xb3, 0x71, 0x85, 0x69, 0x86, 0x5a, 0xa5, 0xbd,
0x02, 0x47, 0xeb, 0xd6, 0x2c, 0xaa, 0xf2, 0xb0, 0xbb, 0x5f, 0xaf, 0xd8, 0xda, 0x5f, 0x47, 0xe1, 0x19, 0xf1, 0x7f, 0xde,
0x43, 0xb2, 0xf8, 0x6c, 0xf7, 0xfd, 0xb4, 0x16, 0xfb, 0x8f, 0x6b, 0x2b, 0x7f, 0x34, 0xf6, 0x9b, 0x9e, 0xed, 0x99, 0x3e,
0xcb, 0x99, 0xac, 0x84, 0x50, 0x3a, 0xe7, 0x9b, 0xf6, 0xe8, 0x9f, 0xeb, 0x79, 0xfb, 0x56, 0xc0, 0xbf, 0x53, 0xfc, 0x1f,
0x83, 0x15, 0x0b, 0x77, 0xc7, 0xff, 0xd1, 0xb4, 0x4f, 0x59, 0x76, 0x44, 0xeb, 0xaa, 0x6f, 0x7f, 0x74, 0xe7, 0x58, 0x6b,
0x6a, 0x59, 0xe5, 0xc2, 0x5a, 0x0f, 0xe9, 0xe8, 0x5d, 0xa3, 0x23, 0x40, 0x06, 0xe7, 0xff, 0xfe, 0x96, 0x5e, 0x95, 0x63,
0xbc, 0x66, 0xfc, 0x8f, 0xb5, 0x66, 0x26, 0xce, 0xf0, 0xde, 0xf9, 0x7f, 0x65, 0xe5, 0xee, 0x91, 0xe8, 0x28, 0x0f, 0xde,
0xa5, 0x0c, 0xcf, 0xce, 0xe3, 0x57, 0x07, 0x47, 0xd3, 0x77, 0x32, 0x94, 0xee, 0xd7, 0xe5, 0x97, 0xf8, 0xcc, 0x96, 0x6b,
0xf4, 0x9c, 0xb4, 0xf0, 0x68, 0x35, 0xd2, 0xde, 0xf8, 0xcf, 0xa5, 0xf3, 0xff, 0xd1, 0xf8, 0xed, 0x19, 0xc7, 0xd0, 0xf9,
0x3a, 0x06, 0xdf, 0x75, 0xfc, 0x95, 0xa9, 0xf6, 0xd8, 0x3d, 0xf5, 0x68, 0x57, 0x7e, 0x43, 0x47, 0x16, 0xf4, 0xdb, 0x54,
0x3e, 0x21, 0x83, 0x39, 0x78, 0x6f, 0xe6, 0xdf, 0x33, 0xce, 0xa6, 0xe3, 0xce, 0x40, 0x4e, 0xc6, 0xc0, 0x6c, 0xca, 0xc1,
0x57, 0xce, 0x83, 0x59, 0x9a, 0xaf, 0xed, 0xbb, 0xbb, 0xb8, 0x33, 0xa3, 0xbb, 0xe6, 0xdd, 0x9e, 0xd5, 0x26, 0x57, 0xce,
0xff, 0xe9, 0xce, 0x76, 0x67, 0xe6, 0xff, 0x4c, 0xd7, 0xc9, 0xac, 0xe5, 0x7e, 0xc7, 0xed, 0xe6, 0xff, 0xb6, 0xd8, 0xcc,
0xe5, 0xf9, 0xbf, 0xf8, 0xbf, 0xfa, 0x49, 0xcb, 0xf1, 0x12, 0xf1, 0xbf, 0xf7, 0xfa, 0x7f, 0xcd, 0x08, 0x32, 0x3a, 0xcb,
0x1e, 0x9b, 0x9f, 0x11, 0x8c, 0xbf, 0x6a, 0x5f, 0xfc, 0x1f, 0xdf, 0xaa, 0x5a, 0xe3, 0xbb, 0xd5, 0xa6, 0x7c, 0x46, 0xfc,
0xb7, 0xe4, 0xff, 0x19, 0xbc, 0xff, 0xdf, 0xfe, 0x0d, 0x5b, 0xe9, 0xca, 0x59, 0xda, 0xf3, 0x8e, 0xf7, 0xec, 0x11, 0xbc,
0xf3, 0x88, 0x36, 0xf7, 0xfc, 0xff, 0x6e, 0x63, 0xf0, 0xdc, 0x77, 0xaa, 0x7c, 0xe7, 0xfe, 0xaf, 0xee, 0x32, 0xfe, 0x5a,
0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xd9, 0xeb, 0x16, 0x72, 0xe9, 0x7a, 0xf9,
0xd1, 0xba, 0x75, 0xfd, 0x2b, 0x56, 0xb3, 0xa8, 0x65, 0xb2, 0xe8, 0x6c, 0x95, 0x86, 0xd5, 0xf9, 0x99, 0x6c, 0xf7, 0x4c,
0xff, 0x4e, 0x1a, 0x56, 0x84, 0x65, 0xe8, 0x0c, 0xdf, 0x6f, 0xdd, 0xea, 0xcc, 0xaa, 0xc1, 0x2c, 0x6d, 0xdd, 0x95, 0xe7,
0x3b, 0xd5, 0x6a, 0xd8, 0x5f, 0x95, 0xc1, 0xea, 0x2b, 0x19, 0x5a, 0x31, 0x99, 0xe1, 0xda, 0x04, 0xbd, 0xe3, 0x5d, 0x3a,
0xdb, 0xac, 0xf7, 0x5c, 0x7f, 0x6d, 0xe3, 0xd6, 0x2a, 0x33, 0x5f, 0xb7, 0x97, 0xc1, 0x33, 0xfe, 0x91, 0xcf, 0xa9, 0x7e,
0x9f, 0xe1, 0x11, 0xfa, 0x58, 0x52, 0xd7, 0xbb, 0xa5, 0x1a, 0x47, 0x69, 0x58, 0x43, 0x9f, 0xe9, 0xda, 0x60, 0x19, 0x6e,
0x87, 0x95, 0x3d, 0x6f, 0xee, 0xd3, 0x6a, 0x6b, 0xb5, 0x33, 0x31, 0x83, 0x66, 0xb0, 0xfe, 0x5d, 0x26, 0x2b, 0x43, 0xe4,
0x64, 0x8d, 0x77, 0xb6, 0xad, 0x6f, 0x4f, 0x67, 0xf4, 0xb7, 0x1f, 0x6f, 0x9a, 0xdb, 0xb4, 0xad, 0x5e, 0xf5, 0xc7, 0xed,
0xb3, 0xd2, 0x32, 0x34, 0xdb, 0x8c, 0xb5, 0xe9, 0xd5, 0xf9, 0xc6, 0xdd, 0x6b, 0x7b, 0xd4, 0xab, 0x8f, 0xed, 0xbf, 0x36,
0x18, 0xa9, 0xc5, 0xb2, 0x2e, 0xfe, 0xd3, 0x5d, 0x51, 0xaa, 0x4c, 0x5d, 0x75, 0xf4, 0xc5, 0x7f, 0xdb, 0xfb, 0x66, 0x68,
0xfe, 0xaf, 0xc5, 0xdf, 0xde, 0xed, 0xb3, 0xd5, 0xf6, 0x47, 0xe3, 0xbf, 0xbf, 0x0f, 0x64, 0x43, 0x8d, 0xd4, 0x5a, 0x56,
0x32, 0xb2, 0x65, 0xfe, 0x1a, 0x7b, 0x5f, 0xfc, 0x9f, 0xb5, 0xde, 0x6c, 0xbe, 0xb1, 0x6a, 0xfe, 0xcf, 0x74, 0xfe, 0xdf,
0xda, 0x57, 0xd3, 0xfc, 0xfd, 0x42, 0x2d, 0x39, 0x55, 0x1e, 0xc6, 0x7e, 0xc9, 0x67, 0xf5, 0x9b, 0x32, 0x8e, 0xc1, 0x6f,
0xc3, 0xd8, 0xbd, 0xbd, 0x67, 0xdc, 0x5e, 0x53, 0xb9, 0xf3, 0xfa, 0xad, 0x2b, 0xc6, 0xbe, 0x7b, 0xc4, 0x7f, 0x36, 0x65,
0x3a, 0x99, 0x6a, 0xd7, 0x74, 0xed, 0xfb, 0x35, 0x77, 0x97, 0x72, 0x59, 0x55, 0xd1, 0xff, 0xc7, 0xfe, 0xc7, 0x70, 0x4e,
0xbc, 0x7f, 0x7b, 0xeb, 0x38, 0x58, 0x2e, 0x98, 0xff, 0x77, 0xde, 0x01, 0x1d, 0xaf, 0x0a, 0x7f, 0x4d, 0xfc, 0x3f, 0xeb,
0xda, 0xe8, 0xd8, 0x32, 0x36, 0xf6, 0xc6, 0x7f, 0x2e, 0x3e, 0x8e, 0xeb, 0xe2, 0xbf, 0x9c, 0x5e, 0x03, 0xa4, 0x23, 0xaf,
0xdd, 0xb3, 0x7d, 0xe5, 0xf8, 0x32, 0xfb, 0xbd, 0x3f, 0xcf, 0xc9, 0xff, 0x9f, 0x1f, 0xff, 0x77, 0xbe, 0x43, 0x91, 0x37,
0xba, 0x43, 0x93, 0x5f, 0xee, 0xb2, 0x5c, 0xf3, 0x3c, 0xf6, 0x3f, 0x29, 0x3f, 0x7c, 0x3e, 0xf8, 0x1e, 0xad, 0x7b, 0xe7,
0xff, 0xbd, 0xf1, 0x3f, 0x73, 0xff, 0xff, 0xfb, 0xe6, 0xff, 0x77, 0xfe, 0x9b, 0x05, 0x7f, 0xb7, 0xb1, 0xb3, 0x9d, 0xee,
0x1f, 0xdf, 0xeb, 0x47, 0xe6, 0xf2, 0xe0, 0x7a, 0xe8, 0xfb, 0xe6, 0xff, 0xf7, 0xff, 0x8b, 0x25, 0xd5, 0x56, 0xaf, 0xb8,
0x26, 0xb9, 0xe3, 0xfd, 0xbd, 0xd5, 0xfd, 0xbd, 0x9c, 0xdc, 0x0b, 0xdd, 0x95, 0xff, 0x1f, 0x37, 0xbf, 0xff, 0x0f, 0xaf,
0x39, 0x3e, 0x01, 0xe2, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7d, 0xff, 0x9a, 0x32, 0xc3,
0xeb, 0x26, 0xf2, 0xa3, 0x96, 0xcc, 0xc7, 0xc4, 0x6a, 0xa4, 0x7d, 0x55, 0x64, 0xcf, 0x6b, 0x60, 0x7d, 0x4e, 0xfc, 0xfd,
0xe8, 0xde, 0xe3, 0xca, 0xa2, 0xf5, 0xa3, 0xcf, 0x38, 0xb2, 0x0c, 0x9e, 0xab, 0xb9, 0xcf, 0xfc, 0x77, 0x55, 0xa4, 0x63,
0xf9, 0x5a, 0xdf, 0xe3, 0xaf, 0xba, 0x49, 0xab, 0xcf, 0x48, 0xcf, 0xca, 0xc3, 0x7b, 0x55, 0x28, 0x2c, 0x3f, 0xda, 0x23,
0xa7, 0x75, 0x24, 0xef, 0x5c, 0x45, 0xb6, 0x0c, 0x55, 0x97, 0xd9, 0x7f, 0x5c, 0x73, 0xf1, 0x90, 0x4a, 0x5d, 0xcf, 0xe7,
0x54, 0xbb, 0xad, 0x9d, 0xab, 0xf3, 0x5a, 0xd8, 0xa5, 0x71, 0xbd, 0xfc, 0x79, 0x55, 0xe4, 0x4c, 0x8e, 0x7e, 0xf5, 0xe8,
0xcf, 0xd0, 0xd1, 0xfd, 0xee, 0x8c, 0xa5, 0xf9, 0x13, 0xb2, 0xa8, 0x3a, 0xd7, 0x79, 0x6b, 0x94, 0x17, 0x5e, 0x29, 0x5c,
0xba, 0xe2, 0x3f, 0x5f, 0x32, 0x84, 0xbc, 0xe0, 0xea, 0x96, 0xd6, 0xf1, 0xf8, 0xb5, 0x56, 0xce, 0xa4, 0x79, 0x45, 0xf8,
0x4c, 0xc5, 0x1d, 0xeb, 0xa9, 0xda, 0x7b, 0x62, 0xbd, 0x9f, 0xde, 0xbb, 0x8a, 0xec, 0x67, 0xe5, 0xb8, 0xf2, 0xb2, 0xd5,
0x6f, 0xda, 0x5a, 0x25, 0x03, 0xd9, 0xc1, 0xb3, 0xb6, 0x9e, 0x67, 0x71, 0xbf, 0x9b, 0xff, 0xc7, 0x32, 0x9b, 0x67, 0x1d,
0x7b, 0xeb, 0xbe, 0x66, 0xcb, 0x95, 0x60, 0x4b, 0x4f, 0xc8, 0x69, 0xb6, 0xf5, 0x8a, 0x71, 0xd2, 0x92, 0x89, 0xde, 0x73,
0xbf, 0xd3, 0xd8, 0x1b, 0x72, 0x92, 0x87, 0xdf, 0xb5, 0xee, 0xed, 0xcc, 0xa8, 0x94, 0x86, 0x2b, 0xfc, 0x96, 0xec, 0xa0,
0x5c, 0xba, 0xf5, 0xae, 0xf1, 0xdf, 0x32, 0xff, 0xe7, 0x4d, 0xe3, 0xbf, 0xdc, 0x7c, 0xbf, 0xc7, 0xbf, 0xff, 0xac, 0x75,
0xfe, 0xbf, 0xd7, 0xd6, 0x95, 0x19, 0xfc, 0xe3, 0xfb, 0x6d, 0xfb, 0x2a, 0x7d, 0xf6, 0xdf, 0x77, 0x7c, 0x8d, 0xf8, 0xbf,
0xf3, 0x3c, 0x39, 0x1e, 0xff, 0x9f, 0x2f, 0xb0, 0xdf, 0x19, 0xba, 0xa3, 0x53, 0x8b, 0xff, 0x72, 0xcb, 0xad, 0x2b, 0x2b,
0x5b, 0x8d, 0x3e, 0xab, 0xda, 0x59, 0xe9, 0xf3, 0xbe, 0xf1, 0xdf, 0x92, 0x2f, 0xbd, 0xea, 0x75, 0xf2, 0x31, 0x1d, 0x41,
0x77, 0x8d, 0xff, 0xfa, 0x93, 0x87, 0xf1, 0x27, 0x64, 0xcf, 0xd8, 0x5a, 0x2e, 0xba, 0x83, 0xf7, 0xbc, 0x63, 0x7f, 0x5e,
0xfc, 0xcf, 0x54, 0x28, 0x3c, 0xbf, 0xef, 0x72, 0x87, 0xeb, 0xe4, 0x1d, 0xf5, 0x10, 0xef, 0xb1, 0xdf, 0xd9, 0x34, 0x17,
0xdd, 0xfb, 0x49, 0x8e, 0x3b, 0xf8, 0xf7, 0x7c, 0x6a, 0x30, 0xd6, 0x8f, 0x77, 0x6f, 0x7f, 0x56, 0x6f, 0xbc, 0x62, 0xbf,
0x45, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x77, 0x5a, 0xc9, 0x93, 0xca, 0x2a,
0xe0, 0xa3, 0xab, 0x76, 0xd1, 0xaf, 0x46, 0x6b, 0xa6, 0x66, 0x41, 0x95, 0xcc, 0x47, 0x6b, 0x6f, 0xca, 0xe5, 0x47, 0x73,
0x4c, 0xbe, 0x33, 0x5c, 0xb5, 0x9a, 0xef, 0x77, 0xeb, 0xc5, 0x47, 0xfb, 0xfc, 0x68, 0xcd, 0xd4, 0xb9, 0x7a, 0xb1, 0xb5,
0x95, 0xd2, 0x9f, 0x83, 0xe3, 0xd9, 0xae, 0x0a, 0xb0, 0x67, 0xef, 0x5c, 0xaf, 0xe7, 0x6b, 0x3d, 0x20, 0xf3, 0xd1, 0xff,
0x1d, 0x7a, 0x50, 0xb6, 0xe5, 0x15, 0x3b, 0xf7, 0xf9, 0x43, 0x0f, 0xe5, 0x49, 0x39, 0x40, 0xdb, 0x5a, 0xf6, 0x72, 0xab,
0xad, 0x8f, 0xf7, 0x39, 0x8d, 0x95, 0xfd, 0xee, 0xb5, 0x75, 0xa6, 0x9e, 0x2f, 0xb4, 0x5c, 0x11, 0xd7, 0xab, 0xa2, 0xbe,
0xce, 0xd6, 0x96, 0xa3, 0x3d, 0xde, 0xe4, 0x58, 0xc5, 0x3f, 0xab, 0xe6, 0xfc, 0x77, 0xea, 0xf5, 0x99, 0x6a, 0x0b, 0xf1,
0x8f, 0xf8, 0xff, 0x6e, 0xbd, 0x5e, 0xfc, 0xf3, 0x7d, 0xf3, 0xff, 0x32, 0x55, 0x2f, 0xfe, 0xb8, 0xd5, 0xd6, 0xf9, 0x6b,
0xa1, 0xfb, 0x6c, 0xbd, 0x6b, 0x15, 0x44, 0xe0, 0x8a, 0x3b, 0xb0, 0x73, 0x4f, 0x70, 0x81, 0xd7, 0xc8, 0xc1, 0x46, 0xe2,
0xda, 0xec, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x8b, 0x3f, 0xff, 0x69, 0x07, 0x10, 0xff, 0xc0,
0xb7, 0x8b, 0xff, 0xff, 0x01 };
// Font glyphs rectangles data (on atlas)
static const Rectangle cyberFontRecs[189] = {
{ 4, 4, 4 , 14 },
{ 16, 4, 1 , 8 },
{ 25, 4, 4 , 3 },
{ 37, 4, 8 , 8 },
{ 53, 4, 8 , 9 },
{ 69, 4, 8 , 8 },
{ 85, 4, 8 , 8 },
{ 101, 4, 1 , 3 },
{ 110, 4, 4 , 9 },
{ 122, 4, 4 , 9 },
{ 134, 4, 5 , 6 },
{ 147, 4, 5 , 6 },
{ 160, 4, 2 , 2 },
{ 170, 4, 4 , 1 },
{ 182, 4, 1 , 1 },
{ 191, 4, 8 , 8 },
{ 207, 4, 8 , 8 },
{ 223, 4, 2 , 8 },
{ 233, 4, 8 , 8 },
{ 249, 4, 8 , 8 },
{ 265, 4, 8 , 8 },
{ 281, 4, 8 , 8 },
{ 297, 4, 8 , 8 },
{ 313, 4, 7 , 8 },
{ 328, 4, 8 , 8 },
{ 344, 4, 8 , 8 },
{ 360, 4, 1 , 4 },
{ 369, 4, 2 , 5 },
{ 379, 4, 4 , 8 },
{ 391, 4, 5 , 3 },
{ 404, 4, 4 , 8 },
{ 416, 4, 7 , 8 },
{ 431, 4, 8 , 8 },
{ 447, 4, 8 , 8 },
{ 463, 4, 8 , 8 },
{ 479, 4, 8 , 8 },
{ 495, 4, 8 , 8 },
{ 4, 26, 7 , 8 },
{ 19, 26, 7 , 8 },
{ 34, 26, 8 , 8 },
{ 50, 26, 8 , 8 },
{ 66, 26, 5 , 8 },
{ 79, 26, 7 , 8 },
{ 94, 26, 8 , 8 },
{ 110, 26, 7 , 8 },
{ 125, 26, 8 , 8 },
{ 141, 26, 8 , 8 },
{ 157, 26, 8 , 8 },
{ 173, 26, 8 , 8 },
{ 189, 26, 8 , 9 },
{ 205, 26, 8 , 8 },
{ 221, 26, 8 , 8 },
{ 237, 26, 8 , 8 },
{ 253, 26, 8 , 8 },
{ 269, 26, 8 , 8 },
{ 285, 26, 9 , 8 },
{ 302, 26, 8 , 8 },
{ 318, 26, 8 , 8 },
{ 334, 26, 8 , 8 },
{ 350, 26, 4 , 9 },
{ 362, 26, 8 , 8 },
{ 378, 26, 4 , 9 },
{ 390, 26, 4 , 3 },
{ 402, 26, 7 , 1 },
{ 417, 26, 2 , 3 },
{ 427, 26, 7 , 5 },
{ 442, 26, 7 , 8 },
{ 457, 26, 7 , 5 },
{ 472, 26, 7 , 8 },
{ 487, 26, 7 , 5 },
{ 4, 48, 4 , 8 },
{ 16, 48, 7 , 7 },
{ 31, 48, 7 , 8 },
{ 46, 48, 1 , 8 },
{ 55, 48, 3 , 10 },
{ 66, 48, 7 , 8 },
{ 81, 48, 4 , 8 },
{ 93, 48, 9 , 5 },
{ 110, 48, 7 , 5 },
{ 125, 48, 7 , 5 },
{ 140, 48, 7 , 7 },
{ 155, 48, 7 , 7 },
{ 170, 48, 5 , 5 },
{ 183, 48, 7 , 5 },
{ 198, 48, 5 , 8 },
{ 211, 48, 7 , 5 },
{ 226, 48, 7 , 5 },
{ 241, 48, 9 , 5 },
{ 258, 48, 7 , 5 },
{ 273, 48, 7 , 7 },
{ 288, 48, 7 , 5 },
{ 303, 48, 4 , 9 },
{ 315, 48, 1 , 9 },
{ 324, 48, 4 , 9 },
{ 336, 48, 8 , 2 },
{ 352, 48, 1 , 8 },
{ 361, 48, 7 , 8 },
{ 376, 48, 7 , 8 },
{ 391, 48, 8 , 9 },
{ 407, 48, 8 , 9 },
{ 423, 48, 8 , 10 },
{ 439, 48, 4 , 9 },
{ 451, 48, 7 , 8 },
{ 466, 48, 8 , 8 },
{ 482, 48, 7 , 6 },
{ 497, 48, 5 , 3 },
{ 4, 70, 5 , 3 },
{ 17, 70, 8 , 8 },
{ 33, 70, 0 , 0 },
{ 41, 70, 4 , 3 },
{ 53, 70, 8 , 6 },
{ 69, 70, 4 , 5 },
{ 81, 70, 4 , 5 },
{ 93, 70, 8 , 10 },
{ 109, 70, 7 , 7 },
{ 124, 70, 5 , 7 },
{ 137, 70, 1 , 1 },
{ 146, 70, 7 , 8 },
{ 161, 70, 2 , 5 },
{ 171, 70, 4 , 5 },
{ 183, 70, 5 , 3 },
{ 196, 70, 14 , 8 },
{ 218, 70, 13 , 5 },
{ 239, 70, 8 , 9 },
{ 255, 70, 7 , 8 },
{ 270, 70, 8 , 10 },
{ 286, 70, 8 , 10 },
{ 302, 70, 8 , 10 },
{ 318, 70, 8 , 10 },
{ 334, 70, 8 , 9 },
{ 350, 70, 8 , 12 },
{ 366, 70, 14 , 8 },
{ 388, 70, 8 , 10 },
{ 404, 70, 7 , 10 },
{ 419, 70, 7 , 10 },
{ 434, 70, 7 , 10 },
{ 449, 70, 7 , 9 },
{ 464, 70, 5 , 10 },
{ 477, 70, 5 , 10 },
{ 490, 70, 5 , 10 },
{ 4, 92, 5 , 9 },
{ 17, 92, 8 , 8 },
{ 33, 92, 8 , 10 },
{ 49, 92, 8 , 10 },
{ 65, 92, 8 , 10 },
{ 81, 92, 8 , 10 },
{ 97, 92, 8 , 10 },
{ 113, 92, 8 , 9 },
{ 129, 92, 4 , 4 },
{ 141, 92, 8 , 8 },
{ 157, 92, 8 , 10 },
{ 173, 92, 8 , 10 },
{ 189, 92, 8 , 10 },
{ 205, 92, 8 , 9 },
{ 221, 92, 8 , 10 },
{ 237, 92, 7 , 9 },
{ 252, 92, 7 , 9 },
{ 267, 92, 7 , 8 },
{ 282, 92, 7 , 8 },
{ 297, 92, 7 , 8 },
{ 312, 92, 7 , 8 },
{ 327, 92, 7 , 8 },
{ 342, 92, 7 , 9 },
{ 357, 92, 13 , 5 },
{ 378, 92, 7 , 7 },
{ 393, 92, 7 , 8 },
{ 408, 92, 7 , 8 },
{ 423, 92, 7 , 8 },
{ 438, 92, 7 , 8 },
{ 453, 92, 3 , 8 },
{ 464, 92, 2 , 8 },
{ 474, 92, 3 , 8 },
{ 485, 92, 3 , 8 },
{ 4, 114, 8 , 8 },
{ 20, 114, 7 , 8 },
{ 35, 114, 7 , 8 },
{ 50, 114, 7 , 8 },
{ 65, 114, 7 , 8 },
{ 80, 114, 7 , 8 },
{ 95, 114, 7 , 8 },
{ 110, 114, 5 , 6 },
{ 123, 114, 7 , 5 },
{ 138, 114, 7 , 8 },
{ 153, 114, 7 , 8 },
{ 168, 114, 7 , 8 },
{ 183, 114, 7 , 8 },
{ 198, 114, 7 , 10 },
{ 213, 114, 7 , 10 },
{ 228, 114, 7 , 10 },
};
// Font glyphs info data
// NOTE: No glyphs.image data provided
static const GlyphInfo cyberFontGlyphs[189] = {
{ 32, 0, 0, 4, { 0 }},
{ 33, 0, 3, 2, { 0 }},
{ 34, 0, 3, 4, { 0 }},
{ 35, 0, 3, 8, { 0 }},
{ 36, 0, 3, 8, { 0 }},
{ 37, 0, 3, 8, { 0 }},
{ 38, 0, 3, 8, { 0 }},
{ 39, 0, 3, 2, { 0 }},
{ 40, 0, 3, 4, { 0 }},
{ 41, 0, 3, 4, { 0 }},
{ 42, 0, 4, 6, { 0 }},
{ 43, 0, 4, 6, { 0 }},
{ 44, 0, 10, 3, { 0 }},
{ 45, 0, 7, 5, { 0 }},
{ 46, 0, 10, 2, { 0 }},
{ 47, 0, 3, 8, { 0 }},
{ 48, 0, 3, 8, { 0 }},
{ 49, 0, 3, 3, { 0 }},
{ 50, 0, 3, 8, { 0 }},
{ 51, 0, 3, 8, { 0 }},
{ 52, 0, 3, 8, { 0 }},
{ 53, 0, 3, 8, { 0 }},
{ 54, 0, 3, 8, { 0 }},
{ 55, 0, 3, 7, { 0 }},
{ 56, 0, 3, 8, { 0 }},
{ 57, 0, 3, 8, { 0 }},
{ 58, 0, 6, 2, { 0 }},
{ 59, 0, 6, 3, { 0 }},
{ 60, 0, 3, 5, { 0 }},
{ 61, 0, 6, 6, { 0 }},
{ 62, 0, 3, 5, { 0 }},
{ 63, 0, 3, 7, { 0 }},
{ 64, 0, 3, 8, { 0 }},
{ 65, 0, 3, 8, { 0 }},
{ 66, 0, 3, 8, { 0 }},
{ 67, 0, 3, 8, { 0 }},
{ 68, 0, 3, 8, { 0 }},
{ 69, 0, 3, 7, { 0 }},
{ 70, 0, 3, 7, { 0 }},
{ 71, 0, 3, 8, { 0 }},
{ 72, 0, 3, 8, { 0 }},
{ 73, 0, 3, 6, { 0 }},
{ 74, 0, 3, 7, { 0 }},
{ 75, 0, 3, 8, { 0 }},
{ 76, 0, 3, 7, { 0 }},
{ 77, 0, 3, 9, { 0 }},
{ 78, 0, 3, 8, { 0 }},
{ 79, 0, 3, 8, { 0 }},
{ 80, 0, 3, 8, { 0 }},
{ 81, 0, 3, 8, { 0 }},
{ 82, 0, 3, 8, { 0 }},
{ 83, 0, 3, 8, { 0 }},
{ 84, 0, 3, 8, { 0 }},
{ 85, 0, 3, 8, { 0 }},
{ 86, 0, 3, 8, { 0 }},
{ 87, 0, 3, 10, { 0 }},
{ 88, 0, 3, 8, { 0 }},
{ 89, 0, 3, 8, { 0 }},
{ 90, 0, 3, 8, { 0 }},
{ 91, 0, 3, 4, { 0 }},
{ 92, 0, 3, 8, { 0 }},
{ 93, 0, 3, 4, { 0 }},
{ 94, 0, 3, 4, { 0 }},
{ 95, 0, 11, 7, { 0 }},
{ 96, 0, 3, 3, { 0 }},
{ 97, 0, 6, 7, { 0 }},
{ 98, 0, 3, 7, { 0 }},
{ 99, 0, 6, 7, { 0 }},
{ 100, 0, 3, 7, { 0 }},
{ 101, 0, 6, 7, { 0 }},
{ 102, 0, 3, 5, { 0 }},
{ 103, 0, 6, 7, { 0 }},
{ 104, 0, 3, 7, { 0 }},
{ 105, 0, 3, 2, { 0 }},
{ 106, -2, 3, 2, { 0 }},
{ 107, 0, 3, 7, { 0 }},
{ 108, 0, 3, 4, { 0 }},
{ 109, 0, 6, 10, { 0 }},
{ 110, 0, 6, 7, { 0 }},
{ 111, 0, 6, 7, { 0 }},
{ 112, 0, 6, 7, { 0 }},
{ 113, 0, 6, 7, { 0 }},
{ 114, 0, 6, 6, { 0 }},
{ 115, 0, 6, 7, { 0 }},
{ 116, 0, 3, 6, { 0 }},
{ 117, 0, 6, 7, { 0 }},
{ 118, 0, 6, 7, { 0 }},
{ 119, 0, 6, 10, { 0 }},
{ 120, 0, 6, 7, { 0 }},
{ 121, 0, 6, 7, { 0 }},
{ 122, 0, 6, 7, { 0 }},
{ 123, 0, 3, 5, { 0 }},
{ 124, 0, 3, 2, { 0 }},
{ 125, 0, 3, 5, { 0 }},
{ 126, 0, 6, 8, { 0 }},
{ 161, 0, 3, 2, { 0 }},
{ 162, 0, 4, 7, { 0 }},
{ 163, 0, 3, 7, { 0 }},
{ 8364, 0, 3, 9, { 0 }},
{ 165, 0, 3, 8, { 0 }},
{ 352, 0, 1, 8, { 0 }},
{ 167, 0, 4, 5, { 0 }},
{ 353, 0, 3, 7, { 0 }},
{ 169, 0, 3, 9, { 0 }},
{ 170, 0, 3, 7, { 0 }},
{ 171, 0, 6, 6, { 0 }},
{ 172, 0, 7, 6, { 0 }},
{ 174, 0, 3, 9, { 0 }},
{ 175, 0, 0, 0, { 0 }},
{ 176, 0, 3, 4, { 0 }},
{ 177, 0, 6, 8, { 0 }},
{ 178, 0, 3, 4, { 0 }},
{ 179, 0, 3, 4, { 0 }},
{ 381, 0, 1, 8, { 0 }},
{ 181, 0, 6, 7, { 0 }},
{ 182, 0, 4, 6, { 0 }},
{ 183, 0, 7, 2, { 0 }},
{ 382, 0, 3, 7, { 0 }},
{ 185, 0, 3, 4, { 0 }},
{ 186, 0, 3, 5, { 0 }},
{ 187, 0, 6, 6, { 0 }},
{ 338, 0, 3, 14, { 0 }},
{ 339, 0, 6, 13, { 0 }},
{ 376, 0, 2, 8, { 0 }},
{ 191, 0, 3, 7, { 0 }},
{ 192, 0, 1, 8, { 0 }},
{ 193, 0, 1, 8, { 0 }},
{ 194, 0, 1, 8, { 0 }},
{ 195, 0, 1, 8, { 0 }},
{ 196, 0, 2, 8, { 0 }},
{ 197, 0, -1, 8, { 0 }},
{ 198, 0, 3, 14, { 0 }},
{ 199, 0, 3, 8, { 0 }},
{ 200, 0, 1, 7, { 0 }},
{ 201, 0, 1, 7, { 0 }},
{ 202, 0, 1, 7, { 0 }},
{ 203, 0, 2, 7, { 0 }},
{ 204, 0, 1, 6, { 0 }},
{ 205, 0, 1, 6, { 0 }},
{ 206, 0, 1, 6, { 0 }},
{ 207, 0, 2, 6, { 0 }},
{ 208, 0, 3, 9, { 0 }},
{ 209, 0, 1, 8, { 0 }},
{ 210, 0, 1, 8, { 0 }},
{ 211, 0, 1, 8, { 0 }},
{ 212, 0, 1, 8, { 0 }},
{ 213, 0, 1, 8, { 0 }},
{ 214, 0, 2, 8, { 0 }},
{ 215, 1, 6, 6, { 0 }},
{ 216, 0, 3, 8, { 0 }},
{ 217, 0, 1, 8, { 0 }},
{ 218, 0, 1, 8, { 0 }},
{ 219, 0, 1, 8, { 0 }},
{ 220, 0, 2, 8, { 0 }},
{ 221, 0, 1, 8, { 0 }},
{ 222, 0, 3, 7, { 0 }},
{ 223, 0, 3, 7, { 0 }},
{ 224, 0, 3, 7, { 0 }},
{ 225, 0, 3, 7, { 0 }},
{ 226, 0, 3, 7, { 0 }},
{ 227, 0, 3, 7, { 0 }},
{ 228, 0, 3, 7, { 0 }},
{ 229, 0, 2, 7, { 0 }},
{ 230, 0, 6, 13, { 0 }},
{ 231, 0, 6, 7, { 0 }},
{ 232, 0, 3, 7, { 0 }},
{ 233, 0, 3, 7, { 0 }},
{ 234, 0, 3, 7, { 0 }},
{ 235, 0, 3, 7, { 0 }},
{ 236, -1, 3, 2, { 0 }},
{ 237, 0, 3, 2, { 0 }},
{ 238, -1, 3, 2, { 0 }},
{ 239, -1, 3, 2, { 0 }},
{ 240, 0, 3, 8, { 0 }},
{ 241, 0, 3, 7, { 0 }},
{ 242, 0, 3, 7, { 0 }},
{ 243, 0, 3, 7, { 0 }},
{ 244, 0, 3, 7, { 0 }},
{ 245, 0, 3, 7, { 0 }},
{ 246, 0, 3, 7, { 0 }},
{ 247, 0, 4, 6, { 0 }},
{ 248, 0, 6, 7, { 0 }},
{ 249, 0, 3, 7, { 0 }},
{ 250, 0, 3, 7, { 0 }},
{ 251, 0, 3, 7, { 0 }},
{ 252, 0, 3, 7, { 0 }},
{ 253, 0, 3, 7, { 0 }},
{ 254, 0, 3, 7, { 0 }},
{ 255, 0, 3, 7, { 0 }},
};
// Style loading function: Cyber
static void GuiLoadStyleCyber(void)
{
// Load style properties provided
// NOTE: Default properties are propagated
for (int i = 0; i < CYBER_STYLE_PROPS_COUNT; i++)
{
GuiSetStyle(cyberStyleProps[i].controlId, cyberStyleProps[i].propertyId, cyberStyleProps[i].propertyValue);
}
// Custom font loading
// NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function
int cyberFontDataSize = 0;
unsigned char *data = DecompressData(cyberFontData, CYBER_STYLE_FONT_ATLAS_COMP_SIZE, &cyberFontDataSize);
Image imFont = { data, 512, 256, 1, 2 };
Font font = { 0 };
font.baseSize = 14;
font.glyphCount = 189;
// Load texture from image
font.texture = LoadTextureFromImage(imFont);
UnloadImage(imFont); // Uncompressed image data can be unloaded from memory
// Copy char recs data from global fontRecs
// NOTE: Required to avoid issues if trying to free font
font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle));
memcpy(font.recs, cyberFontRecs, font.glyphCount*sizeof(Rectangle));
// Copy font char info data from global fontChars
// NOTE: Required to avoid issues if trying to free font
font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo));
memcpy(font.glyphs, cyberFontGlyphs, font.glyphCount*sizeof(GlyphInfo));
GuiSetFont(font);
// Setup a white rectangle on the font to be used on shapes drawing,
// it makes possible to draw shapes and text (full UI) in a single draw call
Rectangle fontWhiteRec = { 510, 254, 1, 1 };
SetShapesTexture(font.texture, fontWhiteRec);
//-----------------------------------------------------------------
// TODO: Custom user style setup: Set specific properties here (if required)
// i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT
}

View File

@ -0,0 +1,589 @@
//////////////////////////////////////////////////////////////////////////////////
// //
// StyleAsCode exporter v2.0 - Style data exported as a values array //
// //
// USAGE: On init call: GuiLoadStyleDark(); //
// //
// more info and bugs-report: github.com/raysan5/raygui //
// feedback and support: ray[at]raylibtech.com //
// //
// Copyright (c) 2020-2025 raylib technologies (@raylibtech) //
// //
//////////////////////////////////////////////////////////////////////////////////
#define DARK_STYLE_PROPS_COUNT 23
// Custom style name: Dark
static const GuiStyleProp darkStyleProps[DARK_STYLE_PROPS_COUNT] = {
{ 0, 0, (int)0x878787ff }, // DEFAULT_BORDER_COLOR_NORMAL
{ 0, 1, (int)0x2c2c2cff }, // DEFAULT_BASE_COLOR_NORMAL
{ 0, 2, (int)0xc3c3c3ff }, // DEFAULT_TEXT_COLOR_NORMAL
{ 0, 3, (int)0xe1e1e1ff }, // DEFAULT_BORDER_COLOR_FOCUSED
{ 0, 4, (int)0x848484ff }, // DEFAULT_BASE_COLOR_FOCUSED
{ 0, 5, (int)0x181818ff }, // DEFAULT_TEXT_COLOR_FOCUSED
{ 0, 6, (int)0x000000ff }, // DEFAULT_BORDER_COLOR_PRESSED
{ 0, 7, (int)0xefefefff }, // DEFAULT_BASE_COLOR_PRESSED
{ 0, 8, (int)0x202020ff }, // DEFAULT_TEXT_COLOR_PRESSED
{ 0, 9, (int)0x6a6a6aff }, // DEFAULT_BORDER_COLOR_DISABLED
{ 0, 10, (int)0x818181ff }, // DEFAULT_BASE_COLOR_DISABLED
{ 0, 11, (int)0x606060ff }, // DEFAULT_TEXT_COLOR_DISABLED
{ 0, 16, (int)0x00000010 }, // DEFAULT_TEXT_SIZE
{ 0, 17, (int)0x00000000 }, // DEFAULT_TEXT_SPACING
{ 0, 18, (int)0x9d9d9dff }, // DEFAULT_LINE_COLOR
{ 0, 19, (int)0x3c3c3cff }, // DEFAULT_BACKGROUND_COLOR
{ 0, 20, (int)0x00000008 }, // DEFAULT_TEXT_LINE_SPACING
{ 1, 5, (int)0xf7f7f7ff }, // LABEL_TEXT_COLOR_FOCUSED
{ 1, 8, (int)0x898989ff }, // LABEL_TEXT_COLOR_PRESSED
{ 4, 5, (int)0xb0b0b0ff }, // SLIDER_TEXT_COLOR_FOCUSED
{ 5, 5, (int)0x848484ff }, // PROGRESSBAR_TEXT_COLOR_FOCUSED
{ 9, 5, (int)0xf5f5f5ff }, // TEXTBOX_TEXT_COLOR_FOCUSED
{ 10, 5, (int)0xf6f6f6ff }, // VALUEBOX_TEXT_COLOR_FOCUSED
};
// WARNING: This style uses a custom font: "PixelOperator.ttf" (size: 16, spacing: 0)
#define DARK_STYLE_FONT_ATLAS_COMP_SIZE 2138
// Font atlas image pixels data: DEFLATE compressed
static unsigned char darkFontData[DARK_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed,
0xdd, 0xdb, 0x92, 0xa5, 0xba, 0x0d, 0x00, 0x50, 0xff, 0xff, 0x4f, 0x2b, 0x0f, 0xa9, 0x54, 0x32, 0x95, 0xd3, 0x80, 0x64,
0xd9, 0x98, 0x9e, 0x35, 0xeb, 0xad, 0x77, 0x4f, 0xc3, 0x36, 0x96, 0x6f, 0x80, 0x1c, 0x03, 0x00, 0x00, 0x00, 0xf8, 0xeb,
0xc5, 0x3f, 0xfe, 0x24, 0x7e, 0xfc, 0xcd, 0x78, 0xfc, 0x77, 0xae, 0x7f, 0xfe, 0x9f, 0x4f, 0xe3, 0xe2, 0x58, 0xcf, 0xce,
0x35, 0x7b, 0xdc, 0x48, 0x94, 0xc4, 0x3f, 0x9f, 0x5f, 0x3c, 0xfe, 0xbb, 0x3f, 0x7d, 0xbf, 0xfc, 0xef, 0x5f, 0xfd, 0xa5,
0xeb, 0xb3, 0x8f, 0x54, 0xb9, 0xe7, 0xff, 0x4f, 0xee, 0x2a, 0xc6, 0x92, 0xb2, 0xbf, 0x3f, 0xbb, 0xfc, 0xb9, 0x77, 0xfe,
0x9f, 0xb8, 0xf8, 0x3e, 0x95, 0xab, 0xf4, 0x24, 0xb6, 0x4e, 0x88, 0xff, 0x78, 0x14, 0x89, 0xd1, 0x5a, 0x73, 0xfe, 0x7b,
0xd4, 0x68, 0x6c, 0xa9, 0xaa, 0x25, 0x79, 0x15, 0xe9, 0xf9, 0xf2, 0xb8, 0xaa, 0xfd, 0xf9, 0x16, 0x30, 0x5a, 0xbe, 0xcb,
0x7c, 0x6d, 0x8c, 0xe9, 0xdf, 0x7e, 0x56, 0x93, 0x7a, 0xbe, 0xd5, 0xcc, 0x27, 0xa3, 0xe5, 0x2a, 0xbd, 0x11, 0xff, 0x51,
0x6e, 0xa9, 0x22, 0x19, 0xd1, 0x1d, 0x25, 0x58, 0x69, 0x87, 0xc7, 0xc6, 0xf8, 0x8f, 0xd6, 0xb1, 0x4b, 0xb4, 0xd5, 0xb9,
0x37, 0xe2, 0xff, 0xba, 0xd7, 0x1e, 0x2d, 0xf5, 0x26, 0x6e, 0xca, 0xa8, 0x37, 0x96, 0xd7, 0x8e, 0x53, 0x57, 0xc7, 0xff,
0xf5, 0x6f, 0x66, 0xfb, 0xdb, 0x48, 0xf6, 0xdd, 0x1d, 0xe5, 0x54, 0xeb, 0xff, 0xfb, 0xcb, 0x31, 0x7e, 0xec, 0x9b, 0xab,
0xe3, 0x90, 0x4c, 0x09, 0x47, 0x72, 0x76, 0x35, 0xdb, 0xc3, 0xbe, 0xd9, 0xff, 0x3f, 0x1b, 0x0b, 0x8a, 0xff, 0xb5, 0xf1,
0x5f, 0xf9, 0x26, 0xf1, 0xf0, 0x0c, 0x2a, 0x7d, 0xe2, 0x38, 0x20, 0xfe, 0xb3, 0xed, 0xd0, 0x75, 0x59, 0x75, 0x8d, 0xe5,
0xb3, 0xeb, 0x12, 0xcf, 0x66, 0xd8, 0xfb, 0x6a, 0x61, 0x7e, 0x6c, 0x94, 0x8f, 0xff, 0x7c, 0xeb, 0x79, 0xf7, 0xd7, 0xb2,
0xa5, 0xfa, 0xf3, 0xcc, 0x6e, 0xbe, 0xc4, 0xf7, 0xc5, 0x7f, 0x14, 0xfa, 0x94, 0xf7, 0xe3, 0xb9, 0x27, 0xfe, 0xa3, 0xb0,
0x72, 0x31, 0xda, 0x56, 0xf9, 0x6a, 0xeb, 0x12, 0x7d, 0x6b, 0x06, 0xef, 0x5f, 0x81, 0xfb, 0xf8, 0xbf, 0x9b, 0x0f, 0xbe,
0xdf, 0xff, 0xc7, 0x11, 0xfd, 0x7f, 0x94, 0xd7, 0x86, 0x47, 0xa1, 0xf5, 0xfd, 0x5a, 0xfc, 0x47, 0x21, 0x66, 0xa2, 0x65,
0x5e, 0x3e, 0x96, 0xac, 0xe5, 0xf5, 0xae, 0x19, 0xee, 0xb9, 0x5a, 0x77, 0xbd, 0x68, 0xd7, 0xac, 0xe6, 0x77, 0xc5, 0xff,
0x68, 0xe8, 0xff, 0x9f, 0x8d, 0x01, 0x66, 0xbf, 0x47, 0x7c, 0xac, 0xf7, 0xef, 0x8c, 0xff, 0x5d, 0x2b, 0xf6, 0xeb, 0x6b,
0x63, 0x1c, 0x71, 0x65, 0xac, 0xff, 0x77, 0x8e, 0xff, 0xeb, 0x6b, 0x00, 0xb9, 0x79, 0x4c, 0x1c, 0x1a, 0xfd, 0x95, 0x39,
0x73, 0xd7, 0x1d, 0xfb, 0xde, 0xa7, 0x09, 0xa2, 0xf0, 0xac, 0x46, 0xcf, 0x2a, 0xce, 0xea, 0x6b, 0x90, 0xef, 0xff, 0x77,
0xdd, 0xff, 0xbf, 0x1f, 0x73, 0x9f, 0xd1, 0xff, 0x8f, 0xdb, 0xde, 0xfd, 0x94, 0xf3, 0x01, 0xf6, 0xb6, 0x00, 0x21, 0xfa,
0xc1, 0x73, 0xc4, 0x80, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x9f, 0xcf,
0xef, 0xcf, 0x63, 0x90, 0xcf, 0x84, 0xbd, 0x3e, 0x03, 0xfb, 0x4c, 0x4e, 0xe0, 0x6a, 0x09, 0x75, 0xfd, 0xc5, 0xeb, 0xdc,
0xf1, 0x99, 0x4c, 0x0b, 0xcf, 0x6b, 0x46, 0xa4, 0x77, 0x3f, 0xe8, 0xcc, 0x28, 0x50, 0xc9, 0x69, 0x30, 0x92, 0x75, 0xa2,
0x37, 0x97, 0x52, 0xee, 0xec, 0xf7, 0xd4, 0xf8, 0x2f, 0xc4, 0xff, 0xfb, 0x9f, 0x8c, 0x42, 0xfe, 0x9e, 0x9d, 0xf1, 0x9f,
0xad, 0x7b, 0xb5, 0xfc, 0xb8, 0x73, 0x7d, 0xc9, 0xee, 0x8c, 0x62, 0xd1, 0x78, 0x0d, 0xf7, 0xf5, 0xab, 0x7f, 0xe6, 0xd0,
0xd9, 0x51, 0xaf, 0x67, 0xe2, 0x3f, 0x9b, 0xfb, 0x34, 0x2e, 0x5a, 0xe1, 0x73, 0xe2, 0x7f, 0x6c, 0x89, 0xff, 0xf8, 0x48,
0xfc, 0x77, 0x67, 0x92, 0xe9, 0xca, 0x42, 0x5e, 0xc9, 0x7c, 0x93, 0xbf, 0x86, 0xf5, 0x0c, 0xbf, 0xd5, 0x1a, 0xf7, 0x9d,
0xf8, 0xaf, 0xd4, 0xad, 0xeb, 0x3c, 0xab, 0xe2, 0xff, 0xbe, 0x6c, 0x2b, 0xbd, 0xc9, 0xfc, 0xcf, 0x7b, 0x22, 0x7f, 0x4f,
0x1e, 0xdd, 0xbb, 0x7d, 0xb4, 0xd6, 0xd6, 0x95, 0xd9, 0xbe, 0xf2, 0x2b, 0xf1, 0x1f, 0xc5, 0xbf, 0x12, 0x37, 0x2d, 0x4a,
0x6f, 0x06, 0xf6, 0x9e, 0xac, 0x6d, 0x7b, 0xe3, 0xbf, 0x7b, 0xdf, 0x9f, 0x33, 0xe2, 0xff, 0xfd, 0x3c, 0xba, 0xab, 0xe6,
0x70, 0xbd, 0x7d, 0xe5, 0xef, 0xee, 0xff, 0xef, 0x5b, 0xc9, 0x1d, 0xf5, 0x63, 0xa6, 0xa7, 0x7f, 0xb3, 0xff, 0x7f, 0xef,
0xe7, 0xef, 0xc6, 0x7f, 0x57, 0x6d, 0x8f, 0x8d, 0x23, 0x93, 0x6a, 0x5f, 0xb9, 0x73, 0x95, 0x6c, 0xf7, 0xfc, 0x7f, 0xd5,
0x37, 0x1b, 0xe9, 0xd1, 0x44, 0x1c, 0x1b, 0xff, 0x33, 0xab, 0x90, 0xeb, 0xc6, 0x0b, 0xef, 0x8c, 0xff, 0x6b, 0xfb, 0xdb,
0x56, 0x76, 0x05, 0x3c, 0xad, 0xff, 0xdf, 0x75, 0x97, 0x6c, 0x6c, 0x8e, 0xc9, 0xbd, 0xc7, 0xea, 0xdc, 0xa5, 0x2e, 0x9f,
0xbf, 0x3f, 0x9a, 0x47, 0x78, 0x5f, 0x8f, 0xff, 0xfa, 0x2a, 0xff, 0x68, 0x5a, 0x95, 0x7c, 0x6f, 0xfc, 0xbf, 0x7b, 0xa7,
0x93, 0xca, 0x51, 0x7a, 0xda, 0xdf, 0x67, 0x77, 0x85, 0x7b, 0x7b, 0x81, 0x9f, 0xef, 0x36, 0x44, 0x53, 0xcf, 0xd1, 0x95,
0xbf, 0xff, 0xcf, 0x73, 0xcb, 0xef, 0x78, 0x96, 0xbf, 0x13, 0x1f, 0xc9, 0xfd, 0xf4, 0xdf, 0x88, 0xff, 0xca, 0x91, 0x2b,
0xff, 0x2b, 0x7b, 0x0d, 0x3b, 0xe3, 0xff, 0xbd, 0x16, 0x40, 0xde, 0x4d, 0x38, 0x71, 0x14, 0x03, 0xfc, 0x9e, 0x16, 0xc0,
0x0e, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xee, 0x37, 0xb1, 0x7f, 0xce,
0xcd, 0x55, 0xc9, 0x1a, 0x9f, 0x7f, 0x4f, 0x7a, 0x67, 0xc6, 0xfc, 0x71, 0x93, 0x85, 0xec, 0xfa, 0xb7, 0xfe, 0xfc, 0xa4,
0x23, 0x1f, 0x6f, 0x34, 0xbe, 0xb5, 0x9e, 0xc9, 0xe5, 0x1d, 0x85, 0x6c, 0x03, 0x57, 0x6f, 0xc6, 0xe6, 0xae, 0x41, 0xee,
0x18, 0xd1, 0x9e, 0xcf, 0x2c, 0xd2, 0xd9, 0x63, 0xfe, 0xf7, 0x9c, 0x9f, 0x67, 0xfa, 0x8d, 0xf2, 0x9b, 0xc6, 0x77, 0xb9,
0xcc, 0xf2, 0xf9, 0x11, 0x2a, 0x39, 0xf3, 0xf2, 0x79, 0x36, 0x4f, 0xcf, 0x98, 0x3f, 0x9f, 0x79, 0x27, 0x6e, 0xea, 0xe4,
0xf3, 0x5a, 0xfa, 0x24, 0x73, 0x44, 0x4f, 0x06, 0xa1, 0xda, 0x37, 0x8e, 0xe9, 0xda, 0x5a, 0xb9, 0xde, 0x99, 0x23, 0xc4,
0xf4, 0xfb, 0xfc, 0x95, 0xfa, 0x1e, 0x93, 0xd7, 0xbd, 0xfe, 0x8d, 0x67, 0xb2, 0x10, 0x44, 0xa9, 0xa7, 0xeb, 0x2c, 0xc1,
0xeb, 0x4f, 0xf2, 0x19, 0x33, 0xe3, 0x61, 0x7c, 0x75, 0xff, 0x74, 0x24, 0xdb, 0x9b, 0x4a, 0xbe, 0xba, 0x99, 0x5d, 0x33,
0xe6, 0xc6, 0x88, 0xe3, 0x22, 0xbb, 0x52, 0x3e, 0xfa, 0x7f, 0xee, 0x6f, 0x62, 0x32, 0xfe, 0xa3, 0x98, 0x59, 0xa8, 0x1e,
0x23, 0xd9, 0xf8, 0x9f, 0xbf, 0x0a, 0xbb, 0xe2, 0xbf, 0x92, 0xf5, 0xe0, 0xfd, 0x8c, 0xd9, 0xb5, 0x9e, 0x70, 0x6f, 0xfc,
0xc7, 0x83, 0xf6, 0x6b, 0xa4, 0xe7, 0x2f, 0xa3, 0x90, 0xe1, 0xfc, 0xf9, 0xec, 0x22, 0x5a, 0xfb, 0xff, 0x71, 0x59, 0x26,
0xf1, 0xc2, 0xf8, 0xbf, 0xb6, 0xdf, 0x5b, 0x2e, 0xfe, 0x67, 0x5a, 0xa7, 0xfd, 0xfd, 0x7f, 0xad, 0x5f, 0x3b, 0xb9, 0xff,
0x7f, 0x27, 0x63, 0x76, 0x14, 0xe6, 0xd9, 0x95, 0xe3, 0xc6, 0xe4, 0xc8, 0xe0, 0xd9, 0x5c, 0x30, 0x1a, 0xe6, 0xab, 0x1d,
0xf1, 0xdf, 0x3f, 0xc2, 0xae, 0xcc, 0xad, 0x6a, 0xfd, 0x7f, 0xb4, 0xce, 0xff, 0x23, 0xdd, 0xce, 0xcf, 0xc5, 0x7f, 0xe7,
0x6e, 0x4b, 0x2b, 0x32, 0xe6, 0xe6, 0x77, 0x76, 0x7c, 0xab, 0xff, 0x1f, 0xa5, 0xfe, 0xbf, 0xd6, 0x7b, 0xcd, 0xd4, 0xca,
0xd8, 0x90, 0xeb, 0x2e, 0x37, 0xfe, 0x5f, 0x3d, 0xca, 0xce, 0xcf, 0x28, 0x63, 0x53, 0xfb, 0xd4, 0x3d, 0xf7, 0xab, 0x45,
0x4b, 0xa4, 0xc7, 0xd7, 0x3b, 0x33, 0xe6, 0x56, 0xd6, 0x9e, 0xcf, 0x8f, 0xff, 0xce, 0x3d, 0x4c, 0x2a, 0x77, 0x17, 0xa2,
0xa1, 0x6f, 0x5e, 0xdd, 0xff, 0xcf, 0xce, 0xff, 0x2b, 0xb9, 0xf4, 0xf7, 0xac, 0xff, 0x8d, 0xa5, 0x6b, 0x3f, 0xd1, 0x7a,
0x3f, 0x71, 0x1c, 0xd0, 0x7e, 0x77, 0x66, 0x89, 0x7f, 0x63, 0xfe, 0xdf, 0x95, 0x81, 0x7d, 0x94, 0xef, 0x09, 0xd5, 0xd7,
0xff, 0x67, 0x6b, 0x60, 0x1c, 0xd3, 0xf7, 0x8f, 0xc7, 0x7b, 0xe8, 0xc4, 0x4b, 0xd1, 0x7f, 0x5a, 0xfc, 0x9f, 0xf2, 0x44,
0x43, 0x47, 0xbb, 0x15, 0x2d, 0xad, 0x5b, 0x65, 0xdf, 0x96, 0xce, 0x71, 0xd4, 0xfc, 0xfc, 0x7f, 0xcd, 0xba, 0xfa, 0x1b,
0xc7, 0x98, 0xb9, 0x23, 0x3b, 0x1f, 0xff, 0xb1, 0xbc, 0xe4, 0xe4, 0x23, 0xfe, 0x4e, 0x2b, 0x75, 0xde, 0xf1, 0xfe, 0xe6,
0xda, 0x13, 0x1b, 0x9f, 0xb5, 0x13, 0xa1, 0xc4, 0xd1, 0xf3, 0x21, 0xd7, 0x03, 0xfe, 0xe6, 0xf9, 0xd0, 0xdf, 0xfa, 0x1c,
0xbc, 0x92, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x7d, 0x3b, 0xa4, 0x92, 0x59,
0x72, 0x34, 0xbf, 0x8b, 0x9e, 0xcf, 0xad, 0x5f, 0x3d, 0xbb, 0xbb, 0xf7, 0xa5, 0x6b, 0xf9, 0x79, 0x6b, 0xe5, 0x34, 0x97,
0x8f, 0x28, 0x97, 0x53, 0xed, 0x7e, 0xff, 0x83, 0x38, 0xf2, 0x6a, 0xde, 0x65, 0x75, 0x8d, 0x42, 0x3e, 0xd5, 0xce, 0xeb,
0x35, 0x4a, 0x65, 0xb7, 0xab, 0x96, 0x3d, 0x7f, 0x3b, 0x34, 0x36, 0xbc, 0x4f, 0x59, 0x8b, 0x85, 0x5a, 0x6e, 0xc3, 0xb9,
0xdc, 0x61, 0xb1, 0xf8, 0x9b, 0xe5, 0xca, 0x6f, 0x7e, 0x3f, 0x89, 0xfb, 0x6c, 0xab, 0xf1, 0xb9, 0xab, 0x59, 0xcd, 0xf8,
0xde, 0x7d, 0xbd, 0xea, 0xb5, 0xe5, 0x84, 0x5a, 0xb6, 0x7e, 0x67, 0x89, 0x37, 0xde, 0x6e, 0xad, 0x66, 0xc4, 0x8d, 0xcf,
0xbf, 0x73, 0x1a, 0x1f, 0xcd, 0x05, 0x50, 0xcb, 0x13, 0xb9, 0xeb, 0x5b, 0x55, 0x8e, 0x14, 0xa5, 0x3d, 0x9b, 0xc6, 0xf6,
0xec, 0x10, 0xf9, 0xec, 0xe7, 0xa3, 0x94, 0xef, 0xb3, 0xfb, 0x93, 0xca, 0x15, 0xa9, 0xc7, 0xff, 0x55, 0x39, 0x55, 0x3e,
0x99, 0xed, 0xff, 0xc7, 0xf2, 0x7d, 0x18, 0x4e, 0xb9, 0x9a, 0x77, 0xfd, 0x7f, 0xb4, 0xed, 0x98, 0xb4, 0xf7, 0x93, 0x1d,
0xe5, 0xda, 0x11, 0x0b, 0xbb, 0xf6, 0xfb, 0x8b, 0x74, 0xad, 0x18, 0xe9, 0x1c, 0x7b, 0xf5, 0xd9, 0xd7, 0xae, 0x4f, 0x56,
0xc4, 0x7f, 0x5c, 0xcc, 0x93, 0xbb, 0x77, 0x1d, 0xeb, 0xbe, 0x9a, 0x4f, 0x5a, 0x86, 0x2f, 0xc6, 0xff, 0x8e, 0xf8, 0x99,
0x9d, 0xff, 0x47, 0x79, 0x37, 0x9d, 0x33, 0x6b, 0x4c, 0x3c, 0xcc, 0xe8, 0xfc, 0xdb, 0xe2, 0x7f, 0x6f, 0x19, 0x77, 0xb7,
0xe6, 0xd7, 0x23, 0xec, 0xf1, 0xd1, 0xf8, 0x9f, 0xdd, 0xef, 0x6d, 0x7e, 0xee, 0x7a, 0xbf, 0xfe, 0xdf, 0xb9, 0xb2, 0x71,
0x46, 0xfc, 0x9f, 0x12, 0xe5, 0xb9, 0x32, 0x5f, 0x1b, 0xff, 0xef, 0xc7, 0x50, 0x57, 0x1f, 0xf6, 0xde, 0xb9, 0x47, 0xdb,
0xfc, 0xff, 0x7e, 0x97, 0xe4, 0xdc, 0xdd, 0x9d, 0xbd, 0xab, 0x49, 0x3b, 0x4b, 0xbd, 0x73, 0xcf, 0xe1, 0xa7, 0x63, 0x87,
0xee, 0xf9, 0xee, 0x19, 0xfd, 0x7f, 0x88, 0xff, 0x05, 0x6b, 0xe1, 0x27, 0xf4, 0x92, 0xab, 0xee, 0xe5, 0xe5, 0xb3, 0xd8,
0xf7, 0x7e, 0x32, 0x5b, 0x52, 0xf9, 0xfb, 0xff, 0x5f, 0x1f, 0xff, 0x3f, 0xd9, 0xe1, 0xe7, 0x5b, 0xf1, 0x1f, 0xc5, 0x15,
0xc5, 0x33, 0xe2, 0x3f, 0x36, 0x8e, 0x6a, 0x57, 0xdc, 0xcb, 0x3f, 0x79, 0xfc, 0xdf, 0xbf, 0x13, 0xd4, 0xd7, 0xe3, 0xff,
0x0b, 0x63, 0xe8, 0x35, 0x4f, 0xa1, 0xbc, 0x17, 0xff, 0x73, 0x77, 0x86, 0x4f, 0x1e, 0xff, 0x9f, 0x1e, 0xff, 0xb3, 0x57,
0x25, 0x36, 0xcd, 0xff, 0x9f, 0x8e, 0x34, 0x7e, 0x7f, 0xfc, 0x8f, 0xad, 0x7b, 0xf7, 0xd7, 0xe7, 0x9b, 0xe3, 0xd0, 0x67,
0x61, 0xce, 0x79, 0x8a, 0xe3, 0xfd, 0x99, 0xcd, 0xfc, 0xae, 0xa8, 0xeb, 0xef, 0xff, 0x8f, 0x65, 0xfd, 0x7f, 0xef, 0x93,
0x2d, 0xbb, 0xee, 0xff, 0xef, 0x7d, 0xa2, 0xa8, 0xfb, 0x0c, 0xc5, 0xff, 0x37, 0xda, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xe2, 0x73, 0xf2, 0x2b, 0x72, 0xeb, 0xf7, 0xe7, 0xc3, 0x38, 0x3d, 0xb7, 0xfe,
0xdd, 0xfb, 0x33, 0xe3, 0xd8, 0xdc, 0xfa, 0xe3, 0x51, 0x8e, 0xa2, 0xef, 0xe5, 0xd6, 0xf7, 0xee, 0xc7, 0xd3, 0xb7, 0x64,
0xd6, 0xe5, 0xd6, 0xef, 0x7b, 0x87, 0xfa, 0xf4, 0xdc, 0xfa, 0xe3, 0x26, 0x13, 0xd1, 0xc9, 0xb9, 0xf5, 0xeb, 0x6f, 0x51,
0x9d, 0x9a, 0x5b, 0x9f, 0xb5, 0xef, 0x4e, 0x3e, 0x6d, 0xfb, 0xe3, 0xc5, 0x6b, 0xf6, 0x46, 0x36, 0x84, 0x93, 0x6b, 0x64,
0x3e, 0x5b, 0xd3, 0x8a, 0x16, 0xa5, 0xf3, 0x7d, 0xcd, 0xb3, 0x73, 0xeb, 0x7f, 0x3d, 0xc6, 0xeb, 0xd9, 0x58, 0xa3, 0x9c,
0xf3, 0xbe, 0xef, 0x5d, 0xed, 0x48, 0x8d, 0x1b, 0xd7, 0xe6, 0xd6, 0xba, 0x6e, 0x47, 0xcf, 0xdd, 0x29, 0xe1, 0xdb, 0xb9,
0xb5, 0xc5, 0x7f, 0x4f, 0xab, 0x1b, 0x4d, 0x51, 0xf7, 0xf4, 0x93, 0x7d, 0x59, 0x83, 0xfa, 0xe2, 0x3f, 0xda, 0x3f, 0xdb,
0x9b, 0x5b, 0xab, 0xba, 0x9e, 0x20, 0xfe, 0x7f, 0x57, 0x3b, 0x90, 0x99, 0xd1, 0x3e, 0x29, 0xf7, 0x37, 0x6b, 0xc0, 0xce,
0xdc, 0x5a, 0x5f, 0x8f, 0xff, 0x4a, 0xff, 0x20, 0xfe, 0x7f, 0xcf, 0xf8, 0xbf, 0xaf, 0x2f, 0xaf, 0xaf, 0xff, 0x7f, 0x79,
0x6f, 0xad, 0xdf, 0x19, 0xff, 0x67, 0xe4, 0xd6, 0x15, 0xff, 0xef, 0x8c, 0xff, 0x6b, 0xfb, 0x13, 0xac, 0x58, 0xcd, 0xed,
0x9d, 0x4d, 0x88, 0xff, 0xd5, 0x75, 0xe7, 0xa4, 0x9d, 0x21, 0xc4, 0x78, 0x7d, 0xfe, 0x5f, 0xdb, 0x13, 0xb4, 0xda, 0x02,
0xec, 0xcb, 0xd5, 0xfa, 0x46, 0x6e, 0x7d, 0xb9, 0x75, 0x67, 0xae, 0xd7, 0xf5, 0xe8, 0xef, 0x9b, 0xf7, 0x63, 0x4e, 0x1f,
0xff, 0xf7, 0xde, 0xab, 0xf9, 0xff, 0x35, 0xa5, 0xd5, 0x2b, 0xde, 0xab, 0xc6, 0xff, 0x2b, 0xda, 0xd8, 0x37, 0x4b, 0x63,
0xcd, 0xbd, 0xa3, 0xfe, 0x33, 0x8c, 0xa6, 0xd1, 0x1f, 0xef, 0xb4, 0x1a, 0xb0, 0x66, 0x9c, 0xf1, 0x7e, 0x4b, 0x08, 0x7c,
0xed, 0x49, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x93, 0xfc, 0xfb, 0x9f, 0x72, 0x00, 0xf1, 0x0f, 0xfc, 0x75, 0xf1, 0xff, 0x2f };
// Font glyphs rectangles data (on atlas)
static const Rectangle darkFontRecs[189] = {
{ 4, 4, 4 , 16 },
{ 16, 4, 1 , 9 },
{ 25, 4, 3 , 3 },
{ 36, 4, 6 , 9 },
{ 50, 4, 5 , 13 },
{ 63, 4, 7 , 9 },
{ 78, 4, 5 , 9 },
{ 91, 4, 1 , 3 },
{ 100, 4, 3 , 9 },
{ 111, 4, 3 , 9 },
{ 122, 4, 5 , 5 },
{ 135, 4, 5 , 5 },
{ 148, 4, 2 , 3 },
{ 158, 4, 4 , 1 },
{ 170, 4, 1 , 1 },
{ 179, 4, 3 , 9 },
{ 190, 4, 5 , 9 },
{ 203, 4, 3 , 9 },
{ 214, 4, 5 , 9 },
{ 227, 4, 5 , 9 },
{ 240, 4, 5 , 9 },
{ 253, 4, 5 , 9 },
{ 266, 4, 5 , 9 },
{ 279, 4, 5 , 9 },
{ 292, 4, 5 , 9 },
{ 305, 4, 5 , 9 },
{ 318, 4, 1 , 7 },
{ 327, 4, 2 , 9 },
{ 337, 4, 3 , 5 },
{ 348, 4, 4 , 3 },
{ 360, 4, 3 , 5 },
{ 371, 4, 5 , 9 },
{ 384, 4, 7 , 9 },
{ 399, 4, 5 , 9 },
{ 412, 4, 5 , 9 },
{ 425, 4, 5 , 9 },
{ 438, 4, 5 , 9 },
{ 451, 4, 5 , 9 },
{ 464, 4, 5 , 9 },
{ 477, 4, 5 , 9 },
{ 490, 4, 5 , 9 },
{ 4, 28, 1 , 9 },
{ 13, 28, 5 , 9 },
{ 26, 28, 5 , 9 },
{ 39, 28, 5 , 9 },
{ 52, 28, 7 , 9 },
{ 67, 28, 5 , 9 },
{ 80, 28, 5 , 9 },
{ 93, 28, 5 , 9 },
{ 106, 28, 5 , 9 },
{ 119, 28, 5 , 9 },
{ 132, 28, 5 , 9 },
{ 145, 28, 5 , 9 },
{ 158, 28, 5 , 9 },
{ 171, 28, 5 , 9 },
{ 184, 28, 7 , 9 },
{ 199, 28, 5 , 9 },
{ 212, 28, 5 , 9 },
{ 225, 28, 5 , 9 },
{ 238, 28, 3 , 9 },
{ 249, 28, 3 , 9 },
{ 260, 28, 3 , 9 },
{ 271, 28, 5 , 3 },
{ 284, 28, 5 , 1 },
{ 297, 28, 2 , 2 },
{ 307, 28, 5 , 7 },
{ 320, 28, 5 , 9 },
{ 333, 28, 5 , 7 },
{ 346, 28, 5 , 9 },
{ 359, 28, 5 , 7 },
{ 372, 28, 4 , 9 },
{ 384, 28, 5 , 9 },
{ 397, 28, 5 , 9 },
{ 410, 28, 1 , 9 },
{ 419, 28, 5 , 11 },
{ 432, 28, 5 , 9 },
{ 445, 28, 2 , 9 },
{ 455, 28, 7 , 7 },
{ 470, 28, 5 , 7 },
{ 483, 28, 5 , 7 },
{ 496, 28, 5 , 9 },
{ 4, 52, 5 , 9 },
{ 17, 52, 5 , 7 },
{ 30, 52, 5 , 7 },
{ 43, 52, 4 , 8 },
{ 55, 52, 5 , 7 },
{ 68, 52, 5 , 7 },
{ 81, 52, 7 , 7 },
{ 96, 52, 5 , 7 },
{ 109, 52, 5 , 9 },
{ 122, 52, 5 , 7 },
{ 135, 52, 4 , 9 },
{ 147, 52, 1 , 9 },
{ 156, 52, 4 , 9 },
{ 168, 52, 6 , 2 },
{ 182, 52, 1 , 9 },
{ 191, 52, 5 , 11 },
{ 204, 52, 6 , 9 },
{ 218, 52, 6 , 9 },
{ 232, 52, 5 , 9 },
{ 245, 52, 5 , 12 },
{ 258, 52, 0 , 0 },
{ 266, 52, 5 , 10 },
{ 279, 52, 7 , 9 },
{ 294, 52, 0 , 0 },
{ 302, 52, 6 , 5 },
{ 316, 52, 5 , 3 },
{ 329, 52, 7 , 9 },
{ 344, 52, 0 , 0 },
{ 352, 52, 4 , 4 },
{ 364, 52, 5 , 7 },
{ 377, 52, 0 , 0 },
{ 385, 52, 0 , 0 },
{ 393, 52, 5 , 12 },
{ 406, 52, 5 , 9 },
{ 419, 52, 7 , 9 },
{ 434, 52, 1 , 1 },
{ 443, 52, 5 , 10 },
{ 456, 52, 0 , 0 },
{ 464, 52, 0 , 0 },
{ 472, 52, 6 , 5 },
{ 486, 52, 9 , 9 },
{ 4, 76, 9 , 7 },
{ 21, 76, 5 , 11 },
{ 34, 76, 5 , 9 },
{ 47, 76, 5 , 12 },
{ 60, 76, 5 , 12 },
{ 73, 76, 5 , 12 },
{ 86, 76, 6 , 12 },
{ 100, 76, 5 , 11 },
{ 113, 76, 5 , 13 },
{ 126, 76, 9 , 9 },
{ 143, 76, 5 , 12 },
{ 156, 76, 5 , 12 },
{ 169, 76, 5 , 12 },
{ 182, 76, 5 , 12 },
{ 195, 76, 5 , 11 },
{ 208, 76, 2 , 12 },
{ 218, 76, 2 , 12 },
{ 228, 76, 3 , 12 },
{ 239, 76, 3 , 11 },
{ 250, 76, 6 , 9 },
{ 264, 76, 6 , 12 },
{ 278, 76, 5 , 12 },
{ 291, 76, 5 , 12 },
{ 304, 76, 5 , 12 },
{ 317, 76, 6 , 12 },
{ 331, 76, 5 , 11 },
{ 344, 76, 5 , 5 },
{ 357, 76, 7 , 9 },
{ 372, 76, 5 , 12 },
{ 385, 76, 5 , 12 },
{ 398, 76, 5 , 12 },
{ 411, 76, 5 , 11 },
{ 424, 76, 5 , 12 },
{ 437, 76, 5 , 9 },
{ 450, 76, 5 , 9 },
{ 463, 76, 5 , 10 },
{ 476, 76, 5 , 10 },
{ 489, 76, 5 , 10 },
{ 4, 100, 6 , 10 },
{ 18, 100, 5 , 9 },
{ 31, 100, 5 , 11 },
{ 44, 100, 9 , 7 },
{ 61, 100, 5 , 10 },
{ 74, 100, 5 , 10 },
{ 87, 100, 5 , 10 },
{ 100, 100, 5 , 10 },
{ 113, 100, 5 , 9 },
{ 126, 100, 2 , 10 },
{ 136, 100, 2 , 10 },
{ 146, 100, 3 , 10 },
{ 157, 100, 3 , 9 },
{ 168, 100, 6 , 9 },
{ 182, 100, 6 , 10 },
{ 196, 100, 5 , 10 },
{ 209, 100, 5 , 10 },
{ 222, 100, 5 , 10 },
{ 235, 100, 6 , 10 },
{ 249, 100, 5 , 9 },
{ 262, 100, 5 , 5 },
{ 275, 100, 7 , 7 },
{ 290, 100, 5 , 10 },
{ 303, 100, 5 , 10 },
{ 316, 100, 5 , 10 },
{ 329, 100, 5 , 9 },
{ 342, 100, 5 , 12 },
{ 355, 100, 5 , 11 },
{ 368, 100, 5 , 11 },
};
// Font glyphs info data
// NOTE: No glyphs.image data provided
static const GlyphInfo darkFontGlyphs[189] = {
{ 32, 0, 0, 4, { 0 }},
{ 33, 2, 4, 5, { 0 }},
{ 34, 2, 4, 7, { 0 }},
{ 35, 1, 4, 8, { 0 }},
{ 36, 1, 2, 7, { 0 }},
{ 37, 1, 4, 9, { 0 }},
{ 38, 1, 4, 7, { 0 }},
{ 39, 2, 4, 5, { 0 }},
{ 40, 3, 4, 7, { 0 }},
{ 41, 1, 4, 7, { 0 }},
{ 42, 1, 4, 7, { 0 }},
{ 43, 1, 6, 7, { 0 }},
{ 44, 1, 12, 5, { 0 }},
{ 45, 1, 8, 6, { 0 }},
{ 46, 2, 12, 5, { 0 }},
{ 47, 1, 4, 5, { 0 }},
{ 48, 1, 4, 7, { 0 }},
{ 49, 2, 4, 7, { 0 }},
{ 50, 1, 4, 7, { 0 }},
{ 51, 1, 4, 7, { 0 }},
{ 52, 1, 4, 7, { 0 }},
{ 53, 1, 4, 7, { 0 }},
{ 54, 1, 4, 7, { 0 }},
{ 55, 1, 4, 7, { 0 }},
{ 56, 1, 4, 7, { 0 }},
{ 57, 1, 4, 7, { 0 }},
{ 58, 2, 6, 5, { 0 }},
{ 59, 1, 6, 5, { 0 }},
{ 60, 1, 6, 5, { 0 }},
{ 61, 1, 7, 6, { 0 }},
{ 62, 1, 6, 5, { 0 }},
{ 63, 1, 4, 7, { 0 }},
{ 64, 1, 4, 9, { 0 }},
{ 65, 1, 4, 7, { 0 }},
{ 66, 1, 4, 7, { 0 }},
{ 67, 1, 4, 7, { 0 }},
{ 68, 1, 4, 7, { 0 }},
{ 69, 1, 4, 7, { 0 }},
{ 70, 1, 4, 7, { 0 }},
{ 71, 1, 4, 7, { 0 }},
{ 72, 1, 4, 7, { 0 }},
{ 73, 2, 4, 5, { 0 }},
{ 74, 1, 4, 7, { 0 }},
{ 75, 1, 4, 7, { 0 }},
{ 76, 1, 4, 7, { 0 }},
{ 77, 1, 4, 9, { 0 }},
{ 78, 1, 4, 7, { 0 }},
{ 79, 1, 4, 7, { 0 }},
{ 80, 1, 4, 7, { 0 }},
{ 81, 1, 4, 7, { 0 }},
{ 82, 1, 4, 7, { 0 }},
{ 83, 1, 4, 7, { 0 }},
{ 84, 1, 4, 7, { 0 }},
{ 85, 1, 4, 7, { 0 }},
{ 86, 1, 4, 7, { 0 }},
{ 87, 1, 4, 9, { 0 }},
{ 88, 1, 4, 7, { 0 }},
{ 89, 1, 4, 7, { 0 }},
{ 90, 1, 4, 7, { 0 }},
{ 91, 3, 4, 7, { 0 }},
{ 92, 1, 4, 5, { 0 }},
{ 93, 1, 4, 7, { 0 }},
{ 94, 1, 4, 7, { 0 }},
{ 95, 0, 14, 5, { 0 }},
{ 96, 1, 4, 5, { 0 }},
{ 97, 1, 6, 7, { 0 }},
{ 98, 1, 4, 7, { 0 }},
{ 99, 1, 6, 7, { 0 }},
{ 100, 1, 4, 7, { 0 }},
{ 101, 1, 6, 7, { 0 }},
{ 102, 1, 4, 6, { 0 }},
{ 103, 1, 6, 7, { 0 }},
{ 104, 1, 4, 7, { 0 }},
{ 105, 2, 4, 5, { 0 }},
{ 106, 1, 4, 7, { 0 }},
{ 107, 1, 4, 7, { 0 }},
{ 108, 2, 4, 5, { 0 }},
{ 109, 1, 6, 9, { 0 }},
{ 110, 1, 6, 7, { 0 }},
{ 111, 1, 6, 7, { 0 }},
{ 112, 1, 6, 7, { 0 }},
{ 113, 1, 6, 7, { 0 }},
{ 114, 1, 6, 7, { 0 }},
{ 115, 1, 6, 7, { 0 }},
{ 116, 1, 5, 6, { 0 }},
{ 117, 1, 6, 7, { 0 }},
{ 118, 1, 6, 7, { 0 }},
{ 119, 1, 6, 9, { 0 }},
{ 120, 1, 6, 7, { 0 }},
{ 121, 1, 6, 7, { 0 }},
{ 122, 1, 6, 7, { 0 }},
{ 123, 2, 4, 7, { 0 }},
{ 124, 2, 4, 5, { 0 }},
{ 125, 1, 4, 7, { 0 }},
{ 126, 1, 4, 8, { 0 }},
{ 161, 2, 6, 5, { 0 }},
{ 162, 1, 4, 7, { 0 }},
{ 163, 1, 4, 8, { 0 }},
{ 8364, 1, 4, 8, { 0 }},
{ 165, 1, 4, 7, { 0 }},
{ 352, 1, 1, 7, { 0 }},
{ 167, 0, 0, 0, { 0 }},
{ 353, 1, 3, 7, { 0 }},
{ 169, 1, 4, 9, { 0 }},
{ 170, 0, 0, 0, { 0 }},
{ 171, 1, 6, 8, { 0 }},
{ 172, 1, 8, 7, { 0 }},
{ 174, 1, 4, 9, { 0 }},
{ 175, 0, 0, 0, { 0 }},
{ 176, 1, 4, 6, { 0 }},
{ 177, 1, 6, 7, { 0 }},
{ 178, 0, 0, 0, { 0 }},
{ 179, 0, 0, 0, { 0 }},
{ 381, 1, 1, 7, { 0 }},
{ 181, 1, 6, 7, { 0 }},
{ 182, 1, 4, 9, { 0 }},
{ 183, 2, 8, 5, { 0 }},
{ 382, 1, 3, 7, { 0 }},
{ 185, 0, 0, 0, { 0 }},
{ 186, 0, 0, 0, { 0 }},
{ 187, 1, 6, 8, { 0 }},
{ 338, 1, 4, 11, { 0 }},
{ 339, 1, 6, 11, { 0 }},
{ 376, 1, 2, 7, { 0 }},
{ 191, 1, 6, 7, { 0 }},
{ 192, 1, 1, 7, { 0 }},
{ 193, 1, 1, 7, { 0 }},
{ 194, 1, 1, 7, { 0 }},
{ 195, 1, 1, 7, { 0 }},
{ 196, 1, 2, 7, { 0 }},
{ 197, 1, 0, 7, { 0 }},
{ 198, 1, 4, 11, { 0 }},
{ 199, 1, 4, 7, { 0 }},
{ 200, 1, 1, 7, { 0 }},
{ 201, 1, 1, 7, { 0 }},
{ 202, 1, 1, 7, { 0 }},
{ 203, 1, 2, 7, { 0 }},
{ 204, 1, 1, 5, { 0 }},
{ 205, 2, 1, 5, { 0 }},
{ 206, 1, 1, 5, { 0 }},
{ 207, 1, 2, 5, { 0 }},
{ 208, 0, 4, 7, { 0 }},
{ 209, 1, 1, 7, { 0 }},
{ 210, 1, 1, 7, { 0 }},
{ 211, 1, 1, 7, { 0 }},
{ 212, 1, 1, 7, { 0 }},
{ 213, 1, 1, 7, { 0 }},
{ 214, 1, 2, 7, { 0 }},
{ 215, 1, 6, 7, { 0 }},
{ 216, 0, 4, 7, { 0 }},
{ 217, 1, 1, 7, { 0 }},
{ 218, 1, 1, 7, { 0 }},
{ 219, 1, 1, 7, { 0 }},
{ 220, 1, 2, 7, { 0 }},
{ 221, 1, 1, 7, { 0 }},
{ 222, 1, 4, 7, { 0 }},
{ 223, 1, 4, 7, { 0 }},
{ 224, 1, 3, 7, { 0 }},
{ 225, 1, 3, 7, { 0 }},
{ 226, 1, 3, 7, { 0 }},
{ 227, 1, 3, 7, { 0 }},
{ 228, 1, 4, 7, { 0 }},
{ 229, 1, 2, 7, { 0 }},
{ 230, 1, 6, 11, { 0 }},
{ 231, 1, 6, 7, { 0 }},
{ 232, 1, 3, 7, { 0 }},
{ 233, 1, 3, 7, { 0 }},
{ 234, 1, 3, 7, { 0 }},
{ 235, 1, 4, 7, { 0 }},
{ 236, 1, 3, 5, { 0 }},
{ 237, 2, 3, 5, { 0 }},
{ 238, 1, 3, 5, { 0 }},
{ 239, 1, 4, 5, { 0 }},
{ 240, 1, 4, 7, { 0 }},
{ 241, 1, 3, 7, { 0 }},
{ 242, 1, 3, 7, { 0 }},
{ 243, 1, 3, 7, { 0 }},
{ 244, 1, 3, 7, { 0 }},
{ 245, 1, 3, 7, { 0 }},
{ 246, 1, 4, 7, { 0 }},
{ 247, 1, 6, 7, { 0 }},
{ 248, 0, 6, 7, { 0 }},
{ 249, 1, 3, 7, { 0 }},
{ 250, 1, 3, 7, { 0 }},
{ 251, 1, 3, 7, { 0 }},
{ 252, 1, 4, 7, { 0 }},
{ 253, 1, 3, 7, { 0 }},
{ 254, 1, 4, 7, { 0 }},
{ 255, 1, 4, 7, { 0 }},
};
// Style loading function: Dark
static void GuiLoadStyleDark(void)
{
// Load style properties provided
// NOTE: Default properties are propagated
for (int i = 0; i < DARK_STYLE_PROPS_COUNT; i++)
{
GuiSetStyle(darkStyleProps[i].controlId, darkStyleProps[i].propertyId, darkStyleProps[i].propertyValue);
}
// Custom font loading
// NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function
int darkFontDataSize = 0;
unsigned char *data = DecompressData(darkFontData, DARK_STYLE_FONT_ATLAS_COMP_SIZE, &darkFontDataSize);
Image imFont = { data, 512, 256, 1, 2 };
Font font = { 0 };
font.baseSize = 16;
font.glyphCount = 189;
// Load texture from image
font.texture = LoadTextureFromImage(imFont);
UnloadImage(imFont); // Uncompressed image data can be unloaded from memory
// Copy char recs data from global fontRecs
// NOTE: Required to avoid issues if trying to free font
font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle));
memcpy(font.recs, darkFontRecs, font.glyphCount*sizeof(Rectangle));
// Copy font char info data from global fontChars
// NOTE: Required to avoid issues if trying to free font
font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo));
memcpy(font.glyphs, darkFontGlyphs, font.glyphCount*sizeof(GlyphInfo));
GuiSetFont(font);
// Setup a white rectangle on the font to be used on shapes drawing,
// it makes possible to draw shapes and text (full UI) in a single draw call
Rectangle fontWhiteRec = { 510, 254, 1, 1 };
SetShapesTexture(font.texture, fontWhiteRec);
//-----------------------------------------------------------------
// TODO: Custom user style setup: Set specific properties here (if required)
// i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT
}

View File

@ -0,0 +1,598 @@
//////////////////////////////////////////////////////////////////////////////////
// //
// StyleAsCode exporter v2.0 - Style data exported as a values array //
// //
// USAGE: On init call: GuiLoadStyleEnefete(); //
// //
// more info and bugs-report: github.com/raysan5/raygui //
// feedback and support: ray[at]raylibtech.com //
// //
// Copyright (c) 2020-2025 raylib technologies (@raylibtech) //
// //
//////////////////////////////////////////////////////////////////////////////////
#define ENEFETE_STYLE_PROPS_COUNT 17
// Custom style name: Enefete
static const GuiStyleProp enefeteStyleProps[ENEFETE_STYLE_PROPS_COUNT] = {
{ 0, 0, (int)0x1980d5ff }, // DEFAULT_BORDER_COLOR_NORMAL
{ 0, 1, (int)0x4df3ebff }, // DEFAULT_BASE_COLOR_NORMAL
{ 0, 2, (int)0x103e60ff }, // DEFAULT_TEXT_COLOR_NORMAL
{ 0, 3, (int)0xe7e2f7ff }, // DEFAULT_BORDER_COLOR_FOCUSED
{ 0, 4, (int)0x23d4ddff }, // DEFAULT_BASE_COLOR_FOCUSED
{ 0, 5, (int)0xf1f1f1ff }, // DEFAULT_TEXT_COLOR_FOCUSED
{ 0, 6, (int)0x6413a6ff }, // DEFAULT_BORDER_COLOR_PRESSED
{ 0, 7, (int)0xea66d9ff }, // DEFAULT_BASE_COLOR_PRESSED
{ 0, 8, (int)0x9f00bbff }, // DEFAULT_TEXT_COLOR_PRESSED
{ 0, 9, (int)0x4b909eff }, // DEFAULT_BORDER_COLOR_DISABLED
{ 0, 10, (int)0x73c7d0ff }, // DEFAULT_BASE_COLOR_DISABLED
{ 0, 11, (int)0x448894ff }, // DEFAULT_TEXT_COLOR_DISABLED
{ 0, 16, (int)0x00000010 }, // DEFAULT_TEXT_SIZE
{ 0, 17, (int)0x00000000 }, // DEFAULT_TEXT_SPACING
{ 0, 18, (int)0x1d3f6cff }, // DEFAULT_LINE_COLOR
{ 0, 19, (int)0x29c9e5ff }, // DEFAULT_BACKGROUND_COLOR
{ 0, 20, (int)0x00000008 }, // DEFAULT_TEXT_LINE_SPACING
};
// WARNING: This style uses a custom font: "GMSN.ttf" (size: 16, spacing: 0)
#define ENEFETE_STYLE_FONT_ATLAS_COMP_SIZE 2434
// Font atlas image pixels data: DEFLATE compressed
static unsigned char enefeteFontData[ENEFETE_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed,
0xdd, 0x5b, 0x6e, 0xe4, 0x36, 0x10, 0x05, 0x50, 0xee, 0x7f, 0xa1, 0xd9, 0x06, 0x83, 0x20, 0x18, 0x24, 0xe3, 0xb1, 0x45,
0xb2, 0xaa, 0xa8, 0x57, 0x9f, 0x1c, 0xe4, 0xc7, 0x1a, 0xb7, 0xd5, 0x94, 0xae, 0x44, 0x3d, 0x58, 0xec, 0x0d, 0x00, 0x00,
0x00, 0xf8, 0x78, 0xff, 0xfc, 0xf7, 0xfd, 0xcf, 0xbe, 0x5b, 0x72, 0xbc, 0xec, 0xd7, 0xbf, 0x18, 0x2d, 0xe9, 0x3f, 0xae,
0x49, 0x3f, 0x58, 0x36, 0xf7, 0xb7, 0x62, 0xeb, 0xd5, 0x97, 0xda, 0xa6, 0x1f, 0xb4, 0x5a, 0x4b, 0xff, 0xbc, 0x1d, 0xb6,
0x7d, 0x0f, 0xb4, 0x5e, 0x3b, 0x5c, 0xe7, 0x9f, 0x7f, 0x73, 0xbc, 0xa4, 0x72, 0x3d, 0x57, 0xda, 0xb4, 0x72, 0xfb, 0xac,
0xb4, 0x60, 0x5b, 0x5e, 0x7a, 0xdc, 0x52, 0x6d, 0xaa, 0x1d, 0xc7, 0x9f, 0xdc, 0x6f, 0x92, 0xff, 0xe3, 0x6f, 0xf3, 0x2b,
0x83, 0x47, 0x5b, 0x7f, 0x7e, 0xdf, 0x68, 0xd3, 0xc7, 0x84, 0xff, 0xfe, 0x76, 0x5d, 0x42, 0xb3, 0x9f, 0xd2, 0x87, 0x47,
0xc2, 0x95, 0x16, 0x3a, 0x6e, 0xbd, 0x16, 0xca, 0xc4, 0xe8, 0x33, 0x23, 0xeb, 0x32, 0xb3, 0x6c, 0x6e, 0xfd, 0x62, 0xfb,
0xfc, 0xf8, 0xf3, 0x8e, 0xf7, 0xb4, 0xa3, 0x2d, 0x3c, 0xda, 0x73, 0x8f, 0xbf, 0xdf, 0xfa, 0x56, 0xcd, 0xa4, 0x7e, 0x4f,
0xfe, 0xfb, 0xff, 0x72, 0xd6, 0x83, 0x19, 0xcc, 0x9f, 0x1b, 0xd6, 0xcf, 0x0a, 0xc7, 0xc7, 0xac, 0x7d, 0x2d, 0x7c, 0xd4,
0x4e, 0x3d, 0xb0, 0x0f, 0xaf, 0x6f, 0xb3, 0xe8, 0xdf, 0xd9, 0x91, 0xff, 0x8a, 0x14, 0xb7, 0x89, 0x33, 0x62, 0xa4, 0x4f,
0x71, 0xdc, 0xe3, 0xcc, 0x27, 0x7c, 0xb4, 0x2e, 0x91, 0xfe, 0x4c, 0xbe, 0x2d, 0x57, 0xfb, 0x1c, 0xfb, 0xf2, 0x5f, 0x71,
0xbe, 0x5d, 0x3f, 0x97, 0xec, 0x6b, 0xdf, 0x99, 0xf3, 0xf5, 0xfd, 0xf3, 0xbf, 0xfe, 0xdd, 0x2a, 0xf2, 0x5f, 0xb3, 0x55,
0xd6, 0xf3, 0xdf, 0xe5, 0x7f, 0xfa, 0xfc, 0xff, 0x73, 0xab, 0xf7, 0xe0, 0xf5, 0x57, 0xfe, 0xaa, 0xbd, 0xaa, 0x9f, 0x7f,
0x6d, 0xfe, 0x47, 0xd7, 0x83, 0x6d, 0x39, 0xff, 0xb1, 0xab, 0xcf, 0xc8, 0xd5, 0x46, 0x55, 0xff, 0x7f, 0x6f, 0xef, 0xe1,
0xf8, 0xea, 0x31, 0x92, 0xf0, 0xb5, 0x7b, 0x1e, 0x35, 0x9f, 0x7c, 0x45, 0xfe, 0xdb, 0xc4, 0xda, 0xf4, 0xe1, 0xf5, 0xff,
0xec, 0x11, 0x7e, 0x2d, 0xff, 0x75, 0xe7, 0x8e, 0x2b, 0xf3, 0xdf, 0x83, 0x77, 0xc4, 0xaa, 0xaf, 0xe3, 0xe3, 0xdf, 0x6d,
0xed, 0xfe, 0xdc, 0x79, 0xd7, 0xff, 0xa3, 0x7e, 0x60, 0x26, 0xff, 0x9f, 0xd2, 0xff, 0x9f, 0xe9, 0x69, 0x8f, 0x5a, 0x71,
0xfe, 0x78, 0x76, 0xc5, 0xd9, 0xfc, 0xda, 0xfc, 0xf7, 0xa9, 0x7b, 0xd8, 0xf7, 0xce, 0x7f, 0x5b, 0xbe, 0xca, 0xab, 0xdc,
0x77, 0xa3, 0x7b, 0xd4, 0x68, 0xcf, 0x9d, 0x39, 0xaa, 0xdd, 0x33, 0xff, 0xb1, 0xfd, 0xb9, 0x0f, 0x7b, 0xf9, 0x3d, 0x91,
0xff, 0xf6, 0x9a, 0xfc, 0xf7, 0xe0, 0xdd, 0x8e, 0x9f, 0xfb, 0x7b, 0xb1, 0xfb, 0x71, 0x91, 0x9e, 0x7c, 0xa6, 0x8f, 0x52,
0x95, 0xff, 0x7b, 0x6c, 0x49, 0xe7, 0xff, 0x8a, 0xfb, 0xff, 0xed, 0xb0, 0x87, 0xff, 0x59, 0xf9, 0x3f, 0x7e, 0xfe, 0xd7,
0x6e, 0xff, 0xac, 0x2e, 0x9a, 0xff, 0x9a, 0xfb, 0xff, 0xe7, 0x1f, 0xad, 0x67, 0xae, 0x5c, 0x73, 0xf9, 0xbf, 0xd3, 0xf3,
0xbf, 0xbd, 0xf9, 0x1f, 0x3d, 0xf5, 0x7e, 0x53, 0xff, 0xbf, 0xf2, 0x3e, 0x7e, 0xfc, 0x9d, 0x9b, 0x7d, 0xef, 0x14, 0xb5,
0xd0, 0x9b, 0x5c, 0xf7, 0x4c, 0x7f, 0xf4, 0x39, 0x50, 0xee, 0x2e, 0xdd, 0xd5, 0xef, 0xff, 0xd4, 0xb7, 0xe0, 0x79, 0xeb,
0xd3, 0x6f, 0xdc, 0x67, 0xe4, 0x5d, 0x6f, 0xc9, 0xda, 0xbb, 0xce, 0x7c, 0x3e, 0x1b, 0xff, 0x5b, 0xb6, 0x0f, 0x3b, 0xcf,
0x6c, 0x5a, 0xe2, 0x19, 0xf7, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc9, 0xe3,
0x17, 0x22, 0x63, 0x0d, 0xa3, 0x75, 0x08, 0x6a, 0xeb, 0x21, 0xf4, 0x2f, 0x75, 0x58, 0x57, 0x3f, 0x7b, 0x76, 0xac, 0x65,
0x66, 0x9c, 0x66, 0xed, 0xef, 0x56, 0x55, 0x96, 0xa8, 0x1d, 0x79, 0x3e, 0xae, 0x77, 0xb3, 0x5a, 0xad, 0x39, 0x56, 0x05,
0x6d, 0xbd, 0xa6, 0x79, 0xa6, 0x0e, 0x5f, 0xf5, 0xd8, 0xea, 0x9a, 0xfa, 0x68, 0xf3, 0x63, 0xde, 0x6b, 0x2a, 0x8d, 0xd4,
0xe5, 0x7f, 0x7d, 0x3b, 0xf4, 0x2f, 0xeb, 0xd1, 0x2f, 0xa8, 0xc4, 0x50, 0xbf, 0x74, 0xee, 0xe7, 0x77, 0xca, 0xff, 0xec,
0x31, 0x38, 0xbb, 0xf7, 0xc6, 0x47, 0xdc, 0x8d, 0xaa, 0x4f, 0x5c, 0x5f, 0x5b, 0xa5, 0x15, 0xd5, 0x47, 0xad, 0xcf, 0x7f,
0x3b, 0xe9, 0xfc, 0x1f, 0xcd, 0x7f, 0x1f, 0xce, 0x66, 0x73, 0xdf, 0xfc, 0xaf, 0xd7, 0x9d, 0xc8, 0xfe, 0xd5, 0xdc, 0x4c,
0x0e, 0xf1, 0x5a, 0xe3, 0xf9, 0xfc, 0xe7, 0x2a, 0x05, 0x9d, 0x7b, 0x6e, 0xbd, 0x3e, 0xff, 0xd1, 0x16, 0xb9, 0x2a, 0xff,
0xf1, 0xbd, 0xa4, 0x0f, 0xab, 0x59, 0xdf, 0x31, 0xff, 0xfd, 0xe3, 0xf3, 0x5f, 0x5f, 0xcb, 0x37, 0x9a, 0x80, 0x48, 0x1d,
0xf4, 0x99, 0xeb, 0xea, 0xd5, 0x2b, 0xbb, 0xf8, 0x75, 0x57, 0xf4, 0xfc, 0x3f, 0xfa, 0xfd, 0x99, 0x6f, 0x72, 0x75, 0xfe,
0xdb, 0x30, 0xe1, 0x3d, 0x91, 0xd2, 0xf8, 0x1d, 0x90, 0x4c, 0xcd, 0xab, 0x6b, 0xf2, 0xdf, 0x42, 0x33, 0x06, 0xc6, 0xcf,
0xf3, 0x77, 0xcf, 0x7f, 0xf5, 0xb5, 0x41, 0xf4, 0x8e, 0x41, 0xf5, 0x3a, 0xde, 0xef, 0xfa, 0xbf, 0x17, 0xf4, 0x12, 0x77,
0xe4, 0x3f, 0xdb, 0x3e, 0xd1, 0x34, 0xc5, 0xf2, 0x3f, 0x7f, 0x76, 0x8f, 0xcd, 0x26, 0x10, 0x5b, 0xf6, 0xde, 0xfc, 0xd7,
0xd6, 0x4f, 0x5d, 0xbf, 0x57, 0xfc, 0xa6, 0xfc, 0x47, 0xaf, 0xff, 0xe7, 0xaf, 0xb8, 0xee, 0x95, 0xff, 0x36, 0x31, 0x3f,
0xcf, 0xd9, 0xf9, 0x1f, 0x55, 0x5b, 0x7d, 0x5b, 0xfe, 0xa3, 0xd9, 0x8a, 0xce, 0x67, 0xd4, 0xc2, 0x67, 0xba, 0xb7, 0x9f,
0xff, 0xdb, 0x4b, 0xf3, 0x1f, 0x9f, 0x5f, 0xe6, 0x59, 0xf9, 0xaf, 0xee, 0x35, 0x5c, 0x5f, 0x57, 0x2f, 0x7a, 0xb7, 0x31,
0x7e, 0x97, 0xf2, 0xdd, 0xfd, 0xff, 0xbe, 0xa1, 0x17, 0x9e, 0x7d, 0xfe, 0x7f, 0x55, 0xfe, 0x77, 0x3d, 0xff, 0x6b, 0xd3,
0x73, 0xfe, 0xed, 0x5a, 0x2b, 0xf9, 0xaf, 0xce, 0x7f, 0xe5, 0xdc, 0x89, 0x6b, 0xff, 0xa2, 0xfa, 0xfd, 0x9f, 0xfa, 0x3b,
0x69, 0xfb, 0xdf, 0xff, 0xd9, 0xd3, 0x3e, 0x6d, 0x6a, 0xc6, 0xb4, 0xf5, 0xbf, 0xda, 0x26, 0x67, 0x35, 0x8e, 0xad, 0x73,
0xfd, 0xdb, 0x37, 0x77, 0xcf, 0x7f, 0xec, 0x6d, 0x83, 0xe8, 0x6f, 0xc6, 0x7f, 0xe3, 0x3e, 0x73, 0x81, 0x7d, 0xe6, 0x5b,
0x94, 0x5a, 0xa1, 0xba, 0x85, 0xb4, 0x2a, 0x8e, 0x00, 0xef, 0x7a, 0xcf, 0x7c, 0xd7, 0xbf, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xbc, 0xd1, 0x2b, 0xb3, 0x35, 0xb7, 0xff, 0xfc, 0x69, 0x0f, 0x8d, 0x77,
0xed, 0xc9, 0xdf, 0xeb, 0xcb, 0x75, 0x30, 0xd6, 0xc6, 0x9d, 0x56, 0xd4, 0x60, 0xa8, 0xae, 0x23, 0x35, 0x6e, 0x97, 0xd9,
0x2d, 0x3d, 0x1e, 0x49, 0xbc, 0xba, 0x87, 0x44, 0xc6, 0xf5, 0x64, 0x2a, 0xea, 0x64, 0xe6, 0x12, 0x88, 0x57, 0x42, 0x6c,
0x8b, 0x9f, 0x1a, 0xdb, 0x6a, 0x91, 0xf1, 0xe1, 0x3b, 0xf3, 0x1f, 0xab, 0x2d, 0x79, 0x45, 0xa5, 0xb5, 0xf8, 0xde, 0x54,
0xbb, 0x86, 0xf5, 0xad, 0x32, 0xb7, 0xb6, 0xb9, 0x9f, 0x67, 0xc6, 0xf4, 0xe7, 0x6a, 0x0f, 0xac, 0xb6, 0x44, 0x9f, 0xaa,
0x96, 0xb2, 0xfa, 0x9b, 0x3f, 0xff, 0xde, 0xf1, 0xb2, 0x3e, 0x55, 0x39, 0x62, 0xed, 0x53, 0xbf, 0xff, 0xb7, 0xfb, 0x2a,
0x27, 0xbc, 0x23, 0xff, 0x2d, 0x70, 0x94, 0x3d, 0x37, 0xff, 0xf1, 0xe3, 0x54, 0x2b, 0xac, 0xd2, 0xb3, 0x3e, 0x37, 0x46,
0x64, 0xe4, 0x6e, 0xbe, 0x46, 0xd0, 0x19, 0x15, 0x35, 0xfe, 0xcc, 0xd7, 0xca, 0x56, 0x9b, 0x4b, 0xff, 0xf7, 0xc7, 0xb8,
0x76, 0xd0, 0xdb, 0x9a, 0xcd, 0x7f, 0x0f, 0xd4, 0x1e, 0xa9, 0xa9, 0xc8, 0xf7, 0x9c, 0xfc, 0xcf, 0x5c, 0x6d, 0x9c, 0x97,
0xff, 0xf1, 0xcf, 0xeb, 0xaa, 0x6a, 0x57, 0xd6, 0xda, 0x19, 0xd5, 0x5a, 0x6e, 0xa1, 0x2d, 0xd2, 0x83, 0xc7, 0x95, 0x5e,
0x5c, 0xcf, 0xbc, 0x7f, 0xf9, 0x7f, 0xf6, 0x4c, 0x3d, 0x9b, 0xff, 0xd5, 0xbf, 0x78, 0x4d, 0xff, 0x7f, 0x65, 0x7f, 0x79,
0x52, 0xfe, 0xdb, 0x54, 0x2d, 0xb2, 0x7b, 0x9f, 0xff, 0x2b, 0x6b, 0x6a, 0xd5, 0xe7, 0x3f, 0x96, 0xf0, 0xc8, 0xfe, 0x3e,
0x3f, 0xe3, 0xc1, 0xda, 0x76, 0x1b, 0xf7, 0xf2, 0x7b, 0xa2, 0xff, 0x9f, 0xcf, 0x7f, 0x5d, 0x9f, 0x67, 0xed, 0xea, 0xf9,
0x8a, 0xfc, 0xf7, 0x44, 0x65, 0xf4, 0xfd, 0xd7, 0xff, 0xa3, 0x7e, 0x62, 0xb4, 0x55, 0xea, 0xe7, 0xa6, 0xaa, 0xac, 0xb6,
0xbd, 0x9a, 0xff, 0xcc, 0xf9, 0x3f, 0x7a, 0x1f, 0x22, 0xd3, 0x43, 0x5c, 0xbb, 0x1e, 0xcf, 0x1f, 0x01, 0xd6, 0xfa, 0xff,
0x67, 0xdc, 0xff, 0xef, 0xa7, 0x5d, 0xff, 0xb7, 0xd4, 0x2c, 0x46, 0x95, 0xfd, 0xff, 0x96, 0xe8, 0x65, 0x66, 0x8e, 0x36,
0x91, 0xd6, 0x5e, 0x6f, 0xb3, 0x2b, 0xcf, 0xff, 0xb9, 0xd9, 0xe6, 0xda, 0xb6, 0x7a, 0xa7, 0x91, 0xfe, 0xff, 0x9e, 0x14,
0x56, 0xfc, 0xc5, 0xca, 0xeb, 0xff, 0xeb, 0xe7, 0x66, 0xc8, 0xe4, 0xff, 0xac, 0xde, 0xd3, 0xfe, 0x6f, 0x5e, 0x5b, 0x47,
0xfa, 0x0e, 0xd7, 0xff, 0x91, 0xfb, 0xff, 0xd1, 0x9a, 0xc7, 0xe3, 0xb3, 0x71, 0xff, 0xf1, 0x0a, 0xff, 0xcc, 0xb3, 0xf1,
0xf9, 0x47, 0x9c, 0xda, 0xeb, 0x7f, 0xf9, 0xdf, 0xf3, 0xdd, 0x2b, 0x6b, 0xe7, 0xee, 0xce, 0xff, 0x5c, 0xcf, 0x2a, 0x36,
0x23, 0x62, 0x6e, 0xc6, 0xe4, 0xe8, 0x35, 0x5d, 0x3b, 0x75, 0x4f, 0x6f, 0x17, 0xf4, 0xfe, 0xab, 0x67, 0xe4, 0x79, 0xe7,
0xfb, 0x50, 0xef, 0xf8, 0x06, 0x67, 0x1c, 0xcf, 0x7b, 0x61, 0xcf, 0x34, 0x7f, 0xff, 0x2f, 0x7e, 0xb4, 0x6a, 0x17, 0xd4,
0x20, 0x3e, 0xfb, 0x2f, 0xc6, 0x9f, 0x56, 0x20, 0xff, 0x6b, 0xf9, 0xdf, 0xdf, 0x4b, 0xaa, 0x7a, 0x87, 0xe1, 0xd3, 0xf6,
0x14, 0x2d, 0xf3, 0x29, 0xdb, 0x75, 0xfd, 0x4e, 0xef, 0x5b, 0x5a, 0xc2, 0x3e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x6b, 0xf4, 0x4f, 0xac, 0x9a, 0xc2, 0x6c, 0x2d, 0xab, 0xbe, 0x30, 0x3a, 0xb3, 0x0d,
0xeb, 0x33, 0x67, 0x3f, 0xe7, 0xeb, 0xcc, 0x05, 0x7d, 0xf0, 0x2f, 0x5a, 0x60, 0x4d, 0x7b, 0x78, 0xac, 0xf1, 0xfa, 0x3c,
0x0c, 0x5f, 0xd7, 0xb8, 0x25, 0x5a, 0x64, 0x3c, 0x92, 0x77, 0x7d, 0xc6, 0x86, 0xbd, 0xdf, 0xb9, 0xa6, 0x22, 0x7a, 0xa4,
0xb6, 0xdf, 0x6c, 0x85, 0x92, 0xb3, 0x5b, 0x25, 0x33, 0x62, 0xbb, 0x05, 0x8e, 0x0d, 0xa3, 0x7a, 0x42, 0x2b, 0xb5, 0xba,
0xd6, 0x8e, 0x4f, 0x73, 0x55, 0xf8, 0xd6, 0xc7, 0xa5, 0xcf, 0xd5, 0xf0, 0x6c, 0x1b, 0xeb, 0x5e, 0xaf, 0xef, 0xed, 0xf1,
0xa4, 0xe4, 0x96, 0xce, 0x8d, 0xc7, 0xdf, 0xf1, 0x9d, 0xe3, 0x35, 0x6b, 0xe7, 0x3f, 0x27, 0x73, 0xf6, 0x1b, 0xa7, 0x74,
0x4f, 0xab, 0xc4, 0xd2, 0x9f, 0xa9, 0x08, 0xb3, 0x9e, 0xff, 0x9a, 0xf5, 0x1e, 0xcf, 0x89, 0x10, 0x9b, 0x65, 0x63, 0xa6,
0x86, 0xf7, 0xfb, 0xaa, 0x07, 0xe4, 0xf3, 0xff, 0xa9, 0x35, 0x17, 0x9e, 0xd4, 0x02, 0x7d, 0x31, 0x61, 0x33, 0xbd, 0xf8,
0x9a, 0xfc, 0x8f, 0xe7, 0x4a, 0x3a, 0x3f, 0xff, 0x3d, 0xf4, 0x09, 0xf1, 0x9e, 0xdb, 0x1d, 0x97, 0xe6, 0xf2, 0x3f, 0xde,
0x83, 0xf6, 0x2c, 0xad, 0x9a, 0x29, 0x29, 0x57, 0x87, 0xbc, 0x05, 0xaf, 0x1e, 0x32, 0x4b, 0x23, 0xb5, 0x11, 0x7a, 0xe8,
0x6a, 0x64, 0xcf, 0xf9, 0x3f, 0x7f, 0xfd, 0x3f, 0xdf, 0x6f, 0x8b, 0xdf, 0x3f, 0xc8, 0xec, 0x4b, 0x3b, 0xfa, 0xe1, 0x67,
0x2c, 0x8d, 0xd4, 0x86, 0xbb, 0x6a, 0xe9, 0xee, 0xfc, 0xf7, 0xdf, 0xe6, 0x4a, 0x3c, 0x4a, 0xd4, 0xfa, 0xd1, 0x21, 0x77,
0x64, 0xd9, 0xdb, 0xd7, 0x59, 0xbd, 0xff, 0xb7, 0xba, 0x96, 0x75, 0x73, 0x99, 0x45, 0xab, 0x52, 0x7e, 0xfd, 0xfd, 0xba,
0xf3, 0xff, 0xbe, 0xad, 0xbe, 0x77, 0x69, 0xe6, 0xee, 0xde, 0x5b, 0xf3, 0x3f, 0xd7, 0x6e, 0xef, 0xc8, 0xff, 0xb8, 0x7e,
0x6b, 0x2f, 0xba, 0x4f, 0x71, 0xc6, 0x37, 0x9a, 0xad, 0xc0, 0x9f, 0x9b, 0x63, 0xf6, 0x4d, 0xf9, 0x6f, 0x45, 0xfd, 0xff,
0x33, 0x97, 0xde, 0xa3, 0xff, 0xdf, 0x5f, 0x90, 0xff, 0xec, 0x73, 0x9d, 0x8a, 0x19, 0x8e, 0xcf, 0xce, 0x7f, 0xf6, 0x98,
0x78, 0xaf, 0x6b, 0xe1, 0xec, 0xd2, 0x6c, 0xfe, 0x3f, 0xf5, 0xfc, 0xff, 0x86, 0xfc, 0xe7, 0x9f, 0x65, 0xaf, 0xdc, 0xff,
0x3b, 0xef, 0x1d, 0x88, 0xbe, 0x31, 0xff, 0xed, 0x43, 0xcf, 0xff, 0x35, 0xf3, 0xca, 0x3f, 0x2d, 0xff, 0x33, 0x77, 0x99,
0x9e, 0x9a, 0xff, 0x8a, 0x8c, 0x54, 0xdd, 0xff, 0xaf, 0x7f, 0x0b, 0x6a, 0x67, 0x75, 0xfa, 0xe7, 0x25, 0x7c, 0x9c, 0xff,
0xc8, 0xfb, 0x3f, 0xef, 0xce, 0xff, 0xdc, 0xbb, 0x31, 0xcf, 0xce, 0x7f, 0x4f, 0xce, 0x4a, 0xf3, 0xce, 0xe7, 0xc3, 0xb1,
0x39, 0xa6, 0x9f, 0x97, 0xff, 0xfc, 0x3b, 0x65, 0x6f, 0x7d, 0xfe, 0x97, 0x7b, 0x3b, 0xe0, 0x9a, 0xe7, 0x7f, 0x77, 0x7a,
0xaf, 0x84, 0xb7, 0xbf, 0x55, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0xec,
0xeb, 0xea, 0x88, 0x9d, 0xb9, 0x71, 0x62, 0xd7, 0x54, 0xbe, 0x8f, 0xd4, 0x29, 0x98, 0x59, 0x9f, 0x78, 0xf5, 0x83, 0x48,
0xad, 0xfd, 0xa3, 0x6d, 0x13, 0xad, 0x38, 0x9e, 0xa9, 0x64, 0xb4, 0xeb, 0x3b, 0xae, 0xd7, 0x84, 0x9f, 0xff, 0x0b, 0x73,
0x95, 0x1f, 0x63, 0xb9, 0xb8, 0xfb, 0xb6, 0x9e, 0x1b, 0xa5, 0xb9, 0xb3, 0x4e, 0x7c, 0x4f, 0xd6, 0x34, 0xaf, 0x5f, 0xab,
0x6c, 0x95, 0xfe, 0xd8, 0x3a, 0x47, 0x5a, 0xb8, 0x27, 0xe6, 0x61, 0x69, 0x13, 0x7b, 0x52, 0x75, 0x75, 0x9f, 0xcc, 0xbc,
0x1c, 0xf3, 0x47, 0xe4, 0xca, 0x8a, 0xfd, 0x2d, 0x51, 0xad, 0xff, 0x2e, 0xdb, 0xfa, 0xda, 0xf1, 0xb4, 0xe3, 0x75, 0x7e,
0xce, 0x78, 0xdf, 0xb9, 0xd1, 0xe3, 0xcf, 0xf8, 0x36, 0x33, 0xc7, 0xb2, 0xf5, 0xea, 0x3c, 0xef, 0xac, 0xd9, 0xf0, 0xd9,
0x63, 0x95, 0xb3, 0x95, 0x05, 0x46, 0xc7, 0xba, 0xe7, 0x54, 0xaf, 0xca, 0xd5, 0xbd, 0x9a, 0x69, 0xc5, 0xb3, 0x96, 0x1d,
0xf9, 0x2b, 0x30, 0x0f, 0xdb, 0x95, 0xdf, 0x71, 0x7f, 0xc5, 0x8e, 0xe3, 0x5a, 0x22, 0xf7, 0xde, 0xd6, 0xd9, 0x1a, 0x59,
0xd9, 0x4a, 0x30, 0xd1, 0xf3, 0xff, 0x53, 0xf3, 0x3f, 0x9a, 0x8b, 0xe0, 0xe7, 0x59, 0xc9, 0xce, 0x5b, 0x56, 0x31, 0x93,
0xc1, 0xea, 0x15, 0xd0, 0x8e, 0x65, 0x57, 0x56, 0xec, 0x3a, 0xfb, 0xbb, 0xc6, 0xdb, 0xa8, 0xaa, 0x9f, 0x18, 0x9d, 0xb3,
0x64, 0xb4, 0xec, 0xd3, 0xce, 0xff, 0xfd, 0xf2, 0x65, 0xf3, 0x47, 0xb1, 0xbb, 0xef, 0xdb, 0xfb, 0x67, 0xec, 0x78, 0x42,
0xc6, 0x33, 0xb3, 0x4b, 0xed, 0xcc, 0xff, 0x3d, 0xeb, 0x1d, 0xf7, 0xd4, 0xb9, 0x31, 0x5b, 0xab, 0xef, 0x3e, 0xb9, 0xc9,
0xcc, 0x64, 0x1c, 0x9b, 0xbf, 0xb9, 0x7a, 0x99, 0xfc, 0xdf, 0x3b, 0xff, 0x73, 0xf7, 0x56, 0xee, 0x57, 0xbd, 0x32, 0x3b,
0x4b, 0xef, 0xfb, 0xfb, 0x8b, 0x7d, 0xc3, 0xd3, 0x9a, 0xba, 0xe7, 0x89, 0xf2, 0x7f, 0x97, 0xfe, 0xbf, 0xfc, 0xbf, 0x6f,
0x7f, 0xe9, 0xa9, 0x4a, 0xe6, 0xfa, 0xff, 0xf2, 0xff, 0xe6, 0xfc, 0xf7, 0x47, 0x5c, 0xff, 0xef, 0xda, 0x5f, 0xde, 0x76,
0xff, 0x3f, 0xfa, 0xb4, 0xf7, 0x29, 0xcf, 0x7a, 0xce, 0x78, 0xfe, 0xb7, 0xe7, 0x93, 0x77, 0x56, 0x43, 0x7f, 0xff, 0xf3,
0xde, 0xa7, 0xd4, 0x83, 0xe7, 0xed, 0xfb, 0xa1, 0x36, 0x00, 0xf9, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x76, 0xbe, 0xa9, 0x7f, 0x66, 0xc5, 0xf7, 0xc8, 0xa8, 0xcf, 0xb9, 0xcf, 0x04, 0x62, 0x23, 0x75, 0xce,
0xac, 0xf8, 0x9e, 0x1f, 0x9d, 0x6f, 0x5b, 0xc2, 0xfb, 0xc6, 0x8a, 0xcb, 0x36, 0xec, 0x49, 0x55, 0x7f, 0x48, 0x15, 0xa4,
0x77, 0xcc, 0xcd, 0x01, 0xf2, 0xff, 0x94, 0x0a, 0x69, 0x20, 0xff, 0xf2, 0x0f, 0xf2, 0x2f, 0xff, 0x20, 0xff, 0xf2, 0x0f,
0x6f, 0xbf, 0xff, 0x7f, 0xa7, 0x99, 0x6b, 0xf6, 0xd5, 0x29, 0x06, 0xcf, 0xfe, 0x63, 0x47, 0x87, 0xea, 0x65, 0x6d, 0x78,
0xdc, 0xf0, 0x8c, 0x10, 0xce, 0xca, 0xff, 0x35, 0xcf, 0xf8, 0x57, 0xf3, 0xaf, 0xff, 0x0f, 0x6f, 0xba, 0x1a, 0x89, 0xbc,
0xff, 0x27, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x70, 0x95, 0x7f, 0xff, 0xd3, 0x0e, 0x20, 0xff, 0xc0, 0xc7, 0xe5, 0xff, 0x6f };
// Font glyphs rectangles data (on atlas)
static const Rectangle enefeteFontRecs[189] = {
{ 4, 4, 4 , 16 },
{ 16, 4, 2 , 10 },
{ 26, 4, 5 , 3 },
{ 39, 4, 7 , 10 },
{ 54, 4, 7 , 13 },
{ 69, 4, 7 , 10 },
{ 84, 4, 7 , 10 },
{ 99, 4, 2 , 3 },
{ 109, 4, 3 , 12 },
{ 120, 4, 3 , 12 },
{ 131, 4, 5 , 6 },
{ 144, 4, 6 , 5 },
{ 158, 4, 2 , 4 },
{ 168, 4, 5 , 1 },
{ 181, 4, 2 , 2 },
{ 191, 4, 4 , 10 },
{ 203, 4, 6 , 10 },
{ 217, 4, 4 , 10 },
{ 229, 4, 6 , 10 },
{ 243, 4, 6 , 10 },
{ 257, 4, 6 , 10 },
{ 271, 4, 6 , 10 },
{ 285, 4, 6 , 10 },
{ 299, 4, 6 , 10 },
{ 313, 4, 6 , 10 },
{ 327, 4, 6 , 10 },
{ 341, 4, 2 , 6 },
{ 351, 4, 2 , 8 },
{ 361, 4, 7 , 7 },
{ 376, 4, 5 , 3 },
{ 389, 4, 7 , 7 },
{ 404, 4, 6 , 10 },
{ 418, 4, 7 , 12 },
{ 433, 4, 7 , 10 },
{ 448, 4, 7 , 10 },
{ 463, 4, 7 , 10 },
{ 478, 4, 7 , 10 },
{ 493, 4, 7 , 10 },
{ 4, 28, 7 , 10 },
{ 19, 28, 7 , 10 },
{ 34, 28, 7 , 10 },
{ 49, 28, 2 , 10 },
{ 59, 28, 5 , 10 },
{ 72, 28, 7 , 10 },
{ 87, 28, 6 , 10 },
{ 101, 28, 9 , 10 },
{ 118, 28, 7 , 10 },
{ 133, 28, 7 , 10 },
{ 148, 28, 7 , 10 },
{ 163, 28, 7 , 12 },
{ 178, 28, 7 , 10 },
{ 193, 28, 7 , 10 },
{ 208, 28, 6 , 10 },
{ 222, 28, 7 , 10 },
{ 237, 28, 7 , 10 },
{ 252, 28, 8 , 10 },
{ 268, 28, 7 , 10 },
{ 283, 28, 6 , 10 },
{ 297, 28, 7 , 10 },
{ 312, 28, 4 , 12 },
{ 324, 28, 4 , 10 },
{ 336, 28, 4 , 12 },
{ 348, 28, 6 , 3 },
{ 362, 28, 7 , 1 },
{ 377, 28, 4 , 3 },
{ 389, 28, 6 , 7 },
{ 403, 28, 6 , 10 },
{ 417, 28, 6 , 7 },
{ 431, 28, 6 , 10 },
{ 445, 28, 6 , 7 },
{ 459, 28, 4 , 10 },
{ 471, 28, 6 , 9 },
{ 485, 28, 6 , 10 },
{ 499, 28, 2 , 10 },
{ 4, 52, 5 , 12 },
{ 17, 52, 6 , 10 },
{ 31, 52, 3 , 10 },
{ 42, 52, 8 , 7 },
{ 58, 52, 6 , 7 },
{ 72, 52, 6 , 7 },
{ 86, 52, 6 , 9 },
{ 100, 52, 6 , 9 },
{ 114, 52, 5 , 7 },
{ 127, 52, 6 , 7 },
{ 141, 52, 4 , 10 },
{ 153, 52, 6 , 7 },
{ 167, 52, 6 , 7 },
{ 181, 52, 8 , 7 },
{ 197, 52, 6 , 7 },
{ 211, 52, 6 , 9 },
{ 225, 52, 6 , 7 },
{ 239, 52, 5 , 12 },
{ 252, 52, 2 , 12 },
{ 262, 52, 5 , 12 },
{ 275, 52, 7 , 3 },
{ 290, 52, 2 , 9 },
{ 300, 52, 6 , 11 },
{ 314, 52, 7 , 10 },
{ 329, 52, 7 , 9 },
{ 344, 52, 6 , 10 },
{ 358, 52, 7 , 11 },
{ 373, 52, 6 , 12 },
{ 387, 52, 6 , 10 },
{ 401, 52, 7 , 10 },
{ 416, 52, 5 , 5 },
{ 429, 52, 7 , 6 },
{ 444, 52, 6 , 3 },
{ 458, 52, 7 , 10 },
{ 473, 52, 0 , 0 },
{ 481, 52, 4 , 4 },
{ 493, 52, 6 , 7 },
{ 4, 76, 4 , 5 },
{ 16, 76, 4 , 5 },
{ 28, 76, 7 , 11 },
{ 43, 76, 6 , 9 },
{ 57, 76, 7 , 12 },
{ 72, 76, 2 , 2 },
{ 82, 76, 6 , 10 },
{ 96, 76, 3 , 5 },
{ 107, 76, 4 , 5 },
{ 119, 76, 7 , 6 },
{ 134, 76, 9 , 10 },
{ 151, 76, 8 , 7 },
{ 167, 76, 6 , 11 },
{ 181, 76, 6 , 11 },
{ 195, 76, 7 , 11 },
{ 210, 76, 7 , 11 },
{ 225, 76, 7 , 11 },
{ 240, 76, 7 , 11 },
{ 255, 76, 7 , 11 },
{ 270, 76, 7 , 11 },
{ 285, 76, 9 , 10 },
{ 302, 76, 7 , 12 },
{ 317, 76, 7 , 11 },
{ 332, 76, 7 , 11 },
{ 347, 76, 7 , 11 },
{ 362, 76, 7 , 11 },
{ 377, 76, 3 , 11 },
{ 388, 76, 3 , 11 },
{ 399, 76, 5 , 11 },
{ 412, 76, 5 , 11 },
{ 425, 76, 8 , 10 },
{ 441, 76, 7 , 11 },
{ 456, 76, 7 , 11 },
{ 471, 76, 7 , 11 },
{ 486, 76, 7 , 11 },
{ 4, 100, 7 , 11 },
{ 19, 100, 7 , 11 },
{ 34, 100, 7 , 7 },
{ 49, 100, 7 , 13 },
{ 64, 100, 7 , 11 },
{ 79, 100, 7 , 11 },
{ 94, 100, 7 , 11 },
{ 109, 100, 7 , 11 },
{ 124, 100, 6 , 11 },
{ 138, 100, 7 , 10 },
{ 153, 100, 7 , 10 },
{ 168, 100, 6 , 10 },
{ 182, 100, 6 , 10 },
{ 196, 100, 6 , 10 },
{ 210, 100, 6 , 10 },
{ 224, 100, 6 , 10 },
{ 238, 100, 6 , 11 },
{ 252, 100, 8 , 7 },
{ 268, 100, 6 , 9 },
{ 282, 100, 6 , 10 },
{ 296, 100, 6 , 10 },
{ 310, 100, 6 , 10 },
{ 324, 100, 6 , 10 },
{ 338, 100, 3 , 10 },
{ 349, 100, 3 , 10 },
{ 360, 100, 5 , 10 },
{ 373, 100, 5 , 10 },
{ 386, 100, 6 , 10 },
{ 400, 100, 6 , 10 },
{ 414, 100, 6 , 10 },
{ 428, 100, 6 , 10 },
{ 442, 100, 6 , 10 },
{ 456, 100, 6 , 10 },
{ 470, 100, 6 , 10 },
{ 484, 100, 6 , 7 },
{ 4, 124, 7 , 11 },
{ 19, 124, 6 , 10 },
{ 33, 124, 6 , 10 },
{ 47, 124, 6 , 10 },
{ 61, 124, 6 , 10 },
{ 75, 124, 6 , 12 },
{ 89, 124, 6 , 12 },
{ 103, 124, 6 , 12 },
};
// Font glyphs info data
// NOTE: No glyphs.image data provided
static const GlyphInfo enefeteFontGlyphs[189] = {
{ 32, 0, 0, 4, { 0 }},
{ 33, 0, 2, 3, { 0 }},
{ 34, 0, 2, 6, { 0 }},
{ 35, 0, 2, 8, { 0 }},
{ 36, 0, 1, 8, { 0 }},
{ 37, 0, 2, 8, { 0 }},
{ 38, 0, 2, 8, { 0 }},
{ 39, 0, 2, 3, { 0 }},
{ 40, 0, 2, 4, { 0 }},
{ 41, 0, 2, 4, { 0 }},
{ 42, 0, 4, 6, { 0 }},
{ 43, 0, 6, 7, { 0 }},
{ 44, 0, 10, 3, { 0 }},
{ 45, 0, 8, 6, { 0 }},
{ 46, 0, 10, 3, { 0 }},
{ 47, 0, 2, 5, { 0 }},
{ 48, 0, 2, 7, { 0 }},
{ 49, 0, 2, 7, { 0 }},
{ 50, 0, 2, 7, { 0 }},
{ 51, 0, 2, 7, { 0 }},
{ 52, 0, 2, 7, { 0 }},
{ 53, 0, 2, 7, { 0 }},
{ 54, 0, 2, 7, { 0 }},
{ 55, 0, 2, 7, { 0 }},
{ 56, 0, 2, 7, { 0 }},
{ 57, 0, 2, 7, { 0 }},
{ 58, 0, 4, 3, { 0 }},
{ 59, 0, 4, 3, { 0 }},
{ 60, 0, 4, 8, { 0 }},
{ 61, 0, 6, 6, { 0 }},
{ 62, 0, 4, 8, { 0 }},
{ 63, 0, 2, 7, { 0 }},
{ 64, 0, 2, 8, { 0 }},
{ 65, 0, 2, 8, { 0 }},
{ 66, 0, 2, 8, { 0 }},
{ 67, 0, 2, 8, { 0 }},
{ 68, 0, 2, 8, { 0 }},
{ 69, 0, 2, 8, { 0 }},
{ 70, 0, 2, 8, { 0 }},
{ 71, 0, 2, 8, { 0 }},
{ 72, 0, 2, 8, { 0 }},
{ 73, 0, 2, 3, { 0 }},
{ 74, 0, 2, 6, { 0 }},
{ 75, 0, 2, 8, { 0 }},
{ 76, 0, 2, 7, { 0 }},
{ 77, 0, 2, 10, { 0 }},
{ 78, 0, 2, 8, { 0 }},
{ 79, 0, 2, 8, { 0 }},
{ 80, 0, 2, 8, { 0 }},
{ 81, 0, 2, 8, { 0 }},
{ 82, 0, 2, 8, { 0 }},
{ 83, 0, 2, 8, { 0 }},
{ 84, 0, 2, 7, { 0 }},
{ 85, 0, 2, 8, { 0 }},
{ 86, 0, 2, 8, { 0 }},
{ 87, 0, 2, 9, { 0 }},
{ 88, 0, 2, 8, { 0 }},
{ 89, 0, 2, 7, { 0 }},
{ 90, 0, 2, 8, { 0 }},
{ 91, 0, 2, 5, { 0 }},
{ 92, 0, 2, 5, { 0 }},
{ 93, 0, 2, 5, { 0 }},
{ 94, 0, 2, 7, { 0 }},
{ 95, 0, 14, 8, { 0 }},
{ 96, 0, 2, 5, { 0 }},
{ 97, 0, 5, 7, { 0 }},
{ 98, 0, 2, 7, { 0 }},
{ 99, 0, 5, 7, { 0 }},
{ 100, 0, 2, 7, { 0 }},
{ 101, 0, 5, 7, { 0 }},
{ 102, 0, 2, 5, { 0 }},
{ 103, 0, 5, 7, { 0 }},
{ 104, 0, 2, 7, { 0 }},
{ 105, 0, 2, 3, { 0 }},
{ 106, 0, 2, 6, { 0 }},
{ 107, 0, 2, 7, { 0 }},
{ 108, 0, 2, 4, { 0 }},
{ 109, 0, 5, 9, { 0 }},
{ 110, 0, 5, 7, { 0 }},
{ 111, 0, 5, 7, { 0 }},
{ 112, 0, 5, 7, { 0 }},
{ 113, 0, 5, 7, { 0 }},
{ 114, 0, 5, 6, { 0 }},
{ 115, 0, 5, 7, { 0 }},
{ 116, 0, 2, 5, { 0 }},
{ 117, 0, 5, 7, { 0 }},
{ 118, 0, 5, 7, { 0 }},
{ 119, 0, 5, 9, { 0 }},
{ 120, 0, 5, 7, { 0 }},
{ 121, 0, 5, 7, { 0 }},
{ 122, 0, 5, 7, { 0 }},
{ 123, 0, 2, 6, { 0 }},
{ 124, 0, 2, 3, { 0 }},
{ 125, 0, 2, 6, { 0 }},
{ 126, 0, 6, 8, { 0 }},
{ 161, 0, 5, 3, { 0 }},
{ 162, 0, 3, 7, { 0 }},
{ 163, 0, 2, 8, { 0 }},
{ 8364, 0, 3, 8, { 0 }},
{ 165, 0, 2, 7, { 0 }},
{ 352, 0, 1, 8, { 0 }},
{ 167, 0, 2, 7, { 0 }},
{ 353, 0, 2, 7, { 0 }},
{ 169, 0, 2, 8, { 0 }},
{ 170, 0, 2, 6, { 0 }},
{ 171, 0, 6, 8, { 0 }},
{ 172, 0, 7, 7, { 0 }},
{ 174, 0, 2, 8, { 0 }},
{ 175, 0, 0, 0, { 0 }},
{ 176, 0, 2, 5, { 0 }},
{ 177, 0, 4, 7, { 0 }},
{ 178, 0, 2, 5, { 0 }},
{ 179, 0, 2, 5, { 0 }},
{ 381, 0, 1, 8, { 0 }},
{ 181, 0, 5, 7, { 0 }},
{ 182, 0, 2, 8, { 0 }},
{ 183, 0, 6, 3, { 0 }},
{ 382, 0, 2, 7, { 0 }},
{ 185, 0, 2, 4, { 0 }},
{ 186, 0, 2, 5, { 0 }},
{ 187, 0, 6, 8, { 0 }},
{ 338, 0, 2, 10, { 0 }},
{ 339, 0, 5, 9, { 0 }},
{ 376, 0, 1, 7, { 0 }},
{ 191, 0, 3, 7, { 0 }},
{ 192, 0, 1, 8, { 0 }},
{ 193, 0, 1, 8, { 0 }},
{ 194, 0, 1, 8, { 0 }},
{ 195, 0, 1, 8, { 0 }},
{ 196, 0, 1, 8, { 0 }},
{ 197, 0, 1, 8, { 0 }},
{ 198, 0, 2, 10, { 0 }},
{ 199, 0, 2, 8, { 0 }},
{ 200, 0, 1, 8, { 0 }},
{ 201, 0, 1, 8, { 0 }},
{ 202, 0, 1, 8, { 0 }},
{ 203, 0, 1, 8, { 0 }},
{ 204, 0, 1, 4, { 0 }},
{ 205, 0, 1, 4, { 0 }},
{ 206, 0, 1, 6, { 0 }},
{ 207, 0, 1, 6, { 0 }},
{ 208, 0, 2, 9, { 0 }},
{ 209, 0, 1, 8, { 0 }},
{ 210, 0, 1, 8, { 0 }},
{ 211, 0, 1, 8, { 0 }},
{ 212, 0, 1, 8, { 0 }},
{ 213, 0, 1, 8, { 0 }},
{ 214, 0, 1, 8, { 0 }},
{ 215, 0, 5, 8, { 0 }},
{ 216, 0, 1, 8, { 0 }},
{ 217, 0, 1, 8, { 0 }},
{ 218, 0, 1, 8, { 0 }},
{ 219, 0, 1, 8, { 0 }},
{ 220, 0, 1, 8, { 0 }},
{ 221, 0, 1, 7, { 0 }},
{ 222, 0, 2, 8, { 0 }},
{ 223, 0, 2, 8, { 0 }},
{ 224, 0, 2, 7, { 0 }},
{ 225, 0, 2, 7, { 0 }},
{ 226, 0, 2, 7, { 0 }},
{ 227, 0, 2, 7, { 0 }},
{ 228, 0, 2, 7, { 0 }},
{ 229, 0, 1, 7, { 0 }},
{ 230, 0, 5, 9, { 0 }},
{ 231, 0, 5, 7, { 0 }},
{ 232, 0, 2, 7, { 0 }},
{ 233, 0, 2, 7, { 0 }},
{ 234, 0, 2, 7, { 0 }},
{ 235, 0, 2, 7, { 0 }},
{ 236, 0, 2, 4, { 0 }},
{ 237, 0, 2, 4, { 0 }},
{ 238, 0, 2, 6, { 0 }},
{ 239, 0, 2, 6, { 0 }},
{ 240, 0, 2, 7, { 0 }},
{ 241, 0, 2, 7, { 0 }},
{ 242, 0, 2, 7, { 0 }},
{ 243, 0, 2, 7, { 0 }},
{ 244, 0, 2, 7, { 0 }},
{ 245, 0, 2, 7, { 0 }},
{ 246, 0, 2, 7, { 0 }},
{ 247, 0, 4, 7, { 0 }},
{ 248, 0, 3, 8, { 0 }},
{ 249, 0, 2, 7, { 0 }},
{ 250, 0, 2, 7, { 0 }},
{ 251, 0, 2, 7, { 0 }},
{ 252, 0, 2, 7, { 0 }},
{ 253, 0, 2, 7, { 0 }},
{ 254, 0, 2, 7, { 0 }},
{ 255, 0, 2, 7, { 0 }},
};
// Style loading function: Enefete
static void GuiLoadStyleEnefete(void)
{
// Load style properties provided
// NOTE: Default properties are propagated
for (int i = 0; i < ENEFETE_STYLE_PROPS_COUNT; i++)
{
GuiSetStyle(enefeteStyleProps[i].controlId, enefeteStyleProps[i].propertyId, enefeteStyleProps[i].propertyValue);
}
// Custom font loading
// NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function
int enefeteFontDataSize = 0;
unsigned char *data = DecompressData(enefeteFontData, ENEFETE_STYLE_FONT_ATLAS_COMP_SIZE, &enefeteFontDataSize);
Image imFont = { data, 512, 256, 1, 2 };
Font font = { 0 };
font.baseSize = 16;
font.glyphCount = 189;
// Load texture from image
font.texture = LoadTextureFromImage(imFont);
UnloadImage(imFont); // Uncompressed image data can be unloaded from memory
// Copy char recs data from global fontRecs
// NOTE: Required to avoid issues if trying to free font
font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle));
memcpy(font.recs, enefeteFontRecs, font.glyphCount*sizeof(Rectangle));
// Copy font char info data from global fontChars
// NOTE: Required to avoid issues if trying to free font
font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo));
memcpy(font.glyphs, enefeteFontGlyphs, font.glyphCount*sizeof(GlyphInfo));
GuiSetFont(font);
// Setup a white rectangle on the font to be used on shapes drawing,
// it makes possible to draw shapes and text (full UI) in a single draw call
Rectangle fontWhiteRec = { 510, 254, 1, 1 };
SetShapesTexture(font.texture, fontWhiteRec);
//-----------------------------------------------------------------
// TODO: Custom user style setup: Set specific properties here (if required)
// i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT
}

View File

@ -0,0 +1,589 @@
//////////////////////////////////////////////////////////////////////////////////
// //
// StyleAsCode exporter v2.0 - Style data exported as a values array //
// //
// USAGE: On init call: GuiLoadStyleGenesis(); //
// //
// more info and bugs-report: github.com/raysan5/raygui //
// feedback and support: ray[at]raylibtech.com //
// //
// Copyright (c) 2020-2025 raylib technologies (@raylibtech) //
// //
//////////////////////////////////////////////////////////////////////////////////
#define GENESIS_STYLE_PROPS_COUNT 23
// Custom style name: Genesis
static const GuiStyleProp genesisStyleProps[GENESIS_STYLE_PROPS_COUNT] = {
{ 0, 0, (int)0x667384ff }, // DEFAULT_BORDER_COLOR_NORMAL
{ 0, 1, (int)0x181b1eff }, // DEFAULT_BASE_COLOR_NORMAL
{ 0, 2, (int)0xc2c8d0ff }, // DEFAULT_TEXT_COLOR_NORMAL
{ 0, 3, (int)0xd3dbdfff }, // DEFAULT_BORDER_COLOR_FOCUSED
{ 0, 4, (int)0xa7afb0ff }, // DEFAULT_BASE_COLOR_FOCUSED
{ 0, 5, (int)0x020202ff }, // DEFAULT_TEXT_COLOR_FOCUSED
{ 0, 6, (int)0x181b1eff }, // DEFAULT_BORDER_COLOR_PRESSED
{ 0, 7, (int)0xac3c3cff }, // DEFAULT_BASE_COLOR_PRESSED
{ 0, 8, (int)0xdededeff }, // DEFAULT_TEXT_COLOR_PRESSED
{ 0, 9, (int)0x3e4550ff }, // DEFAULT_BORDER_COLOR_DISABLED
{ 0, 10, (int)0x2e353dff }, // DEFAULT_BASE_COLOR_DISABLED
{ 0, 11, (int)0x484f57ff }, // DEFAULT_TEXT_COLOR_DISABLED
{ 0, 16, (int)0x00000010 }, // DEFAULT_TEXT_SIZE
{ 0, 17, (int)0x00000000 }, // DEFAULT_TEXT_SPACING
{ 0, 18, (int)0x96a3b4ff }, // DEFAULT_LINE_COLOR
{ 0, 19, (int)0x292c33ff }, // DEFAULT_BACKGROUND_COLOR
{ 0, 20, (int)0x00000008 }, // DEFAULT_TEXT_LINE_SPACING
{ 1, 5, (int)0x97a9aeff }, // LABEL_TEXT_COLOR_FOCUSED
{ 4, 5, (int)0xa69a9aff }, // SLIDER_TEXT_COLOR_FOCUSED
{ 4, 6, (int)0xc3ccd5ff }, // SLIDER_BORDER_COLOR_PRESSED
{ 6, 6, (int)0xa7aeb5ff }, // CHECKBOX_BORDER_COLOR_PRESSED
{ 9, 5, (int)0xa9a5a5ff }, // TEXTBOX_TEXT_COLOR_FOCUSED
{ 10, 5, (int)0xc9c7c7ff }, // VALUEBOX_TEXT_COLOR_FOCUSED
};
// WARNING: This style uses a custom font: "PixelOperator.ttf" (size: 16, spacing: 0)
#define GENESIS_STYLE_FONT_ATLAS_COMP_SIZE 2138
// Font atlas image pixels data: DEFLATE compressed
static unsigned char genesisFontData[GENESIS_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed,
0xdd, 0xdb, 0x92, 0xa5, 0xba, 0x0d, 0x00, 0x50, 0xff, 0xff, 0x4f, 0x2b, 0x0f, 0xa9, 0x54, 0x32, 0x95, 0xd3, 0x80, 0x64,
0xd9, 0x98, 0x9e, 0x35, 0xeb, 0xad, 0x77, 0x4f, 0xc3, 0x36, 0x96, 0x6f, 0x80, 0x1c, 0x03, 0x00, 0x00, 0x00, 0xf8, 0xeb,
0xc5, 0x3f, 0xfe, 0x24, 0x7e, 0xfc, 0xcd, 0x78, 0xfc, 0x77, 0xae, 0x7f, 0xfe, 0x9f, 0x4f, 0xe3, 0xe2, 0x58, 0xcf, 0xce,
0x35, 0x7b, 0xdc, 0x48, 0x94, 0xc4, 0x3f, 0x9f, 0x5f, 0x3c, 0xfe, 0xbb, 0x3f, 0x7d, 0xbf, 0xfc, 0xef, 0x5f, 0xfd, 0xa5,
0xeb, 0xb3, 0x8f, 0x54, 0xb9, 0xe7, 0xff, 0x4f, 0xee, 0x2a, 0xc6, 0x92, 0xb2, 0xbf, 0x3f, 0xbb, 0xfc, 0xb9, 0x77, 0xfe,
0x9f, 0xb8, 0xf8, 0x3e, 0x95, 0xab, 0xf4, 0x24, 0xb6, 0x4e, 0x88, 0xff, 0x78, 0x14, 0x89, 0xd1, 0x5a, 0x73, 0xfe, 0x7b,
0xd4, 0x68, 0x6c, 0xa9, 0xaa, 0x25, 0x79, 0x15, 0xe9, 0xf9, 0xf2, 0xb8, 0xaa, 0xfd, 0xf9, 0x16, 0x30, 0x5a, 0xbe, 0xcb,
0x7c, 0x6d, 0x8c, 0xe9, 0xdf, 0x7e, 0x56, 0x93, 0x7a, 0xbe, 0xd5, 0xcc, 0x27, 0xa3, 0xe5, 0x2a, 0xbd, 0x11, 0xff, 0x51,
0x6e, 0xa9, 0x22, 0x19, 0xd1, 0x1d, 0x25, 0x58, 0x69, 0x87, 0xc7, 0xc6, 0xf8, 0x8f, 0xd6, 0xb1, 0x4b, 0xb4, 0xd5, 0xb9,
0x37, 0xe2, 0xff, 0xba, 0xd7, 0x1e, 0x2d, 0xf5, 0x26, 0x6e, 0xca, 0xa8, 0x37, 0x96, 0xd7, 0x8e, 0x53, 0x57, 0xc7, 0xff,
0xf5, 0x6f, 0x66, 0xfb, 0xdb, 0x48, 0xf6, 0xdd, 0x1d, 0xe5, 0x54, 0xeb, 0xff, 0xfb, 0xcb, 0x31, 0x7e, 0xec, 0x9b, 0xab,
0xe3, 0x90, 0x4c, 0x09, 0x47, 0x72, 0x76, 0x35, 0xdb, 0xc3, 0xbe, 0xd9, 0xff, 0x3f, 0x1b, 0x0b, 0x8a, 0xff, 0xb5, 0xf1,
0x5f, 0xf9, 0x26, 0xf1, 0xf0, 0x0c, 0x2a, 0x7d, 0xe2, 0x38, 0x20, 0xfe, 0xb3, 0xed, 0xd0, 0x75, 0x59, 0x75, 0x8d, 0xe5,
0xb3, 0xeb, 0x12, 0xcf, 0x66, 0xd8, 0xfb, 0x6a, 0x61, 0x7e, 0x6c, 0x94, 0x8f, 0xff, 0x7c, 0xeb, 0x79, 0xf7, 0xd7, 0xb2,
0xa5, 0xfa, 0xf3, 0xcc, 0x6e, 0xbe, 0xc4, 0xf7, 0xc5, 0x7f, 0x14, 0xfa, 0x94, 0xf7, 0xe3, 0xb9, 0x27, 0xfe, 0xa3, 0xb0,
0x72, 0x31, 0xda, 0x56, 0xf9, 0x6a, 0xeb, 0x12, 0x7d, 0x6b, 0x06, 0xef, 0x5f, 0x81, 0xfb, 0xf8, 0xbf, 0x9b, 0x0f, 0xbe,
0xdf, 0xff, 0xc7, 0x11, 0xfd, 0x7f, 0x94, 0xd7, 0x86, 0x47, 0xa1, 0xf5, 0xfd, 0x5a, 0xfc, 0x47, 0x21, 0x66, 0xa2, 0x65,
0x5e, 0x3e, 0x96, 0xac, 0xe5, 0xf5, 0xae, 0x19, 0xee, 0xb9, 0x5a, 0x77, 0xbd, 0x68, 0xd7, 0xac, 0xe6, 0x77, 0xc5, 0xff,
0x68, 0xe8, 0xff, 0x9f, 0x8d, 0x01, 0x66, 0xbf, 0x47, 0x7c, 0xac, 0xf7, 0xef, 0x8c, 0xff, 0x5d, 0x2b, 0xf6, 0xeb, 0x6b,
0x63, 0x1c, 0x71, 0x65, 0xac, 0xff, 0x77, 0x8e, 0xff, 0xeb, 0x6b, 0x00, 0xb9, 0x79, 0x4c, 0x1c, 0x1a, 0xfd, 0x95, 0x39,
0x73, 0xd7, 0x1d, 0xfb, 0xde, 0xa7, 0x09, 0xa2, 0xf0, 0xac, 0x46, 0xcf, 0x2a, 0xce, 0xea, 0x6b, 0x90, 0xef, 0xff, 0x77,
0xdd, 0xff, 0xbf, 0x1f, 0x73, 0x9f, 0xd1, 0xff, 0x8f, 0xdb, 0xde, 0xfd, 0x94, 0xf3, 0x01, 0xf6, 0xb6, 0x00, 0x21, 0xfa,
0xc1, 0x73, 0xc4, 0x80, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x9f, 0xcf,
0xef, 0xcf, 0x63, 0x90, 0xcf, 0x84, 0xbd, 0x3e, 0x03, 0xfb, 0x4c, 0x4e, 0xe0, 0x6a, 0x09, 0x75, 0xfd, 0xc5, 0xeb, 0xdc,
0xf1, 0x99, 0x4c, 0x0b, 0xcf, 0x6b, 0x46, 0xa4, 0x77, 0x3f, 0xe8, 0xcc, 0x28, 0x50, 0xc9, 0x69, 0x30, 0x92, 0x75, 0xa2,
0x37, 0x97, 0x52, 0xee, 0xec, 0xf7, 0xd4, 0xf8, 0x2f, 0xc4, 0xff, 0xfb, 0x9f, 0x8c, 0x42, 0xfe, 0x9e, 0x9d, 0xf1, 0x9f,
0xad, 0x7b, 0xb5, 0xfc, 0xb8, 0x73, 0x7d, 0xc9, 0xee, 0x8c, 0x62, 0xd1, 0x78, 0x0d, 0xf7, 0xf5, 0xab, 0x7f, 0xe6, 0xd0,
0xd9, 0x51, 0xaf, 0x67, 0xe2, 0x3f, 0x9b, 0xfb, 0x34, 0x2e, 0x5a, 0xe1, 0x73, 0xe2, 0x7f, 0x6c, 0x89, 0xff, 0xf8, 0x48,
0xfc, 0x77, 0x67, 0x92, 0xe9, 0xca, 0x42, 0x5e, 0xc9, 0x7c, 0x93, 0xbf, 0x86, 0xf5, 0x0c, 0xbf, 0xd5, 0x1a, 0xf7, 0x9d,
0xf8, 0xaf, 0xd4, 0xad, 0xeb, 0x3c, 0xab, 0xe2, 0xff, 0xbe, 0x6c, 0x2b, 0xbd, 0xc9, 0xfc, 0xcf, 0x7b, 0x22, 0x7f, 0x4f,
0x1e, 0xdd, 0xbb, 0x7d, 0xb4, 0xd6, 0xd6, 0x95, 0xd9, 0xbe, 0xf2, 0x2b, 0xf1, 0x1f, 0xc5, 0xbf, 0x12, 0x37, 0x2d, 0x4a,
0x6f, 0x06, 0xf6, 0x9e, 0xac, 0x6d, 0x7b, 0xe3, 0xbf, 0x7b, 0xdf, 0x9f, 0x33, 0xe2, 0xff, 0xfd, 0x3c, 0xba, 0xab, 0xe6,
0x70, 0xbd, 0x7d, 0xe5, 0xef, 0xee, 0xff, 0xef, 0x5b, 0xc9, 0x1d, 0xf5, 0x63, 0xa6, 0xa7, 0x7f, 0xb3, 0xff, 0x7f, 0xef,
0xe7, 0xef, 0xc6, 0x7f, 0x57, 0x6d, 0x8f, 0x8d, 0x23, 0x93, 0x6a, 0x5f, 0xb9, 0x73, 0x95, 0x6c, 0xf7, 0xfc, 0x7f, 0xd5,
0x37, 0x1b, 0xe9, 0xd1, 0x44, 0x1c, 0x1b, 0xff, 0x33, 0xab, 0x90, 0xeb, 0xc6, 0x0b, 0xef, 0x8c, 0xff, 0x6b, 0xfb, 0xdb,
0x56, 0x76, 0x05, 0x3c, 0xad, 0xff, 0xdf, 0x75, 0x97, 0x6c, 0x6c, 0x8e, 0xc9, 0xbd, 0xc7, 0xea, 0xdc, 0xa5, 0x2e, 0x9f,
0xbf, 0x3f, 0x9a, 0x47, 0x78, 0x5f, 0x8f, 0xff, 0xfa, 0x2a, 0xff, 0x68, 0x5a, 0x95, 0x7c, 0x6f, 0xfc, 0xbf, 0x7b, 0xa7,
0x93, 0xca, 0x51, 0x7a, 0xda, 0xdf, 0x67, 0x77, 0x85, 0x7b, 0x7b, 0x81, 0x9f, 0xef, 0x36, 0x44, 0x53, 0xcf, 0xd1, 0x95,
0xbf, 0xff, 0xcf, 0x73, 0xcb, 0xef, 0x78, 0x96, 0xbf, 0x13, 0x1f, 0xc9, 0xfd, 0xf4, 0xdf, 0x88, 0xff, 0xca, 0x91, 0x2b,
0xff, 0x2b, 0x7b, 0x0d, 0x3b, 0xe3, 0xff, 0xbd, 0x16, 0x40, 0xde, 0x4d, 0x38, 0x71, 0x14, 0x03, 0xfc, 0x9e, 0x16, 0xc0,
0x0e, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xee, 0x37, 0xb1, 0x7f, 0xce,
0xcd, 0x55, 0xc9, 0x1a, 0x9f, 0x7f, 0x4f, 0x7a, 0x67, 0xc6, 0xfc, 0x71, 0x93, 0x85, 0xec, 0xfa, 0xb7, 0xfe, 0xfc, 0xa4,
0x23, 0x1f, 0x6f, 0x34, 0xbe, 0xb5, 0x9e, 0xc9, 0xe5, 0x1d, 0x85, 0x6c, 0x03, 0x57, 0x6f, 0xc6, 0xe6, 0xae, 0x41, 0xee,
0x18, 0xd1, 0x9e, 0xcf, 0x2c, 0xd2, 0xd9, 0x63, 0xfe, 0xf7, 0x9c, 0x9f, 0x67, 0xfa, 0x8d, 0xf2, 0x9b, 0xc6, 0x77, 0xb9,
0xcc, 0xf2, 0xf9, 0x11, 0x2a, 0x39, 0xf3, 0xf2, 0x79, 0x36, 0x4f, 0xcf, 0x98, 0x3f, 0x9f, 0x79, 0x27, 0x6e, 0xea, 0xe4,
0xf3, 0x5a, 0xfa, 0x24, 0x73, 0x44, 0x4f, 0x06, 0xa1, 0xda, 0x37, 0x8e, 0xe9, 0xda, 0x5a, 0xb9, 0xde, 0x99, 0x23, 0xc4,
0xf4, 0xfb, 0xfc, 0x95, 0xfa, 0x1e, 0x93, 0xd7, 0xbd, 0xfe, 0x8d, 0x67, 0xb2, 0x10, 0x44, 0xa9, 0xa7, 0xeb, 0x2c, 0xc1,
0xeb, 0x4f, 0xf2, 0x19, 0x33, 0xe3, 0x61, 0x7c, 0x75, 0xff, 0x74, 0x24, 0xdb, 0x9b, 0x4a, 0xbe, 0xba, 0x99, 0x5d, 0x33,
0xe6, 0xc6, 0x88, 0xe3, 0x22, 0xbb, 0x52, 0x3e, 0xfa, 0x7f, 0xee, 0x6f, 0x62, 0x32, 0xfe, 0xa3, 0x98, 0x59, 0xa8, 0x1e,
0x23, 0xd9, 0xf8, 0x9f, 0xbf, 0x0a, 0xbb, 0xe2, 0xbf, 0x92, 0xf5, 0xe0, 0xfd, 0x8c, 0xd9, 0xb5, 0x9e, 0x70, 0x6f, 0xfc,
0xc7, 0x83, 0xf6, 0x6b, 0xa4, 0xe7, 0x2f, 0xa3, 0x90, 0xe1, 0xfc, 0xf9, 0xec, 0x22, 0x5a, 0xfb, 0xff, 0x71, 0x59, 0x26,
0xf1, 0xc2, 0xf8, 0xbf, 0xb6, 0xdf, 0x5b, 0x2e, 0xfe, 0x67, 0x5a, 0xa7, 0xfd, 0xfd, 0x7f, 0xad, 0x5f, 0x3b, 0xb9, 0xff,
0x7f, 0x27, 0x63, 0x76, 0x14, 0xe6, 0xd9, 0x95, 0xe3, 0xc6, 0xe4, 0xc8, 0xe0, 0xd9, 0x5c, 0x30, 0x1a, 0xe6, 0xab, 0x1d,
0xf1, 0xdf, 0x3f, 0xc2, 0xae, 0xcc, 0xad, 0x6a, 0xfd, 0x7f, 0xb4, 0xce, 0xff, 0x23, 0xdd, 0xce, 0xcf, 0xc5, 0x7f, 0xe7,
0x6e, 0x4b, 0x2b, 0x32, 0xe6, 0xe6, 0x77, 0x76, 0x7c, 0xab, 0xff, 0x1f, 0xa5, 0xfe, 0xbf, 0xd6, 0x7b, 0xcd, 0xd4, 0xca,
0xd8, 0x90, 0xeb, 0x2e, 0x37, 0xfe, 0x5f, 0x3d, 0xca, 0xce, 0xcf, 0x28, 0x63, 0x53, 0xfb, 0xd4, 0x3d, 0xf7, 0xab, 0x45,
0x4b, 0xa4, 0xc7, 0xd7, 0x3b, 0x33, 0xe6, 0x56, 0xd6, 0x9e, 0xcf, 0x8f, 0xff, 0xce, 0x3d, 0x4c, 0x2a, 0x77, 0x17, 0xa2,
0xa1, 0x6f, 0x5e, 0xdd, 0xff, 0xcf, 0xce, 0xff, 0x2b, 0xb9, 0xf4, 0xf7, 0xac, 0xff, 0x8d, 0xa5, 0x6b, 0x3f, 0xd1, 0x7a,
0x3f, 0x71, 0x1c, 0xd0, 0x7e, 0x77, 0x66, 0x89, 0x7f, 0x63, 0xfe, 0xdf, 0x95, 0x81, 0x7d, 0x94, 0xef, 0x09, 0xd5, 0xd7,
0xff, 0x67, 0x6b, 0x60, 0x1c, 0xd3, 0xf7, 0x8f, 0xc7, 0x7b, 0xe8, 0xc4, 0x4b, 0xd1, 0x7f, 0x5a, 0xfc, 0x9f, 0xf2, 0x44,
0x43, 0x47, 0xbb, 0x15, 0x2d, 0xad, 0x5b, 0x65, 0xdf, 0x96, 0xce, 0x71, 0xd4, 0xfc, 0xfc, 0x7f, 0xcd, 0xba, 0xfa, 0x1b,
0xc7, 0x98, 0xb9, 0x23, 0x3b, 0x1f, 0xff, 0xb1, 0xbc, 0xe4, 0xe4, 0x23, 0xfe, 0x4e, 0x2b, 0x75, 0xde, 0xf1, 0xfe, 0xe6,
0xda, 0x13, 0x1b, 0x9f, 0xb5, 0x13, 0xa1, 0xc4, 0xd1, 0xf3, 0x21, 0xd7, 0x03, 0xfe, 0xe6, 0xf9, 0xd0, 0xdf, 0xfa, 0x1c,
0xbc, 0x92, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x7d, 0x3b, 0xa4, 0x92, 0x59,
0x72, 0x34, 0xbf, 0x8b, 0x9e, 0xcf, 0xad, 0x5f, 0x3d, 0xbb, 0xbb, 0xf7, 0xa5, 0x6b, 0xf9, 0x79, 0x6b, 0xe5, 0x34, 0x97,
0x8f, 0x28, 0x97, 0x53, 0xed, 0x7e, 0xff, 0x83, 0x38, 0xf2, 0x6a, 0xde, 0x65, 0x75, 0x8d, 0x42, 0x3e, 0xd5, 0xce, 0xeb,
0x35, 0x4a, 0x65, 0xb7, 0xab, 0x96, 0x3d, 0x7f, 0x3b, 0x34, 0x36, 0xbc, 0x4f, 0x59, 0x8b, 0x85, 0x5a, 0x6e, 0xc3, 0xb9,
0xdc, 0x61, 0xb1, 0xf8, 0x9b, 0xe5, 0xca, 0x6f, 0x7e, 0x3f, 0x89, 0xfb, 0x6c, 0xab, 0xf1, 0xb9, 0xab, 0x59, 0xcd, 0xf8,
0xde, 0x7d, 0xbd, 0xea, 0xb5, 0xe5, 0x84, 0x5a, 0xb6, 0x7e, 0x67, 0x89, 0x37, 0xde, 0x6e, 0xad, 0x66, 0xc4, 0x8d, 0xcf,
0xbf, 0x73, 0x1a, 0x1f, 0xcd, 0x05, 0x50, 0xcb, 0x13, 0xb9, 0xeb, 0x5b, 0x55, 0x8e, 0x14, 0xa5, 0x3d, 0x9b, 0xc6, 0xf6,
0xec, 0x10, 0xf9, 0xec, 0xe7, 0xa3, 0x94, 0xef, 0xb3, 0xfb, 0x93, 0xca, 0x15, 0xa9, 0xc7, 0xff, 0x55, 0x39, 0x55, 0x3e,
0x99, 0xed, 0xff, 0xc7, 0xf2, 0x7d, 0x18, 0x4e, 0xb9, 0x9a, 0x77, 0xfd, 0x7f, 0xb4, 0xed, 0x98, 0xb4, 0xf7, 0x93, 0x1d,
0xe5, 0xda, 0x11, 0x0b, 0xbb, 0xf6, 0xfb, 0x8b, 0x74, 0xad, 0x18, 0xe9, 0x1c, 0x7b, 0xf5, 0xd9, 0xd7, 0xae, 0x4f, 0x56,
0xc4, 0x7f, 0x5c, 0xcc, 0x93, 0xbb, 0x77, 0x1d, 0xeb, 0xbe, 0x9a, 0x4f, 0x5a, 0x86, 0x2f, 0xc6, 0xff, 0x8e, 0xf8, 0x99,
0x9d, 0xff, 0x47, 0x79, 0x37, 0x9d, 0x33, 0x6b, 0x4c, 0x3c, 0xcc, 0xe8, 0xfc, 0xdb, 0xe2, 0x7f, 0x6f, 0x19, 0x77, 0xb7,
0xe6, 0xd7, 0x23, 0xec, 0xf1, 0xd1, 0xf8, 0x9f, 0xdd, 0xef, 0x6d, 0x7e, 0xee, 0x7a, 0xbf, 0xfe, 0xdf, 0xb9, 0xb2, 0x71,
0x46, 0xfc, 0x9f, 0x12, 0xe5, 0xb9, 0x32, 0x5f, 0x1b, 0xff, 0xef, 0xc7, 0x50, 0x57, 0x1f, 0xf6, 0xde, 0xb9, 0x47, 0xdb,
0xfc, 0xff, 0x7e, 0x97, 0xe4, 0xdc, 0xdd, 0x9d, 0xbd, 0xab, 0x49, 0x3b, 0x4b, 0xbd, 0x73, 0xcf, 0xe1, 0xa7, 0x63, 0x87,
0xee, 0xf9, 0xee, 0x19, 0xfd, 0x7f, 0x88, 0xff, 0x05, 0x6b, 0xe1, 0x27, 0xf4, 0x92, 0xab, 0xee, 0xe5, 0xe5, 0xb3, 0xd8,
0xf7, 0x7e, 0x32, 0x5b, 0x52, 0xf9, 0xfb, 0xff, 0x5f, 0x1f, 0xff, 0x3f, 0xd9, 0xe1, 0xe7, 0x5b, 0xf1, 0x1f, 0xc5, 0x15,
0xc5, 0x33, 0xe2, 0x3f, 0x36, 0x8e, 0x6a, 0x57, 0xdc, 0xcb, 0x3f, 0x79, 0xfc, 0xdf, 0xbf, 0x13, 0xd4, 0xd7, 0xe3, 0xff,
0x0b, 0x63, 0xe8, 0x35, 0x4f, 0xa1, 0xbc, 0x17, 0xff, 0x73, 0x77, 0x86, 0x4f, 0x1e, 0xff, 0x9f, 0x1e, 0xff, 0xb3, 0x57,
0x25, 0x36, 0xcd, 0xff, 0x9f, 0x8e, 0x34, 0x7e, 0x7f, 0xfc, 0x8f, 0xad, 0x7b, 0xf7, 0xd7, 0xe7, 0x9b, 0xe3, 0xd0, 0x67,
0x61, 0xce, 0x79, 0x8a, 0xe3, 0xfd, 0x99, 0xcd, 0xfc, 0xae, 0xa8, 0xeb, 0xef, 0xff, 0x8f, 0x65, 0xfd, 0x7f, 0xef, 0x93,
0x2d, 0xbb, 0xee, 0xff, 0xef, 0x7d, 0xa2, 0xa8, 0xfb, 0x0c, 0xc5, 0xff, 0x37, 0xda, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xe2, 0x73, 0xf2, 0x2b, 0x72, 0xeb, 0xf7, 0xe7, 0xc3, 0x38, 0x3d, 0xb7, 0xfe,
0xdd, 0xfb, 0x33, 0xe3, 0xd8, 0xdc, 0xfa, 0xe3, 0x51, 0x8e, 0xa2, 0xef, 0xe5, 0xd6, 0xf7, 0xee, 0xc7, 0xd3, 0xb7, 0x64,
0xd6, 0xe5, 0xd6, 0xef, 0x7b, 0x87, 0xfa, 0xf4, 0xdc, 0xfa, 0xe3, 0x26, 0x13, 0xd1, 0xc9, 0xb9, 0xf5, 0xeb, 0x6f, 0x51,
0x9d, 0x9a, 0x5b, 0x9f, 0xb5, 0xef, 0x4e, 0x3e, 0x6d, 0xfb, 0xe3, 0xc5, 0x6b, 0xf6, 0x46, 0x36, 0x84, 0x93, 0x6b, 0x64,
0x3e, 0x5b, 0xd3, 0x8a, 0x16, 0xa5, 0xf3, 0x7d, 0xcd, 0xb3, 0x73, 0xeb, 0x7f, 0x3d, 0xc6, 0xeb, 0xd9, 0x58, 0xa3, 0x9c,
0xf3, 0xbe, 0xef, 0x5d, 0xed, 0x48, 0x8d, 0x1b, 0xd7, 0xe6, 0xd6, 0xba, 0x6e, 0x47, 0xcf, 0xdd, 0x29, 0xe1, 0xdb, 0xb9,
0xb5, 0xc5, 0x7f, 0x4f, 0xab, 0x1b, 0x4d, 0x51, 0xf7, 0xf4, 0x93, 0x7d, 0x59, 0x83, 0xfa, 0xe2, 0x3f, 0xda, 0x3f, 0xdb,
0x9b, 0x5b, 0xab, 0xba, 0x9e, 0x20, 0xfe, 0x7f, 0x57, 0x3b, 0x90, 0x99, 0xd1, 0x3e, 0x29, 0xf7, 0x37, 0x6b, 0xc0, 0xce,
0xdc, 0x5a, 0x5f, 0x8f, 0xff, 0x4a, 0xff, 0x20, 0xfe, 0x7f, 0xcf, 0xf8, 0xbf, 0xaf, 0x2f, 0xaf, 0xaf, 0xff, 0x7f, 0x79,
0x6f, 0xad, 0xdf, 0x19, 0xff, 0x67, 0xe4, 0xd6, 0x15, 0xff, 0xef, 0x8c, 0xff, 0x6b, 0xfb, 0x13, 0xac, 0x58, 0xcd, 0xed,
0x9d, 0x4d, 0x88, 0xff, 0xd5, 0x75, 0xe7, 0xa4, 0x9d, 0x21, 0xc4, 0x78, 0x7d, 0xfe, 0x5f, 0xdb, 0x13, 0xb4, 0xda, 0x02,
0xec, 0xcb, 0xd5, 0xfa, 0x46, 0x6e, 0x7d, 0xb9, 0x75, 0x67, 0xae, 0xd7, 0xf5, 0xe8, 0xef, 0x9b, 0xf7, 0x63, 0x4e, 0x1f,
0xff, 0xf7, 0xde, 0xab, 0xf9, 0xff, 0x35, 0xa5, 0xd5, 0x2b, 0xde, 0xab, 0xc6, 0xff, 0x2b, 0xda, 0xd8, 0x37, 0x4b, 0x63,
0xcd, 0xbd, 0xa3, 0xfe, 0x33, 0x8c, 0xa6, 0xd1, 0x1f, 0xef, 0xb4, 0x1a, 0xb0, 0x66, 0x9c, 0xf1, 0x7e, 0x4b, 0x08, 0x7c,
0xed, 0x49, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x93, 0xfc, 0xfb, 0x9f, 0x72, 0x00, 0xf1, 0x0f, 0xfc, 0x75, 0xf1, 0xff, 0x2f };
// Font glyphs rectangles data (on atlas)
static const Rectangle genesisFontRecs[189] = {
{ 4, 4, 4 , 16 },
{ 16, 4, 1 , 9 },
{ 25, 4, 3 , 3 },
{ 36, 4, 6 , 9 },
{ 50, 4, 5 , 13 },
{ 63, 4, 7 , 9 },
{ 78, 4, 5 , 9 },
{ 91, 4, 1 , 3 },
{ 100, 4, 3 , 9 },
{ 111, 4, 3 , 9 },
{ 122, 4, 5 , 5 },
{ 135, 4, 5 , 5 },
{ 148, 4, 2 , 3 },
{ 158, 4, 4 , 1 },
{ 170, 4, 1 , 1 },
{ 179, 4, 3 , 9 },
{ 190, 4, 5 , 9 },
{ 203, 4, 3 , 9 },
{ 214, 4, 5 , 9 },
{ 227, 4, 5 , 9 },
{ 240, 4, 5 , 9 },
{ 253, 4, 5 , 9 },
{ 266, 4, 5 , 9 },
{ 279, 4, 5 , 9 },
{ 292, 4, 5 , 9 },
{ 305, 4, 5 , 9 },
{ 318, 4, 1 , 7 },
{ 327, 4, 2 , 9 },
{ 337, 4, 3 , 5 },
{ 348, 4, 4 , 3 },
{ 360, 4, 3 , 5 },
{ 371, 4, 5 , 9 },
{ 384, 4, 7 , 9 },
{ 399, 4, 5 , 9 },
{ 412, 4, 5 , 9 },
{ 425, 4, 5 , 9 },
{ 438, 4, 5 , 9 },
{ 451, 4, 5 , 9 },
{ 464, 4, 5 , 9 },
{ 477, 4, 5 , 9 },
{ 490, 4, 5 , 9 },
{ 4, 28, 1 , 9 },
{ 13, 28, 5 , 9 },
{ 26, 28, 5 , 9 },
{ 39, 28, 5 , 9 },
{ 52, 28, 7 , 9 },
{ 67, 28, 5 , 9 },
{ 80, 28, 5 , 9 },
{ 93, 28, 5 , 9 },
{ 106, 28, 5 , 9 },
{ 119, 28, 5 , 9 },
{ 132, 28, 5 , 9 },
{ 145, 28, 5 , 9 },
{ 158, 28, 5 , 9 },
{ 171, 28, 5 , 9 },
{ 184, 28, 7 , 9 },
{ 199, 28, 5 , 9 },
{ 212, 28, 5 , 9 },
{ 225, 28, 5 , 9 },
{ 238, 28, 3 , 9 },
{ 249, 28, 3 , 9 },
{ 260, 28, 3 , 9 },
{ 271, 28, 5 , 3 },
{ 284, 28, 5 , 1 },
{ 297, 28, 2 , 2 },
{ 307, 28, 5 , 7 },
{ 320, 28, 5 , 9 },
{ 333, 28, 5 , 7 },
{ 346, 28, 5 , 9 },
{ 359, 28, 5 , 7 },
{ 372, 28, 4 , 9 },
{ 384, 28, 5 , 9 },
{ 397, 28, 5 , 9 },
{ 410, 28, 1 , 9 },
{ 419, 28, 5 , 11 },
{ 432, 28, 5 , 9 },
{ 445, 28, 2 , 9 },
{ 455, 28, 7 , 7 },
{ 470, 28, 5 , 7 },
{ 483, 28, 5 , 7 },
{ 496, 28, 5 , 9 },
{ 4, 52, 5 , 9 },
{ 17, 52, 5 , 7 },
{ 30, 52, 5 , 7 },
{ 43, 52, 4 , 8 },
{ 55, 52, 5 , 7 },
{ 68, 52, 5 , 7 },
{ 81, 52, 7 , 7 },
{ 96, 52, 5 , 7 },
{ 109, 52, 5 , 9 },
{ 122, 52, 5 , 7 },
{ 135, 52, 4 , 9 },
{ 147, 52, 1 , 9 },
{ 156, 52, 4 , 9 },
{ 168, 52, 6 , 2 },
{ 182, 52, 1 , 9 },
{ 191, 52, 5 , 11 },
{ 204, 52, 6 , 9 },
{ 218, 52, 6 , 9 },
{ 232, 52, 5 , 9 },
{ 245, 52, 5 , 12 },
{ 258, 52, 0 , 0 },
{ 266, 52, 5 , 10 },
{ 279, 52, 7 , 9 },
{ 294, 52, 0 , 0 },
{ 302, 52, 6 , 5 },
{ 316, 52, 5 , 3 },
{ 329, 52, 7 , 9 },
{ 344, 52, 0 , 0 },
{ 352, 52, 4 , 4 },
{ 364, 52, 5 , 7 },
{ 377, 52, 0 , 0 },
{ 385, 52, 0 , 0 },
{ 393, 52, 5 , 12 },
{ 406, 52, 5 , 9 },
{ 419, 52, 7 , 9 },
{ 434, 52, 1 , 1 },
{ 443, 52, 5 , 10 },
{ 456, 52, 0 , 0 },
{ 464, 52, 0 , 0 },
{ 472, 52, 6 , 5 },
{ 486, 52, 9 , 9 },
{ 4, 76, 9 , 7 },
{ 21, 76, 5 , 11 },
{ 34, 76, 5 , 9 },
{ 47, 76, 5 , 12 },
{ 60, 76, 5 , 12 },
{ 73, 76, 5 , 12 },
{ 86, 76, 6 , 12 },
{ 100, 76, 5 , 11 },
{ 113, 76, 5 , 13 },
{ 126, 76, 9 , 9 },
{ 143, 76, 5 , 12 },
{ 156, 76, 5 , 12 },
{ 169, 76, 5 , 12 },
{ 182, 76, 5 , 12 },
{ 195, 76, 5 , 11 },
{ 208, 76, 2 , 12 },
{ 218, 76, 2 , 12 },
{ 228, 76, 3 , 12 },
{ 239, 76, 3 , 11 },
{ 250, 76, 6 , 9 },
{ 264, 76, 6 , 12 },
{ 278, 76, 5 , 12 },
{ 291, 76, 5 , 12 },
{ 304, 76, 5 , 12 },
{ 317, 76, 6 , 12 },
{ 331, 76, 5 , 11 },
{ 344, 76, 5 , 5 },
{ 357, 76, 7 , 9 },
{ 372, 76, 5 , 12 },
{ 385, 76, 5 , 12 },
{ 398, 76, 5 , 12 },
{ 411, 76, 5 , 11 },
{ 424, 76, 5 , 12 },
{ 437, 76, 5 , 9 },
{ 450, 76, 5 , 9 },
{ 463, 76, 5 , 10 },
{ 476, 76, 5 , 10 },
{ 489, 76, 5 , 10 },
{ 4, 100, 6 , 10 },
{ 18, 100, 5 , 9 },
{ 31, 100, 5 , 11 },
{ 44, 100, 9 , 7 },
{ 61, 100, 5 , 10 },
{ 74, 100, 5 , 10 },
{ 87, 100, 5 , 10 },
{ 100, 100, 5 , 10 },
{ 113, 100, 5 , 9 },
{ 126, 100, 2 , 10 },
{ 136, 100, 2 , 10 },
{ 146, 100, 3 , 10 },
{ 157, 100, 3 , 9 },
{ 168, 100, 6 , 9 },
{ 182, 100, 6 , 10 },
{ 196, 100, 5 , 10 },
{ 209, 100, 5 , 10 },
{ 222, 100, 5 , 10 },
{ 235, 100, 6 , 10 },
{ 249, 100, 5 , 9 },
{ 262, 100, 5 , 5 },
{ 275, 100, 7 , 7 },
{ 290, 100, 5 , 10 },
{ 303, 100, 5 , 10 },
{ 316, 100, 5 , 10 },
{ 329, 100, 5 , 9 },
{ 342, 100, 5 , 12 },
{ 355, 100, 5 , 11 },
{ 368, 100, 5 , 11 },
};
// Font glyphs info data
// NOTE: No glyphs.image data provided
static const GlyphInfo genesisFontGlyphs[189] = {
{ 32, 0, 0, 4, { 0 }},
{ 33, 2, 4, 5, { 0 }},
{ 34, 2, 4, 7, { 0 }},
{ 35, 1, 4, 8, { 0 }},
{ 36, 1, 2, 7, { 0 }},
{ 37, 1, 4, 9, { 0 }},
{ 38, 1, 4, 7, { 0 }},
{ 39, 2, 4, 5, { 0 }},
{ 40, 3, 4, 7, { 0 }},
{ 41, 1, 4, 7, { 0 }},
{ 42, 1, 4, 7, { 0 }},
{ 43, 1, 6, 7, { 0 }},
{ 44, 1, 12, 5, { 0 }},
{ 45, 1, 8, 6, { 0 }},
{ 46, 2, 12, 5, { 0 }},
{ 47, 1, 4, 5, { 0 }},
{ 48, 1, 4, 7, { 0 }},
{ 49, 2, 4, 7, { 0 }},
{ 50, 1, 4, 7, { 0 }},
{ 51, 1, 4, 7, { 0 }},
{ 52, 1, 4, 7, { 0 }},
{ 53, 1, 4, 7, { 0 }},
{ 54, 1, 4, 7, { 0 }},
{ 55, 1, 4, 7, { 0 }},
{ 56, 1, 4, 7, { 0 }},
{ 57, 1, 4, 7, { 0 }},
{ 58, 2, 6, 5, { 0 }},
{ 59, 1, 6, 5, { 0 }},
{ 60, 1, 6, 5, { 0 }},
{ 61, 1, 7, 6, { 0 }},
{ 62, 1, 6, 5, { 0 }},
{ 63, 1, 4, 7, { 0 }},
{ 64, 1, 4, 9, { 0 }},
{ 65, 1, 4, 7, { 0 }},
{ 66, 1, 4, 7, { 0 }},
{ 67, 1, 4, 7, { 0 }},
{ 68, 1, 4, 7, { 0 }},
{ 69, 1, 4, 7, { 0 }},
{ 70, 1, 4, 7, { 0 }},
{ 71, 1, 4, 7, { 0 }},
{ 72, 1, 4, 7, { 0 }},
{ 73, 2, 4, 5, { 0 }},
{ 74, 1, 4, 7, { 0 }},
{ 75, 1, 4, 7, { 0 }},
{ 76, 1, 4, 7, { 0 }},
{ 77, 1, 4, 9, { 0 }},
{ 78, 1, 4, 7, { 0 }},
{ 79, 1, 4, 7, { 0 }},
{ 80, 1, 4, 7, { 0 }},
{ 81, 1, 4, 7, { 0 }},
{ 82, 1, 4, 7, { 0 }},
{ 83, 1, 4, 7, { 0 }},
{ 84, 1, 4, 7, { 0 }},
{ 85, 1, 4, 7, { 0 }},
{ 86, 1, 4, 7, { 0 }},
{ 87, 1, 4, 9, { 0 }},
{ 88, 1, 4, 7, { 0 }},
{ 89, 1, 4, 7, { 0 }},
{ 90, 1, 4, 7, { 0 }},
{ 91, 3, 4, 7, { 0 }},
{ 92, 1, 4, 5, { 0 }},
{ 93, 1, 4, 7, { 0 }},
{ 94, 1, 4, 7, { 0 }},
{ 95, 0, 14, 5, { 0 }},
{ 96, 1, 4, 5, { 0 }},
{ 97, 1, 6, 7, { 0 }},
{ 98, 1, 4, 7, { 0 }},
{ 99, 1, 6, 7, { 0 }},
{ 100, 1, 4, 7, { 0 }},
{ 101, 1, 6, 7, { 0 }},
{ 102, 1, 4, 6, { 0 }},
{ 103, 1, 6, 7, { 0 }},
{ 104, 1, 4, 7, { 0 }},
{ 105, 2, 4, 5, { 0 }},
{ 106, 1, 4, 7, { 0 }},
{ 107, 1, 4, 7, { 0 }},
{ 108, 2, 4, 5, { 0 }},
{ 109, 1, 6, 9, { 0 }},
{ 110, 1, 6, 7, { 0 }},
{ 111, 1, 6, 7, { 0 }},
{ 112, 1, 6, 7, { 0 }},
{ 113, 1, 6, 7, { 0 }},
{ 114, 1, 6, 7, { 0 }},
{ 115, 1, 6, 7, { 0 }},
{ 116, 1, 5, 6, { 0 }},
{ 117, 1, 6, 7, { 0 }},
{ 118, 1, 6, 7, { 0 }},
{ 119, 1, 6, 9, { 0 }},
{ 120, 1, 6, 7, { 0 }},
{ 121, 1, 6, 7, { 0 }},
{ 122, 1, 6, 7, { 0 }},
{ 123, 2, 4, 7, { 0 }},
{ 124, 2, 4, 5, { 0 }},
{ 125, 1, 4, 7, { 0 }},
{ 126, 1, 4, 8, { 0 }},
{ 161, 2, 6, 5, { 0 }},
{ 162, 1, 4, 7, { 0 }},
{ 163, 1, 4, 8, { 0 }},
{ 8364, 1, 4, 8, { 0 }},
{ 165, 1, 4, 7, { 0 }},
{ 352, 1, 1, 7, { 0 }},
{ 167, 0, 0, 0, { 0 }},
{ 353, 1, 3, 7, { 0 }},
{ 169, 1, 4, 9, { 0 }},
{ 170, 0, 0, 0, { 0 }},
{ 171, 1, 6, 8, { 0 }},
{ 172, 1, 8, 7, { 0 }},
{ 174, 1, 4, 9, { 0 }},
{ 175, 0, 0, 0, { 0 }},
{ 176, 1, 4, 6, { 0 }},
{ 177, 1, 6, 7, { 0 }},
{ 178, 0, 0, 0, { 0 }},
{ 179, 0, 0, 0, { 0 }},
{ 381, 1, 1, 7, { 0 }},
{ 181, 1, 6, 7, { 0 }},
{ 182, 1, 4, 9, { 0 }},
{ 183, 2, 8, 5, { 0 }},
{ 382, 1, 3, 7, { 0 }},
{ 185, 0, 0, 0, { 0 }},
{ 186, 0, 0, 0, { 0 }},
{ 187, 1, 6, 8, { 0 }},
{ 338, 1, 4, 11, { 0 }},
{ 339, 1, 6, 11, { 0 }},
{ 376, 1, 2, 7, { 0 }},
{ 191, 1, 6, 7, { 0 }},
{ 192, 1, 1, 7, { 0 }},
{ 193, 1, 1, 7, { 0 }},
{ 194, 1, 1, 7, { 0 }},
{ 195, 1, 1, 7, { 0 }},
{ 196, 1, 2, 7, { 0 }},
{ 197, 1, 0, 7, { 0 }},
{ 198, 1, 4, 11, { 0 }},
{ 199, 1, 4, 7, { 0 }},
{ 200, 1, 1, 7, { 0 }},
{ 201, 1, 1, 7, { 0 }},
{ 202, 1, 1, 7, { 0 }},
{ 203, 1, 2, 7, { 0 }},
{ 204, 1, 1, 5, { 0 }},
{ 205, 2, 1, 5, { 0 }},
{ 206, 1, 1, 5, { 0 }},
{ 207, 1, 2, 5, { 0 }},
{ 208, 0, 4, 7, { 0 }},
{ 209, 1, 1, 7, { 0 }},
{ 210, 1, 1, 7, { 0 }},
{ 211, 1, 1, 7, { 0 }},
{ 212, 1, 1, 7, { 0 }},
{ 213, 1, 1, 7, { 0 }},
{ 214, 1, 2, 7, { 0 }},
{ 215, 1, 6, 7, { 0 }},
{ 216, 0, 4, 7, { 0 }},
{ 217, 1, 1, 7, { 0 }},
{ 218, 1, 1, 7, { 0 }},
{ 219, 1, 1, 7, { 0 }},
{ 220, 1, 2, 7, { 0 }},
{ 221, 1, 1, 7, { 0 }},
{ 222, 1, 4, 7, { 0 }},
{ 223, 1, 4, 7, { 0 }},
{ 224, 1, 3, 7, { 0 }},
{ 225, 1, 3, 7, { 0 }},
{ 226, 1, 3, 7, { 0 }},
{ 227, 1, 3, 7, { 0 }},
{ 228, 1, 4, 7, { 0 }},
{ 229, 1, 2, 7, { 0 }},
{ 230, 1, 6, 11, { 0 }},
{ 231, 1, 6, 7, { 0 }},
{ 232, 1, 3, 7, { 0 }},
{ 233, 1, 3, 7, { 0 }},
{ 234, 1, 3, 7, { 0 }},
{ 235, 1, 4, 7, { 0 }},
{ 236, 1, 3, 5, { 0 }},
{ 237, 2, 3, 5, { 0 }},
{ 238, 1, 3, 5, { 0 }},
{ 239, 1, 4, 5, { 0 }},
{ 240, 1, 4, 7, { 0 }},
{ 241, 1, 3, 7, { 0 }},
{ 242, 1, 3, 7, { 0 }},
{ 243, 1, 3, 7, { 0 }},
{ 244, 1, 3, 7, { 0 }},
{ 245, 1, 3, 7, { 0 }},
{ 246, 1, 4, 7, { 0 }},
{ 247, 1, 6, 7, { 0 }},
{ 248, 0, 6, 7, { 0 }},
{ 249, 1, 3, 7, { 0 }},
{ 250, 1, 3, 7, { 0 }},
{ 251, 1, 3, 7, { 0 }},
{ 252, 1, 4, 7, { 0 }},
{ 253, 1, 3, 7, { 0 }},
{ 254, 1, 4, 7, { 0 }},
{ 255, 1, 4, 7, { 0 }},
};
// Style loading function: Genesis
static void GuiLoadStyleGenesis(void)
{
// Load style properties provided
// NOTE: Default properties are propagated
for (int i = 0; i < GENESIS_STYLE_PROPS_COUNT; i++)
{
GuiSetStyle(genesisStyleProps[i].controlId, genesisStyleProps[i].propertyId, genesisStyleProps[i].propertyValue);
}
// Custom font loading
// NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function
int genesisFontDataSize = 0;
unsigned char *data = DecompressData(genesisFontData, GENESIS_STYLE_FONT_ATLAS_COMP_SIZE, &genesisFontDataSize);
Image imFont = { data, 512, 256, 1, 2 };
Font font = { 0 };
font.baseSize = 16;
font.glyphCount = 189;
// Load texture from image
font.texture = LoadTextureFromImage(imFont);
UnloadImage(imFont); // Uncompressed image data can be unloaded from memory
// Copy char recs data from global fontRecs
// NOTE: Required to avoid issues if trying to free font
font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle));
memcpy(font.recs, genesisFontRecs, font.glyphCount*sizeof(Rectangle));
// Copy font char info data from global fontChars
// NOTE: Required to avoid issues if trying to free font
font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo));
memcpy(font.glyphs, genesisFontGlyphs, font.glyphCount*sizeof(GlyphInfo));
GuiSetFont(font);
// Setup a white rectangle on the font to be used on shapes drawing,
// it makes possible to draw shapes and text (full UI) in a single draw call
Rectangle fontWhiteRec = { 510, 254, 1, 1 };
SetShapesTexture(font.texture, fontWhiteRec);
//-----------------------------------------------------------------
// TODO: Custom user style setup: Set specific properties here (if required)
// i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT
}

View File

@ -0,0 +1,579 @@
//////////////////////////////////////////////////////////////////////////////////
// //
// StyleAsCode exporter v2.0 - Style data exported as a values array //
// //
// USAGE: On init call: GuiLoadStyleJungle(); //
// //
// more info and bugs-report: github.com/raysan5/raygui //
// feedback and support: ray[at]raylibtech.com //
// //
// Copyright (c) 2020-2025 raylib technologies (@raylibtech) //
// //
//////////////////////////////////////////////////////////////////////////////////
#define JUNGLE_STYLE_PROPS_COUNT 17
// Custom style name: Jungle
static const GuiStyleProp jungleStyleProps[JUNGLE_STYLE_PROPS_COUNT] = {
{ 0, 0, (int)0x60827dff }, // DEFAULT_BORDER_COLOR_NORMAL
{ 0, 1, (int)0x2c3334ff }, // DEFAULT_BASE_COLOR_NORMAL
{ 0, 2, (int)0x82a29fff }, // DEFAULT_TEXT_COLOR_NORMAL
{ 0, 3, (int)0x5f9aa8ff }, // DEFAULT_BORDER_COLOR_FOCUSED
{ 0, 4, (int)0x334e57ff }, // DEFAULT_BASE_COLOR_FOCUSED
{ 0, 5, (int)0x6aa9b8ff }, // DEFAULT_TEXT_COLOR_FOCUSED
{ 0, 6, (int)0xa9cb8dff }, // DEFAULT_BORDER_COLOR_PRESSED
{ 0, 7, (int)0x3b6357ff }, // DEFAULT_BASE_COLOR_PRESSED
{ 0, 8, (int)0x97af81ff }, // DEFAULT_TEXT_COLOR_PRESSED
{ 0, 9, (int)0x5b6462ff }, // DEFAULT_BORDER_COLOR_DISABLED
{ 0, 10, (int)0x2c3334ff }, // DEFAULT_BASE_COLOR_DISABLED
{ 0, 11, (int)0x666b69ff }, // DEFAULT_TEXT_COLOR_DISABLED
{ 0, 16, (int)0x0000000c }, // DEFAULT_TEXT_SIZE
{ 0, 17, (int)0x00000000 }, // DEFAULT_TEXT_SPACING
{ 0, 18, (int)0x638465ff }, // DEFAULT_LINE_COLOR
{ 0, 19, (int)0x2b3a3aff }, // DEFAULT_BACKGROUND_COLOR
{ 0, 20, (int)0x00000006 }, // DEFAULT_TEXT_LINE_SPACING
};
// WARNING: This style uses a custom font: "PixelIntv.otf" (size: 12, spacing: 0)
#define JUNGLE_STYLE_FONT_ATLAS_COMP_SIZE 2059
// Font atlas image pixels data: DEFLATE compressed
static unsigned char jungleFontData[JUNGLE_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed,
0x9d, 0xbd, 0x8e, 0x1d, 0x35, 0x18, 0x86, 0x8d, 0x39, 0x1d, 0x25, 0xa2, 0x00, 0x09, 0x91, 0x06, 0x89, 0x86, 0x86, 0x28,
0x12, 0x74, 0x7b, 0x01, 0xd4, 0x08, 0x51, 0x20, 0x2a, 0x1a, 0xe0, 0x1e, 0xc8, 0x95, 0xa5, 0xa1, 0xe7, 0x06, 0xb8, 0x0b,
0x2e, 0xe0, 0x8b, 0x36, 0x9b, 0xdd, 0xec, 0xee, 0x99, 0xb1, 0xfd, 0xfd, 0xd8, 0x9e, 0x9f, 0x67, 0x1f, 0x25, 0x52, 0xc6,
0x67, 0x66, 0x6c, 0xbf, 0xb6, 0x67, 0x36, 0xdf, 0x7b, 0x3e, 0x4b, 0x02, 0x00, 0x00, 0x00, 0xb8, 0xe2, 0xf6, 0x67, 0xf9,
0xd8, 0x52, 0x49, 0x7a, 0x5f, 0xd2, 0x7e, 0xad, 0xfb, 0xe3, 0x77, 0x25, 0x79, 0xf5, 0x13, 0xcb, 0x57, 0xcc, 0x2b, 0x75,
0x58, 0xab, 0xf5, 0x7a, 0xcd, 0x92, 0xaa, 0x64, 0xfd, 0xfa, 0xeb, 0xfd, 0x95, 0x14, 0x6d, 0x78, 0xfa, 0x93, 0x14, 0x6d,
0x29, 0x9f, 0xd7, 0x5b, 0xff, 0x72, 0x1f, 0xac, 0x97, 0xdd, 0xfd, 0xb9, 0xed, 0x89, 0xac, 0xb8, 0xe6, 0xfa, 0xe7, 0x93,
0x6a, 0x04, 0xea, 0x47, 0x86, 0xae, 0x77, 0x4b, 0x9f, 0xae, 0xb5, 0x41, 0x94, 0x35, 0xb8, 0x3f, 0xde, 0x53, 0xff, 0xf4,
0x70, 0x8f, 0xf6, 0xf9, 0x5f, 0x53, 0x45, 0xe4, 0xb2, 0xd8, 0x13, 0xa9, 0xa8, 0x4d, 0x36, 0xdc, 0x29, 0x62, 0x34, 0xa7,
0xa0, 0xde, 0xcd, 0xc5, 0x36, 0x88, 0x41, 0x7f, 0xdb, 0x08, 0x8d, 0xba, 0x8e, 0x6d, 0xfe, 0xdf, 0x72, 0x79, 0x37, 0x02,
0xca, 0x57, 0xf5, 0xd7, 0x38, 0x6a, 0xfe, 0xa7, 0xae, 0xea, 0x7b, 0xf4, 0x1f, 0xb1, 0xfe, 0x97, 0x3f, 0x5f, 0xee, 0xb3,
0xe5, 0xeb, 0xe5, 0xf7, 0xf3, 0x5f, 0xff, 0xf4, 0x8c, 0xd0, 0x5f, 0xff, 0xfc, 0xef, 0xab, 0x7e, 0xc4, 0xfa, 0xbf, 0xc5,
0xf7, 0xc8, 0xda, 0x73, 0x7c, 0x79, 0xec, 0x48, 0xf7, 0xf9, 0x3f, 0x83, 0x92, 0xfa, 0xb5, 0xf7, 0x3f, 0x71, 0xac, 0xb3,
0xbd, 0xe7, 0xbf, 0xe5, 0x5a, 0xf7, 0x3d, 0x21, 0x86, 0xf9, 0xb9, 0x57, 0xfd, 0x4b, 0xea, 0x43, 0xc4, 0x5a, 0xa3, 0x79,
0xca, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x33, 0x62, 0x52, 0x8e, 0xbf, 0x47,
0x46, 0x22, 0x7b, 0x95, 0xb5, 0xbb, 0x0d, 0x34, 0xce, 0x95, 0x6c, 0xe8, 0xb1, 0x59, 0xfd, 0xd2, 0xcb, 0xed, 0x97, 0xd4,
0xde, 0x8c, 0x96, 0xda, 0x58, 0xef, 0xe7, 0xd1, 0x3f, 0x2b, 0x63, 0xaf, 0x65, 0x87, 0xde, 0x9a, 0x9f, 0x71, 0x3d, 0x72,
0xed, 0x6d, 0x9f, 0xb6, 0x4c, 0xb7, 0x02, 0xa4, 0x21, 0xf3, 0xbf, 0xcd, 0xc3, 0xd4, 0xc7, 0xdd, 0xb8, 0xec, 0x33, 0x2b,
0xd5, 0xf5, 0xa2, 0x76, 0x14, 0x7e, 0x88, 0x36, 0xf7, 0x1d, 0xdf, 0xd1, 0xae, 0x4f, 0xab, 0xa3, 0xc4, 0x32, 0x26, 0x2d,
0x0e, 0xd6, 0x88, 0xf5, 0x3f, 0x66, 0xfe, 0x97, 0xc6, 0xa9, 0x3c, 0xfb, 0x13, 0xb3, 0x8e, 0xcf, 0xd2, 0xbf, 0xc7, 0x5a,
0x9d, 0x1a, 0x56, 0x05, 0x6b, 0x5d, 0x6c, 0xcf, 0x7f, 0x8b, 0x53, 0xa7, 0xe4, 0x56, 0xb2, 0xbf, 0x4f, 0xcd, 0x98, 0xff,
0x9e, 0x39, 0x6e, 0x5b, 0xff, 0xcb, 0xfa, 0xc7, 0xb9, 0xdb, 0x64, 0xca, 0xdb, 0x74, 0xcb, 0x1c, 0xdb, 0xd6, 0xf3, 0x1f,
0x22, 0xfd, 0x8c, 0xf3, 0x7e, 0x9f, 0x42, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xe8, 0xeb, 0xc7, 0x1b, 0xe5, 0x29, 0x91, 0xc6, 0x2c, 0x3e, 0xeb, 0x7e, 0xad, 0x51, 0x6e, 0xbd, 0xf1, 0xfd, 0x1d, 0xed,
0xfb, 0x88, 0x88, 0x49, 0x5b, 0x32, 0x98, 0xf9, 0xbd, 0x88, 0xb2, 0x09, 0x47, 0x5e, 0x8f, 0x7e, 0x9b, 0xa9, 0xbf, 0xa5,
0x3e, 0x76, 0xfd, 0xc5, 0x98, 0x61, 0xb0, 0x96, 0x19, 0x66, 0x5b, 0xfa, 0x5b, 0x5c, 0x07, 0x1e, 0xfd, 0xeb, 0x6b, 0x55,
0x2a, 0xe8, 0xa1, 0x5f, 0xe3, 0xad, 0xfa, 0x8b, 0x31, 0xef, 0x63, 0x9f, 0xa7, 0x58, 0x1f, 0xfd, 0x2d, 0xfd, 0x76, 0x94,
0xf5, 0xbf, 0x7e, 0xcd, 0x6c, 0x5c, 0xff, 0xa5, 0xba, 0xaa, 0x48, 0xb8, 0x1b, 0x55, 0x3f, 0xa7, 0x5a, 0xfb, 0xe7, 0xbc,
0xfa, 0xa7, 0x2e, 0xfa, 0xf7, 0xb9, 0xe3, 0x7e, 0x9e, 0xff, 0x96, 0xec, 0xd5, 0x33, 0x7c, 0x6e, 0x3e, 0x6f, 0x78, 0xad,
0x74, 0x44, 0xcf, 0xf4, 0x5b, 0xff, 0x71, 0x01, 0xee, 0xc7, 0x25, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x30, 0x22, 0x46, 0x61, 0x8f, 0x9d, 0xf5, 0x88, 0x00, 0x5e, 0x1f, 0xcf, 0x0d, 0x31, 0xcc, 0xe7, 0xc7,
0xf3, 0x8a, 0x63, 0x44, 0x94, 0x39, 0xff, 0x6c, 0xfb, 0xf1, 0xb6, 0xe6, 0x41, 0xb3, 0x3b, 0x08, 0x23, 0xe2, 0x80, 0xe3,
0xf5, 0x4f, 0x4d, 0xf1, 0xd8, 0x6b, 0x25, 0xb3, 0xc1, 0x33, 0x94, 0x95, 0x19, 0x9f, 0x4a, 0x19, 0xa2, 0xf4, 0x6e, 0xa6,
0x7a, 0x2f, 0x58, 0x72, 0xdd, 0xd5, 0xae, 0x66, 0xdb, 0xa1, 0xb8, 0xe4, 0x8e, 0xa9, 0x79, 0x59, 0xf4, 0x2d, 0xcf, 0xea,
0xb6, 0xe5, 0x86, 0x35, 0xa0, 0xbf, 0x47, 0x3a, 0xa9, 0xe7, 0xa3, 0xcf, 0x77, 0xd7, 0x5f, 0xff, 0xd4, 0xe0, 0xf1, 0x8b,
0x76, 0xa4, 0x48, 0x65, 0xf7, 0x5b, 0xcb, 0x08, 0xe8, 0xad, 0x7f, 0xad, 0xad, 0x76, 0x97, 0x50, 0x0a, 0x1d, 0x37, 0xd1,
0xfa, 0xb7, 0x8c, 0xd3, 0xe8, 0x11, 0x6c, 0x19, 0x01, 0x63, 0xe6, 0xbf, 0xa8, 0xf5, 0x2f, 0xaf, 0x0d, 0xf1, 0xbd, 0x67,
0x71, 0x01, 0xd9, 0x56, 0x14, 0xaf, 0x5b, 0xcd, 0xa2, 0x62, 0x36, 0xad, 0x1c, 0x23, 0xde, 0xa0, 0x6d, 0x7b, 0x55, 0x47,
0x3b, 0x36, 0x6d, 0x3d, 0x31, 0x5e, 0x7f, 0x31, 0xef, 0xf8, 0x9d, 0x37, 0xb7, 0xfb, 0xb5, 0x6d, 0xd6, 0xd9, 0x1d, 0x7b,
0xf1, 0xf3, 0x7f, 0x7b, 0xdf, 0x46, 0x1b, 0x71, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x39, 0x73, 0x14, 0xe8, 0x33, 0xd5, 0xd4, 0xcf, 0xb0, 0xee, 0x9d, 0x35, 0x72, 0xef, 0xdc, 0x5e, 0xfb, 0xdb, 0xd9,
0xf3, 0x82, 0x49, 0x97, 0x1d, 0xe0, 0xe2, 0xe3, 0x66, 0xbe, 0x2c, 0x66, 0xb5, 0x1e, 0xb2, 0x66, 0xdc, 0xd2, 0x7a, 0x30,
0x3c, 0xbe, 0x1e, 0xab, 0xe7, 0x23, 0xde, 0x87, 0x17, 0xe3, 0x6d, 0xb3, 0xcd, 0x7f, 0x9b, 0x2f, 0x64, 0x6b, 0xfa, 0xa7,
0x41, 0xfe, 0x3c, 0x8f, 0xfe, 0xde, 0xdd, 0x9f, 0xed, 0x8e, 0x2c, 0x7d, 0xaf, 0x1e, 0x41, 0xff, 0x36, 0xf7, 0xae, 0xc5,
0x47, 0x18, 0xed, 0xc3, 0x9b, 0xa5, 0xbf, 0x98, 0xf6, 0xce, 0xf5, 0xe8, 0xef, 0xf3, 0xcb, 0x8f, 0x9b, 0xff, 0xf6, 0x3b,
0xa6, 0x2e, 0x3b, 0xa3, 0x7b, 0x67, 0xab, 0x2e, 0x53, 0xe3, 0x0c, 0xa7, 0x56, 0xbc, 0x5f, 0xae, 0x97, 0xb3, 0x6b, 0xae,
0x7b, 0x31, 0xca, 0xbf, 0xea, 0xcd, 0xfe, 0x3d, 0x43, 0x7f, 0xbc, 0x63, 0xc7, 0x1e, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x8b, 0xe3, 0xc4, 0xed, 0x47, 0xa5, 0xcd, 0xea, 0x26, 0x8b, 0x19, 0x3d,
0xac, 0xb9, 0x63, 0xb4, 0xde, 0x0a, 0x4d, 0xec, 0x5c, 0x13, 0xbb, 0xcc, 0x8f, 0x3e, 0x7b, 0xed, 0x83, 0xf8, 0x5e, 0x5e,
0x3c, 0xf0, 0x52, 0x3e, 0x5b, 0xcd, 0x72, 0xb2, 0xd4, 0x33, 0xb5, 0x73, 0xcb, 0x77, 0xb6, 0x38, 0x00, 0x74, 0xb9, 0xda,
0x74, 0x47, 0xb3, 0xb2, 0x9e, 0x16, 0xd7, 0x85, 0x2f, 0x43, 0x9f, 0xf5, 0xb3, 0xf9, 0x89, 0x92, 0x4f, 0x79, 0xf5, 0xa4,
0x77, 0x5f, 0x2e, 0xf6, 0x78, 0x5e, 0xc9, 0x75, 0x54, 0x3b, 0xb7, 0x7c, 0x67, 0xad, 0xfe, 0x59, 0x9d, 0xab, 0x4d, 0xaf,
0x4e, 0x8c, 0xaf, 0xd0, 0x96, 0x15, 0xc7, 0xa2, 0x7f, 0x5b, 0xfd, 0x1f, 0xaf, 0xac, 0xcf, 0x4b, 0x5f, 0x14, 0xfe, 0x75,
0x77, 0xf6, 0xe5, 0xe1, 0x6f, 0xfd, 0xb9, 0xa5, 0x3b, 0xeb, 0x9d, 0x3c, 0x36, 0x17, 0x97, 0x77, 0x04, 0x44, 0x66, 0x53,
0x4c, 0xae, 0x0c, 0xad, 0x36, 0xc7, 0x83, 0x3c, 0xd9, 0x5b, 0x5e, 0xab, 0x61, 0x69, 0xfe, 0xb7, 0xe9, 0xbf, 0x76, 0xe7,
0x64, 0xf4, 0xc7, 0xc9, 0x46, 0xe6, 0x7f, 0x8f, 0xac, 0x78, 0xa2, 0x9a, 0x27, 0xad, 0x6b, 0x85, 0x67, 0xfe, 0x97, 0x9e,
0xff, 0xf1, 0xfa, 0x5b, 0x5d, 0x70, 0xa3, 0xf5, 0x4f, 0x66, 0x9f, 0xaa, 0xf5, 0xad, 0xd1, 0xbe, 0x02, 0x94, 0x9f, 0xc2,
0x75, 0xfd, 0xd7, 0xa9, 0xeb, 0x6f, 0x79, 0xfe, 0xcb, 0x4e, 0xf4, 0x4f, 0x0e, 0x67, 0x6d, 0x94, 0x1f, 0xd5, 0xff, 0xfe,
0xdf, 0x53, 0x7f, 0xfd, 0xfb, 0x7f, 0xac, 0xb3, 0xd2, 0x96, 0xd5, 0x71, 0x4f, 0xdf, 0x94, 0xf3, 0xb7, 0xe6, 0xd7, 0x47,
0xbf, 0xc3, 0xbd, 0x92, 0x1f, 0x86, 0x9d, 0x0b, 0x31, 0x8e, 0x57, 0x3c, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xb0, 0x75, 0xea, 0x5e, 0xb4, 0xcf, 0x17, 0xe3, 0x48, 0xb5, 0xf3, 0xbc, 0xe5, 0x5a, 0x97, 0xda, 0xd7,
0xf2, 0xad, 0x7c, 0x79, 0x75, 0xf4, 0x8d, 0xbc, 0x91, 0xdf, 0xdc, 0x7d, 0x50, 0x2b, 0xbf, 0x8b, 0xb4, 0x2d, 0xc7, 0xdb,
0x96, 0x7e, 0x2c, 0x9f, 0xd1, 0xc7, 0xb5, 0xdb, 0xa2, 0x7f, 0x35, 0x3f, 0xd9, 0x8f, 0x72, 0x23, 0x7f, 0x1a, 0xce, 0xf3,
0x96, 0x6b, 0xf4, 0xff, 0x42, 0xfe, 0x93, 0x7f, 0xe5, 0xb5, 0x7c, 0xb5, 0x78, 0xd6, 0xdf, 0xee, 0x3e, 0xf0, 0xf8, 0xf5,
0x34, 0x3b, 0x21, 0xc7, 0x45, 0x18, 0xdb, 0xa3, 0xff, 0xb5, 0x78, 0xf2, 0x2f, 0xf2, 0x91, 0xfc, 0xb4, 0xe0, 0x44, 0xab,
0x9d, 0xe7, 0x2d, 0xd7, 0xe8, 0xff, 0x97, 0x88, 0xfc, 0x23, 0xbf, 0xcb, 0xc7, 0x57, 0x25, 0x37, 0x72, 0xd3, 0x70, 0x6d,
0x7f, 0x5d, 0x2f, 0xef, 0xea, 0x75, 0x71, 0xee, 0x84, 0x1d, 0x39, 0xff, 0xa3, 0xfc, 0x04, 0x9f, 0xca, 0xcf, 0xf2, 0x5d,
0x87, 0x3e, 0x8b, 0xd4, 0xff, 0x1b, 0xf9, 0x7f, 0x45, 0xff, 0x98, 0x3e, 0xf0, 0xf8, 0xf5, 0xae, 0xb5, 0x8d, 0x71, 0x16,
0x48, 0x63, 0x26, 0x5d, 0x6f, 0xdb, 0x7b, 0xf5, 0x99, 0x45, 0xff, 0xf5, 0x36, 0x7d, 0x22, 0xaf, 0x27, 0xea, 0x5f, 0x7b,
0xfe, 0x27, 0x45, 0xce, 0x58, 0x8d, 0x1b, 0x35, 0xc2, 0xa9, 0xb2, 0x27, 0xfd, 0x4b, 0xe5, 0x7f, 0x4c, 0xd4, 0x7f, 0x8c,
0x6b, 0xa8, 0xfd, 0xba, 0xe8, 0xbf, 0x2d, 0xfd, 0x2d, 0xef, 0xf6, 0x9e, 0xf5, 0x50, 0x73, 0x2f, 0xab, 0x9f, 0xac, 0x76,
0x9e, 0xb7, 0x5c, 0x8b, 0x47, 0xff, 0xd1, 0x75, 0xdd, 0x8f, 0x53, 0x11, 0xce, 0xed, 0x54, 0x05, 0xf4, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3d, 0x93, 0x2b, 0xb9, 0xdf, 0x72, 0xa1, 0xc4, 0xe2, 0x67, 0x68, 0xdb, 0x01,
0x58, 0x8c, 0x39, 0x09, 0x73, 0x68, 0x3b, 0xeb, 0x6d, 0x19, 0x77, 0xbf, 0x52, 0xcb, 0x4b, 0x7a, 0xd4, 0xff, 0xbf, 0x38,
0x17, 0x4a, 0xb2, 0x3a, 0x77, 0x9f, 0x6f, 0x07, 0x58, 0x9f, 0xb7, 0x21, 0x9b, 0x3c, 0x91, 0xa5, 0x76, 0x6e, 0xe7, 0x7e,
0xe5, 0xb2, 0x3c, 0x24, 0xe7, 0xcb, 0xec, 0xb8, 0xc5, 0x99, 0x63, 0x1a, 0x52, 0x75, 0x41, 0x8f, 0xf3, 0x11, 0xf4, 0x2e,
0xb3, 0xe6, 0xf9, 0xdc, 0x62, 0x5b, 0x22, 0xcb, 0xd6, 0xe7, 0xbf, 0x6d, 0x7e, 0xd8, 0xd7, 0x9b, 0xb1, 0x65, 0x1a, 0xdf,
0xdb, 0xa8, 0xb2, 0xd1, 0xf7, 0x8c, 0xf2, 0x7c, 0x1d, 0x41, 0x7f, 0x4b, 0x86, 0xd0, 0xa3, 0xeb, 0x2f, 0xc1, 0x99, 0xf3,
0x66, 0xae, 0x6f, 0xbe, 0x6b, 0xa7, 0x21, 0x65, 0x33, 0xf4, 0x6f, 0xd9, 0x23, 0x7e, 0xaf, 0xf3, 0x5f, 0x5b, 0xe7, 0xb3,
0xcd, 0xff, 0xb6, 0xef, 0x47, 0x1c, 0x5d, 0x7f, 0x41, 0xff, 0x40, 0xcf, 0xd7, 0x1e, 0xe7, 0xff, 0x59, 0xdf, 0xff, 0xdb,
0xc6, 0x21, 0x9e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xe7, 0x61, 0xb3, 0x7a, 0x03, 0xdb,
0xbc, 0x6f, 0xdb, 0xf0, 0xfd, 0x65, 0xd3, 0x6e, 0x62, 0xe5, 0x36, 0xd8, 0xbc, 0x64, 0x7e, 0xdf, 0x57, 0xbc, 0x87, 0xcd,
0xda, 0xaf, 0xf6, 0x1c, 0x59, 0xa3, 0x7d, 0x7f, 0xa5, 0x5d, 0x71, 0xad, 0xbb, 0x4d, 0xdb, 0xc6, 0xf0, 0x7a, 0x1b, 0xf6,
0xec, 0x01, 0x5c, 0x3a, 0x9e, 0x77, 0xb0, 0xfb, 0xd6, 0xac, 0xd8, 0xd7, 0x11, 0x62, 0x66, 0xa9, 0x5a, 0x92, 0x37, 0xef,
0x53, 0xaa, 0x97, 0x8d, 0xf5, 0xa7, 0x1c, 0xc5, 0xff, 0x75, 0xf4, 0xb2, 0xf1, 0x8e, 0x81, 0x7d, 0xc5, 0xff, 0xf7, 0xa4,
0xb1, 0xcd, 0xbf, 0xcb, 0xfc, 0xf7, 0x3c, 0xa7, 0xb6, 0x36, 0x36, 0xb4, 0x1e, 0xad, 0xda, 0xb3, 0xc1, 0x52, 0x76, 0x16,
0xff, 0xcf, 0x96, 0xe6, 0xf8, 0x96, 0xde, 0xc3, 0xd0, 0xbf, 0x5f, 0x3d, 0x8f, 0xf2, 0x3d, 0xa4, 0xbd, 0xf8, 0xdb, 0xb6,
0xd4, 0x86, 0xb3, 0x7f, 0x0f, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xc1, 0x98, 0x3c, 0x7e,
0x5b, 0x77, 0xf3, 0x8d, 0xbd, 0x9f, 0x3d, 0x8b, 0x5f, 0x0e, 0xd8, 0xf1, 0x37, 0xca, 0xab, 0xd7, 0xe2, 0x75, 0xb4, 0x46,
0x57, 0x8e, 0x9c, 0xc5, 0x2f, 0x15, 0x47, 0x46, 0xd9, 0xcd, 0x69, 0x1b, 0xa7, 0x33, 0x63, 0x4a, 0xa2, 0x8e, 0x92, 0x1f,
0xdf, 0x6d, 0x1d, 0x1f, 0x01, 0x8b, 0xa8, 0x4d, 0x6c, 0x99, 0xcf, 0xcb, 0x34, 0xc3, 0x75, 0xa8, 0xcd, 0x36, 0x63, 0x2d,
0x6b, 0x73, 0x01, 0xce, 0x71, 0x01, 0xc4, 0x94, 0xf9, 0x9e, 0xff, 0x5b, 0x8b, 0xe6, 0xf7, 0xc9, 0xe2, 0xa6, 0x2f, 0xed,
0xe3, 0xaa, 0x98, 0xe5, 0x3b, 0x4b, 0xa6, 0xdd, 0xab, 0x67, 0x44, 0xf3, 0x8f, 0xaf, 0xff, 0x2c, 0xdf, 0xd9, 0x39, 0xb3,
0x78, 0xb5, 0x8c, 0xc4, 0x19, 0xf3, 0x7f, 0xbe, 0x8f, 0x67, 0x7b, 0x8e, 0xa4, 0xf1, 0xbd, 0x53, 0xd6, 0x7f, 0xbc, 0x1a,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x67, 0x07, 0x60, 0xb4, 0x37, 0xd0, 0xe2, 0x7d,
0x89, 0xce, 0x80, 0xe7, 0xc9, 0xe2, 0x27, 0x06, 0x5f, 0xdb, 0x3e, 0xfd, 0x48, 0x3d, 0xf6, 0xf8, 0x5d, 0xef, 0xbb, 0x1c,
0xee, 0xfb, 0x8c, 0xcf, 0xe2, 0x97, 0x4e, 0xa4, 0xff, 0x48, 0x4f, 0x59, 0x29, 0x8b, 0xdb, 0x5e, 0xda, 0x70, 0x1e, 0x37,
0x62, 0x7c, 0xc4, 0xd9, 0x93, 0x1d, 0xaf, 0x47, 0x99, 0xe5, 0xcc, 0x1e, 0xbb, 0x30, 0xcf, 0xd5, 0xbf, 0x8f, 0xa3, 0xce,
0x32, 0xda, 0x46, 0xea, 0x3f, 0xcf, 0xfb, 0x74, 0x06, 0xfd, 0xad, 0x35, 0x41, 0x7f, 0xf4, 0xdf, 0x8a, 0xfe, 0x72, 0x12,
0xfd, 0xb7, 0xe1, 0xff, 0x9b, 0x97, 0x6d, 0x58, 0xcc, 0xdf, 0x50, 0xe0, 0x5d, 0xff, 0x38, 0x2b, 0xa0, 0xf6, 0x1b, 0x4a,
0xe8, 0x7f, 0xdc, 0xdf, 0x53, 0xf9, 0xdd, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x90, 0xb9, 0x10, 0xfd, 0xd1, 0xff, 0xe4, 0xfa, 0xbf, 0x05 };
// Font glyphs rectangles data (on atlas)
static const Rectangle jungleFontRecs[189] = {
{ 4, 4, 5 , 12 },
{ 17, 4, 2 , 7 },
{ 27, 4, 5 , 3 },
{ 40, 4, 5 , 5 },
{ 53, 4, 6 , 7 },
{ 67, 4, 7 , 7 },
{ 82, 4, 5 , 7 },
{ 95, 4, 3 , 3 },
{ 106, 4, 4 , 8 },
{ 118, 4, 4 , 8 },
{ 130, 4, 5 , 5 },
{ 143, 4, 5 , 5 },
{ 156, 4, 2 , 3 },
{ 166, 4, 5 , 1 },
{ 179, 4, 2 , 2 },
{ 189, 4, 7 , 7 },
{ 204, 4, 7 , 6 },
{ 219, 4, 6 , 6 },
{ 233, 4, 6 , 6 },
{ 4, 24, 6 , 6 },
{ 18, 24, 6 , 6 },
{ 32, 24, 6 , 6 },
{ 46, 24, 6 , 6 },
{ 60, 24, 6 , 6 },
{ 74, 24, 6 , 6 },
{ 88, 24, 6 , 6 },
{ 102, 24, 2 , 5 },
{ 112, 24, 2 , 6 },
{ 122, 24, 3 , 5 },
{ 133, 24, 5 , 3 },
{ 146, 24, 3 , 5 },
{ 157, 24, 6 , 7 },
{ 171, 24, 7 , 7 },
{ 186, 24, 6 , 7 },
{ 200, 24, 6 , 7 },
{ 214, 24, 6 , 7 },
{ 228, 24, 6 , 7 },
{ 4, 44, 6 , 7 },
{ 18, 44, 6 , 7 },
{ 32, 44, 6 , 7 },
{ 46, 44, 6 , 7 },
{ 60, 44, 6 , 7 },
{ 74, 44, 6 , 7 },
{ 88, 44, 6 , 7 },
{ 102, 44, 6 , 7 },
{ 116, 44, 7 , 7 },
{ 131, 44, 6 , 7 },
{ 145, 44, 6 , 7 },
{ 159, 44, 6 , 7 },
{ 173, 44, 7 , 8 },
{ 188, 44, 6 , 7 },
{ 202, 44, 6 , 7 },
{ 216, 44, 6 , 7 },
{ 230, 44, 6 , 7 },
{ 4, 64, 6 , 7 },
{ 18, 64, 7 , 7 },
{ 33, 64, 6 , 7 },
{ 47, 64, 6 , 7 },
{ 61, 64, 6 , 7 },
{ 75, 64, 4 , 8 },
{ 87, 64, 7 , 7 },
{ 102, 64, 4 , 8 },
{ 114, 64, 4 , 2 },
{ 126, 64, 6 , 1 },
{ 140, 64, 2 , 2 },
{ 150, 64, 6 , 5 },
{ 164, 64, 6 , 7 },
{ 178, 64, 6 , 5 },
{ 192, 64, 6 , 7 },
{ 206, 64, 6 , 5 },
{ 220, 64, 6 , 7 },
{ 234, 64, 6 , 7 },
{ 4, 84, 6 , 7 },
{ 18, 84, 6 , 7 },
{ 32, 84, 5 , 8 },
{ 45, 84, 6 , 7 },
{ 59, 84, 6 , 7 },
{ 73, 84, 7 , 5 },
{ 88, 84, 6 , 5 },
{ 102, 84, 6 , 5 },
{ 116, 84, 6 , 7 },
{ 130, 84, 6 , 7 },
{ 144, 84, 6 , 5 },
{ 158, 84, 6 , 5 },
{ 172, 84, 6 , 6 },
{ 186, 84, 6 , 5 },
{ 200, 84, 6 , 5 },
{ 214, 84, 7 , 5 },
{ 229, 84, 6 , 5 },
{ 4, 104, 6 , 7 },
{ 18, 104, 6 , 5 },
{ 32, 104, 4 , 8 },
{ 44, 104, 2 , 8 },
{ 54, 104, 4 , 8 },
{ 66, 104, 5 , 2 },
{ 79, 104, 2 , 7 },
{ 89, 104, 6 , 6 },
{ 103, 104, 6 , 7 },
{ 117, 104, 6 , 7 },
{ 131, 104, 6 , 7 },
{ 145, 104, 0 , 0 },
{ 153, 104, 6 , 9 },
{ 167, 104, 0 , 0 },
{ 175, 104, 7 , 7 },
{ 190, 104, 8 , 8 },
{ 206, 104, 6 , 5 },
{ 220, 104, 8 , 8 },
{ 236, 104, 7 , 7 },
{ 4, 124, 8 , 8 },
{ 20, 124, 4 , 4 },
{ 32, 124, 8 , 8 },
{ 48, 124, 8 , 8 },
{ 64, 124, 8 , 8 },
{ 80, 124, 0 , 0 },
{ 88, 124, 6 , 7 },
{ 102, 124, 5 , 8 },
{ 115, 124, 3 , 3 },
{ 126, 124, 0 , 0 },
{ 134, 124, 8 , 8 },
{ 150, 124, 8 , 8 },
{ 166, 124, 6 , 5 },
{ 180, 124, 10 , 7 },
{ 198, 124, 10 , 5 },
{ 216, 124, 0 , 0 },
{ 224, 124, 6 , 7 },
{ 238, 124, 6 , 10 },
{ 4, 144, 6 , 10 },
{ 18, 144, 6 , 10 },
{ 32, 144, 6 , 10 },
{ 46, 144, 6 , 10 },
{ 60, 144, 6 , 10 },
{ 74, 144, 10 , 7 },
{ 92, 144, 6 , 9 },
{ 106, 144, 6 , 10 },
{ 120, 144, 6 , 10 },
{ 134, 144, 6 , 10 },
{ 148, 144, 6 , 10 },
{ 162, 144, 6 , 10 },
{ 176, 144, 6 , 10 },
{ 190, 144, 6 , 10 },
{ 204, 144, 6 , 10 },
{ 218, 144, 6 , 7 },
{ 232, 144, 6 , 10 },
{ 4, 164, 6 , 10 },
{ 18, 164, 6 , 10 },
{ 32, 164, 6 , 10 },
{ 46, 164, 6 , 10 },
{ 60, 164, 6 , 10 },
{ 74, 164, 6 , 5 },
{ 88, 164, 6 , 7 },
{ 102, 164, 6 , 10 },
{ 116, 164, 6 , 10 },
{ 130, 164, 6 , 10 },
{ 144, 164, 6 , 10 },
{ 158, 164, 6 , 10 },
{ 172, 164, 6 , 7 },
{ 186, 164, 6 , 7 },
{ 200, 164, 6 , 8 },
{ 214, 164, 6 , 8 },
{ 228, 164, 6 , 8 },
{ 4, 184, 6 , 8 },
{ 18, 184, 6 , 8 },
{ 32, 184, 6 , 8 },
{ 46, 184, 9 , 5 },
{ 63, 184, 6 , 7 },
{ 77, 184, 6 , 8 },
{ 91, 184, 6 , 8 },
{ 105, 184, 6 , 8 },
{ 119, 184, 6 , 8 },
{ 133, 184, 6 , 8 },
{ 147, 184, 6 , 8 },
{ 161, 184, 6 , 8 },
{ 175, 184, 6 , 8 },
{ 189, 184, 6 , 7 },
{ 203, 184, 6 , 8 },
{ 217, 184, 6 , 8 },
{ 231, 184, 6 , 8 },
{ 4, 204, 6 , 8 },
{ 18, 204, 6 , 8 },
{ 32, 204, 6 , 8 },
{ 46, 204, 5 , 5 },
{ 59, 204, 6 , 5 },
{ 73, 204, 6 , 8 },
{ 87, 204, 6 , 8 },
{ 101, 204, 6 , 8 },
{ 115, 204, 6 , 8 },
{ 129, 204, 6 , 10 },
{ 143, 204, 6 , 9 },
{ 157, 204, 6 , 10 },
};
// Font glyphs info data
// NOTE: No glyphs.image data provided
static const GlyphInfo jungleFontGlyphs[189] = {
{ 32, 0, 0, 5, { 0 }},
{ 33, 0, 2, 3, { 0 }},
{ 34, 0, 2, 6, { 0 }},
{ 35, 0, 3, 6, { 0 }},
{ 36, 0, 2, 7, { 0 }},
{ 37, 0, 2, 8, { 0 }},
{ 38, 0, 2, 6, { 0 }},
{ 39, 0, 2, 4, { 0 }},
{ 40, 0, 2, 5, { 0 }},
{ 41, 0, 2, 5, { 0 }},
{ 42, 0, 2, 6, { 0 }},
{ 43, 0, 3, 6, { 0 }},
{ 44, 0, 7, 3, { 0 }},
{ 45, 0, 5, 6, { 0 }},
{ 46, 0, 7, 3, { 0 }},
{ 47, 0, 2, 8, { 0 }},
{ 48, 0, 3, 8, { 0 }},
{ 49, 0, 3, 7, { 0 }},
{ 50, 0, 3, 7, { 0 }},
{ 51, 0, 3, 7, { 0 }},
{ 52, 0, 3, 7, { 0 }},
{ 53, 0, 3, 7, { 0 }},
{ 54, 0, 3, 7, { 0 }},
{ 55, 0, 3, 7, { 0 }},
{ 56, 0, 3, 7, { 0 }},
{ 57, 0, 3, 7, { 0 }},
{ 58, 0, 4, 3, { 0 }},
{ 59, 0, 4, 3, { 0 }},
{ 60, 0, 3, 4, { 0 }},
{ 61, 0, 4, 6, { 0 }},
{ 62, 0, 3, 4, { 0 }},
{ 63, 0, 2, 7, { 0 }},
{ 64, 0, 2, 8, { 0 }},
{ 65, 0, 2, 7, { 0 }},
{ 66, 0, 2, 7, { 0 }},
{ 67, 0, 2, 7, { 0 }},
{ 68, 0, 2, 7, { 0 }},
{ 69, 0, 2, 7, { 0 }},
{ 70, 0, 2, 7, { 0 }},
{ 71, 0, 2, 7, { 0 }},
{ 72, 0, 2, 7, { 0 }},
{ 73, 0, 2, 7, { 0 }},
{ 74, 0, 2, 7, { 0 }},
{ 75, 0, 2, 7, { 0 }},
{ 76, 0, 2, 7, { 0 }},
{ 77, 0, 2, 8, { 0 }},
{ 78, 0, 2, 7, { 0 }},
{ 79, 0, 2, 7, { 0 }},
{ 80, 0, 2, 7, { 0 }},
{ 81, 0, 2, 7, { 0 }},
{ 82, 0, 2, 7, { 0 }},
{ 83, 0, 2, 7, { 0 }},
{ 84, 0, 2, 7, { 0 }},
{ 85, 0, 2, 7, { 0 }},
{ 86, 0, 2, 7, { 0 }},
{ 87, 0, 2, 8, { 0 }},
{ 88, 0, 2, 7, { 0 }},
{ 89, 0, 2, 7, { 0 }},
{ 90, 0, 2, 7, { 0 }},
{ 91, 0, 2, 5, { 0 }},
{ 92, 0, 2, 8, { 0 }},
{ 93, 0, 2, 5, { 0 }},
{ 94, 0, -1, 5, { 0 }},
{ 95, 0, 10, 7, { 0 }},
{ 96, 0, -1, 3, { 0 }},
{ 97, 0, 4, 7, { 0 }},
{ 98, 0, 2, 7, { 0 }},
{ 99, 0, 4, 7, { 0 }},
{ 100, 0, 2, 7, { 0 }},
{ 101, 0, 4, 7, { 0 }},
{ 102, 0, 2, 7, { 0 }},
{ 103, 0, 4, 7, { 0 }},
{ 104, 0, 2, 7, { 0 }},
{ 105, 0, 2, 7, { 0 }},
{ 106, 0, 2, 6, { 0 }},
{ 107, 0, 2, 7, { 0 }},
{ 108, 0, 2, 7, { 0 }},
{ 109, 0, 4, 8, { 0 }},
{ 110, 0, 4, 7, { 0 }},
{ 111, 0, 4, 7, { 0 }},
{ 112, 0, 4, 7, { 0 }},
{ 113, 0, 4, 7, { 0 }},
{ 114, 0, 4, 7, { 0 }},
{ 115, 0, 4, 7, { 0 }},
{ 116, 0, 3, 7, { 0 }},
{ 117, 0, 4, 7, { 0 }},
{ 118, 0, 4, 7, { 0 }},
{ 119, 0, 4, 8, { 0 }},
{ 120, 0, 4, 7, { 0 }},
{ 121, 0, 4, 7, { 0 }},
{ 122, 0, 4, 7, { 0 }},
{ 123, 0, 2, 5, { 0 }},
{ 124, 0, 2, 3, { 0 }},
{ 125, 0, 2, 5, { 0 }},
{ 126, 0, -1, 6, { 0 }},
{ 161, 0, 2, 3, { 0 }},
{ 162, 0, 3, 7, { 0 }},
{ 163, 0, 2, 7, { 0 }},
{ 8364, 0, 2, 7, { 0 }},
{ 165, 0, 2, 7, { 0 }},
{ 352, 0, 0, 0, { 0 }},
{ 167, 0, 1, 7, { 0 }},
{ 353, 0, 0, 0, { 0 }},
{ 169, 0, 2, 8, { 0 }},
{ 170, 0, 1, 8, { 0 }},
{ 171, 0, 3, 7, { 0 }},
{ 172, 0, 1, 8, { 0 }},
{ 174, 0, 2, 8, { 0 }},
{ 175, 0, 1, 8, { 0 }},
{ 176, 0, 1, 2, { 0 }},
{ 177, 0, 1, 8, { 0 }},
{ 178, 0, 1, 8, { 0 }},
{ 179, 0, 1, 8, { 0 }},
{ 381, 0, 0, 0, { 0 }},
{ 181, 0, 4, 7, { 0 }},
{ 182, 0, 1, 4, { 0 }},
{ 183, 0, 4, 4, { 0 }},
{ 382, 0, 0, 0, { 0 }},
{ 185, 0, 1, 8, { 0 }},
{ 186, 0, 1, 8, { 0 }},
{ 187, 0, 3, 7, { 0 }},
{ 338, 0, 2, 11, { 0 }},
{ 339, 0, 4, 11, { 0 }},
{ 376, 0, 0, 0, { 0 }},
{ 191, 0, 2, 7, { 0 }},
{ 192, 0, -1, 7, { 0 }},
{ 193, 0, -1, 7, { 0 }},
{ 194, 0, -1, 7, { 0 }},
{ 195, 0, -1, 7, { 0 }},
{ 196, 0, -1, 7, { 0 }},
{ 197, 0, -1, 7, { 0 }},
{ 198, 0, 2, 11, { 0 }},
{ 199, 0, 2, 7, { 0 }},
{ 200, 0, -1, 7, { 0 }},
{ 201, 0, -1, 7, { 0 }},
{ 202, 0, -1, 7, { 0 }},
{ 203, 0, -1, 7, { 0 }},
{ 204, 0, -1, 7, { 0 }},
{ 205, 0, -1, 7, { 0 }},
{ 206, 0, -1, 7, { 0 }},
{ 207, 0, -1, 7, { 0 }},
{ 208, 0, 2, 7, { 0 }},
{ 209, 0, -1, 7, { 0 }},
{ 210, 0, -1, 7, { 0 }},
{ 211, 0, -1, 7, { 0 }},
{ 212, 0, -1, 7, { 0 }},
{ 213, 0, -1, 7, { 0 }},
{ 214, 0, -1, 7, { 0 }},
{ 215, 0, 3, 7, { 0 }},
{ 216, 0, 2, 7, { 0 }},
{ 217, 0, -1, 7, { 0 }},
{ 218, 0, -1, 7, { 0 }},
{ 219, 0, -1, 7, { 0 }},
{ 220, 0, -1, 7, { 0 }},
{ 221, 0, -1, 7, { 0 }},
{ 222, 0, 2, 7, { 0 }},
{ 223, 0, 2, 7, { 0 }},
{ 224, 0, 1, 7, { 0 }},
{ 225, 0, 1, 7, { 0 }},
{ 226, 0, 1, 7, { 0 }},
{ 227, 0, 1, 7, { 0 }},
{ 228, 0, 1, 7, { 0 }},
{ 229, 0, 1, 7, { 0 }},
{ 230, 0, 4, 10, { 0 }},
{ 231, 0, 4, 7, { 0 }},
{ 232, 0, 1, 7, { 0 }},
{ 233, 0, 1, 7, { 0 }},
{ 234, 0, 1, 7, { 0 }},
{ 235, 0, 1, 7, { 0 }},
{ 236, 0, 1, 7, { 0 }},
{ 237, 0, 1, 7, { 0 }},
{ 238, 0, 1, 7, { 0 }},
{ 239, 0, 1, 7, { 0 }},
{ 240, 0, 2, 7, { 0 }},
{ 241, 0, 1, 7, { 0 }},
{ 242, 0, 1, 7, { 0 }},
{ 243, 0, 1, 7, { 0 }},
{ 244, 0, 1, 7, { 0 }},
{ 245, 0, 1, 7, { 0 }},
{ 246, 0, 1, 7, { 0 }},
{ 247, 0, 3, 6, { 0 }},
{ 248, 0, 4, 7, { 0 }},
{ 249, 0, 1, 7, { 0 }},
{ 250, 0, 1, 7, { 0 }},
{ 251, 0, 1, 7, { 0 }},
{ 252, 0, 1, 7, { 0 }},
{ 253, 0, 1, 7, { 0 }},
{ 254, 0, 2, 7, { 0 }},
{ 255, 0, 1, 7, { 0 }},
};
// Style loading function: Jungle
static void GuiLoadStyleJungle(void)
{
// Load style properties provided
// NOTE: Default properties are propagated
for (int i = 0; i < JUNGLE_STYLE_PROPS_COUNT; i++)
{
GuiSetStyle(jungleStyleProps[i].controlId, jungleStyleProps[i].propertyId, jungleStyleProps[i].propertyValue);
}
// Custom font loading
// NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function
int jungleFontDataSize = 0;
unsigned char *data = DecompressData(jungleFontData, JUNGLE_STYLE_FONT_ATLAS_COMP_SIZE, &jungleFontDataSize);
Image imFont = { data, 256, 256, 1, 2 };
Font font = { 0 };
font.baseSize = 12;
font.glyphCount = 189;
// Load texture from image
font.texture = LoadTextureFromImage(imFont);
UnloadImage(imFont); // Uncompressed image data can be unloaded from memory
// Copy char recs data from global fontRecs
// NOTE: Required to avoid issues if trying to free font
font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle));
memcpy(font.recs, jungleFontRecs, font.glyphCount*sizeof(Rectangle));
// Copy font char info data from global fontChars
// NOTE: Required to avoid issues if trying to free font
font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo));
memcpy(font.glyphs, jungleFontGlyphs, font.glyphCount*sizeof(GlyphInfo));
GuiSetFont(font);
// Setup a white rectangle on the font to be used on shapes drawing,
// it makes possible to draw shapes and text (full UI) in a single draw call
Rectangle fontWhiteRec = { 254, 254, 1, 1 };
SetShapesTexture(font.texture, fontWhiteRec);
//-----------------------------------------------------------------
// TODO: Custom user style setup: Set specific properties here (if required)
// i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT
}

View File

@ -0,0 +1,607 @@
//////////////////////////////////////////////////////////////////////////////////
// //
// StyleAsCode exporter v2.0 - Style data exported as a values array //
// //
// USAGE: On init call: GuiLoadStyleLavanda(); //
// //
// more info and bugs-report: github.com/raysan5/raygui //
// feedback and support: ray[at]raylibtech.com //
// //
// Copyright (c) 2020-2025 raylib technologies (@raylibtech) //
// //
//////////////////////////////////////////////////////////////////////////////////
#define LAVANDA_STYLE_PROPS_COUNT 16
// Custom style name: Lavanda
static const GuiStyleProp lavandaStyleProps[LAVANDA_STYLE_PROPS_COUNT] = {
{ 0, 0, (int)0xab9bd3ff }, // DEFAULT_BORDER_COLOR_NORMAL
{ 0, 1, (int)0x3e4350ff }, // DEFAULT_BASE_COLOR_NORMAL
{ 0, 2, (int)0xdadaf4ff }, // DEFAULT_TEXT_COLOR_NORMAL
{ 0, 3, (int)0xee84a0ff }, // DEFAULT_BORDER_COLOR_FOCUSED
{ 0, 4, (int)0xf4b7c7ff }, // DEFAULT_BASE_COLOR_FOCUSED
{ 0, 5, (int)0xb7657bff }, // DEFAULT_TEXT_COLOR_FOCUSED
{ 0, 6, (int)0xd5c8dbff }, // DEFAULT_BORDER_COLOR_PRESSED
{ 0, 7, (int)0x966ec0ff }, // DEFAULT_BASE_COLOR_PRESSED
{ 0, 8, (int)0xd7ccf7ff }, // DEFAULT_TEXT_COLOR_PRESSED
{ 0, 9, (int)0x8fa2bdff }, // DEFAULT_BORDER_COLOR_DISABLED
{ 0, 10, (int)0x6b798dff }, // DEFAULT_BASE_COLOR_DISABLED
{ 0, 11, (int)0x8292a9ff }, // DEFAULT_TEXT_COLOR_DISABLED
{ 0, 16, (int)0x00000010 }, // DEFAULT_TEXT_SIZE
{ 0, 18, (int)0x84adb7ff }, // DEFAULT_LINE_COLOR
{ 0, 19, (int)0x5b5b81ff }, // DEFAULT_BACKGROUND_COLOR
{ 0, 20, (int)0x00000008 }, // DEFAULT_TEXT_LINE_SPACING
};
// WARNING: This style uses a custom font: "Cartridge.ttf" (size: 16, spacing: 1)
#define LAVANDA_STYLE_FONT_ATLAS_COMP_SIZE 2636
// Font atlas image pixels data: DEFLATE compressed
static unsigned char lavandaFontData[LAVANDA_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed,
0xdd, 0xdb, 0xd2, 0xa4, 0xba, 0x0d, 0x06, 0x50, 0xde, 0xff, 0xa5, 0xbf, 0x5c, 0xa4, 0x52, 0x49, 0xaa, 0x66, 0x63, 0x24,
0x0b, 0x9a, 0xee, 0x59, 0xb3, 0xee, 0x7e, 0xa6, 0x4f, 0x06, 0xf9, 0x04, 0x96, 0x73, 0x00, 0x00, 0x00, 0x00, 0x24, 0x7f,
0xfc, 0x4b, 0x4e, 0xfe, 0x6f, 0x2e, 0xbf, 0xd3, 0x7f, 0xfe, 0x9e, 0xc5, 0xff, 0xf8, 0xff, 0xff, 0x75, 0xed, 0x7d, 0x73,
0xf9, 0xf3, 0x3b, 0x47, 0xf2, 0xc7, 0xef, 0x97, 0x8d, 0xd7, 0xff, 0xd3, 0x3b, 0xd4, 0xff, 0xff, 0x7f, 0xff, 0x55, 0xca,
0xf1, 0xfc, 0x35, 0x47, 0xf1, 0x73, 0xb2, 0xf8, 0x9c, 0xab, 0xbf, 0xb0, 0x56, 0xfa, 0xb5, 0x73, 0x9e, 0xd3, 0x2b, 0xb2,
0xf3, 0xca, 0xf3, 0xd7, 0x1d, 0xe5, 0xb2, 0x3a, 0x96, 0x25, 0x5c, 0x3d, 0xcb, 0xef, 0x8b, 0xff, 0x5c, 0x78, 0xe5, 0xf9,
0xf1, 0x6c, 0xd4, 0x09, 0xeb, 0x72, 0xac, 0xd6, 0x18, 0x3b, 0xa5, 0x7a, 0xf6, 0x1d, 0x2b, 0xff, 0xff, 0x5a, 0x6d, 0xbb,
0x5f, 0x3b, 0xae, 0x4a, 0xbf, 0xfe, 0xad, 0xaf, 0x94, 0x5c, 0x06, 0xfe, 0x7f, 0x5a, 0xdf, 0x7e, 0xe2, 0xfa, 0xcf, 0xf6,
0xb5, 0x7d, 0xa5, 0xad, 0x9c, 0xb8, 0x46, 0xab, 0xf1, 0x9f, 0x56, 0x8b, 0x90, 0x45, 0x99, 0xde, 0x1d, 0xff, 0x9d, 0x76,
0x34, 0x37, 0x95, 0x6a, 0xb5, 0xbe, 0xad, 0x5f, 0x37, 0x29, 0xb6, 0xb4, 0xbd, 0xf8, 0x5f, 0x7f, 0x4e, 0xc6, 0xca, 0x6d,
0xdd, 0x7b, 0xa9, 0x97, 0x76, 0xef, 0xb7, 0x75, 0x6b, 0x95, 0x34, 0x7a, 0x40, 0xfd, 0xfa, 0x7a, 0xaa, 0xc4, 0x6b, 0x51,
0x7a, 0xa5, 0x75, 0xcb, 0x58, 0xbd, 0x9f, 0x72, 0x6b, 0x95, 0x47, 0xca, 0xf2, 0x68, 0xb7, 0x3a, 0xd5, 0x5f, 0x94, 0x72,
0x5c, 0x56, 0xfa, 0xe5, 0xfd, 0xab, 0x30, 0xa5, 0xd1, 0x59, 0x6e, 0x6b, 0xff, 0xd7, 0xad, 0x71, 0x9a, 0x57, 0x72, 0xca,
0x7d, 0x83, 0x94, 0x47, 0x95, 0xeb, 0x73, 0xbc, 0x1e, 0x8b, 0xcc, 0xc7, 0x7f, 0xaf, 0x1f, 0xf3, 0xa7, 0x72, 0xef, 0xf6,
0x12, 0xe6, 0xeb, 0xc6, 0xb7, 0xc7, 0x7f, 0x1a, 0x7d, 0x8c, 0xea, 0x6b, 0x52, 0x9e, 0x7b, 0x39, 0x6f, 0x23, 0xaf, 0x5f,
0x99, 0x19, 0xba, 0x26, 0x3b, 0xad, 0x41, 0x1a, 0xe3, 0xc5, 0xdd, 0x96, 0x7c, 0x7a, 0xce, 0xea, 0xc9, 0xf8, 0xcf, 0x85,
0x19, 0x89, 0xd5, 0x95, 0x97, 0x65, 0x29, 0xe4, 0x86, 0xf6, 0xff, 0x0d, 0x73, 0xaa, 0x4f, 0xc5, 0x7f, 0x96, 0x73, 0x5b,
0x13, 0xd7, 0x74, 0x46, 0xce, 0x43, 0x3e, 0x70, 0x16, 0xae, 0xc4, 0xff, 0xd1, 0x6c, 0xc9, 0x7f, 0x3b, 0xfe, 0x8f, 0x8b,
0xbd, 0xf8, 0xa3, 0x31, 0x0b, 0xf8, 0x5b, 0xf1, 0x9f, 0x46, 0xcc, 0x64, 0x6c, 0x64, 0xde, 0xeb, 0x33, 0xcc, 0xc6, 0xff,
0x7b, 0x6b, 0xe1, 0x55, 0xff, 0x3f, 0x17, 0xef, 0x30, 0xfd, 0x4e, 0xfc, 0x1f, 0xa3, 0xfd, 0xff, 0xf5, 0x15, 0x33, 0x31,
0x6b, 0xf4, 0x77, 0xc4, 0x7f, 0x9a, 0xf5, 0x70, 0x06, 0x67, 0x6e, 0xbe, 0x39, 0xfe, 0x3b, 0xd1, 0x93, 0x76, 0x5d, 0x79,
0xde, 0xba, 0xe5, 0xa4, 0xc7, 0x56, 0xad, 0x19, 0xee, 0x9e, 0xff, 0xef, 0xdf, 0xb7, 0xc9, 0xf6, 0xab, 0xf3, 0xf0, 0xf8,
0xff, 0xb9, 0xf8, 0x3f, 0xca, 0x33, 0xd8, 0xe7, 0xf7, 0x5a, 0xea, 0xf5, 0x4f, 0x1a, 0xf7, 0xbb, 0x8f, 0x91, 0xdf, 0xf2,
0xb6, 0xf3, 0x70, 0xed, 0x35, 0x29, 0xcf, 0x6d, 0x9c, 0xdf, 0x01, 0xfb, 0xe7, 0xd9, 0x88, 0xce, 0xbc, 0xec, 0xfb, 0xea,
0xd8, 0xbc, 0xa6, 0x8d, 0xfd, 0x5b, 0x4a, 0x81, 0x67, 0x9e, 0x31, 0x40, 0xfc, 0x8b, 0x7f, 0x78, 0xfb, 0x73, 0xcb, 0xe2,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xdf, 0x5a, 0xa1, 0x57, 0x5b, 0x15, 0xbe,
0x93, 0xcb, 0xb8, 0x93, 0x9d, 0x6e, 0xbd, 0x42, 0x3d, 0xad, 0x9c, 0x04, 0xbd, 0xd7, 0xe5, 0x34, 0x0b, 0x5a, 0x46, 0xf2,
0x13, 0x74, 0xf3, 0x4e, 0x55, 0x32, 0x08, 0x54, 0xf7, 0x32, 0xe8, 0xee, 0x1b, 0x50, 0xfb, 0x8c, 0xce, 0x6a, 0xfd, 0x0c,
0x65, 0x41, 0xe8, 0xe4, 0x16, 0xde, 0x5b, 0x95, 0x5a, 0xcf, 0xd1, 0xb6, 0x93, 0xf5, 0x23, 0xad, 0x55, 0x73, 0x93, 0xf1,
0x9f, 0x4b, 0xb9, 0x0e, 0x3a, 0x19, 0x6a, 0x3a, 0x59, 0x6a, 0x32, 0x9c, 0x5f, 0xe7, 0x5a, 0x94, 0x5e, 0xcb, 0x39, 0x95,
0xe2, 0x77, 0xaa, 0xef, 0xca, 0x90, 0x46, 0xa4, 0xd5, 0xca, 0xb0, 0xb3, 0x3e, 0x72, 0xa7, 0x55, 0xd9, 0xbb, 0x7a, 0x53,
0xca, 0x45, 0x7c, 0x77, 0xde, 0x9d, 0x94, 0xe3, 0xe7, 0xd9, 0xf8, 0x4f, 0xe3, 0x17, 0xe5, 0x52, 0xce, 0xe5, 0x6e, 0x46,
0xb6, 0x6e, 0x26, 0xa7, 0x5e, 0x16, 0x81, 0x7e, 0xfc, 0x5f, 0x3b, 0x03, 0xbf, 0x1d, 0xff, 0x3b, 0xfb, 0xc7, 0x4c, 0xc4,
0x7f, 0xb6, 0x3f, 0x39, 0x23, 0xe5, 0x5a, 0x79, 0x97, 0x55, 0xfc, 0x3c, 0x19, 0xff, 0xfd, 0x8c, 0x85, 0x67, 0xbf, 0x38,
0x5b, 0xf1, 0x3f, 0xf9, 0xba, 0xa3, 0x99, 0x5f, 0x6b, 0x3f, 0xfe, 0xd3, 0xec, 0xb9, 0xce, 0xf5, 0x3d, 0xa7, 0xf2, 0x06,
0x77, 0xae, 0xcf, 0x5c, 0xc8, 0xd7, 0xbb, 0xdb, 0x33, 0xa8, 0xe5, 0xae, 0xce, 0xb2, 0x35, 0xde, 0x8d, 0xff, 0x3c, 0xd8,
0xff, 0xaf, 0x8c, 0xc8, 0x32, 0xde, 0xfe, 0x7f, 0x57, 0xfc, 0xdf, 0xd5, 0xff, 0xbf, 0xd2, 0x92, 0x75, 0xf7, 0xf5, 0x7a,
0x3a, 0xfe, 0xef, 0x98, 0x97, 0xca, 0x48, 0xcb, 0xd5, 0xaf, 0x31, 0xae, 0xf6, 0xff, 0x33, 0xb4, 0x2b, 0x55, 0x6f, 0xdc,
0x92, 0x9b, 0xdb, 0xff, 0x34, 0x46, 0x4a, 0xbb, 0xf1, 0x7f, 0x5c, 0xca, 0x83, 0x9a, 0xe6, 0xb9, 0xae, 0xd4, 0xe1, 0x3b,
0x3b, 0xef, 0xed, 0xf4, 0xe0, 0xd3, 0xdc, 0x79, 0x2e, 0x8d, 0x91, 0xea, 0x6f, 0xc4, 0xff, 0xce, 0x2e, 0x5d, 0x4f, 0xf5,
0xdc, 0x8f, 0x0b, 0x6d, 0xde, 0x1b, 0xe3, 0x7f, 0x7e, 0xfe, 0x6f, 0xfd, 0x1d, 0xf2, 0xf0, 0xf8, 0x3f, 0x8d, 0x28, 0x7e,
0x5f, 0xfc, 0xd7, 0xdb, 0xa3, 0x99, 0xfd, 0x90, 0xa7, 0x6b, 0x80, 0xce, 0xee, 0x99, 0x9d, 0x9d, 0x53, 0x53, 0xda, 0x89,
0x6c, 0xae, 0x47, 0x32, 0xd5, 0xff, 0x7f, 0x2e, 0xfe, 0xd3, 0xba, 0x0e, 0x3b, 0xdf, 0xbf, 0xbf, 0x3b, 0x40, 0xb6, 0x5a,
0x95, 0x8c, 0xc6, 0xff, 0xc4, 0x2c, 0x5d, 0xb7, 0x4e, 0x7a, 0x7e, 0x3f, 0xf4, 0xe7, 0xee, 0x59, 0xa7, 0xb9, 0xab, 0x5b,
0x46, 0xee, 0x8c, 0x67, 0x64, 0x2e, 0x2d, 0x5b, 0xf1, 0xbf, 0x7f, 0x2e, 0xaa, 0xfb, 0x32, 0xae, 0xfb, 0xc6, 0xf5, 0x79,
0x91, 0x6e, 0xfc, 0xf7, 0x32, 0xd4, 0x5f, 0xfd, 0x1d, 0xff, 0x3c, 0x57, 0x72, 0x8c, 0xdf, 0x91, 0x4e, 0xab, 0xae, 0xea,
0xf6, 0x2c, 0xd2, 0xda, 0x35, 0xff, 0x7d, 0xf1, 0xff, 0x44, 0xad, 0x31, 0x33, 0xf3, 0xd9, 0xb9, 0x17, 0x99, 0xf2, 0x35,
0x3d, 0x3d, 0xc2, 0xfa, 0xfc, 0x19, 0xbd, 0x6f, 0x47, 0xa3, 0x37, 0x65, 0xe3, 0x9d, 0x88, 0xff, 0xa3, 0x71, 0xbf, 0x62,
0xff, 0x4e, 0xdf, 0x77, 0x66, 0x35, 0xce, 0x8d, 0x4f, 0x25, 0xcc, 0xbd, 0xbf, 0x67, 0x10, 0x3f, 0x17, 0x75, 0x7f, 0x6b,
0xa9, 0xfd, 0x1d, 0xf1, 0xff, 0x4c, 0x8d, 0x3d, 0x3d, 0x12, 0x81, 0x4f, 0x8e, 0xa9, 0x33, 0x32, 0x02, 0xe7, 0xb7, 0xda,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xa9, 0xf5, 0x63, 0x33, 0xf9, 0x89, 0xd6,
0x6b, 0x9a, 0x6b, 0x2b, 0x21, 0xd2, 0x58, 0xaf, 0xbc, 0x97, 0x47, 0xbf, 0x9a, 0xd5, 0xe5, 0x7c, 0xbd, 0x4c, 0x2e, 0xae,
0xa1, 0x59, 0xad, 0x10, 0xc9, 0xf6, 0x5a, 0xbc, 0xee, 0xae, 0x06, 0xab, 0x4f, 0xeb, 0x64, 0x65, 0x38, 0xdf, 0x4d, 0xa0,
0xbb, 0x0f, 0xc0, 0x59, 0x96, 0x83, 0x94, 0x3f, 0xef, 0xec, 0x95, 0x29, 0xe7, 0x0a, 0x4b, 0x61, 0xed, 0x54, 0x5a, 0x57,
0x68, 0x27, 0xa3, 0xc3, 0xff, 0x7e, 0x5e, 0xe5, 0x6c, 0x65, 0x79, 0xa5, 0x55, 0xb2, 0xf1, 0xd5, 0xf3, 0x9d, 0xac, 0x32,
0x10, 0xf6, 0xf3, 0xe8, 0x67, 0x70, 0x05, 0x7e, 0x86, 0xfe, 0x5a, 0x59, 0x25, 0x96, 0xad, 0x3a, 0x3e, 0x43, 0x75, 0xed,
0x6e, 0x79, 0xa5, 0x51, 0x73, 0xa7, 0x5d, 0xe3, 0x1f, 0xad, 0x0c, 0x09, 0x19, 0xc8, 0x08, 0x90, 0x56, 0x09, 0x9d, 0xb5,
0x42, 0x69, 0xaf, 0x42, 0xac, 0x67, 0x39, 0x4a, 0xf9, 0x3b, 0x1e, 0x8d, 0x3c, 0xa8, 0xb3, 0xd9, 0x97, 0x76, 0xf6, 0xfd,
0x98, 0xc9, 0x98, 0x39, 0xb5, 0x86, 0xbe, 0x97, 0x9b, 0xa9, 0xfe, 0xd9, 0x9d, 0xab, 0x2a, 0x1b, 0xbd, 0xd0, 0x14, 0x7f,
0x5d, 0x2e, 0xb7, 0x71, 0x7f, 0x6e, 0xf5, 0xea, 0x71, 0x53, 0xcf, 0xa9, 0x34, 0x95, 0x3b, 0xe9, 0xae, 0xf8, 0x3f, 0xc6,
0xb3, 0x9c, 0xf5, 0x7a, 0x21, 0xbb, 0x3d, 0xf5, 0xbd, 0xf8, 0x5f, 0xef, 0x52, 0xb4, 0x5f, 0xe3, 0xdf, 0x19, 0xff, 0xbd,
0x5c, 0x88, 0x59, 0xf6, 0xba, 0xbb, 0x7b, 0xaf, 0xd5, 0xfa, 0xf1, 0x69, 0x67, 0x97, 0xed, 0xe5, 0xd1, 0xc8, 0x22, 0xb7,
0x6c, 0x6f, 0xdd, 0xfe, 0x7e, 0xff, 0x7f, 0xdd, 0x8f, 0x3f, 0xab, 0x1b, 0xef, 0xc8, 0xff, 0x77, 0x7f, 0xfc, 0xd7, 0xb2,
0x26, 0xf7, 0xda, 0xf0, 0x6b, 0x79, 0x74, 0x27, 0xb3, 0xdf, 0x7d, 0x2a, 0xfe, 0xeb, 0xe3, 0xea, 0xe9, 0x31, 0x45, 0xe7,
0x0c, 0xe5, 0x42, 0x2e, 0xc3, 0xb4, 0xf2, 0xa7, 0x9e, 0x8f, 0x7a, 0x67, 0xb3, 0xf0, 0xdc, 0xf9, 0x3e, 0x57, 0xc6, 0x62,
0xcf, 0xc5, 0x7f, 0x36, 0x46, 0xe0, 0x7b, 0xed, 0x56, 0x2e, 0xb7, 0x22, 0xf7, 0xc7, 0xff, 0xdc, 0x9e, 0x95, 0xfb, 0x79,
0xfa, 0x7a, 0x7d, 0xfc, 0x6c, 0xcc, 0x82, 0x75, 0xce, 0xe8, 0xb5, 0xb9, 0x8e, 0x3c, 0x32, 0xeb, 0x9d, 0xad, 0xb8, 0xb9,
0x7f, 0x4e, 0xbe, 0x36, 0x1b, 0x34, 0x1f, 0xff, 0x47, 0x71, 0xfc, 0x7d, 0x5c, 0xdc, 0xab, 0x63, 0x77, 0xdc, 0x9a, 0xad,
0xfe, 0xf8, 0xec, 0x9c, 0x55, 0xfd, 0xbb, 0x3f, 0xdf, 0xff, 0xdf, 0xcb, 0x1a, 0x9b, 0x56, 0x3f, 0x38, 0x1b, 0x75, 0x69,
0x27, 0xf3, 0xf2, 0x4e, 0x8c, 0x4d, 0xee, 0x53, 0x36, 0xf1, 0x1d, 0xcf, 0x47, 0x11, 0xd3, 0xf1, 0x5f, 0x2f, 0x85, 0x7c,
0xb4, 0x1f, 0xd4, 0xbf, 0x5a, 0xfb, 0x11, 0x98, 0xc1, 0xb3, 0xf8, 0xfc, 0xfc, 0x5f, 0xda, 0x75, 0x5f, 0x36, 0x33, 0x9e,
0x57, 0xdb, 0x8e, 0x67, 0xf3, 0x09, 0xe6, 0xa5, 0xf9, 0x0b, 0xfb, 0xb9, 0xff, 0xf3, 0x48, 0xa4, 0x4d, 0xe7, 0x9c, 0xbe,
0xbf, 0x1e, 0xd9, 0xbb, 0x77, 0x96, 0xdb, 0xcf, 0x62, 0x6e, 0x7f, 0xf7, 0x2c, 0x9f, 0x33, 0xe8, 0xde, 0xdf, 0xc8, 0xe0,
0xfd, 0x44, 0x8e, 0xad, 0x79, 0x9a, 0x7c, 0xf8, 0x3b, 0x1e, 0xce, 0xef, 0x43, 0xf1, 0xff, 0xe9, 0x72, 0xef, 0xcf, 0xd5,
0xc9, 0x7a, 0xfb, 0xfd, 0xf1, 0xcf, 0x3b, 0xe3, 0xff, 0x78, 0x49, 0xfc, 0xf3, 0x7c, 0x0d, 0x2e, 0xfe, 0xdf, 0x77, 0x2e,
0x77, 0x9f, 0xff, 0x7d, 0xfb, 0xaf, 0xd3, 0x96, 0xdf, 0x55, 0xaa, 0xca, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x58, 0xaf, 0x1c, 0xca, 0x50, 0x46, 0xa0, 0xe3, 0xff, 0x72, 0x97, 0xac, 0x73, 0x4d, 0x76, 0xf2,
0xc6, 0xf7, 0x57, 0x53, 0xa5, 0x7d, 0x6c, 0x27, 0x17, 0x4b, 0x2e, 0xad, 0x00, 0xc9, 0xc8, 0x7e, 0x09, 0xfd, 0x52, 0x4a,
0x29, 0x9b, 0x68, 0x25, 0x7f, 0x5b, 0x1a, 0x2b, 0x83, 0x7b, 0x59, 0x9f, 0x3e, 0x75, 0x9e, 0x57, 0x19, 0x57, 0xfa, 0xbf,
0x26, 0x37, 0xac, 0x1e, 0xbc, 0xfa, 0x3d, 0x7a, 0x59, 0x58, 0x73, 0x69, 0xa5, 0x5b, 0xda, 0xb9, 0x5c, 0xfb, 0xeb, 0x29,
0xd3, 0x5c, 0x4f, 0x99, 0xed, 0xd2, 0x5e, 0x45, 0x63, 0x2f, 0x5f, 0x6a, 0xb7, 0x8e, 0xdc, 0xcf, 0xf0, 0x9d, 0xed, 0x77,
0xbe, 0xb2, 0x47, 0x41, 0xbe, 0xe8, 0x3c, 0x77, 0xeb, 0x86, 0xfe, 0xef, 0xcc, 0xed, 0xb1, 0xb3, 0x9b, 0xf9, 0xef, 0xca,
0x55, 0xdf, 0xdb, 0x87, 0xe6, 0x8d, 0xab, 0x38, 0x77, 0xea, 0xf0, 0x6e, 0x1e, 0xb3, 0x6f, 0x58, 0xdf, 0x9b, 0x8f, 0xfe,
0xae, 0xe7, 0xce, 0xf3, 0x3a, 0xcf, 0xe1, 0x1b, 0x7e, 0x6b, 0x25, 0xc3, 0x6b, 0xa7, 0xfd, 0xcf, 0xa5, 0xf2, 0xba, 0x92,
0xdd, 0xb4, 0xb7, 0xeb, 0xd5, 0x67, 0x8e, 0x1e, 0x9b, 0xd9, 0xb6, 0x3a, 0xd9, 0xae, 0xcf, 0x77, 0xac, 0xaa, 0x1f, 0xd9,
0x6d, 0xff, 0xbb, 0x7f, 0xed, 0xec, 0x43, 0xf4, 0x89, 0xf3, 0xdc, 0xdb, 0x1d, 0x2d, 0x8b, 0x51, 0xf7, 0x95, 0x32, 0xae,
0x1d, 0xdb, 0xed, 0x25, 0xef, 0x8d, 0xff, 0xab, 0xed, 0xff, 0x51, 0xbe, 0xea, 0x77, 0x7a, 0xda, 0x6f, 0x3b, 0xba, 0x93,
0x71, 0xf3, 0xa9, 0x23, 0x77, 0xc4, 0x7f, 0x4e, 0xb3, 0xf1, 0xe7, 0xd2, 0x2c, 0xc3, 0x4e, 0x66, 0xe7, 0xfa, 0xd1, 0x5c,
0x2a, 0x8f, 0xf3, 0x36, 0xf4, 0xfb, 0xe2, 0x7f, 0xef, 0xbd, 0xd7, 0xf1, 0x5d, 0xcf, 0x50, 0x7b, 0xb4, 0xe7, 0xe1, 0xee,
0x8b, 0xe1, 0xa3, 0xfd, 0xad, 0xf2, 0x9a, 0x28, 0xaf, 0xe5, 0x04, 0xbd, 0xbb, 0xfd, 0xbf, 0x96, 0xdd, 0xfc, 0x3d, 0x47,
0xaf, 0xb5, 0x49, 0xef, 0x88, 0xff, 0xdc, 0x3a, 0x26, 0x4c, 0x69, 0xa6, 0xf5, 0x28, 0xee, 0x7d, 0x94, 0xd7, 0xb5, 0x0b,
0xeb, 0x3d, 0x35, 0xae, 0xb4, 0x29, 0xb3, 0x11, 0xdb, 0x3b, 0xf2, 0xa6, 0xfe, 0xff, 0x2f, 0xc5, 0xff, 0x1d, 0x31, 0xfe,
0x4c, 0xfc, 0xef, 0xf5, 0x00, 0xfa, 0xfb, 0x2d, 0x75, 0x6a, 0x86, 0x9d, 0xbd, 0x6d, 0x76, 0x8f, 0x76, 0x6b, 0x87, 0xfc,
0xa1, 0x36, 0xec, 0xcd, 0xb4, 0x7e, 0x5b, 0xff, 0xff, 0xfc, 0xfe, 0x4f, 0xda, 0xf3, 0xcb, 0xef, 0x8b, 0xff, 0x7e, 0x0b,
0x70, 0x4f, 0xfc, 0xe7, 0xc1, 0x79, 0xd2, 0xb4, 0x67, 0x3d, 0xd3, 0xb8, 0x6f, 0xfc, 0xc6, 0x71, 0x61, 0xe5, 0xec, 0x77,
0xf6, 0xd0, 0xfc, 0xee, 0xf8, 0x5f, 0xcf, 0x2f, 0xfd, 0x4a, 0xff, 0x3f, 0x1b, 0xb3, 0xa0, 0xd3, 0xf1, 0xff, 0x3d, 0xf9,
0x46, 0x33, 0x36, 0xee, 0xf8, 0xbe, 0x56, 0xa3, 0x1b, 0x57, 0x3b, 0xa3, 0x89, 0xeb, 0x73, 0xae, 0xcf, 0xec, 0x76, 0x92,
0x57, 0x9d, 0xab, 0x3b, 0xee, 0x58, 0x7e, 0x66, 0xfe, 0xef, 0x5b, 0x22, 0x5f, 0xfc, 0xaf, 0xe6, 0xd0, 0xcf, 0xc7, 0xcf,
0xb5, 0x23, 0x95, 0xe7, 0x0c, 0x3f, 0x17, 0xff, 0x9f, 0x9b, 0xe7, 0xb9, 0x67, 0x37, 0x93, 0xce, 0x33, 0x36, 0xc7, 0x2d,
0xcf, 0xce, 0xbd, 0xef, 0x59, 0x8b, 0xe3, 0x0b, 0xe2, 0x7f, 0x66, 0x36, 0xb4, 0x53, 0x12, 0x59, 0xec, 0x8b, 0x9c, 0xe2,
0x33, 0xd7, 0x77, 0xf5, 0xff, 0x67, 0x5b, 0xc5, 0x4f, 0x3e, 0xe7, 0xf1, 0xfc, 0x95, 0xde, 0x3d, 0x06, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xf6, 0xda, 0xba, 0x7a, 0xd6, 0xbd, 0x34, 0xd7, 0xef, 0xf6, 0xd7,
0xa9, 0xd6, 0x77, 0x0d, 0xb8, 0xf2, 0x9e, 0x29, 0xaf, 0xbf, 0xa9, 0x7d, 0x52, 0xe5, 0x5b, 0xdf, 0x93, 0x75, 0xff, 0x58,
0xe4, 0x18, 0xc8, 0xc8, 0x35, 0x91, 0x72, 0x4e, 0x87, 0xa3, 0x99, 0x95, 0x28, 0xe5, 0xab, 0x2e, 0x8d, 0xbf, 0xa7, 0xbc,
0x32, 0xf3, 0x68, 0x7c, 0xef, 0x37, 0xaf, 0xb9, 0xef, 0x66, 0xf2, 0xec, 0xef, 0x50, 0x31, 0xbd, 0xea, 0x31, 0xcd, 0x3c,
0xdc, 0x19, 0x5b, 0xef, 0x9a, 0x8d, 0x15, 0xcd, 0x9d, 0x48, 0xaf, 0xd4, 0xd7, 0x69, 0xc7, 0x46, 0xad, 0x3e, 0xcb, 0xe8,
0x75, 0x3a, 0xb7, 0x43, 0x4c, 0x46, 0x33, 0x69, 0xbe, 0x79, 0x5d, 0x5e, 0x9a, 0xd9, 0x35, 0xf2, 0x05, 0xeb, 0x90, 0xb3,
0xb1, 0x5b, 0x4a, 0x1a, 0x3b, 0x9d, 0x7c, 0x66, 0xa5, 0xf3, 0xde, 0x95, 0xf9, 0xce, 0x55, 0xa3, 0xd5, 0x7c, 0x6e, 0x4f,
0x5d, 0x75, 0xbd, 0x9c, 0x1f, 0x19, 0x7f, 0xc7, 0x67, 0xe2, 0xbf, 0x93, 0x77, 0x37, 0xcb, 0x3e, 0xe5, 0xb3, 0xab, 0x9e,
0xbb, 0xd9, 0xc6, 0xd2, 0xda, 0x6d, 0x60, 0xff, 0xef, 0x9f, 0xc8, 0xba, 0x73, 0x6f, 0xfb, 0x3f, 0xdf, 0xc7, 0xae, 0x66,
0x38, 0xe8, 0x5d, 0xdd, 0xdd, 0x9d, 0x2e, 0xf2, 0x33, 0xf1, 0xbf, 0xce, 0xba, 0x98, 0x91, 0xd9, 0x84, 0x4f, 0x1c, 0x4b,
0x73, 0xd7, 0xa7, 0x0c, 0x8d, 0x17, 0xd6, 0xb9, 0x2e, 0x9f, 0x88, 0xff, 0x9c, 0xf4, 0xce, 0xd3, 0xd8, 0xd9, 0x62, 0xea,
0xef, 0x93, 0xb3, 0x15, 0xfd, 0x5d, 0x6b, 0xe6, 0xe2, 0x3f, 0xc3, 0x3b, 0xb0, 0xbd, 0x3d, 0xfe, 0xa7, 0x67, 0x00, 0xfa,
0x31, 0x9e, 0xf6, 0x68, 0x6d, 0x62, 0x94, 0xdb, 0xf9, 0xfb, 0x73, 0x59, 0xf7, 0xcf, 0xf2, 0x2a, 0xa7, 0x75, 0x45, 0x64,
0x60, 0x1e, 0x25, 0xed, 0x1e, 0xf6, 0xfd, 0xf1, 0xbf, 0xb3, 0xe7, 0x4f, 0xbe, 0x2e, 0xfe, 0x57, 0x35, 0x5a, 0x3d, 0xbf,
0x6d, 0x5a, 0xb1, 0xda, 0x3b, 0x96, 0x8d, 0xd9, 0x9f, 0x2c, 0xb3, 0xe6, 0xdf, 0xd3, 0xfb, 0xaf, 0x7d, 0xdb, 0x99, 0xf8,
0x9f, 0x89, 0xce, 0x4f, 0xc6, 0x7f, 0x36, 0xf6, 0x8e, 0x99, 0x6c, 0xdd, 0xd2, 0xcc, 0x14, 0x9a, 0x97, 0xce, 0xff, 0x75,
0x46, 0x34, 0xf3, 0x7b, 0x75, 0xdc, 0x71, 0x6c, 0x6f, 0xe6, 0x2b, 0x37, 0x8e, 0x7d, 0x8f, 0x0f, 0xb4, 0xff, 0x13, 0x35,
0xc3, 0x67, 0xdb, 0xff, 0x63, 0xf4, 0x7a, 0x5c, 0xff, 0xfa, 0x3c, 0xd0, 0xa3, 0x7c, 0x4b, 0xfc, 0xe7, 0x4b, 0xe3, 0xff,
0xb8, 0xb0, 0xa3, 0xdc, 0x5b, 0x6b, 0x80, 0x3c, 0x3a, 0xfe, 0x7f, 0x57, 0xfc, 0xcf, 0xde, 0x01, 0xc9, 0xf2, 0x1e, 0x67,
0x2d, 0xca, 0xd3, 0xb8, 0xd3, 0x98, 0xe2, 0x6e, 0x6a, 0xef, 0x79, 0xfe, 0x27, 0xcd, 0xd1, 0x49, 0x35, 0x1e, 0xef, 0x39,
0x76, 0xcf, 0xac, 0x6b, 0xca, 0x73, 0x8a, 0x19, 0xb9, 0xce, 0x9f, 0xcc, 0xba, 0xbb, 0x1a, 0xc5, 0x3d, 0xff, 0xeb, 0x77,
0xef, 0xa7, 0x66, 0xe8, 0xc8, 0xe4, 0xb3, 0x44, 0x6f, 0x79, 0x3a, 0x60, 0xfa, 0x1e, 0xda, 0x37, 0xe4, 0x21, 0xce, 0xcf,
0x67, 0x4c, 0xbf, 0xef, 0xa9, 0x01, 0xee, 0xed, 0xe9, 0x7d, 0xcf, 0xb3, 0xc1, 0x88, 0x7e, 0xd6, 0xcf, 0xa8, 0xfc, 0xe6,
0xef, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xa6, 0xfd, 0xfb, 0x9f, 0x72, 0x00, 0xf1, 0x0f, 0xfc, 0x75, 0xf1, 0xff, 0x2f };
// Font glyphs rectangles data (on atlas)
static const Rectangle lavandaFontRecs[189] = {
{ 4, 4, 5 , 16 },
{ 17, 4, 1 , 9 },
{ 26, 4, 3 , 3 },
{ 37, 4, 7 , 8 },
{ 52, 4, 5 , 11 },
{ 65, 4, 10 , 8 },
{ 83, 4, 7 , 9 },
{ 98, 4, 1 , 3 },
{ 107, 4, 3 , 12 },
{ 118, 4, 3 , 12 },
{ 129, 4, 5 , 4 },
{ 142, 4, 5 , 5 },
{ 155, 4, 2 , 3 },
{ 165, 4, 3 , 1 },
{ 176, 4, 1 , 1 },
{ 185, 4, 4 , 12 },
{ 197, 4, 5 , 9 },
{ 210, 4, 3 , 9 },
{ 221, 4, 5 , 9 },
{ 234, 4, 5 , 9 },
{ 247, 4, 5 , 9 },
{ 260, 4, 5 , 9 },
{ 273, 4, 5 , 9 },
{ 286, 4, 5 , 9 },
{ 299, 4, 5 , 9 },
{ 312, 4, 5 , 9 },
{ 325, 4, 1 , 4 },
{ 334, 4, 2 , 6 },
{ 344, 4, 4 , 5 },
{ 356, 4, 4 , 3 },
{ 368, 4, 4 , 5 },
{ 380, 4, 5 , 9 },
{ 393, 4, 7 , 10 },
{ 408, 4, 7 , 9 },
{ 423, 4, 6 , 9 },
{ 437, 4, 5 , 9 },
{ 450, 4, 6 , 9 },
{ 464, 4, 5 , 9 },
{ 477, 4, 5 , 9 },
{ 490, 4, 6 , 9 },
{ 4, 28, 5 , 10 },
{ 17, 28, 1 , 9 },
{ 26, 28, 6 , 9 },
{ 40, 28, 6 , 9 },
{ 54, 28, 5 , 9 },
{ 67, 28, 8 , 11 },
{ 83, 28, 6 , 10 },
{ 97, 28, 7 , 9 },
{ 112, 28, 5 , 9 },
{ 125, 28, 7 , 11 },
{ 140, 28, 5 , 9 },
{ 153, 28, 6 , 9 },
{ 167, 28, 7 , 9 },
{ 182, 28, 6 , 9 },
{ 196, 28, 6 , 10 },
{ 210, 28, 9 , 10 },
{ 227, 28, 6 , 11 },
{ 241, 28, 5 , 10 },
{ 254, 28, 5 , 9 },
{ 267, 28, 3 , 12 },
{ 278, 28, 4 , 12 },
{ 290, 28, 3 , 12 },
{ 301, 28, 5 , 4 },
{ 314, 28, 6 , 1 },
{ 328, 28, 3 , 3 },
{ 339, 28, 6 , 7 },
{ 353, 28, 5 , 9 },
{ 366, 28, 4 , 7 },
{ 378, 28, 5 , 10 },
{ 391, 28, 4 , 7 },
{ 403, 28, 3 , 10 },
{ 414, 28, 4 , 11 },
{ 426, 28, 5 , 11 },
{ 439, 28, 1 , 9 },
{ 448, 28, 5 , 12 },
{ 461, 28, 5 , 9 },
{ 474, 28, 1 , 9 },
{ 483, 28, 8 , 9 },
{ 4, 52, 5 , 9 },
{ 17, 52, 4 , 7 },
{ 29, 52, 5 , 10 },
{ 42, 52, 5 , 10 },
{ 55, 52, 5 , 7 },
{ 68, 52, 5 , 7 },
{ 81, 52, 3 , 9 },
{ 92, 52, 5 , 7 },
{ 105, 52, 5 , 8 },
{ 118, 52, 9 , 8 },
{ 135, 52, 5 , 9 },
{ 148, 52, 6 , 9 },
{ 162, 52, 4 , 7 },
{ 174, 52, 5 , 12 },
{ 187, 52, 1 , 12 },
{ 196, 52, 5 , 12 },
{ 209, 52, 6 , 2 },
{ 223, 52, 1 , 9 },
{ 232, 52, 5 , 10 },
{ 245, 52, 6 , 9 },
{ 259, 52, 7 , 9 },
{ 274, 52, 5 , 9 },
{ 287, 52, 6 , 12 },
{ 301, 52, 5 , 10 },
{ 314, 52, 5 , 10 },
{ 327, 52, 8 , 8 },
{ 343, 52, 4 , 7 },
{ 355, 52, 6 , 5 },
{ 369, 52, 6 , 3 },
{ 383, 52, 8 , 8 },
{ 399, 52, 5 , 1 },
{ 412, 52, 4 , 4 },
{ 424, 52, 5 , 7 },
{ 437, 52, 3 , 4 },
{ 448, 52, 3 , 4 },
{ 459, 52, 5 , 12 },
{ 472, 52, 5 , 10 },
{ 485, 52, 7 , 11 },
{ 500, 52, 1 , 1 },
{ 4, 76, 4 , 10 },
{ 16, 76, 2 , 4 },
{ 26, 76, 4 , 7 },
{ 38, 76, 6 , 5 },
{ 52, 76, 11 , 9 },
{ 71, 76, 7 , 7 },
{ 86, 76, 5 , 12 },
{ 99, 76, 5 , 9 },
{ 112, 76, 7 , 12 },
{ 127, 76, 7 , 12 },
{ 142, 76, 7 , 12 },
{ 157, 76, 7 , 12 },
{ 172, 76, 7 , 11 },
{ 187, 76, 7 , 12 },
{ 202, 76, 10 , 9 },
{ 220, 76, 5 , 12 },
{ 233, 76, 5 , 12 },
{ 246, 76, 5 , 12 },
{ 259, 76, 5 , 12 },
{ 272, 76, 5 , 11 },
{ 285, 76, 2 , 12 },
{ 295, 76, 2 , 12 },
{ 305, 76, 3 , 12 },
{ 316, 76, 3 , 11 },
{ 327, 76, 7 , 9 },
{ 342, 76, 6 , 12 },
{ 356, 76, 7 , 12 },
{ 371, 76, 7 , 12 },
{ 386, 76, 7 , 12 },
{ 401, 76, 7 , 12 },
{ 416, 76, 7 , 11 },
{ 431, 76, 5 , 5 },
{ 444, 76, 7 , 9 },
{ 459, 76, 6 , 12 },
{ 473, 76, 6 , 12 },
{ 487, 76, 6 , 12 },
{ 4, 100, 6 , 11 },
{ 18, 100, 5 , 13 },
{ 31, 100, 5 , 9 },
{ 44, 100, 5 , 11 },
{ 57, 100, 6 , 10 },
{ 71, 100, 6 , 10 },
{ 85, 100, 6 , 10 },
{ 99, 100, 6 , 10 },
{ 113, 100, 6 , 9 },
{ 127, 100, 6 , 11 },
{ 141, 100, 7 , 7 },
{ 156, 100, 4 , 10 },
{ 168, 100, 4 , 10 },
{ 180, 100, 4 , 10 },
{ 192, 100, 4 , 10 },
{ 204, 100, 4 , 9 },
{ 216, 100, 2 , 10 },
{ 226, 100, 2 , 10 },
{ 236, 100, 3 , 10 },
{ 247, 100, 3 , 9 },
{ 258, 100, 5 , 9 },
{ 271, 100, 5 , 12 },
{ 284, 100, 4 , 10 },
{ 296, 100, 4 , 10 },
{ 308, 100, 4 , 10 },
{ 320, 100, 5 , 10 },
{ 333, 100, 4 , 9 },
{ 345, 100, 5 , 5 },
{ 358, 100, 6 , 7 },
{ 372, 100, 5 , 10 },
{ 385, 100, 5 , 10 },
{ 398, 100, 5 , 10 },
{ 411, 100, 5 , 9 },
{ 424, 100, 6 , 12 },
{ 438, 100, 5 , 12 },
{ 451, 100, 6 , 11 },
};
// Font glyphs info data
// NOTE: No glyphs.image data provided
static const GlyphInfo lavandaFontGlyphs[189] = {
{ 32, 0, 0, 5, { 0 }},
{ 33, 0, 3, 2, { 0 }},
{ 34, 0, 3, 4, { 0 }},
{ 35, 0, 3, 8, { 0 }},
{ 36, 0, 2, 6, { 0 }},
{ 37, 0, 4, 11, { 0 }},
{ 38, 0, 3, 8, { 0 }},
{ 39, 0, 3, 2, { 0 }},
{ 40, 0, 2, 4, { 0 }},
{ 41, 0, 2, 4, { 0 }},
{ 42, 0, 3, 6, { 0 }},
{ 43, 0, 5, 6, { 0 }},
{ 44, 0, 10, 3, { 0 }},
{ 45, 0, 7, 4, { 0 }},
{ 46, 0, 11, 2, { 0 }},
{ 47, 0, 2, 5, { 0 }},
{ 48, 0, 3, 6, { 0 }},
{ 49, 0, 3, 4, { 0 }},
{ 50, 0, 3, 6, { 0 }},
{ 51, 0, 3, 6, { 0 }},
{ 52, 0, 3, 6, { 0 }},
{ 53, 0, 3, 6, { 0 }},
{ 54, 0, 3, 6, { 0 }},
{ 55, 0, 3, 6, { 0 }},
{ 56, 0, 3, 6, { 0 }},
{ 57, 0, 3, 6, { 0 }},
{ 58, 0, 7, 2, { 0 }},
{ 59, 0, 7, 3, { 0 }},
{ 60, 0, 5, 5, { 0 }},
{ 61, 0, 6, 5, { 0 }},
{ 62, 0, 5, 5, { 0 }},
{ 63, 0, 3, 6, { 0 }},
{ 64, 0, 4, 8, { 0 }},
{ 65, 0, 3, 8, { 0 }},
{ 66, 0, 3, 7, { 0 }},
{ 67, 0, 3, 6, { 0 }},
{ 68, 0, 3, 7, { 0 }},
{ 69, 0, 3, 6, { 0 }},
{ 70, 0, 3, 6, { 0 }},
{ 71, 0, 3, 7, { 0 }},
{ 72, 0, 2, 6, { 0 }},
{ 73, 0, 3, 2, { 0 }},
{ 74, 0, 3, 7, { 0 }},
{ 75, 0, 3, 7, { 0 }},
{ 76, 0, 3, 6, { 0 }},
{ 77, 0, 3, 9, { 0 }},
{ 78, 0, 2, 7, { 0 }},
{ 79, 0, 3, 8, { 0 }},
{ 80, 0, 3, 6, { 0 }},
{ 81, 0, 3, 8, { 0 }},
{ 82, 0, 3, 6, { 0 }},
{ 83, 0, 3, 7, { 0 }},
{ 84, 0, 3, 8, { 0 }},
{ 85, 0, 3, 7, { 0 }},
{ 86, 0, 2, 7, { 0 }},
{ 87, 0, 2, 10, { 0 }},
{ 88, 0, 3, 7, { 0 }},
{ 89, 0, 3, 6, { 0 }},
{ 90, 0, 3, 6, { 0 }},
{ 91, 0, 2, 4, { 0 }},
{ 92, 0, 2, 5, { 0 }},
{ 93, 0, 2, 4, { 0 }},
{ 94, 0, 3, 6, { 0 }},
{ 95, 0, 13, 7, { 0 }},
{ 96, 0, 3, 4, { 0 }},
{ 97, 0, 5, 7, { 0 }},
{ 98, 0, 3, 6, { 0 }},
{ 99, 0, 5, 5, { 0 }},
{ 100, 0, 2, 6, { 0 }},
{ 101, 0, 5, 5, { 0 }},
{ 102, 0, 2, 4, { 0 }},
{ 103, 0, 4, 5, { 0 }},
{ 104, 0, 3, 6, { 0 }},
{ 105, 0, 3, 2, { 0 }},
{ 106, -1, 3, 5, { 0 }},
{ 107, 0, 3, 6, { 0 }},
{ 108, 0, 3, 2, { 0 }},
{ 109, 0, 5, 9, { 0 }},
{ 110, 0, 5, 6, { 0 }},
{ 111, 0, 5, 5, { 0 }},
{ 112, 0, 5, 6, { 0 }},
{ 113, 0, 5, 6, { 0 }},
{ 114, 0, 5, 6, { 0 }},
{ 115, 0, 5, 6, { 0 }},
{ 116, 0, 3, 4, { 0 }},
{ 117, 0, 5, 6, { 0 }},
{ 118, 0, 4, 6, { 0 }},
{ 119, 0, 4, 10, { 0 }},
{ 120, 0, 5, 6, { 0 }},
{ 121, -1, 5, 6, { 0 }},
{ 122, 0, 5, 5, { 0 }},
{ 123, 0, 2, 6, { 0 }},
{ 124, 0, 2, 2, { 0 }},
{ 125, 0, 2, 6, { 0 }},
{ 126, 0, 7, 7, { 0 }},
{ 161, 0, 5, 2, { 0 }},
{ 162, 0, 4, 6, { 0 }},
{ 163, 0, 3, 7, { 0 }},
{ 8364, 0, 3, 8, { 0 }},
{ 165, 0, 3, 6, { 0 }},
{ 352, 0, 0, 7, { 0 }},
{ 167, 0, 3, 6, { 0 }},
{ 353, 0, 2, 6, { 0 }},
{ 169, 0, 4, 9, { 0 }},
{ 170, 0, 3, 5, { 0 }},
{ 171, 0, 6, 7, { 0 }},
{ 172, 0, 6, 7, { 0 }},
{ 174, 0, 4, 9, { 0 }},
{ 175, 0, 2, 6, { 0 }},
{ 176, 0, 3, 5, { 0 }},
{ 177, 0, 5, 6, { 0 }},
{ 178, 0, 3, 4, { 0 }},
{ 179, 0, 3, 4, { 0 }},
{ 381, 0, 0, 6, { 0 }},
{ 181, 0, 5, 6, { 0 }},
{ 182, 0, 3, 8, { 0 }},
{ 183, 0, 7, 2, { 0 }},
{ 382, 0, 2, 5, { 0 }},
{ 185, 0, 3, 3, { 0 }},
{ 186, 0, 3, 5, { 0 }},
{ 187, 0, 6, 7, { 0 }},
{ 338, 0, 3, 12, { 0 }},
{ 339, 0, 5, 8, { 0 }},
{ 376, 0, 1, 6, { 0 }},
{ 191, 0, 5, 6, { 0 }},
{ 192, 0, 0, 8, { 0 }},
{ 193, 0, 0, 8, { 0 }},
{ 194, 0, 0, 8, { 0 }},
{ 195, 0, 0, 8, { 0 }},
{ 196, 0, 1, 8, { 0 }},
{ 197, 0, 0, 8, { 0 }},
{ 198, 0, 3, 11, { 0 }},
{ 199, 0, 3, 6, { 0 }},
{ 200, 0, 0, 6, { 0 }},
{ 201, 0, 0, 6, { 0 }},
{ 202, 0, 0, 6, { 0 }},
{ 203, 0, 1, 6, { 0 }},
{ 204, -1, 0, 2, { 0 }},
{ 205, 0, 0, 3, { 0 }},
{ 206, -1, 0, 3, { 0 }},
{ 207, -1, 1, 3, { 0 }},
{ 208, -1, 3, 7, { 0 }},
{ 209, 0, 0, 7, { 0 }},
{ 210, 0, 0, 8, { 0 }},
{ 211, 0, 0, 8, { 0 }},
{ 212, 0, 0, 8, { 0 }},
{ 213, 0, 0, 8, { 0 }},
{ 214, 0, 1, 8, { 0 }},
{ 215, 0, 5, 6, { 0 }},
{ 216, 0, 3, 8, { 0 }},
{ 217, 0, 0, 7, { 0 }},
{ 218, 0, 0, 7, { 0 }},
{ 219, 0, 0, 7, { 0 }},
{ 220, 0, 1, 7, { 0 }},
{ 221, 0, 0, 6, { 0 }},
{ 222, 0, 3, 6, { 0 }},
{ 223, 0, 3, 6, { 0 }},
{ 224, 0, 2, 7, { 0 }},
{ 225, 0, 2, 7, { 0 }},
{ 226, 0, 2, 7, { 0 }},
{ 227, 0, 2, 7, { 0 }},
{ 228, 0, 3, 7, { 0 }},
{ 229, 0, 1, 7, { 0 }},
{ 230, 0, 5, 8, { 0 }},
{ 231, 0, 5, 5, { 0 }},
{ 232, 0, 2, 5, { 0 }},
{ 233, 0, 2, 5, { 0 }},
{ 234, 0, 2, 5, { 0 }},
{ 235, 0, 3, 5, { 0 }},
{ 236, -1, 2, 2, { 0 }},
{ 237, 0, 2, 3, { 0 }},
{ 238, -1, 2, 3, { 0 }},
{ 239, -1, 3, 3, { 0 }},
{ 240, 0, 3, 6, { 0 }},
{ 241, 0, 2, 6, { 0 }},
{ 242, 0, 2, 5, { 0 }},
{ 243, 0, 2, 5, { 0 }},
{ 244, 0, 2, 5, { 0 }},
{ 245, 0, 2, 6, { 0 }},
{ 246, 0, 3, 5, { 0 }},
{ 247, 0, 5, 6, { 0 }},
{ 248, -1, 5, 6, { 0 }},
{ 249, 0, 2, 6, { 0 }},
{ 250, 0, 2, 6, { 0 }},
{ 251, 0, 2, 6, { 0 }},
{ 252, 0, 3, 6, { 0 }},
{ 253, -1, 2, 6, { 0 }},
{ 254, 0, 3, 6, { 0 }},
{ 255, -1, 3, 6, { 0 }},
};
// Style loading function: Lavanda
static void GuiLoadStyleLavanda(void)
{
// Load style properties provided
// NOTE: Default properties are propagated
for (int i = 0; i < LAVANDA_STYLE_PROPS_COUNT; i++)
{
GuiSetStyle(lavandaStyleProps[i].controlId, lavandaStyleProps[i].propertyId, lavandaStyleProps[i].propertyValue);
}
// Custom font loading
// NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function
int lavandaFontDataSize = 0;
unsigned char *data = DecompressData(lavandaFontData, LAVANDA_STYLE_FONT_ATLAS_COMP_SIZE, &lavandaFontDataSize);
Image imFont = { data, 512, 256, 1, 2 };
Font font = { 0 };
font.baseSize = 16;
font.glyphCount = 189;
// Load texture from image
font.texture = LoadTextureFromImage(imFont);
UnloadImage(imFont); // Uncompressed image data can be unloaded from memory
// Copy char recs data from global fontRecs
// NOTE: Required to avoid issues if trying to free font
font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle));
memcpy(font.recs, lavandaFontRecs, font.glyphCount*sizeof(Rectangle));
// Copy font char info data from global fontChars
// NOTE: Required to avoid issues if trying to free font
font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo));
memcpy(font.glyphs, lavandaFontGlyphs, font.glyphCount*sizeof(GlyphInfo));
GuiSetFont(font);
// Setup a white rectangle on the font to be used on shapes drawing,
// it makes possible to draw shapes and text (full UI) in a single draw call
Rectangle fontWhiteRec = { 510, 254, 1, 1 };
SetShapesTexture(font.texture, fontWhiteRec);
//-----------------------------------------------------------------
// TODO: Custom user style setup: Set specific properties here (if required)
// i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT
}

View File

@ -0,0 +1,572 @@
//////////////////////////////////////////////////////////////////////////////////
// //
// StyleAsCode exporter v2.0 - Style data exported as a values array //
// //
// USAGE: On init call: GuiLoadStyleRLTech(); //
// //
// more info and bugs-report: github.com/raysan5/raygui //
// feedback and support: ray[at]raylibtech.com //
// //
// Copyright (c) 2020-2025 raylib technologies (@raylibtech) //
// //
//////////////////////////////////////////////////////////////////////////////////
#define RLTECH_STYLE_PROPS_COUNT 15
// Custom style name: RLTech
static const GuiStyleProp rltechStyleProps[RLTECH_STYLE_PROPS_COUNT] = {
{ 0, 0, (int)0x000000ff }, // DEFAULT_BORDER_COLOR_NORMAL
{ 0, 1, (int)0xf5f5f5ff }, // DEFAULT_BASE_COLOR_NORMAL
{ 0, 2, (int)0x000000ff }, // DEFAULT_TEXT_COLOR_NORMAL
{ 0, 3, (int)0xe10000ff }, // DEFAULT_BORDER_COLOR_FOCUSED
{ 0, 4, (int)0xffffffff }, // DEFAULT_BASE_COLOR_FOCUSED
{ 0, 5, (int)0xed0000ff }, // DEFAULT_TEXT_COLOR_FOCUSED
{ 0, 6, (int)0xed0000ff }, // DEFAULT_BORDER_COLOR_PRESSED
{ 0, 7, (int)0x0f0f0fff }, // DEFAULT_BASE_COLOR_PRESSED
{ 0, 8, (int)0xff2323ff }, // DEFAULT_TEXT_COLOR_PRESSED
{ 0, 9, (int)0xcacacaff }, // DEFAULT_BORDER_COLOR_DISABLED
{ 0, 10, (int)0xe3e3e3ff }, // DEFAULT_BASE_COLOR_DISABLED
{ 0, 11, (int)0xb3b3b3ff }, // DEFAULT_TEXT_COLOR_DISABLED
{ 0, 16, (int)0x00000010 }, // DEFAULT_TEXT_SIZE
{ 0, 18, (int)0x352c2cff }, // DEFAULT_LINE_COLOR
{ 0, 20, (int)0x00000008 }, // DEFAULT_TEXT_LINE_SPACING
};
// WARNING: This style uses a custom font: "2a03.ttf" (size: 16, spacing: 1)
#define RLTECH_STYLE_FONT_ATLAS_COMP_SIZE 1950
// Font atlas image pixels data: DEFLATE compressed
static unsigned char rltechFontData[RLTECH_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed,
0xdd, 0xcb, 0x76, 0xc3, 0x2a, 0x12, 0x05, 0x50, 0xfe, 0xff, 0xa7, 0xab, 0x07, 0x77, 0xd0, 0x8f, 0xd5, 0xb1, 0xa0, 0x28,
0x10, 0xd8, 0x3b, 0x7b, 0x16, 0xc7, 0xb6, 0x1e, 0x1c, 0x03, 0x8a, 0x29, 0x45, 0x03, 0x00, 0x00, 0x00, 0x88, 0xf8, 0xbf,
0xbf, 0x89, 0x3f, 0xfe, 0x32, 0xba, 0x5f, 0xe5, 0x9f, 0xdf, 0xc6, 0x87, 0x67, 0xfd, 0xfb, 0xa7, 0xef, 0xf5, 0xa2, 0xf3,
0x5d, 0xff, 0xfe, 0xfd, 0xdf, 0x5b, 0xd2, 0xbf, 0x6d, 0x15, 0xaf, 0x30, 0xfa, 0xd7, 0x9f, 0xb7, 0xa4, 0xea, 0xd5, 0x6a,
0x1f, 0xd9, 0x77, 0xe4, 0x9f, 0xb7, 0x6e, 0xe7, 0xb1, 0x68, 0x9b, 0x8e, 0x6c, 0x0c, 0xb4, 0xfa, 0xb5, 0xf9, 0xff, 0xbc,
0xad, 0xf1, 0x78, 0xee, 0x67, 0xb2, 0x9e, 0x7d, 0xcf, 0x8a, 0x23, 0xd7, 0xb7, 0xbd, 0x31, 0xf9, 0xd7, 0x77, 0x3e, 0x92,
0x3d, 0x6a, 0xe3, 0x7f, 0xdf, 0x9b, 0x87, 0xda, 0x3d, 0x6e, 0xa5, 0xcf, 0x69, 0x8b, 0xdf, 0xa7, 0x22, 0xff, 0xcf, 0x29,
0x1f, 0xef, 0xff, 0x33, 0x79, 0xea, 0x69, 0x11, 0xa3, 0x9f, 0xc3, 0xed, 0xf5, 0xfc, 0x67, 0x1e, 0xa9, 0x6d, 0x71, 0x6d,
0x7b, 0xfe, 0xc7, 0x47, 0x85, 0xe3, 0xc7, 0x27, 0x3e, 0xb4, 0x41, 0xf9, 0x1f, 0x7b, 0x56, 0x66, 0x5e, 0x90, 0x1b, 0xa5,
0xcf, 0x8d, 0xdc, 0x5b, 0xf2, 0x33, 0xa7, 0x32, 0xfd, 0xf2, 0xbf, 0xab, 0xff, 0xef, 0xe9, 0x31, 0xe4, 0x7f, 0xfe, 0x1c,
0x64, 0xe6, 0x2a, 0x4f, 0xf9, 0x1f, 0xe9, 0x91, 0x6b, 0xc6, 0xf3, 0xa7, 0xe6, 0x3f, 0x3a, 0xe6, 0x8f, 0x6b, 0xe7, 0x95,
0xad, 0xf4, 0x6a, 0xc2, 0x8a, 0x4f, 0x80, 0x78, 0x68, 0x9b, 0xe3, 0xfd, 0x7f, 0x66, 0x2e, 0x9f, 0xc9, 0xe5, 0xe8, 0x99,
0xfd, 0xcf, 0x6d, 0x9f, 0xbd, 0x3e, 0xb2, 0xbe, 0xff, 0xcf, 0x5d, 0x1b, 0x1c, 0xed, 0x3d, 0x76, 0xf6, 0xe7, 0x6f, 0xe4,
0x7f, 0xa6, 0xf5, 0xd7, 0xcc, 0x4a, 0x56, 0x3c, 0x67, 0xcf, 0x99, 0x8a, 0x87, 0x36, 0x79, 0x6f, 0xff, 0x1f, 0x17, 0x8c,
0xff, 0xdb, 0xe3, 0x88, 0x7b, 0xf4, 0x4a, 0xe6, 0x5d, 0xf9, 0x5f, 0x77, 0x75, 0xf3, 0xde, 0xfc, 0xb7, 0x63, 0xf2, 0x3f,
0x73, 0x25, 0xfd, 0x17, 0xf2, 0x5f, 0x71, 0xf4, 0x9f, 0xae, 0xd8, 0x44, 0xc1, 0xec, 0xf1, 0x37, 0xf2, 0xbf, 0x3a, 0xb1,
0xbb, 0x5f, 0xed, 0xbc, 0xf3, 0x22, 0xff, 0x2b, 0x12, 0x14, 0x0f, 0xa3, 0x86, 0xf9, 0xd9, 0xe3, 0x7d, 0xf9, 0x1f, 0x99,
0x45, 0x9e, 0x33, 0x63, 0xdf, 0x3b, 0xff, 0xdf, 0x73, 0x06, 0xce, 0xfd, 0xfe, 0x44, 0xe6, 0x6a, 0xdb, 0x69, 0xfd, 0xff,
0x09, 0xbd, 0x2c, 0x20, 0xff, 0x80, 0xfc, 0x03, 0xbf, 0xb0, 0x52, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7e, 0xe9, 0x3b, 0xf4, 0xb9, 0xd5, 0xc9, 0x77, 0xd6, 0xa6, 0x5f, 0x51, 0x11, 0xa6, 0xba, 0xb2, 0xf6,
0xe7, 0xad, 0x1f, 0x59, 0x01, 0xdf, 0xb7, 0x6a, 0x2a, 0x06, 0xd7, 0xa9, 0xd7, 0xae, 0x6a, 0xcf, 0x54, 0x1f, 0x68, 0xa5,
0xeb, 0xed, 0x67, 0x56, 0x9b, 0x44, 0x2a, 0x21, 0x2b, 0xaa, 0x37, 0xee, 0xca, 0x7f, 0x4f, 0xfb, 0x6d, 0x47, 0xd4, 0xa6,
0xcf, 0xac, 0x26, 0x7c, 0x3f, 0xff, 0xa3, 0xad, 0x70, 0xbc, 0x2e, 0x76, 0xc5, 0xea, 0xcb, 0xf6, 0x6a, 0xf5, 0xe1, 0xfc,
0x59, 0xac, 0x5c, 0x81, 0xba, 0xb7, 0x57, 0x98, 0xdd, 0x8f, 0xbf, 0x5e, 0x73, 0xae, 0xd6, 0xe9, 0x48, 0x15, 0x6e, 0xf9,
0x7f, 0x3b, 0xff, 0xeb, 0x47, 0x94, 0xbb, 0xea, 0xdd, 0xc4, 0xf0, 0x1d, 0x41, 0x66, 0xee, 0x57, 0x14, 0x13, 0x7f, 0x7b,
0x76, 0xfe, 0xb3, 0x6d, 0x2a, 0x1e, 0x3f, 0x55, 0xe4, 0xbf, 0x3d, 0xdc, 0x39, 0xa1, 0x0d, 0x56, 0x4e, 0xce, 0x56, 0x59,
0xae, 0xcf, 0x7d, 0x65, 0x85, 0xaa, 0x48, 0x8e, 0xff, 0xab, 0xcf, 0x62, 0x55, 0x4f, 0x79, 0x53, 0xfe, 0xf3, 0x77, 0xd1,
0xdb, 0x37, 0xe7, 0x7d, 0x7a, 0xce, 0xe8, 0x5c, 0x73, 0x6f, 0xfe, 0x2b, 0xef, 0x75, 0x73, 0x4e, 0xfe, 0x57, 0xce, 0x28,
0xfb, 0xb6, 0x7f, 0x7f, 0xfe, 0xe3, 0x2b, 0xc7, 0xff, 0x71, 0x48, 0xfe, 0x2b, 0xdb, 0x5a, 0x4b, 0xe5, 0x71, 0x6f, 0xff,
0xdf, 0x5e, 0xfc, 0xbd, 0xfc, 0x8f, 0xe7, 0x3f, 0xcc, 0xff, 0x5f, 0xcb, 0x7f, 0x5c, 0x9b, 0xff, 0x98, 0xd8, 0x92, 0xf9,
0x47, 0xce, 0x1a, 0xff, 0x57, 0x3e, 0x27, 0x73, 0x47, 0xe0, 0x3b, 0xfa, 0xff, 0x6f, 0xb8, 0xfe, 0x5f, 0xff, 0x7e, 0x99,
0x19, 0x74, 0x55, 0xfe, 0xfb, 0xe7, 0xf0, 0xbf, 0x92, 0xff, 0xcc, 0xc8, 0xa0, 0xf6, 0x39, 0xe3, 0xd7, 0x78, 0xf6, 0xcd,
0xff, 0x77, 0x5d, 0x6b, 0x3d, 0xe3, 0xd3, 0x3a, 0x16, 0x5d, 0x83, 0xfd, 0xdf, 0x2b, 0xbd, 0x55, 0xfd, 0x46, 0xed, 0x7c,
0x3c, 0xff, 0x5d, 0x88, 0x99, 0x3e, 0xec, 0xe4, 0xfc, 0x8f, 0xf7, 0x52, 0xb9, 0x9e, 0xed, 0x8d, 0xfc, 0xbf, 0x59, 0x87,
0x52, 0xbd, 0x4b, 0x42, 0x9b, 0x59, 0xf2, 0x59, 0x72, 0xc3, 0x71, 0x93, 0x7f, 0xe4, 0x5f, 0xd6, 0xd0, 0x2e, 0xb5, 0x63,
0xf9, 0xe7, 0x17, 0xdb, 0x65, 0xff, 0xc8, 0xf6, 0x84, 0x7b, 0xf3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x50, 0xb5, 0xfe, 0x3f, 0x53, 0x6d, 0xe4, 0xf4, 0xfa, 0xb9, 0xa3, 0x2b, 0xf9, 0xfb, 0xd7, 0x74, 0x47, 0x41,
0x55, 0xde, 0xe7, 0xaa, 0x85, 0x23, 0x35, 0x04, 0x62, 0xb8, 0x42, 0x7f, 0xcf, 0x73, 0x3e, 0xb7, 0x89, 0xbf, 0xf7, 0x36,
0xd7, 0xc2, 0x9e, 0x1f, 0xef, 0x5f, 0xdb, 0x10, 0x43, 0xc7, 0x3c, 0x73, 0x8c, 0x3e, 0x9d, 0x8b, 0xb1, 0x7b, 0x28, 0xfc,
0xfd, 0x2a, 0x63, 0x2d, 0x23, 0x3a, 0x57, 0x33, 0x55, 0x55, 0x6b, 0xbf, 0xb7, 0x7e, 0xf6, 0xfc, 0xef, 0x62, 0x7a, 0x15,
0xfa, 0xf8, 0x31, 0xaf, 0xad, 0x21, 0xd4, 0xfb, 0x9c, 0xf1, 0xba, 0xc4, 0x63, 0x6d, 0x26, 0x26, 0x56, 0xdc, 0x45, 0x6a,
0xbf, 0x63, 0xe2, 0x68, 0xf4, 0xf6, 0x3a, 0x23, 0x7b, 0x32, 0x5a, 0x51, 0x30, 0x77, 0xe4, 0xab, 0xf3, 0x9f, 0xa9, 0xbc,
0x9e, 0xcf, 0x7f, 0x6d, 0xfd, 0xec, 0xb9, 0xfc, 0x8f, 0xb5, 0xed, 0x7c, 0x65, 0xe5, 0xf1, 0x4f, 0xba, 0x36, 0x38, 0x06,
0xfa, 0x94, 0xaa, 0x4f, 0xf5, 0x96, 0xf2, 0xbd, 0x50, 0x0c, 0xbf, 0xdb, 0xf8, 0xda, 0xc6, 0x48, 0xf5, 0xf3, 0x51, 0x54,
0xab, 0x2c, 0xb7, 0x27, 0xb3, 0xf9, 0x1f, 0xf9, 0xec, 0xad, 0xba, 0x5b, 0xd3, 0x29, 0xf5, 0xb3, 0x73, 0xa3, 0xef, 0x53,
0xf3, 0xbf, 0xef, 0x6e, 0x66, 0x9f, 0x9e, 0x13, 0xcb, 0x7a, 0xa1, 0xbf, 0xdf, 0x2d, 0x0a, 0x57, 0xdc, 0xd7, 0x8c, 0x86,
0x66, 0xee, 0x48, 0xb2, 0x62, 0x84, 0xb8, 0xbf, 0xff, 0x1f, 0xcf, 0xc6, 0x49, 0xfd, 0xff, 0x9a, 0x39, 0x41, 0x45, 0xfe,
0x73, 0x33, 0x83, 0xf9, 0x2a, 0xed, 0xbd, 0xcf, 0x89, 0x8e, 0x54, 0xb4, 0x92, 0x4f, 0x80, 0xf8, 0xaf, 0xde, 0x77, 0x75,
0xfe, 0xc7, 0xaf, 0x68, 0xe4, 0xae, 0x3a, 0x55, 0x54, 0x31, 0x3d, 0x61, 0xfe, 0x5f, 0x99, 0xff, 0x35, 0xf5, 0x73, 0xeb,
0xaa, 0xc6, 0xaf, 0xc8, 0xff, 0x78, 0xca, 0x67, 0x7a, 0xf9, 0x3d, 0xf9, 0xaf, 0xbe, 0x2a, 0xbd, 0xa2, 0xff, 0xaf, 0xdf,
0xc6, 0xb1, 0xeb, 0x7f, 0xb3, 0x2d, 0x67, 0xf7, 0xf5, 0xff, 0xca, 0xf1, 0xff, 0xde, 0xfa, 0xb9, 0x75, 0x79, 0x99, 0xad,
0x9d, 0x5b, 0x73, 0xaf, 0x9e, 0xea, 0xfe, 0x3f, 0x77, 0x74, 0x32, 0xf3, 0xff, 0x53, 0xf2, 0x1f, 0x0b, 0xb6, 0x70, 0xbc,
0x95, 0xc7, 0x82, 0xf4, 0xd7, 0xec, 0xd7, 0xda, 0x31, 0xd6, 0x39, 0x9f, 0xd1, 0xed, 0xf5, 0xfe, 0x3f, 0xf7, 0xd7, 0x95,
0x23, 0x83, 0xcc, 0xbb, 0xc5, 0xd6, 0xb3, 0x1c, 0x07, 0xb7, 0xa9, 0x99, 0x2b, 0x09, 0x71, 0x6c, 0x8a, 0xa2, 0x74, 0x3c,
0x21, 0xff, 0xad, 0xf8, 0xba, 0xfc, 0xf8, 0xf8, 0xa9, 0x25, 0xbf, 0x03, 0xd1, 0xba, 0xee, 0x5b, 0xbf, 0x6b, 0x54, 0x7a,
0x62, 0xa5, 0xc2, 0xdc, 0x1d, 0xd5, 0x46, 0xae, 0xff, 0x9d, 0x9e, 0x94, 0x7b, 0xbf, 0xd5, 0xb4, 0x3b, 0xff, 0x77, 0x7d,
0x06, 0x9e, 0x9a, 0xb8, 0x3b, 0x8e, 0x67, 0xbc, 0xda, 0x7a, 0x59, 0x33, 0xa7, 0xfb, 0xa5, 0xfc, 0xe3, 0x78, 0x3a, 0xb3,
0xdf, 0x91, 0x7f, 0xbd, 0x88, 0xe3, 0x4a, 0xd5, 0xff, 0x74, 0x7c, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x70, 0xc6, 0x6a, 0x86, 0xde, 0x5a, 0xec, 0xa3, 0xd5, 0xaf, 0xf3, 0xab, 0xa5, 0xc7, 0x7e, 0x1f, 0xc3,
0x95, 0xb9, 0x9f, 0xd6, 0xda, 0x57, 0xde, 0x01, 0x21, 0xbf, 0x5f, 0x99, 0x3a, 0x6b, 0x3d, 0xbf, 0x1b, 0xaf, 0x32, 0x10,
0xa9, 0xf5, 0x50, 0xeb, 0xcf, 0x64, 0xee, 0x6e, 0x0f, 0x7b, 0xce, 0x53, 0x66, 0x15, 0x59, 0xfd, 0x56, 0x3f, 0x3f, 0xa3,
0xbf, 0x5a, 0x5c, 0xbc, 0xb8, 0x92, 0xfa, 0x73, 0xcb, 0x88, 0xc4, 0xfb, 0xc7, 0xd4, 0x31, 0x59, 0xbd, 0x5f, 0xb3, 0x6b,
0x95, 0xb2, 0x55, 0xa7, 0x62, 0xf0, 0x08, 0xdf, 0x79, 0x26, 0xf7, 0x9c, 0xa7, 0x7c, 0x0d, 0xb9, 0xd8, 0x50, 0x7f, 0xa0,
0x22, 0xff, 0x31, 0xb9, 0x9f, 0xef, 0xac, 0xd6, 0x8c, 0xd4, 0x3d, 0x75, 0xf6, 0xee, 0xd3, 0xba, 0xb5, 0xa6, 0x91, 0x6c,
0x0d, 0xa7, 0xae, 0xbb, 0x7d, 0x77, 0x7f, 0x6a, 0xef, 0xc2, 0xb0, 0xf3, 0x2c, 0x8c, 0xe4, 0x3f, 0xb7, 0xbd, 0x51, 0x98,
0xcb, 0xda, 0x5a, 0xf7, 0xb9, 0xcf, 0xb3, 0xb6, 0xa0, 0xb6, 0xe6, 0x78, 0x0d, 0xd6, 0xb6, 0xa4, 0x82, 0x69, 0xed, 0x1d,
0xd5, 0x76, 0x9d, 0xc9, 0xa7, 0xfe, 0x7f, 0x7d, 0xbb, 0xd8, 0xf7, 0x48, 0xbe, 0xda, 0x63, 0x5f, 0xba, 0x2b, 0x46, 0x08,
0xcf, 0x33, 0xec, 0x5b, 0x8e, 0x72, 0xdd, 0x7d, 0xba, 0xaa, 0x1f, 0x59, 0x91, 0xff, 0xa7, 0xfa, 0xbe, 0x37, 0xe6, 0xe5,
0xe9, 0xbe, 0x8c, 0xe7, 0x6e, 0x75, 0x94, 0xb7, 0x98, 0x56, 0x9c, 0xee, 0xfe, 0x7d, 0xbc, 0x2d, 0xff, 0xa7, 0xa4, 0xfc,
0xac, 0xfe, 0xff, 0xd4, 0x24, 0x7d, 0x1e, 0x63, 0xdf, 0xf9, 0xa9, 0xb5, 0xa2, 0xc5, 0x64, 0xd3, 0x9d, 0xbf, 0x1a, 0x7e,
0x42, 0xfe, 0xf7, 0xce, 0xff, 0xab, 0x1f, 0x99, 0xbb, 0x57, 0x71, 0xf5, 0xf8, 0xff, 0xcc, 0x91, 0x74, 0xbb, 0xb4, 0x97,
0xd9, 0x73, 0x5f, 0x8b, 0xfa, 0x2b, 0x17, 0x35, 0xed, 0xe9, 0xbb, 0xe7, 0xff, 0x55, 0x8f, 0xdc, 0x30, 0xff, 0x97, 0xff,
0x99, 0x94, 0xb7, 0xd7, 0x8e, 0x4e, 0xef, 0x7f, 0xf7, 0x67, 0xf2, 0xbf, 0x27, 0x97, 0xab, 0x1e, 0x59, 0x31, 0xe2, 0x39,
0x7b, 0xfc, 0x7f, 0xe3, 0xf9, 0xaa, 0xbd, 0xc6, 0x5e, 0xbf, 0x6d, 0x99, 0xff, 0xe3, 0xd5, 0x6d, 0xf5, 0xae, 0xff, 0xce,
0x54, 0x8d, 0x3b, 0x4e, 0x6e, 0x4f, 0x6b, 0xfe, 0x3b, 0x7b, 0x4e, 0xfe, 0xbf, 0xf9, 0x7c, 0x9d, 0x96, 0xff, 0xb6, 0xe9,
0xbf, 0x4b, 0xf2, 0xbf, 0xa2, 0x3d, 0xc5, 0xd6, 0xf9, 0x7f, 0xc8, 0x7f, 0x71, 0x0b, 0xdf, 0xb9, 0x6d, 0xb1, 0x38, 0x4b,
0x77, 0x7e, 0xef, 0xf8, 0xdc, 0xbe, 0x61, 0xff, 0xf7, 0x8d, 0x6a, 0xee, 0x56, 0xb4, 0xf2, 0xfb, 0x57, 0xef, 0x5f, 0xc9,
0xb9, 0xf5, 0x3c, 0xa9, 0x18, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0x5b, 0xbb,
0xa7, 0xa6, 0x7e, 0x2b, 0xaa, 0xa9, 0x3f, 0xfe, 0x48, 0xed, 0xfe, 0x46, 0xa2, 0x3a, 0x78, 0x14, 0xac, 0x48, 0x5c, 0x71,
0x96, 0xc6, 0xce, 0x4a, 0xdf, 0xab, 0xfd, 0x7a, 0xfa, 0xd7, 0x57, 0x62, 0xef, 0x5f, 0xc3, 0x57, 0xb5, 0x7a, 0xf6, 0x94,
0x9a, 0xfa, 0x2d, 0x75, 0x7c, 0xdf, 0xae, 0xa8, 0x3f, 0x7e, 0xfe, 0xda, 0x05, 0x15, 0xf5, 0x79, 0x6b, 0xed, 0xe4, 0x6c,
0xfe, 0x77, 0x6c, 0xfd, 0xba, 0x71, 0xd4, 0x6d, 0x15, 0xf5, 0x9f, 0xea, 0xe6, 0xc4, 0xa1, 0x15, 0xf5, 0x2b, 0x5f, 0x4d,
0x96, 0xa3, 0xb0, 0x0a, 0x71, 0xcf, 0xf8, 0x7f, 0xcf, 0x5a, 0xed, 0x18, 0x1a, 0x41, 0x56, 0xd5, 0xd4, 0x78, 0xb3, 0x02,
0x62, 0xe5, 0x7d, 0x26, 0xce, 0xae, 0xa8, 0x7d, 0xc2, 0x1d, 0x35, 0xbe, 0xeb, 0x1a, 0x40, 0x2b, 0xcb, 0xff, 0xfc, 0xab,
0xad, 0xaf, 0x15, 0xb2, 0xae, 0xa6, 0xfe, 0x7d, 0x15, 0xf5, 0x3e, 0xdd, 0x05, 0xf0, 0xfb, 0x2a, 0x6a, 0xcb, 0xff, 0xea,
0x9e, 0xeb, 0x9c, 0xfc, 0xef, 0xac, 0xa9, 0xa5, 0xa2, 0xae, 0xfc, 0x7f, 0xdb, 0xf8, 0xbf, 0xe2, 0x9e, 0x3a, 0xef, 0x8f,
0x7a, 0x9b, 0xfc, 0xa7, 0xf2, 0x7f, 0x77, 0x45, 0x67, 0x89, 0x3f, 0xf9, 0x38, 0x7f, 0x5f, 0x4d, 0xdd, 0xdf, 0x49, 0x85,
0xfc, 0xff, 0x4e, 0xfe, 0xd7, 0x54, 0x6f, 0xfc, 0xc6, 0x9a, 0xba, 0x67, 0xf7, 0x97, 0x37, 0x56, 0xd4, 0x7d, 0x7f, 0x4f,
0x5d, 0xff, 0xbf, 0x61, 0x8e, 0x72, 0x7a, 0x4d, 0x5d, 0x15, 0x75, 0x73, 0xdb, 0xb6, 0xe6, 0x3f, 0x56, 0xc0, 0xdd, 0x57,
0xac, 0x63, 0xe2, 0x2a, 0x37, 0xf0, 0xad, 0xf9, 0x37, 0xfe, 0x87, 0xef, 0x9f, 0xb1, 0x3a, 0x3a, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x37, 0xf8, 0xe7, 0xc7,
0x71, 0x00, 0xf9, 0x07, 0x7e, 0x2e, 0xff, 0xff, 0x02 };
// Font glyphs rectangles data (on atlas)
static const Rectangle rltechFontRecs[189] = {
{ 4, 4, 5 , 16 },
{ 17, 4, 1 , 9 },
{ 26, 4, 3 , 3 },
{ 37, 4, 5 , 7 },
{ 50, 4, 5 , 9 },
{ 63, 4, 7 , 9 },
{ 78, 4, 6 , 9 },
{ 92, 4, 1 , 3 },
{ 101, 4, 2 , 13 },
{ 111, 4, 2 , 13 },
{ 121, 4, 5 , 5 },
{ 134, 4, 5 , 5 },
{ 147, 4, 1 , 2 },
{ 156, 4, 5 , 1 },
{ 169, 4, 1 , 1 },
{ 178, 4, 3 , 9 },
{ 189, 4, 5 , 9 },
{ 202, 4, 2 , 9 },
{ 212, 4, 5 , 9 },
{ 225, 4, 5 , 9 },
{ 238, 4, 5 , 9 },
{ 251, 4, 5 , 9 },
{ 264, 4, 5 , 9 },
{ 277, 4, 5 , 9 },
{ 290, 4, 5 , 9 },
{ 303, 4, 5 , 9 },
{ 316, 4, 1 , 6 },
{ 325, 4, 1 , 7 },
{ 334, 4, 3 , 5 },
{ 345, 4, 5 , 3 },
{ 358, 4, 3 , 5 },
{ 369, 4, 5 , 9 },
{ 382, 4, 8 , 9 },
{ 398, 4, 5 , 9 },
{ 411, 4, 5 , 9 },
{ 424, 4, 5 , 9 },
{ 437, 4, 5 , 9 },
{ 450, 4, 5 , 9 },
{ 463, 4, 5 , 9 },
{ 476, 4, 5 , 9 },
{ 489, 4, 5 , 9 },
{ 502, 4, 1 , 9 },
{ 4, 28, 5 , 9 },
{ 17, 28, 5 , 9 },
{ 30, 28, 5 , 9 },
{ 43, 28, 9 , 9 },
{ 60, 28, 5 , 9 },
{ 73, 28, 5 , 9 },
{ 86, 28, 5 , 9 },
{ 99, 28, 5 , 9 },
{ 112, 28, 5 , 9 },
{ 125, 28, 5 , 9 },
{ 138, 28, 5 , 9 },
{ 151, 28, 5 , 9 },
{ 164, 28, 5 , 9 },
{ 177, 28, 9 , 9 },
{ 194, 28, 5 , 9 },
{ 207, 28, 5 , 9 },
{ 220, 28, 5 , 9 },
{ 233, 28, 3 , 13 },
{ 244, 28, 3 , 9 },
{ 255, 28, 3 , 13 },
{ 266, 28, 3 , 2 },
{ 277, 28, 6 , 1 },
{ 291, 28, 2 , 2 },
{ 301, 28, 5 , 7 },
{ 314, 28, 5 , 9 },
{ 327, 28, 5 , 7 },
{ 340, 28, 5 , 9 },
{ 353, 28, 5 , 7 },
{ 366, 28, 4 , 9 },
{ 378, 28, 5 , 10 },
{ 391, 28, 5 , 9 },
{ 404, 28, 1 , 9 },
{ 413, 28, 1 , 12 },
{ 422, 28, 5 , 9 },
{ 435, 28, 1 , 9 },
{ 444, 28, 9 , 7 },
{ 461, 28, 5 , 7 },
{ 474, 28, 5 , 7 },
{ 487, 28, 5 , 10 },
{ 4, 52, 5 , 10 },
{ 17, 52, 5 , 7 },
{ 30, 52, 5 , 7 },
{ 43, 52, 4 , 9 },
{ 55, 52, 5 , 7 },
{ 68, 52, 5 , 7 },
{ 81, 52, 9 , 7 },
{ 98, 52, 5 , 7 },
{ 111, 52, 5 , 10 },
{ 124, 52, 5 , 7 },
{ 137, 52, 3 , 13 },
{ 148, 52, 1 , 13 },
{ 157, 52, 3 , 13 },
{ 168, 52, 4 , 2 },
{ 180, 52, 1 , 9 },
{ 189, 52, 5 , 7 },
{ 202, 52, 5 , 9 },
{ 215, 52, 5 , 9 },
{ 228, 52, 5 , 9 },
{ 241, 52, 5 , 12 },
{ 254, 52, 5 , 9 },
{ 267, 52, 5 , 10 },
{ 280, 52, 8 , 9 },
{ 296, 52, 4 , 7 },
{ 308, 52, 6 , 5 },
{ 322, 52, 5 , 3 },
{ 335, 52, 8 , 9 },
{ 351, 52, 6 , 1 },
{ 365, 52, 3 , 3 },
{ 376, 52, 5 , 7 },
{ 389, 52, 4 , 5 },
{ 401, 52, 4 , 5 },
{ 413, 52, 5 , 12 },
{ 426, 52, 5 , 10 },
{ 439, 52, 6 , 9 },
{ 453, 52, 1 , 1 },
{ 462, 52, 5 , 10 },
{ 475, 52, 2 , 5 },
{ 485, 52, 4 , 7 },
{ 497, 52, 6 , 5 },
{ 4, 76, 9 , 9 },
{ 21, 76, 9 , 7 },
{ 38, 76, 5 , 11 },
{ 51, 76, 5 , 9 },
{ 64, 76, 5 , 12 },
{ 77, 76, 5 , 12 },
{ 90, 76, 5 , 12 },
{ 103, 76, 5 , 12 },
{ 116, 76, 5 , 11 },
{ 129, 76, 5 , 11 },
{ 142, 76, 9 , 9 },
{ 159, 76, 5 , 11 },
{ 172, 76, 5 , 12 },
{ 185, 76, 5 , 12 },
{ 198, 76, 5 , 12 },
{ 211, 76, 5 , 11 },
{ 224, 76, 2 , 12 },
{ 234, 76, 2 , 12 },
{ 244, 76, 3 , 12 },
{ 255, 76, 3 , 11 },
{ 266, 76, 6 , 9 },
{ 280, 76, 5 , 12 },
{ 293, 76, 5 , 12 },
{ 306, 76, 5 , 12 },
{ 319, 76, 5 , 12 },
{ 332, 76, 5 , 12 },
{ 345, 76, 5 , 11 },
{ 358, 76, 5 , 5 },
{ 371, 76, 5 , 9 },
{ 384, 76, 5 , 12 },
{ 397, 76, 5 , 12 },
{ 410, 76, 5 , 12 },
{ 423, 76, 5 , 11 },
{ 436, 76, 5 , 12 },
{ 449, 76, 5 , 9 },
{ 462, 76, 5 , 11 },
{ 475, 76, 5 , 10 },
{ 488, 76, 5 , 10 },
{ 4, 100, 5 , 10 },
{ 17, 100, 5 , 10 },
{ 30, 100, 5 , 9 },
{ 43, 100, 5 , 9 },
{ 56, 100, 9 , 7 },
{ 73, 100, 5 , 9 },
{ 86, 100, 5 , 10 },
{ 99, 100, 5 , 10 },
{ 112, 100, 5 , 10 },
{ 125, 100, 5 , 9 },
{ 138, 100, 2 , 10 },
{ 148, 100, 2 , 10 },
{ 158, 100, 3 , 10 },
{ 169, 100, 3 , 9 },
{ 180, 100, 5 , 9 },
{ 193, 100, 5 , 10 },
{ 206, 100, 5 , 10 },
{ 219, 100, 5 , 10 },
{ 232, 100, 5 , 10 },
{ 245, 100, 5 , 10 },
{ 258, 100, 5 , 9 },
{ 271, 100, 5 , 5 },
{ 284, 100, 5 , 7 },
{ 297, 100, 5 , 10 },
{ 310, 100, 5 , 10 },
{ 323, 100, 5 , 10 },
{ 336, 100, 5 , 9 },
{ 349, 100, 5 , 13 },
{ 362, 100, 5 , 13 },
{ 375, 100, 5 , 12 },
};
// Font glyphs info data
// NOTE: No glyphs.image data provided
static const GlyphInfo rltechFontGlyphs[189] = {
{ 32, 0, 0, 5, { 0 }},
{ 33, 0, 3, 2, { 0 }},
{ 34, 0, 3, 4, { 0 }},
{ 35, 0, 3, 6, { 0 }},
{ 36, 0, 3, 6, { 0 }},
{ 37, 0, 3, 8, { 0 }},
{ 38, 0, 3, 7, { 0 }},
{ 39, 0, 3, 2, { 0 }},
{ 40, 0, 1, 2, { 0 }},
{ 41, -1, 1, 2, { 0 }},
{ 42, 0, 3, 6, { 0 }},
{ 43, 0, 5, 6, { 0 }},
{ 44, 0, 10, 2, { 0 }},
{ 45, 0, 8, 6, { 0 }},
{ 46, 0, 11, 2, { 0 }},
{ 47, 0, 3, 4, { 0 }},
{ 48, 0, 3, 6, { 0 }},
{ 49, 0, 3, 3, { 0 }},
{ 50, 0, 3, 6, { 0 }},
{ 51, 0, 3, 6, { 0 }},
{ 52, 0, 3, 6, { 0 }},
{ 53, 0, 3, 6, { 0 }},
{ 54, 0, 3, 6, { 0 }},
{ 55, 0, 3, 6, { 0 }},
{ 56, 0, 3, 6, { 0 }},
{ 57, 0, 3, 6, { 0 }},
{ 58, 0, 4, 2, { 0 }},
{ 59, 0, 4, 2, { 0 }},
{ 60, 0, 5, 4, { 0 }},
{ 61, 0, 6, 6, { 0 }},
{ 62, 0, 5, 4, { 0 }},
{ 63, 0, 3, 6, { 0 }},
{ 64, 0, 3, 9, { 0 }},
{ 65, 0, 3, 6, { 0 }},
{ 66, 0, 3, 6, { 0 }},
{ 67, 0, 3, 6, { 0 }},
{ 68, 0, 3, 6, { 0 }},
{ 69, 0, 3, 6, { 0 }},
{ 70, 0, 3, 6, { 0 }},
{ 71, 0, 3, 6, { 0 }},
{ 72, 0, 3, 6, { 0 }},
{ 73, 0, 3, 2, { 0 }},
{ 74, 0, 3, 6, { 0 }},
{ 75, 0, 3, 6, { 0 }},
{ 76, 0, 3, 6, { 0 }},
{ 77, 0, 3, 10, { 0 }},
{ 78, 0, 3, 6, { 0 }},
{ 79, 0, 3, 6, { 0 }},
{ 80, 0, 3, 6, { 0 }},
{ 81, 0, 3, 6, { 0 }},
{ 82, 0, 3, 6, { 0 }},
{ 83, 0, 3, 6, { 0 }},
{ 84, 0, 3, 6, { 0 }},
{ 85, 0, 3, 6, { 0 }},
{ 86, 0, 3, 6, { 0 }},
{ 87, 0, 3, 10, { 0 }},
{ 88, 0, 3, 6, { 0 }},
{ 89, 0, 3, 6, { 0 }},
{ 90, 0, 3, 6, { 0 }},
{ 91, 0, 1, 2, { 0 }},
{ 92, 0, 3, 4, { 0 }},
{ 93, -2, 1, 2, { 0 }},
{ 94, 0, 3, 4, { 0 }},
{ 95, 0, 12, 7, { 0 }},
{ 96, 0, 3, 3, { 0 }},
{ 97, 0, 5, 6, { 0 }},
{ 98, 0, 3, 6, { 0 }},
{ 99, 0, 5, 6, { 0 }},
{ 100, 0, 3, 6, { 0 }},
{ 101, 0, 5, 6, { 0 }},
{ 102, 0, 3, 5, { 0 }},
{ 103, 0, 5, 6, { 0 }},
{ 104, 0, 3, 6, { 0 }},
{ 105, 0, 3, 2, { 0 }},
{ 106, 0, 3, 2, { 0 }},
{ 107, 0, 3, 6, { 0 }},
{ 108, 0, 3, 2, { 0 }},
{ 109, 0, 5, 10, { 0 }},
{ 110, 0, 5, 6, { 0 }},
{ 111, 0, 5, 6, { 0 }},
{ 112, 0, 5, 6, { 0 }},
{ 113, 0, 5, 6, { 0 }},
{ 114, 0, 5, 6, { 0 }},
{ 115, 0, 5, 6, { 0 }},
{ 116, 0, 3, 5, { 0 }},
{ 117, 0, 5, 6, { 0 }},
{ 118, 0, 5, 6, { 0 }},
{ 119, 0, 5, 10, { 0 }},
{ 120, 0, 5, 6, { 0 }},
{ 121, 0, 5, 6, { 0 }},
{ 122, 0, 5, 6, { 0 }},
{ 123, 0, 1, 3, { 0 }},
{ 124, 0, 1, 2, { 0 }},
{ 125, -1, 1, 3, { 0 }},
{ 126, 0, 3, 5, { 0 }},
{ 161, 0, 6, 2, { 0 }},
{ 162, 0, 4, 6, { 0 }},
{ 163, 0, 3, 6, { 0 }},
{ 8364, 0, 3, 6, { 0 }},
{ 165, 0, 3, 6, { 0 }},
{ 352, 0, 0, 6, { 0 }},
{ 167, 0, 3, 6, { 0 }},
{ 353, 0, 2, 6, { 0 }},
{ 169, 0, 3, 9, { 0 }},
{ 170, 0, 3, 5, { 0 }},
{ 171, 0, 5, 7, { 0 }},
{ 172, 0, 6, 6, { 0 }},
{ 174, 0, 3, 9, { 0 }},
{ 175, 0, 2, 7, { 0 }},
{ 176, 0, 3, 4, { 0 }},
{ 177, 0, 4, 6, { 0 }},
{ 178, 0, 3, 5, { 0 }},
{ 179, 0, 3, 5, { 0 }},
{ 381, 0, 0, 6, { 0 }},
{ 181, 0, 5, 6, { 0 }},
{ 182, 0, 3, 7, { 0 }},
{ 183, 0, 7, 2, { 0 }},
{ 382, 0, 2, 6, { 0 }},
{ 185, 0, 3, 3, { 0 }},
{ 186, 0, 3, 5, { 0 }},
{ 187, 0, 5, 7, { 0 }},
{ 338, 0, 3, 10, { 0 }},
{ 339, 0, 5, 10, { 0 }},
{ 376, 0, 1, 6, { 0 }},
{ 191, 0, 6, 6, { 0 }},
{ 192, 0, 0, 6, { 0 }},
{ 193, 0, 0, 6, { 0 }},
{ 194, 0, 0, 6, { 0 }},
{ 195, 0, 0, 6, { 0 }},
{ 196, 0, 1, 6, { 0 }},
{ 197, 0, 1, 6, { 0 }},
{ 198, 0, 3, 10, { 0 }},
{ 199, 0, 3, 6, { 0 }},
{ 200, 0, 0, 6, { 0 }},
{ 201, 0, 0, 6, { 0 }},
{ 202, 0, 0, 6, { 0 }},
{ 203, 0, 1, 6, { 0 }},
{ 204, -1, 0, 2, { 0 }},
{ 205, 0, 0, 2, { 0 }},
{ 206, -1, 0, 2, { 0 }},
{ 207, -1, 1, 2, { 0 }},
{ 208, -1, 3, 6, { 0 }},
{ 209, 0, 0, 6, { 0 }},
{ 210, 0, 0, 6, { 0 }},
{ 211, 0, 0, 6, { 0 }},
{ 212, 0, 0, 6, { 0 }},
{ 213, 0, 0, 6, { 0 }},
{ 214, 0, 1, 6, { 0 }},
{ 215, 0, 5, 6, { 0 }},
{ 216, 0, 3, 6, { 0 }},
{ 217, 0, 0, 6, { 0 }},
{ 218, 0, 0, 6, { 0 }},
{ 219, 0, 0, 6, { 0 }},
{ 220, 0, 1, 6, { 0 }},
{ 221, 0, 0, 6, { 0 }},
{ 222, 0, 3, 6, { 0 }},
{ 223, 0, 3, 6, { 0 }},
{ 224, 0, 2, 6, { 0 }},
{ 225, 0, 2, 6, { 0 }},
{ 226, 0, 2, 6, { 0 }},
{ 227, 0, 2, 6, { 0 }},
{ 228, 0, 3, 6, { 0 }},
{ 229, 0, 3, 6, { 0 }},
{ 230, 0, 5, 10, { 0 }},
{ 231, 0, 5, 6, { 0 }},
{ 232, 0, 2, 6, { 0 }},
{ 233, 0, 2, 6, { 0 }},
{ 234, 0, 2, 6, { 0 }},
{ 235, 0, 3, 6, { 0 }},
{ 236, -1, 2, 2, { 0 }},
{ 237, 0, 2, 2, { 0 }},
{ 238, -1, 2, 2, { 0 }},
{ 239, -1, 3, 2, { 0 }},
{ 240, 0, 3, 6, { 0 }},
{ 241, 0, 2, 6, { 0 }},
{ 242, 0, 2, 6, { 0 }},
{ 243, 0, 2, 6, { 0 }},
{ 244, 0, 2, 6, { 0 }},
{ 245, 0, 2, 6, { 0 }},
{ 246, 0, 3, 6, { 0 }},
{ 247, 0, 5, 6, { 0 }},
{ 248, 0, 5, 6, { 0 }},
{ 249, 0, 2, 6, { 0 }},
{ 250, 0, 2, 6, { 0 }},
{ 251, 0, 2, 6, { 0 }},
{ 252, 0, 3, 6, { 0 }},
{ 253, 0, 2, 6, { 0 }},
{ 254, 0, 2, 6, { 0 }},
{ 255, 0, 3, 6, { 0 }},
};
// Style loading function: RLTech
static void GuiLoadStyleRLTech(void)
{
// Load style properties provided
// NOTE: Default properties are propagated
for (int i = 0; i < RLTECH_STYLE_PROPS_COUNT; i++)
{
GuiSetStyle(rltechStyleProps[i].controlId, rltechStyleProps[i].propertyId, rltechStyleProps[i].propertyValue);
}
// Custom font loading
// NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function
int rltechFontDataSize = 0;
unsigned char *data = DecompressData(rltechFontData, RLTECH_STYLE_FONT_ATLAS_COMP_SIZE, &rltechFontDataSize);
Image imFont = { data, 512, 256, 1, 2 };
Font font = { 0 };
font.baseSize = 16;
font.glyphCount = 189;
// Load texture from image
font.texture = LoadTextureFromImage(imFont);
UnloadImage(imFont); // Uncompressed image data can be unloaded from memory
// Copy char recs data from global fontRecs
// NOTE: Required to avoid issues if trying to free font
font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle));
memcpy(font.recs, rltechFontRecs, font.glyphCount*sizeof(Rectangle));
// Copy font char info data from global fontChars
// NOTE: Required to avoid issues if trying to free font
font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo));
memcpy(font.glyphs, rltechFontGlyphs, font.glyphCount*sizeof(GlyphInfo));
GuiSetFont(font);
// Setup a white rectangle on the font to be used on shapes drawing,
// it makes possible to draw shapes and text (full UI) in a single draw call
Rectangle fontWhiteRec = { 510, 254, 1, 1 };
SetShapesTexture(font.texture, fontWhiteRec);
//-----------------------------------------------------------------
// TODO: Custom user style setup: Set specific properties here (if required)
// i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT
}

View File

@ -0,0 +1,614 @@
//////////////////////////////////////////////////////////////////////////////////
// //
// StyleAsCode exporter v2.0 - Style data exported as a values array //
// //
// USAGE: On init call: GuiLoadStyleSunny(); //
// //
// more info and bugs-report: github.com/raysan5/raygui //
// feedback and support: ray[at]raylibtech.com //
// //
// Copyright (c) 2020-2025 raylib technologies (@raylibtech) //
// //
//////////////////////////////////////////////////////////////////////////////////
#define SUNNY_STYLE_PROPS_COUNT 33
// Custom style name: Sunny
static const GuiStyleProp sunnyStyleProps[SUNNY_STYLE_PROPS_COUNT] = {
{ 0, 0, (int)0x9c760aff }, // DEFAULT_BORDER_COLOR_NORMAL
{ 0, 1, (int)0x594006ff }, // DEFAULT_BASE_COLOR_NORMAL
{ 0, 2, (int)0xf6d519ff }, // DEFAULT_TEXT_COLOR_NORMAL
{ 0, 3, (int)0xf6ee89ff }, // DEFAULT_BORDER_COLOR_FOCUSED
{ 0, 4, (int)0xf5f3d1ff }, // DEFAULT_BASE_COLOR_FOCUSED
{ 0, 5, (int)0xf4cd19ff }, // DEFAULT_TEXT_COLOR_FOCUSED
{ 0, 6, (int)0xf7e580ff }, // DEFAULT_BORDER_COLOR_PRESSED
{ 0, 7, (int)0xf7f2c1ff }, // DEFAULT_BASE_COLOR_PRESSED
{ 0, 8, (int)0x52470aff }, // DEFAULT_TEXT_COLOR_PRESSED
{ 0, 9, (int)0xc0be92ff }, // DEFAULT_BORDER_COLOR_DISABLED
{ 0, 10, (int)0xd3d3a1ff }, // DEFAULT_BASE_COLOR_DISABLED
{ 0, 11, (int)0xbcbc89ff }, // DEFAULT_TEXT_COLOR_DISABLED
{ 0, 16, (int)0x00000010 }, // DEFAULT_TEXT_SIZE
{ 0, 17, (int)0x00000000 }, // DEFAULT_TEXT_SPACING
{ 0, 18, (int)0x725706ff }, // DEFAULT_LINE_COLOR
{ 0, 19, (int)0xf0be4bff }, // DEFAULT_BACKGROUND_COLOR
{ 0, 20, (int)0x00000008 }, // DEFAULT_TEXT_LINE_SPACING
{ 1, 2, (int)0x504506ff }, // LABEL_TEXT_COLOR_NORMAL
{ 1, 5, (int)0xfdeb9bff }, // LABEL_TEXT_COLOR_FOCUSED
{ 1, 8, (int)0xf5e8a4ff }, // LABEL_TEXT_COLOR_PRESSED
{ 2, 2, (int)0xebc21fff }, // BUTTON_TEXT_COLOR_NORMAL
{ 3, 2, (int)0xebc21fff }, // TOGGLE_TEXT_COLOR_NORMAL
{ 4, 2, (int)0x81700fff }, // SLIDER_TEXT_COLOR_NORMAL
{ 4, 5, (int)0xf4e49aff }, // SLIDER_TEXT_COLOR_FOCUSED
{ 7, 2, (int)0xebc21fff }, // COMBOBOX_TEXT_COLOR_NORMAL
{ 8, 2, (int)0xefd87bff }, // DROPDOWNBOX_TEXT_COLOR_NORMAL
{ 8, 5, (int)0xd4b219ff }, // DROPDOWNBOX_TEXT_COLOR_FOCUSED
{ 9, 2, (int)0x7a680bff }, // TEXTBOX_TEXT_COLOR_NORMAL
{ 9, 5, (int)0xad931fff }, // TEXTBOX_TEXT_COLOR_FOCUSED
{ 10, 2, (int)0x62570eff }, // VALUEBOX_TEXT_COLOR_NORMAL
{ 10, 5, (int)0xf2df88ff }, // VALUEBOX_TEXT_COLOR_FOCUSED
{ 12, 2, (int)0xf4e798ff }, // LISTVIEW_TEXT_COLOR_NORMAL
{ 15, 2, (int)0xebc21fff }, // STATUSBAR_TEXT_COLOR_NORMAL
};
// WARNING: This style uses a custom font: "GMSN.ttf" (size: 16, spacing: 0)
#define SUNNY_STYLE_FONT_ATLAS_COMP_SIZE 2434
// Font atlas image pixels data: DEFLATE compressed
static unsigned char sunnyFontData[SUNNY_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed,
0xdd, 0x5b, 0x6e, 0xe4, 0x36, 0x10, 0x05, 0x50, 0xee, 0x7f, 0xa1, 0xd9, 0x06, 0x83, 0x20, 0x18, 0x24, 0xe3, 0xb1, 0x45,
0xb2, 0xaa, 0xa8, 0x57, 0x9f, 0x1c, 0xe4, 0xc7, 0x1a, 0xb7, 0xd5, 0x94, 0xae, 0x44, 0x3d, 0x58, 0xec, 0x0d, 0x00, 0x00,
0x00, 0xf8, 0x78, 0xff, 0xfc, 0xf7, 0xfd, 0xcf, 0xbe, 0x5b, 0x72, 0xbc, 0xec, 0xd7, 0xbf, 0x18, 0x2d, 0xe9, 0x3f, 0xae,
0x49, 0x3f, 0x58, 0x36, 0xf7, 0xb7, 0x62, 0xeb, 0xd5, 0x97, 0xda, 0xa6, 0x1f, 0xb4, 0x5a, 0x4b, 0xff, 0xbc, 0x1d, 0xb6,
0x7d, 0x0f, 0xb4, 0x5e, 0x3b, 0x5c, 0xe7, 0x9f, 0x7f, 0x73, 0xbc, 0xa4, 0x72, 0x3d, 0x57, 0xda, 0xb4, 0x72, 0xfb, 0xac,
0xb4, 0x60, 0x5b, 0x5e, 0x7a, 0xdc, 0x52, 0x6d, 0xaa, 0x1d, 0xc7, 0x9f, 0xdc, 0x6f, 0x92, 0xff, 0xe3, 0x6f, 0xf3, 0x2b,
0x83, 0x47, 0x5b, 0x7f, 0x7e, 0xdf, 0x68, 0xd3, 0xc7, 0x84, 0xff, 0xfe, 0x76, 0x5d, 0x42, 0xb3, 0x9f, 0xd2, 0x87, 0x47,
0xc2, 0x95, 0x16, 0x3a, 0x6e, 0xbd, 0x16, 0xca, 0xc4, 0xe8, 0x33, 0x23, 0xeb, 0x32, 0xb3, 0x6c, 0x6e, 0xfd, 0x62, 0xfb,
0xfc, 0xf8, 0xf3, 0x8e, 0xf7, 0xb4, 0xa3, 0x2d, 0x3c, 0xda, 0x73, 0x8f, 0xbf, 0xdf, 0xfa, 0x56, 0xcd, 0xa4, 0x7e, 0x4f,
0xfe, 0xfb, 0xff, 0x72, 0xd6, 0x83, 0x19, 0xcc, 0x9f, 0x1b, 0xd6, 0xcf, 0x0a, 0xc7, 0xc7, 0xac, 0x7d, 0x2d, 0x7c, 0xd4,
0x4e, 0x3d, 0xb0, 0x0f, 0xaf, 0x6f, 0xb3, 0xe8, 0xdf, 0xd9, 0x91, 0xff, 0x8a, 0x14, 0xb7, 0x89, 0x33, 0x62, 0xa4, 0x4f,
0x71, 0xdc, 0xe3, 0xcc, 0x27, 0x7c, 0xb4, 0x2e, 0x91, 0xfe, 0x4c, 0xbe, 0x2d, 0x57, 0xfb, 0x1c, 0xfb, 0xf2, 0x5f, 0x71,
0xbe, 0x5d, 0x3f, 0x97, 0xec, 0x6b, 0xdf, 0x99, 0xf3, 0xf5, 0xfd, 0xf3, 0xbf, 0xfe, 0xdd, 0x2a, 0xf2, 0x5f, 0xb3, 0x55,
0xd6, 0xf3, 0xdf, 0xe5, 0x7f, 0xfa, 0xfc, 0xff, 0x73, 0xab, 0xf7, 0xe0, 0xf5, 0x57, 0xfe, 0xaa, 0xbd, 0xaa, 0x9f, 0x7f,
0x6d, 0xfe, 0x47, 0xd7, 0x83, 0x6d, 0x39, 0xff, 0xb1, 0xab, 0xcf, 0xc8, 0xd5, 0x46, 0x55, 0xff, 0x7f, 0x6f, 0xef, 0xe1,
0xf8, 0xea, 0x31, 0x92, 0xf0, 0xb5, 0x7b, 0x1e, 0x35, 0x9f, 0x7c, 0x45, 0xfe, 0xdb, 0xc4, 0xda, 0xf4, 0xe1, 0xf5, 0xff,
0xec, 0x11, 0x7e, 0x2d, 0xff, 0x75, 0xe7, 0x8e, 0x2b, 0xf3, 0xdf, 0x83, 0x77, 0xc4, 0xaa, 0xaf, 0xe3, 0xe3, 0xdf, 0x6d,
0xed, 0xfe, 0xdc, 0x79, 0xd7, 0xff, 0xa3, 0x7e, 0x60, 0x26, 0xff, 0x9f, 0xd2, 0xff, 0x9f, 0xe9, 0x69, 0x8f, 0x5a, 0x71,
0xfe, 0x78, 0x76, 0xc5, 0xd9, 0xfc, 0xda, 0xfc, 0xf7, 0xa9, 0x7b, 0xd8, 0xf7, 0xce, 0x7f, 0x5b, 0xbe, 0xca, 0xab, 0xdc,
0x77, 0xa3, 0x7b, 0xd4, 0x68, 0xcf, 0x9d, 0x39, 0xaa, 0xdd, 0x33, 0xff, 0xb1, 0xfd, 0xb9, 0x0f, 0x7b, 0xf9, 0x3d, 0x91,
0xff, 0xf6, 0x9a, 0xfc, 0xf7, 0xe0, 0xdd, 0x8e, 0x9f, 0xfb, 0x7b, 0xb1, 0xfb, 0x71, 0x91, 0x9e, 0x7c, 0xa6, 0x8f, 0x52,
0x95, 0xff, 0x7b, 0x6c, 0x49, 0xe7, 0xff, 0x8a, 0xfb, 0xff, 0xed, 0xb0, 0x87, 0xff, 0x59, 0xf9, 0x3f, 0x7e, 0xfe, 0xd7,
0x6e, 0xff, 0xac, 0x2e, 0x9a, 0xff, 0x9a, 0xfb, 0xff, 0xe7, 0x1f, 0xad, 0x67, 0xae, 0x5c, 0x73, 0xf9, 0xbf, 0xd3, 0xf3,
0xbf, 0xbd, 0xf9, 0x1f, 0x3d, 0xf5, 0x7e, 0x53, 0xff, 0xbf, 0xf2, 0x3e, 0x7e, 0xfc, 0x9d, 0x9b, 0x7d, 0xef, 0x14, 0xb5,
0xd0, 0x9b, 0x5c, 0xf7, 0x4c, 0x7f, 0xf4, 0x39, 0x50, 0xee, 0x2e, 0xdd, 0xd5, 0xef, 0xff, 0xd4, 0xb7, 0xe0, 0x79, 0xeb,
0xd3, 0x6f, 0xdc, 0x67, 0xe4, 0x5d, 0x6f, 0xc9, 0xda, 0xbb, 0xce, 0x7c, 0x3e, 0x1b, 0xff, 0x5b, 0xb6, 0x0f, 0x3b, 0xcf,
0x6c, 0x5a, 0xe2, 0x19, 0xf7, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc9, 0xe3,
0x17, 0x22, 0x63, 0x0d, 0xa3, 0x75, 0x08, 0x6a, 0xeb, 0x21, 0xf4, 0x2f, 0x75, 0x58, 0x57, 0x3f, 0x7b, 0x76, 0xac, 0x65,
0x66, 0x9c, 0x66, 0xed, 0xef, 0x56, 0x55, 0x96, 0xa8, 0x1d, 0x79, 0x3e, 0xae, 0x77, 0xb3, 0x5a, 0xad, 0x39, 0x56, 0x05,
0x6d, 0xbd, 0xa6, 0x79, 0xa6, 0x0e, 0x5f, 0xf5, 0xd8, 0xea, 0x9a, 0xfa, 0x68, 0xf3, 0x63, 0xde, 0x6b, 0x2a, 0x8d, 0xd4,
0xe5, 0x7f, 0x7d, 0x3b, 0xf4, 0x2f, 0xeb, 0xd1, 0x2f, 0xa8, 0xc4, 0x50, 0xbf, 0x74, 0xee, 0xe7, 0x77, 0xca, 0xff, 0xec,
0x31, 0x38, 0xbb, 0xf7, 0xc6, 0x47, 0xdc, 0x8d, 0xaa, 0x4f, 0x5c, 0x5f, 0x5b, 0xa5, 0x15, 0xd5, 0x47, 0xad, 0xcf, 0x7f,
0x3b, 0xe9, 0xfc, 0x1f, 0xcd, 0x7f, 0x1f, 0xce, 0x66, 0x73, 0xdf, 0xfc, 0xaf, 0xd7, 0x9d, 0xc8, 0xfe, 0xd5, 0xdc, 0x4c,
0x0e, 0xf1, 0x5a, 0xe3, 0xf9, 0xfc, 0xe7, 0x2a, 0x05, 0x9d, 0x7b, 0x6e, 0xbd, 0x3e, 0xff, 0xd1, 0x16, 0xb9, 0x2a, 0xff,
0xf1, 0xbd, 0xa4, 0x0f, 0xab, 0x59, 0xdf, 0x31, 0xff, 0xfd, 0xe3, 0xf3, 0x5f, 0x5f, 0xcb, 0x37, 0x9a, 0x80, 0x48, 0x1d,
0xf4, 0x99, 0xeb, 0xea, 0xd5, 0x2b, 0xbb, 0xf8, 0x75, 0x57, 0xf4, 0xfc, 0x3f, 0xfa, 0xfd, 0x99, 0x6f, 0x72, 0x75, 0xfe,
0xdb, 0x30, 0xe1, 0x3d, 0x91, 0xd2, 0xf8, 0x1d, 0x90, 0x4c, 0xcd, 0xab, 0x6b, 0xf2, 0xdf, 0x42, 0x33, 0x06, 0xc6, 0xcf,
0xf3, 0x77, 0xcf, 0x7f, 0xf5, 0xb5, 0x41, 0xf4, 0x8e, 0x41, 0xf5, 0x3a, 0xde, 0xef, 0xfa, 0xbf, 0x17, 0xf4, 0x12, 0x77,
0xe4, 0x3f, 0xdb, 0x3e, 0xd1, 0x34, 0xc5, 0xf2, 0x3f, 0x7f, 0x76, 0x8f, 0xcd, 0x26, 0x10, 0x5b, 0xf6, 0xde, 0xfc, 0xd7,
0xd6, 0x4f, 0x5d, 0xbf, 0x57, 0xfc, 0xa6, 0xfc, 0x47, 0xaf, 0xff, 0xe7, 0xaf, 0xb8, 0xee, 0x95, 0xff, 0x36, 0x31, 0x3f,
0xcf, 0xd9, 0xf9, 0x1f, 0x55, 0x5b, 0x7d, 0x5b, 0xfe, 0xa3, 0xd9, 0x8a, 0xce, 0x67, 0xd4, 0xc2, 0x67, 0xba, 0xb7, 0x9f,
0xff, 0xdb, 0x4b, 0xf3, 0x1f, 0x9f, 0x5f, 0xe6, 0x59, 0xf9, 0xaf, 0xee, 0x35, 0x5c, 0x5f, 0x57, 0x2f, 0x7a, 0xb7, 0x31,
0x7e, 0x97, 0xf2, 0xdd, 0xfd, 0xff, 0xbe, 0xa1, 0x17, 0x9e, 0x7d, 0xfe, 0x7f, 0x55, 0xfe, 0x77, 0x3d, 0xff, 0x6b, 0xd3,
0x73, 0xfe, 0xed, 0x5a, 0x2b, 0xf9, 0xaf, 0xce, 0x7f, 0xe5, 0xdc, 0x89, 0x6b, 0xff, 0xa2, 0xfa, 0xfd, 0x9f, 0xfa, 0x3b,
0x69, 0xfb, 0xdf, 0xff, 0xd9, 0xd3, 0x3e, 0x6d, 0x6a, 0xc6, 0xb4, 0xf5, 0xbf, 0xda, 0x26, 0x67, 0x35, 0x8e, 0xad, 0x73,
0xfd, 0xdb, 0x37, 0x77, 0xcf, 0x7f, 0xec, 0x6d, 0x83, 0xe8, 0x6f, 0xc6, 0x7f, 0xe3, 0x3e, 0x73, 0x81, 0x7d, 0xe6, 0x5b,
0x94, 0x5a, 0xa1, 0xba, 0x85, 0xb4, 0x2a, 0x8e, 0x00, 0xef, 0x7a, 0xcf, 0x7c, 0xd7, 0xbf, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xbc, 0xd1, 0x2b, 0xb3, 0x35, 0xb7, 0xff, 0xfc, 0x69, 0x0f, 0x8d, 0x77,
0xed, 0xc9, 0xdf, 0xeb, 0xcb, 0x75, 0x30, 0xd6, 0xc6, 0x9d, 0x56, 0xd4, 0x60, 0xa8, 0xae, 0x23, 0x35, 0x6e, 0x97, 0xd9,
0x2d, 0x3d, 0x1e, 0x49, 0xbc, 0xba, 0x87, 0x44, 0xc6, 0xf5, 0x64, 0x2a, 0xea, 0x64, 0xe6, 0x12, 0x88, 0x57, 0x42, 0x6c,
0x8b, 0x9f, 0x1a, 0xdb, 0x6a, 0x91, 0xf1, 0xe1, 0x3b, 0xf3, 0x1f, 0xab, 0x2d, 0x79, 0x45, 0xa5, 0xb5, 0xf8, 0xde, 0x54,
0xbb, 0x86, 0xf5, 0xad, 0x32, 0xb7, 0xb6, 0xb9, 0x9f, 0x67, 0xc6, 0xf4, 0xe7, 0x6a, 0x0f, 0xac, 0xb6, 0x44, 0x9f, 0xaa,
0x96, 0xb2, 0xfa, 0x9b, 0x3f, 0xff, 0xde, 0xf1, 0xb2, 0x3e, 0x55, 0x39, 0x62, 0xed, 0x53, 0xbf, 0xff, 0xb7, 0xfb, 0x2a,
0x27, 0xbc, 0x23, 0xff, 0x2d, 0x70, 0x94, 0x3d, 0x37, 0xff, 0xf1, 0xe3, 0x54, 0x2b, 0xac, 0xd2, 0xb3, 0x3e, 0x37, 0x46,
0x64, 0xe4, 0x6e, 0xbe, 0x46, 0xd0, 0x19, 0x15, 0x35, 0xfe, 0xcc, 0xd7, 0xca, 0x56, 0x9b, 0x4b, 0xff, 0xf7, 0xc7, 0xb8,
0x76, 0xd0, 0xdb, 0x9a, 0xcd, 0x7f, 0x0f, 0xd4, 0x1e, 0xa9, 0xa9, 0xc8, 0xf7, 0x9c, 0xfc, 0xcf, 0x5c, 0x6d, 0x9c, 0x97,
0xff, 0xf1, 0xcf, 0xeb, 0xaa, 0x6a, 0x57, 0xd6, 0xda, 0x19, 0xd5, 0x5a, 0x6e, 0xa1, 0x2d, 0xd2, 0x83, 0xc7, 0x95, 0x5e,
0x5c, 0xcf, 0xbc, 0x7f, 0xf9, 0x7f, 0xf6, 0x4c, 0x3d, 0x9b, 0xff, 0xd5, 0xbf, 0x78, 0x4d, 0xff, 0x7f, 0x65, 0x7f, 0x79,
0x52, 0xfe, 0xdb, 0x54, 0x2d, 0xb2, 0x7b, 0x9f, 0xff, 0x2b, 0x6b, 0x6a, 0xd5, 0xe7, 0x3f, 0x96, 0xf0, 0xc8, 0xfe, 0x3e,
0x3f, 0xe3, 0xc1, 0xda, 0x76, 0x1b, 0xf7, 0xf2, 0x7b, 0xa2, 0xff, 0x9f, 0xcf, 0x7f, 0x5d, 0x9f, 0x67, 0xed, 0xea, 0xf9,
0x8a, 0xfc, 0xf7, 0x44, 0x65, 0xf4, 0xfd, 0xd7, 0xff, 0xa3, 0x7e, 0x62, 0xb4, 0x55, 0xea, 0xe7, 0xa6, 0xaa, 0xac, 0xb6,
0xbd, 0x9a, 0xff, 0xcc, 0xf9, 0x3f, 0x7a, 0x1f, 0x22, 0xd3, 0x43, 0x5c, 0xbb, 0x1e, 0xcf, 0x1f, 0x01, 0xd6, 0xfa, 0xff,
0x67, 0xdc, 0xff, 0xef, 0xa7, 0x5d, 0xff, 0xb7, 0xd4, 0x2c, 0x46, 0x95, 0xfd, 0xff, 0x96, 0xe8, 0x65, 0x66, 0x8e, 0x36,
0x91, 0xd6, 0x5e, 0x6f, 0xb3, 0x2b, 0xcf, 0xff, 0xb9, 0xd9, 0xe6, 0xda, 0xb6, 0x7a, 0xa7, 0x91, 0xfe, 0xff, 0x9e, 0x14,
0x56, 0xfc, 0xc5, 0xca, 0xeb, 0xff, 0xeb, 0xe7, 0x66, 0xc8, 0xe4, 0xff, 0xac, 0xde, 0xd3, 0xfe, 0x6f, 0x5e, 0x5b, 0x47,
0xfa, 0x0e, 0xd7, 0xff, 0x91, 0xfb, 0xff, 0xd1, 0x9a, 0xc7, 0xe3, 0xb3, 0x71, 0xff, 0xf1, 0x0a, 0xff, 0xcc, 0xb3, 0xf1,
0xf9, 0x47, 0x9c, 0xda, 0xeb, 0x7f, 0xf9, 0xdf, 0xf3, 0xdd, 0x2b, 0x6b, 0xe7, 0xee, 0xce, 0xff, 0x5c, 0xcf, 0x2a, 0x36,
0x23, 0x62, 0x6e, 0xc6, 0xe4, 0xe8, 0x35, 0x5d, 0x3b, 0x75, 0x4f, 0x6f, 0x17, 0xf4, 0xfe, 0xab, 0x67, 0xe4, 0x79, 0xe7,
0xfb, 0x50, 0xef, 0xf8, 0x06, 0x67, 0x1c, 0xcf, 0x7b, 0x61, 0xcf, 0x34, 0x7f, 0xff, 0x2f, 0x7e, 0xb4, 0x6a, 0x17, 0xd4,
0x20, 0x3e, 0xfb, 0x2f, 0xc6, 0x9f, 0x56, 0x20, 0xff, 0x6b, 0xf9, 0xdf, 0xdf, 0x4b, 0xaa, 0x7a, 0x87, 0xe1, 0xd3, 0xf6,
0x14, 0x2d, 0xf3, 0x29, 0xdb, 0x75, 0xfd, 0x4e, 0xef, 0x5b, 0x5a, 0xc2, 0x3e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x6b, 0xf4, 0x4f, 0xac, 0x9a, 0xc2, 0x6c, 0x2d, 0xab, 0xbe, 0x30, 0x3a, 0xb3, 0x0d,
0xeb, 0x33, 0x67, 0x3f, 0xe7, 0xeb, 0xcc, 0x05, 0x7d, 0xf0, 0x2f, 0x5a, 0x60, 0x4d, 0x7b, 0x78, 0xac, 0xf1, 0xfa, 0x3c,
0x0c, 0x5f, 0xd7, 0xb8, 0x25, 0x5a, 0x64, 0x3c, 0x92, 0x77, 0x7d, 0xc6, 0x86, 0xbd, 0xdf, 0xb9, 0xa6, 0x22, 0x7a, 0xa4,
0xb6, 0xdf, 0x6c, 0x85, 0x92, 0xb3, 0x5b, 0x25, 0x33, 0x62, 0xbb, 0x05, 0x8e, 0x0d, 0xa3, 0x7a, 0x42, 0x2b, 0xb5, 0xba,
0xd6, 0x8e, 0x4f, 0x73, 0x55, 0xf8, 0xd6, 0xc7, 0xa5, 0xcf, 0xd5, 0xf0, 0x6c, 0x1b, 0xeb, 0x5e, 0xaf, 0xef, 0xed, 0xf1,
0xa4, 0xe4, 0x96, 0xce, 0x8d, 0xc7, 0xdf, 0xf1, 0x9d, 0xe3, 0x35, 0x6b, 0xe7, 0x3f, 0x27, 0x73, 0xf6, 0x1b, 0xa7, 0x74,
0x4f, 0xab, 0xc4, 0xd2, 0x9f, 0xa9, 0x08, 0xb3, 0x9e, 0xff, 0x9a, 0xf5, 0x1e, 0xcf, 0x89, 0x10, 0x9b, 0x65, 0x63, 0xa6,
0x86, 0xf7, 0xfb, 0xaa, 0x07, 0xe4, 0xf3, 0xff, 0xa9, 0x35, 0x17, 0x9e, 0xd4, 0x02, 0x7d, 0x31, 0x61, 0x33, 0xbd, 0xf8,
0x9a, 0xfc, 0x8f, 0xe7, 0x4a, 0x3a, 0x3f, 0xff, 0x3d, 0xf4, 0x09, 0xf1, 0x9e, 0xdb, 0x1d, 0x97, 0xe6, 0xf2, 0x3f, 0xde,
0x83, 0xf6, 0x2c, 0xad, 0x9a, 0x29, 0x29, 0x57, 0x87, 0xbc, 0x05, 0xaf, 0x1e, 0x32, 0x4b, 0x23, 0xb5, 0x11, 0x7a, 0xe8,
0x6a, 0x64, 0xcf, 0xf9, 0x3f, 0x7f, 0xfd, 0x3f, 0xdf, 0x6f, 0x8b, 0xdf, 0x3f, 0xc8, 0xec, 0x4b, 0x3b, 0xfa, 0xe1, 0x67,
0x2c, 0x8d, 0xd4, 0x86, 0xbb, 0x6a, 0xe9, 0xee, 0xfc, 0xf7, 0xdf, 0xe6, 0x4a, 0x3c, 0x4a, 0xd4, 0xfa, 0xd1, 0x21, 0x77,
0x64, 0xd9, 0xdb, 0xd7, 0x59, 0xbd, 0xff, 0xb7, 0xba, 0x96, 0x75, 0x73, 0x99, 0x45, 0xab, 0x52, 0x7e, 0xfd, 0xfd, 0xba,
0xf3, 0xff, 0xbe, 0xad, 0xbe, 0x77, 0x69, 0xe6, 0xee, 0xde, 0x5b, 0xf3, 0x3f, 0xd7, 0x6e, 0xef, 0xc8, 0xff, 0xb8, 0x7e,
0x6b, 0x2f, 0xba, 0x4f, 0x71, 0xc6, 0x37, 0x9a, 0xad, 0xc0, 0x9f, 0x9b, 0x63, 0xf6, 0x4d, 0xf9, 0x6f, 0x45, 0xfd, 0xff,
0x33, 0x97, 0xde, 0xa3, 0xff, 0xdf, 0x5f, 0x90, 0xff, 0xec, 0x73, 0x9d, 0x8a, 0x19, 0x8e, 0xcf, 0xce, 0x7f, 0xf6, 0x98,
0x78, 0xaf, 0x6b, 0xe1, 0xec, 0xd2, 0x6c, 0xfe, 0x3f, 0xf5, 0xfc, 0xff, 0x86, 0xfc, 0xe7, 0x9f, 0x65, 0xaf, 0xdc, 0xff,
0x3b, 0xef, 0x1d, 0x88, 0xbe, 0x31, 0xff, 0xed, 0x43, 0xcf, 0xff, 0x35, 0xf3, 0xca, 0x3f, 0x2d, 0xff, 0x33, 0x77, 0x99,
0x9e, 0x9a, 0xff, 0x8a, 0x8c, 0x54, 0xdd, 0xff, 0xaf, 0x7f, 0x0b, 0x6a, 0x67, 0x75, 0xfa, 0xe7, 0x25, 0x7c, 0x9c, 0xff,
0xc8, 0xfb, 0x3f, 0xef, 0xce, 0xff, 0xdc, 0xbb, 0x31, 0xcf, 0xce, 0x7f, 0x4f, 0xce, 0x4a, 0xf3, 0xce, 0xe7, 0xc3, 0xb1,
0x39, 0xa6, 0x9f, 0x97, 0xff, 0xfc, 0x3b, 0x65, 0x6f, 0x7d, 0xfe, 0x97, 0x7b, 0x3b, 0xe0, 0x9a, 0xe7, 0x7f, 0x77, 0x7a,
0xaf, 0x84, 0xb7, 0xbf, 0x55, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0xec,
0xeb, 0xea, 0x88, 0x9d, 0xb9, 0x71, 0x62, 0xd7, 0x54, 0xbe, 0x8f, 0xd4, 0x29, 0x98, 0x59, 0x9f, 0x78, 0xf5, 0x83, 0x48,
0xad, 0xfd, 0xa3, 0x6d, 0x13, 0xad, 0x38, 0x9e, 0xa9, 0x64, 0xb4, 0xeb, 0x3b, 0xae, 0xd7, 0x84, 0x9f, 0xff, 0x0b, 0x73,
0x95, 0x1f, 0x63, 0xb9, 0xb8, 0xfb, 0xb6, 0x9e, 0x1b, 0xa5, 0xb9, 0xb3, 0x4e, 0x7c, 0x4f, 0xd6, 0x34, 0xaf, 0x5f, 0xab,
0x6c, 0x95, 0xfe, 0xd8, 0x3a, 0x47, 0x5a, 0xb8, 0x27, 0xe6, 0x61, 0x69, 0x13, 0x7b, 0x52, 0x75, 0x75, 0x9f, 0xcc, 0xbc,
0x1c, 0xf3, 0x47, 0xe4, 0xca, 0x8a, 0xfd, 0x2d, 0x51, 0xad, 0xff, 0x2e, 0xdb, 0xfa, 0xda, 0xf1, 0xb4, 0xe3, 0x75, 0x7e,
0xce, 0x78, 0xdf, 0xb9, 0xd1, 0xe3, 0xcf, 0xf8, 0x36, 0x33, 0xc7, 0xb2, 0xf5, 0xea, 0x3c, 0xef, 0xac, 0xd9, 0xf0, 0xd9,
0x63, 0x95, 0xb3, 0x95, 0x05, 0x46, 0xc7, 0xba, 0xe7, 0x54, 0xaf, 0xca, 0xd5, 0xbd, 0x9a, 0x69, 0xc5, 0xb3, 0x96, 0x1d,
0xf9, 0x2b, 0x30, 0x0f, 0xdb, 0x95, 0xdf, 0x71, 0x7f, 0xc5, 0x8e, 0xe3, 0x5a, 0x22, 0xf7, 0xde, 0xd6, 0xd9, 0x1a, 0x59,
0xd9, 0x4a, 0x30, 0xd1, 0xf3, 0xff, 0x53, 0xf3, 0x3f, 0x9a, 0x8b, 0xe0, 0xe7, 0x59, 0xc9, 0xce, 0x5b, 0x56, 0x31, 0x93,
0xc1, 0xea, 0x15, 0xd0, 0x8e, 0x65, 0x57, 0x56, 0xec, 0x3a, 0xfb, 0xbb, 0xc6, 0xdb, 0xa8, 0xaa, 0x9f, 0x18, 0x9d, 0xb3,
0x64, 0xb4, 0xec, 0xd3, 0xce, 0xff, 0xfd, 0xf2, 0x65, 0xf3, 0x47, 0xb1, 0xbb, 0xef, 0xdb, 0xfb, 0x67, 0xec, 0x78, 0x42,
0xc6, 0x33, 0xb3, 0x4b, 0xed, 0xcc, 0xff, 0x3d, 0xeb, 0x1d, 0xf7, 0xd4, 0xb9, 0x31, 0x5b, 0xab, 0xef, 0x3e, 0xb9, 0xc9,
0xcc, 0x64, 0x1c, 0x9b, 0xbf, 0xb9, 0x7a, 0x99, 0xfc, 0xdf, 0x3b, 0xff, 0x73, 0xf7, 0x56, 0xee, 0x57, 0xbd, 0x32, 0x3b,
0x4b, 0xef, 0xfb, 0xfb, 0x8b, 0x7d, 0xc3, 0xd3, 0x9a, 0xba, 0xe7, 0x89, 0xf2, 0x7f, 0x97, 0xfe, 0xbf, 0xfc, 0xbf, 0x6f,
0x7f, 0xe9, 0xa9, 0x4a, 0xe6, 0xfa, 0xff, 0xf2, 0xff, 0xe6, 0xfc, 0xf7, 0x47, 0x5c, 0xff, 0xef, 0xda, 0x5f, 0xde, 0x76,
0xff, 0x3f, 0xfa, 0xb4, 0xf7, 0x29, 0xcf, 0x7a, 0xce, 0x78, 0xfe, 0xb7, 0xe7, 0x93, 0x77, 0x56, 0x43, 0x7f, 0xff, 0xf3,
0xde, 0xa7, 0xd4, 0x83, 0xe7, 0xed, 0xfb, 0xa1, 0x36, 0x00, 0xf9, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x76, 0xbe, 0xa9, 0x7f, 0x66, 0xc5, 0xf7, 0xc8, 0xa8, 0xcf, 0xb9, 0xcf, 0x04, 0x62, 0x23, 0x75, 0xce,
0xac, 0xf8, 0x9e, 0x1f, 0x9d, 0x6f, 0x5b, 0xc2, 0xfb, 0xc6, 0x8a, 0xcb, 0x36, 0xec, 0x49, 0x55, 0x7f, 0x48, 0x15, 0xa4,
0x77, 0xcc, 0xcd, 0x01, 0xf2, 0xff, 0x94, 0x0a, 0x69, 0x20, 0xff, 0xf2, 0x0f, 0xf2, 0x2f, 0xff, 0x20, 0xff, 0xf2, 0x0f,
0x6f, 0xbf, 0xff, 0x7f, 0xa7, 0x99, 0x6b, 0xf6, 0xd5, 0x29, 0x06, 0xcf, 0xfe, 0x63, 0x47, 0x87, 0xea, 0x65, 0x6d, 0x78,
0xdc, 0xf0, 0x8c, 0x10, 0xce, 0xca, 0xff, 0x35, 0xcf, 0xf8, 0x57, 0xf3, 0xaf, 0xff, 0x0f, 0x6f, 0xba, 0x1a, 0x89, 0xbc,
0xff, 0x27, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x70, 0x95, 0x7f, 0xff, 0xd3, 0x0e, 0x20, 0xff, 0xc0, 0xc7, 0xe5, 0xff, 0x6f };
// Font glyphs rectangles data (on atlas)
static const Rectangle sunnyFontRecs[189] = {
{ 4, 4, 4 , 16 },
{ 16, 4, 2 , 10 },
{ 26, 4, 5 , 3 },
{ 39, 4, 7 , 10 },
{ 54, 4, 7 , 13 },
{ 69, 4, 7 , 10 },
{ 84, 4, 7 , 10 },
{ 99, 4, 2 , 3 },
{ 109, 4, 3 , 12 },
{ 120, 4, 3 , 12 },
{ 131, 4, 5 , 6 },
{ 144, 4, 6 , 5 },
{ 158, 4, 2 , 4 },
{ 168, 4, 5 , 1 },
{ 181, 4, 2 , 2 },
{ 191, 4, 4 , 10 },
{ 203, 4, 6 , 10 },
{ 217, 4, 4 , 10 },
{ 229, 4, 6 , 10 },
{ 243, 4, 6 , 10 },
{ 257, 4, 6 , 10 },
{ 271, 4, 6 , 10 },
{ 285, 4, 6 , 10 },
{ 299, 4, 6 , 10 },
{ 313, 4, 6 , 10 },
{ 327, 4, 6 , 10 },
{ 341, 4, 2 , 6 },
{ 351, 4, 2 , 8 },
{ 361, 4, 7 , 7 },
{ 376, 4, 5 , 3 },
{ 389, 4, 7 , 7 },
{ 404, 4, 6 , 10 },
{ 418, 4, 7 , 12 },
{ 433, 4, 7 , 10 },
{ 448, 4, 7 , 10 },
{ 463, 4, 7 , 10 },
{ 478, 4, 7 , 10 },
{ 493, 4, 7 , 10 },
{ 4, 28, 7 , 10 },
{ 19, 28, 7 , 10 },
{ 34, 28, 7 , 10 },
{ 49, 28, 2 , 10 },
{ 59, 28, 5 , 10 },
{ 72, 28, 7 , 10 },
{ 87, 28, 6 , 10 },
{ 101, 28, 9 , 10 },
{ 118, 28, 7 , 10 },
{ 133, 28, 7 , 10 },
{ 148, 28, 7 , 10 },
{ 163, 28, 7 , 12 },
{ 178, 28, 7 , 10 },
{ 193, 28, 7 , 10 },
{ 208, 28, 6 , 10 },
{ 222, 28, 7 , 10 },
{ 237, 28, 7 , 10 },
{ 252, 28, 8 , 10 },
{ 268, 28, 7 , 10 },
{ 283, 28, 6 , 10 },
{ 297, 28, 7 , 10 },
{ 312, 28, 4 , 12 },
{ 324, 28, 4 , 10 },
{ 336, 28, 4 , 12 },
{ 348, 28, 6 , 3 },
{ 362, 28, 7 , 1 },
{ 377, 28, 4 , 3 },
{ 389, 28, 6 , 7 },
{ 403, 28, 6 , 10 },
{ 417, 28, 6 , 7 },
{ 431, 28, 6 , 10 },
{ 445, 28, 6 , 7 },
{ 459, 28, 4 , 10 },
{ 471, 28, 6 , 9 },
{ 485, 28, 6 , 10 },
{ 499, 28, 2 , 10 },
{ 4, 52, 5 , 12 },
{ 17, 52, 6 , 10 },
{ 31, 52, 3 , 10 },
{ 42, 52, 8 , 7 },
{ 58, 52, 6 , 7 },
{ 72, 52, 6 , 7 },
{ 86, 52, 6 , 9 },
{ 100, 52, 6 , 9 },
{ 114, 52, 5 , 7 },
{ 127, 52, 6 , 7 },
{ 141, 52, 4 , 10 },
{ 153, 52, 6 , 7 },
{ 167, 52, 6 , 7 },
{ 181, 52, 8 , 7 },
{ 197, 52, 6 , 7 },
{ 211, 52, 6 , 9 },
{ 225, 52, 6 , 7 },
{ 239, 52, 5 , 12 },
{ 252, 52, 2 , 12 },
{ 262, 52, 5 , 12 },
{ 275, 52, 7 , 3 },
{ 290, 52, 2 , 9 },
{ 300, 52, 6 , 11 },
{ 314, 52, 7 , 10 },
{ 329, 52, 7 , 9 },
{ 344, 52, 6 , 10 },
{ 358, 52, 7 , 11 },
{ 373, 52, 6 , 12 },
{ 387, 52, 6 , 10 },
{ 401, 52, 7 , 10 },
{ 416, 52, 5 , 5 },
{ 429, 52, 7 , 6 },
{ 444, 52, 6 , 3 },
{ 458, 52, 7 , 10 },
{ 473, 52, 0 , 0 },
{ 481, 52, 4 , 4 },
{ 493, 52, 6 , 7 },
{ 4, 76, 4 , 5 },
{ 16, 76, 4 , 5 },
{ 28, 76, 7 , 11 },
{ 43, 76, 6 , 9 },
{ 57, 76, 7 , 12 },
{ 72, 76, 2 , 2 },
{ 82, 76, 6 , 10 },
{ 96, 76, 3 , 5 },
{ 107, 76, 4 , 5 },
{ 119, 76, 7 , 6 },
{ 134, 76, 9 , 10 },
{ 151, 76, 8 , 7 },
{ 167, 76, 6 , 11 },
{ 181, 76, 6 , 11 },
{ 195, 76, 7 , 11 },
{ 210, 76, 7 , 11 },
{ 225, 76, 7 , 11 },
{ 240, 76, 7 , 11 },
{ 255, 76, 7 , 11 },
{ 270, 76, 7 , 11 },
{ 285, 76, 9 , 10 },
{ 302, 76, 7 , 12 },
{ 317, 76, 7 , 11 },
{ 332, 76, 7 , 11 },
{ 347, 76, 7 , 11 },
{ 362, 76, 7 , 11 },
{ 377, 76, 3 , 11 },
{ 388, 76, 3 , 11 },
{ 399, 76, 5 , 11 },
{ 412, 76, 5 , 11 },
{ 425, 76, 8 , 10 },
{ 441, 76, 7 , 11 },
{ 456, 76, 7 , 11 },
{ 471, 76, 7 , 11 },
{ 486, 76, 7 , 11 },
{ 4, 100, 7 , 11 },
{ 19, 100, 7 , 11 },
{ 34, 100, 7 , 7 },
{ 49, 100, 7 , 13 },
{ 64, 100, 7 , 11 },
{ 79, 100, 7 , 11 },
{ 94, 100, 7 , 11 },
{ 109, 100, 7 , 11 },
{ 124, 100, 6 , 11 },
{ 138, 100, 7 , 10 },
{ 153, 100, 7 , 10 },
{ 168, 100, 6 , 10 },
{ 182, 100, 6 , 10 },
{ 196, 100, 6 , 10 },
{ 210, 100, 6 , 10 },
{ 224, 100, 6 , 10 },
{ 238, 100, 6 , 11 },
{ 252, 100, 8 , 7 },
{ 268, 100, 6 , 9 },
{ 282, 100, 6 , 10 },
{ 296, 100, 6 , 10 },
{ 310, 100, 6 , 10 },
{ 324, 100, 6 , 10 },
{ 338, 100, 3 , 10 },
{ 349, 100, 3 , 10 },
{ 360, 100, 5 , 10 },
{ 373, 100, 5 , 10 },
{ 386, 100, 6 , 10 },
{ 400, 100, 6 , 10 },
{ 414, 100, 6 , 10 },
{ 428, 100, 6 , 10 },
{ 442, 100, 6 , 10 },
{ 456, 100, 6 , 10 },
{ 470, 100, 6 , 10 },
{ 484, 100, 6 , 7 },
{ 4, 124, 7 , 11 },
{ 19, 124, 6 , 10 },
{ 33, 124, 6 , 10 },
{ 47, 124, 6 , 10 },
{ 61, 124, 6 , 10 },
{ 75, 124, 6 , 12 },
{ 89, 124, 6 , 12 },
{ 103, 124, 6 , 12 },
};
// Font glyphs info data
// NOTE: No glyphs.image data provided
static const GlyphInfo sunnyFontGlyphs[189] = {
{ 32, 0, 0, 4, { 0 }},
{ 33, 0, 2, 3, { 0 }},
{ 34, 0, 2, 6, { 0 }},
{ 35, 0, 2, 8, { 0 }},
{ 36, 0, 1, 8, { 0 }},
{ 37, 0, 2, 8, { 0 }},
{ 38, 0, 2, 8, { 0 }},
{ 39, 0, 2, 3, { 0 }},
{ 40, 0, 2, 4, { 0 }},
{ 41, 0, 2, 4, { 0 }},
{ 42, 0, 4, 6, { 0 }},
{ 43, 0, 6, 7, { 0 }},
{ 44, 0, 10, 3, { 0 }},
{ 45, 0, 8, 6, { 0 }},
{ 46, 0, 10, 3, { 0 }},
{ 47, 0, 2, 5, { 0 }},
{ 48, 0, 2, 7, { 0 }},
{ 49, 0, 2, 7, { 0 }},
{ 50, 0, 2, 7, { 0 }},
{ 51, 0, 2, 7, { 0 }},
{ 52, 0, 2, 7, { 0 }},
{ 53, 0, 2, 7, { 0 }},
{ 54, 0, 2, 7, { 0 }},
{ 55, 0, 2, 7, { 0 }},
{ 56, 0, 2, 7, { 0 }},
{ 57, 0, 2, 7, { 0 }},
{ 58, 0, 4, 3, { 0 }},
{ 59, 0, 4, 3, { 0 }},
{ 60, 0, 4, 8, { 0 }},
{ 61, 0, 6, 6, { 0 }},
{ 62, 0, 4, 8, { 0 }},
{ 63, 0, 2, 7, { 0 }},
{ 64, 0, 2, 8, { 0 }},
{ 65, 0, 2, 8, { 0 }},
{ 66, 0, 2, 8, { 0 }},
{ 67, 0, 2, 8, { 0 }},
{ 68, 0, 2, 8, { 0 }},
{ 69, 0, 2, 8, { 0 }},
{ 70, 0, 2, 8, { 0 }},
{ 71, 0, 2, 8, { 0 }},
{ 72, 0, 2, 8, { 0 }},
{ 73, 0, 2, 3, { 0 }},
{ 74, 0, 2, 6, { 0 }},
{ 75, 0, 2, 8, { 0 }},
{ 76, 0, 2, 7, { 0 }},
{ 77, 0, 2, 10, { 0 }},
{ 78, 0, 2, 8, { 0 }},
{ 79, 0, 2, 8, { 0 }},
{ 80, 0, 2, 8, { 0 }},
{ 81, 0, 2, 8, { 0 }},
{ 82, 0, 2, 8, { 0 }},
{ 83, 0, 2, 8, { 0 }},
{ 84, 0, 2, 7, { 0 }},
{ 85, 0, 2, 8, { 0 }},
{ 86, 0, 2, 8, { 0 }},
{ 87, 0, 2, 9, { 0 }},
{ 88, 0, 2, 8, { 0 }},
{ 89, 0, 2, 7, { 0 }},
{ 90, 0, 2, 8, { 0 }},
{ 91, 0, 2, 5, { 0 }},
{ 92, 0, 2, 5, { 0 }},
{ 93, 0, 2, 5, { 0 }},
{ 94, 0, 2, 7, { 0 }},
{ 95, 0, 14, 8, { 0 }},
{ 96, 0, 2, 5, { 0 }},
{ 97, 0, 5, 7, { 0 }},
{ 98, 0, 2, 7, { 0 }},
{ 99, 0, 5, 7, { 0 }},
{ 100, 0, 2, 7, { 0 }},
{ 101, 0, 5, 7, { 0 }},
{ 102, 0, 2, 5, { 0 }},
{ 103, 0, 5, 7, { 0 }},
{ 104, 0, 2, 7, { 0 }},
{ 105, 0, 2, 3, { 0 }},
{ 106, 0, 2, 6, { 0 }},
{ 107, 0, 2, 7, { 0 }},
{ 108, 0, 2, 4, { 0 }},
{ 109, 0, 5, 9, { 0 }},
{ 110, 0, 5, 7, { 0 }},
{ 111, 0, 5, 7, { 0 }},
{ 112, 0, 5, 7, { 0 }},
{ 113, 0, 5, 7, { 0 }},
{ 114, 0, 5, 6, { 0 }},
{ 115, 0, 5, 7, { 0 }},
{ 116, 0, 2, 5, { 0 }},
{ 117, 0, 5, 7, { 0 }},
{ 118, 0, 5, 7, { 0 }},
{ 119, 0, 5, 9, { 0 }},
{ 120, 0, 5, 7, { 0 }},
{ 121, 0, 5, 7, { 0 }},
{ 122, 0, 5, 7, { 0 }},
{ 123, 0, 2, 6, { 0 }},
{ 124, 0, 2, 3, { 0 }},
{ 125, 0, 2, 6, { 0 }},
{ 126, 0, 6, 8, { 0 }},
{ 161, 0, 5, 3, { 0 }},
{ 162, 0, 3, 7, { 0 }},
{ 163, 0, 2, 8, { 0 }},
{ 8364, 0, 3, 8, { 0 }},
{ 165, 0, 2, 7, { 0 }},
{ 352, 0, 1, 8, { 0 }},
{ 167, 0, 2, 7, { 0 }},
{ 353, 0, 2, 7, { 0 }},
{ 169, 0, 2, 8, { 0 }},
{ 170, 0, 2, 6, { 0 }},
{ 171, 0, 6, 8, { 0 }},
{ 172, 0, 7, 7, { 0 }},
{ 174, 0, 2, 8, { 0 }},
{ 175, 0, 0, 0, { 0 }},
{ 176, 0, 2, 5, { 0 }},
{ 177, 0, 4, 7, { 0 }},
{ 178, 0, 2, 5, { 0 }},
{ 179, 0, 2, 5, { 0 }},
{ 381, 0, 1, 8, { 0 }},
{ 181, 0, 5, 7, { 0 }},
{ 182, 0, 2, 8, { 0 }},
{ 183, 0, 6, 3, { 0 }},
{ 382, 0, 2, 7, { 0 }},
{ 185, 0, 2, 4, { 0 }},
{ 186, 0, 2, 5, { 0 }},
{ 187, 0, 6, 8, { 0 }},
{ 338, 0, 2, 10, { 0 }},
{ 339, 0, 5, 9, { 0 }},
{ 376, 0, 1, 7, { 0 }},
{ 191, 0, 3, 7, { 0 }},
{ 192, 0, 1, 8, { 0 }},
{ 193, 0, 1, 8, { 0 }},
{ 194, 0, 1, 8, { 0 }},
{ 195, 0, 1, 8, { 0 }},
{ 196, 0, 1, 8, { 0 }},
{ 197, 0, 1, 8, { 0 }},
{ 198, 0, 2, 10, { 0 }},
{ 199, 0, 2, 8, { 0 }},
{ 200, 0, 1, 8, { 0 }},
{ 201, 0, 1, 8, { 0 }},
{ 202, 0, 1, 8, { 0 }},
{ 203, 0, 1, 8, { 0 }},
{ 204, 0, 1, 4, { 0 }},
{ 205, 0, 1, 4, { 0 }},
{ 206, 0, 1, 6, { 0 }},
{ 207, 0, 1, 6, { 0 }},
{ 208, 0, 2, 9, { 0 }},
{ 209, 0, 1, 8, { 0 }},
{ 210, 0, 1, 8, { 0 }},
{ 211, 0, 1, 8, { 0 }},
{ 212, 0, 1, 8, { 0 }},
{ 213, 0, 1, 8, { 0 }},
{ 214, 0, 1, 8, { 0 }},
{ 215, 0, 5, 8, { 0 }},
{ 216, 0, 1, 8, { 0 }},
{ 217, 0, 1, 8, { 0 }},
{ 218, 0, 1, 8, { 0 }},
{ 219, 0, 1, 8, { 0 }},
{ 220, 0, 1, 8, { 0 }},
{ 221, 0, 1, 7, { 0 }},
{ 222, 0, 2, 8, { 0 }},
{ 223, 0, 2, 8, { 0 }},
{ 224, 0, 2, 7, { 0 }},
{ 225, 0, 2, 7, { 0 }},
{ 226, 0, 2, 7, { 0 }},
{ 227, 0, 2, 7, { 0 }},
{ 228, 0, 2, 7, { 0 }},
{ 229, 0, 1, 7, { 0 }},
{ 230, 0, 5, 9, { 0 }},
{ 231, 0, 5, 7, { 0 }},
{ 232, 0, 2, 7, { 0 }},
{ 233, 0, 2, 7, { 0 }},
{ 234, 0, 2, 7, { 0 }},
{ 235, 0, 2, 7, { 0 }},
{ 236, 0, 2, 4, { 0 }},
{ 237, 0, 2, 4, { 0 }},
{ 238, 0, 2, 6, { 0 }},
{ 239, 0, 2, 6, { 0 }},
{ 240, 0, 2, 7, { 0 }},
{ 241, 0, 2, 7, { 0 }},
{ 242, 0, 2, 7, { 0 }},
{ 243, 0, 2, 7, { 0 }},
{ 244, 0, 2, 7, { 0 }},
{ 245, 0, 2, 7, { 0 }},
{ 246, 0, 2, 7, { 0 }},
{ 247, 0, 4, 7, { 0 }},
{ 248, 0, 3, 8, { 0 }},
{ 249, 0, 2, 7, { 0 }},
{ 250, 0, 2, 7, { 0 }},
{ 251, 0, 2, 7, { 0 }},
{ 252, 0, 2, 7, { 0 }},
{ 253, 0, 2, 7, { 0 }},
{ 254, 0, 2, 7, { 0 }},
{ 255, 0, 2, 7, { 0 }},
};
// Style loading function: Sunny
static void GuiLoadStyleSunny(void)
{
// Load style properties provided
// NOTE: Default properties are propagated
for (int i = 0; i < SUNNY_STYLE_PROPS_COUNT; i++)
{
GuiSetStyle(sunnyStyleProps[i].controlId, sunnyStyleProps[i].propertyId, sunnyStyleProps[i].propertyValue);
}
// Custom font loading
// NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function
int sunnyFontDataSize = 0;
unsigned char *data = DecompressData(sunnyFontData, SUNNY_STYLE_FONT_ATLAS_COMP_SIZE, &sunnyFontDataSize);
Image imFont = { data, 512, 256, 1, 2 };
Font font = { 0 };
font.baseSize = 16;
font.glyphCount = 189;
// Load texture from image
font.texture = LoadTextureFromImage(imFont);
UnloadImage(imFont); // Uncompressed image data can be unloaded from memory
// Copy char recs data from global fontRecs
// NOTE: Required to avoid issues if trying to free font
font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle));
memcpy(font.recs, sunnyFontRecs, font.glyphCount*sizeof(Rectangle));
// Copy font char info data from global fontChars
// NOTE: Required to avoid issues if trying to free font
font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo));
memcpy(font.glyphs, sunnyFontGlyphs, font.glyphCount*sizeof(GlyphInfo));
GuiSetFont(font);
// Setup a white rectangle on the font to be used on shapes drawing,
// it makes possible to draw shapes and text (full UI) in a single draw call
Rectangle fontWhiteRec = { 510, 254, 1, 1 };
SetShapesTexture(font.texture, fontWhiteRec);
//-----------------------------------------------------------------
// TODO: Custom user style setup: Set specific properties here (if required)
// i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT
}

View File

@ -0,0 +1,569 @@
//////////////////////////////////////////////////////////////////////////////////
// //
// StyleAsCode exporter v2.0 - Style data exported as a values array //
// //
// USAGE: On init call: GuiLoadStyleTerminal(); //
// //
// more info and bugs-report: github.com/raysan5/raygui //
// feedback and support: ray[at]raylibtech.com //
// //
// Copyright (c) 2020-2025 raylib technologies (@raylibtech) //
// //
//////////////////////////////////////////////////////////////////////////////////
#define TERMINAL_STYLE_PROPS_COUNT 17
// Custom style name: Terminal
static const GuiStyleProp terminalStyleProps[TERMINAL_STYLE_PROPS_COUNT] = {
{ 0, 0, (int)0x1c8d00ff }, // DEFAULT_BORDER_COLOR_NORMAL
{ 0, 1, (int)0x161313ff }, // DEFAULT_BASE_COLOR_NORMAL
{ 0, 2, (int)0x38f620ff }, // DEFAULT_TEXT_COLOR_NORMAL
{ 0, 3, (int)0xc3fbc6ff }, // DEFAULT_BORDER_COLOR_FOCUSED
{ 0, 4, (int)0x43bf2eff }, // DEFAULT_BASE_COLOR_FOCUSED
{ 0, 5, (int)0xdcfadcff }, // DEFAULT_TEXT_COLOR_FOCUSED
{ 0, 6, (int)0x1f5b19ff }, // DEFAULT_BORDER_COLOR_PRESSED
{ 0, 7, (int)0x43ff28ff }, // DEFAULT_BASE_COLOR_PRESSED
{ 0, 8, (int)0x1e6f15ff }, // DEFAULT_TEXT_COLOR_PRESSED
{ 0, 9, (int)0x223b22ff }, // DEFAULT_BORDER_COLOR_DISABLED
{ 0, 10, (int)0x182c18ff }, // DEFAULT_BASE_COLOR_DISABLED
{ 0, 11, (int)0x244125ff }, // DEFAULT_TEXT_COLOR_DISABLED
{ 0, 16, (int)0x00000010 }, // DEFAULT_TEXT_SIZE
{ 0, 17, (int)0x00000000 }, // DEFAULT_TEXT_SPACING
{ 0, 18, (int)0xe6fce3ff }, // DEFAULT_LINE_COLOR
{ 0, 19, (int)0x0c1505ff }, // DEFAULT_BACKGROUND_COLOR
{ 0, 20, (int)0x00000008 }, // DEFAULT_TEXT_LINE_SPACING
};
// WARNING: This style uses a custom font: "Mecha.ttf" (size: 16, spacing: 0)
#define TERMINAL_STYLE_FONT_ATLAS_COMP_SIZE 1860
// Font atlas image pixels data: DEFLATE compressed
static unsigned char terminalFontData[TERMINAL_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed,
0xdd, 0x41, 0x92, 0xa4, 0x36, 0x10, 0x05, 0x50, 0xee, 0x7f, 0xe9, 0xf4, 0x62, 0x62, 0x16, 0x76, 0xb8, 0x1b, 0x94, 0x4a,
0x89, 0x04, 0x9e, 0x5f, 0x78, 0xd3, 0xd5, 0x53, 0x4d, 0x01, 0xbf, 0x24, 0x84, 0x94, 0xc4, 0x01, 0x00, 0x00, 0x00, 0x7c,
0x5e, 0xfc, 0xef, 0x4f, 0xe2, 0xc7, 0xdf, 0x8c, 0xcb, 0xef, 0xf3, 0xe7, 0xa7, 0xf1, 0xe3, 0x5f, 0xf9, 0xfb, 0xdf, 0x95,
0x77, 0xba, 0xfe, 0x5b, 0x31, 0xb4, 0x75, 0x73, 0x5b, 0x95, 0x7b, 0x9f, 0xd1, 0xdf, 0xfe, 0x7d, 0x7b, 0xaa, 0xde, 0xad,
0xf6, 0x95, 0xb1, 0xb3, 0x23, 0xbf, 0xe7, 0xae, 0x6e, 0x61, 0x6c, 0xdf, 0x2b, 0xc7, 0xa6, 0x7d, 0x1c, 0x0d, 0xf2, 0x7f,
0x7e, 0xcc, 0x46, 0xf2, 0x14, 0xe9, 0xf4, 0x8e, 0x7f, 0x3b, 0xad, 0xfc, 0x0e, 0x1d, 0xdd, 0xc6, 0xdc, 0x3e, 0x89, 0x92,
0xf7, 0x9f, 0xf9, 0x3b, 0x51, 0xb6, 0xd7, 0x72, 0xff, 0x26, 0x86, 0xdb, 0x88, 0xf9, 0x4f, 0x78, 0xbe, 0x8f, 0x63, 0xd1,
0x71, 0xef, 0x99, 0xff, 0xfc, 0x51, 0xcb, 0x9f, 0x29, 0x57, 0xb7, 0x3c, 0xd7, 0xa6, 0xaf, 0x3a, 0x27, 0xe5, 0xff, 0xec,
0x9b, 0xfa, 0xe7, 0x16, 0xb4, 0xa2, 0xdd, 0x90, 0xff, 0x5c, 0x06, 0x62, 0x22, 0x47, 0xbb, 0xf2, 0x5f, 0xdb, 0xd6, 0xc8,
0xff, 0x33, 0xda, 0xff, 0xb3, 0x6d, 0xff, 0xf7, 0x79, 0x2b, 0xff, 0xd9, 0xa3, 0x90, 0x6d, 0xff, 0x63, 0x7a, 0xfb, 0x3b,
0xe7, 0x7f, 0x74, 0xdc, 0x43, 0xfe, 0xcf, 0xaf, 0xe8, 0x73, 0xbf, 0x7d, 0xb6, 0x27, 0xe4, 0x7f, 0x5d, 0xfe, 0x7f, 0xeb,
0xb3, 0x9d, 0xf5, 0xf4, 0x76, 0xe4, 0xff, 0xd8, 0x9e, 0xff, 0xb3, 0xeb, 0xa8, 0xeb, 0xfb, 0x62, 0xc7, 0x08, 0xd4, 0x91,
0x1c, 0xdb, 0x89, 0xc1, 0x0c, 0xdf, 0xd3, 0x0b, 0x3b, 0xcb, 0x7f, 0x66, 0x4f, 0x66, 0xf2, 0x7f, 0x76, 0x5c, 0x8e, 0x5f,
0x7a, 0x30, 0xab, 0xf6, 0x7e, 0x45, 0xfe, 0x67, 0x46, 0xe4, 0x9e, 0x9d, 0xff, 0x38, 0xd9, 0x57, 0x31, 0x31, 0xbe, 0xb9,
0xb3, 0xcf, 0x30, 0xd3, 0x4f, 0xeb, 0x7b, 0x1c, 0xde, 0xd3, 0xff, 0x8f, 0xd6, 0xed, 0xbf, 0xfc, 0xcf, 0x5d, 0xff, 0xbf,
0x2d, 0xff, 0xb1, 0xfd, 0x58, 0xc5, 0x85, 0x33, 0x56, 0xfe, 0xe7, 0xf6, 0xf0, 0x79, 0x8f, 0x23, 0x16, 0x5d, 0xbf, 0x74,
0xcd, 0x7f, 0xee, 0xd3, 0x7d, 0xb1, 0xfd, 0x8f, 0x1b, 0x8f, 0x8f, 0xfc, 0xaf, 0xd8, 0x9b, 0x23, 0x77, 0xd8, 0x66, 0xe7,
0x2f, 0xc8, 0xbf, 0xfc, 0xcb, 0x7f, 0xef, 0xfe, 0x7f, 0x0c, 0x8e, 0xdc, 0xc6, 0xe3, 0xc7, 0xff, 0xe2, 0x52, 0x6f, 0x69,
0x7e, 0xb6, 0xe0, 0x78, 0x9f, 0x2b, 0xf7, 0x6e, 0xf9, 0xd9, 0x75, 0x4f, 0xb9, 0xfe, 0xdf, 0x39, 0x93, 0xf2, 0x28, 0x99,
0x87, 0xb2, 0x7e, 0xfe, 0xdf, 0x33, 0xe7, 0x28, 0x77, 0xcf, 0x3f, 0xb0, 0x7a, 0x95, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x65, 0x0d, 0x4d, 0x94, 0xad, 0x7b, 0x8c, 0x16, 0x95, 0xe7, 0xf7, 0xd4, 0x58,
0xbf, 0xb6, 0x87, 0xaa, 0xde, 0x71, 0xec, 0x59, 0x02, 0x63, 0xeb, 0x30, 0x73, 0x2b, 0xff, 0x56, 0xaf, 0x6e, 0x9b, 0x59,
0xdd, 0x58, 0xb3, 0x65, 0x15, 0xb5, 0x2d, 0xee, 0x49, 0xc7, 0xca, 0x75, 0xe2, 0x71, 0x69, 0x75, 0x70, 0x6d, 0x92, 0x56,
0xaf, 0xd8, 0xce, 0xac, 0x7d, 0xdf, 0x99, 0xff, 0xb1, 0x33, 0x70, 0xfc, 0x73, 0x46, 0x62, 0x35, 0x55, 0x6d, 0x0d, 0x98,
0x63, 0xe9, 0xb9, 0x19, 0x8b, 0xd6, 0x90, 0x8d, 0xef, 0x83, 0x3d, 0xe9, 0x90, 0xff, 0x2f, 0xe7, 0x3f, 0x57, 0x23, 0x7b,
0xc7, 0xb3, 0x50, 0xe4, 0x5f, 0xfe, 0xe5, 0xff, 0xad, 0xf9, 0x8f, 0xe2, 0xfe, 0x77, 0xbe, 0x5a, 0x47, 0xcd, 0x95, 0x55,
0x6d, 0x4a, 0xe4, 0x5f, 0xfe, 0x7f, 0xef, 0x6d, 0xc7, 0xc5, 0x56, 0x6c, 0xa4, 0xc5, 0xdb, 0x59, 0xb3, 0x64, 0x5f, 0x15,
0xad, 0xd1, 0x6f, 0x93, 0x28, 0x4c, 0xf0, 0x57, 0xf2, 0x9f, 0xaf, 0x7b, 0xbe, 0x67, 0xdc, 0x2b, 0xb3, 0xe5, 0x99, 0xda,
0x57, 0xf5, 0xf9, 0x3f, 0x7b, 0x1e, 0x42, 0xe6, 0xfb, 0xe9, 0x5b, 0xf9, 0x1f, 0xfd, 0x6c, 0xf2, 0x7f, 0x6c, 0x7e, 0xb6,
0xcc, 0xfd, 0x35, 0x16, 0x23, 0xd9, 0xd2, 0x57, 0x6d, 0x75, 0xa4, 0x46, 0xdb, 0xaa, 0x7e, 0x9e, 0xab, 0xd2, 0xf8, 0xde,
0xfc, 0x47, 0xc1, 0x7d, 0xae, 0xb9, 0x56, 0x52, 0xfe, 0xe5, 0xff, 0x98, 0xac, 0xc0, 0xdb, 0x3d, 0xff, 0x2b, 0xae, 0xbf,
0x2b, 0x9f, 0xe6, 0xfa, 0xcc, 0xf6, 0xff, 0x59, 0xf7, 0xff, 0xbe, 0x92, 0xff, 0xb3, 0x63, 0x79, 0x77, 0xfe, 0x3b, 0xd5,
0x4c, 0xcd, 0x8c, 0x30, 0xce, 0xfc, 0x9b, 0x8e, 0xf9, 0xdf, 0x35, 0x9f, 0x47, 0xfe, 0x77, 0xe5, 0xff, 0xe7, 0xa7, 0x8d,
0xcb, 0x7f, 0xaf, 0xfc, 0xaf, 0xeb, 0xff, 0x3f, 0x3b, 0xff, 0xeb, 0x7a, 0x5f, 0xab, 0xfb, 0x73, 0xb5, 0x5b, 0x9e, 0x99,
0x01, 0xf7, 0xdb, 0xfc, 0xbb, 0x48, 0x57, 0x6d, 0xaf, 0x98, 0x87, 0x37, 0x33, 0x3b, 0x68, 0xf7, 0x95, 0x41, 0xf5, 0xbf,
0xa9, 0x1f, 0xb3, 0xe8, 0x9b, 0x7f, 0x78, 0x46, 0xfe, 0xbf, 0xb0, 0xaf, 0x71, 0x3c, 0xee, 0x69, 0x59, 0x57, 0xfe, 0x3e,
0xce, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xd3, 0x2a, 0xac, 0xaa, 0xba, 0x8d, 0x3b,
0xab, 0x65, 0xe4, 0xd6, 0xf9, 0xc5, 0xe5, 0xba, 0x2e, 0x99, 0x55, 0xe4, 0x23, 0x6b, 0xf9, 0x6a, 0xd6, 0x34, 0xe6, 0xcf,
0x81, 0x48, 0xad, 0x96, 0x3b, 0x3f, 0x53, 0x32, 0x35, 0xec, 0xd7, 0xcd, 0xb6, 0xff, 0xbd, 0x7e, 0x43, 0xbe, 0x92, 0xc8,
0xaa, 0xf5, 0x05, 0x75, 0xf5, 0x9f, 0x8e, 0x82, 0xd5, 0x8a, 0xd9, 0x35, 0xf4, 0xf7, 0xe6, 0x7f, 0x74, 0xf5, 0xdb, 0xf5,
0x9f, 0x55, 0xd4, 0x5b, 0x89, 0xc4, 0xca, 0xbc, 0xca, 0xfc, 0x57, 0x9c, 0xe3, 0x51, 0xf6, 0xbe, 0xb1, 0xb8, 0x4e, 0xc1,
0x95, 0x56, 0xe2, 0xd9, 0x6b, 0xa2, 0xe2, 0xd5, 0xf9, 0xaf, 0xad, 0x96, 0x5b, 0xff, 0x9d, 0x90, 0xaf, 0x4f, 0x70, 0x5f,
0xfe, 0xff, 0x6e, 0x57, 0x75, 0xfe, 0x33, 0xef, 0x5b, 0x53, 0xd9, 0x6a, 0x2e, 0xff, 0x3d, 0x56, 0xf6, 0xc5, 0xf2, 0x9e,
0x47, 0x26, 0xff, 0x63, 0xfd, 0xb6, 0x15, 0xf9, 0xcf, 0x57, 0xe6, 0x39, 0x36, 0x65, 0xfd, 0x28, 0x4e, 0xf9, 0xfa, 0xfc,
0xd7, 0x9f, 0x69, 0xf1, 0x9f, 0xff, 0xbb, 0xac, 0xb6, 0x7d, 0x4b, 0xfe, 0x73, 0xd5, 0x69, 0x66, 0xf3, 0x9f, 0xbd, 0xe2,
0xbd, 0xbb, 0xfd, 0x5f, 0x73, 0x4d, 0xb0, 0x3e, 0xff, 0x91, 0xaa, 0x0c, 0xde, 0x27, 0xff, 0xb1, 0x20, 0xb9, 0xf2, 0x9f,
0x6d, 0x03, 0xdf, 0x90, 0xff, 0xea, 0xe7, 0x7c, 0x74, 0xc8, 0x7f, 0x6e, 0xc4, 0x2b, 0x4a, 0x73, 0x1a, 0xed, 0xdb, 0xff,
0x63, 0xdb, 0xf8, 0x5f, 0xff, 0xfc, 0x47, 0x49, 0xbf, 0xf0, 0xce, 0xfc, 0xd7, 0x57, 0xcb, 0xcd, 0x56, 0x0d, 0xbc, 0x3e,
0xd6, 0xd7, 0xa7, 0xfd, 0xaf, 0xbf, 0x1e, 0x5e, 0xd1, 0xfe, 0x1f, 0x0b, 0xee, 0x52, 0xac, 0xbf, 0xaa, 0xee, 0x9f, 0xff,
0xaa, 0xeb, 0xc2, 0xcc, 0x73, 0x93, 0x46, 0xef, 0xff, 0xc5, 0xe9, 0x59, 0x3c, 0x7a, 0xe7, 0x68, 0x3c, 0x4f, 0x31, 0xf8,
0xf4, 0xa2, 0xfe, 0xd7, 0xff, 0x95, 0xed, 0xff, 0x9a, 0x51, 0xef, 0xae, 0xa3, 0xe9, 0xd7, 0x9e, 0x2f, 0xde, 0x63, 0x8b,
0xf3, 0x4f, 0xdc, 0x8a, 0xed, 0x57, 0x56, 0x7d, 0x8e, 0xf1, 0xfc, 0x67, 0x5f, 0x93, 0xff, 0x8a, 0x8a, 0xd3, 0xf5, 0xed,
0xe1, 0xf7, 0xe6, 0xbc, 0xcc, 0xdc, 0x75, 0xef, 0xb1, 0xb5, 0xd5, 0xe7, 0xc5, 0x3b, 0xf2, 0x5f, 0xf7, 0xd9, 0x63, 0xc9,
0xb7, 0x4a, 0xa6, 0x96, 0x77, 0x2c, 0x9f, 0x0f, 0x23, 0xff, 0xcf, 0xcd, 0x7f, 0xdc, 0x70, 0xcf, 0xf0, 0x58, 0x3c, 0x1e,
0xdd, 0x61, 0x0f, 0xef, 0xcd, 0x3f, 0xfd, 0xce, 0x88, 0xee, 0xf9, 0x5f, 0x3f, 0x2f, 0xf4, 0xcb, 0xed, 0x81, 0x2a, 0xf9,
0x3c, 0xf1, 0x5a, 0x56, 0xfe, 0x73, 0xfd, 0x96, 0xd9, 0xf9, 0xff, 0x20, 0xff, 0xdf, 0xdd, 0xeb, 0xd0, 0x7f, 0x76, 0x03,
0xf2, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xfb, 0x67, 0xbb, 0x45, 0x6a, 0x7d, 0x5b, 0x0c, 0x56,
0x32, 0x88, 0x74, 0xa5, 0xf8, 0x6c, 0x7d, 0x8c, 0x18, 0x5c, 0xf7, 0x35, 0x5f, 0x37, 0xf8, 0xfa, 0xf3, 0x15, 0x66, 0xd6,
0x0f, 0xae, 0x3f, 0x8e, 0x75, 0x15, 0xd6, 0xeb, 0x8f, 0x52, 0xe6, 0xef, 0x47, 0x79, 0xed, 0xb5, 0xfe, 0x99, 0x99, 0xdf,
0xcf, 0x99, 0x95, 0xbe, 0xb5, 0x67, 0xd4, 0xb5, 0x63, 0x5b, 0xb7, 0xba, 0x33, 0x26, 0x92, 0x3e, 0x3e, 0x4f, 0xfb, 0xf7,
0xaa, 0x9f, 0x5d, 0x8f, 0x63, 0x2e, 0x4b, 0x51, 0xba, 0x06, 0x37, 0xf7, 0xd7, 0x9f, 0xb6, 0xaf, 0xaf, 0x57, 0x01, 0xd8,
0xdd, 0x5f, 0xc8, 0x3f, 0x35, 0x28, 0x6e, 0x9f, 0x8b, 0xbf, 0xae, 0xa2, 0x4e, 0x5d, 0xad, 0xe2, 0xbb, 0x8f, 0xe3, 0x71,
0xfa, 0x0c, 0x93, 0x68, 0xb8, 0xbe, 0xe5, 0xac, 0xff, 0x18, 0x2d, 0xf7, 0x75, 0x5c, 0xee, 0x23, 0xe6, 0xf3, 0x9f, 0x7f,
0x3e, 0x53, 0x14, 0x57, 0xe6, 0xcd, 0x57, 0xc7, 0xac, 0xde, 0xfa, 0x7c, 0xfb, 0x9f, 0xb9, 0x52, 0x88, 0xe5, 0x9f, 0xaa,
0xf6, 0x3b, 0x39, 0x4e, 0x6a, 0xb9, 0xae, 0x3e, 0x2b, 0x56, 0xbc, 0x12, 0x1b, 0xce, 0xad, 0xdc, 0xf5, 0xde, 0xb5, 0x33,
0x64, 0x26, 0xff, 0x7d, 0x8f, 0xcd, 0xd1, 0xe6, 0x95, 0xdd, 0xf9, 0x7f, 0xee, 0x2b, 0xef, 0xc9, 0x7f, 0x9f, 0xb3, 0xef,
0xb7, 0xcf, 0x33, 0xfb, 0xac, 0xc2, 0x0e, 0x47, 0xe0, 0xac, 0x4e, 0xec, 0x5b, 0xf3, 0x1f, 0x3f, 0x8e, 0x0c, 0xf6, 0xff,
0x4e, 0xfe, 0xb9, 0x5f, 0xf0, 0xb4, 0xfc, 0x57, 0xb6, 0xcb, 0x15, 0x6d, 0xf9, 0xde, 0x6b, 0x66, 0xed, 0xbf, 0xf6, 0xff,
0xdb, 0xf9, 0xbf, 0xff, 0x2a, 0x6c, 0x6f, 0x66, 0xfa, 0xed, 0xb3, 0x3e, 0xf9, 0x1f, 0x19, 0xf3, 0x92, 0xff, 0xb7, 0xe7,
0xff, 0x09, 0xdf, 0x4d, 0xb3, 0xf7, 0xff, 0xde, 0x31, 0xfe, 0x57, 0xf5, 0x8a, 0xf6, 0x7f, 0x6e, 0x8c, 0xfd, 0xee, 0x6d,
0xcb, 0x1f, 0xf3, 0xb7, 0x1c, 0x85, 0xd1, 0x3e, 0x80, 0xfe, 0xbf, 0xfc, 0xbf, 0x27, 0xff, 0x47, 0x7a, 0xf6, 0xc1, 0xb3,
0xae, 0x33, 0x46, 0x8e, 0xc7, 0x73, 0xf2, 0x5f, 0x79, 0xc7, 0xee, 0x29, 0xe3, 0x7f, 0x4f, 0xfb, 0x66, 0x78, 0x63, 0xfe,
0xef, 0xbd, 0xd7, 0xda, 0x63, 0xe6, 0xef, 0x33, 0xfb, 0x32, 0x4f, 0xce, 0xff, 0xb3, 0xfb, 0x64, 0xc7, 0x6d, 0x57, 0x85,
0x51, 0xb8, 0xa7, 0x79, 0x46, 0xfe, 0x63, 0x53, 0xfe, 0x47, 0xc6, 0x06, 0xde, 0x9d, 0xff, 0xf1, 0xd6, 0x2a, 0x6e, 0x1f,
0x63, 0x96, 0xff, 0xbb, 0xf3, 0xbf, 0x7f, 0xeb, 0x77, 0xf5, 0xc4, 0x62, 0x49, 0xd2, 0xc7, 0x8f, 0xc9, 0x13, 0xfb, 0xa4,
0x3b, 0xb7, 0x4d, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xef, 0xcc, 0x00, 0x1e, 0x7b, 0xb5,
0x43, 0x05, 0xfd, 0x23, 0x5d, 0x6d, 0xbd, 0xee, 0xf3, 0x1e, 0x89, 0xaa, 0xee, 0x99, 0x6d, 0xe8, 0x5c, 0x41, 0xdf, 0xac,
0xdb, 0xb7, 0x7e, 0x03, 0xf4, 0xae, 0xa0, 0x7f, 0x5e, 0xe5, 0x63, 0xfd, 0xe7, 0xad, 0x9c, 0x3f, 0xdf, 0xbb, 0x82, 0x7e,
0xbf, 0xb5, 0xab, 0xf4, 0xfb, 0x26, 0xd9, 0x59, 0x41, 0x7f, 0xbc, 0xbf, 0x71, 0x6c, 0xdc, 0xae, 0x6c, 0x35, 0x83, 0xae,
0x15, 0xf4, 0xbb, 0xaf, 0x05, 0xe3, 0xfe, 0xb5, 0x59, 0x63, 0xcf, 0xb4, 0xa8, 0xaa, 0xa0, 0xf1, 0xb4, 0x0a, 0xfa, 0x67,
0x19, 0x7b, 0x52, 0x9d, 0x6c, 0xf9, 0xb7, 0xfe, 0xf7, 0xbe, 0xfc, 0xf7, 0xad, 0x93, 0x91, 0xad, 0x52, 0xd3, 0xbb, 0x82,
0xa6, 0xfc, 0xcb, 0xbf, 0xfc, 0xaf, 0xaa, 0x91, 0x20, 0xff, 0x3c, 0x3d, 0xff, 0x3b, 0x2b, 0xe8, 0xa8, 0xa0, 0xb9, 0xbb,
0x22, 0xd0, 0x21, 0xff, 0xae, 0xff, 0x1f, 0xf1, 0x04, 0x3d, 0xf9, 0x5f, 0xf3, 0x8a, 0xfc, 0x7f, 0xfd, 0xde, 0x9f, 0x0a,
0xda, 0x2b, 0xf3, 0x1f, 0x4d, 0xc7, 0xff, 0xf6, 0xdf, 0xf1, 0xe1, 0x89, 0xf9, 0xd7, 0xff, 0xcf, 0xe7, 0xe2, 0xfe, 0x0a,
0x9a, 0xf9, 0x34, 0xcb, 0xbf, 0xfe, 0x7f, 0xc5, 0xfc, 0x9f, 0x9a, 0xb6, 0x47, 0x05, 0xcd, 0xb9, 0x6d, 0x93, 0x7f, 0xd0,
0x2b, 0xd4, 0xff, 0x07, 0xbd, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xf9, 0xf3, 0x9f, 0xfd, 0x00, 0xf2, 0x0f, 0x7c, 0x2e, 0xff, 0xff, 0x00 };
// Font glyphs rectangles data (on atlas)
static const Rectangle terminalFontRecs[189] = {
{ 4, 4, 4 , 16 },
{ 16, 4, 1 , 11 },
{ 25, 4, 3 , 3 },
{ 36, 4, 6 , 11 },
{ 50, 4, 5 , 11 },
{ 63, 4, 5 , 11 },
{ 76, 4, 5 , 11 },
{ 89, 4, 1 , 2 },
{ 98, 4, 2 , 13 },
{ 108, 4, 2 , 13 },
{ 118, 4, 3 , 3 },
{ 129, 4, 5 , 5 },
{ 142, 4, 1 , 3 },
{ 151, 4, 5 , 1 },
{ 164, 4, 1 , 1 },
{ 173, 4, 6 , 12 },
{ 187, 4, 5 , 11 },
{ 200, 4, 2 , 11 },
{ 210, 4, 5 , 11 },
{ 223, 4, 5 , 11 },
{ 236, 4, 5 , 11 },
{ 249, 4, 5 , 11 },
{ 262, 4, 5 , 11 },
{ 275, 4, 5 , 11 },
{ 288, 4, 5 , 11 },
{ 301, 4, 5 , 11 },
{ 314, 4, 1 , 8 },
{ 323, 4, 1 , 10 },
{ 332, 4, 4 , 5 },
{ 344, 4, 5 , 3 },
{ 357, 4, 4 , 5 },
{ 369, 4, 5 , 11 },
{ 382, 4, 11 , 11 },
{ 401, 4, 5 , 11 },
{ 414, 4, 5 , 11 },
{ 427, 4, 5 , 11 },
{ 440, 4, 5 , 11 },
{ 453, 4, 5 , 11 },
{ 466, 4, 5 , 11 },
{ 479, 4, 5 , 11 },
{ 492, 4, 5 , 11 },
{ 4, 28, 1 , 11 },
{ 13, 28, 5 , 11 },
{ 26, 28, 5 , 11 },
{ 39, 28, 5 , 11 },
{ 52, 28, 7 , 11 },
{ 67, 28, 5 , 11 },
{ 80, 28, 5 , 11 },
{ 93, 28, 5 , 11 },
{ 106, 28, 5 , 13 },
{ 119, 28, 5 , 11 },
{ 132, 28, 5 , 11 },
{ 145, 28, 5 , 11 },
{ 158, 28, 5 , 11 },
{ 171, 28, 5 , 11 },
{ 184, 28, 7 , 11 },
{ 199, 28, 5 , 11 },
{ 212, 28, 5 , 11 },
{ 225, 28, 5 , 11 },
{ 238, 28, 2 , 13 },
{ 248, 28, 6 , 12 },
{ 262, 28, 2 , 13 },
{ 272, 28, 5 , 4 },
{ 285, 28, 5 , 1 },
{ 298, 28, 2 , 2 },
{ 308, 28, 5 , 8 },
{ 321, 28, 5 , 11 },
{ 334, 28, 5 , 8 },
{ 347, 28, 5 , 11 },
{ 360, 28, 5 , 8 },
{ 373, 28, 4 , 11 },
{ 385, 28, 5 , 10 },
{ 398, 28, 5 , 11 },
{ 411, 28, 1 , 11 },
{ 420, 28, 1 , 13 },
{ 429, 28, 5 , 11 },
{ 442, 28, 1 , 11 },
{ 451, 28, 7 , 8 },
{ 466, 28, 5 , 8 },
{ 479, 28, 5 , 8 },
{ 492, 28, 5 , 10 },
{ 4, 52, 5 , 10 },
{ 17, 52, 4 , 8 },
{ 29, 52, 5 , 8 },
{ 42, 52, 3 , 11 },
{ 53, 52, 5 , 8 },
{ 66, 52, 5 , 8 },
{ 79, 52, 7 , 8 },
{ 94, 52, 5 , 8 },
{ 107, 52, 5 , 10 },
{ 120, 52, 5 , 8 },
{ 133, 52, 3 , 13 },
{ 144, 52, 1 , 15 },
{ 153, 52, 3 , 13 },
{ 164, 52, 5 , 3 },
{ 177, 52, 1 , 11 },
{ 186, 52, 5 , 11 },
{ 199, 52, 5 , 10 },
{ 212, 52, 5 , 10 },
{ 225, 52, 5 , 10 },
{ 238, 52, 0 , 0 },
{ 246, 52, 0 , 0 },
{ 254, 52, 0 , 0 },
{ 262, 52, 7 , 8 },
{ 277, 52, 0 , 0 },
{ 285, 52, 0 , 0 },
{ 293, 52, 5 , 3 },
{ 306, 52, 7 , 8 },
{ 321, 52, 5 , 1 },
{ 334, 52, 3 , 3 },
{ 345, 52, 5 , 7 },
{ 358, 52, 0 , 0 },
{ 366, 52, 0 , 0 },
{ 374, 52, 0 , 0 },
{ 382, 52, 5 , 10 },
{ 395, 52, 7 , 11 },
{ 410, 52, 1 , 1 },
{ 419, 52, 0 , 0 },
{ 427, 52, 0 , 0 },
{ 435, 52, 0 , 0 },
{ 443, 52, 0 , 0 },
{ 451, 52, 0 , 0 },
{ 459, 52, 0 , 0 },
{ 467, 52, 5 , 13 },
{ 480, 52, 5 , 11 },
{ 493, 52, 5 , 14 },
{ 4, 76, 5 , 14 },
{ 17, 76, 5 , 14 },
{ 30, 76, 5 , 14 },
{ 43, 76, 5 , 13 },
{ 56, 76, 5 , 13 },
{ 69, 76, 9 , 11 },
{ 86, 76, 5 , 13 },
{ 99, 76, 5 , 14 },
{ 112, 76, 5 , 14 },
{ 125, 76, 5 , 14 },
{ 138, 76, 5 , 13 },
{ 151, 76, 2 , 14 },
{ 161, 76, 2 , 14 },
{ 171, 76, 3 , 14 },
{ 182, 76, 3 , 13 },
{ 193, 76, 5 , 11 },
{ 206, 76, 5 , 14 },
{ 219, 76, 5 , 14 },
{ 232, 76, 5 , 14 },
{ 245, 76, 5 , 14 },
{ 258, 76, 5 , 14 },
{ 271, 76, 5 , 13 },
{ 284, 76, 5 , 5 },
{ 297, 76, 5 , 13 },
{ 310, 76, 5 , 14 },
{ 323, 76, 5 , 14 },
{ 336, 76, 5 , 14 },
{ 349, 76, 5 , 13 },
{ 362, 76, 5 , 14 },
{ 375, 76, 5 , 11 },
{ 388, 76, 5 , 11 },
{ 401, 76, 5 , 11 },
{ 414, 76, 5 , 11 },
{ 427, 76, 5 , 11 },
{ 440, 76, 5 , 11 },
{ 453, 76, 5 , 10 },
{ 466, 76, 5 , 10 },
{ 479, 76, 9 , 8 },
{ 496, 76, 5 , 10 },
{ 4, 100, 5 , 11 },
{ 17, 100, 5 , 11 },
{ 30, 100, 5 , 11 },
{ 43, 100, 5 , 10 },
{ 56, 100, 2 , 11 },
{ 66, 100, 2 , 11 },
{ 76, 100, 3 , 11 },
{ 87, 100, 3 , 10 },
{ 98, 100, 5 , 11 },
{ 111, 100, 5 , 11 },
{ 124, 100, 5 , 11 },
{ 137, 100, 5 , 11 },
{ 150, 100, 5 , 11 },
{ 163, 100, 5 , 11 },
{ 176, 100, 5 , 10 },
{ 189, 100, 5 , 5 },
{ 202, 100, 5 , 10 },
{ 215, 100, 5 , 11 },
{ 228, 100, 5 , 11 },
{ 241, 100, 5 , 11 },
{ 254, 100, 5 , 10 },
{ 267, 100, 5 , 13 },
{ 280, 100, 4 , 8 },
{ 292, 100, 5 , 12 },
};
// Font glyphs info data
// NOTE: No glyphs.image data provided
static const GlyphInfo terminalFontGlyphs[189] = {
{ 32, 0, 0, 4, { 0 }},
{ 33, 1, 3, 3, { 0 }},
{ 34, 1, 3, 5, { 0 }},
{ 35, 1, 3, 8, { 0 }},
{ 36, 1, 3, 7, { 0 }},
{ 37, 1, 3, 7, { 0 }},
{ 38, 1, 3, 7, { 0 }},
{ 39, 1, 3, 3, { 0 }},
{ 40, 1, 2, 4, { 0 }},
{ 41, 1, 2, 4, { 0 }},
{ 42, 1, 3, 5, { 0 }},
{ 43, 1, 7, 7, { 0 }},
{ 44, 1, 13, 3, { 0 }},
{ 45, 1, 9, 7, { 0 }},
{ 46, 1, 13, 3, { 0 }},
{ 47, 1, 2, 8, { 0 }},
{ 48, 1, 3, 7, { 0 }},
{ 49, 1, 3, 4, { 0 }},
{ 50, 1, 3, 7, { 0 }},
{ 51, 1, 3, 7, { 0 }},
{ 52, 1, 3, 7, { 0 }},
{ 53, 1, 3, 7, { 0 }},
{ 54, 1, 3, 7, { 0 }},
{ 55, 1, 3, 7, { 0 }},
{ 56, 1, 3, 7, { 0 }},
{ 57, 1, 3, 7, { 0 }},
{ 58, 1, 6, 3, { 0 }},
{ 59, 1, 6, 3, { 0 }},
{ 60, 1, 7, 6, { 0 }},
{ 61, 1, 8, 7, { 0 }},
{ 62, 1, 7, 6, { 0 }},
{ 63, 1, 3, 7, { 0 }},
{ 64, 2, 3, 15, { 0 }},
{ 65, 1, 3, 7, { 0 }},
{ 66, 1, 3, 7, { 0 }},
{ 67, 1, 3, 7, { 0 }},
{ 68, 1, 3, 7, { 0 }},
{ 69, 1, 3, 7, { 0 }},
{ 70, 1, 3, 7, { 0 }},
{ 71, 1, 3, 7, { 0 }},
{ 72, 1, 3, 7, { 0 }},
{ 73, 1, 3, 3, { 0 }},
{ 74, 1, 3, 7, { 0 }},
{ 75, 1, 3, 7, { 0 }},
{ 76, 1, 3, 7, { 0 }},
{ 77, 1, 3, 9, { 0 }},
{ 78, 1, 3, 7, { 0 }},
{ 79, 1, 3, 7, { 0 }},
{ 80, 1, 3, 7, { 0 }},
{ 81, 1, 3, 7, { 0 }},
{ 82, 1, 3, 7, { 0 }},
{ 83, 1, 3, 7, { 0 }},
{ 84, 1, 3, 7, { 0 }},
{ 85, 1, 3, 7, { 0 }},
{ 86, 1, 3, 7, { 0 }},
{ 87, 1, 3, 9, { 0 }},
{ 88, 1, 3, 7, { 0 }},
{ 89, 1, 3, 7, { 0 }},
{ 90, 1, 3, 7, { 0 }},
{ 91, 1, 2, 4, { 0 }},
{ 92, 1, 2, 8, { 0 }},
{ 93, 1, 2, 4, { 0 }},
{ 94, 1, 3, 7, { 0 }},
{ 95, 1, 15, 7, { 0 }},
{ 96, 1, 0, 4, { 0 }},
{ 97, 1, 6, 7, { 0 }},
{ 98, 1, 3, 7, { 0 }},
{ 99, 1, 6, 7, { 0 }},
{ 100, 1, 3, 7, { 0 }},
{ 101, 1, 6, 7, { 0 }},
{ 102, 1, 3, 6, { 0 }},
{ 103, 1, 6, 7, { 0 }},
{ 104, 1, 3, 7, { 0 }},
{ 105, 1, 3, 3, { 0 }},
{ 106, 1, 3, 3, { 0 }},
{ 107, 1, 3, 7, { 0 }},
{ 108, 1, 3, 3, { 0 }},
{ 109, 1, 6, 9, { 0 }},
{ 110, 1, 6, 7, { 0 }},
{ 111, 1, 6, 7, { 0 }},
{ 112, 1, 6, 7, { 0 }},
{ 113, 1, 6, 7, { 0 }},
{ 114, 1, 6, 6, { 0 }},
{ 115, 1, 6, 7, { 0 }},
{ 116, 1, 3, 5, { 0 }},
{ 117, 1, 6, 7, { 0 }},
{ 118, 1, 6, 7, { 0 }},
{ 119, 1, 6, 9, { 0 }},
{ 120, 1, 6, 7, { 0 }},
{ 121, 1, 6, 7, { 0 }},
{ 122, 1, 6, 7, { 0 }},
{ 123, 1, 2, 5, { 0 }},
{ 124, 1, 1, 3, { 0 }},
{ 125, 1, 2, 5, { 0 }},
{ 126, 1, 8, 7, { 0 }},
{ 161, 1, 3, 3, { 0 }},
{ 162, 1, 3, 7, { 0 }},
{ 163, 1, 3, 7, { 0 }},
{ 8364, 1, 3, 7, { 0 }},
{ 165, 1, 3, 7, { 0 }},
{ 352, 0, 0, 0, { 0 }},
{ 167, 0, 0, 0, { 0 }},
{ 353, 0, 0, 0, { 0 }},
{ 169, 1, 3, 9, { 0 }},
{ 170, 0, 0, 0, { 0 }},
{ 171, 0, 0, 0, { 0 }},
{ 172, 1, 8, 7, { 0 }},
{ 174, 1, 3, 9, { 0 }},
{ 175, 1, 1, 7, { 0 }},
{ 176, 1, 0, 5, { 0 }},
{ 177, 1, 7, 7, { 0 }},
{ 178, 0, 0, 0, { 0 }},
{ 179, 0, 0, 0, { 0 }},
{ 381, 0, 0, 0, { 0 }},
{ 181, 1, 6, 7, { 0 }},
{ 182, 1, 3, 9, { 0 }},
{ 183, 1, 8, 3, { 0 }},
{ 382, 0, 0, 0, { 0 }},
{ 185, 0, 0, 0, { 0 }},
{ 186, 0, 0, 0, { 0 }},
{ 187, 0, 0, 0, { 0 }},
{ 338, 0, 0, 0, { 0 }},
{ 339, 0, 0, 0, { 0 }},
{ 376, 1, 1, 7, { 0 }},
{ 191, 1, 3, 7, { 0 }},
{ 192, 1, 0, 7, { 0 }},
{ 193, 1, 0, 7, { 0 }},
{ 194, 1, 0, 7, { 0 }},
{ 195, 1, 0, 7, { 0 }},
{ 196, 1, 1, 7, { 0 }},
{ 197, 1, 1, 7, { 0 }},
{ 198, 1, 3, 11, { 0 }},
{ 199, 1, 3, 7, { 0 }},
{ 200, 1, 0, 7, { 0 }},
{ 201, 1, 0, 7, { 0 }},
{ 202, 1, 0, 7, { 0 }},
{ 203, 1, 1, 7, { 0 }},
{ 204, 0, 0, 3, { 0 }},
{ 205, 1, 0, 3, { 0 }},
{ 206, 0, 0, 3, { 0 }},
{ 207, 0, 1, 3, { 0 }},
{ 208, 1, 3, 7, { 0 }},
{ 209, 1, 0, 7, { 0 }},
{ 210, 1, 0, 7, { 0 }},
{ 211, 1, 0, 7, { 0 }},
{ 212, 1, 0, 7, { 0 }},
{ 213, 1, 0, 7, { 0 }},
{ 214, 1, 1, 7, { 0 }},
{ 215, 1, 7, 7, { 0 }},
{ 216, 1, 2, 7, { 0 }},
{ 217, 1, 0, 7, { 0 }},
{ 218, 1, 0, 7, { 0 }},
{ 219, 1, 0, 7, { 0 }},
{ 220, 1, 1, 7, { 0 }},
{ 221, 1, 0, 7, { 0 }},
{ 222, 1, 3, 7, { 0 }},
{ 223, 1, 3, 7, { 0 }},
{ 224, 1, 3, 7, { 0 }},
{ 225, 1, 3, 7, { 0 }},
{ 226, 1, 3, 7, { 0 }},
{ 227, 1, 3, 7, { 0 }},
{ 228, 1, 4, 7, { 0 }},
{ 229, 1, 4, 7, { 0 }},
{ 230, 1, 6, 11, { 0 }},
{ 231, 1, 6, 7, { 0 }},
{ 232, 1, 3, 7, { 0 }},
{ 233, 1, 3, 7, { 0 }},
{ 234, 1, 3, 7, { 0 }},
{ 235, 1, 4, 7, { 0 }},
{ 236, 0, 3, 3, { 0 }},
{ 237, 1, 3, 3, { 0 }},
{ 238, 0, 3, 3, { 0 }},
{ 239, 0, 4, 3, { 0 }},
{ 240, 1, 3, 7, { 0 }},
{ 241, 1, 3, 7, { 0 }},
{ 242, 1, 3, 7, { 0 }},
{ 243, 1, 3, 7, { 0 }},
{ 244, 1, 3, 7, { 0 }},
{ 245, 1, 3, 7, { 0 }},
{ 246, 1, 4, 7, { 0 }},
{ 247, 1, 7, 7, { 0 }},
{ 248, 1, 5, 7, { 0 }},
{ 249, 1, 3, 7, { 0 }},
{ 250, 1, 3, 7, { 0 }},
{ 251, 1, 3, 7, { 0 }},
{ 252, 1, 4, 7, { 0 }},
{ 253, 1, 3, 7, { 0 }},
{ 254, 1, 6, 6, { 0 }},
{ 255, 1, 4, 7, { 0 }},
};
// Style loading function: Terminal
static void GuiLoadStyleTerminal(void)
{
// Load style properties provided
// NOTE: Default properties are propagated
for (int i = 0; i < TERMINAL_STYLE_PROPS_COUNT; i++)
{
GuiSetStyle(terminalStyleProps[i].controlId, terminalStyleProps[i].propertyId, terminalStyleProps[i].propertyValue);
}
// Custom font loading
// NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function
int terminalFontDataSize = 0;
unsigned char *data = DecompressData(terminalFontData, TERMINAL_STYLE_FONT_ATLAS_COMP_SIZE, &terminalFontDataSize);
Image imFont = { data, 512, 256, 1, 2 };
Font font = { 0 };
font.baseSize = 16;
font.glyphCount = 189;
// Load texture from image
font.texture = LoadTextureFromImage(imFont);
UnloadImage(imFont); // Uncompressed image data can be unloaded from memory
// Copy char recs data from global fontRecs
// NOTE: Required to avoid issues if trying to free font
font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle));
memcpy(font.recs, terminalFontRecs, font.glyphCount*sizeof(Rectangle));
// Copy font char info data from global fontChars
// NOTE: Required to avoid issues if trying to free font
font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo));
memcpy(font.glyphs, terminalFontGlyphs, font.glyphCount*sizeof(GlyphInfo));
GuiSetFont(font);
// Setup a white rectangle on the font to be used on shapes drawing,
// it makes possible to draw shapes and text (full UI) in a single draw call
Rectangle fontWhiteRec = { 510, 254, 1, 1 };
SetShapesTexture(font.texture, fontWhiteRec);
//-----------------------------------------------------------------
// TODO: Custom user style setup: Set specific properties here (if required)
// i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT
}