From 1e7eacb89362438e234861a19bd6c3066a9381bd Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sun, 13 Oct 2024 04:22:09 +0200 Subject: [PATCH] good progress, signals not going to next node --- Makefile | 6 +- include/raygui/dark/PixelOperator.ttf | Bin 0 -> 17272 bytes include/raygui/dark/README.md | 27 + include/raygui/dark/charset.txt | 1 + include/raygui/dark/font_LICENSE.txt | 121 + include/raygui/dark/screenshot.png | Bin 0 -> 48269 bytes include/raygui/dark/style_dark.h | 589 +++ include/raygui/dark/style_dark.old.rgs | Bin 0 -> 8422 bytes include/raygui/dark/style_dark.png | Bin 0 -> 31627 bytes include/raygui/dark/style_dark.rgs | Bin 0 -> 3725 bytes include/raygui/dark/style_dark.txt.rgs | 33 + include/raygui/raygui.h | 5522 ++++++++++++++++++++++++ include/raylib.h | 1698 ++++++++ include/raymath.h | 2583 +++++++++++ lib/libraylib.a | Bin 0 -> 2722894 bytes src/datatypes.h | 6 - src/main.cpp | 225 +- src/moveable.h | 3 +- src/node.h | 38 +- src/signal.h | 28 +- 20 files changed, 10762 insertions(+), 118 deletions(-) create mode 100644 include/raygui/dark/PixelOperator.ttf create mode 100644 include/raygui/dark/README.md create mode 100644 include/raygui/dark/charset.txt create mode 100644 include/raygui/dark/font_LICENSE.txt create mode 100644 include/raygui/dark/screenshot.png create mode 100644 include/raygui/dark/style_dark.h create mode 100644 include/raygui/dark/style_dark.old.rgs create mode 100644 include/raygui/dark/style_dark.png create mode 100644 include/raygui/dark/style_dark.rgs create mode 100644 include/raygui/dark/style_dark.txt.rgs create mode 100644 include/raygui/raygui.h create mode 100644 include/raylib.h create mode 100644 include/raymath.h create mode 100644 lib/libraylib.a diff --git a/Makefile b/Makefile index 25096c6..cdd7d80 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,9 @@ CXX = g++-13 -CXXFLAGS = -std=c++20 -Wall -g -fno-omit-frame-pointer -gdwarf-4 -Og -DLIBREMIDI_ALSA=1 +CXXFLAGS = -std=c++20 -Wall -g -fno-omit-frame-pointer -gdwarf-4 -Og -DLIBREMIDI_ALSA=1 -Wnarrowing CXXINC = -I/usr/lib/gcc/x86_64-pc-linux-gnu/13.3.0/include -Iinclude -LDLIBS = -lsfml-graphics -lsfml-window -lsfml-system -LDFLAGS = -L/usr/lib -L/usr/local/lib +LDLIBS = -lraylib +LDFLAGS = -Llib -L/usr/lib -L/usr/local/lib hdr_files = ${wildcard src/*.h} diff --git a/include/raygui/dark/PixelOperator.ttf b/include/raygui/dark/PixelOperator.ttf new file mode 100644 index 0000000000000000000000000000000000000000..34fe947b8d4e7efa8e57798512ff15b232a763de GIT binary patch literal 17272 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 literal 0 HcmV?d00001 diff --git a/include/raygui/dark/README.md b/include/raygui/dark/README.md new file mode 100644 index 0000000..c3595fc --- /dev/null +++ b/include/raygui/dark/README.md @@ -0,0 +1,27 @@ +## style: dark + +Classical dark style with an extra high-def colour touch! Elegant and professional, perfect for the expensive tools! + +![dark style table](style_dark.png) + +## style: provided files + +Several options are provided to add the style to a `raygui` application, choose the one that better fits the project. + +| file name | description | +| :-------- | :---------- | +| `style_dark.rgs` | Binary style file (raygui 4.0), font data compressed (recs, glyphs) | +| `style_dark.txt.rgs` | Text style file, no font data, requires external font provided | +| `style_dark.old.rgs` | Binary style file (raygui 3.x), font data uncompressed (recs, glyphs) | +| `style_dark.h` | Embeddable style as code file, self-contained, includes font data | +| `style_dark.png` | Style table image, contains `rGSf` chunk with binary `rgs` file data | + +## screenshot + +![dark style screen](screenshot.png) + +## about font + +"Pixel Operator" font by de Jayvee Enaguas. + +CC0 1.0 Universal, downloaded from dafont.com: [pixel-operator](https://www.dafont.com/pixel-operator.font) diff --git a/include/raygui/dark/charset.txt b/include/raygui/dark/charset.txt new file mode 100644 index 0000000..611a673 --- /dev/null +++ b/include/raygui/dark/charset.txt @@ -0,0 +1 @@ + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¡¢£€¥Š§š©ª«¬®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ \ No newline at end of file diff --git a/include/raygui/dark/font_LICENSE.txt b/include/raygui/dark/font_LICENSE.txt new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/include/raygui/dark/font_LICENSE.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/include/raygui/dark/screenshot.png b/include/raygui/dark/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..712d30c2ea8f4fa9ee1dec32056aec3ec7010c81 GIT binary patch literal 48269 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 literal 0 HcmV?d00001 diff --git a/include/raygui/dark/style_dark.png b/include/raygui/dark/style_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..05461d15a07761b1a794b7c89a32a31ebf689de6 GIT binary patch literal 31627 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 literal 0 HcmV?d00001 diff --git a/include/raygui/dark/style_dark.rgs b/include/raygui/dark/style_dark.rgs new file mode 100644 index 0000000000000000000000000000000000000000..3f5be8705701aedbc5fe83ab727ae2eb1477556b GIT binary patch literal 3725 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 literal 0 HcmV?d00001 diff --git a/include/raygui/dark/style_dark.txt.rgs b/include/raygui/dark/style_dark.txt.rgs new file mode 100644 index 0000000..586cb0f --- /dev/null +++ b/include/raygui/dark/style_dark.txt.rgs @@ -0,0 +1,33 @@ +# +# rgs style text file (v4.0) - raygui style file generated using rGuiStyler +# +# Provided info: +# f fontGenSize charsetFileName fontFileName +# p Property description +# +# WARNING: This style uses a custom font, must be provided with style file +# +f 16 charset.txt PixelOperator.ttf +p 00 00 0x878787ff DEFAULT_BORDER_COLOR_NORMAL +p 00 01 0x2c2c2cff DEFAULT_BASE_COLOR_NORMAL +p 00 02 0xc3c3c3ff DEFAULT_TEXT_COLOR_NORMAL +p 00 03 0xe1e1e1ff DEFAULT_BORDER_COLOR_FOCUSED +p 00 04 0x848484ff DEFAULT_BASE_COLOR_FOCUSED +p 00 05 0x181818ff DEFAULT_TEXT_COLOR_FOCUSED +p 00 06 0x000000ff DEFAULT_BORDER_COLOR_PRESSED +p 00 07 0xefefefff DEFAULT_BASE_COLOR_PRESSED +p 00 08 0x202020ff DEFAULT_TEXT_COLOR_PRESSED +p 00 09 0x6a6a6aff DEFAULT_BORDER_COLOR_DISABLED +p 00 10 0x818181ff DEFAULT_BASE_COLOR_DISABLED +p 00 11 0x606060ff DEFAULT_TEXT_COLOR_DISABLED +p 00 16 0x00000010 TEXT_SIZE +p 00 17 0x00000000 TEXT_SPACING +p 00 18 0x9d9d9dff LINE_COLOR +p 00 19 0x3c3c3cff BACKGROUND_COLOR +p 00 20 0x00000018 TEXT_LINE_SPACING +p 01 05 0xf7f7f7ff LABEL_TEXT_COLOR_FOCUSED +p 01 08 0x898989ff LABEL_TEXT_COLOR_PRESSED +p 04 05 0xb0b0b0ff SLIDER_TEXT_COLOR_FOCUSED +p 05 05 0x848484ff PROGRESSBAR_TEXT_COLOR_FOCUSED +p 09 05 0xf5f5f5ff TEXTBOX_TEXT_COLOR_FOCUSED +p 10 05 0xf6f6f6ff VALUEBOX_TEXT_COLOR_FOCUSED diff --git a/include/raygui/raygui.h b/include/raygui/raygui.h new file mode 100644 index 0000000..aca423a --- /dev/null +++ b/include/raygui/raygui.h @@ -0,0 +1,5522 @@ +/******************************************************************************************* +* +* raygui v4.0 - A simple and easy-to-use immediate-mode gui library +* +* DESCRIPTION: +* raygui is a tools-dev-focused immediate-mode-gui library based on raylib but also +* available as a standalone library, as long as input and drawing functions are provided. +* +* FEATURES: +* - Immediate-mode gui, minimal retained data +* - +25 controls provided (basic and advanced) +* - Styling system for colors, font and metrics +* - Icons supported, embedded as a 1-bit icons pack +* - Standalone mode option (custom input/graphics backend) +* - Multiple support tools provided for raygui development +* +* POSSIBLE IMPROVEMENTS: +* - Better standalone mode API for easy plug of custom backends +* - Externalize required inputs, allow user easier customization +* +* LIMITATIONS: +* - No editable multi-line word-wraped text box supported +* - No auto-layout mechanism, up to the user to define controls position and size +* - Standalone mode requires library modification and some user work to plug another backend +* +* NOTES: +* - WARNING: GuiLoadStyle() and GuiLoadStyle{Custom}() functions, allocate memory for +* font atlas recs and glyphs, freeing that memory is (usually) up to the user, +* no unload function is explicitly provided... but note that GuiLoadStyleDefaulf() unloads +* by default any previously loaded font (texture, recs, glyphs). +* - Global UI alpha (guiAlpha) is applied inside GuiDrawRectangle() and GuiDrawText() functions +* +* CONTROLS PROVIDED: +* # Container/separators Controls +* - WindowBox --> StatusBar, Panel +* - GroupBox --> Line +* - Line +* - Panel --> StatusBar +* - ScrollPanel --> StatusBar +* - TabBar --> Button +* +* # Basic Controls +* - Label +* - LabelButton --> Label +* - Button +* - Toggle +* - ToggleGroup --> Toggle +* - ToggleSlider +* - CheckBox +* - ComboBox +* - DropdownBox +* - TextBox +* - ValueBox --> TextBox +* - Spinner --> Button, ValueBox +* - Slider +* - SliderBar --> Slider +* - ProgressBar +* - StatusBar +* - DummyRec +* - Grid +* +* # Advance Controls +* - ListView +* - ColorPicker --> ColorPanel, ColorBarHue +* - MessageBox --> Window, Label, Button +* - TextInputBox --> Window, Label, TextBox, Button +* +* It also provides a set of functions for styling the controls based on its properties (size, color). +* +* +* RAYGUI STYLE (guiStyle): +* raygui uses a global data array for all gui style properties (allocated on data segment by default), +* when a new style is loaded, it is loaded over the global style... but a default gui style could always be +* recovered with GuiLoadStyleDefault() function, that overwrites the current style to the default one +* +* The global style array size is fixed and depends on the number of controls and properties: +* +* static unsigned int guiStyle[RAYGUI_MAX_CONTROLS*(RAYGUI_MAX_PROPS_BASE + RAYGUI_MAX_PROPS_EXTENDED)]; +* +* guiStyle size is by default: 16*(16 + 8) = 384*4 = 1536 bytes = 1.5 KB +* +* Note that the first set of BASE properties (by default guiStyle[0..15]) belong to the generic style +* used for all controls, when any of those base values is set, it is automatically populated to all +* controls, so, specific control values overwriting generic style should be set after base values. +* +* After the first BASE set we have the EXTENDED properties (by default guiStyle[16..23]), those +* properties are actually common to all controls and can not be overwritten individually (like BASE ones) +* Some of those properties are: TEXT_SIZE, TEXT_SPACING, LINE_COLOR, BACKGROUND_COLOR +* +* Custom control properties can be defined using the EXTENDED properties for each independent control. +* +* TOOL: rGuiStyler is a visual tool to customize raygui style: github.com/raysan5/rguistyler +* +* +* RAYGUI ICONS (guiIcons): +* raygui could use a global array containing icons data (allocated on data segment by default), +* a custom icons set could be loaded over this array using GuiLoadIcons(), but loaded icons set +* must be same RAYGUI_ICON_SIZE and no more than RAYGUI_ICON_MAX_ICONS will be loaded +* +* Every icon is codified in binary form, using 1 bit per pixel, so, every 16x16 icon +* requires 8 integers (16*16/32) to be stored in memory. +* +* When the icon is draw, actually one quad per pixel is drawn if the bit for that pixel is set. +* +* The global icons array size is fixed and depends on the number of icons and size: +* +* static unsigned int guiIcons[RAYGUI_ICON_MAX_ICONS*RAYGUI_ICON_DATA_ELEMENTS]; +* +* guiIcons size is by default: 256*(16*16/32) = 2048*4 = 8192 bytes = 8 KB +* +* TOOL: rGuiIcons is a visual tool to customize/create raygui icons: github.com/raysan5/rguiicons +* +* RAYGUI LAYOUT: +* raygui currently does not provide an auto-layout mechanism like other libraries, +* layouts must be defined manually on controls drawing, providing the right bounds Rectangle for it. +* +* TOOL: rGuiLayout is a visual tool to create raygui layouts: github.com/raysan5/rguilayout +* +* CONFIGURATION: +* #define RAYGUI_IMPLEMENTATION +* Generates the implementation of the library into the included file. +* If not defined, the library is in header only mode and can be included in other headers +* or source files without problems. But only ONE file should hold the implementation. +* +* #define RAYGUI_STANDALONE +* Avoid raylib.h header inclusion in this file. Data types defined on raylib are defined +* internally in the library and input management and drawing functions must be provided by +* the user (check library implementation for further details). +* +* #define RAYGUI_NO_ICONS +* Avoid including embedded ricons data (256 icons, 16x16 pixels, 1-bit per pixel, 2KB) +* +* #define RAYGUI_CUSTOM_ICONS +* Includes custom ricons.h header defining a set of custom icons, +* this file can be generated using rGuiIcons tool +* +* #define RAYGUI_DEBUG_RECS_BOUNDS +* Draw control bounds rectangles for debug +* +* #define RAYGUI_DEBUG_TEXT_BOUNDS +* Draw text bounds rectangles for debug +* +* VERSIONS HISTORY: +* 4.0 (12-Sep-2023) ADDED: GuiToggleSlider() +* ADDED: GuiColorPickerHSV() and GuiColorPanelHSV() +* ADDED: Multiple new icons, mostly compiler related +* ADDED: New DEFAULT properties: TEXT_LINE_SPACING, TEXT_ALIGNMENT_VERTICAL, TEXT_WRAP_MODE +* ADDED: New enum values: GuiTextAlignment, GuiTextAlignmentVertical, GuiTextWrapMode +* ADDED: Support loading styles with custom font charset from external file +* REDESIGNED: GuiTextBox(), support mouse cursor positioning +* REDESIGNED: GuiDrawText(), support multiline and word-wrap modes (read only) +* REDESIGNED: GuiProgressBar() to be more visual, progress affects border color +* REDESIGNED: Global alpha consideration moved to GuiDrawRectangle() and GuiDrawText() +* REDESIGNED: GuiScrollPanel(), get parameters by reference and return result value +* REDESIGNED: GuiToggleGroup(), get parameters by reference and return result value +* REDESIGNED: GuiComboBox(), get parameters by reference and return result value +* REDESIGNED: GuiCheckBox(), get parameters by reference and return result value +* REDESIGNED: GuiSlider(), get parameters by reference and return result value +* REDESIGNED: GuiSliderBar(), get parameters by reference and return result value +* REDESIGNED: GuiProgressBar(), get parameters by reference and return result value +* REDESIGNED: GuiListView(), get parameters by reference and return result value +* REDESIGNED: GuiColorPicker(), get parameters by reference and return result value +* REDESIGNED: GuiColorPanel(), get parameters by reference and return result value +* REDESIGNED: GuiColorBarAlpha(), get parameters by reference and return result value +* REDESIGNED: GuiColorBarHue(), get parameters by reference and return result value +* REDESIGNED: GuiGrid(), get parameters by reference and return result value +* REDESIGNED: GuiGrid(), added extra parameter +* REDESIGNED: GuiListViewEx(), change parameters order +* REDESIGNED: All controls return result as int value +* REVIEWED: GuiScrollPanel() to avoid smallish scroll-bars +* REVIEWED: All examples and specially controls_test_suite +* RENAMED: gui_file_dialog module to gui_window_file_dialog +* UPDATED: All styles to include ISO-8859-15 charset (as much as possible) +* +* 3.6 (10-May-2023) ADDED: New icon: SAND_TIMER +* ADDED: GuiLoadStyleFromMemory() (binary only) +* REVIEWED: GuiScrollBar() horizontal movement key +* REVIEWED: GuiTextBox() crash on cursor movement +* REVIEWED: GuiTextBox(), additional inputs support +* REVIEWED: GuiLabelButton(), avoid text cut +* REVIEWED: GuiTextInputBox(), password input +* REVIEWED: Local GetCodepointNext(), aligned with raylib +* REDESIGNED: GuiSlider*()/GuiScrollBar() to support out-of-bounds +* +* 3.5 (20-Apr-2023) ADDED: GuiTabBar(), based on GuiToggle() +* ADDED: Helper functions to split text in separate lines +* ADDED: Multiple new icons, useful for code editing tools +* REMOVED: Unneeded icon editing functions +* REMOVED: GuiTextBoxMulti(), very limited and broken +* REMOVED: MeasureTextEx() dependency, logic directly implemented +* REMOVED: DrawTextEx() dependency, logic directly implemented +* REVIEWED: GuiScrollBar(), improve mouse-click behaviour +* REVIEWED: Library header info, more info, better organized +* REDESIGNED: GuiTextBox() to support cursor movement +* REDESIGNED: GuiDrawText() to divide drawing by lines +* +* 3.2 (22-May-2022) RENAMED: Some enum values, for unification, avoiding prefixes +* REMOVED: GuiScrollBar(), only internal +* REDESIGNED: GuiPanel() to support text parameter +* REDESIGNED: GuiScrollPanel() to support text parameter +* REDESIGNED: GuiColorPicker() to support text parameter +* REDESIGNED: GuiColorPanel() to support text parameter +* REDESIGNED: GuiColorBarAlpha() to support text parameter +* REDESIGNED: GuiColorBarHue() to support text parameter +* REDESIGNED: GuiTextInputBox() to support password +* +* 3.1 (12-Jan-2022) REVIEWED: Default style for consistency (aligned with rGuiLayout v2.5 tool) +* REVIEWED: GuiLoadStyle() to support compressed font atlas image data and unload previous textures +* REVIEWED: External icons usage logic +* REVIEWED: GuiLine() for centered alignment when including text +* RENAMED: Multiple controls properties definitions to prepend RAYGUI_ +* RENAMED: RICON_ references to RAYGUI_ICON_ for library consistency +* Projects updated and multiple tweaks +* +* 3.0 (04-Nov-2021) Integrated ricons data to avoid external file +* REDESIGNED: GuiTextBoxMulti() +* REMOVED: GuiImageButton*() +* Multiple minor tweaks and bugs corrected +* +* 2.9 (17-Mar-2021) REMOVED: Tooltip API +* 2.8 (03-May-2020) Centralized rectangles drawing to GuiDrawRectangle() +* 2.7 (20-Feb-2020) ADDED: Possible tooltips API +* 2.6 (09-Sep-2019) ADDED: GuiTextInputBox() +* REDESIGNED: GuiListView*(), GuiDropdownBox(), GuiSlider*(), GuiProgressBar(), GuiMessageBox() +* REVIEWED: GuiTextBox(), GuiSpinner(), GuiValueBox(), GuiLoadStyle() +* Replaced property INNER_PADDING by TEXT_PADDING, renamed some properties +* ADDED: 8 new custom styles ready to use +* Multiple minor tweaks and bugs corrected +* +* 2.5 (28-May-2019) Implemented extended GuiTextBox(), GuiValueBox(), GuiSpinner() +* 2.3 (29-Apr-2019) ADDED: rIcons auxiliar library and support for it, multiple controls reviewed +* Refactor all controls drawing mechanism to use control state +* 2.2 (05-Feb-2019) ADDED: GuiScrollBar(), GuiScrollPanel(), reviewed GuiListView(), removed Gui*Ex() controls +* 2.1 (26-Dec-2018) REDESIGNED: GuiCheckBox(), GuiComboBox(), GuiDropdownBox(), GuiToggleGroup() > Use combined text string +* REDESIGNED: Style system (breaking change) +* 2.0 (08-Nov-2018) ADDED: Support controls guiLock and custom fonts +* REVIEWED: GuiComboBox(), GuiListView()... +* 1.9 (09-Oct-2018) REVIEWED: GuiGrid(), GuiTextBox(), GuiTextBoxMulti(), GuiValueBox()... +* 1.8 (01-May-2018) Lot of rework and redesign to align with rGuiStyler and rGuiLayout +* 1.5 (21-Jun-2017) Working in an improved styles system +* 1.4 (15-Jun-2017) Rewritten all GUI functions (removed useless ones) +* 1.3 (12-Jun-2017) Complete redesign of style system +* 1.1 (01-Jun-2017) Complete review of the library +* 1.0 (07-Jun-2016) Converted to header-only by Ramon Santamaria. +* 0.9 (07-Mar-2016) Reviewed and tested by Albert Martos, Ian Eito, Sergio Martinez and Ramon Santamaria. +* 0.8 (27-Aug-2015) Initial release. Implemented by Kevin Gato, Daniel Nicolás and Ramon Santamaria. +* +* DEPENDENCIES: +* raylib 4.6-dev Inputs reading (keyboard/mouse), shapes drawing, font loading and text drawing +* +* STANDALONE MODE: +* By default raygui depends on raylib mostly for the inputs and the drawing functionality but that dependency can be disabled +* with the config flag RAYGUI_STANDALONE. In that case is up to the user to provide another backend to cover library needs. +* +* The following functions should be redefined for a custom backend: +* +* - Vector2 GetMousePosition(void); +* - float GetMouseWheelMove(void); +* - bool IsMouseButtonDown(int button); +* - bool IsMouseButtonPressed(int button); +* - bool IsMouseButtonReleased(int button); +* - bool IsKeyDown(int key); +* - bool IsKeyPressed(int key); +* - int GetCharPressed(void); // -- GuiTextBox(), GuiValueBox() +* +* - void DrawRectangle(int x, int y, int width, int height, Color color); // -- GuiDrawRectangle() +* - void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); // -- GuiColorPicker() +* +* - Font GetFontDefault(void); // -- GuiLoadStyleDefault() +* - Font LoadFontEx(const char *fileName, int fontSize, int *codepoints, int codepointCount); // -- GuiLoadStyle() +* - Texture2D LoadTextureFromImage(Image image); // -- GuiLoadStyle(), required to load texture from embedded font atlas image +* - void SetShapesTexture(Texture2D tex, Rectangle rec); // -- GuiLoadStyle(), required to set shapes rec to font white rec (optimization) +* - char *LoadFileText(const char *fileName); // -- GuiLoadStyle(), required to load charset data +* - void UnloadFileText(char *text); // -- GuiLoadStyle(), required to unload charset data +* - const char *GetDirectoryPath(const char *filePath); // -- GuiLoadStyle(), required to find charset/font file from text .rgs +* - int *LoadCodepoints(const char *text, int *count); // -- GuiLoadStyle(), required to load required font codepoints list +* - void UnloadCodepoints(int *codepoints); // -- GuiLoadStyle(), required to unload codepoints list +* - unsigned char *DecompressData(const unsigned char *compData, int compDataSize, int *dataSize); // -- GuiLoadStyle() +* +* CONTRIBUTORS: +* Ramon Santamaria: Supervision, review, redesign, update and maintenance +* Vlad Adrian: Complete rewrite of GuiTextBox() to support extended features (2019) +* Sergio Martinez: Review, testing (2015) and redesign of multiple controls (2018) +* Adria Arranz: Testing and implementation of additional controls (2018) +* Jordi Jorba: Testing and implementation of additional controls (2018) +* Albert Martos: Review and testing of the library (2015) +* Ian Eito: Review and testing of the library (2015) +* Kevin Gato: Initial implementation of basic components (2014) +* Daniel Nicolas: Initial implementation of basic components (2014) +* +* +* LICENSE: zlib/libpng +* +* Copyright (c) 2014-2023 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. +* +**********************************************************************************************/ + +#ifndef RAYGUI_H +#define RAYGUI_H + +#include +#define RAYGUI_VERSION_MAJOR 4 +#define RAYGUI_VERSION_MINOR 0 +#define RAYGUI_VERSION_PATCH 0 +#define RAYGUI_VERSION "4.0" + +#if !defined(RAYGUI_STANDALONE) + #include "raylib.h" +#endif + +// Function specifiers in case library is build/used as a shared library (Windows) +// NOTE: Microsoft specifiers to tell compiler that symbols are imported/exported from a .dll +#if defined(_WIN32) + #if defined(BUILD_LIBTYPE_SHARED) + #define RAYGUIAPI __declspec(dllexport) // We are building the library as a Win32 shared library (.dll) + #elif defined(USE_LIBTYPE_SHARED) + #define RAYGUIAPI __declspec(dllimport) // We are using the library as a Win32 shared library (.dll) + #endif +#endif + +// Function specifiers definition +#ifndef RAYGUIAPI + #define RAYGUIAPI // Functions defined as 'extern' by default (implicit specifiers) +#endif + +//---------------------------------------------------------------------------------- +// Defines and Macros +//---------------------------------------------------------------------------------- +// Allow custom memory allocators +#ifndef RAYGUI_MALLOC + #define RAYGUI_MALLOC(sz) malloc(sz) +#endif +#ifndef RAYGUI_CALLOC + #define RAYGUI_CALLOC(n,sz) calloc(n,sz) +#endif +#ifndef RAYGUI_FREE + #define RAYGUI_FREE(p) free(p) +#endif + +// Simple log system to avoid printf() calls if required +// NOTE: Avoiding those calls, also avoids const strings memory usage +#define RAYGUI_SUPPORT_LOG_INFO +#if defined(RAYGUI_SUPPORT_LOG_INFO) + #define RAYGUI_LOG(...) printf(__VA_ARGS__) +#else + #define RAYGUI_LOG(...) +#endif + +//---------------------------------------------------------------------------------- +// Types and Structures Definition +// NOTE: Some types are required for RAYGUI_STANDALONE usage +//---------------------------------------------------------------------------------- +#if defined(RAYGUI_STANDALONE) + #ifndef __cplusplus + // Boolean type + #ifndef true + typedef enum { false, true } bool; + #endif + #endif + + // Vector2 type + typedef struct Vector2 { + float x; + float y; + } Vector2; + + // Vector3 type // -- ConvertHSVtoRGB(), ConvertRGBtoHSV() + typedef struct Vector3 { + float x; + float y; + float z; + } Vector3; + + // Color type, RGBA (32bit) + typedef struct Color { + unsigned char r; + unsigned char g; + unsigned char b; + unsigned char a; + } Color; + + // Rectangle type + typedef struct Rectangle { + float x; + float y; + float width; + float height; + } Rectangle; + + // TODO: Texture2D type is very coupled to raylib, required by Font type + // It should be redesigned to be provided by user + typedef struct Texture2D { + unsigned int id; // OpenGL texture id + int width; // Texture base width + int height; // Texture base height + int mipmaps; // Mipmap levels, 1 by default + int format; // Data format (PixelFormat type) + } Texture2D; + + // Image, pixel data stored in CPU memory (RAM) + typedef struct Image { + void *data; // Image raw data + int width; // Image base width + int height; // Image base height + int mipmaps; // Mipmap levels, 1 by default + int format; // Data format (PixelFormat type) + } Image; + + // GlyphInfo, font characters glyphs info + typedef struct GlyphInfo { + int value; // Character value (Unicode) + int offsetX; // Character offset X when drawing + int offsetY; // Character offset Y when drawing + int advanceX; // Character advance position X + Image image; // Character image data + } GlyphInfo; + + // TODO: Font type is very coupled to raylib, mostly required by GuiLoadStyle() + // It should be redesigned to be provided by user + typedef struct Font { + int baseSize; // Base size (default chars height) + int glyphCount; // Number of glyph characters + int glyphPadding; // Padding around the glyph characters + Texture2D texture; // Texture atlas containing the glyphs + Rectangle *recs; // Rectangles in texture for the glyphs + GlyphInfo *glyphs; // Glyphs info data + } Font; +#endif + + +// Style property +// NOTE: Used when exporting style as code for convenience +typedef struct GuiStyleProp { + unsigned short controlId; // Control identifier + unsigned short propertyId; // Property identifier + long propertyValue; // Property value +} GuiStyleProp; + +/* +// Controls text style -NOT USED- +// NOTE: Text style is defined by control +typedef struct GuiTextStyle { + unsigned int size; + int charSpacing; + int lineSpacing; + int alignmentH; + int alignmentV; + int padding; +} GuiTextStyle; +*/ + +// Gui control state +typedef enum { + STATE_NORMAL = 0, + STATE_FOCUSED, + STATE_PRESSED, + STATE_DISABLED +} GuiState; + +// Gui control text alignment +typedef enum { + TEXT_ALIGN_LEFT = 0, + TEXT_ALIGN_CENTER, + TEXT_ALIGN_RIGHT +} GuiTextAlignment; + +// Gui control text alignment vertical +// NOTE: Text vertical position inside the text bounds +typedef enum { + TEXT_ALIGN_TOP = 0, + TEXT_ALIGN_MIDDLE, + TEXT_ALIGN_BOTTOM +} GuiTextAlignmentVertical; + +// Gui control text wrap mode +// NOTE: Useful for multiline text +typedef enum { + TEXT_WRAP_NONE = 0, + TEXT_WRAP_CHAR, + TEXT_WRAP_WORD +} GuiTextWrapMode; + +// Gui controls +typedef enum { + // Default -> populates to all controls when set + DEFAULT = 0, + + // Basic controls + LABEL, // Used also for: LABELBUTTON + BUTTON, + TOGGLE, // Used also for: TOGGLEGROUP + SLIDER, // Used also for: SLIDERBAR, TOGGLESLIDER + PROGRESSBAR, + CHECKBOX, + COMBOBOX, + DROPDOWNBOX, + TEXTBOX, // Used also for: TEXTBOXMULTI + VALUEBOX, + SPINNER, // Uses: BUTTON, VALUEBOX + LISTVIEW, + COLORPICKER, + SCROLLBAR, + STATUSBAR +} GuiControl; + +// Gui base properties for every control +// NOTE: RAYGUI_MAX_PROPS_BASE properties (by default 16 properties) +typedef enum { + BORDER_COLOR_NORMAL = 0, // Control border color in STATE_NORMAL + BASE_COLOR_NORMAL, // Control base color in STATE_NORMAL + TEXT_COLOR_NORMAL, // Control text color in STATE_NORMAL + BORDER_COLOR_FOCUSED, // Control border color in STATE_FOCUSED + BASE_COLOR_FOCUSED, // Control base color in STATE_FOCUSED + TEXT_COLOR_FOCUSED, // Control text color in STATE_FOCUSED + BORDER_COLOR_PRESSED, // Control border color in STATE_PRESSED + BASE_COLOR_PRESSED, // Control base color in STATE_PRESSED + TEXT_COLOR_PRESSED, // Control text color in STATE_PRESSED + BORDER_COLOR_DISABLED, // Control border color in STATE_DISABLED + BASE_COLOR_DISABLED, // Control base color in STATE_DISABLED + TEXT_COLOR_DISABLED, // Control text color in STATE_DISABLED + BORDER_WIDTH, // Control border size, 0 for no border + //TEXT_SIZE, // Control text size (glyphs max height) -> GLOBAL for all controls + //TEXT_SPACING, // Control text spacing between glyphs -> GLOBAL for all controls + //TEXT_LINE_SPACING // Control text spacing between lines -> GLOBAL for all controls + TEXT_PADDING, // Control text padding, not considering border + TEXT_ALIGNMENT, // Control text horizontal alignment inside control text bound (after border and padding) + //TEXT_WRAP_MODE // Control text wrap-mode inside text bounds -> GLOBAL for all controls +} GuiControlProperty; + +// TODO: Which text styling properties should be global or per-control? +// At this moment TEXT_PADDING and TEXT_ALIGNMENT is configured and saved per control while +// TEXT_SIZE, TEXT_SPACING, TEXT_LINE_SPACING, TEXT_ALIGNMENT_VERTICAL, TEXT_WRAP_MODE are global and +// should be configured by user as needed while defining the UI layout + + +// Gui extended properties depend on control +// NOTE: RAYGUI_MAX_PROPS_EXTENDED properties (by default, max 8 properties) +//---------------------------------------------------------------------------------- +// DEFAULT extended properties +// NOTE: Those properties are common to all controls or global +// WARNING: We only have 8 slots for those properties by default!!! -> New global control: TEXT? +typedef enum { + TEXT_SIZE = 16, // Text size (glyphs max height) + TEXT_SPACING, // Text spacing between glyphs + LINE_COLOR, // Line control color + BACKGROUND_COLOR, // Background color + TEXT_LINE_SPACING, // Text spacing between lines + TEXT_ALIGNMENT_VERTICAL, // Text vertical alignment inside text bounds (after border and padding) + TEXT_WRAP_MODE // Text wrap-mode inside text bounds + //TEXT_DECORATION // Text decoration: 0-None, 1-Underline, 2-Line-through, 3-Overline + //TEXT_DECORATION_THICK // Text decoration line thikness +} GuiDefaultProperty; + +// Other possible text properties: +// TEXT_WEIGHT // Normal, Italic, Bold -> Requires specific font change +// TEXT_INDENT // Text indentation -> Now using TEXT_PADDING... + +// Label +//typedef enum { } GuiLabelProperty; + +// Button/Spinner +//typedef enum { } GuiButtonProperty; + +// Toggle/ToggleGroup +typedef enum { + GROUP_PADDING = 16, // ToggleGroup separation between toggles +} GuiToggleProperty; + +// Slider/SliderBar +typedef enum { + SLIDER_WIDTH = 16, // Slider size of internal bar + SLIDER_PADDING // Slider/SliderBar internal bar padding +} GuiSliderProperty; + +// ProgressBar +typedef enum { + PROGRESS_PADDING = 16, // ProgressBar internal padding +} GuiProgressBarProperty; + +// ScrollBar +typedef enum { + ARROWS_SIZE = 16, // ScrollBar arrows size + ARROWS_VISIBLE, // ScrollBar arrows visible + SCROLL_SLIDER_PADDING, // ScrollBar slider internal padding + SCROLL_SLIDER_SIZE, // ScrollBar slider size + SCROLL_PADDING, // ScrollBar scroll padding from arrows + SCROLL_SPEED, // ScrollBar scrolling speed +} GuiScrollBarProperty; + +// CheckBox +typedef enum { + CHECK_PADDING = 16 // CheckBox internal check padding +} GuiCheckBoxProperty; + +// ComboBox +typedef enum { + COMBO_BUTTON_WIDTH = 16, // ComboBox right button width + COMBO_BUTTON_SPACING // ComboBox button separation +} GuiComboBoxProperty; + +// DropdownBox +typedef enum { + ARROW_PADDING = 16, // DropdownBox arrow separation from border and items + DROPDOWN_ITEMS_SPACING // DropdownBox items separation +} GuiDropdownBoxProperty; + +// TextBox/TextBoxMulti/ValueBox/Spinner +typedef enum { + TEXT_READONLY = 16, // TextBox in read-only mode: 0-text editable, 1-text no-editable +} GuiTextBoxProperty; + +// Spinner +typedef enum { + SPIN_BUTTON_WIDTH = 16, // Spinner left/right buttons width + SPIN_BUTTON_SPACING, // Spinner buttons separation +} GuiSpinnerProperty; + +// ListView +typedef enum { + LIST_ITEMS_HEIGHT = 16, // ListView items height + LIST_ITEMS_SPACING, // ListView items separation + SCROLLBAR_WIDTH, // ListView scrollbar size (usually width) + SCROLLBAR_SIDE, // ListView scrollbar side (0-SCROLLBAR_LEFT_SIDE, 1-SCROLLBAR_RIGHT_SIDE) +} GuiListViewProperty; + +// ColorPicker +typedef enum { + COLOR_SELECTOR_SIZE = 16, + HUEBAR_WIDTH, // ColorPicker right hue bar width + HUEBAR_PADDING, // ColorPicker right hue bar separation from panel + HUEBAR_SELECTOR_HEIGHT, // ColorPicker right hue bar selector height + HUEBAR_SELECTOR_OVERFLOW // ColorPicker right hue bar selector overflow +} GuiColorPickerProperty; + +#define SCROLLBAR_LEFT_SIDE 0 +#define SCROLLBAR_RIGHT_SIDE 1 + +//---------------------------------------------------------------------------------- +// Global Variables Definition +//---------------------------------------------------------------------------------- +// ... + +//---------------------------------------------------------------------------------- +// Module Functions Declaration +//---------------------------------------------------------------------------------- + +#if defined(__cplusplus) +extern "C" { // Prevents name mangling of functions +#endif + +// Global gui state control functions +RAYGUIAPI void GuiEnable(void); // Enable gui controls (global state) +RAYGUIAPI void GuiDisable(void); // Disable gui controls (global state) +RAYGUIAPI void GuiLock(void); // Lock gui controls (global state) +RAYGUIAPI void GuiUnlock(void); // Unlock gui controls (global state) +RAYGUIAPI bool GuiIsLocked(void); // Check if gui is locked (global state) +RAYGUIAPI void GuiSetAlpha(float alpha); // Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f +RAYGUIAPI void GuiSetState(int state); // Set gui state (global state) +RAYGUIAPI int GuiGetState(void); // Get gui state (global state) + +// Font set/get functions +RAYGUIAPI void GuiSetFont(Font font); // Set gui custom font (global state) +RAYGUIAPI Font GuiGetFont(void); // Get gui custom font (global state) + +// Style set/get functions +RAYGUIAPI void GuiSetStyle(int control, int property, int value); // Set one style property +RAYGUIAPI int GuiGetStyle(int control, int property); // Get one style property + +// Styles loading functions +RAYGUIAPI void GuiLoadStyle(const char *fileName); // Load style file over global style variable (.rgs) +RAYGUIAPI void GuiLoadStyleDefault(void); // Load style default over global style + +// Tooltips management functions +RAYGUIAPI void GuiEnableTooltip(void); // Enable gui tooltips (global state) +RAYGUIAPI void GuiDisableTooltip(void); // Disable gui tooltips (global state) +RAYGUIAPI void GuiSetTooltip(const char *tooltip); // Set tooltip string + +// Icons functionality +RAYGUIAPI const char *GuiIconText(int iconId, const char *text); // Get text with icon id prepended (if supported) +#if !defined(RAYGUI_NO_ICONS) +RAYGUIAPI void GuiSetIconScale(int scale); // Set default icon drawing size +RAYGUIAPI unsigned int *GuiGetIcons(void); // Get raygui icons data pointer +RAYGUIAPI char **GuiLoadIcons(const char *fileName, bool loadIconsName); // Load raygui icons file (.rgi) into internal icons data +RAYGUIAPI void GuiDrawIcon(int iconId, int posX, int posY, int pixelSize, Color color); // Draw icon using pixel size at specified position +#endif + + +// Controls +//---------------------------------------------------------------------------------------------------------- +// Container/separator controls, useful for controls organization +RAYGUIAPI int GuiWindowBox(Rectangle bounds, const char *title); // Window Box control, shows a window that can be closed +RAYGUIAPI int GuiGroupBox(Rectangle bounds, const char *text); // Group Box control with text name +RAYGUIAPI int GuiLine(Rectangle bounds, const char *text); // Line separator control, could contain text +RAYGUIAPI int GuiPanel(Rectangle bounds, const char *text); // Panel control, useful to group controls +RAYGUIAPI int GuiTabBar(Rectangle bounds, const char **text, int count, int *active); // Tab Bar control, returns TAB to be closed or -1 +RAYGUIAPI int GuiScrollPanel(Rectangle bounds, const char *text, Rectangle content, Vector2 *scroll, Rectangle *view); // Scroll Panel control + +// Basic controls set +RAYGUIAPI int GuiLabel(Rectangle bounds, const char *text); // Label control, shows text +RAYGUIAPI int GuiButton(Rectangle bounds, const char *text); // Button control, returns true when clicked +RAYGUIAPI int GuiLabelButton(Rectangle bounds, const char *text); // Label button control, show true when clicked +RAYGUIAPI int GuiToggle(Rectangle bounds, const char *text, bool *active); // Toggle Button control, returns true when active +RAYGUIAPI int GuiToggleGroup(Rectangle bounds, const char *text, int *active); // Toggle Group control, returns active toggle index +RAYGUIAPI int GuiToggleSlider(Rectangle bounds, const char *text, int *active); // Toggle Slider control, returns true when clicked +RAYGUIAPI int GuiCheckBox(Rectangle bounds, const char *text, bool *checked); // Check Box control, returns true when active +RAYGUIAPI int GuiComboBox(Rectangle bounds, const char *text, int *active); // Combo Box control, returns selected item index + +RAYGUIAPI int GuiDropdownBox(Rectangle bounds, const char *text, int *active, bool editMode); // Dropdown Box control, returns selected item +RAYGUIAPI int GuiSpinner(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode); // Spinner control, returns selected value +RAYGUIAPI int GuiValueBox(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode); // Value Box control, updates input text with numbers +RAYGUIAPI int GuiTextBox(Rectangle bounds, char *text, int textSize, bool editMode); // Text Box control, updates input text + +RAYGUIAPI int GuiSlider(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue); // Slider control, returns selected value +RAYGUIAPI int GuiSliderBar(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue); // Slider Bar control, returns selected value +RAYGUIAPI int GuiProgressBar(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue); // Progress Bar control, shows current progress value +RAYGUIAPI int GuiStatusBar(Rectangle bounds, const char *text); // Status Bar control, shows info text +RAYGUIAPI int GuiDummyRec(Rectangle bounds, const char *text); // Dummy control for placeholders +RAYGUIAPI int GuiGrid(Rectangle bounds, const char *text, float spacing, int subdivs, Vector2 *mouseCell); // Grid control, returns mouse cell position + +// Advance controls set +RAYGUIAPI int GuiListView(Rectangle bounds, const char *text, int *scrollIndex, int *active); // List View control, returns selected list item index +RAYGUIAPI int GuiListViewEx(Rectangle bounds, const char **text, int count, int *scrollIndex, int *active, int *focus); // List View with extended parameters +RAYGUIAPI int GuiMessageBox(Rectangle bounds, const char *title, const char *message, const char *buttons); // Message Box control, displays a message +RAYGUIAPI int GuiTextInputBox(Rectangle bounds, const char *title, const char *message, const char *buttons, char *text, int textMaxSize, bool *secretViewActive); // Text Input Box control, ask for text, supports secret +RAYGUIAPI int GuiColorPicker(Rectangle bounds, const char *text, Color *color); // Color Picker control (multiple color controls) +RAYGUIAPI int GuiColorPanel(Rectangle bounds, const char *text, Color *color); // Color Panel control +RAYGUIAPI int GuiColorBarAlpha(Rectangle bounds, const char *text, float *alpha); // Color Bar Alpha control +RAYGUIAPI int GuiColorBarHue(Rectangle bounds, const char *text, float *value); // Color Bar Hue control +RAYGUIAPI int GuiColorPickerHSV(Rectangle bounds, const char *text, Vector3 *colorHsv); // Color Picker control that avoids conversion to RGB on each call (multiple color controls) +RAYGUIAPI int GuiColorPanelHSV(Rectangle bounds, const char *text, Vector3 *colorHsv); // Color Panel control that returns HSV color value, used by GuiColorPickerHSV() +//---------------------------------------------------------------------------------------------------------- + + +#if !defined(RAYGUI_NO_ICONS) + +#if !defined(RAYGUI_CUSTOM_ICONS) +//---------------------------------------------------------------------------------- +// Icons enumeration +//---------------------------------------------------------------------------------- +typedef enum { + ICON_NONE = 0, + ICON_FOLDER_FILE_OPEN = 1, + ICON_FILE_SAVE_CLASSIC = 2, + ICON_FOLDER_OPEN = 3, + ICON_FOLDER_SAVE = 4, + ICON_FILE_OPEN = 5, + ICON_FILE_SAVE = 6, + ICON_FILE_EXPORT = 7, + ICON_FILE_ADD = 8, + ICON_FILE_DELETE = 9, + ICON_FILETYPE_TEXT = 10, + ICON_FILETYPE_AUDIO = 11, + ICON_FILETYPE_IMAGE = 12, + ICON_FILETYPE_PLAY = 13, + ICON_FILETYPE_VIDEO = 14, + ICON_FILETYPE_INFO = 15, + ICON_FILE_COPY = 16, + ICON_FILE_CUT = 17, + ICON_FILE_PASTE = 18, + ICON_CURSOR_HAND = 19, + ICON_CURSOR_POINTER = 20, + ICON_CURSOR_CLASSIC = 21, + ICON_PENCIL = 22, + ICON_PENCIL_BIG = 23, + ICON_BRUSH_CLASSIC = 24, + ICON_BRUSH_PAINTER = 25, + ICON_WATER_DROP = 26, + ICON_COLOR_PICKER = 27, + ICON_RUBBER = 28, + ICON_COLOR_BUCKET = 29, + ICON_TEXT_T = 30, + ICON_TEXT_A = 31, + ICON_SCALE = 32, + ICON_RESIZE = 33, + ICON_FILTER_POINT = 34, + ICON_FILTER_BILINEAR = 35, + ICON_CROP = 36, + ICON_CROP_ALPHA = 37, + ICON_SQUARE_TOGGLE = 38, + ICON_SYMMETRY = 39, + ICON_SYMMETRY_HORIZONTAL = 40, + ICON_SYMMETRY_VERTICAL = 41, + ICON_LENS = 42, + ICON_LENS_BIG = 43, + ICON_EYE_ON = 44, + ICON_EYE_OFF = 45, + ICON_FILTER_TOP = 46, + ICON_FILTER = 47, + ICON_TARGET_POINT = 48, + ICON_TARGET_SMALL = 49, + ICON_TARGET_BIG = 50, + ICON_TARGET_MOVE = 51, + ICON_CURSOR_MOVE = 52, + ICON_CURSOR_SCALE = 53, + ICON_CURSOR_SCALE_RIGHT = 54, + ICON_CURSOR_SCALE_LEFT = 55, + ICON_UNDO = 56, + ICON_REDO = 57, + ICON_REREDO = 58, + ICON_MUTATE = 59, + ICON_ROTATE = 60, + ICON_REPEAT = 61, + ICON_SHUFFLE = 62, + ICON_EMPTYBOX = 63, + ICON_TARGET = 64, + ICON_TARGET_SMALL_FILL = 65, + ICON_TARGET_BIG_FILL = 66, + ICON_TARGET_MOVE_FILL = 67, + ICON_CURSOR_MOVE_FILL = 68, + ICON_CURSOR_SCALE_FILL = 69, + ICON_CURSOR_SCALE_RIGHT_FILL = 70, + ICON_CURSOR_SCALE_LEFT_FILL = 71, + ICON_UNDO_FILL = 72, + ICON_REDO_FILL = 73, + ICON_REREDO_FILL = 74, + ICON_MUTATE_FILL = 75, + ICON_ROTATE_FILL = 76, + ICON_REPEAT_FILL = 77, + ICON_SHUFFLE_FILL = 78, + ICON_EMPTYBOX_SMALL = 79, + ICON_BOX = 80, + ICON_BOX_TOP = 81, + ICON_BOX_TOP_RIGHT = 82, + ICON_BOX_RIGHT = 83, + ICON_BOX_BOTTOM_RIGHT = 84, + ICON_BOX_BOTTOM = 85, + ICON_BOX_BOTTOM_LEFT = 86, + ICON_BOX_LEFT = 87, + ICON_BOX_TOP_LEFT = 88, + ICON_BOX_CENTER = 89, + ICON_BOX_CIRCLE_MASK = 90, + ICON_POT = 91, + ICON_ALPHA_MULTIPLY = 92, + ICON_ALPHA_CLEAR = 93, + ICON_DITHERING = 94, + ICON_MIPMAPS = 95, + ICON_BOX_GRID = 96, + ICON_GRID = 97, + ICON_BOX_CORNERS_SMALL = 98, + ICON_BOX_CORNERS_BIG = 99, + ICON_FOUR_BOXES = 100, + ICON_GRID_FILL = 101, + ICON_BOX_MULTISIZE = 102, + ICON_ZOOM_SMALL = 103, + ICON_ZOOM_MEDIUM = 104, + ICON_ZOOM_BIG = 105, + ICON_ZOOM_ALL = 106, + ICON_ZOOM_CENTER = 107, + ICON_BOX_DOTS_SMALL = 108, + ICON_BOX_DOTS_BIG = 109, + ICON_BOX_CONCENTRIC = 110, + ICON_BOX_GRID_BIG = 111, + ICON_OK_TICK = 112, + ICON_CROSS = 113, + ICON_ARROW_LEFT = 114, + ICON_ARROW_RIGHT = 115, + ICON_ARROW_DOWN = 116, + ICON_ARROW_UP = 117, + ICON_ARROW_LEFT_FILL = 118, + ICON_ARROW_RIGHT_FILL = 119, + ICON_ARROW_DOWN_FILL = 120, + ICON_ARROW_UP_FILL = 121, + ICON_AUDIO = 122, + ICON_FX = 123, + ICON_WAVE = 124, + ICON_WAVE_SINUS = 125, + ICON_WAVE_SQUARE = 126, + ICON_WAVE_TRIANGULAR = 127, + ICON_CROSS_SMALL = 128, + ICON_PLAYER_PREVIOUS = 129, + ICON_PLAYER_PLAY_BACK = 130, + ICON_PLAYER_PLAY = 131, + ICON_PLAYER_PAUSE = 132, + ICON_PLAYER_STOP = 133, + ICON_PLAYER_NEXT = 134, + ICON_PLAYER_RECORD = 135, + ICON_MAGNET = 136, + ICON_LOCK_CLOSE = 137, + ICON_LOCK_OPEN = 138, + ICON_CLOCK = 139, + ICON_TOOLS = 140, + ICON_GEAR = 141, + ICON_GEAR_BIG = 142, + ICON_BIN = 143, + ICON_HAND_POINTER = 144, + ICON_LASER = 145, + ICON_COIN = 146, + ICON_EXPLOSION = 147, + ICON_1UP = 148, + ICON_PLAYER = 149, + ICON_PLAYER_JUMP = 150, + ICON_KEY = 151, + ICON_DEMON = 152, + ICON_TEXT_POPUP = 153, + ICON_GEAR_EX = 154, + ICON_CRACK = 155, + ICON_CRACK_POINTS = 156, + ICON_STAR = 157, + ICON_DOOR = 158, + ICON_EXIT = 159, + ICON_MODE_2D = 160, + ICON_MODE_3D = 161, + ICON_CUBE = 162, + ICON_CUBE_FACE_TOP = 163, + ICON_CUBE_FACE_LEFT = 164, + ICON_CUBE_FACE_FRONT = 165, + ICON_CUBE_FACE_BOTTOM = 166, + ICON_CUBE_FACE_RIGHT = 167, + ICON_CUBE_FACE_BACK = 168, + ICON_CAMERA = 169, + ICON_SPECIAL = 170, + ICON_LINK_NET = 171, + ICON_LINK_BOXES = 172, + ICON_LINK_MULTI = 173, + ICON_LINK = 174, + ICON_LINK_BROKE = 175, + ICON_TEXT_NOTES = 176, + ICON_NOTEBOOK = 177, + ICON_SUITCASE = 178, + ICON_SUITCASE_ZIP = 179, + ICON_MAILBOX = 180, + ICON_MONITOR = 181, + ICON_PRINTER = 182, + ICON_PHOTO_CAMERA = 183, + ICON_PHOTO_CAMERA_FLASH = 184, + ICON_HOUSE = 185, + ICON_HEART = 186, + ICON_CORNER = 187, + ICON_VERTICAL_BARS = 188, + ICON_VERTICAL_BARS_FILL = 189, + ICON_LIFE_BARS = 190, + ICON_INFO = 191, + ICON_CROSSLINE = 192, + ICON_HELP = 193, + ICON_FILETYPE_ALPHA = 194, + ICON_FILETYPE_HOME = 195, + ICON_LAYERS_VISIBLE = 196, + ICON_LAYERS = 197, + ICON_WINDOW = 198, + ICON_HIDPI = 199, + ICON_FILETYPE_BINARY = 200, + ICON_HEX = 201, + ICON_SHIELD = 202, + ICON_FILE_NEW = 203, + ICON_FOLDER_ADD = 204, + ICON_ALARM = 205, + ICON_CPU = 206, + ICON_ROM = 207, + ICON_STEP_OVER = 208, + ICON_STEP_INTO = 209, + ICON_STEP_OUT = 210, + ICON_RESTART = 211, + ICON_BREAKPOINT_ON = 212, + ICON_BREAKPOINT_OFF = 213, + ICON_BURGER_MENU = 214, + ICON_CASE_SENSITIVE = 215, + ICON_REG_EXP = 216, + ICON_FOLDER = 217, + ICON_FILE = 218, + ICON_SAND_TIMER = 219, + ICON_220 = 220, + ICON_221 = 221, + ICON_222 = 222, + ICON_223 = 223, + ICON_224 = 224, + ICON_225 = 225, + ICON_226 = 226, + ICON_227 = 227, + ICON_228 = 228, + ICON_229 = 229, + ICON_230 = 230, + ICON_231 = 231, + ICON_232 = 232, + ICON_233 = 233, + ICON_234 = 234, + ICON_235 = 235, + ICON_236 = 236, + ICON_237 = 237, + ICON_238 = 238, + ICON_239 = 239, + ICON_240 = 240, + ICON_241 = 241, + ICON_242 = 242, + ICON_243 = 243, + ICON_244 = 244, + ICON_245 = 245, + ICON_246 = 246, + ICON_247 = 247, + ICON_248 = 248, + ICON_249 = 249, + ICON_250 = 250, + ICON_251 = 251, + ICON_252 = 252, + ICON_253 = 253, + ICON_254 = 254, + ICON_255 = 255, +} GuiIconName; +#endif + +#endif + +#if defined(__cplusplus) +} // Prevents name mangling of functions +#endif + +#endif // RAYGUI_H + +/*********************************************************************************** +* +* RAYGUI IMPLEMENTATION +* +************************************************************************************/ + +#if defined(RAYGUI_IMPLEMENTATION) + +#include // Required for: FILE, fopen(), fclose(), fprintf(), feof(), fscanf(), vsprintf() [GuiLoadStyle(), GuiLoadIcons()] +#include // Required for: malloc(), calloc(), free() [GuiLoadStyle(), GuiLoadIcons()] +#include // Required for: strlen() [GuiTextBox(), GuiValueBox()], memset(), memcpy() +#include // Required for: va_list, va_start(), vfprintf(), va_end() [TextFormat()] +#include // Required for: roundf() [GuiColorPicker()] + +#ifdef __cplusplus + #define RAYGUI_CLITERAL(name) name +#else + #define RAYGUI_CLITERAL(name) (name) +#endif + +// Check if two rectangles are equal, used to validate a slider bounds as an id +#ifndef CHECK_BOUNDS_ID + #define CHECK_BOUNDS_ID(src, dst) ((src.x == dst.x) && (src.y == dst.y) && (src.width == dst.width) && (src.height == dst.height)) +#endif + +#if !defined(RAYGUI_NO_ICONS) && !defined(RAYGUI_CUSTOM_ICONS) + +// Embedded icons, no external file provided +#define RAYGUI_ICON_SIZE 16 // Size of icons in pixels (squared) +#define RAYGUI_ICON_MAX_ICONS 256 // Maximum number of icons +#define RAYGUI_ICON_MAX_NAME_LENGTH 32 // Maximum length of icon name id + +// Icons data is defined by bit array (every bit represents one pixel) +// Those arrays are stored as unsigned int data arrays, so, +// every array element defines 32 pixels (bits) of information +// One icon is defined by 8 int, (8 int * 32 bit = 256 bit = 16*16 pixels) +// NOTE: Number of elemens depend on RAYGUI_ICON_SIZE (by default 16x16 pixels) +#define RAYGUI_ICON_DATA_ELEMENTS (RAYGUI_ICON_SIZE*RAYGUI_ICON_SIZE/32) + +//---------------------------------------------------------------------------------- +// Icons data for all gui possible icons (allocated on data segment by default) +// +// NOTE 1: Every icon is codified in binary form, using 1 bit per pixel, so, +// every 16x16 icon requires 8 integers (16*16/32) to be stored +// +// NOTE 2: A different icon set could be loaded over this array using GuiLoadIcons(), +// but loaded icons set must be same RAYGUI_ICON_SIZE and no more than RAYGUI_ICON_MAX_ICONS +// +// guiIcons size is by default: 256*(16*16/32) = 2048*4 = 8192 bytes = 8 KB +//---------------------------------------------------------------------------------- +static unsigned int guiIcons[RAYGUI_ICON_MAX_ICONS*RAYGUI_ICON_DATA_ELEMENTS] = { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_NONE + 0x3ff80000, 0x2f082008, 0x2042207e, 0x40027fc2, 0x40024002, 0x40024002, 0x40024002, 0x00007ffe, // ICON_FOLDER_FILE_OPEN + 0x3ffe0000, 0x44226422, 0x400247e2, 0x5ffa4002, 0x57ea500a, 0x500a500a, 0x40025ffa, 0x00007ffe, // ICON_FILE_SAVE_CLASSIC + 0x00000000, 0x0042007e, 0x40027fc2, 0x40024002, 0x41024002, 0x44424282, 0x793e4102, 0x00000100, // ICON_FOLDER_OPEN + 0x00000000, 0x0042007e, 0x40027fc2, 0x40024002, 0x41024102, 0x44424102, 0x793e4282, 0x00000000, // ICON_FOLDER_SAVE + 0x3ff00000, 0x201c2010, 0x20042004, 0x21042004, 0x24442284, 0x21042104, 0x20042104, 0x00003ffc, // ICON_FILE_OPEN + 0x3ff00000, 0x201c2010, 0x20042004, 0x21042004, 0x21042104, 0x22842444, 0x20042104, 0x00003ffc, // ICON_FILE_SAVE + 0x3ff00000, 0x201c2010, 0x00042004, 0x20041004, 0x20844784, 0x00841384, 0x20042784, 0x00003ffc, // ICON_FILE_EXPORT + 0x3ff00000, 0x201c2010, 0x20042004, 0x20042004, 0x22042204, 0x22042f84, 0x20042204, 0x00003ffc, // ICON_FILE_ADD + 0x3ff00000, 0x201c2010, 0x20042004, 0x20042004, 0x25042884, 0x25042204, 0x20042884, 0x00003ffc, // ICON_FILE_DELETE + 0x3ff00000, 0x201c2010, 0x20042004, 0x20042ff4, 0x20042ff4, 0x20042ff4, 0x20042004, 0x00003ffc, // ICON_FILETYPE_TEXT + 0x3ff00000, 0x201c2010, 0x27042004, 0x244424c4, 0x26442444, 0x20642664, 0x20042004, 0x00003ffc, // ICON_FILETYPE_AUDIO + 0x3ff00000, 0x201c2010, 0x26042604, 0x20042004, 0x35442884, 0x2414222c, 0x20042004, 0x00003ffc, // ICON_FILETYPE_IMAGE + 0x3ff00000, 0x201c2010, 0x20c42004, 0x22442144, 0x22442444, 0x20c42144, 0x20042004, 0x00003ffc, // ICON_FILETYPE_PLAY + 0x3ff00000, 0x3ffc2ff0, 0x3f3c2ff4, 0x3dbc2eb4, 0x3dbc2bb4, 0x3f3c2eb4, 0x3ffc2ff4, 0x00002ff4, // ICON_FILETYPE_VIDEO + 0x3ff00000, 0x201c2010, 0x21842184, 0x21842004, 0x21842184, 0x21842184, 0x20042184, 0x00003ffc, // ICON_FILETYPE_INFO + 0x0ff00000, 0x381c0810, 0x28042804, 0x28042804, 0x28042804, 0x28042804, 0x20102ffc, 0x00003ff0, // ICON_FILE_COPY + 0x00000000, 0x701c0000, 0x079c1e14, 0x55a000f0, 0x079c00f0, 0x701c1e14, 0x00000000, 0x00000000, // ICON_FILE_CUT + 0x01c00000, 0x13e41bec, 0x3f841004, 0x204420c4, 0x20442044, 0x20442044, 0x207c2044, 0x00003fc0, // ICON_FILE_PASTE + 0x00000000, 0x3aa00fe0, 0x2abc2aa0, 0x2aa42aa4, 0x20042aa4, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_CURSOR_HAND + 0x00000000, 0x003c000c, 0x030800c8, 0x30100c10, 0x10202020, 0x04400840, 0x01800280, 0x00000000, // ICON_CURSOR_POINTER + 0x00000000, 0x00180000, 0x01f00078, 0x03e007f0, 0x07c003e0, 0x04000e40, 0x00000000, 0x00000000, // ICON_CURSOR_CLASSIC + 0x00000000, 0x04000000, 0x11000a00, 0x04400a80, 0x01100220, 0x00580088, 0x00000038, 0x00000000, // ICON_PENCIL + 0x04000000, 0x15000a00, 0x50402880, 0x14102820, 0x05040a08, 0x015c028c, 0x007c00bc, 0x00000000, // ICON_PENCIL_BIG + 0x01c00000, 0x01400140, 0x01400140, 0x0ff80140, 0x0ff80808, 0x0aa80808, 0x0aa80aa8, 0x00000ff8, // ICON_BRUSH_CLASSIC + 0x1ffc0000, 0x5ffc7ffe, 0x40004000, 0x00807f80, 0x01c001c0, 0x01c001c0, 0x01c001c0, 0x00000080, // ICON_BRUSH_PAINTER + 0x00000000, 0x00800000, 0x01c00080, 0x03e001c0, 0x07f003e0, 0x036006f0, 0x000001c0, 0x00000000, // ICON_WATER_DROP + 0x00000000, 0x3e003800, 0x1f803f80, 0x0c201e40, 0x02080c10, 0x00840104, 0x00380044, 0x00000000, // ICON_COLOR_PICKER + 0x00000000, 0x07800300, 0x1fe00fc0, 0x3f883fd0, 0x0e021f04, 0x02040402, 0x00f00108, 0x00000000, // ICON_RUBBER + 0x00c00000, 0x02800140, 0x08200440, 0x20081010, 0x2ffe3004, 0x03f807fc, 0x00e001f0, 0x00000040, // ICON_COLOR_BUCKET + 0x00000000, 0x21843ffc, 0x01800180, 0x01800180, 0x01800180, 0x01800180, 0x03c00180, 0x00000000, // ICON_TEXT_T + 0x00800000, 0x01400180, 0x06200340, 0x0c100620, 0x1ff80c10, 0x380c1808, 0x70067004, 0x0000f80f, // ICON_TEXT_A + 0x78000000, 0x50004000, 0x00004800, 0x03c003c0, 0x03c003c0, 0x00100000, 0x0002000a, 0x0000000e, // ICON_SCALE + 0x75560000, 0x5e004002, 0x54001002, 0x41001202, 0x408200fe, 0x40820082, 0x40820082, 0x00006afe, // ICON_RESIZE + 0x00000000, 0x3f003f00, 0x3f003f00, 0x3f003f00, 0x00400080, 0x001c0020, 0x001c001c, 0x00000000, // ICON_FILTER_POINT + 0x6d800000, 0x00004080, 0x40804080, 0x40800000, 0x00406d80, 0x001c0020, 0x001c001c, 0x00000000, // ICON_FILTER_BILINEAR + 0x40080000, 0x1ffe2008, 0x14081008, 0x11081208, 0x10481088, 0x10081028, 0x10047ff8, 0x00001002, // ICON_CROP + 0x00100000, 0x3ffc0010, 0x2ab03550, 0x22b02550, 0x20b02150, 0x20302050, 0x2000fff0, 0x00002000, // ICON_CROP_ALPHA + 0x40000000, 0x1ff82000, 0x04082808, 0x01082208, 0x00482088, 0x00182028, 0x35542008, 0x00000002, // ICON_SQUARE_TOGGLE + 0x00000000, 0x02800280, 0x06c006c0, 0x0ea00ee0, 0x1e901eb0, 0x3e883e98, 0x7efc7e8c, 0x00000000, // ICON_SYMMETRY + 0x01000000, 0x05600100, 0x1d480d50, 0x7d423d44, 0x3d447d42, 0x0d501d48, 0x01000560, 0x00000100, // ICON_SYMMETRY_HORIZONTAL + 0x01800000, 0x04200240, 0x10080810, 0x00001ff8, 0x00007ffe, 0x0ff01ff8, 0x03c007e0, 0x00000180, // ICON_SYMMETRY_VERTICAL + 0x00000000, 0x010800f0, 0x02040204, 0x02040204, 0x07f00308, 0x1c000e00, 0x30003800, 0x00000000, // ICON_LENS + 0x00000000, 0x061803f0, 0x08240c0c, 0x08040814, 0x0c0c0804, 0x23f01618, 0x18002400, 0x00000000, // ICON_LENS_BIG + 0x00000000, 0x00000000, 0x1c7007c0, 0x638e3398, 0x1c703398, 0x000007c0, 0x00000000, 0x00000000, // ICON_EYE_ON + 0x00000000, 0x10002000, 0x04700fc0, 0x610e3218, 0x1c703098, 0x001007a0, 0x00000008, 0x00000000, // ICON_EYE_OFF + 0x00000000, 0x00007ffc, 0x40047ffc, 0x10102008, 0x04400820, 0x02800280, 0x02800280, 0x00000100, // ICON_FILTER_TOP + 0x00000000, 0x40027ffe, 0x10082004, 0x04200810, 0x02400240, 0x02400240, 0x01400240, 0x000000c0, // ICON_FILTER + 0x00800000, 0x00800080, 0x00000080, 0x3c9e0000, 0x00000000, 0x00800080, 0x00800080, 0x00000000, // ICON_TARGET_POINT + 0x00800000, 0x00800080, 0x00800080, 0x3f7e01c0, 0x008001c0, 0x00800080, 0x00800080, 0x00000000, // ICON_TARGET_SMALL + 0x00800000, 0x00800080, 0x03e00080, 0x3e3e0220, 0x03e00220, 0x00800080, 0x00800080, 0x00000000, // ICON_TARGET_BIG + 0x01000000, 0x04400280, 0x01000100, 0x43842008, 0x43849ab2, 0x01002008, 0x04400100, 0x01000280, // ICON_TARGET_MOVE + 0x01000000, 0x04400280, 0x01000100, 0x41042108, 0x41049ff2, 0x01002108, 0x04400100, 0x01000280, // ICON_CURSOR_MOVE + 0x781e0000, 0x500a4002, 0x04204812, 0x00000240, 0x02400000, 0x48120420, 0x4002500a, 0x0000781e, // ICON_CURSOR_SCALE + 0x00000000, 0x20003c00, 0x24002800, 0x01000200, 0x00400080, 0x00140024, 0x003c0004, 0x00000000, // ICON_CURSOR_SCALE_RIGHT + 0x00000000, 0x0004003c, 0x00240014, 0x00800040, 0x02000100, 0x28002400, 0x3c002000, 0x00000000, // ICON_CURSOR_SCALE_LEFT + 0x00000000, 0x00100020, 0x10101fc8, 0x10001020, 0x10001000, 0x10001000, 0x00001fc0, 0x00000000, // ICON_UNDO + 0x00000000, 0x08000400, 0x080813f8, 0x00080408, 0x00080008, 0x00080008, 0x000003f8, 0x00000000, // ICON_REDO + 0x00000000, 0x3ffc0000, 0x20042004, 0x20002000, 0x20402000, 0x3f902020, 0x00400020, 0x00000000, // ICON_REREDO + 0x00000000, 0x3ffc0000, 0x20042004, 0x27fc2004, 0x20202000, 0x3fc82010, 0x00200010, 0x00000000, // ICON_MUTATE + 0x00000000, 0x0ff00000, 0x10081818, 0x11801008, 0x10001180, 0x18101020, 0x00100fc8, 0x00000020, // ICON_ROTATE + 0x00000000, 0x04000200, 0x240429fc, 0x20042204, 0x20442004, 0x3f942024, 0x00400020, 0x00000000, // ICON_REPEAT + 0x00000000, 0x20001000, 0x22104c0e, 0x00801120, 0x11200040, 0x4c0e2210, 0x10002000, 0x00000000, // ICON_SHUFFLE + 0x7ffe0000, 0x50024002, 0x44024802, 0x41024202, 0x40424082, 0x40124022, 0x4002400a, 0x00007ffe, // ICON_EMPTYBOX + 0x00800000, 0x03e00080, 0x08080490, 0x3c9e0808, 0x08080808, 0x03e00490, 0x00800080, 0x00000000, // ICON_TARGET + 0x00800000, 0x00800080, 0x00800080, 0x3ffe01c0, 0x008001c0, 0x00800080, 0x00800080, 0x00000000, // ICON_TARGET_SMALL_FILL + 0x00800000, 0x00800080, 0x03e00080, 0x3ffe03e0, 0x03e003e0, 0x00800080, 0x00800080, 0x00000000, // ICON_TARGET_BIG_FILL + 0x01000000, 0x07c00380, 0x01000100, 0x638c2008, 0x638cfbbe, 0x01002008, 0x07c00100, 0x01000380, // ICON_TARGET_MOVE_FILL + 0x01000000, 0x07c00380, 0x01000100, 0x610c2108, 0x610cfffe, 0x01002108, 0x07c00100, 0x01000380, // ICON_CURSOR_MOVE_FILL + 0x781e0000, 0x6006700e, 0x04204812, 0x00000240, 0x02400000, 0x48120420, 0x700e6006, 0x0000781e, // ICON_CURSOR_SCALE_FILL + 0x00000000, 0x38003c00, 0x24003000, 0x01000200, 0x00400080, 0x000c0024, 0x003c001c, 0x00000000, // ICON_CURSOR_SCALE_RIGHT_FILL + 0x00000000, 0x001c003c, 0x0024000c, 0x00800040, 0x02000100, 0x30002400, 0x3c003800, 0x00000000, // ICON_CURSOR_SCALE_LEFT_FILL + 0x00000000, 0x00300020, 0x10301ff8, 0x10001020, 0x10001000, 0x10001000, 0x00001fc0, 0x00000000, // ICON_UNDO_FILL + 0x00000000, 0x0c000400, 0x0c081ff8, 0x00080408, 0x00080008, 0x00080008, 0x000003f8, 0x00000000, // ICON_REDO_FILL + 0x00000000, 0x3ffc0000, 0x20042004, 0x20002000, 0x20402000, 0x3ff02060, 0x00400060, 0x00000000, // ICON_REREDO_FILL + 0x00000000, 0x3ffc0000, 0x20042004, 0x27fc2004, 0x20202000, 0x3ff82030, 0x00200030, 0x00000000, // ICON_MUTATE_FILL + 0x00000000, 0x0ff00000, 0x10081818, 0x11801008, 0x10001180, 0x18301020, 0x00300ff8, 0x00000020, // ICON_ROTATE_FILL + 0x00000000, 0x06000200, 0x26042ffc, 0x20042204, 0x20442004, 0x3ff42064, 0x00400060, 0x00000000, // ICON_REPEAT_FILL + 0x00000000, 0x30001000, 0x32107c0e, 0x00801120, 0x11200040, 0x7c0e3210, 0x10003000, 0x00000000, // ICON_SHUFFLE_FILL + 0x00000000, 0x30043ffc, 0x24042804, 0x21042204, 0x20442084, 0x20142024, 0x3ffc200c, 0x00000000, // ICON_EMPTYBOX_SMALL + 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_BOX + 0x00000000, 0x23c43ffc, 0x23c423c4, 0x200423c4, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_BOX_TOP + 0x00000000, 0x3e043ffc, 0x3e043e04, 0x20043e04, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_BOX_TOP_RIGHT + 0x00000000, 0x20043ffc, 0x20042004, 0x3e043e04, 0x3e043e04, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_BOX_RIGHT + 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x3e042004, 0x3e043e04, 0x3ffc3e04, 0x00000000, // ICON_BOX_BOTTOM_RIGHT + 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x23c42004, 0x23c423c4, 0x3ffc23c4, 0x00000000, // ICON_BOX_BOTTOM + 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x207c2004, 0x207c207c, 0x3ffc207c, 0x00000000, // ICON_BOX_BOTTOM_LEFT + 0x00000000, 0x20043ffc, 0x20042004, 0x207c207c, 0x207c207c, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_BOX_LEFT + 0x00000000, 0x207c3ffc, 0x207c207c, 0x2004207c, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_BOX_TOP_LEFT + 0x00000000, 0x20043ffc, 0x20042004, 0x23c423c4, 0x23c423c4, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_BOX_CENTER + 0x7ffe0000, 0x40024002, 0x47e24182, 0x4ff247e2, 0x47e24ff2, 0x418247e2, 0x40024002, 0x00007ffe, // ICON_BOX_CIRCLE_MASK + 0x7fff0000, 0x40014001, 0x40014001, 0x49555ddd, 0x4945495d, 0x400149c5, 0x40014001, 0x00007fff, // ICON_POT + 0x7ffe0000, 0x53327332, 0x44ce4cce, 0x41324332, 0x404e40ce, 0x48125432, 0x4006540e, 0x00007ffe, // ICON_ALPHA_MULTIPLY + 0x7ffe0000, 0x53327332, 0x44ce4cce, 0x41324332, 0x5c4e40ce, 0x44124432, 0x40065c0e, 0x00007ffe, // ICON_ALPHA_CLEAR + 0x7ffe0000, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x00007ffe, // ICON_DITHERING + 0x07fe0000, 0x1ffa0002, 0x7fea000a, 0x402a402a, 0x5b2a512a, 0x5128552a, 0x40205128, 0x00007fe0, // ICON_MIPMAPS + 0x00000000, 0x1ff80000, 0x12481248, 0x12481ff8, 0x1ff81248, 0x12481248, 0x00001ff8, 0x00000000, // ICON_BOX_GRID + 0x12480000, 0x7ffe1248, 0x12481248, 0x12487ffe, 0x7ffe1248, 0x12481248, 0x12487ffe, 0x00001248, // ICON_GRID + 0x00000000, 0x1c380000, 0x1c3817e8, 0x08100810, 0x08100810, 0x17e81c38, 0x00001c38, 0x00000000, // ICON_BOX_CORNERS_SMALL + 0x700e0000, 0x700e5ffa, 0x20042004, 0x20042004, 0x20042004, 0x20042004, 0x5ffa700e, 0x0000700e, // ICON_BOX_CORNERS_BIG + 0x3f7e0000, 0x21422142, 0x21422142, 0x00003f7e, 0x21423f7e, 0x21422142, 0x3f7e2142, 0x00000000, // ICON_FOUR_BOXES + 0x00000000, 0x3bb80000, 0x3bb83bb8, 0x3bb80000, 0x3bb83bb8, 0x3bb80000, 0x3bb83bb8, 0x00000000, // ICON_GRID_FILL + 0x7ffe0000, 0x7ffe7ffe, 0x77fe7000, 0x77fe77fe, 0x777e7700, 0x777e777e, 0x777e777e, 0x0000777e, // ICON_BOX_MULTISIZE + 0x781e0000, 0x40024002, 0x00004002, 0x01800000, 0x00000180, 0x40020000, 0x40024002, 0x0000781e, // ICON_ZOOM_SMALL + 0x781e0000, 0x40024002, 0x00004002, 0x03c003c0, 0x03c003c0, 0x40020000, 0x40024002, 0x0000781e, // ICON_ZOOM_MEDIUM + 0x781e0000, 0x40024002, 0x07e04002, 0x07e007e0, 0x07e007e0, 0x400207e0, 0x40024002, 0x0000781e, // ICON_ZOOM_BIG + 0x781e0000, 0x5ffa4002, 0x1ff85ffa, 0x1ff81ff8, 0x1ff81ff8, 0x5ffa1ff8, 0x40025ffa, 0x0000781e, // ICON_ZOOM_ALL + 0x00000000, 0x2004381c, 0x00002004, 0x00000000, 0x00000000, 0x20040000, 0x381c2004, 0x00000000, // ICON_ZOOM_CENTER + 0x00000000, 0x1db80000, 0x10081008, 0x10080000, 0x00001008, 0x10081008, 0x00001db8, 0x00000000, // ICON_BOX_DOTS_SMALL + 0x35560000, 0x00002002, 0x00002002, 0x00002002, 0x00002002, 0x00002002, 0x35562002, 0x00000000, // ICON_BOX_DOTS_BIG + 0x7ffe0000, 0x40024002, 0x48124ff2, 0x49924812, 0x48124992, 0x4ff24812, 0x40024002, 0x00007ffe, // ICON_BOX_CONCENTRIC + 0x00000000, 0x10841ffc, 0x10841084, 0x1ffc1084, 0x10841084, 0x10841084, 0x00001ffc, 0x00000000, // ICON_BOX_GRID_BIG + 0x00000000, 0x00000000, 0x10000000, 0x04000800, 0x01040200, 0x00500088, 0x00000020, 0x00000000, // ICON_OK_TICK + 0x00000000, 0x10080000, 0x04200810, 0x01800240, 0x02400180, 0x08100420, 0x00001008, 0x00000000, // ICON_CROSS + 0x00000000, 0x02000000, 0x00800100, 0x00200040, 0x00200010, 0x00800040, 0x02000100, 0x00000000, // ICON_ARROW_LEFT + 0x00000000, 0x00400000, 0x01000080, 0x04000200, 0x04000800, 0x01000200, 0x00400080, 0x00000000, // ICON_ARROW_RIGHT + 0x00000000, 0x00000000, 0x00000000, 0x08081004, 0x02200410, 0x00800140, 0x00000000, 0x00000000, // ICON_ARROW_DOWN + 0x00000000, 0x00000000, 0x01400080, 0x04100220, 0x10040808, 0x00000000, 0x00000000, 0x00000000, // ICON_ARROW_UP + 0x00000000, 0x02000000, 0x03800300, 0x03e003c0, 0x03e003f0, 0x038003c0, 0x02000300, 0x00000000, // ICON_ARROW_LEFT_FILL + 0x00000000, 0x00400000, 0x01c000c0, 0x07c003c0, 0x07c00fc0, 0x01c003c0, 0x004000c0, 0x00000000, // ICON_ARROW_RIGHT_FILL + 0x00000000, 0x00000000, 0x00000000, 0x0ff81ffc, 0x03e007f0, 0x008001c0, 0x00000000, 0x00000000, // ICON_ARROW_DOWN_FILL + 0x00000000, 0x00000000, 0x01c00080, 0x07f003e0, 0x1ffc0ff8, 0x00000000, 0x00000000, 0x00000000, // ICON_ARROW_UP_FILL + 0x00000000, 0x18a008c0, 0x32881290, 0x24822686, 0x26862482, 0x12903288, 0x08c018a0, 0x00000000, // ICON_AUDIO + 0x00000000, 0x04800780, 0x004000c0, 0x662000f0, 0x08103c30, 0x130a0e18, 0x0000318e, 0x00000000, // ICON_FX + 0x00000000, 0x00800000, 0x08880888, 0x2aaa0a8a, 0x0a8a2aaa, 0x08880888, 0x00000080, 0x00000000, // ICON_WAVE + 0x00000000, 0x00600000, 0x01080090, 0x02040108, 0x42044204, 0x24022402, 0x00001800, 0x00000000, // ICON_WAVE_SINUS + 0x00000000, 0x07f80000, 0x04080408, 0x04080408, 0x04080408, 0x7c0e0408, 0x00000000, 0x00000000, // ICON_WAVE_SQUARE + 0x00000000, 0x00000000, 0x00a00040, 0x22084110, 0x08021404, 0x00000000, 0x00000000, 0x00000000, // ICON_WAVE_TRIANGULAR + 0x00000000, 0x00000000, 0x04200000, 0x01800240, 0x02400180, 0x00000420, 0x00000000, 0x00000000, // ICON_CROSS_SMALL + 0x00000000, 0x18380000, 0x12281428, 0x10a81128, 0x112810a8, 0x14281228, 0x00001838, 0x00000000, // ICON_PLAYER_PREVIOUS + 0x00000000, 0x18000000, 0x11801600, 0x10181060, 0x10601018, 0x16001180, 0x00001800, 0x00000000, // ICON_PLAYER_PLAY_BACK + 0x00000000, 0x00180000, 0x01880068, 0x18080608, 0x06081808, 0x00680188, 0x00000018, 0x00000000, // ICON_PLAYER_PLAY + 0x00000000, 0x1e780000, 0x12481248, 0x12481248, 0x12481248, 0x12481248, 0x00001e78, 0x00000000, // ICON_PLAYER_PAUSE + 0x00000000, 0x1ff80000, 0x10081008, 0x10081008, 0x10081008, 0x10081008, 0x00001ff8, 0x00000000, // ICON_PLAYER_STOP + 0x00000000, 0x1c180000, 0x14481428, 0x15081488, 0x14881508, 0x14281448, 0x00001c18, 0x00000000, // ICON_PLAYER_NEXT + 0x00000000, 0x03c00000, 0x08100420, 0x10081008, 0x10081008, 0x04200810, 0x000003c0, 0x00000000, // ICON_PLAYER_RECORD + 0x00000000, 0x0c3007e0, 0x13c81818, 0x14281668, 0x14281428, 0x1c381c38, 0x08102244, 0x00000000, // ICON_MAGNET + 0x07c00000, 0x08200820, 0x3ff80820, 0x23882008, 0x21082388, 0x20082108, 0x1ff02008, 0x00000000, // ICON_LOCK_CLOSE + 0x07c00000, 0x08000800, 0x3ff80800, 0x23882008, 0x21082388, 0x20082108, 0x1ff02008, 0x00000000, // ICON_LOCK_OPEN + 0x01c00000, 0x0c180770, 0x3086188c, 0x60832082, 0x60034781, 0x30062002, 0x0c18180c, 0x01c00770, // ICON_CLOCK + 0x0a200000, 0x1b201b20, 0x04200e20, 0x04200420, 0x04700420, 0x0e700e70, 0x0e700e70, 0x04200e70, // ICON_TOOLS + 0x01800000, 0x3bdc318c, 0x0ff01ff8, 0x7c3e1e78, 0x1e787c3e, 0x1ff80ff0, 0x318c3bdc, 0x00000180, // ICON_GEAR + 0x01800000, 0x3ffc318c, 0x1c381ff8, 0x781e1818, 0x1818781e, 0x1ff81c38, 0x318c3ffc, 0x00000180, // ICON_GEAR_BIG + 0x00000000, 0x08080ff8, 0x08081ffc, 0x0aa80aa8, 0x0aa80aa8, 0x0aa80aa8, 0x08080aa8, 0x00000ff8, // ICON_BIN + 0x00000000, 0x00000000, 0x20043ffc, 0x08043f84, 0x04040f84, 0x04040784, 0x000007fc, 0x00000000, // ICON_HAND_POINTER + 0x00000000, 0x24400400, 0x00001480, 0x6efe0e00, 0x00000e00, 0x24401480, 0x00000400, 0x00000000, // ICON_LASER + 0x00000000, 0x03c00000, 0x08300460, 0x11181118, 0x11181118, 0x04600830, 0x000003c0, 0x00000000, // ICON_COIN + 0x00000000, 0x10880080, 0x06c00810, 0x366c07e0, 0x07e00240, 0x00001768, 0x04200240, 0x00000000, // ICON_EXPLOSION + 0x00000000, 0x3d280000, 0x2528252c, 0x3d282528, 0x05280528, 0x05e80528, 0x00000000, 0x00000000, // ICON_1UP + 0x01800000, 0x03c003c0, 0x018003c0, 0x0ff007e0, 0x0bd00bd0, 0x0a500bd0, 0x02400240, 0x02400240, // ICON_PLAYER + 0x01800000, 0x03c003c0, 0x118013c0, 0x03c81ff8, 0x07c003c8, 0x04400440, 0x0c080478, 0x00000000, // ICON_PLAYER_JUMP + 0x3ff80000, 0x30183ff8, 0x30183018, 0x3ff83ff8, 0x03000300, 0x03c003c0, 0x03e00300, 0x000003e0, // ICON_KEY + 0x3ff80000, 0x3ff83ff8, 0x33983ff8, 0x3ff83398, 0x3ff83ff8, 0x00000540, 0x0fe00aa0, 0x00000fe0, // ICON_DEMON + 0x00000000, 0x0ff00000, 0x20041008, 0x25442004, 0x10082004, 0x06000bf0, 0x00000300, 0x00000000, // ICON_TEXT_POPUP + 0x00000000, 0x11440000, 0x07f00be8, 0x1c1c0e38, 0x1c1c0c18, 0x07f00e38, 0x11440be8, 0x00000000, // ICON_GEAR_EX + 0x00000000, 0x20080000, 0x0c601010, 0x07c00fe0, 0x07c007c0, 0x0c600fe0, 0x20081010, 0x00000000, // ICON_CRACK + 0x00000000, 0x20080000, 0x0c601010, 0x04400fe0, 0x04405554, 0x0c600fe0, 0x20081010, 0x00000000, // ICON_CRACK_POINTS + 0x00000000, 0x00800080, 0x01c001c0, 0x1ffc3ffe, 0x03e007f0, 0x07f003e0, 0x0c180770, 0x00000808, // ICON_STAR + 0x0ff00000, 0x08180810, 0x08100818, 0x0a100810, 0x08180810, 0x08100818, 0x08100810, 0x00001ff8, // ICON_DOOR + 0x0ff00000, 0x08100810, 0x08100810, 0x10100010, 0x4f902010, 0x10102010, 0x08100010, 0x00000ff0, // ICON_EXIT + 0x00040000, 0x001f000e, 0x0ef40004, 0x12f41284, 0x0ef41214, 0x10040004, 0x7ffc3004, 0x10003000, // ICON_MODE_2D + 0x78040000, 0x501f600e, 0x0ef44004, 0x12f41284, 0x0ef41284, 0x10140004, 0x7ffc300c, 0x10003000, // ICON_MODE_3D + 0x7fe00000, 0x50286030, 0x47fe4804, 0x44224402, 0x44224422, 0x241275e2, 0x0c06140a, 0x000007fe, // ICON_CUBE + 0x7fe00000, 0x5ff87ff0, 0x47fe4ffc, 0x44224402, 0x44224422, 0x241275e2, 0x0c06140a, 0x000007fe, // ICON_CUBE_FACE_TOP + 0x7fe00000, 0x50386030, 0x47c2483c, 0x443e443e, 0x443e443e, 0x241e75fe, 0x0c06140e, 0x000007fe, // ICON_CUBE_FACE_LEFT + 0x7fe00000, 0x50286030, 0x47fe4804, 0x47fe47fe, 0x47fe47fe, 0x27fe77fe, 0x0ffe17fe, 0x000007fe, // ICON_CUBE_FACE_FRONT + 0x7fe00000, 0x50286030, 0x47fe4804, 0x44224402, 0x44224422, 0x3bf27be2, 0x0bfe1bfa, 0x000007fe, // ICON_CUBE_FACE_BOTTOM + 0x7fe00000, 0x70286030, 0x7ffe7804, 0x7c227c02, 0x7c227c22, 0x3c127de2, 0x0c061c0a, 0x000007fe, // ICON_CUBE_FACE_RIGHT + 0x7fe00000, 0x6fe85ff0, 0x781e77e4, 0x7be27be2, 0x7be27be2, 0x24127be2, 0x0c06140a, 0x000007fe, // ICON_CUBE_FACE_BACK + 0x00000000, 0x2a0233fe, 0x22022602, 0x22022202, 0x2a022602, 0x00a033fe, 0x02080110, 0x00000000, // ICON_CAMERA + 0x00000000, 0x200c3ffc, 0x000c000c, 0x3ffc000c, 0x30003000, 0x30003000, 0x3ffc3004, 0x00000000, // ICON_SPECIAL + 0x00000000, 0x0022003e, 0x012201e2, 0x0100013e, 0x01000100, 0x79000100, 0x4f004900, 0x00007800, // ICON_LINK_NET + 0x00000000, 0x44007c00, 0x45004600, 0x00627cbe, 0x00620022, 0x45007cbe, 0x44004600, 0x00007c00, // ICON_LINK_BOXES + 0x00000000, 0x0044007c, 0x0010007c, 0x3f100010, 0x3f1021f0, 0x3f100010, 0x3f0021f0, 0x00000000, // ICON_LINK_MULTI + 0x00000000, 0x0044007c, 0x00440044, 0x0010007c, 0x00100010, 0x44107c10, 0x440047f0, 0x00007c00, // ICON_LINK + 0x00000000, 0x0044007c, 0x00440044, 0x0000007c, 0x00000010, 0x44007c10, 0x44004550, 0x00007c00, // ICON_LINK_BROKE + 0x02a00000, 0x22a43ffc, 0x20042004, 0x20042ff4, 0x20042ff4, 0x20042ff4, 0x20042004, 0x00003ffc, // ICON_TEXT_NOTES + 0x3ffc0000, 0x20042004, 0x245e27c4, 0x27c42444, 0x2004201e, 0x201e2004, 0x20042004, 0x00003ffc, // ICON_NOTEBOOK + 0x00000000, 0x07e00000, 0x04200420, 0x24243ffc, 0x24242424, 0x24242424, 0x3ffc2424, 0x00000000, // ICON_SUITCASE + 0x00000000, 0x0fe00000, 0x08200820, 0x40047ffc, 0x7ffc5554, 0x40045554, 0x7ffc4004, 0x00000000, // ICON_SUITCASE_ZIP + 0x00000000, 0x20043ffc, 0x3ffc2004, 0x13c81008, 0x100813c8, 0x10081008, 0x1ff81008, 0x00000000, // ICON_MAILBOX + 0x00000000, 0x40027ffe, 0x5ffa5ffa, 0x5ffa5ffa, 0x40025ffa, 0x03c07ffe, 0x1ff81ff8, 0x00000000, // ICON_MONITOR + 0x0ff00000, 0x6bfe7ffe, 0x7ffe7ffe, 0x68167ffe, 0x08106816, 0x08100810, 0x0ff00810, 0x00000000, // ICON_PRINTER + 0x3ff80000, 0xfffe2008, 0x870a8002, 0x904a888a, 0x904a904a, 0x870a888a, 0xfffe8002, 0x00000000, // ICON_PHOTO_CAMERA + 0x0fc00000, 0xfcfe0cd8, 0x8002fffe, 0x84428382, 0x84428442, 0x80028382, 0xfffe8002, 0x00000000, // ICON_PHOTO_CAMERA_FLASH + 0x00000000, 0x02400180, 0x08100420, 0x20041008, 0x23c42004, 0x22442244, 0x3ffc2244, 0x00000000, // ICON_HOUSE + 0x00000000, 0x1c700000, 0x3ff83ef8, 0x3ff83ff8, 0x0fe01ff0, 0x038007c0, 0x00000100, 0x00000000, // ICON_HEART + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0xe000c000, // ICON_CORNER + 0x00000000, 0x14001c00, 0x15c01400, 0x15401540, 0x155c1540, 0x15541554, 0x1ddc1554, 0x00000000, // ICON_VERTICAL_BARS + 0x00000000, 0x03000300, 0x1b001b00, 0x1b601b60, 0x1b6c1b60, 0x1b6c1b6c, 0x1b6c1b6c, 0x00000000, // ICON_VERTICAL_BARS_FILL + 0x00000000, 0x00000000, 0x403e7ffe, 0x7ffe403e, 0x7ffe0000, 0x43fe43fe, 0x00007ffe, 0x00000000, // ICON_LIFE_BARS + 0x7ffc0000, 0x43844004, 0x43844284, 0x43844004, 0x42844284, 0x42844284, 0x40044384, 0x00007ffc, // ICON_INFO + 0x40008000, 0x10002000, 0x04000800, 0x01000200, 0x00400080, 0x00100020, 0x00040008, 0x00010002, // ICON_CROSSLINE + 0x00000000, 0x1ff01ff0, 0x18301830, 0x1f001830, 0x03001f00, 0x00000300, 0x03000300, 0x00000000, // ICON_HELP + 0x3ff00000, 0x2abc3550, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x00003ffc, // ICON_FILETYPE_ALPHA + 0x3ff00000, 0x201c2010, 0x22442184, 0x28142424, 0x29942814, 0x2ff42994, 0x20042004, 0x00003ffc, // ICON_FILETYPE_HOME + 0x07fe0000, 0x04020402, 0x7fe20402, 0x44224422, 0x44224422, 0x402047fe, 0x40204020, 0x00007fe0, // ICON_LAYERS_VISIBLE + 0x07fe0000, 0x04020402, 0x7c020402, 0x44024402, 0x44024402, 0x402047fe, 0x40204020, 0x00007fe0, // ICON_LAYERS + 0x00000000, 0x40027ffe, 0x7ffe4002, 0x40024002, 0x40024002, 0x40024002, 0x7ffe4002, 0x00000000, // ICON_WINDOW + 0x09100000, 0x09f00910, 0x09100910, 0x00000910, 0x24a2779e, 0x27a224a2, 0x709e20a2, 0x00000000, // ICON_HIDPI + 0x3ff00000, 0x201c2010, 0x2a842e84, 0x2e842a84, 0x2ba42004, 0x2aa42aa4, 0x20042ba4, 0x00003ffc, // ICON_FILETYPE_BINARY + 0x00000000, 0x00000000, 0x00120012, 0x4a5e4bd2, 0x485233d2, 0x00004bd2, 0x00000000, 0x00000000, // ICON_HEX + 0x01800000, 0x381c0660, 0x23c42004, 0x23c42044, 0x13c82204, 0x08101008, 0x02400420, 0x00000180, // ICON_SHIELD + 0x007e0000, 0x20023fc2, 0x40227fe2, 0x400a403a, 0x400a400a, 0x400a400a, 0x4008400e, 0x00007ff8, // ICON_FILE_NEW + 0x00000000, 0x0042007e, 0x40027fc2, 0x44024002, 0x5f024402, 0x44024402, 0x7ffe4002, 0x00000000, // ICON_FOLDER_ADD + 0x44220000, 0x12482244, 0xf3cf0000, 0x14280420, 0x48122424, 0x08100810, 0x1ff81008, 0x03c00420, // ICON_ALARM + 0x0aa00000, 0x1ff80aa0, 0x1068700e, 0x1008706e, 0x1008700e, 0x1008700e, 0x0aa01ff8, 0x00000aa0, // ICON_CPU + 0x07e00000, 0x04201db8, 0x04a01c38, 0x04a01d38, 0x04a01d38, 0x04a01d38, 0x04201d38, 0x000007e0, // ICON_ROM + 0x00000000, 0x03c00000, 0x3c382ff0, 0x3c04380c, 0x01800000, 0x03c003c0, 0x00000180, 0x00000000, // ICON_STEP_OVER + 0x01800000, 0x01800180, 0x01800180, 0x03c007e0, 0x00000180, 0x01800000, 0x03c003c0, 0x00000180, // ICON_STEP_INTO + 0x01800000, 0x07e003c0, 0x01800180, 0x01800180, 0x00000180, 0x01800000, 0x03c003c0, 0x00000180, // ICON_STEP_OUT + 0x00000000, 0x0ff003c0, 0x181c1c34, 0x303c301c, 0x30003000, 0x1c301800, 0x03c00ff0, 0x00000000, // ICON_RESTART + 0x00000000, 0x00000000, 0x07e003c0, 0x0ff00ff0, 0x0ff00ff0, 0x03c007e0, 0x00000000, 0x00000000, // ICON_BREAKPOINT_ON + 0x00000000, 0x00000000, 0x042003c0, 0x08100810, 0x08100810, 0x03c00420, 0x00000000, 0x00000000, // ICON_BREAKPOINT_OFF + 0x00000000, 0x00000000, 0x1ff81ff8, 0x1ff80000, 0x00001ff8, 0x1ff81ff8, 0x00000000, 0x00000000, // ICON_BURGER_MENU + 0x00000000, 0x00000000, 0x00880070, 0x0c880088, 0x1e8810f8, 0x3e881288, 0x00000000, 0x00000000, // ICON_CASE_SENSITIVE + 0x00000000, 0x02000000, 0x07000a80, 0x07001fc0, 0x02000a80, 0x00300030, 0x00000000, 0x00000000, // ICON_REG_EXP + 0x00000000, 0x0042007e, 0x40027fc2, 0x40024002, 0x40024002, 0x40024002, 0x7ffe4002, 0x00000000, // ICON_FOLDER + 0x3ff00000, 0x201c2010, 0x20042004, 0x20042004, 0x20042004, 0x20042004, 0x20042004, 0x00003ffc, // ICON_FILE + 0x1ff00000, 0x20082008, 0x17d02fe8, 0x05400ba0, 0x09200540, 0x23881010, 0x2fe827c8, 0x00001ff0, // ICON_SAND_TIMER + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_220 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_221 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_222 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_223 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_224 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_225 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_226 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_227 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_228 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_229 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_230 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_231 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_232 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_233 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_234 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_235 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_236 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_237 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_238 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_239 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_240 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_241 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_242 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_243 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_244 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_245 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_246 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_247 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_248 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_249 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_250 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_251 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_252 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_253 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_254 + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_255 +}; + +// NOTE: We keep a pointer to the icons array, useful to point to other sets if required +static unsigned int *guiIconsPtr = guiIcons; + +#endif // !RAYGUI_NO_ICONS && !RAYGUI_CUSTOM_ICONS + +#ifndef RAYGUI_ICON_SIZE + #define RAYGUI_ICON_SIZE 0 +#endif + +// WARNING: Those values define the total size of the style data array, +// if changed, previous saved styles could become incompatible +#define RAYGUI_MAX_CONTROLS 16 // Maximum number of controls +#define RAYGUI_MAX_PROPS_BASE 16 // Maximum number of base properties +#define RAYGUI_MAX_PROPS_EXTENDED 8 // Maximum number of extended properties + +//---------------------------------------------------------------------------------- +// Types and Structures Definition +//---------------------------------------------------------------------------------- +// Gui control property style color element +typedef enum { BORDER = 0, BASE, TEXT, OTHER } GuiPropertyElement; + +//---------------------------------------------------------------------------------- +// Global Variables Definition +//---------------------------------------------------------------------------------- +static GuiState guiState = STATE_NORMAL; // Gui global state, if !STATE_NORMAL, forces defined state + +static Font guiFont = { 0 }; // Gui current font (WARNING: highly coupled to raylib) +static bool guiLocked = false; // Gui lock state (no inputs processed) +static float guiAlpha = 1.0f; // Gui controls transparency + +static unsigned int guiIconScale = 1; // Gui icon default scale (if icons enabled) + +static bool guiTooltip = false; // Tooltip enabled/disabled +static const char *guiTooltipPtr = NULL; // Tooltip string pointer (string provided by user) + +static bool guiSliderDragging = false; // Gui slider drag state (no inputs processed except dragged slider) +static Rectangle guiSliderActive = { 0 }; // Gui slider active bounds rectangle, used as an unique identifier + +static int textBoxCursorIndex = 0; // Cursor index, shared by all GuiTextBox*() +//static int blinkCursorFrameCounter = 0; // Frame counter for cursor blinking +static int autoCursorCooldownCounter = 0; // Cooldown frame counter for automatic cursor movement on key-down +static int autoCursorDelayCounter = 0; // Delay frame counter for automatic cursor movement + +//---------------------------------------------------------------------------------- +// Style data array for all gui style properties (allocated on data segment by default) +// +// NOTE 1: First set of BASE properties are generic to all controls but could be individually +// overwritten per control, first set of EXTENDED properties are generic to all controls and +// can not be overwritten individually but custom EXTENDED properties can be used by control +// +// NOTE 2: A new style set could be loaded over this array using GuiLoadStyle(), +// but default gui style could always be recovered with GuiLoadStyleDefault() +// +// guiStyle size is by default: 16*(16 + 8) = 384*4 = 1536 bytes = 1.5 KB +//---------------------------------------------------------------------------------- +static unsigned int guiStyle[RAYGUI_MAX_CONTROLS*(RAYGUI_MAX_PROPS_BASE + RAYGUI_MAX_PROPS_EXTENDED)] = { 0 }; + +static bool guiStyleLoaded = false; // Style loaded flag for lazy style initialization + +//---------------------------------------------------------------------------------- +// Standalone Mode Functions Declaration +// +// NOTE: raygui depend on some raylib input and drawing functions +// To use raygui as standalone library, below functions must be defined by the user +//---------------------------------------------------------------------------------- +#if defined(RAYGUI_STANDALONE) + +#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 + +// Input required functions +//------------------------------------------------------------------------------- +static Vector2 GetMousePosition(void); +static float GetMouseWheelMove(void); +static bool IsMouseButtonDown(int button); +static bool IsMouseButtonPressed(int button); +static bool IsMouseButtonReleased(int button); + +static bool IsKeyDown(int key); +static bool IsKeyPressed(int key); +static int GetCharPressed(void); // -- GuiTextBox(), GuiValueBox() +//------------------------------------------------------------------------------- + +// Drawing required functions +//------------------------------------------------------------------------------- +static void DrawRectangle(int x, int y, int width, int height, Color color); // -- GuiDrawRectangle() +static void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); // -- GuiColorPicker() +//------------------------------------------------------------------------------- + +// Text required functions +//------------------------------------------------------------------------------- +static Font GetFontDefault(void); // -- GuiLoadStyleDefault() +static Font LoadFontEx(const char *fileName, int fontSize, int *codepoints, int codepointCount); // -- GuiLoadStyle(), load font + +static Texture2D LoadTextureFromImage(Image image); // -- GuiLoadStyle(), required to load texture from embedded font atlas image +static void SetShapesTexture(Texture2D tex, Rectangle rec); // -- GuiLoadStyle(), required to set shapes rec to font white rec (optimization) + +static char *LoadFileText(const char *fileName); // -- GuiLoadStyle(), required to load charset data +static void UnloadFileText(char *text); // -- GuiLoadStyle(), required to unload charset data + +static const char *GetDirectoryPath(const char *filePath); // -- GuiLoadStyle(), required to find charset/font file from text .rgs + +static int *LoadCodepoints(const char *text, int *count); // -- GuiLoadStyle(), required to load required font codepoints list +static void UnloadCodepoints(int *codepoints); // -- GuiLoadStyle(), required to unload codepoints list + +static unsigned char *DecompressData(const unsigned char *compData, int compDataSize, int *dataSize); // -- GuiLoadStyle() +//------------------------------------------------------------------------------- + +// raylib functions already implemented in raygui +//------------------------------------------------------------------------------- +static Color GetColor(int hexValue); // Returns a Color struct from hexadecimal value +static int ColorToInt(Color color); // Returns hexadecimal value for a Color +static bool CheckCollisionPointRec(Vector2 point, Rectangle rec); // Check if point is inside rectangle +static const char *TextFormat(const char *text, ...); // Formatting of text with variables to 'embed' +static const char **TextSplit(const char *text, char delimiter, int *count); // Split text into multiple strings +static int TextToInteger(const char *text); // Get integer value from text + +static int GetCodepointNext(const char *text, int *codepointSize); // Get next codepoint in a UTF-8 encoded text +static const char *CodepointToUTF8(int codepoint, int *byteSize); // Encode codepoint into UTF-8 text (char array size returned as parameter) + +static void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2); // Draw rectangle vertical gradient +//------------------------------------------------------------------------------- + +#endif // RAYGUI_STANDALONE + +//---------------------------------------------------------------------------------- +// Module specific Functions Declaration +//---------------------------------------------------------------------------------- +static void GuiLoadStyleFromMemory(const unsigned char *fileData, int dataSize); // Load style from memory (binary only) + +static int GetTextWidth(const char *text); // Gui get text width using gui font and style +static Rectangle GetTextBounds(int control, Rectangle bounds); // Get text bounds considering control bounds +static const char *GetTextIcon(const char *text, int *iconId); // Get text icon if provided and move text cursor + +static void GuiDrawText(const char *text, Rectangle textBounds, int alignment, Color tint); // Gui draw text using default font +static void GuiDrawRectangle(Rectangle rec, int borderWidth, Color borderColor, Color color); // Gui draw rectangle using default raygui style + +static const char **GuiTextSplit(const char *text, char delimiter, int *count, int *textRow); // Split controls text into multiple strings +static Vector3 ConvertHSVtoRGB(Vector3 hsv); // Convert color data from HSV to RGB +static Vector3 ConvertRGBtoHSV(Vector3 rgb); // Convert color data from RGB to HSV + +static int GuiScrollBar(Rectangle bounds, int value, int minValue, int maxValue); // Scroll bar control, used by GuiScrollPanel() +static void GuiTooltip(Rectangle controlRec); // Draw tooltip using control rec position + +static Color GuiFade(Color color, float alpha); // Fade color by an alpha factor + +//---------------------------------------------------------------------------------- +// Gui Setup Functions Definition +//---------------------------------------------------------------------------------- +// Enable gui global state +// NOTE: We check for STATE_DISABLED to avoid messing custom global state setups +void GuiEnable(void) { if (guiState == STATE_DISABLED) guiState = STATE_NORMAL; } + +// Disable gui global state +// NOTE: We check for STATE_NORMAL to avoid messing custom global state setups +void GuiDisable(void) { if (guiState == STATE_NORMAL) guiState = STATE_DISABLED; } + +// Lock gui global state +void GuiLock(void) { guiLocked = true; } + +// Unlock gui global state +void GuiUnlock(void) { guiLocked = false; } + +// Check if gui is locked (global state) +bool GuiIsLocked(void) { return guiLocked; } + +// Set gui controls alpha global state +void GuiSetAlpha(float alpha) +{ + if (alpha < 0.0f) alpha = 0.0f; + else if (alpha > 1.0f) alpha = 1.0f; + + guiAlpha = alpha; +} + +// Set gui state (global state) +void GuiSetState(int state) { guiState = (GuiState)state; } + +// Get gui state (global state) +int GuiGetState(void) { return guiState; } + +// Set custom gui font +// NOTE: Font loading/unloading is external to raygui +void GuiSetFont(Font font) +{ + if (font.texture.id > 0) + { + // NOTE: If we try to setup a font but default style has not been + // lazily loaded before, it will be overwritten, so we need to force + // default style loading first + if (!guiStyleLoaded) GuiLoadStyleDefault(); + + guiFont = font; + } +} + +// Get custom gui font +Font GuiGetFont(void) +{ + return guiFont; +} + +// Set control style property value +void GuiSetStyle(int control, int property, int value) +{ + if (!guiStyleLoaded) GuiLoadStyleDefault(); + guiStyle[control*(RAYGUI_MAX_PROPS_BASE + RAYGUI_MAX_PROPS_EXTENDED) + property] = value; + + // Default properties are propagated to all controls + if ((control == 0) && (property < RAYGUI_MAX_PROPS_BASE)) + { + for (int i = 1; i < RAYGUI_MAX_CONTROLS; i++) guiStyle[i*(RAYGUI_MAX_PROPS_BASE + RAYGUI_MAX_PROPS_EXTENDED) + property] = value; + } +} + +// Get control style property value +int GuiGetStyle(int control, int property) +{ + if (!guiStyleLoaded) GuiLoadStyleDefault(); + return guiStyle[control*(RAYGUI_MAX_PROPS_BASE + RAYGUI_MAX_PROPS_EXTENDED) + property]; +} + +//---------------------------------------------------------------------------------- +// Gui Controls Functions Definition +//---------------------------------------------------------------------------------- + +// Window Box control +int GuiWindowBox(Rectangle bounds, const char *title) +{ + // Window title bar height (including borders) + // NOTE: This define is also used by GuiMessageBox() and GuiTextInputBox() + #if !defined(RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT) + #define RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT 24 + #endif + + int result = 0; + //GuiState state = guiState; + + int statusBarHeight = RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT; + + Rectangle statusBar = { bounds.x, bounds.y, bounds.width, (float)statusBarHeight }; + if (bounds.height < statusBarHeight*2.0f) bounds.height = statusBarHeight*2.0f; + + Rectangle windowPanel = { bounds.x, bounds.y + (float)statusBarHeight - 1, bounds.width, bounds.height - (float)statusBarHeight + 1 }; + Rectangle closeButtonRec = { statusBar.x + statusBar.width - GuiGetStyle(STATUSBAR, BORDER_WIDTH) - 20, + statusBar.y + statusBarHeight/2.0f - 18.0f/2.0f, 18, 18 }; + + // Update control + //-------------------------------------------------------------------- + // NOTE: Logic is directly managed by button + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + GuiStatusBar(statusBar, title); // Draw window header as status bar + GuiPanel(windowPanel, NULL); // Draw window base + + // Draw window close button + int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH); + int tempTextAlignment = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); + GuiSetStyle(BUTTON, BORDER_WIDTH, 1); + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); +#if defined(RAYGUI_NO_ICONS) + result = GuiButton(closeButtonRec, "x"); +#else + result = GuiButton(closeButtonRec, GuiIconText(ICON_CROSS_SMALL, NULL)); +#endif + GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth); + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, tempTextAlignment); + //-------------------------------------------------------------------- + + return result; // Window close button clicked: result = 1 +} + +// Group Box control with text name +int GuiGroupBox(Rectangle bounds, const char *text) +{ + #if !defined(RAYGUI_GROUPBOX_LINE_THICK) + #define RAYGUI_GROUPBOX_LINE_THICK 1 + #endif + + int result = 0; + GuiState state = guiState; + + // Draw control + //-------------------------------------------------------------------- + GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x, bounds.y, RAYGUI_GROUPBOX_LINE_THICK, bounds.height }, 0, BLANK, GetColor(GuiGetStyle(DEFAULT, (state == STATE_DISABLED)? BORDER_COLOR_DISABLED : LINE_COLOR))); + GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x, bounds.y + bounds.height - 1, bounds.width, RAYGUI_GROUPBOX_LINE_THICK }, 0, BLANK, GetColor(GuiGetStyle(DEFAULT, (state == STATE_DISABLED)? BORDER_COLOR_DISABLED : LINE_COLOR))); + GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x + bounds.width - 1, bounds.y, RAYGUI_GROUPBOX_LINE_THICK, bounds.height }, 0, BLANK, GetColor(GuiGetStyle(DEFAULT, (state == STATE_DISABLED)? BORDER_COLOR_DISABLED : LINE_COLOR))); + + GuiLine(RAYGUI_CLITERAL(Rectangle){ bounds.x, bounds.y - GuiGetStyle(DEFAULT, TEXT_SIZE)/2, bounds.width, (float)GuiGetStyle(DEFAULT, TEXT_SIZE) }, text); + //-------------------------------------------------------------------- + + return result; +} + +// Line control +int GuiLine(Rectangle bounds, const char *text) +{ + #if !defined(RAYGUI_LINE_ORIGIN_SIZE) + #define RAYGUI_LINE_MARGIN_TEXT 12 + #endif + #if !defined(RAYGUI_LINE_TEXT_PADDING) + #define RAYGUI_LINE_TEXT_PADDING 4 + #endif + + int result = 0; + GuiState state = guiState; + + Color color = GetColor(GuiGetStyle(DEFAULT, (state == STATE_DISABLED)? BORDER_COLOR_DISABLED : LINE_COLOR)); + + // Draw control + //-------------------------------------------------------------------- + if (text == NULL) GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x, bounds.y + bounds.height/2, bounds.width, 1 }, 0, BLANK, color); + else + { + Rectangle textBounds = { 0 }; + textBounds.width = (float)GetTextWidth(text) + 2; + textBounds.height = bounds.height; + textBounds.x = bounds.x + RAYGUI_LINE_MARGIN_TEXT; + textBounds.y = bounds.y; + + // Draw line with embedded text label: "--- text --------------" + GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x, bounds.y + bounds.height/2, RAYGUI_LINE_MARGIN_TEXT - RAYGUI_LINE_TEXT_PADDING, 1 }, 0, BLANK, color); + GuiDrawText(text, textBounds, TEXT_ALIGN_LEFT, color); + GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x + 12 + textBounds.width + 4, bounds.y + bounds.height/2, bounds.width - textBounds.width - RAYGUI_LINE_MARGIN_TEXT - RAYGUI_LINE_TEXT_PADDING, 1 }, 0, BLANK, color); + } + //-------------------------------------------------------------------- + + return result; +} + +// Panel control +int GuiPanel(Rectangle bounds, const char *text) +{ + #if !defined(RAYGUI_PANEL_BORDER_WIDTH) + #define RAYGUI_PANEL_BORDER_WIDTH 1 + #endif + + int result = 0; + GuiState state = guiState; + + // Text will be drawn as a header bar (if provided) + Rectangle statusBar = { bounds.x, bounds.y, bounds.width, (float)RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT }; + if ((text != NULL) && (bounds.height < RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT*2.0f)) bounds.height = RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT*2.0f; + + if (text != NULL) + { + // Move panel bounds after the header bar + bounds.y += (float)RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT - 1; + bounds.height -= (float)RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT - 1; + } + + // Draw control + //-------------------------------------------------------------------- + if (text != NULL) GuiStatusBar(statusBar, text); // Draw panel header as status bar + + GuiDrawRectangle(bounds, RAYGUI_PANEL_BORDER_WIDTH, GetColor(GuiGetStyle(DEFAULT, (state == STATE_DISABLED)? BORDER_COLOR_DISABLED: LINE_COLOR)), + GetColor(GuiGetStyle(DEFAULT, (state == STATE_DISABLED)? BASE_COLOR_DISABLED : BACKGROUND_COLOR))); + //-------------------------------------------------------------------- + + return result; +} + +// Tab Bar control +// NOTE: Using GuiToggle() for the TABS +int GuiTabBar(Rectangle bounds, const char **text, int count, int *active) +{ + #define RAYGUI_TABBAR_ITEM_WIDTH 160 + + int result = -1; + //GuiState state = guiState; + + Rectangle tabBounds = { bounds.x, bounds.y, RAYGUI_TABBAR_ITEM_WIDTH, bounds.height }; + + if (*active < 0) *active = 0; + else if (*active > count - 1) *active = count - 1; + + int offsetX = 0; // Required in case tabs go out of screen + offsetX = (*active + 2)*RAYGUI_TABBAR_ITEM_WIDTH - GetScreenWidth(); + if (offsetX < 0) offsetX = 0; + + bool toggle = false; // Required for individual toggles + + // Draw control + //-------------------------------------------------------------------- + for (int i = 0; i < count; i++) + { + tabBounds.x = bounds.x + (RAYGUI_TABBAR_ITEM_WIDTH + 4)*i - offsetX; + + if (tabBounds.x < GetScreenWidth()) + { + // Draw tabs as toggle controls + int textAlignment = GuiGetStyle(TOGGLE, TEXT_ALIGNMENT); + int textPadding = GuiGetStyle(TOGGLE, TEXT_PADDING); + GuiSetStyle(TOGGLE, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + GuiSetStyle(TOGGLE, TEXT_PADDING, 8); + + if (i == (*active)) + { + toggle = true; + GuiToggle(tabBounds, GuiIconText(12, text[i]), &toggle); + } + else + { + toggle = false; + GuiToggle(tabBounds, GuiIconText(12, text[i]), &toggle); + if (toggle) *active = i; + } + + GuiSetStyle(TOGGLE, TEXT_PADDING, textPadding); + GuiSetStyle(TOGGLE, TEXT_ALIGNMENT, textAlignment); + + // Draw tab close button + // NOTE: Only draw close button for current tab: if (CheckCollisionPointRec(mousePosition, tabBounds)) + int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH); + int tempTextAlignment = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); + GuiSetStyle(BUTTON, BORDER_WIDTH, 1); + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); +#if defined(RAYGUI_NO_ICONS) + if (GuiButton(RAYGUI_CLITERAL(Rectangle){ tabBounds.x + tabBounds.width - 14 - 5, tabBounds.y + 5, 14, 14 }, "x")) result = i; +#else + if (GuiButton(RAYGUI_CLITERAL(Rectangle){ tabBounds.x + tabBounds.width - 14 - 5, tabBounds.y + 5, 14, 14 }, GuiIconText(ICON_CROSS_SMALL, NULL))) result = i; +#endif + GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth); + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, tempTextAlignment); + } + } + + // Draw tab-bar bottom line + GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x, bounds.y + bounds.height - 1, bounds.width, 1 }, 0, BLANK, GetColor(GuiGetStyle(TOGGLE, BORDER_COLOR_NORMAL))); + //-------------------------------------------------------------------- + + return result; // Return as result the current TAB closing requested +} + +// Scroll Panel control +int GuiScrollPanel(Rectangle bounds, const char *text, Rectangle content, Vector2 *scroll, Rectangle *view) +{ + #define RAYGUI_MIN_SCROLLBAR_WIDTH 40 + #define RAYGUI_MIN_SCROLLBAR_HEIGHT 40 + + int result = 0; + GuiState state = guiState; + float mouseWheelSpeed = 20.0f; // Default movement speed with mouse wheel + + Rectangle temp = { 0 }; + if (view == NULL) view = &temp; + + Vector2 scrollPos = { 0.0f, 0.0f }; + if (scroll != NULL) scrollPos = *scroll; + + // Text will be drawn as a header bar (if provided) + Rectangle statusBar = { bounds.x, bounds.y, bounds.width, (float)RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT }; + if (bounds.height < RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT*2.0f) bounds.height = RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT*2.0f; + + if (text != NULL) + { + // Move panel bounds after the header bar + bounds.y += (float)RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT - 1; + bounds.height -= (float)RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT + 1; + } + + bool hasHorizontalScrollBar = (content.width > bounds.width - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH))? true : false; + bool hasVerticalScrollBar = (content.height > bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH))? true : false; + + // Recheck to account for the other scrollbar being visible + if (!hasHorizontalScrollBar) hasHorizontalScrollBar = (hasVerticalScrollBar && (content.width > (bounds.width - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH))))? true : false; + if (!hasVerticalScrollBar) hasVerticalScrollBar = (hasHorizontalScrollBar && (content.height > (bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH))))? true : false; + + int horizontalScrollBarWidth = hasHorizontalScrollBar? GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH) : 0; + int verticalScrollBarWidth = hasVerticalScrollBar? GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH) : 0; + Rectangle horizontalScrollBar = { + (float)((GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (float)bounds.x + verticalScrollBarWidth : (float)bounds.x) + GuiGetStyle(DEFAULT, BORDER_WIDTH), + (float)bounds.y + bounds.height - horizontalScrollBarWidth - GuiGetStyle(DEFAULT, BORDER_WIDTH), + (float)bounds.width - verticalScrollBarWidth - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH), + (float)horizontalScrollBarWidth + }; + Rectangle verticalScrollBar = { + (float)((GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (float)bounds.x + GuiGetStyle(DEFAULT, BORDER_WIDTH) : (float)bounds.x + bounds.width - verticalScrollBarWidth - GuiGetStyle(DEFAULT, BORDER_WIDTH)), + (float)bounds.y + GuiGetStyle(DEFAULT, BORDER_WIDTH), + (float)verticalScrollBarWidth, + (float)bounds.height - horizontalScrollBarWidth - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) + }; + + // Make sure scroll bars have a minimum width/height + // NOTE: If content >>> bounds, size could be very small or even 0 + if (horizontalScrollBar.width < RAYGUI_MIN_SCROLLBAR_WIDTH) + { + horizontalScrollBar.width = RAYGUI_MIN_SCROLLBAR_WIDTH; + mouseWheelSpeed = 30.0f; // TODO: Calculate speed increment based on content.height vs bounds.height + } + if (verticalScrollBar.height < RAYGUI_MIN_SCROLLBAR_HEIGHT) + { + verticalScrollBar.height = RAYGUI_MIN_SCROLLBAR_HEIGHT; + mouseWheelSpeed = 30.0f; // TODO: Calculate speed increment based on content.width vs bounds.width + } + + // Calculate view area (area without the scrollbars) + *view = (GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? + RAYGUI_CLITERAL(Rectangle){ bounds.x + verticalScrollBarWidth + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.y + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.width - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - verticalScrollBarWidth, bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth } : + RAYGUI_CLITERAL(Rectangle){ bounds.x + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.y + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.width - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - verticalScrollBarWidth, bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth }; + + // Clip view area to the actual content size + if (view->width > content.width) view->width = content.width; + if (view->height > content.height) view->height = content.height; + + float horizontalMin = hasHorizontalScrollBar? ((GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (float)-verticalScrollBarWidth : 0) - (float)GuiGetStyle(DEFAULT, BORDER_WIDTH) : (((float)GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (float)-verticalScrollBarWidth : 0) - (float)GuiGetStyle(DEFAULT, BORDER_WIDTH); + float horizontalMax = hasHorizontalScrollBar? content.width - bounds.width + (float)verticalScrollBarWidth + GuiGetStyle(DEFAULT, BORDER_WIDTH) - (((float)GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (float)verticalScrollBarWidth : 0) : (float)-GuiGetStyle(DEFAULT, BORDER_WIDTH); + float verticalMin = hasVerticalScrollBar? 0.0f : -1.0f; + float verticalMax = hasVerticalScrollBar? content.height - bounds.height + (float)horizontalScrollBarWidth + (float)GuiGetStyle(DEFAULT, BORDER_WIDTH) : (float)-GuiGetStyle(DEFAULT, BORDER_WIDTH); + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && !guiLocked) + { + Vector2 mousePoint = GetMousePosition(); + + // Check button state + if (CheckCollisionPointRec(mousePoint, bounds)) + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; + else state = STATE_FOCUSED; + +#if defined(SUPPORT_SCROLLBAR_KEY_INPUT) + if (hasHorizontalScrollBar) + { + if (IsKeyDown(KEY_RIGHT)) scrollPos.x -= GuiGetStyle(SCROLLBAR, SCROLL_SPEED); + if (IsKeyDown(KEY_LEFT)) scrollPos.x += GuiGetStyle(SCROLLBAR, SCROLL_SPEED); + } + + if (hasVerticalScrollBar) + { + if (IsKeyDown(KEY_DOWN)) scrollPos.y -= GuiGetStyle(SCROLLBAR, SCROLL_SPEED); + if (IsKeyDown(KEY_UP)) scrollPos.y += GuiGetStyle(SCROLLBAR, SCROLL_SPEED); + } +#endif + float wheelMove = GetMouseWheelMove(); + + // Horizontal and vertical scrolling with mouse wheel + if (hasHorizontalScrollBar && (IsKeyDown(KEY_LEFT_CONTROL) || IsKeyDown(KEY_LEFT_SHIFT))) scrollPos.x += wheelMove*mouseWheelSpeed; + else scrollPos.y += wheelMove*mouseWheelSpeed; // Vertical scroll + } + } + + // Normalize scroll values + if (scrollPos.x > -horizontalMin) scrollPos.x = -horizontalMin; + if (scrollPos.x < -horizontalMax) scrollPos.x = -horizontalMax; + if (scrollPos.y > -verticalMin) scrollPos.y = -verticalMin; + if (scrollPos.y < -verticalMax) scrollPos.y = -verticalMax; + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + if (text != NULL) GuiStatusBar(statusBar, text); // Draw panel header as status bar + + GuiDrawRectangle(bounds, 0, BLANK, GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR))); // Draw background + + // Save size of the scrollbar slider + const int slider = GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE); + + // Draw horizontal scrollbar if visible + if (hasHorizontalScrollBar) + { + // Change scrollbar slider size to show the diff in size between the content width and the widget width + GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, (int)(((bounds.width - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - verticalScrollBarWidth)/(int)content.width)*((int)bounds.width - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - verticalScrollBarWidth))); + scrollPos.x = (float)-GuiScrollBar(horizontalScrollBar, (int)-scrollPos.x, (int)horizontalMin, (int)horizontalMax); + } + else scrollPos.x = 0.0f; + + // Draw vertical scrollbar if visible + if (hasVerticalScrollBar) + { + // Change scrollbar slider size to show the diff in size between the content height and the widget height + GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, (int)(((bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth)/(int)content.height)*((int)bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth))); + scrollPos.y = (float)-GuiScrollBar(verticalScrollBar, (int)-scrollPos.y, (int)verticalMin, (int)verticalMax); + } + else scrollPos.y = 0.0f; + + // Draw detail corner rectangle if both scroll bars are visible + if (hasHorizontalScrollBar && hasVerticalScrollBar) + { + Rectangle corner = { (GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (bounds.x + GuiGetStyle(DEFAULT, BORDER_WIDTH) + 2) : (horizontalScrollBar.x + horizontalScrollBar.width + 2), verticalScrollBar.y + verticalScrollBar.height + 2, (float)horizontalScrollBarWidth - 4, (float)verticalScrollBarWidth - 4 }; + GuiDrawRectangle(corner, 0, BLANK, GetColor(GuiGetStyle(LISTVIEW, TEXT + (state*3)))); + } + + // Draw scrollbar lines depending on current state + GuiDrawRectangle(bounds, GuiGetStyle(DEFAULT, BORDER_WIDTH), GetColor(GuiGetStyle(LISTVIEW, BORDER + (state*3))), BLANK); + + // Set scrollbar slider size back to the way it was before + GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, slider); + //-------------------------------------------------------------------- + + if (scroll != NULL) *scroll = scrollPos; + + return result; +} + +// Label control +int GuiLabel(Rectangle bounds, const char *text) +{ + int result = 0; + GuiState state = guiState; + + // Update control + //-------------------------------------------------------------------- + //... + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + GuiDrawText(text, GetTextBounds(LABEL, bounds), GuiGetStyle(LABEL, TEXT_ALIGNMENT), GetColor(GuiGetStyle(LABEL, TEXT + (state*3)))); + //-------------------------------------------------------------------- + + return result; +} + +// Button control, returns true when clicked +int GuiButton(Rectangle bounds, const char *text) +{ + int result = 0; + GuiState state = guiState; + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && !guiLocked && !guiSliderDragging) + { + Vector2 mousePoint = GetMousePosition(); + + // Check button state + if (CheckCollisionPointRec(mousePoint, bounds)) + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; + else state = STATE_FOCUSED; + + if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) result = 1; + } + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + GuiDrawRectangle(bounds, GuiGetStyle(BUTTON, BORDER_WIDTH), GetColor(GuiGetStyle(BUTTON, BORDER + (state*3))), GetColor(GuiGetStyle(BUTTON, BASE + (state*3)))); + GuiDrawText(text, GetTextBounds(BUTTON, bounds), GuiGetStyle(BUTTON, TEXT_ALIGNMENT), GetColor(GuiGetStyle(BUTTON, TEXT + (state*3)))); + + if (state == STATE_FOCUSED) GuiTooltip(bounds); + //------------------------------------------------------------------ + + return result; // Button pressed: result = 1 +} + +// Label button control +int GuiLabelButton(Rectangle bounds, const char *text) +{ + GuiState state = guiState; + bool pressed = false; + + // NOTE: We force bounds.width to be all text + float textWidth = (float)GetTextWidth(text); + if ((bounds.width - 2*GuiGetStyle(LABEL, BORDER_WIDTH) - 2*GuiGetStyle(LABEL, TEXT_PADDING)) < textWidth) bounds.width = textWidth + 2*GuiGetStyle(LABEL, BORDER_WIDTH) + 2*GuiGetStyle(LABEL, TEXT_PADDING) + 2; + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && !guiLocked && !guiSliderDragging) + { + Vector2 mousePoint = GetMousePosition(); + + // Check checkbox state + if (CheckCollisionPointRec(mousePoint, bounds)) + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; + else state = STATE_FOCUSED; + + if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) pressed = true; + } + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + GuiDrawText(text, GetTextBounds(LABEL, bounds), GuiGetStyle(LABEL, TEXT_ALIGNMENT), GetColor(GuiGetStyle(LABEL, TEXT + (state*3)))); + //-------------------------------------------------------------------- + + return pressed; +} + +// Toggle Button control, returns true when active +int GuiToggle(Rectangle bounds, const char *text, bool *active) +{ + int result = 0; + GuiState state = guiState; + + bool temp = false; + if (active == NULL) active = &temp; + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && !guiLocked && !guiSliderDragging) + { + Vector2 mousePoint = GetMousePosition(); + + // Check toggle button state + if (CheckCollisionPointRec(mousePoint, bounds)) + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; + else if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) + { + state = STATE_NORMAL; + *active = !(*active); + } + else state = STATE_FOCUSED; + } + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + if (state == STATE_NORMAL) + { + GuiDrawRectangle(bounds, GuiGetStyle(TOGGLE, BORDER_WIDTH), GetColor(GuiGetStyle(TOGGLE, ((*active)? BORDER_COLOR_PRESSED : (BORDER + state*3)))), GetColor(GuiGetStyle(TOGGLE, ((*active)? BASE_COLOR_PRESSED : (BASE + state*3))))); + GuiDrawText(text, GetTextBounds(TOGGLE, bounds), GuiGetStyle(TOGGLE, TEXT_ALIGNMENT), GetColor(GuiGetStyle(TOGGLE, ((*active)? TEXT_COLOR_PRESSED : (TEXT + state*3))))); + } + else + { + GuiDrawRectangle(bounds, GuiGetStyle(TOGGLE, BORDER_WIDTH), GetColor(GuiGetStyle(TOGGLE, BORDER + state*3)), GetColor(GuiGetStyle(TOGGLE, BASE + state*3))); + GuiDrawText(text, GetTextBounds(TOGGLE, bounds), GuiGetStyle(TOGGLE, TEXT_ALIGNMENT), GetColor(GuiGetStyle(TOGGLE, TEXT + state*3))); + } + + if (state == STATE_FOCUSED) GuiTooltip(bounds); + //-------------------------------------------------------------------- + + return result; +} + +// Toggle Group control, returns toggled button codepointIndex +int GuiToggleGroup(Rectangle bounds, const char *text, int *active) +{ + #if !defined(RAYGUI_TOGGLEGROUP_MAX_ITEMS) + #define RAYGUI_TOGGLEGROUP_MAX_ITEMS 32 + #endif + + int result = 0; + float initBoundsX = bounds.x; + + int temp = 0; + if (active == NULL) active = &temp; + + bool toggle = false; // Required for individual toggles + + // Get substrings items from text (items pointers) + int rows[RAYGUI_TOGGLEGROUP_MAX_ITEMS] = { 0 }; + int itemCount = 0; + const char **items = GuiTextSplit(text, ';', &itemCount, rows); + + int prevRow = rows[0]; + + for (int i = 0; i < itemCount; i++) + { + if (prevRow != rows[i]) + { + bounds.x = initBoundsX; + bounds.y += (bounds.height + GuiGetStyle(TOGGLE, GROUP_PADDING)); + prevRow = rows[i]; + } + + if (i == (*active)) + { + toggle = true; + GuiToggle(bounds, items[i], &toggle); + } + else + { + toggle = false; + GuiToggle(bounds, items[i], &toggle); + if (toggle) *active = i; + } + + bounds.x += (bounds.width + GuiGetStyle(TOGGLE, GROUP_PADDING)); + } + + return result; +} + +// Toggle Slider control extended, returns true when clicked +int GuiToggleSlider(Rectangle bounds, const char *text, int *active) +{ + int result = 0; + GuiState state = guiState; + + int temp = 0; + if (active == NULL) active = &temp; + + //bool toggle = false; // Required for individual toggles + + // Get substrings items from text (items pointers) + int itemCount = 0; + const char **items = GuiTextSplit(text, ';', &itemCount, NULL); + + Rectangle slider = { + 0, // Calculated later depending on the active toggle + bounds.y + GuiGetStyle(SLIDER, BORDER_WIDTH) + GuiGetStyle(SLIDER, SLIDER_PADDING), + (bounds.width - 2*GuiGetStyle(SLIDER, BORDER_WIDTH) - (itemCount + 1)*GuiGetStyle(SLIDER, SLIDER_PADDING))/itemCount, + bounds.height - 2*GuiGetStyle(SLIDER, BORDER_WIDTH) - 2*GuiGetStyle(SLIDER, SLIDER_PADDING) }; + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && !guiLocked) + { + Vector2 mousePoint = GetMousePosition(); + + if (CheckCollisionPointRec(mousePoint, bounds)) + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; + else if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) + { + state = STATE_PRESSED; + (*active)++; + result = 1; + } + else state = STATE_FOCUSED; + } + + if ((*active) && (state != STATE_FOCUSED)) state = STATE_PRESSED; + } + + if (*active >= itemCount) *active = 0; + slider.x = bounds.x + GuiGetStyle(SLIDER, BORDER_WIDTH) + (*active + 1)*GuiGetStyle(SLIDER, SLIDER_PADDING) + (*active)*slider.width; + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + GuiDrawRectangle(bounds, GuiGetStyle(SLIDER, BORDER_WIDTH), GetColor(GuiGetStyle(TOGGLE, BORDER + (state*3))), + GetColor(GuiGetStyle(TOGGLE, BASE_COLOR_NORMAL))); + + // Draw internal slider + if (state == STATE_NORMAL) GuiDrawRectangle(slider, 0, BLANK, GetColor(GuiGetStyle(SLIDER, BASE_COLOR_PRESSED))); + else if (state == STATE_FOCUSED) GuiDrawRectangle(slider, 0, BLANK, GetColor(GuiGetStyle(SLIDER, BASE_COLOR_FOCUSED))); + else if (state == STATE_PRESSED) GuiDrawRectangle(slider, 0, BLANK, GetColor(GuiGetStyle(SLIDER, BASE_COLOR_PRESSED))); + + // Draw text in slider + if (text != NULL) + { + Rectangle textBounds = { 0 }; + textBounds.width = (float)GetTextWidth(text); + textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE); + textBounds.x = slider.x + slider.width/2 - textBounds.width/2; + textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2; + + GuiDrawText(items[*active], textBounds, GuiGetStyle(TOGGLE, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(TOGGLE, TEXT + (state*3))), guiAlpha)); + } + //-------------------------------------------------------------------- + + return result; +} + +// Check Box control, returns true when active +int GuiCheckBox(Rectangle bounds, const char *text, bool *checked) +{ + int result = 0; + GuiState state = guiState; + + bool temp = false; + if (checked == NULL) checked = &temp; + + Rectangle textBounds = { 0 }; + + if (text != NULL) + { + textBounds.width = (float)GetTextWidth(text) + 2; + textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE); + textBounds.x = bounds.x + bounds.width + GuiGetStyle(CHECKBOX, TEXT_PADDING); + textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2; + if (GuiGetStyle(CHECKBOX, TEXT_ALIGNMENT) == TEXT_ALIGN_LEFT) textBounds.x = bounds.x - textBounds.width - GuiGetStyle(CHECKBOX, TEXT_PADDING); + } + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && !guiLocked && !guiSliderDragging) + { + Vector2 mousePoint = GetMousePosition(); + + Rectangle totalBounds = { + (GuiGetStyle(CHECKBOX, TEXT_ALIGNMENT) == TEXT_ALIGN_LEFT)? textBounds.x : bounds.x, + bounds.y, + bounds.width + textBounds.width + GuiGetStyle(CHECKBOX, TEXT_PADDING), + bounds.height, + }; + + // Check checkbox state + if (CheckCollisionPointRec(mousePoint, totalBounds)) + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; + else state = STATE_FOCUSED; + + if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) *checked = !(*checked); + } + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + GuiDrawRectangle(bounds, GuiGetStyle(CHECKBOX, BORDER_WIDTH), GetColor(GuiGetStyle(CHECKBOX, BORDER + (state*3))), BLANK); + + if (*checked) + { + Rectangle check = { bounds.x + GuiGetStyle(CHECKBOX, BORDER_WIDTH) + GuiGetStyle(CHECKBOX, CHECK_PADDING), + bounds.y + GuiGetStyle(CHECKBOX, BORDER_WIDTH) + GuiGetStyle(CHECKBOX, CHECK_PADDING), + bounds.width - 2*(GuiGetStyle(CHECKBOX, BORDER_WIDTH) + GuiGetStyle(CHECKBOX, CHECK_PADDING)), + bounds.height - 2*(GuiGetStyle(CHECKBOX, BORDER_WIDTH) + GuiGetStyle(CHECKBOX, CHECK_PADDING)) }; + GuiDrawRectangle(check, 0, BLANK, GetColor(GuiGetStyle(CHECKBOX, TEXT + state*3))); + } + + GuiDrawText(text, textBounds, (GuiGetStyle(CHECKBOX, TEXT_ALIGNMENT) == TEXT_ALIGN_RIGHT)? TEXT_ALIGN_LEFT : TEXT_ALIGN_RIGHT, GetColor(GuiGetStyle(LABEL, TEXT + (state*3)))); + //-------------------------------------------------------------------- + + return result; +} + +// Combo Box control, returns selected item codepointIndex +int GuiComboBox(Rectangle bounds, const char *text, int *active) +{ + int result = 0; + GuiState state = guiState; + + int temp = 0; + if (active == NULL) active = &temp; + + bounds.width -= (GuiGetStyle(COMBOBOX, COMBO_BUTTON_WIDTH) + GuiGetStyle(COMBOBOX, COMBO_BUTTON_SPACING)); + + Rectangle selector = { (float)bounds.x + bounds.width + GuiGetStyle(COMBOBOX, COMBO_BUTTON_SPACING), + (float)bounds.y, (float)GuiGetStyle(COMBOBOX, COMBO_BUTTON_WIDTH), (float)bounds.height }; + + // Get substrings items from text (items pointers, lengths and count) + int itemCount = 0; + const char **items = GuiTextSplit(text, ';', &itemCount, NULL); + + if (*active < 0) *active = 0; + else if (*active > (itemCount - 1)) *active = itemCount - 1; + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && !guiLocked && (itemCount > 1) && !guiSliderDragging) + { + Vector2 mousePoint = GetMousePosition(); + + if (CheckCollisionPointRec(mousePoint, bounds) || + CheckCollisionPointRec(mousePoint, selector)) + { + if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) + { + *active += 1; + if (*active >= itemCount) *active = 0; // Cyclic combobox + } + + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; + else state = STATE_FOCUSED; + } + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + // Draw combo box main + GuiDrawRectangle(bounds, GuiGetStyle(COMBOBOX, BORDER_WIDTH), GetColor(GuiGetStyle(COMBOBOX, BORDER + (state*3))), GetColor(GuiGetStyle(COMBOBOX, BASE + (state*3)))); + GuiDrawText(items[*active], GetTextBounds(COMBOBOX, bounds), GuiGetStyle(COMBOBOX, TEXT_ALIGNMENT), GetColor(GuiGetStyle(COMBOBOX, TEXT + (state*3)))); + + // Draw selector using a custom button + // NOTE: BORDER_WIDTH and TEXT_ALIGNMENT forced values + int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH); + int tempTextAlign = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); + GuiSetStyle(BUTTON, BORDER_WIDTH, 1); + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); + + GuiButton(selector, TextFormat("%i/%i", *active + 1, itemCount)); + + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, tempTextAlign); + GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth); + //-------------------------------------------------------------------- + + return result; +} + +// Dropdown Box control +// NOTE: Returns mouse click +int GuiDropdownBox(Rectangle bounds, const char *text, int *active, bool editMode) +{ + int result = 0; + GuiState state = guiState; + + int itemSelected = *active; + int itemFocused = -1; + + // Get substrings items from text (items pointers, lengths and count) + int itemCount = 0; + const char **items = GuiTextSplit(text, ';', &itemCount, NULL); + + Rectangle boundsOpen = bounds; + boundsOpen.height = (itemCount + 1)*(bounds.height + GuiGetStyle(DROPDOWNBOX, DROPDOWN_ITEMS_SPACING)); + + Rectangle itemBounds = bounds; + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && (editMode || !guiLocked) && (itemCount > 1) && !guiSliderDragging) + { + Vector2 mousePoint = GetMousePosition(); + + if (editMode) + { + state = STATE_PRESSED; + + // Check if mouse has been pressed or released outside limits + if (!CheckCollisionPointRec(mousePoint, boundsOpen)) + { + if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) || IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) result = 1; + } + + // Check if already selected item has been pressed again + if (CheckCollisionPointRec(mousePoint, bounds) && IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) result = 1; + + // Check focused and selected item + for (int i = 0; i < itemCount; i++) + { + // Update item rectangle y position for next item + itemBounds.y += (bounds.height + GuiGetStyle(DROPDOWNBOX, DROPDOWN_ITEMS_SPACING)); + + if (CheckCollisionPointRec(mousePoint, itemBounds)) + { + itemFocused = i; + if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) + { + itemSelected = i; + result = 1; // Item selected + } + break; + } + } + + itemBounds = bounds; + } + else + { + if (CheckCollisionPointRec(mousePoint, bounds)) + { + if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) + { + result = 1; + state = STATE_PRESSED; + } + else state = STATE_FOCUSED; + } + } + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + if (editMode) GuiPanel(boundsOpen, NULL); + + GuiDrawRectangle(bounds, GuiGetStyle(DROPDOWNBOX, BORDER_WIDTH), GetColor(GuiGetStyle(DROPDOWNBOX, BORDER + state*3)), GetColor(GuiGetStyle(DROPDOWNBOX, BASE + state*3))); + GuiDrawText(items[itemSelected], GetTextBounds(DROPDOWNBOX, bounds), GuiGetStyle(DROPDOWNBOX, TEXT_ALIGNMENT), GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + state*3))); + + if (editMode) + { + // Draw visible items + for (int i = 0; i < itemCount; i++) + { + // Update item rectangle y position for next item + itemBounds.y += (bounds.height + GuiGetStyle(DROPDOWNBOX, DROPDOWN_ITEMS_SPACING)); + + if (i == itemSelected) + { + GuiDrawRectangle(itemBounds, GuiGetStyle(DROPDOWNBOX, BORDER_WIDTH), GetColor(GuiGetStyle(DROPDOWNBOX, BORDER_COLOR_PRESSED)), GetColor(GuiGetStyle(DROPDOWNBOX, BASE_COLOR_PRESSED))); + GuiDrawText(items[i], GetTextBounds(DROPDOWNBOX, itemBounds), GuiGetStyle(DROPDOWNBOX, TEXT_ALIGNMENT), GetColor(GuiGetStyle(DROPDOWNBOX, TEXT_COLOR_PRESSED))); + } + else if (i == itemFocused) + { + GuiDrawRectangle(itemBounds, GuiGetStyle(DROPDOWNBOX, BORDER_WIDTH), GetColor(GuiGetStyle(DROPDOWNBOX, BORDER_COLOR_FOCUSED)), GetColor(GuiGetStyle(DROPDOWNBOX, BASE_COLOR_FOCUSED))); + GuiDrawText(items[i], GetTextBounds(DROPDOWNBOX, itemBounds), GuiGetStyle(DROPDOWNBOX, TEXT_ALIGNMENT), GetColor(GuiGetStyle(DROPDOWNBOX, TEXT_COLOR_FOCUSED))); + } + else GuiDrawText(items[i], GetTextBounds(DROPDOWNBOX, itemBounds), GuiGetStyle(DROPDOWNBOX, TEXT_ALIGNMENT), GetColor(GuiGetStyle(DROPDOWNBOX, TEXT_COLOR_NORMAL))); + } + } + + // Draw arrows (using icon if available) +#if defined(RAYGUI_NO_ICONS) + GuiDrawText("v", RAYGUI_CLITERAL(Rectangle){ bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_PADDING), bounds.y + bounds.height/2 - 2, 10, 10 }, + TEXT_ALIGN_CENTER, GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3)))); +#else + GuiDrawText("#120#", RAYGUI_CLITERAL(Rectangle){ bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_PADDING), bounds.y + bounds.height/2 - 6, 10, 10 }, + TEXT_ALIGN_CENTER, GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3)))); // ICON_ARROW_DOWN_FILL +#endif + //-------------------------------------------------------------------- + + *active = itemSelected; + + // TODO: Use result to return more internal states: mouse-press out-of-bounds, mouse-press over selected-item... + return result; // Mouse click: result = 1 +} + +// Text Box control +// NOTE: Returns true on ENTER pressed (useful for data validation) +int GuiTextBox(Rectangle bounds, char *text, int bufferSize, bool editMode) +{ + #if !defined(RAYGUI_TEXTBOX_AUTO_CURSOR_COOLDOWN) + #define RAYGUI_TEXTBOX_AUTO_CURSOR_COOLDOWN 40 // Frames to wait for autocursor movement + #endif + #if !defined(RAYGUI_TEXTBOX_AUTO_CURSOR_DELAY) + #define RAYGUI_TEXTBOX_AUTO_CURSOR_DELAY 1 // Frames delay for autocursor movement + #endif + + int result = 0; + GuiState state = guiState; + + bool multiline = false; // TODO: Consider multiline text input + int wrapMode = GuiGetStyle(DEFAULT, TEXT_WRAP_MODE); + + Rectangle textBounds = GetTextBounds(TEXTBOX, bounds); + int textWidth = GetTextWidth(text) - GetTextWidth(text + textBoxCursorIndex); + int textIndexOffset = 0; // Text index offset to start drawing in the box + + // Cursor rectangle + // NOTE: Position X value should be updated + Rectangle cursor = { + textBounds.x + textWidth + GuiGetStyle(DEFAULT, TEXT_SPACING), + textBounds.y + textBounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE), + 2, + (float)GuiGetStyle(DEFAULT, TEXT_SIZE)*2 + }; + + if (cursor.height >= bounds.height) cursor.height = bounds.height - GuiGetStyle(TEXTBOX, BORDER_WIDTH)*2; + if (cursor.y < (bounds.y + GuiGetStyle(TEXTBOX, BORDER_WIDTH))) cursor.y = bounds.y + GuiGetStyle(TEXTBOX, BORDER_WIDTH); + + // Mouse cursor rectangle + // NOTE: Initialized outside of screen + Rectangle mouseCursor = cursor; + mouseCursor.x = -1; + mouseCursor.width = 1; + + // Auto-cursor movement logic + // NOTE: Cursor moves automatically when key down after some time + if (IsKeyDown(KEY_LEFT) || IsKeyDown(KEY_RIGHT) || IsKeyDown(KEY_UP) || IsKeyDown(KEY_DOWN) || IsKeyDown(KEY_BACKSPACE) || IsKeyDown(KEY_DELETE)) autoCursorCooldownCounter++; + else + { + autoCursorCooldownCounter = 0; // GLOBAL: Cursor cooldown counter + autoCursorDelayCounter = 0; // GLOBAL: Cursor delay counter + } + + // Blink-cursor frame counter + //if (!autoCursorMode) blinkCursorFrameCounter++; + //else blinkCursorFrameCounter = 0; + + // Update control + //-------------------------------------------------------------------- + // WARNING: Text editing is only supported under certain conditions: + if ((state != STATE_DISABLED) && // Control not disabled + !GuiGetStyle(TEXTBOX, TEXT_READONLY) && // TextBox not on read-only mode + !guiLocked && // Gui not locked + !guiSliderDragging && // No gui slider on dragging + (wrapMode == TEXT_WRAP_NONE)) // No wrap mode + { + Vector2 mousePosition = GetMousePosition(); + + if (editMode) + { + state = STATE_PRESSED; + + // If text does not fit in the textbox and current cursor position is out of bounds, + // we add an index offset to text for drawing only what requires depending on cursor + while (textWidth >= textBounds.width) + { + int nextCodepointSize = 0; + GetCodepointNext(text + textIndexOffset, &nextCodepointSize); + + textIndexOffset += nextCodepointSize; + + textWidth = GetTextWidth(text + textIndexOffset) - GetTextWidth(text + textBoxCursorIndex); + } + + int textLength = (int)strlen(text); // Get current text length + int codepoint = GetCharPressed(); // Get Unicode codepoint + if (multiline && IsKeyPressed(KEY_ENTER)) codepoint = (int)'\n'; + + if (textBoxCursorIndex > textLength) textBoxCursorIndex = textLength; + + // Encode codepoint as UTF-8 + int codepointSize = 0; + const char *charEncoded = CodepointToUTF8(codepoint, &codepointSize); + + // Add codepoint to text, at current cursor position + // NOTE: Make sure we do not overflow buffer size + if (((multiline && (codepoint == (int)'\n')) || (codepoint >= 32)) && ((textLength + codepointSize) < bufferSize)) + { + // Move forward data from cursor position + for (int i = (textLength + codepointSize); i > textBoxCursorIndex; i--) text[i] = text[i - codepointSize]; + + // Add new codepoint in current cursor position + for (int i = 0; i < codepointSize; i++) text[textBoxCursorIndex + i] = charEncoded[i]; + + textBoxCursorIndex += codepointSize; + textLength += codepointSize; + + // Make sure text last character is EOL + text[textLength] = '\0'; + } + + // Move cursor to start + if ((textLength > 0) && IsKeyPressed(KEY_HOME)) textBoxCursorIndex = 0; + + // Move cursor to end + if ((textLength > textBoxCursorIndex) && IsKeyPressed(KEY_END)) textBoxCursorIndex = textLength; + + // Delete codepoint from text, after current cursor position + if ((textLength > textBoxCursorIndex) && (IsKeyPressed(KEY_DELETE) || (IsKeyDown(KEY_DELETE) && (autoCursorCooldownCounter >= RAYGUI_TEXTBOX_AUTO_CURSOR_COOLDOWN)))) + { + autoCursorDelayCounter++; + + if (IsKeyPressed(KEY_DELETE) || (autoCursorDelayCounter%RAYGUI_TEXTBOX_AUTO_CURSOR_DELAY) == 0) // Delay every movement some frames + { + int nextCodepointSize = 0; + GetCodepointNext(text + textBoxCursorIndex, &nextCodepointSize); + + // Move backward text from cursor position + for (int i = textBoxCursorIndex; i < textLength; i++) text[i] = text[i + nextCodepointSize]; + + textLength -= codepointSize; + + // Make sure text last character is EOL + text[textLength] = '\0'; + } + } + + // Delete codepoint from text, before current cursor position + if ((textLength > 0) && (IsKeyPressed(KEY_BACKSPACE) || (IsKeyDown(KEY_BACKSPACE) && (autoCursorCooldownCounter >= RAYGUI_TEXTBOX_AUTO_CURSOR_COOLDOWN)))) + { + autoCursorDelayCounter++; + + if (IsKeyPressed(KEY_BACKSPACE) || (autoCursorDelayCounter%RAYGUI_TEXTBOX_AUTO_CURSOR_DELAY) == 0) // Delay every movement some frames + { + int prevCodepointSize = 0; + GetCodepointPrevious(text + textBoxCursorIndex, &prevCodepointSize); + + // Move backward text from cursor position + for (int i = (textBoxCursorIndex - prevCodepointSize); i < textLength; i++) text[i] = text[i + prevCodepointSize]; + + // Prevent cursor index from decrementing past 0 + if (textBoxCursorIndex > 0) + { + textBoxCursorIndex -= codepointSize; + textLength -= codepointSize; + } + + // Make sure text last character is EOL + text[textLength] = '\0'; + } + } + + // Move cursor position with keys + if (IsKeyPressed(KEY_LEFT) || (IsKeyDown(KEY_LEFT) && (autoCursorCooldownCounter > RAYGUI_TEXTBOX_AUTO_CURSOR_COOLDOWN))) + { + autoCursorDelayCounter++; + + if (IsKeyPressed(KEY_LEFT) || (autoCursorDelayCounter%RAYGUI_TEXTBOX_AUTO_CURSOR_DELAY) == 0) // Delay every movement some frames + { + int prevCodepointSize = 0; + GetCodepointPrevious(text + textBoxCursorIndex, &prevCodepointSize); + + if (textBoxCursorIndex >= prevCodepointSize) textBoxCursorIndex -= prevCodepointSize; + } + } + else if (IsKeyPressed(KEY_RIGHT) || (IsKeyDown(KEY_RIGHT) && (autoCursorCooldownCounter > RAYGUI_TEXTBOX_AUTO_CURSOR_COOLDOWN))) + { + autoCursorDelayCounter++; + + if (IsKeyPressed(KEY_RIGHT) || (autoCursorDelayCounter%RAYGUI_TEXTBOX_AUTO_CURSOR_DELAY) == 0) // Delay every movement some frames + { + int nextCodepointSize = 0; + GetCodepointNext(text + textBoxCursorIndex, &nextCodepointSize); + + if ((textBoxCursorIndex + nextCodepointSize) <= textLength) textBoxCursorIndex += nextCodepointSize; + } + } + + // Move cursor position with mouse + if (CheckCollisionPointRec(mousePosition, textBounds)) // Mouse hover text + { + float scaleFactor = (float)GuiGetStyle(DEFAULT, TEXT_SIZE)/(float)guiFont.baseSize; + int codepoint = 0; + int codepointSize = 0; + int codepointIndex = 0; + float glyphWidth = 0.0f; + float widthToMouseX = 0; + int mouseCursorIndex = 0; + + for (int i = textIndexOffset; i < textLength; i++) + { + codepoint = GetCodepointNext(&text[i], &codepointSize); + codepointIndex = GetGlyphIndex(guiFont, codepoint); + + if (guiFont.glyphs[codepointIndex].advanceX == 0) glyphWidth = ((float)guiFont.recs[codepointIndex].width*scaleFactor); + else glyphWidth = ((float)guiFont.glyphs[codepointIndex].advanceX*scaleFactor); + + if (mousePosition.x <= (textBounds.x + (widthToMouseX + glyphWidth/2))) + { + mouseCursor.x = textBounds.x + widthToMouseX; + mouseCursorIndex = i; + break; + } + + widthToMouseX += (glyphWidth + (float)GuiGetStyle(DEFAULT, TEXT_SPACING)); + } + + // Check if mouse cursor is at the last position + int textEndWidth = GetTextWidth(text + textIndexOffset); + if (GetMousePosition().x >= (textBounds.x + textEndWidth - glyphWidth/2)) + { + mouseCursor.x = textBounds.x + textEndWidth; + mouseCursorIndex = strlen(text); + } + + // Place cursor at required index on mouse click + if ((mouseCursor.x >= 0) && IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) + { + cursor.x = mouseCursor.x; + textBoxCursorIndex = mouseCursorIndex; + } + } + else mouseCursor.x = -1; + + // Recalculate cursor position.y depending on textBoxCursorIndex + cursor.x = bounds.x + GuiGetStyle(TEXTBOX, TEXT_PADDING) + GetTextWidth(text + textIndexOffset) - GetTextWidth(text + textBoxCursorIndex) + GuiGetStyle(DEFAULT, TEXT_SPACING); + //if (multiline) cursor.y = GetTextLines() + + // Finish text editing on ENTER or mouse click outside bounds + if ((!multiline && IsKeyPressed(KEY_ENTER)) || + (!CheckCollisionPointRec(mousePosition, bounds) && IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) + { + textBoxCursorIndex = 0; // GLOBAL: Reset the shared cursor index + result = 1; + } + } + else + { + if (CheckCollisionPointRec(mousePosition, bounds)) + { + state = STATE_FOCUSED; + + if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) + { + textBoxCursorIndex = (int)strlen(text); // GLOBAL: Place cursor index to the end of current text + result = 1; + } + } + } + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + if (state == STATE_PRESSED) + { + GuiDrawRectangle(bounds, GuiGetStyle(TEXTBOX, BORDER_WIDTH), GetColor(GuiGetStyle(TEXTBOX, BORDER + (state*3))), GetColor(GuiGetStyle(TEXTBOX, BASE_COLOR_PRESSED))); + } + else if (state == STATE_DISABLED) + { + GuiDrawRectangle(bounds, GuiGetStyle(TEXTBOX, BORDER_WIDTH), GetColor(GuiGetStyle(TEXTBOX, BORDER + (state*3))), GetColor(GuiGetStyle(TEXTBOX, BASE_COLOR_DISABLED))); + } + else GuiDrawRectangle(bounds, GuiGetStyle(TEXTBOX, BORDER_WIDTH), GetColor(GuiGetStyle(TEXTBOX, BORDER + (state*3))), BLANK); + + // Draw text considering index offset if required + // NOTE: Text index offset depends on cursor position + GuiDrawText(text + textIndexOffset, textBounds, GuiGetStyle(TEXTBOX, TEXT_ALIGNMENT), GetColor(GuiGetStyle(TEXTBOX, TEXT + (state*3)))); + + // Draw cursor + if (editMode && !GuiGetStyle(TEXTBOX, TEXT_READONLY)) + { + //if (autoCursorMode || ((blinkCursorFrameCounter/40)%2 == 0)) + GuiDrawRectangle(cursor, 0, BLANK, GetColor(GuiGetStyle(TEXTBOX, BORDER_COLOR_PRESSED))); + + // Draw mouse position cursor (if required) + if (mouseCursor.x >= 0) GuiDrawRectangle(mouseCursor, 0, BLANK, GetColor(GuiGetStyle(TEXTBOX, BORDER_COLOR_PRESSED))); + } + else if (state == STATE_FOCUSED) GuiTooltip(bounds); + //-------------------------------------------------------------------- + + return result; // Mouse button pressed: result = 1 +} + +/* +// Text Box control with multiple lines and word-wrap +// NOTE: This text-box is readonly, no editing supported by default +bool GuiTextBoxMulti(Rectangle bounds, char *text, int bufferSize, bool editMode) +{ + bool pressed = false; + + GuiSetStyle(TEXTBOX, TEXT_READONLY, 1); + GuiSetStyle(DEFAULT, TEXT_WRAP_MODE, TEXT_WRAP_WORD); // WARNING: If wrap mode enabled, text editing is not supported + GuiSetStyle(DEFAULT, TEXT_ALIGNMENT_VERTICAL, TEXT_ALIGN_TOP); + + // TODO: Implement methods to calculate cursor position properly + pressed = GuiTextBox(bounds, text, bufferSize, editMode); + + GuiSetStyle(DEFAULT, TEXT_ALIGNMENT_VERTICAL, TEXT_ALIGN_MIDDLE); + GuiSetStyle(DEFAULT, TEXT_WRAP_MODE, TEXT_WRAP_NONE); + GuiSetStyle(TEXTBOX, TEXT_READONLY, 0); + + return pressed; +} +*/ + +// Spinner control, returns selected value +int GuiSpinner(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode) +{ + int result = 1; + GuiState state = guiState; + + int tempValue = *value; + + Rectangle spinner = { bounds.x + GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH) + GuiGetStyle(SPINNER, SPIN_BUTTON_SPACING), bounds.y, + bounds.width - 2*(GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH) + GuiGetStyle(SPINNER, SPIN_BUTTON_SPACING)), bounds.height }; + Rectangle leftButtonBound = { (float)bounds.x, (float)bounds.y, (float)GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH), (float)bounds.height }; + Rectangle rightButtonBound = { (float)bounds.x + bounds.width - GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH), (float)bounds.y, (float)GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH), (float)bounds.height }; + + Rectangle textBounds = { 0 }; + if (text != NULL) + { + textBounds.width = (float)GetTextWidth(text) + 2; + textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE); + textBounds.x = bounds.x + bounds.width + GuiGetStyle(SPINNER, TEXT_PADDING); + textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2; + if (GuiGetStyle(SPINNER, TEXT_ALIGNMENT) == TEXT_ALIGN_LEFT) textBounds.x = bounds.x - textBounds.width - GuiGetStyle(SPINNER, TEXT_PADDING); + } + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && !guiLocked && !guiSliderDragging) + { + Vector2 mousePoint = GetMousePosition(); + + // Check spinner state + if (CheckCollisionPointRec(mousePoint, bounds)) + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; + else state = STATE_FOCUSED; + } + } + +#if defined(RAYGUI_NO_ICONS) + if (GuiButton(leftButtonBound, "<")) tempValue--; + if (GuiButton(rightButtonBound, ">")) tempValue++; +#else + if (GuiButton(leftButtonBound, GuiIconText(ICON_ARROW_LEFT_FILL, NULL))) tempValue--; + if (GuiButton(rightButtonBound, GuiIconText(ICON_ARROW_RIGHT_FILL, NULL))) tempValue++; +#endif + + if (!editMode) + { + if (tempValue < minValue) tempValue = minValue; + if (tempValue > maxValue) tempValue = maxValue; + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + result = GuiValueBox(spinner, NULL, &tempValue, minValue, maxValue, editMode); + + // 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(SPINNER, BORDER_WIDTH)); + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); + + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, tempTextAlign); + GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth); + + // Draw text label if provided + GuiDrawText(text, textBounds, (GuiGetStyle(SPINNER, TEXT_ALIGNMENT) == TEXT_ALIGN_RIGHT)? TEXT_ALIGN_LEFT : TEXT_ALIGN_RIGHT, GetColor(GuiGetStyle(LABEL, TEXT + (state*3)))); + //-------------------------------------------------------------------- + + *value = tempValue; + return result; +} + +// Value Box control, updates input text with numbers +// NOTE: Requires static variables: frameCounter +int GuiValueBox(Rectangle bounds, const char *text, int *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"; + sprintf(textValue, "%i", *value); + + Rectangle textBounds = { 0 }; + if (text != NULL) + { + textBounds.width = (float)GetTextWidth(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 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2; + 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 && !guiSliderDragging) + { + Vector2 mousePoint = GetMousePosition(); + + bool valueHasChanged = false; + + if (editMode) + { + state = STATE_PRESSED; + + int keyCount = (int)strlen(textValue); + + // Only allow keys in range [48..57] + if (keyCount < RAYGUI_VALUEBOX_MAX_CHARS) + { + if (GetTextWidth(textValue) < bounds.width) + { + int key = GetCharPressed(); + if ((key >= 48) && (key <= 57)) + { + textValue[keyCount] = (char)key; + keyCount++; + valueHasChanged = true; + } + } + } + + // Delete text + if (keyCount > 0) + { + if (IsKeyPressed(KEY_BACKSPACE)) + { + keyCount--; + textValue[keyCount] = '\0'; + valueHasChanged = true; + } + } + + if (valueHasChanged) *value = TextToInteger(textValue); + + // NOTE: We are not clamp values until user input finishes + //if (*value > maxValue) *value = maxValue; + //else if (*value < minValue) *value = minValue; + + if (IsKeyPressed(KEY_ENTER) || (!CheckCollisionPointRec(mousePoint, bounds) && IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) 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; + if (state == STATE_PRESSED) baseColor = GetColor(GuiGetStyle(VALUEBOX, BASE_COLOR_PRESSED)); + else if (state == STATE_DISABLED) baseColor = GetColor(GuiGetStyle(VALUEBOX, BASE_COLOR_DISABLED)); + + GuiDrawRectangle(bounds, GuiGetStyle(VALUEBOX, BORDER_WIDTH), GetColor(GuiGetStyle(VALUEBOX, BORDER + (state*3))), baseColor); + GuiDrawText(textValue, GetTextBounds(VALUEBOX, bounds), TEXT_ALIGN_CENTER, GetColor(GuiGetStyle(VALUEBOX, TEXT + (state*3)))); + + // Draw cursor + if (editMode) + { + // NOTE: ValueBox internal text is always centered + Rectangle cursor = { bounds.x + GetTextWidth(textValue)/2 + bounds.width/2 + 1, bounds.y + 2*GuiGetStyle(VALUEBOX, BORDER_WIDTH), 4, bounds.height - 4*GuiGetStyle(VALUEBOX, BORDER_WIDTH) }; + GuiDrawRectangle(cursor, 0, BLANK, GetColor(GuiGetStyle(VALUEBOX, BORDER_COLOR_PRESSED))); + } + + // Draw text label if provided + GuiDrawText(text, textBounds, (GuiGetStyle(VALUEBOX, TEXT_ALIGNMENT) == TEXT_ALIGN_RIGHT)? TEXT_ALIGN_LEFT : TEXT_ALIGN_RIGHT, GetColor(GuiGetStyle(LABEL, TEXT + (state*3)))); + //-------------------------------------------------------------------- + + return result; +} + +// Slider control with pro parameters +// NOTE: Other GuiSlider*() controls use this one +int GuiSliderPro(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue, int sliderWidth) +{ + int result = 0; + GuiState state = guiState; + + float temp = (maxValue - minValue)/2.0f; + if (value == NULL) value = &temp; + + int sliderValue = (int)(((*value - 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) && !guiLocked) + { + Vector2 mousePoint = GetMousePosition(); + + if (guiSliderDragging) // Keep dragging outside of bounds + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) + { + if (CHECK_BOUNDS_ID(bounds, guiSliderActive)) + { + state = STATE_PRESSED; + + // Get equivalent value and slider position from mousePosition.x + *value = ((maxValue - minValue)*(mousePoint.x - (float)(bounds.x + sliderWidth/2)))/(float)(bounds.width - sliderWidth) + minValue; + } + } + else + { + guiSliderDragging = false; + guiSliderActive = RAYGUI_CLITERAL(Rectangle){ 0, 0, 0, 0 }; + } + } + else if (CheckCollisionPointRec(mousePoint, bounds)) + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) + { + state = STATE_PRESSED; + guiSliderDragging = true; + guiSliderActive = bounds; // Store bounds as an identifier when dragging starts + + if (!CheckCollisionPointRec(mousePoint, slider)) + { + // Get equivalent value and slider position from mousePosition.x + *value = ((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 state = STATE_FOCUSED; + } + + if (*value > maxValue) *value = maxValue; + else if (*value < minValue) *value = 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), GetColor(GuiGetStyle(SLIDER, BORDER + (state*3))), GetColor(GuiGetStyle(SLIDER, (state != STATE_DISABLED)? BASE_COLOR_NORMAL : BASE_COLOR_DISABLED))); + + // Draw slider internal bar (depends on state) + if (state == STATE_NORMAL) GuiDrawRectangle(slider, 0, BLANK, GetColor(GuiGetStyle(SLIDER, BASE_COLOR_PRESSED))); + else if (state == STATE_FOCUSED) GuiDrawRectangle(slider, 0, BLANK, GetColor(GuiGetStyle(SLIDER, TEXT_COLOR_FOCUSED))); + else if (state == STATE_PRESSED) GuiDrawRectangle(slider, 0, BLANK, GetColor(GuiGetStyle(SLIDER, TEXT_COLOR_PRESSED))); + + // Draw left/right text if provided + if (textLeft != NULL) + { + Rectangle textBounds = { 0 }; + textBounds.width = (float)GetTextWidth(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, GetColor(GuiGetStyle(SLIDER, TEXT + (state*3)))); + } + + if (textRight != NULL) + { + Rectangle textBounds = { 0 }; + textBounds.width = (float)GetTextWidth(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, GetColor(GuiGetStyle(SLIDER, TEXT + (state*3)))); + } + //-------------------------------------------------------------------- + + return result; +} + +// Slider control extended, returns selected value and has text +int GuiSlider(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue) +{ + return GuiSliderPro(bounds, textLeft, textRight, value, minValue, maxValue, GuiGetStyle(SLIDER, SLIDER_WIDTH)); +} + +// Slider Bar control extended, returns selected value +int GuiSliderBar(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue) +{ + return GuiSliderPro(bounds, textLeft, textRight, value, minValue, maxValue, 0); +} + +// Progress Bar control extended, shows current progress value +int GuiProgressBar(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue) +{ + int result = 0; + GuiState state = guiState; + + float temp = (maxValue - minValue)/2.0f; + if (value == NULL) value = &temp; + + // Progress bar + Rectangle progress = { bounds.x + GuiGetStyle(PROGRESSBAR, BORDER_WIDTH), + bounds.y + GuiGetStyle(PROGRESSBAR, BORDER_WIDTH) + GuiGetStyle(PROGRESSBAR, PROGRESS_PADDING), 0, + bounds.height - 2*GuiGetStyle(PROGRESSBAR, BORDER_WIDTH) - 2*GuiGetStyle(PROGRESSBAR, PROGRESS_PADDING) }; + + // Update control + //-------------------------------------------------------------------- + if (*value > maxValue) *value = maxValue; + + // WARNING: Working with floats could lead to rounding issues + if ((state != STATE_DISABLED)) progress.width = (float)(*value/(maxValue - minValue))*bounds.width - ((*value >= maxValue) ? (float)(2*GuiGetStyle(PROGRESSBAR, BORDER_WIDTH)) : 0.0f); + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + if (state == STATE_DISABLED) + { + GuiDrawRectangle(bounds, GuiGetStyle(PROGRESSBAR, BORDER_WIDTH), GetColor(GuiGetStyle(PROGRESSBAR, BORDER + (state*3))), BLANK); + } + else + { + if (*value > minValue) + { + // Draw progress bar with colored border, more visual + GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x, bounds.y, (int)progress.width + (float)GuiGetStyle(PROGRESSBAR, BORDER_WIDTH), (float)GuiGetStyle(PROGRESSBAR, BORDER_WIDTH) }, 0, BLANK, GetColor(GuiGetStyle(PROGRESSBAR, BORDER_COLOR_FOCUSED))); + GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x, bounds.y + 1, (float)GuiGetStyle(PROGRESSBAR, BORDER_WIDTH), bounds.height - 2 }, 0, BLANK, GetColor(GuiGetStyle(PROGRESSBAR, BORDER_COLOR_FOCUSED))); + GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x, bounds.y + bounds.height - 1, (int)progress.width + (float)GuiGetStyle(PROGRESSBAR, BORDER_WIDTH), (float)GuiGetStyle(PROGRESSBAR, BORDER_WIDTH) }, 0, BLANK, GetColor(GuiGetStyle(PROGRESSBAR, BORDER_COLOR_FOCUSED))); + } + else GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x, bounds.y, (float)GuiGetStyle(PROGRESSBAR, BORDER_WIDTH), bounds.height }, 0, BLANK, GetColor(GuiGetStyle(PROGRESSBAR, BORDER_COLOR_NORMAL))); + + if (*value >= maxValue) GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x + progress.width + 1, bounds.y, (float)GuiGetStyle(PROGRESSBAR, BORDER_WIDTH), bounds.height }, 0, BLANK, GetColor(GuiGetStyle(PROGRESSBAR, BORDER_COLOR_FOCUSED))); + else + { + // Draw borders not yet reached by value + GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x + (int)progress.width + 1, bounds.y, bounds.width - (int)progress.width - 1, (float)GuiGetStyle(PROGRESSBAR, BORDER_WIDTH) }, 0, BLANK, GetColor(GuiGetStyle(PROGRESSBAR, BORDER_COLOR_NORMAL))); + GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x + (int)progress.width + 1, bounds.y + bounds.height - 1, bounds.width - (int)progress.width - 1, (float)GuiGetStyle(PROGRESSBAR, BORDER_WIDTH) }, 0, BLANK, GetColor(GuiGetStyle(PROGRESSBAR, BORDER_COLOR_NORMAL))); + GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x + bounds.width - 1, bounds.y + 1, (float)GuiGetStyle(PROGRESSBAR, BORDER_WIDTH), bounds.height - 2 }, 0, BLANK, GetColor(GuiGetStyle(PROGRESSBAR, BORDER_COLOR_NORMAL))); + } + + // Draw slider internal progress bar (depends on state) + GuiDrawRectangle(progress, 0, BLANK, GetColor(GuiGetStyle(PROGRESSBAR, BASE_COLOR_PRESSED))); + } + + // Draw left/right text if provided + if (textLeft != NULL) + { + Rectangle textBounds = { 0 }; + textBounds.width = (float)GetTextWidth(textLeft); + textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE); + textBounds.x = bounds.x - textBounds.width - GuiGetStyle(PROGRESSBAR, TEXT_PADDING); + textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2; + + GuiDrawText(textLeft, textBounds, TEXT_ALIGN_RIGHT, GetColor(GuiGetStyle(PROGRESSBAR, TEXT + (state*3)))); + } + + if (textRight != NULL) + { + Rectangle textBounds = { 0 }; + textBounds.width = (float)GetTextWidth(textRight); + textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE); + textBounds.x = bounds.x + bounds.width + GuiGetStyle(PROGRESSBAR, TEXT_PADDING); + textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2; + + GuiDrawText(textRight, textBounds, TEXT_ALIGN_LEFT, GetColor(GuiGetStyle(PROGRESSBAR, TEXT + (state*3)))); + } + //-------------------------------------------------------------------- + + return result; +} + +// Status Bar control +int GuiStatusBar(Rectangle bounds, const char *text) +{ + int result = 0; + GuiState state = guiState; + + // Draw control + //-------------------------------------------------------------------- + GuiDrawRectangle(bounds, GuiGetStyle(STATUSBAR, BORDER_WIDTH), GetColor(GuiGetStyle(STATUSBAR, BORDER + (state*3))), GetColor(GuiGetStyle(STATUSBAR, BASE + (state*3)))); + GuiDrawText(text, GetTextBounds(STATUSBAR, bounds), GuiGetStyle(STATUSBAR, TEXT_ALIGNMENT), GetColor(GuiGetStyle(STATUSBAR, TEXT + (state*3)))); + //-------------------------------------------------------------------- + + return result; +} + +// Dummy rectangle control, intended for placeholding +int GuiDummyRec(Rectangle bounds, const char *text) +{ + int result = 0; + GuiState state = guiState; + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && !guiLocked && !guiSliderDragging) + { + Vector2 mousePoint = GetMousePosition(); + + // Check button state + if (CheckCollisionPointRec(mousePoint, bounds)) + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; + else state = STATE_FOCUSED; + } + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + GuiDrawRectangle(bounds, 0, BLANK, GetColor(GuiGetStyle(DEFAULT, (state != STATE_DISABLED)? BASE_COLOR_NORMAL : BASE_COLOR_DISABLED))); + GuiDrawText(text, GetTextBounds(DEFAULT, bounds), TEXT_ALIGN_CENTER, GetColor(GuiGetStyle(BUTTON, (state != STATE_DISABLED)? TEXT_COLOR_NORMAL : TEXT_COLOR_DISABLED))); + //------------------------------------------------------------------ + + return result; +} + +// List View control +int GuiListView(Rectangle bounds, const char *text, int *scrollIndex, int *active) +{ + int result = 0; + int itemCount = 0; + const char **items = NULL; + + if (text != NULL) items = GuiTextSplit(text, ';', &itemCount, NULL); + + result = GuiListViewEx(bounds, items, itemCount, scrollIndex, active, NULL); + + return result; +} + +// List View control with extended parameters +int GuiListViewEx(Rectangle bounds, const char **text, int count, int *scrollIndex, int *active, int *focus) +{ + int result = 0; + GuiState state = guiState; + + int itemFocused = (focus == NULL)? -1 : *focus; + int itemSelected = (active == NULL)? -1 : *active; + + // Check if we need a scroll bar + bool useScrollBar = false; + if ((GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING))*count > bounds.height) useScrollBar = true; + + // Define base item rectangle [0] + Rectangle itemBounds = { 0 }; + itemBounds.x = bounds.x + GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING); + itemBounds.y = bounds.y + GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING) + GuiGetStyle(DEFAULT, BORDER_WIDTH); + itemBounds.width = bounds.width - 2*GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING) - GuiGetStyle(DEFAULT, BORDER_WIDTH); + itemBounds.height = (float)GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT); + if (useScrollBar) itemBounds.width -= GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH); + + // Get items on the list + int visibleItems = (int)bounds.height/(GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING)); + 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 != STATE_DISABLED) && !guiLocked && !guiSliderDragging) + { + Vector2 mousePoint = GetMousePosition(); + + // Check mouse inside list view + if (CheckCollisionPointRec(mousePoint, bounds)) + { + state = 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)) + { + if (itemSelected == (startIndex + i)) itemSelected = -1; + else itemSelected = startIndex + i; + } + break; + } + + // Update item rectangle y position for next item + itemBounds.y += (GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING)); + } + + if (useScrollBar) + { + int wheelMove = (int)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_SPACING) + GuiGetStyle(DEFAULT, BORDER_WIDTH); + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + GuiDrawRectangle(bounds, GuiGetStyle(DEFAULT, BORDER_WIDTH), GetColor(GuiGetStyle(LISTVIEW, BORDER + state*3)), GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR))); // Draw background + + // Draw visible items + for (int i = 0; ((i < visibleItems) && (text != NULL)); i++) + { + if (state == STATE_DISABLED) + { + if ((startIndex + i) == itemSelected) GuiDrawRectangle(itemBounds, GuiGetStyle(LISTVIEW, BORDER_WIDTH), GetColor(GuiGetStyle(LISTVIEW, BORDER_COLOR_DISABLED)), GetColor(GuiGetStyle(LISTVIEW, BASE_COLOR_DISABLED))); + + GuiDrawText(text[startIndex + i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_DISABLED))); + } + else + { + if (((startIndex + i) == itemSelected) && (active != NULL)) + { + // Draw item selected + GuiDrawRectangle(itemBounds, GuiGetStyle(LISTVIEW, BORDER_WIDTH), GetColor(GuiGetStyle(LISTVIEW, BORDER_COLOR_PRESSED)), GetColor(GuiGetStyle(LISTVIEW, BASE_COLOR_PRESSED))); + GuiDrawText(text[startIndex + i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_PRESSED))); + } + else if (((startIndex + i) == itemFocused)) // && (focus != NULL)) // NOTE: We want items focused, despite not returned! + { + // Draw item focused + GuiDrawRectangle(itemBounds, GuiGetStyle(LISTVIEW, BORDER_WIDTH), GetColor(GuiGetStyle(LISTVIEW, BORDER_COLOR_FOCUSED)), GetColor(GuiGetStyle(LISTVIEW, BASE_COLOR_FOCUSED))); + GuiDrawText(text[startIndex + i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_FOCUSED))); + } + else + { + // Draw item normal + GuiDrawText(text[startIndex + i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_NORMAL))); + } + } + + // Update item rectangle y position for next item + itemBounds.y += (GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING)); + } + + 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, SCROLL_SLIDER_SIZE); // Save default slider size + int prevScrollSpeed = GuiGetStyle(SCROLLBAR, SCROLL_SPEED); // Save default scroll speed + GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, (int)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, SCROLL_SLIDER_SIZE, prevSliderSize); // Reset slider size to default + } + //-------------------------------------------------------------------- + + if (active != NULL) *active = itemSelected; + if (focus != NULL) *focus = itemFocused; + if (scrollIndex != NULL) *scrollIndex = startIndex; + + return result; +} + +// Color Panel control +int GuiColorPanel(Rectangle bounds, const char *text, Color *color) +{ + int result = 0; + GuiState state = guiState; + Vector2 pickerSelector = { 0 }; + + const Color colWhite = { 255, 255, 255, 255 }; + const Color colBlack = { 0, 0, 0, 255 }; + + Vector3 vcolor = { (float)color->r/255.0f, (float)color->g/255.0f, (float)color->b/255.0f }; + Vector3 hsv = ConvertRGBtoHSV(vcolor); + + pickerSelector.x = bounds.x + (float)hsv.y*bounds.width; // HSV: Saturation + pickerSelector.y = bounds.y + (1.0f - (float)hsv.z)*bounds.height; // HSV: Value + + float hue = -1.0f; + Vector3 maxHue = { hue >= 0.0f ? hue : hsv.x, 1.0f, 1.0f }; + Vector3 rgbHue = ConvertHSVtoRGB(maxHue); + Color maxHueCol = { (unsigned char)(255.0f*rgbHue.x), + (unsigned char)(255.0f*rgbHue.y), + (unsigned char)(255.0f*rgbHue.z), 255 }; + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && !guiLocked && !guiSliderDragging) + { + Vector2 mousePoint = GetMousePosition(); + + if (CheckCollisionPointRec(mousePoint, bounds)) + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) + { + state = STATE_PRESSED; + pickerSelector = mousePoint; + + // Calculate color from picker + Vector2 colorPick = { pickerSelector.x - bounds.x, pickerSelector.y - bounds.y }; + + colorPick.x /= (float)bounds.width; // Get normalized value on x + colorPick.y /= (float)bounds.height; // Get normalized value on y + + hsv.y = colorPick.x; + hsv.z = 1.0f - colorPick.y; + + Vector3 rgb = ConvertHSVtoRGB(hsv); + + // NOTE: Vector3ToColor() only available on raylib 1.8.1 + *color = RAYGUI_CLITERAL(Color){ (unsigned char)(255.0f*rgb.x), + (unsigned char)(255.0f*rgb.y), + (unsigned char)(255.0f*rgb.z), + (unsigned char)(255.0f*(float)color->a/255.0f) }; + + } + else state = STATE_FOCUSED; + } + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + if (state != STATE_DISABLED) + { + DrawRectangleGradientEx(bounds, Fade(colWhite, guiAlpha), Fade(colWhite, guiAlpha), Fade(maxHueCol, guiAlpha), Fade(maxHueCol, guiAlpha)); + DrawRectangleGradientEx(bounds, Fade(colBlack, 0), Fade(colBlack, guiAlpha), Fade(colBlack, guiAlpha), Fade(colBlack, 0)); + + // Draw color picker: selector + Rectangle selector = { pickerSelector.x - GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE)/2, pickerSelector.y - GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE)/2, (float)GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE), (float)GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE) }; + GuiDrawRectangle(selector, 0, BLANK, colWhite); + } + else + { + DrawRectangleGradientEx(bounds, Fade(Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.1f), guiAlpha), Fade(Fade(colBlack, 0.6f), guiAlpha), Fade(Fade(colBlack, 0.6f), guiAlpha), Fade(Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), 0.6f), guiAlpha)); + } + + GuiDrawRectangle(bounds, GuiGetStyle(COLORPICKER, BORDER_WIDTH), GetColor(GuiGetStyle(COLORPICKER, BORDER + state*3)), BLANK); + //-------------------------------------------------------------------- + + return result; +} + +// Color Bar Alpha control +// NOTE: Returns alpha value normalized [0..1] +int GuiColorBarAlpha(Rectangle bounds, const char *text, float *alpha) +{ + #if !defined(RAYGUI_COLORBARALPHA_CHECKED_SIZE) + #define RAYGUI_COLORBARALPHA_CHECKED_SIZE 10 + #endif + + int result = 0; + GuiState state = guiState; + Rectangle selector = { (float)bounds.x + (*alpha)*bounds.width - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_HEIGHT)/2, (float)bounds.y - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (float)GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_HEIGHT), (float)bounds.height + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW)*2 }; + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && !guiLocked) + { + Vector2 mousePoint = GetMousePosition(); + + if (guiSliderDragging) // Keep dragging outside of bounds + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) + { + if (CHECK_BOUNDS_ID(bounds, guiSliderActive)) + { + state = STATE_PRESSED; + + *alpha = (mousePoint.x - bounds.x)/bounds.width; + if (*alpha <= 0.0f) *alpha = 0.0f; + if (*alpha >= 1.0f) *alpha = 1.0f; + } + } + else + { + guiSliderDragging = false; + guiSliderActive = RAYGUI_CLITERAL(Rectangle){ 0, 0, 0, 0 }; + } + } + else if (CheckCollisionPointRec(mousePoint, bounds) || CheckCollisionPointRec(mousePoint, selector)) + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) + { + state = STATE_PRESSED; + guiSliderDragging = true; + guiSliderActive = bounds; // Store bounds as an identifier when dragging starts + + *alpha = (mousePoint.x - bounds.x)/bounds.width; + if (*alpha <= 0.0f) *alpha = 0.0f; + if (*alpha >= 1.0f) *alpha = 1.0f; + //selector.x = bounds.x + (int)(((alpha - 0)/(100 - 0))*(bounds.width - 2*GuiGetStyle(SLIDER, BORDER_WIDTH))) - selector.width/2; + } + else state = STATE_FOCUSED; + } + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + + // Draw alpha bar: checked background + if (state != STATE_DISABLED) + { + int checksX = (int)bounds.width/RAYGUI_COLORBARALPHA_CHECKED_SIZE; + int checksY = (int)bounds.height/RAYGUI_COLORBARALPHA_CHECKED_SIZE; + + for (int x = 0; x < checksX; x++) + { + for (int y = 0; y < checksY; y++) + { + Rectangle check = { bounds.x + x*RAYGUI_COLORBARALPHA_CHECKED_SIZE, bounds.y + y*RAYGUI_COLORBARALPHA_CHECKED_SIZE, RAYGUI_COLORBARALPHA_CHECKED_SIZE, RAYGUI_COLORBARALPHA_CHECKED_SIZE }; + GuiDrawRectangle(check, 0, BLANK, ((x + y)%2)? Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), 0.4f) : Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.4f)); + } + } + + DrawRectangleGradientEx(bounds, RAYGUI_CLITERAL(Color){ 255, 255, 255, 0 }, RAYGUI_CLITERAL(Color){ 255, 255, 255, 0 }, Fade(RAYGUI_CLITERAL(Color){ 0, 0, 0, 255 }, guiAlpha), Fade(RAYGUI_CLITERAL(Color){ 0, 0, 0, 255 }, guiAlpha)); + } + else DrawRectangleGradientEx(bounds, Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.1f), Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.1f), Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), guiAlpha), Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), guiAlpha)); + + GuiDrawRectangle(bounds, GuiGetStyle(COLORPICKER, BORDER_WIDTH), GetColor(GuiGetStyle(COLORPICKER, BORDER + state*3)), BLANK); + + // Draw alpha bar: selector + GuiDrawRectangle(selector, 0, BLANK, GetColor(GuiGetStyle(COLORPICKER, BORDER + state*3))); + //-------------------------------------------------------------------- + + return result; +} + +// Color Bar Hue control +// Returns hue value normalized [0..1] +// NOTE: Other similar bars (for reference): +// Color GuiColorBarSat() [WHITE->color] +// Color GuiColorBarValue() [BLACK->color], HSV/HSL +// float GuiColorBarLuminance() [BLACK->WHITE] +int GuiColorBarHue(Rectangle bounds, const char *text, float *hue) +{ + int result = 0; + GuiState state = guiState; + Rectangle selector = { (float)bounds.x - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (float)bounds.y + (*hue)/360.0f*bounds.height - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_HEIGHT)/2, (float)bounds.width + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW)*2, (float)GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_HEIGHT) }; + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && !guiLocked) + { + Vector2 mousePoint = GetMousePosition(); + + if (guiSliderDragging) // Keep dragging outside of bounds + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) + { + if (CHECK_BOUNDS_ID(bounds, guiSliderActive)) + { + state = STATE_PRESSED; + + *hue = (mousePoint.y - bounds.y)*360/bounds.height; + if (*hue <= 0.0f) *hue = 0.0f; + if (*hue >= 359.0f) *hue = 359.0f; + } + } + else + { + guiSliderDragging = false; + guiSliderActive = RAYGUI_CLITERAL(Rectangle){ 0, 0, 0, 0 }; + } + } + else if (CheckCollisionPointRec(mousePoint, bounds) || CheckCollisionPointRec(mousePoint, selector)) + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) + { + state = STATE_PRESSED; + guiSliderDragging = true; + guiSliderActive = bounds; // Store bounds as an identifier when dragging starts + + *hue = (mousePoint.y - bounds.y)*360/bounds.height; + if (*hue <= 0.0f) *hue = 0.0f; + if (*hue >= 359.0f) *hue = 359.0f; + + } + else state = STATE_FOCUSED; + + /*if (IsKeyDown(KEY_UP)) + { + hue -= 2.0f; + if (hue <= 0.0f) hue = 0.0f; + } + else if (IsKeyDown(KEY_DOWN)) + { + hue += 2.0f; + if (hue >= 360.0f) hue = 360.0f; + }*/ + } + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + if (state != STATE_DISABLED) + { + // Draw hue bar:color bars + // TODO: Use directly DrawRectangleGradientEx(bounds, color1, color2, color2, color1); + DrawRectangleGradientV((int)bounds.x, (int)(bounds.y), (int)bounds.width, (int)ceilf(bounds.height/6), Fade(RAYGUI_CLITERAL(Color){ 255, 0, 0, 255 }, guiAlpha), Fade(RAYGUI_CLITERAL(Color){ 255, 255, 0, 255 }, guiAlpha)); + DrawRectangleGradientV((int)bounds.x, (int)(bounds.y + bounds.height/6), (int)bounds.width, (int)ceilf(bounds.height/6), Fade(RAYGUI_CLITERAL(Color){ 255, 255, 0, 255 }, guiAlpha), Fade(RAYGUI_CLITERAL(Color){ 0, 255, 0, 255 }, guiAlpha)); + DrawRectangleGradientV((int)bounds.x, (int)(bounds.y + 2*(bounds.height/6)), (int)bounds.width, (int)ceilf(bounds.height/6), Fade(RAYGUI_CLITERAL(Color){ 0, 255, 0, 255 }, guiAlpha), Fade(RAYGUI_CLITERAL(Color){ 0, 255, 255, 255 }, guiAlpha)); + DrawRectangleGradientV((int)bounds.x, (int)(bounds.y + 3*(bounds.height/6)), (int)bounds.width, (int)ceilf(bounds.height/6), Fade(RAYGUI_CLITERAL(Color){ 0, 255, 255, 255 }, guiAlpha), Fade(RAYGUI_CLITERAL(Color){ 0, 0, 255, 255 }, guiAlpha)); + DrawRectangleGradientV((int)bounds.x, (int)(bounds.y + 4*(bounds.height/6)), (int)bounds.width, (int)ceilf(bounds.height/6), Fade(RAYGUI_CLITERAL(Color){ 0, 0, 255, 255 }, guiAlpha), Fade(RAYGUI_CLITERAL(Color){ 255, 0, 255, 255 }, guiAlpha)); + DrawRectangleGradientV((int)bounds.x, (int)(bounds.y + 5*(bounds.height/6)), (int)bounds.width, (int)(bounds.height/6), Fade(RAYGUI_CLITERAL(Color){ 255, 0, 255, 255 }, guiAlpha), Fade(RAYGUI_CLITERAL(Color){ 255, 0, 0, 255 }, guiAlpha)); + } + else DrawRectangleGradientV((int)bounds.x, (int)bounds.y, (int)bounds.width, (int)bounds.height, Fade(Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.1f), guiAlpha), Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), guiAlpha)); + + GuiDrawRectangle(bounds, GuiGetStyle(COLORPICKER, BORDER_WIDTH), GetColor(GuiGetStyle(COLORPICKER, BORDER + state*3)), BLANK); + + // Draw hue bar: selector + GuiDrawRectangle(selector, 0, BLANK, GetColor(GuiGetStyle(COLORPICKER, BORDER + state*3))); + //-------------------------------------------------------------------- + + return result; +} + +// Color Picker control +// NOTE: It's divided in multiple controls: +// Color GuiColorPanel(Rectangle bounds, Color color) +// float GuiColorBarAlpha(Rectangle bounds, float alpha) +// float GuiColorBarHue(Rectangle bounds, float value) +// NOTE: bounds define GuiColorPanel() size +int GuiColorPicker(Rectangle bounds, const char *text, Color *color) +{ + int result = 0; + + Color temp = { 200, 0, 0, 255 }; + if (color == NULL) color = &temp; + + GuiColorPanel(bounds, NULL, color); + + Rectangle boundsHue = { (float)bounds.x + bounds.width + GuiGetStyle(COLORPICKER, HUEBAR_PADDING), (float)bounds.y, (float)GuiGetStyle(COLORPICKER, HUEBAR_WIDTH), (float)bounds.height }; + //Rectangle boundsAlpha = { bounds.x, bounds.y + bounds.height + GuiGetStyle(COLORPICKER, BARS_PADDING), bounds.width, GuiGetStyle(COLORPICKER, BARS_THICK) }; + + Vector3 hsv = ConvertRGBtoHSV(RAYGUI_CLITERAL(Vector3){ (*color).r/255.0f, (*color).g/255.0f, (*color).b/255.0f }); + + GuiColorBarHue(boundsHue, NULL, &hsv.x); + + //color.a = (unsigned char)(GuiColorBarAlpha(boundsAlpha, (float)color.a/255.0f)*255.0f); + Vector3 rgb = ConvertHSVtoRGB(hsv); + + *color = RAYGUI_CLITERAL(Color){ (unsigned char)roundf(rgb.x*255.0f), (unsigned char)roundf(rgb.y*255.0f), (unsigned char)roundf(rgb.z*255.0f), (*color).a }; + + return result; +} + +// Color Picker control that avoids conversion to RGB and back to HSV on each call, thus avoiding jittering. +// The user can call ConvertHSVtoRGB() to convert *colorHsv value to RGB. +// NOTE: It's divided in multiple controls: +// int GuiColorPanelHSV(Rectangle bounds, const char *text, Vector3 *colorHsv) +// int GuiColorBarAlpha(Rectangle bounds, const char *text, float *alpha) +// float GuiColorBarHue(Rectangle bounds, float value) +// NOTE: bounds define GuiColorPanelHSV() size +int GuiColorPickerHSV(Rectangle bounds, const char *text, Vector3 *colorHsv) +{ + int result = 0; + + Vector3 tempHsv = { 0 }; + + if (colorHsv == NULL) + { + const Vector3 tempColor = { 200.0f/255.0f, 0.0f, 0.0f }; + tempHsv = ConvertRGBtoHSV(tempColor); + colorHsv = &tempHsv; + } + + GuiColorPanelHSV(bounds, NULL, colorHsv); + + const Rectangle boundsHue = { (float)bounds.x + bounds.width + GuiGetStyle(COLORPICKER, HUEBAR_PADDING), (float)bounds.y, (float)GuiGetStyle(COLORPICKER, HUEBAR_WIDTH), (float)bounds.height }; + + GuiColorBarHue(boundsHue, NULL, &colorHsv->x); + + return result; +} + +// Color Panel control, returns HSV color value in *colorHsv. +// Used by GuiColorPickerHSV() +int GuiColorPanelHSV(Rectangle bounds, const char *text, Vector3 *colorHsv) +{ + int result = 0; + GuiState state = guiState; + Vector2 pickerSelector = { 0 }; + + const Color colWhite = { 255, 255, 255, 255 }; + const Color colBlack = { 0, 0, 0, 255 }; + + pickerSelector.x = bounds.x + (float)colorHsv->y*bounds.width; // HSV: Saturation + pickerSelector.y = bounds.y + (1.0f - (float)colorHsv->z)*bounds.height; // HSV: Value + + float hue = -1.0f; + Vector3 maxHue = { hue >= 0.0f ? hue : colorHsv->x, 1.0f, 1.0f }; + Vector3 rgbHue = ConvertHSVtoRGB(maxHue); + Color maxHueCol = { (unsigned char)(255.0f*rgbHue.x), + (unsigned char)(255.0f*rgbHue.y), + (unsigned char)(255.0f*rgbHue.z), 255 }; + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && !guiLocked && !guiSliderDragging) + { + Vector2 mousePoint = GetMousePosition(); + + if (CheckCollisionPointRec(mousePoint, bounds)) + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) + { + state = STATE_PRESSED; + pickerSelector = mousePoint; + + // Calculate color from picker + Vector2 colorPick = { pickerSelector.x - bounds.x, pickerSelector.y - bounds.y }; + + colorPick.x /= (float)bounds.width; // Get normalized value on x + colorPick.y /= (float)bounds.height; // Get normalized value on y + + colorHsv->y = colorPick.x; + colorHsv->z = 1.0f - colorPick.y; + } + else state = STATE_FOCUSED; + } + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + if (state != STATE_DISABLED) + { + DrawRectangleGradientEx(bounds, Fade(colWhite, guiAlpha), Fade(colWhite, guiAlpha), Fade(maxHueCol, guiAlpha), Fade(maxHueCol, guiAlpha)); + DrawRectangleGradientEx(bounds, Fade(colBlack, 0), Fade(colBlack, guiAlpha), Fade(colBlack, guiAlpha), Fade(colBlack, 0)); + + // Draw color picker: selector + Rectangle selector = { pickerSelector.x - GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE)/2, pickerSelector.y - GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE)/2, (float)GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE), (float)GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE) }; + GuiDrawRectangle(selector, 0, BLANK, colWhite); + } + else + { + DrawRectangleGradientEx(bounds, Fade(Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.1f), guiAlpha), Fade(Fade(colBlack, 0.6f), guiAlpha), Fade(Fade(colBlack, 0.6f), guiAlpha), Fade(Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), 0.6f), guiAlpha)); + } + + GuiDrawRectangle(bounds, GuiGetStyle(COLORPICKER, BORDER_WIDTH), GetColor(GuiGetStyle(COLORPICKER, BORDER + state*3)), BLANK); + //-------------------------------------------------------------------- + + return result; +} + +// Message Box control +int GuiMessageBox(Rectangle bounds, const char *title, const char *message, const char *buttons) +{ + #if !defined(RAYGUI_MESSAGEBOX_BUTTON_HEIGHT) + #define RAYGUI_MESSAGEBOX_BUTTON_HEIGHT 24 + #endif + #if !defined(RAYGUI_MESSAGEBOX_BUTTON_PADDING) + #define RAYGUI_MESSAGEBOX_BUTTON_PADDING 12 + #endif + + int result = -1; // Returns clicked button from buttons list, 0 refers to closed window button + + int buttonCount = 0; + const char **buttonsText = GuiTextSplit(buttons, ';', &buttonCount, NULL); + Rectangle buttonBounds = { 0 }; + buttonBounds.x = bounds.x + RAYGUI_MESSAGEBOX_BUTTON_PADDING; + buttonBounds.y = bounds.y + bounds.height - RAYGUI_MESSAGEBOX_BUTTON_HEIGHT - RAYGUI_MESSAGEBOX_BUTTON_PADDING; + buttonBounds.width = (bounds.width - RAYGUI_MESSAGEBOX_BUTTON_PADDING*(buttonCount + 1))/buttonCount; + buttonBounds.height = RAYGUI_MESSAGEBOX_BUTTON_HEIGHT; + + int textWidth = GetTextWidth(message) + 2; + + Rectangle textBounds = { 0 }; + textBounds.x = bounds.x + bounds.width/2 - textWidth/2; + textBounds.y = bounds.y + RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT + RAYGUI_MESSAGEBOX_BUTTON_PADDING; + textBounds.width = (float)textWidth; + textBounds.height = bounds.height - RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT - 3*RAYGUI_MESSAGEBOX_BUTTON_PADDING - RAYGUI_MESSAGEBOX_BUTTON_HEIGHT; + + // Draw control + //-------------------------------------------------------------------- + if (GuiWindowBox(bounds, title)) result = 0; + + int prevTextAlignment = GuiGetStyle(LABEL, TEXT_ALIGNMENT); + GuiSetStyle(LABEL, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); + GuiLabel(textBounds, message); + GuiSetStyle(LABEL, TEXT_ALIGNMENT, prevTextAlignment); + + prevTextAlignment = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); + + for (int i = 0; i < buttonCount; i++) + { + if (GuiButton(buttonBounds, buttonsText[i])) result = i + 1; + buttonBounds.x += (buttonBounds.width + RAYGUI_MESSAGEBOX_BUTTON_PADDING); + } + + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, prevTextAlignment); + //-------------------------------------------------------------------- + + return result; +} + +// Text Input Box control, ask for text +int GuiTextInputBox(Rectangle bounds, const char *title, const char *message, const char *buttons, char *text, int textMaxSize, bool *secretViewActive) +{ + #if !defined(RAYGUI_TEXTINPUTBOX_BUTTON_HEIGHT) + #define RAYGUI_TEXTINPUTBOX_BUTTON_HEIGHT 24 + #endif + #if !defined(RAYGUI_TEXTINPUTBOX_BUTTON_PADDING) + #define RAYGUI_TEXTINPUTBOX_BUTTON_PADDING 12 + #endif + #if !defined(RAYGUI_TEXTINPUTBOX_HEIGHT) + #define RAYGUI_TEXTINPUTBOX_HEIGHT 26 + #endif + + // Used to enable text edit mode + // WARNING: No more than one GuiTextInputBox() should be open at the same time + static bool textEditMode = false; + + int result = -1; + + int buttonCount = 0; + const char **buttonsText = GuiTextSplit(buttons, ';', &buttonCount, NULL); + Rectangle buttonBounds = { 0 }; + buttonBounds.x = bounds.x + RAYGUI_TEXTINPUTBOX_BUTTON_PADDING; + buttonBounds.y = bounds.y + bounds.height - RAYGUI_TEXTINPUTBOX_BUTTON_HEIGHT - RAYGUI_TEXTINPUTBOX_BUTTON_PADDING; + buttonBounds.width = (bounds.width - RAYGUI_TEXTINPUTBOX_BUTTON_PADDING*(buttonCount + 1))/buttonCount; + buttonBounds.height = RAYGUI_TEXTINPUTBOX_BUTTON_HEIGHT; + + int messageInputHeight = (int)bounds.height - RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT - GuiGetStyle(STATUSBAR, BORDER_WIDTH) - RAYGUI_TEXTINPUTBOX_BUTTON_HEIGHT - 2*RAYGUI_TEXTINPUTBOX_BUTTON_PADDING; + + Rectangle textBounds = { 0 }; + if (message != NULL) + { + int textSize = GetTextWidth(message) + 2; + + textBounds.x = bounds.x + bounds.width/2 - textSize/2; + textBounds.y = bounds.y + RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT + messageInputHeight/4 - (float)GuiGetStyle(DEFAULT, TEXT_SIZE)/2; + textBounds.width = (float)textSize; + textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE); + } + + Rectangle textBoxBounds = { 0 }; + textBoxBounds.x = bounds.x + RAYGUI_TEXTINPUTBOX_BUTTON_PADDING; + textBoxBounds.y = bounds.y + RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT - RAYGUI_TEXTINPUTBOX_HEIGHT/2; + if (message == NULL) textBoxBounds.y = bounds.y + 24 + RAYGUI_TEXTINPUTBOX_BUTTON_PADDING; + else textBoxBounds.y += (messageInputHeight/2 + messageInputHeight/4); + textBoxBounds.width = bounds.width - RAYGUI_TEXTINPUTBOX_BUTTON_PADDING*2; + textBoxBounds.height = RAYGUI_TEXTINPUTBOX_HEIGHT; + + // Draw control + //-------------------------------------------------------------------- + if (GuiWindowBox(bounds, title)) result = 0; + + // Draw message if available + if (message != NULL) + { + int prevTextAlignment = GuiGetStyle(LABEL, TEXT_ALIGNMENT); + GuiSetStyle(LABEL, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); + GuiLabel(textBounds, message); + GuiSetStyle(LABEL, TEXT_ALIGNMENT, prevTextAlignment); + } + + if (secretViewActive != NULL) + { + static char stars[] = "****************"; + if (GuiTextBox(RAYGUI_CLITERAL(Rectangle){ textBoxBounds.x, textBoxBounds.y, textBoxBounds.width - 4 - RAYGUI_TEXTINPUTBOX_HEIGHT, textBoxBounds.height }, + ((*secretViewActive == 1) || textEditMode)? text : stars, textMaxSize, textEditMode)) textEditMode = !textEditMode; + + GuiToggle(RAYGUI_CLITERAL(Rectangle){ textBoxBounds.x + textBoxBounds.width - RAYGUI_TEXTINPUTBOX_HEIGHT, textBoxBounds.y, RAYGUI_TEXTINPUTBOX_HEIGHT, RAYGUI_TEXTINPUTBOX_HEIGHT }, (*secretViewActive == 1)? "#44#" : "#45#", secretViewActive); + } + else + { + if (GuiTextBox(textBoxBounds, text, textMaxSize, textEditMode)) textEditMode = !textEditMode; + } + + int prevBtnTextAlignment = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); + + for (int i = 0; i < buttonCount; i++) + { + if (GuiButton(buttonBounds, buttonsText[i])) result = i + 1; + buttonBounds.x += (buttonBounds.width + RAYGUI_MESSAGEBOX_BUTTON_PADDING); + } + + if (result >= 0) textEditMode = false; + + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, prevBtnTextAlignment); + //-------------------------------------------------------------------- + + return result; // Result is the pressed button index +} + +// Grid control +// NOTE: Returns grid mouse-hover selected cell +// About drawing lines at subpixel spacing, simple put, not easy solution: +// https://stackoverflow.com/questions/4435450/2d-opengl-drawing-lines-that-dont-exactly-fit-pixel-raster +int GuiGrid(Rectangle bounds, const char *text, float spacing, int subdivs, Vector2 *mouseCell) +{ + // Grid lines alpha amount + #if !defined(RAYGUI_GRID_ALPHA) + #define RAYGUI_GRID_ALPHA 0.15f + #endif + + int result = 0; + GuiState state = guiState; + + Vector2 mousePoint = GetMousePosition(); + Vector2 currentMouseCell = { 0 }; + + float spaceWidth = spacing/(float)subdivs; + int linesV = (int)(bounds.width/spaceWidth) + 1; + int linesH = (int)(bounds.height/spaceWidth) + 1; + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && !guiLocked && !guiSliderDragging) + { + if (CheckCollisionPointRec(mousePoint, bounds)) + { + // NOTE: Cell values must be the upper left of the cell the mouse is in + currentMouseCell.x = floorf((mousePoint.x - bounds.x)/spacing); + currentMouseCell.y = floorf((mousePoint.y - bounds.y)/spacing); + } + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + switch (state) + { + case STATE_NORMAL: + { + if (subdivs > 0) + { + // Draw vertical grid lines + for (int i = 0; i < linesV; i++) + { + Rectangle lineV = { bounds.x + spacing*i/subdivs, bounds.y, 1, bounds.height }; + GuiDrawRectangle(lineV, 0, BLANK, ((i%subdivs) == 0)? GuiFade(GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)), RAYGUI_GRID_ALPHA*4) : GuiFade(GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)), RAYGUI_GRID_ALPHA)); + } + + // Draw horizontal grid lines + for (int i = 0; i < linesH; i++) + { + Rectangle lineH = { bounds.x, bounds.y + spacing*i/subdivs, bounds.width, 1 }; + GuiDrawRectangle(lineH, 0, BLANK, ((i%subdivs) == 0)? GuiFade(GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)), RAYGUI_GRID_ALPHA*4) : GuiFade(GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)), RAYGUI_GRID_ALPHA)); + } + } + } break; + default: break; + } + + if (mouseCell != NULL) *mouseCell = currentMouseCell; + return result; +} + +//---------------------------------------------------------------------------------- +// Tooltip management functions +// NOTE: Tooltips requires some global variables: tooltipPtr +//---------------------------------------------------------------------------------- +// Enable gui tooltips (global state) +void GuiEnableTooltip(void) { guiTooltip = true; } + +// Disable gui tooltips (global state) +void GuiDisableTooltip(void) { guiTooltip = false; } + +// Set tooltip string +void GuiSetTooltip(const char *tooltip) { guiTooltipPtr = tooltip; } + + +//---------------------------------------------------------------------------------- +// Styles loading functions +//---------------------------------------------------------------------------------- + +// Load raygui style file (.rgs) +// NOTE: By default a binary file is expected, that file could contain a custom font, +// in that case, custom font image atlas is GRAY+ALPHA and pixel data can be compressed (DEFLATE) +void GuiLoadStyle(const char *fileName) +{ + #define MAX_LINE_BUFFER_SIZE 256 + + bool tryBinary = false; + + // Try reading the files as text file first + FILE *rgsFile = fopen(fileName, "rt"); + + if (rgsFile != NULL) + { + char buffer[MAX_LINE_BUFFER_SIZE] = { 0 }; + fgets(buffer, MAX_LINE_BUFFER_SIZE, rgsFile); + + if (buffer[0] == '#') + { + int controlId = 0; + int propertyId = 0; + unsigned int propertyValue = 0; + + while (!feof(rgsFile)) + { + switch (buffer[0]) + { + case 'p': + { + // Style property: p + + sscanf(buffer, "p %d %d 0x%x", &controlId, &propertyId, &propertyValue); + GuiSetStyle(controlId, propertyId, (int)propertyValue); + + } break; + case 'f': + { + // Style font: f + + int fontSize = 0; + char charmapFileName[256] = { 0 }; + char fontFileName[256] = { 0 }; + sscanf(buffer, "f %d %s %[^\r\n]s", &fontSize, charmapFileName, fontFileName); + + Font font = { 0 }; + int *codepoints = NULL; + int codepointCount = 0; + + if (charmapFileName[0] != '0') + { + // Load text data from file + // NOTE: Expected an UTF-8 array of codepoints, no separation + char *textData = LoadFileText(TextFormat("%s/%s", GetDirectoryPath(fileName), charmapFileName)); + codepoints = LoadCodepoints(textData, &codepointCount); + UnloadFileText(textData); + } + + if (fontFileName[0] != '\0') + { + // In case a font is already loaded and it is not default internal font, unload it + if (font.texture.id != GetFontDefault().texture.id) UnloadTexture(font.texture); + + if (codepointCount > 0) font = LoadFontEx(TextFormat("%s/%s", GetDirectoryPath(fileName), fontFileName), fontSize, codepoints, codepointCount); + else font = LoadFontEx(TextFormat("%s/%s", GetDirectoryPath(fileName), fontFileName), fontSize, NULL, 0); // Default to 95 standard codepoints + } + + // If font texture not properly loaded, revert to default font and size/spacing + if (font.texture.id == 0) + { + font = GetFontDefault(); + GuiSetStyle(DEFAULT, TEXT_SIZE, 10); + GuiSetStyle(DEFAULT, TEXT_SPACING, 1); + } + + UnloadCodepoints(codepoints); + + if ((font.texture.id > 0) && (font.glyphCount > 0)) GuiSetFont(font); + + } break; + default: break; + } + + fgets(buffer, MAX_LINE_BUFFER_SIZE, rgsFile); + } + } + else tryBinary = true; + + fclose(rgsFile); + } + + if (tryBinary) + { + rgsFile = fopen(fileName, "rb"); + + if (rgsFile != NULL) + { + fseek(rgsFile, 0, SEEK_END); + int fileDataSize = ftell(rgsFile); + fseek(rgsFile, 0, SEEK_SET); + + if (fileDataSize > 0) + { + unsigned char *fileData = (unsigned char *)RAYGUI_MALLOC(fileDataSize*sizeof(unsigned char)); + fread(fileData, sizeof(unsigned char), fileDataSize, rgsFile); + + GuiLoadStyleFromMemory(fileData, fileDataSize); + + RAYGUI_FREE(fileData); + } + + fclose(rgsFile); + } + } +} + +// Load style default over global style +void GuiLoadStyleDefault(void) +{ + // We set this variable first to avoid cyclic function calls + // when calling GuiSetStyle() and GuiGetStyle() + guiStyleLoaded = true; + + // Initialize default LIGHT style property values + // WARNING: Default value are applied to all controls on set but + // they can be overwritten later on for every custom control + GuiSetStyle(DEFAULT, BORDER_COLOR_NORMAL, 0x838383ff); + GuiSetStyle(DEFAULT, BASE_COLOR_NORMAL, 0xc9c9c9ff); + GuiSetStyle(DEFAULT, TEXT_COLOR_NORMAL, 0x686868ff); + GuiSetStyle(DEFAULT, BORDER_COLOR_FOCUSED, 0x5bb2d9ff); + GuiSetStyle(DEFAULT, BASE_COLOR_FOCUSED, 0xc9effeff); + GuiSetStyle(DEFAULT, TEXT_COLOR_FOCUSED, 0x6c9bbcff); + GuiSetStyle(DEFAULT, BORDER_COLOR_PRESSED, 0x0492c7ff); + GuiSetStyle(DEFAULT, BASE_COLOR_PRESSED, 0x97e8ffff); + GuiSetStyle(DEFAULT, TEXT_COLOR_PRESSED, 0x368bafff); + GuiSetStyle(DEFAULT, BORDER_COLOR_DISABLED, 0xb5c1c2ff); + GuiSetStyle(DEFAULT, BASE_COLOR_DISABLED, 0xe6e9e9ff); + GuiSetStyle(DEFAULT, TEXT_COLOR_DISABLED, 0xaeb7b8ff); + GuiSetStyle(DEFAULT, BORDER_WIDTH, 1); + GuiSetStyle(DEFAULT, TEXT_PADDING, 0); + GuiSetStyle(DEFAULT, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); + + // Initialize default extended property values + // NOTE: By default, extended property values are initialized to 0 + GuiSetStyle(DEFAULT, TEXT_SIZE, 10); // DEFAULT, shared by all controls + GuiSetStyle(DEFAULT, TEXT_SPACING, 1); // DEFAULT, shared by all controls + GuiSetStyle(DEFAULT, LINE_COLOR, 0x90abb5ff); // DEFAULT specific property + GuiSetStyle(DEFAULT, BACKGROUND_COLOR, 0xf5f5f5ff); // DEFAULT specific property + GuiSetStyle(DEFAULT, TEXT_LINE_SPACING, 15); // DEFAULT, 15 pixels between lines + GuiSetStyle(DEFAULT, TEXT_ALIGNMENT_VERTICAL, TEXT_ALIGN_MIDDLE); // DEFAULT, text aligned vertically to middle of text-bounds + + // Initialize control-specific property values + // NOTE: Those properties are in default list but require specific values by control type + GuiSetStyle(LABEL, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + GuiSetStyle(BUTTON, BORDER_WIDTH, 2); + GuiSetStyle(SLIDER, TEXT_PADDING, 4); + GuiSetStyle(PROGRESSBAR, TEXT_PADDING, 4); + GuiSetStyle(CHECKBOX, TEXT_PADDING, 4); + GuiSetStyle(CHECKBOX, TEXT_ALIGNMENT, TEXT_ALIGN_RIGHT); + GuiSetStyle(DROPDOWNBOX, TEXT_PADDING, 0); + GuiSetStyle(DROPDOWNBOX, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); + GuiSetStyle(TEXTBOX, TEXT_PADDING, 4); + GuiSetStyle(TEXTBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + GuiSetStyle(VALUEBOX, TEXT_PADDING, 0); + GuiSetStyle(VALUEBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + GuiSetStyle(SPINNER, TEXT_PADDING, 0); + GuiSetStyle(SPINNER, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + GuiSetStyle(STATUSBAR, TEXT_PADDING, 8); + GuiSetStyle(STATUSBAR, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); + + // Initialize extended property values + // NOTE: By default, extended property values are initialized to 0 + GuiSetStyle(TOGGLE, GROUP_PADDING, 2); + GuiSetStyle(SLIDER, SLIDER_WIDTH, 16); + GuiSetStyle(SLIDER, SLIDER_PADDING, 1); + GuiSetStyle(PROGRESSBAR, PROGRESS_PADDING, 1); + GuiSetStyle(CHECKBOX, CHECK_PADDING, 1); + GuiSetStyle(COMBOBOX, COMBO_BUTTON_WIDTH, 32); + GuiSetStyle(COMBOBOX, COMBO_BUTTON_SPACING, 2); + GuiSetStyle(DROPDOWNBOX, ARROW_PADDING, 16); + GuiSetStyle(DROPDOWNBOX, DROPDOWN_ITEMS_SPACING, 2); + GuiSetStyle(SPINNER, SPIN_BUTTON_WIDTH, 24); + GuiSetStyle(SPINNER, SPIN_BUTTON_SPACING, 2); + GuiSetStyle(SCROLLBAR, BORDER_WIDTH, 0); + GuiSetStyle(SCROLLBAR, ARROWS_VISIBLE, 0); + GuiSetStyle(SCROLLBAR, ARROWS_SIZE, 6); + GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING, 0); + GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, 16); + GuiSetStyle(SCROLLBAR, SCROLL_PADDING, 0); + GuiSetStyle(SCROLLBAR, SCROLL_SPEED, 12); + GuiSetStyle(LISTVIEW, LIST_ITEMS_HEIGHT, 28); + GuiSetStyle(LISTVIEW, LIST_ITEMS_SPACING, 2); + GuiSetStyle(LISTVIEW, SCROLLBAR_WIDTH, 12); + GuiSetStyle(LISTVIEW, SCROLLBAR_SIDE, SCROLLBAR_RIGHT_SIDE); + GuiSetStyle(COLORPICKER, COLOR_SELECTOR_SIZE, 8); + GuiSetStyle(COLORPICKER, HUEBAR_WIDTH, 16); + GuiSetStyle(COLORPICKER, HUEBAR_PADDING, 8); + GuiSetStyle(COLORPICKER, HUEBAR_SELECTOR_HEIGHT, 8); + GuiSetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW, 2); + + if (guiFont.texture.id != GetFontDefault().texture.id) + { + // Unload previous font texture + UnloadTexture(guiFont.texture); + RL_FREE(guiFont.recs); + RL_FREE(guiFont.glyphs); + guiFont.recs = NULL; + guiFont.glyphs = NULL; + + // Setup default raylib font + guiFont = GetFontDefault(); + + // NOTE: Default raylib font character 95 is a white square + Rectangle whiteChar = guiFont.recs[95]; + + // NOTE: We set up a 1px padding on char rectangle to avoid pixel bleeding on MSAA filtering + SetShapesTexture(guiFont.texture, RAYGUI_CLITERAL(Rectangle){ whiteChar.x + 1, whiteChar.y + 1, whiteChar.width - 2, whiteChar.height - 2 }); + } +} + +// Get text with icon id prepended +// NOTE: Useful to add icons by name id (enum) instead of +// a number that can change between ricon versions +const char *GuiIconText(int iconId, const char *text) +{ +#if defined(RAYGUI_NO_ICONS) + return NULL; +#else + static char buffer[1024] = { 0 }; + static char iconBuffer[6] = { 0 }; + + if (text != NULL) + { + memset(buffer, 0, 1024); + sprintf(buffer, "#%03i#", iconId); + + for (int i = 5; i < 1024; i++) + { + buffer[i] = text[i - 5]; + if (text[i - 5] == '\0') break; + } + + return buffer; + } + else + { + sprintf(iconBuffer, "#%03i#", iconId & 0x1ff); + + return iconBuffer; + } +#endif +} + +#if !defined(RAYGUI_NO_ICONS) +// Get full icons data pointer +unsigned int *GuiGetIcons(void) { return guiIconsPtr; } + +// Load raygui icons file (.rgi) +// NOTE: In case nameIds are required, they can be requested with loadIconsName, +// they are returned as a guiIconsName[iconCount][RAYGUI_ICON_MAX_NAME_LENGTH], +// WARNING: guiIconsName[]][] memory should be manually freed! +char **GuiLoadIcons(const char *fileName, bool loadIconsName) +{ + // Style File Structure (.rgi) + // ------------------------------------------------------ + // Offset | Size | Type | Description + // ------------------------------------------------------ + // 0 | 4 | char | Signature: "rGI " + // 4 | 2 | short | Version: 100 + // 6 | 2 | short | reserved + + // 8 | 2 | short | Num icons (N) + // 10 | 2 | short | Icons size (Options: 16, 32, 64) (S) + + // Icons name id (32 bytes per name id) + // foreach (icon) + // { + // 12+32*i | 32 | char | Icon NameId + // } + + // Icons data: One bit per pixel, stored as unsigned int array (depends on icon size) + // S*S pixels/32bit per unsigned int = K unsigned int per icon + // foreach (icon) + // { + // ... | K | unsigned int | Icon Data + // } + + FILE *rgiFile = fopen(fileName, "rb"); + + char **guiIconsName = NULL; + + if (rgiFile != NULL) + { + char signature[5] = { 0 }; + short version = 0; + short reserved = 0; + short iconCount = 0; + short iconSize = 0; + + fread(signature, 1, 4, rgiFile); + fread(&version, sizeof(short), 1, rgiFile); + fread(&reserved, sizeof(short), 1, rgiFile); + fread(&iconCount, sizeof(short), 1, rgiFile); + fread(&iconSize, sizeof(short), 1, rgiFile); + + if ((signature[0] == 'r') && + (signature[1] == 'G') && + (signature[2] == 'I') && + (signature[3] == ' ')) + { + if (loadIconsName) + { + guiIconsName = (char **)RAYGUI_MALLOC(iconCount*sizeof(char **)); + for (int i = 0; i < iconCount; i++) + { + guiIconsName[i] = (char *)RAYGUI_MALLOC(RAYGUI_ICON_MAX_NAME_LENGTH); + fread(guiIconsName[i], 1, RAYGUI_ICON_MAX_NAME_LENGTH, rgiFile); + } + } + else fseek(rgiFile, iconCount*RAYGUI_ICON_MAX_NAME_LENGTH, SEEK_CUR); + + // Read icons data directly over internal icons array + fread(guiIconsPtr, sizeof(unsigned int), iconCount*(iconSize*iconSize/32), rgiFile); + } + + fclose(rgiFile); + } + + return guiIconsName; +} + +// Draw selected icon using rectangles pixel-by-pixel +void GuiDrawIcon(int iconId, int posX, int posY, int pixelSize, Color color) +{ + #define BIT_CHECK(a,b) ((a) & (1u<<(b))) + + for (int i = 0, y = 0; i < RAYGUI_ICON_SIZE*RAYGUI_ICON_SIZE/32; i++) + { + for (int k = 0; k < 32; k++) + { + if (BIT_CHECK(guiIconsPtr[iconId*RAYGUI_ICON_DATA_ELEMENTS + i], k)) + { + #if !defined(RAYGUI_STANDALONE) + GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ (float)posX + (k%RAYGUI_ICON_SIZE)*pixelSize, (float)posY + y*pixelSize, (float)pixelSize, (float)pixelSize }, 0, BLANK, color); + #endif + } + + if ((k == 15) || (k == 31)) y++; + } + } +} + +// Set icon drawing size +void GuiSetIconScale(int scale) +{ + if (scale >= 1) guiIconScale = scale; +} + +#endif // !RAYGUI_NO_ICONS + +//---------------------------------------------------------------------------------- +// Module specific Functions Definition +//---------------------------------------------------------------------------------- + +// Load style from memory +// WARNING: Binary files only +static void GuiLoadStyleFromMemory(const unsigned char *fileData, int dataSize) +{ + unsigned char *fileDataPtr = (unsigned char *)fileData; + + char signature[5] = { 0 }; + short version = 0; + short reserved = 0; + int propertyCount = 0; + + memcpy(signature, fileDataPtr, 4); + memcpy(&version, fileDataPtr + 4, sizeof(short)); + memcpy(&reserved, fileDataPtr + 4 + 2, sizeof(short)); + memcpy(&propertyCount, fileDataPtr + 4 + 2 + 2, sizeof(int)); + fileDataPtr += 12; + + if ((signature[0] == 'r') && + (signature[1] == 'G') && + (signature[2] == 'S') && + (signature[3] == ' ')) + { + short controlId = 0; + short propertyId = 0; + unsigned int propertyValue = 0; + + for (int i = 0; i < propertyCount; i++) + { + memcpy(&controlId, fileDataPtr, sizeof(short)); + memcpy(&propertyId, fileDataPtr + 2, sizeof(short)); + memcpy(&propertyValue, fileDataPtr + 2 + 2, sizeof(unsigned int)); + fileDataPtr += 8; + + if (controlId == 0) // DEFAULT control + { + // If a DEFAULT property is loaded, it is propagated to all controls + // NOTE: All DEFAULT properties should be defined first in the file + GuiSetStyle(0, (int)propertyId, propertyValue); + + if (propertyId < RAYGUI_MAX_PROPS_BASE) for (int i = 1; i < RAYGUI_MAX_CONTROLS; i++) GuiSetStyle(i, (int)propertyId, propertyValue); + } + else GuiSetStyle((int)controlId, (int)propertyId, propertyValue); + } + + // Font loading is highly dependant on raylib API to load font data and image + +#if !defined(RAYGUI_STANDALONE) + // Load custom font if available + int fontDataSize = 0; + memcpy(&fontDataSize, fileDataPtr, sizeof(int)); + fileDataPtr += 4; + + if (fontDataSize > 0) + { + Font font = { 0 }; + int fontType = 0; // 0-Normal, 1-SDF + + memcpy(&font.baseSize, fileDataPtr, sizeof(int)); + memcpy(&font.glyphCount, fileDataPtr + 4, sizeof(int)); + memcpy(&fontType, fileDataPtr + 4 + 4, sizeof(int)); + fileDataPtr += 12; + + // Load font white rectangle + Rectangle fontWhiteRec = { 0 }; + memcpy(&fontWhiteRec, fileDataPtr, sizeof(Rectangle)); + fileDataPtr += 16; + + // Load font image parameters + int fontImageUncompSize = 0; + int fontImageCompSize = 0; + memcpy(&fontImageUncompSize, fileDataPtr, sizeof(int)); + memcpy(&fontImageCompSize, fileDataPtr + 4, sizeof(int)); + fileDataPtr += 8; + + Image imFont = { 0 }; + imFont.mipmaps = 1; + memcpy(&imFont.width, fileDataPtr, sizeof(int)); + memcpy(&imFont.height, fileDataPtr + 4, sizeof(int)); + memcpy(&imFont.format, fileDataPtr + 4 + 4, sizeof(int)); + fileDataPtr += 12; + + if ((fontImageCompSize > 0) && (fontImageCompSize != fontImageUncompSize)) + { + // Compressed font atlas image data (DEFLATE), it requires DecompressData() + int dataUncompSize = 0; + unsigned char *compData = (unsigned char *)RAYGUI_MALLOC(fontImageCompSize); + memcpy(compData, fileDataPtr, fontImageCompSize); + fileDataPtr += fontImageCompSize; + + imFont.data = DecompressData(compData, fontImageCompSize, &dataUncompSize); + + // Security check, dataUncompSize must match the provided fontImageUncompSize + if (dataUncompSize != fontImageUncompSize) RAYGUI_LOG("WARNING: Uncompressed font atlas image data could be corrupted"); + + RAYGUI_FREE(compData); + } + else + { + // Font atlas image data is not compressed + imFont.data = (unsigned char *)RAYGUI_MALLOC(fontImageUncompSize); + memcpy(imFont.data, fileDataPtr, fontImageUncompSize); + fileDataPtr += fontImageUncompSize; + } + + if (font.texture.id != GetFontDefault().texture.id) UnloadTexture(font.texture); + font.texture = LoadTextureFromImage(imFont); + + RAYGUI_FREE(imFont.data); + + // Validate font atlas texture was loaded correctly + if (font.texture.id != 0) + { + // Load font recs data + int recsDataSize = font.glyphCount*sizeof(Rectangle); + int recsDataCompressedSize = 0; + + // WARNING: Version 400 adds the compression size parameter + if (version >= 400) + { + // RGS files version 400 support compressed recs data + memcpy(&recsDataCompressedSize, fileDataPtr, sizeof(int)); + fileDataPtr += sizeof(int); + } + + if ((recsDataCompressedSize > 0) && (recsDataCompressedSize != recsDataSize)) + { + // Recs data is compressed, uncompress it + unsigned char *recsDataCompressed = (unsigned char *)RAYGUI_MALLOC(recsDataCompressedSize); + + memcpy(recsDataCompressed, fileDataPtr, recsDataCompressedSize); + fileDataPtr += recsDataCompressedSize; + + int recsDataUncompSize = 0; + font.recs = (Rectangle *)DecompressData(recsDataCompressed, recsDataCompressedSize, &recsDataUncompSize); + + // Security check, data uncompressed size must match the expected original data size + if (recsDataUncompSize != recsDataSize) RAYGUI_LOG("WARNING: Uncompressed font recs data could be corrupted"); + + RAYGUI_FREE(recsDataCompressed); + } + else + { + // Recs data is uncompressed + font.recs = (Rectangle *)RAYGUI_CALLOC(font.glyphCount, sizeof(Rectangle)); + for (int i = 0; i < font.glyphCount; i++) + { + memcpy(&font.recs[i], fileDataPtr, sizeof(Rectangle)); + fileDataPtr += sizeof(Rectangle); + } + } + + // Load font glyphs info data + int glyphsDataSize = font.glyphCount*16; // 16 bytes data per glyph + int glyphsDataCompressedSize = 0; + + // WARNING: Version 400 adds the compression size parameter + if (version >= 400) + { + // RGS files version 400 support compressed glyphs data + memcpy(&glyphsDataCompressedSize, fileDataPtr, sizeof(int)); + fileDataPtr += sizeof(int); + } + + // Allocate required glyphs space to fill with data + font.glyphs = (GlyphInfo *)RAYGUI_CALLOC(font.glyphCount, sizeof(GlyphInfo)); + + if ((glyphsDataCompressedSize > 0) && (glyphsDataCompressedSize != glyphsDataSize)) + { + // Glyphs data is compressed, uncompress it + unsigned char *glypsDataCompressed = (unsigned char *)RAYGUI_MALLOC(glyphsDataCompressedSize); + + memcpy(glypsDataCompressed, fileDataPtr, glyphsDataCompressedSize); + fileDataPtr += glyphsDataCompressedSize; + + int glyphsDataUncompSize = 0; + unsigned char *glyphsDataUncomp = DecompressData(glypsDataCompressed, glyphsDataCompressedSize, &glyphsDataUncompSize); + + // Security check, data uncompressed size must match the expected original data size + if (glyphsDataUncompSize != glyphsDataSize) RAYGUI_LOG("WARNING: Uncompressed font glyphs data could be corrupted"); + + unsigned char *glyphsDataUncompPtr = glyphsDataUncomp; + + for (int i = 0; i < font.glyphCount; i++) + { + memcpy(&font.glyphs[i].value, glyphsDataUncompPtr, sizeof(int)); + memcpy(&font.glyphs[i].offsetX, glyphsDataUncompPtr + 4, sizeof(int)); + memcpy(&font.glyphs[i].offsetY, glyphsDataUncompPtr + 8, sizeof(int)); + memcpy(&font.glyphs[i].advanceX, glyphsDataUncompPtr + 12, sizeof(int)); + glyphsDataUncompPtr += 16; + } + + RAYGUI_FREE(glypsDataCompressed); + RAYGUI_FREE(glyphsDataUncomp); + } + else + { + // Glyphs data is uncompressed + for (int i = 0; i < font.glyphCount; i++) + { + memcpy(&font.glyphs[i].value, fileDataPtr, sizeof(int)); + memcpy(&font.glyphs[i].offsetX, fileDataPtr + 4, sizeof(int)); + memcpy(&font.glyphs[i].offsetY, fileDataPtr + 8, sizeof(int)); + memcpy(&font.glyphs[i].advanceX, fileDataPtr + 12, sizeof(int)); + fileDataPtr += 16; + } + } + } + else font = GetFontDefault(); // Fallback in case of errors loading font atlas texture + + GuiSetFont(font); + + // Set font texture source rectangle to be used as white texture to draw shapes + // NOTE: It makes possible to draw shapes and text (full UI) in a single draw call + if ((fontWhiteRec.x > 0) && + (fontWhiteRec.y > 0) && + (fontWhiteRec.width > 0) && + (fontWhiteRec.height > 0)) SetShapesTexture(font.texture, fontWhiteRec); + } +#endif + } +} + +// Gui get text width considering icon +static int GetTextWidth(const char *text) +{ + #if !defined(ICON_TEXT_PADDING) + #define ICON_TEXT_PADDING 4 + #endif + + Vector2 textSize = { 0 }; + int textIconOffset = 0; + + if ((text != NULL) && (text[0] != '\0')) + { + if (text[0] == '#') + { + for (int i = 1; (i < 5) && (text[i] != '\0'); i++) + { + if (text[i] == '#') + { + textIconOffset = i; + break; + } + } + } + + text += textIconOffset; + + // Make sure guiFont is set, GuiGetStyle() initializes it lazynessly + float fontSize = (float)GuiGetStyle(DEFAULT, TEXT_SIZE); + + // Custom MeasureText() implementation + if ((guiFont.texture.id > 0) && (text != NULL)) + { + // Get size in bytes of text, considering end of line and line break + int size = 0; + for (int i = 0; i < MAX_LINE_BUFFER_SIZE; i++) + { + if ((text[i] != '\0') && (text[i] != '\n')) size++; + else break; + } + + float scaleFactor = fontSize/(float)guiFont.baseSize; + textSize.y = (float)guiFont.baseSize*scaleFactor; + float glyphWidth = 0.0f; + + for (int i = 0, codepointSize = 0; i < size; i += codepointSize) + { + int codepoint = GetCodepointNext(&text[i], &codepointSize); + int codepointIndex = GetGlyphIndex(guiFont, codepoint); + + if (guiFont.glyphs[codepointIndex].advanceX == 0) glyphWidth = ((float)guiFont.recs[codepointIndex].width*scaleFactor); + else glyphWidth = ((float)guiFont.glyphs[codepointIndex].advanceX*scaleFactor); + + textSize.x += (glyphWidth + (float)GuiGetStyle(DEFAULT, TEXT_SPACING)); + } + } + + if (textIconOffset > 0) textSize.x += (RAYGUI_ICON_SIZE - ICON_TEXT_PADDING); + } + + return (int)textSize.x; +} + +// Get text bounds considering control bounds +static Rectangle GetTextBounds(int control, Rectangle bounds) +{ + Rectangle textBounds = bounds; + + textBounds.x = bounds.x + GuiGetStyle(control, BORDER_WIDTH); + textBounds.y = bounds.y + GuiGetStyle(control, BORDER_WIDTH) + GuiGetStyle(control, TEXT_PADDING); + textBounds.width = bounds.width - 2*GuiGetStyle(control, BORDER_WIDTH) - 2*GuiGetStyle(control, TEXT_PADDING); + textBounds.height = bounds.height - 2*GuiGetStyle(control, BORDER_WIDTH) - 2*GuiGetStyle(control, TEXT_PADDING); // NOTE: Text is processed line per line! + + // Depending on control, TEXT_PADDING and TEXT_ALIGNMENT properties could affect the text-bounds + switch (control) + { + case COMBOBOX: + case DROPDOWNBOX: + case LISTVIEW: + // TODO: Special cases (no label): COMBOBOX, DROPDOWNBOX, LISTVIEW + case SLIDER: + case CHECKBOX: + case VALUEBOX: + case SPINNER: + // TODO: More special cases (label on side): SLIDER, CHECKBOX, VALUEBOX, SPINNER + default: + { + // TODO: WARNING: TEXT_ALIGNMENT is already considered in GuiDrawText() + if (GuiGetStyle(control, TEXT_ALIGNMENT) == TEXT_ALIGN_RIGHT) textBounds.x -= GuiGetStyle(control, TEXT_PADDING); + else textBounds.x += GuiGetStyle(control, TEXT_PADDING); + } + break; + } + + return textBounds; +} + +// Get text icon if provided and move text cursor +// NOTE: We support up to 999 values for iconId +static const char *GetTextIcon(const char *text, int *iconId) +{ +#if !defined(RAYGUI_NO_ICONS) + *iconId = -1; + if (text[0] == '#') // Maybe we have an icon! + { + char iconValue[4] = { 0 }; // Maximum length for icon value: 3 digits + '\0' + + int pos = 1; + while ((pos < 4) && (text[pos] >= '0') && (text[pos] <= '9')) + { + iconValue[pos - 1] = text[pos]; + pos++; + } + + if (text[pos] == '#') + { + *iconId = TextToInteger(iconValue); + + // Move text pointer after icon + // WARNING: If only icon provided, it could point to EOL character: '\0' + if (*iconId >= 0) text += (pos + 1); + } + } +#endif + + return text; +} + +// Get text divided into lines (by line-breaks '\n') +const char **GetTextLines(const char *text, int *count) +{ + #define RAYGUI_MAX_TEXT_LINES 128 + + static const char *lines[RAYGUI_MAX_TEXT_LINES] = { 0 }; + for (int i = 0; i < RAYGUI_MAX_TEXT_LINES; i++) lines[i] = NULL; // Init NULL pointers to substrings + + int textSize = (int)strlen(text); + + lines[0] = text; + int len = 0; + *count = 1; + //int lineSize = 0; // Stores current line size, not returned + + for (int i = 0, k = 0; (i < textSize) && (*count < RAYGUI_MAX_TEXT_LINES); i++) + { + if (text[i] == '\n') + { + //lineSize = len; + k++; + lines[k] = &text[i + 1]; // WARNING: next value is valid? + len = 0; + *count += 1; + } + else len++; + } + + //lines[*count - 1].size = len; + + return lines; +} + +// Get text width to next space for provided string +static float GetNextSpaceWidth(const char *text, int *nextSpaceIndex) +{ + float width = 0; + int codepointByteCount = 0; + int codepoint = 0; + int index = 0; + float glyphWidth = 0; + float scaleFactor = (float)GuiGetStyle(DEFAULT, TEXT_SIZE)/guiFont.baseSize; + + for (int i = 0; text[i] != '\0'; i++) + { + if (text[i] != ' ') + { + codepoint = GetCodepoint(&text[i], &codepointByteCount); + index = GetGlyphIndex(guiFont, codepoint); + glyphWidth = (guiFont.glyphs[index].advanceX == 0)? guiFont.recs[index].width*scaleFactor : guiFont.glyphs[index].advanceX*scaleFactor; + width += (glyphWidth + (float)GuiGetStyle(DEFAULT, TEXT_SPACING)); + } + else + { + *nextSpaceIndex = i; + break; + } + } + + return width; +} + +// Gui draw text using default font +static void GuiDrawText(const char *text, Rectangle textBounds, int alignment, Color tint) +{ + #define TEXT_VALIGN_PIXEL_OFFSET(h) ((int)h%2) // Vertical alignment for pixel perfect + + #if !defined(ICON_TEXT_PADDING) + #define ICON_TEXT_PADDING 4 + #endif + + if ((text == NULL) || (text[0] == '\0')) return; // Security check + + // PROCEDURE: + // - Text is processed line per line + // - For every line, horizontal alignment is defined + // - For all text, vertical alignment is defined (multiline text only) + // - For every line, wordwrap mode is checked (useful for GuitextBox(), read-only) + + // Get text lines (using '\n' as delimiter) to be processed individually + // WARNING: We can't use GuiTextSplit() function because it can be already used + // before the GuiDrawText() call and its buffer is static, it would be overriden :( + int lineCount = 0; + const char **lines = GetTextLines(text, &lineCount); + + // Text style variables + //int alignment = GuiGetStyle(DEFAULT, TEXT_ALIGNMENT); + int alignmentVertical = GuiGetStyle(DEFAULT, TEXT_ALIGNMENT_VERTICAL); + int wrapMode = GuiGetStyle(DEFAULT, TEXT_WRAP_MODE); // Wrap-mode only available in read-only mode, no for text editing + + // TODO: WARNING: This totalHeight is not valid for vertical alignment in case of word-wrap + float totalHeight = (float)(lineCount*GuiGetStyle(DEFAULT, TEXT_SIZE) + (lineCount - 1)*GuiGetStyle(DEFAULT, TEXT_SIZE)/2); + float posOffsetY = 0.0f; + + for (int i = 0; i < lineCount; i++) + { + int iconId = 0; + lines[i] = GetTextIcon(lines[i], &iconId); // Check text for icon and move cursor + + // Get text position depending on alignment and iconId + //--------------------------------------------------------------------------------- + Vector2 textBoundsPosition = { textBounds.x, textBounds.y }; + + // NOTE: We get text size after icon has been processed + // WARNING: GetTextWidth() also processes text icon to get width! -> Really needed? + int textSizeX = GetTextWidth(lines[i]); + + // If text requires an icon, add size to measure + if (iconId >= 0) + { + textSizeX += RAYGUI_ICON_SIZE*guiIconScale; + + // WARNING: If only icon provided, text could be pointing to EOF character: '\0' +#if !defined(RAYGUI_NO_ICONS) + if ((lines[i] != NULL) && (lines[i][0] != '\0')) textSizeX += ICON_TEXT_PADDING; +#endif + } + + // Check guiTextAlign global variables + switch (alignment) + { + case TEXT_ALIGN_LEFT: textBoundsPosition.x = textBounds.x; break; + case TEXT_ALIGN_CENTER: textBoundsPosition.x = textBounds.x + textBounds.width/2 - textSizeX/2; break; + case TEXT_ALIGN_RIGHT: textBoundsPosition.x = textBounds.x + textBounds.width - textSizeX; break; + default: break; + } + + switch (alignmentVertical) + { + // Only valid in case of wordWrap = 0; + case TEXT_ALIGN_TOP: textBoundsPosition.y = textBounds.y + posOffsetY; break; + case TEXT_ALIGN_MIDDLE: textBoundsPosition.y = textBounds.y + posOffsetY + textBounds.height/2 - totalHeight/2 + TEXT_VALIGN_PIXEL_OFFSET(textBounds.height); break; + case TEXT_ALIGN_BOTTOM: textBoundsPosition.y = textBounds.y + posOffsetY + textBounds.height - totalHeight + TEXT_VALIGN_PIXEL_OFFSET(textBounds.height); break; + default: break; + } + + // NOTE: Make sure we get pixel-perfect coordinates, + // In case of decimals we got weird text positioning + textBoundsPosition.x = (float)((int)textBoundsPosition.x); + textBoundsPosition.y = (float)((int)textBoundsPosition.y); + //--------------------------------------------------------------------------------- + + // Draw text (with icon if available) + //--------------------------------------------------------------------------------- +#if !defined(RAYGUI_NO_ICONS) + if (iconId >= 0) + { + // NOTE: We consider icon height, probably different than text size + GuiDrawIcon(iconId, (int)textBoundsPosition.x, (int)(textBounds.y + textBounds.height/2 - RAYGUI_ICON_SIZE*guiIconScale/2 + TEXT_VALIGN_PIXEL_OFFSET(textBounds.height)), guiIconScale, tint); + textBoundsPosition.x += (RAYGUI_ICON_SIZE*guiIconScale + ICON_TEXT_PADDING); + } +#endif + // Get size in bytes of text, + // considering end of line and line break + int lineSize = 0; + for (int c = 0; (lines[i][c] != '\0') && (lines[i][c] != '\n') && (lines[i][c] != '\r'); c++, lineSize++){ } + float scaleFactor = (float)GuiGetStyle(DEFAULT, TEXT_SIZE)/guiFont.baseSize; + + int textOffsetY = 0; + float textOffsetX = 0.0f; + float glyphWidth = 0; + for (int c = 0, codepointSize = 0; c < lineSize; c += codepointSize) + { + int codepoint = GetCodepointNext(&lines[i][c], &codepointSize); + int index = GetGlyphIndex(guiFont, codepoint); + + // NOTE: Normally we exit the decoding sequence as soon as a bad byte is found (and return 0x3f) + // but we need to draw all of the bad bytes using the '?' symbol moving one byte + if (codepoint == 0x3f) codepointSize = 1; // TODO: Review not recognized codepoints size + + // Wrap mode text measuring to space to validate if it can be drawn or + // a new line is required + if (wrapMode == TEXT_WRAP_CHAR) + { + // Get glyph width to check if it goes out of bounds + if (guiFont.glyphs[index].advanceX == 0) glyphWidth = ((float)guiFont.recs[index].width*scaleFactor); + else glyphWidth = (float)guiFont.glyphs[index].advanceX*scaleFactor; + + // Jump to next line if current character reach end of the box limits + if ((textOffsetX + glyphWidth) > textBounds.width) + { + textOffsetX = 0.0f; + textOffsetY += GuiGetStyle(DEFAULT, TEXT_LINE_SPACING); + } + } + else if (wrapMode == TEXT_WRAP_WORD) + { + // Get width to next space in line + int nextSpaceIndex = 0; + float nextSpaceWidth = GetNextSpaceWidth(lines[i] + c, &nextSpaceIndex); + + if ((textOffsetX + nextSpaceWidth) > textBounds.width) + { + textOffsetX = 0.0f; + textOffsetY += GuiGetStyle(DEFAULT, TEXT_LINE_SPACING); + } + + // TODO: Consider case: (nextSpaceWidth >= textBounds.width) + } + + if (codepoint == '\n') break; // WARNING: Lines are already processed manually, no need to keep drawing after this codepoint + else + { + // TODO: There are multiple types of spaces in Unicode, + // maybe it's a good idea to add support for more: http://jkorpela.fi/chars/spaces.html + if ((codepoint != ' ') && (codepoint != '\t')) // Do not draw codepoints with no glyph + { + if (wrapMode == TEXT_WRAP_NONE) + { + // Draw only required text glyphs fitting the textBounds.width + if (textOffsetX <= (textBounds.width - glyphWidth)) + { + DrawTextCodepoint(guiFont, codepoint, RAYGUI_CLITERAL(Vector2){ textBoundsPosition.x + textOffsetX, textBoundsPosition.y + textOffsetY }, (float)GuiGetStyle(DEFAULT, TEXT_SIZE), GuiFade(tint, guiAlpha)); + } + } + else if ((wrapMode == TEXT_WRAP_CHAR) || (wrapMode == TEXT_WRAP_WORD)) + { + // Draw only glyphs inside the bounds + if ((textBoundsPosition.y + textOffsetY) <= (textBounds.y + textBounds.height - GuiGetStyle(DEFAULT, TEXT_SIZE))) + { + DrawTextCodepoint(guiFont, codepoint, RAYGUI_CLITERAL(Vector2){ textBoundsPosition.x + textOffsetX, textBoundsPosition.y + textOffsetY }, (float)GuiGetStyle(DEFAULT, TEXT_SIZE), GuiFade(tint, guiAlpha)); + } + } + } + + if (guiFont.glyphs[index].advanceX == 0) textOffsetX += ((float)guiFont.recs[index].width*scaleFactor + (float)GuiGetStyle(DEFAULT, TEXT_SPACING)); + else textOffsetX += ((float)guiFont.glyphs[index].advanceX*scaleFactor + (float)GuiGetStyle(DEFAULT, TEXT_SPACING)); + } + } + + if (wrapMode == TEXT_WRAP_NONE) posOffsetY += (float)GuiGetStyle(DEFAULT, TEXT_LINE_SPACING); + else if ((wrapMode == TEXT_WRAP_CHAR) || (wrapMode == TEXT_WRAP_WORD)) posOffsetY += (textOffsetY + (float)GuiGetStyle(DEFAULT, TEXT_LINE_SPACING)); + //--------------------------------------------------------------------------------- + } + +#if defined(RAYGUI_DEBUG_TEXT_BOUNDS) + GuiDrawRectangle(textBounds, 0, WHITE, Fade(BLUE, 0.4f)); +#endif +} + +// Gui draw rectangle using default raygui plain style with borders +static void GuiDrawRectangle(Rectangle rec, int borderWidth, Color borderColor, Color color) +{ + if (color.a > 0) + { + // Draw rectangle filled with color + DrawRectangle((int)rec.x, (int)rec.y, (int)rec.width, (int)rec.height, GuiFade(color, guiAlpha)); + } + + if (borderWidth > 0) + { + // Draw rectangle border lines with color + DrawRectangle((int)rec.x, (int)rec.y, (int)rec.width, borderWidth, GuiFade(borderColor, guiAlpha)); + DrawRectangle((int)rec.x, (int)rec.y + borderWidth, borderWidth, (int)rec.height - 2*borderWidth, GuiFade(borderColor, guiAlpha)); + DrawRectangle((int)rec.x + (int)rec.width - borderWidth, (int)rec.y + borderWidth, borderWidth, (int)rec.height - 2*borderWidth, GuiFade(borderColor, guiAlpha)); + DrawRectangle((int)rec.x, (int)rec.y + (int)rec.height - borderWidth, (int)rec.width, borderWidth, GuiFade(borderColor, guiAlpha)); + } + +#if defined(RAYGUI_DEBUG_RECS_BOUNDS) + DrawRectangle((int)rec.x, (int)rec.y, (int)rec.width, (int)rec.height, Fade(RED, 0.4f)); +#endif +} + +// Draw tooltip using control bounds +static void GuiTooltip(Rectangle controlRec) +{ + if (!guiLocked && guiTooltip && (guiTooltipPtr != NULL) && !guiSliderDragging) + { + Vector2 textSize = MeasureTextEx(GuiGetFont(), guiTooltipPtr, (float)GuiGetStyle(DEFAULT, TEXT_SIZE), (float)GuiGetStyle(DEFAULT, TEXT_SPACING)); + + if ((controlRec.x + textSize.x + 16) > GetScreenWidth()) controlRec.x -= (textSize.x + 16 - controlRec.width); + + GuiPanel(RAYGUI_CLITERAL(Rectangle){ controlRec.x, controlRec.y + controlRec.height + 4, textSize.x + 16, GuiGetStyle(DEFAULT, TEXT_SIZE) + 8.f }, NULL); + + int textPadding = GuiGetStyle(LABEL, TEXT_PADDING); + int textAlignment = GuiGetStyle(LABEL, TEXT_ALIGNMENT); + GuiSetStyle(LABEL, TEXT_PADDING, 0); + GuiSetStyle(LABEL, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); + GuiLabel(RAYGUI_CLITERAL(Rectangle){ controlRec.x, controlRec.y + controlRec.height + 4, textSize.x + 16, GuiGetStyle(DEFAULT, TEXT_SIZE) + 8.f }, guiTooltipPtr); + GuiSetStyle(LABEL, TEXT_ALIGNMENT, textAlignment); + GuiSetStyle(LABEL, TEXT_PADDING, textPadding); + } +} + +// Split controls text into multiple strings +// Also check for multiple columns (required by GuiToggleGroup()) +static const char **GuiTextSplit(const char *text, char delimiter, int *count, int *textRow) +{ + // NOTE: Current implementation returns a copy of the provided string with '\0' (string end delimiter) + // inserted between strings defined by "delimiter" parameter. No memory is dynamically allocated, + // all used memory is static... it has some limitations: + // 1. Maximum number of possible split strings is set by RAYGUI_TEXTSPLIT_MAX_ITEMS + // 2. Maximum size of text to split is RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE + // NOTE: Those definitions could be externally provided if required + + // TODO: HACK: GuiTextSplit() - Review how textRows are returned to user + // textRow is an externally provided array of integers that stores row number for every splitted string + + #if !defined(RAYGUI_TEXTSPLIT_MAX_ITEMS) + #define RAYGUI_TEXTSPLIT_MAX_ITEMS 128 + #endif + #if !defined(RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE) + #define RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE 1024 + #endif + + static const char *result[RAYGUI_TEXTSPLIT_MAX_ITEMS] = { NULL }; // String pointers array (points to buffer data) + static char buffer[RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE] = { 0 }; // Buffer data (text input copy with '\0' added) + memset(buffer, 0, RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE); + + result[0] = buffer; + int counter = 1; + + if (textRow != NULL) textRow[0] = 0; + + // Count how many substrings we have on text and point to every one + for (int i = 0; i < RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE; i++) + { + buffer[i] = text[i]; + if (buffer[i] == '\0') break; + else if ((buffer[i] == delimiter) || (buffer[i] == '\n')) + { + result[counter] = buffer + i + 1; + + if (textRow != NULL) + { + if (buffer[i] == '\n') textRow[counter] = textRow[counter - 1] + 1; + else textRow[counter] = textRow[counter - 1]; + } + + buffer[i] = '\0'; // Set an end of string at this point + + counter++; + if (counter == RAYGUI_TEXTSPLIT_MAX_ITEMS) break; + } + } + + *count = counter; + + return result; +} + +// Convert color data from RGB to HSV +// NOTE: Color data should be passed normalized +static Vector3 ConvertRGBtoHSV(Vector3 rgb) +{ + Vector3 hsv = { 0 }; + float min = 0.0f; + float max = 0.0f; + float delta = 0.0f; + + min = (rgb.x < rgb.y)? rgb.x : rgb.y; + min = (min < rgb.z)? min : rgb.z; + + max = (rgb.x > rgb.y)? rgb.x : rgb.y; + max = (max > rgb.z)? max : rgb.z; + + hsv.z = max; // Value + delta = max - min; + + if (delta < 0.00001f) + { + hsv.y = 0.0f; + hsv.x = 0.0f; // Undefined, maybe NAN? + return hsv; + } + + if (max > 0.0f) + { + // NOTE: If max is 0, this divide would cause a crash + hsv.y = (delta/max); // Saturation + } + else + { + // NOTE: If max is 0, then r = g = b = 0, s = 0, h is undefined + hsv.y = 0.0f; + hsv.x = 0.0f; // Undefined, maybe NAN? + return hsv; + } + + // NOTE: Comparing float values could not work properly + if (rgb.x >= max) hsv.x = (rgb.y - rgb.z)/delta; // Between yellow & magenta + else + { + if (rgb.y >= max) hsv.x = 2.0f + (rgb.z - rgb.x)/delta; // Between cyan & yellow + else hsv.x = 4.0f + (rgb.x - rgb.y)/delta; // Between magenta & cyan + } + + hsv.x *= 60.0f; // Convert to degrees + + if (hsv.x < 0.0f) hsv.x += 360.0f; + + return hsv; +} + +// Convert color data from HSV to RGB +// NOTE: Color data should be passed normalized +static Vector3 ConvertHSVtoRGB(Vector3 hsv) +{ + Vector3 rgb = { 0 }; + float hh = 0.0f, p = 0.0f, q = 0.0f, t = 0.0f, ff = 0.0f; + long i = 0; + + // NOTE: Comparing float values could not work properly + if (hsv.y <= 0.0f) + { + rgb.x = hsv.z; + rgb.y = hsv.z; + rgb.z = hsv.z; + return rgb; + } + + hh = hsv.x; + if (hh >= 360.0f) hh = 0.0f; + hh /= 60.0f; + + i = (long)hh; + ff = hh - i; + p = hsv.z*(1.0f - hsv.y); + q = hsv.z*(1.0f - (hsv.y*ff)); + t = hsv.z*(1.0f - (hsv.y*(1.0f - ff))); + + switch (i) + { + case 0: + { + rgb.x = hsv.z; + rgb.y = t; + rgb.z = p; + } break; + case 1: + { + rgb.x = q; + rgb.y = hsv.z; + rgb.z = p; + } break; + case 2: + { + rgb.x = p; + rgb.y = hsv.z; + rgb.z = t; + } break; + case 3: + { + rgb.x = p; + rgb.y = q; + rgb.z = hsv.z; + } break; + case 4: + { + rgb.x = t; + rgb.y = p; + rgb.z = hsv.z; + } break; + case 5: + default: + { + rgb.x = hsv.z; + rgb.y = p; + rgb.z = q; + } break; + } + + return rgb; +} + +// Scroll bar control (used by GuiScrollPanel()) +static int GuiScrollBar(Rectangle bounds, int value, int minValue, int maxValue) +{ + GuiState state = guiState; + + // Is the scrollbar horizontal or vertical? + bool isVertical = (bounds.width > bounds.height)? false : true; + + // The size (width or height depending on scrollbar type) of the spinner buttons + const int spinnerSize = GuiGetStyle(SCROLLBAR, ARROWS_VISIBLE)? + (isVertical? (int)bounds.width - 2*GuiGetStyle(SCROLLBAR, BORDER_WIDTH) : + (int)bounds.height - 2*GuiGetStyle(SCROLLBAR, BORDER_WIDTH)) : 0; + + // Arrow buttons [<] [>] [∧] [∨] + Rectangle arrowUpLeft = { 0 }; + Rectangle arrowDownRight = { 0 }; + + // Actual area of the scrollbar excluding the arrow buttons + Rectangle scrollbar = { 0 }; + + // Slider bar that moves --[///]----- + Rectangle slider = { 0 }; + + // Normalize value + if (value > maxValue) value = maxValue; + if (value < minValue) value = minValue; + + const int valueRange = maxValue - minValue; + int sliderSize = GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE); + + // Calculate rectangles for all of the components + arrowUpLeft = RAYGUI_CLITERAL(Rectangle){ + (float)bounds.x + GuiGetStyle(SCROLLBAR, BORDER_WIDTH), + (float)bounds.y + GuiGetStyle(SCROLLBAR, BORDER_WIDTH), + (float)spinnerSize, (float)spinnerSize }; + + if (isVertical) + { + arrowDownRight = RAYGUI_CLITERAL(Rectangle){ (float)bounds.x + GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)bounds.y + bounds.height - spinnerSize - GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)spinnerSize, (float)spinnerSize }; + scrollbar = RAYGUI_CLITERAL(Rectangle){ bounds.x + GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_PADDING), arrowUpLeft.y + arrowUpLeft.height, bounds.width - 2*(GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_PADDING)), bounds.height - arrowUpLeft.height - arrowDownRight.height - 2*GuiGetStyle(SCROLLBAR, BORDER_WIDTH) }; + + // Make sure the slider won't get outside of the scrollbar + sliderSize = (sliderSize >= scrollbar.height)? ((int)scrollbar.height - 2) : sliderSize; + slider = RAYGUI_CLITERAL(Rectangle){ + bounds.x + GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING), + scrollbar.y + (int)(((float)(value - minValue)/valueRange)*(scrollbar.height - sliderSize)), + bounds.width - 2*(GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING)), + (float)sliderSize }; + } + else // horizontal + { + arrowDownRight = RAYGUI_CLITERAL(Rectangle){ (float)bounds.x + bounds.width - spinnerSize - GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)bounds.y + GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)spinnerSize, (float)spinnerSize }; + scrollbar = RAYGUI_CLITERAL(Rectangle){ arrowUpLeft.x + arrowUpLeft.width, bounds.y + GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_PADDING), bounds.width - arrowUpLeft.width - arrowDownRight.width - 2*GuiGetStyle(SCROLLBAR, BORDER_WIDTH), bounds.height - 2*(GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_PADDING)) }; + + // Make sure the slider won't get outside of the scrollbar + sliderSize = (sliderSize >= scrollbar.width)? ((int)scrollbar.width - 2) : sliderSize; + slider = RAYGUI_CLITERAL(Rectangle){ + scrollbar.x + (int)(((float)(value - minValue)/valueRange)*(scrollbar.width - sliderSize)), + bounds.y + GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING), + (float)sliderSize, + bounds.height - 2*(GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING)) }; + } + + // Update control + //-------------------------------------------------------------------- + if ((state != STATE_DISABLED) && !guiLocked) + { + Vector2 mousePoint = GetMousePosition(); + + if (guiSliderDragging) // Keep dragging outside of bounds + { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON) && + !CheckCollisionPointRec(mousePoint, arrowUpLeft) && + !CheckCollisionPointRec(mousePoint, arrowDownRight)) + { + if (CHECK_BOUNDS_ID(bounds, guiSliderActive)) + { + state = STATE_PRESSED; + + if (isVertical) value = (int)(((float)(mousePoint.y - scrollbar.y - slider.height/2)*valueRange)/(scrollbar.height - slider.height) + minValue); + else value = (int)(((float)(mousePoint.x - scrollbar.x - slider.width/2)*valueRange)/(scrollbar.width - slider.width) + minValue); + } + } + else + { + guiSliderDragging = false; + guiSliderActive = RAYGUI_CLITERAL(Rectangle){ 0, 0, 0, 0 }; + } + } + else if (CheckCollisionPointRec(mousePoint, bounds)) + { + state = STATE_FOCUSED; + + // Handle mouse wheel + int wheel = (int)GetMouseWheelMove(); + if (wheel != 0) value += wheel; + + // Handle mouse button down + if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) + { + guiSliderDragging = true; + guiSliderActive = bounds; // Store bounds as an identifier when dragging starts + + // Check arrows click + if (CheckCollisionPointRec(mousePoint, arrowUpLeft)) value -= valueRange/GuiGetStyle(SCROLLBAR, SCROLL_SPEED); + else if (CheckCollisionPointRec(mousePoint, arrowDownRight)) value += valueRange/GuiGetStyle(SCROLLBAR, SCROLL_SPEED); + else if (!CheckCollisionPointRec(mousePoint, slider)) + { + // If click on scrollbar position but not on slider, place slider directly on that position + if (isVertical) value = (int)(((float)(mousePoint.y - scrollbar.y - slider.height/2)*valueRange)/(scrollbar.height - slider.height) + minValue); + else value = (int)(((float)(mousePoint.x - scrollbar.x - slider.width/2)*valueRange)/(scrollbar.width - slider.width) + minValue); + } + + state = STATE_PRESSED; + } + + // Keyboard control on mouse hover scrollbar + /* + if (isVertical) + { + if (IsKeyDown(KEY_DOWN)) value += 5; + else if (IsKeyDown(KEY_UP)) value -= 5; + } + else + { + if (IsKeyDown(KEY_RIGHT)) value += 5; + else if (IsKeyDown(KEY_LEFT)) value -= 5; + } + */ + } + + // Normalize value + if (value > maxValue) value = maxValue; + if (value < minValue) value = minValue; + } + //-------------------------------------------------------------------- + + // Draw control + //-------------------------------------------------------------------- + GuiDrawRectangle(bounds, GuiGetStyle(SCROLLBAR, BORDER_WIDTH), GetColor(GuiGetStyle(LISTVIEW, BORDER + state*3)), GetColor(GuiGetStyle(DEFAULT, BORDER_COLOR_DISABLED))); // Draw the background + + GuiDrawRectangle(scrollbar, 0, BLANK, GetColor(GuiGetStyle(BUTTON, BASE_COLOR_NORMAL))); // Draw the scrollbar active area background + GuiDrawRectangle(slider, 0, BLANK, GetColor(GuiGetStyle(SLIDER, BORDER + state*3))); // Draw the slider bar + + // Draw arrows (using icon if available) + if (GuiGetStyle(SCROLLBAR, ARROWS_VISIBLE)) + { +#if defined(RAYGUI_NO_ICONS) + GuiDrawText(isVertical? "^" : "<", + RAYGUI_CLITERAL(Rectangle){ arrowUpLeft.x, arrowUpLeft.y, isVertical? bounds.width : bounds.height, isVertical? bounds.width : bounds.height }, + TEXT_ALIGN_CENTER, GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3)))); + GuiDrawText(isVertical? "v" : ">", + RAYGUI_CLITERAL(Rectangle){ arrowDownRight.x, arrowDownRight.y, isVertical? bounds.width : bounds.height, isVertical? bounds.width : bounds.height }, + TEXT_ALIGN_CENTER, GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3)))); +#else + GuiDrawText(isVertical? "#121#" : "#118#", + RAYGUI_CLITERAL(Rectangle){ arrowUpLeft.x, arrowUpLeft.y, isVertical? bounds.width : bounds.height, isVertical? bounds.width : bounds.height }, + TEXT_ALIGN_CENTER, GetColor(GuiGetStyle(SCROLLBAR, TEXT + state*3))); // ICON_ARROW_UP_FILL / ICON_ARROW_LEFT_FILL + GuiDrawText(isVertical? "#120#" : "#119#", + RAYGUI_CLITERAL(Rectangle){ arrowDownRight.x, arrowDownRight.y, isVertical? bounds.width : bounds.height, isVertical? bounds.width : bounds.height }, + TEXT_ALIGN_CENTER, GetColor(GuiGetStyle(SCROLLBAR, TEXT + state*3))); // ICON_ARROW_DOWN_FILL / ICON_ARROW_RIGHT_FILL +#endif + } + //-------------------------------------------------------------------- + + return value; +} + +// Color fade-in or fade-out, alpha goes from 0.0f to 1.0f +// WARNING: It multiplies current alpha by alpha scale factor +static Color GuiFade(Color color, float alpha) +{ + if (alpha < 0.0f) alpha = 0.0f; + else if (alpha > 1.0f) alpha = 1.0f; + + Color result = { color.r, color.g, color.b, (unsigned char)(color.a*alpha) }; + + return result; +} + +#if defined(RAYGUI_STANDALONE) +// Returns a Color struct from hexadecimal value +static Color GetColor(int hexValue) +{ + Color color; + + color.r = (unsigned char)(hexValue >> 24) & 0xFF; + color.g = (unsigned char)(hexValue >> 16) & 0xFF; + color.b = (unsigned char)(hexValue >> 8) & 0xFF; + color.a = (unsigned char)hexValue & 0xFF; + + return color; +} + +// Returns hexadecimal value for a Color +static int ColorToInt(Color color) +{ + return (((int)color.r << 24) | ((int)color.g << 16) | ((int)color.b << 8) | (int)color.a); +} + +// Check if point is inside rectangle +static bool CheckCollisionPointRec(Vector2 point, Rectangle rec) +{ + bool collision = false; + + if ((point.x >= rec.x) && (point.x <= (rec.x + rec.width)) && + (point.y >= rec.y) && (point.y <= (rec.y + rec.height))) collision = true; + + return collision; +} + +// Formatting of text with variables to 'embed' +static const char *TextFormat(const char *text, ...) +{ + #if !defined(RAYGUI_TEXTFORMAT_MAX_SIZE) + #define RAYGUI_TEXTFORMAT_MAX_SIZE 256 + #endif + + static char buffer[RAYGUI_TEXTFORMAT_MAX_SIZE]; + + va_list args; + va_start(args, text); + vsprintf(buffer, text, args); + va_end(args); + + return buffer; +} + +// Draw rectangle with vertical gradient fill color +// NOTE: This function is only used by GuiColorPicker() +static void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2) +{ + Rectangle bounds = { (float)posX, (float)posY, (float)width, (float)height }; + DrawRectangleGradientEx(bounds, color1, color2, color2, color1); +} + +// Split string into multiple strings +const char **TextSplit(const char *text, char delimiter, int *count) +{ + // NOTE: Current implementation returns a copy of the provided string with '\0' (string end delimiter) + // inserted between strings defined by "delimiter" parameter. No memory is dynamically allocated, + // all used memory is static... it has some limitations: + // 1. Maximum number of possible split strings is set by RAYGUI_TEXTSPLIT_MAX_ITEMS + // 2. Maximum size of text to split is RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE + + #if !defined(RAYGUI_TEXTSPLIT_MAX_ITEMS) + #define RAYGUI_TEXTSPLIT_MAX_ITEMS 128 + #endif + #if !defined(RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE) + #define RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE 1024 + #endif + + static const char *result[RAYGUI_TEXTSPLIT_MAX_ITEMS] = { NULL }; + static char buffer[RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE] = { 0 }; + memset(buffer, 0, RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE); + + result[0] = buffer; + int counter = 0; + + if (text != NULL) + { + counter = 1; + + // Count how many substrings we have on text and point to every one + for (int i = 0; i < RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE; i++) + { + buffer[i] = text[i]; + if (buffer[i] == '\0') break; + else if (buffer[i] == delimiter) + { + buffer[i] = '\0'; // Set an end of string at this point + result[counter] = buffer + i + 1; + counter++; + + if (counter == RAYGUI_TEXTSPLIT_MAX_ITEMS) break; + } + } + } + + *count = counter; + return result; +} + +// Get integer value from text +// NOTE: This function replaces atoi() [stdlib.h] +static int TextToInteger(const char *text) +{ + int value = 0; + int sign = 1; + + if ((text[0] == '+') || (text[0] == '-')) + { + if (text[0] == '-') sign = -1; + text++; + } + + for (int i = 0; ((text[i] >= '0') && (text[i] <= '9')); ++i) value = value*10 + (int)(text[i] - '0'); + + return value*sign; +} + +// Encode codepoint into UTF-8 text (char array size returned as parameter) +static const char *CodepointToUTF8(int codepoint, int *byteSize) +{ + static char utf8[6] = { 0 }; + int size = 0; + + if (codepoint <= 0x7f) + { + utf8[0] = (char)codepoint; + size = 1; + } + else if (codepoint <= 0x7ff) + { + utf8[0] = (char)(((codepoint >> 6) & 0x1f) | 0xc0); + utf8[1] = (char)((codepoint & 0x3f) | 0x80); + size = 2; + } + else if (codepoint <= 0xffff) + { + utf8[0] = (char)(((codepoint >> 12) & 0x0f) | 0xe0); + utf8[1] = (char)(((codepoint >> 6) & 0x3f) | 0x80); + utf8[2] = (char)((codepoint & 0x3f) | 0x80); + size = 3; + } + else if (codepoint <= 0x10ffff) + { + utf8[0] = (char)(((codepoint >> 18) & 0x07) | 0xf0); + utf8[1] = (char)(((codepoint >> 12) & 0x3f) | 0x80); + utf8[2] = (char)(((codepoint >> 6) & 0x3f) | 0x80); + utf8[3] = (char)((codepoint & 0x3f) | 0x80); + size = 4; + } + + *byteSize = size; + + return utf8; +} + +// Get next codepoint in a UTF-8 encoded text, scanning until '\0' is found +// When a invalid UTF-8 byte is encountered we exit as soon as possible and a '?'(0x3f) codepoint is returned +// Total number of bytes processed are returned as a parameter +// NOTE: the standard says U+FFFD should be returned in case of errors +// but that character is not supported by the default font in raylib +static int GetCodepointNext(const char *text, int *codepointSize) +{ + const char *ptr = text; + int codepoint = 0x3f; // Codepoint (defaults to '?') + *codepointSize = 1; + + // Get current codepoint and bytes processed + if (0xf0 == (0xf8 & ptr[0])) + { + // 4 byte UTF-8 codepoint + if(((ptr[1] & 0xC0) ^ 0x80) || ((ptr[2] & 0xC0) ^ 0x80) || ((ptr[3] & 0xC0) ^ 0x80)) { return codepoint; } //10xxxxxx checks + codepoint = ((0x07 & ptr[0]) << 18) | ((0x3f & ptr[1]) << 12) | ((0x3f & ptr[2]) << 6) | (0x3f & ptr[3]); + *codepointSize = 4; + } + else if (0xe0 == (0xf0 & ptr[0])) + { + // 3 byte UTF-8 codepoint */ + if(((ptr[1] & 0xC0) ^ 0x80) || ((ptr[2] & 0xC0) ^ 0x80)) { return codepoint; } //10xxxxxx checks + codepoint = ((0x0f & ptr[0]) << 12) | ((0x3f & ptr[1]) << 6) | (0x3f & ptr[2]); + *codepointSize = 3; + } + else if (0xc0 == (0xe0 & ptr[0])) + { + // 2 byte UTF-8 codepoint + if((ptr[1] & 0xC0) ^ 0x80) { return codepoint; } //10xxxxxx checks + codepoint = ((0x1f & ptr[0]) << 6) | (0x3f & ptr[1]); + *codepointSize = 2; + } + else if (0x00 == (0x80 & ptr[0])) + { + // 1 byte UTF-8 codepoint + codepoint = ptr[0]; + *codepointSize = 1; + } + + + return codepoint; +} +#endif // RAYGUI_STANDALONE + +#endif // RAYGUI_IMPLEMENTATION diff --git a/include/raylib.h b/include/raylib.h new file mode 100644 index 0000000..e0c74af --- /dev/null +++ b/include/raylib.h @@ -0,0 +1,1698 @@ +/********************************************************************************************** +* +* raylib v5.5-dev - A simple and easy-to-use library to enjoy videogames programming (www.raylib.com) +* +* FEATURES: +* - NO external dependencies, all required libraries included with raylib +* - Multiplatform: Windows, Linux, FreeBSD, OpenBSD, NetBSD, DragonFly, +* MacOS, Haiku, Android, Raspberry Pi, DRM native, HTML5. +* - Written in plain C code (C99) in PascalCase/camelCase notation +* - Hardware accelerated with OpenGL (1.1, 2.1, 3.3, 4.3 or ES2 - choose at compile) +* - Unique OpenGL abstraction layer (usable as standalone module): [rlgl] +* - Multiple Fonts formats supported (TTF, XNA fonts, AngelCode fonts) +* - Outstanding texture formats support, including compressed formats (DXT, ETC, ASTC) +* - Full 3d support for 3d Shapes, Models, Billboards, Heightmaps and more! +* - Flexible Materials system, supporting classic maps and PBR maps +* - Animated 3D models supported (skeletal bones animation) (IQM) +* - Shaders support, including Model shaders and Postprocessing shaders +* - Powerful math module for Vector, Matrix and Quaternion operations: [raymath] +* - Audio loading and playing with streaming support (WAV, OGG, MP3, FLAC, XM, MOD) +* - VR stereo rendering with configurable HMD device parameters +* - Bindings to multiple programming languages available! +* +* NOTES: +* - One default Font is loaded on InitWindow()->LoadFontDefault() [core, text] +* - One default Texture2D is loaded on rlglInit(), 1x1 white pixel R8G8B8A8 [rlgl] (OpenGL 3.3 or ES2) +* - One default Shader is loaded on rlglInit()->rlLoadShaderDefault() [rlgl] (OpenGL 3.3 or ES2) +* - One default RenderBatch is loaded on rlglInit()->rlLoadRenderBatch() [rlgl] (OpenGL 3.3 or ES2) +* +* DEPENDENCIES (included): +* [rcore] rglfw (Camilla Löwy - github.com/glfw/glfw) for window/context management and input (PLATFORM_DESKTOP) +* [rlgl] glad (David Herberth - github.com/Dav1dde/glad) for OpenGL 3.3 extensions loading (PLATFORM_DESKTOP) +* [raudio] miniaudio (David Reid - github.com/mackron/miniaudio) for audio device/context management +* +* OPTIONAL DEPENDENCIES (included): +* [rcore] msf_gif (Miles Fogle) for GIF recording +* [rcore] sinfl (Micha Mettke) for DEFLATE decompression algorithm +* [rcore] sdefl (Micha Mettke) for DEFLATE compression algorithm +* [rtextures] stb_image (Sean Barret) for images loading (BMP, TGA, PNG, JPEG, HDR...) +* [rtextures] stb_image_write (Sean Barret) for image writing (BMP, TGA, PNG, JPG) +* [rtextures] stb_image_resize (Sean Barret) for image resizing algorithms +* [rtext] stb_truetype (Sean Barret) for ttf fonts loading +* [rtext] stb_rect_pack (Sean Barret) for rectangles packing +* [rmodels] par_shapes (Philip Rideout) for parametric 3d shapes generation +* [rmodels] tinyobj_loader_c (Syoyo Fujita) for models loading (OBJ, MTL) +* [rmodels] cgltf (Johannes Kuhlmann) for models loading (glTF) +* [rmodels] Model3D (bzt) for models loading (M3D, https://bztsrc.gitlab.io/model3d) +* [raudio] dr_wav (David Reid) for WAV audio file loading +* [raudio] dr_flac (David Reid) for FLAC audio file loading +* [raudio] dr_mp3 (David Reid) for MP3 audio file loading +* [raudio] stb_vorbis (Sean Barret) for OGG audio loading +* [raudio] jar_xm (Joshua Reisenauer) for XM audio module loading +* [raudio] jar_mod (Joshua Reisenauer) for MOD audio module loading +* +* +* LICENSE: zlib/libpng +* +* raylib is licensed under an unmodified zlib/libpng license, which is an OSI-certified, +* BSD-like license that allows static linking with closed source software: +* +* Copyright (c) 2013-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. +* +**********************************************************************************************/ + +#ifndef RAYLIB_H +#define RAYLIB_H + +#include // Required for: va_list - Only used by TraceLogCallback + +#define RAYLIB_VERSION_MAJOR 5 +#define RAYLIB_VERSION_MINOR 5 +#define RAYLIB_VERSION_PATCH 0 +#define RAYLIB_VERSION "5.5-dev" + +// Function specifiers in case library is build/used as a shared library +// NOTE: Microsoft specifiers to tell compiler that symbols are imported/exported from a .dll +// NOTE: visibility("default") attribute makes symbols "visible" when compiled with -fvisibility=hidden +#if defined(_WIN32) + #if defined(__TINYC__) + #define __declspec(x) __attribute__((x)) + #endif + #if defined(BUILD_LIBTYPE_SHARED) + #define RLAPI __declspec(dllexport) // We are building the library as a Win32 shared library (.dll) + #elif defined(USE_LIBTYPE_SHARED) + #define RLAPI __declspec(dllimport) // We are using the library as a Win32 shared library (.dll) + #endif +#else + #if defined(BUILD_LIBTYPE_SHARED) + #define RLAPI __attribute__((visibility("default"))) // We are building as a Unix shared library (.so/.dylib) + #endif +#endif + +#ifndef RLAPI + #define RLAPI // Functions defined as 'extern' by default (implicit specifiers) +#endif + +//---------------------------------------------------------------------------------- +// Some basic Defines +//---------------------------------------------------------------------------------- +#ifndef PI + #define PI 3.14159265358979323846f +#endif +#ifndef DEG2RAD + #define DEG2RAD (PI/180.0f) +#endif +#ifndef RAD2DEG + #define RAD2DEG (180.0f/PI) +#endif + +// Allow custom memory allocators +// NOTE: Require recompiling raylib sources +#ifndef RL_MALLOC + #define RL_MALLOC(sz) malloc(sz) +#endif +#ifndef RL_CALLOC + #define RL_CALLOC(n,sz) calloc(n,sz) +#endif +#ifndef RL_REALLOC + #define RL_REALLOC(ptr,sz) realloc(ptr,sz) +#endif +#ifndef RL_FREE + #define RL_FREE(ptr) free(ptr) +#endif + +// NOTE: MSVC C++ compiler does not support compound literals (C99 feature) +// Plain structures in C++ (without constructors) can be initialized with { } +// This is called aggregate initialization (C++11 feature) +#if defined(__cplusplus) + #define CLITERAL(type) type +#else + #define CLITERAL(type) (type) +#endif + +// Some compilers (mostly macos clang) default to C++98, +// where aggregate initialization can't be used +// So, give a more clear error stating how to fix this +#if !defined(_MSC_VER) && (defined(__cplusplus) && __cplusplus < 201103L) + #error "C++11 or later is required. Add -std=c++11" +#endif + +// NOTE: We set some defines with some data types declared by raylib +// Other modules (raymath, rlgl) also require some of those types, so, +// to be able to use those other modules as standalone (not depending on raylib) +// this defines are very useful for internal check and avoid type (re)definitions +#define RL_COLOR_TYPE +#define RL_RECTANGLE_TYPE +#define RL_VECTOR2_TYPE +#define RL_VECTOR3_TYPE +#define RL_VECTOR4_TYPE +#define RL_QUATERNION_TYPE +#define RL_MATRIX_TYPE + +// Some Basic Colors +// NOTE: Custom raylib color palette for amazing visuals on WHITE background +#define LIGHTGRAY CLITERAL(Color){ 200, 200, 200, 255 } // Light Gray +#define GRAY CLITERAL(Color){ 130, 130, 130, 255 } // Gray +#define DARKGRAY CLITERAL(Color){ 80, 80, 80, 255 } // Dark Gray +#define YELLOW CLITERAL(Color){ 253, 249, 0, 255 } // Yellow +#define GOLD CLITERAL(Color){ 255, 203, 0, 255 } // Gold +#define ORANGE CLITERAL(Color){ 255, 161, 0, 255 } // Orange +#define PINK CLITERAL(Color){ 255, 109, 194, 255 } // Pink +#define RED CLITERAL(Color){ 230, 41, 55, 255 } // Red +#define MAROON CLITERAL(Color){ 190, 33, 55, 255 } // Maroon +#define GREEN CLITERAL(Color){ 0, 228, 48, 255 } // Green +#define LIME CLITERAL(Color){ 0, 158, 47, 255 } // Lime +#define DARKGREEN CLITERAL(Color){ 0, 117, 44, 255 } // Dark Green +#define SKYBLUE CLITERAL(Color){ 102, 191, 255, 255 } // Sky Blue +#define BLUE CLITERAL(Color){ 0, 121, 241, 255 } // Blue +#define DARKBLUE CLITERAL(Color){ 0, 82, 172, 255 } // Dark Blue +#define PURPLE CLITERAL(Color){ 200, 122, 255, 255 } // Purple +#define VIOLET CLITERAL(Color){ 135, 60, 190, 255 } // Violet +#define DARKPURPLE CLITERAL(Color){ 112, 31, 126, 255 } // Dark Purple +#define BEIGE CLITERAL(Color){ 211, 176, 131, 255 } // Beige +#define BROWN CLITERAL(Color){ 127, 106, 79, 255 } // Brown +#define DARKBROWN CLITERAL(Color){ 76, 63, 47, 255 } // Dark Brown + +#define WHITE CLITERAL(Color){ 255, 255, 255, 255 } // White +#define BLACK CLITERAL(Color){ 0, 0, 0, 255 } // Black +#define BLANK CLITERAL(Color){ 0, 0, 0, 0 } // Blank (Transparent) +#define MAGENTA CLITERAL(Color){ 255, 0, 255, 255 } // Magenta +#define RAYWHITE CLITERAL(Color){ 245, 245, 245, 255 } // My own White (raylib logo) + +//---------------------------------------------------------------------------------- +// Structures Definition +//---------------------------------------------------------------------------------- +// Boolean type +#if (defined(__STDC__) && __STDC_VERSION__ >= 199901L) || (defined(_MSC_VER) && _MSC_VER >= 1800) + #include +#elif !defined(__cplusplus) && !defined(bool) + typedef enum bool { false = 0, true = !false } bool; + #define RL_BOOL_TYPE +#endif + +// Vector2, 2 components +typedef struct Vector2 { + float x; // Vector x component + float y; // Vector y component +} Vector2; + +// Vector3, 3 components +typedef struct Vector3 { + float x; // Vector x component + float y; // Vector y component + float z; // Vector z component +} Vector3; + +// Vector4, 4 components +typedef struct Vector4 { + float x; // Vector x component + float y; // Vector y component + float z; // Vector z component + float w; // Vector w component +} Vector4; + +// Quaternion, 4 components (Vector4 alias) +typedef Vector4 Quaternion; + +// Matrix, 4x4 components, column major, OpenGL style, right-handed +typedef struct Matrix { + float m0, m4, m8, m12; // Matrix first row (4 components) + float m1, m5, m9, m13; // Matrix second row (4 components) + float m2, m6, m10, m14; // Matrix third row (4 components) + float m3, m7, m11, m15; // Matrix fourth row (4 components) +} Matrix; + +// Color, 4 components, R8G8B8A8 (32bit) +typedef struct Color { + unsigned char r; // Color red value + unsigned char g; // Color green value + unsigned char b; // Color blue value + unsigned char a; // Color alpha value +} Color; + +// Rectangle, 4 components +typedef struct Rectangle { + float x; // Rectangle top-left corner position x + float y; // Rectangle top-left corner position y + float width; // Rectangle width + float height; // Rectangle height +} Rectangle; + +// Image, pixel data stored in CPU memory (RAM) +typedef struct Image { + void *data; // Image raw data + int width; // Image base width + int height; // Image base height + int mipmaps; // Mipmap levels, 1 by default + int format; // Data format (PixelFormat type) +} Image; + +// Texture, tex data stored in GPU memory (VRAM) +typedef struct Texture { + unsigned int id; // OpenGL texture id + int width; // Texture base width + int height; // Texture base height + int mipmaps; // Mipmap levels, 1 by default + int format; // Data format (PixelFormat type) +} Texture; + +// Texture2D, same as Texture +typedef Texture Texture2D; + +// TextureCubemap, same as Texture +typedef Texture TextureCubemap; + +// RenderTexture, fbo for texture rendering +typedef struct RenderTexture { + unsigned int id; // OpenGL framebuffer object id + Texture texture; // Color buffer attachment texture + Texture depth; // Depth buffer attachment texture +} RenderTexture; + +// RenderTexture2D, same as RenderTexture +typedef RenderTexture RenderTexture2D; + +// NPatchInfo, n-patch layout info +typedef struct NPatchInfo { + Rectangle source; // Texture source rectangle + int left; // Left border offset + int top; // Top border offset + int right; // Right border offset + int bottom; // Bottom border offset + int layout; // Layout of the n-patch: 3x3, 1x3 or 3x1 +} NPatchInfo; + +// GlyphInfo, font characters glyphs info +typedef struct GlyphInfo { + int value; // Character value (Unicode) + int offsetX; // Character offset X when drawing + int offsetY; // Character offset Y when drawing + int advanceX; // Character advance position X + Image image; // Character image data +} GlyphInfo; + +// Font, font texture and GlyphInfo array data +typedef struct Font { + int baseSize; // Base size (default chars height) + int glyphCount; // Number of glyph characters + int glyphPadding; // Padding around the glyph characters + Texture2D texture; // Texture atlas containing the glyphs + Rectangle *recs; // Rectangles in texture for the glyphs + GlyphInfo *glyphs; // Glyphs info data +} Font; + +// Camera, defines position/orientation in 3d space +typedef struct Camera3D { + Vector3 position; // Camera position + Vector3 target; // Camera target it looks-at + Vector3 up; // Camera up vector (rotation over its axis) + float fovy; // Camera field-of-view aperture in Y (degrees) in perspective, used as near plane width in orthographic + int projection; // Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC +} Camera3D; + +typedef Camera3D Camera; // Camera type fallback, defaults to Camera3D + +// Camera2D, defines position/orientation in 2d space +typedef struct Camera2D { + Vector2 offset; // Camera offset (displacement from target) + Vector2 target; // Camera target (rotation and zoom origin) + float rotation; // Camera rotation in degrees + float zoom; // Camera zoom (scaling), should be 1.0f by default +} Camera2D; + +// Mesh, vertex data and vao/vbo +typedef struct Mesh { + int vertexCount; // Number of vertices stored in arrays + int triangleCount; // Number of triangles stored (indexed or not) + + // Vertex attributes data + float *vertices; // Vertex position (XYZ - 3 components per vertex) (shader-location = 0) + float *texcoords; // Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1) + float *texcoords2; // Vertex texture second coordinates (UV - 2 components per vertex) (shader-location = 5) + float *normals; // Vertex normals (XYZ - 3 components per vertex) (shader-location = 2) + float *tangents; // Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4) + unsigned char *colors; // Vertex colors (RGBA - 4 components per vertex) (shader-location = 3) + unsigned short *indices; // Vertex indices (in case vertex data comes indexed) + + // Animation vertex data + float *animVertices; // Animated vertex positions (after bones transformations) + float *animNormals; // Animated normals (after bones transformations) + unsigned char *boneIds; // Vertex bone ids, max 255 bone ids, up to 4 bones influence by vertex (skinning) (shader-location = 6) + float *boneWeights; // Vertex bone weight, up to 4 bones influence by vertex (skinning) (shader-location = 7) + Matrix *boneMatrices; // Bones animated transformation matrices + int boneCount; // Number of bones + + // OpenGL identifiers + unsigned int vaoId; // OpenGL Vertex Array Object id + unsigned int *vboId; // OpenGL Vertex Buffer Objects id (default vertex data) +} Mesh; + +// Shader +typedef struct Shader { + unsigned int id; // Shader program id + int *locs; // Shader locations array (RL_MAX_SHADER_LOCATIONS) +} Shader; + +// MaterialMap +typedef struct MaterialMap { + Texture2D texture; // Material map texture + Color color; // Material map color + float value; // Material map value +} MaterialMap; + +// Material, includes shader and maps +typedef struct Material { + Shader shader; // Material shader + MaterialMap *maps; // Material maps array (MAX_MATERIAL_MAPS) + float params[4]; // Material generic parameters (if required) +} Material; + +// Transform, vertex transformation data +typedef struct Transform { + Vector3 translation; // Translation + Quaternion rotation; // Rotation + Vector3 scale; // Scale +} Transform; + +// Bone, skeletal animation bone +typedef struct BoneInfo { + char name[32]; // Bone name + int parent; // Bone parent +} BoneInfo; + +// Model, meshes, materials and animation data +typedef struct Model { + Matrix transform; // Local transform matrix + + int meshCount; // Number of meshes + int materialCount; // Number of materials + Mesh *meshes; // Meshes array + Material *materials; // Materials array + int *meshMaterial; // Mesh material number + + // Animation data + int boneCount; // Number of bones + BoneInfo *bones; // Bones information (skeleton) + Transform *bindPose; // Bones base transformation (pose) +} Model; + +// ModelAnimation +typedef struct ModelAnimation { + int boneCount; // Number of bones + int frameCount; // Number of animation frames + BoneInfo *bones; // Bones information (skeleton) + Transform **framePoses; // Poses array by frame + char name[32]; // Animation name +} ModelAnimation; + +// Ray, ray for raycasting +typedef struct Ray { + Vector3 position; // Ray position (origin) + Vector3 direction; // Ray direction (normalized) +} Ray; + +// RayCollision, ray hit information +typedef struct RayCollision { + bool hit; // Did the ray hit something? + float distance; // Distance to the nearest hit + Vector3 point; // Point of the nearest hit + Vector3 normal; // Surface normal of hit +} RayCollision; + +// BoundingBox +typedef struct BoundingBox { + Vector3 min; // Minimum vertex box-corner + Vector3 max; // Maximum vertex box-corner +} BoundingBox; + +// Wave, audio wave data +typedef struct Wave { + unsigned int frameCount; // Total number of frames (considering channels) + unsigned int sampleRate; // Frequency (samples per second) + unsigned int sampleSize; // Bit depth (bits per sample): 8, 16, 32 (24 not supported) + unsigned int channels; // Number of channels (1-mono, 2-stereo, ...) + void *data; // Buffer data pointer +} Wave; + +// Opaque structs declaration +// NOTE: Actual structs are defined internally in raudio module +typedef struct rAudioBuffer rAudioBuffer; +typedef struct rAudioProcessor rAudioProcessor; + +// AudioStream, custom audio stream +typedef struct AudioStream { + rAudioBuffer *buffer; // Pointer to internal data used by the audio system + rAudioProcessor *processor; // Pointer to internal data processor, useful for audio effects + + unsigned int sampleRate; // Frequency (samples per second) + unsigned int sampleSize; // Bit depth (bits per sample): 8, 16, 32 (24 not supported) + unsigned int channels; // Number of channels (1-mono, 2-stereo, ...) +} AudioStream; + +// Sound +typedef struct Sound { + AudioStream stream; // Audio stream + unsigned int frameCount; // Total number of frames (considering channels) +} Sound; + +// Music, audio stream, anything longer than ~10 seconds should be streamed +typedef struct Music { + AudioStream stream; // Audio stream + unsigned int frameCount; // Total number of frames (considering channels) + bool looping; // Music looping enable + + int ctxType; // Type of music context (audio filetype) + void *ctxData; // Audio context data, depends on type +} Music; + +// VrDeviceInfo, Head-Mounted-Display device parameters +typedef struct VrDeviceInfo { + int hResolution; // Horizontal resolution in pixels + int vResolution; // Vertical resolution in pixels + float hScreenSize; // Horizontal size in meters + float vScreenSize; // Vertical size in meters + float eyeToScreenDistance; // Distance between eye and display in meters + float lensSeparationDistance; // Lens separation distance in meters + float interpupillaryDistance; // IPD (distance between pupils) in meters + float lensDistortionValues[4]; // Lens distortion constant parameters + float chromaAbCorrection[4]; // Chromatic aberration correction parameters +} VrDeviceInfo; + +// VrStereoConfig, VR stereo rendering configuration for simulator +typedef struct VrStereoConfig { + Matrix projection[2]; // VR projection matrices (per eye) + Matrix viewOffset[2]; // VR view offset matrices (per eye) + float leftLensCenter[2]; // VR left lens center + float rightLensCenter[2]; // VR right lens center + float leftScreenCenter[2]; // VR left screen center + float rightScreenCenter[2]; // VR right screen center + float scale[2]; // VR distortion scale + float scaleIn[2]; // VR distortion scale in +} VrStereoConfig; + +// File path list +typedef struct FilePathList { + unsigned int capacity; // Filepaths max entries + unsigned int count; // Filepaths entries count + char **paths; // Filepaths entries +} FilePathList; + +// Automation event +typedef struct AutomationEvent { + unsigned int frame; // Event frame + unsigned int type; // Event type (AutomationEventType) + int params[4]; // Event parameters (if required) +} AutomationEvent; + +// Automation event list +typedef struct AutomationEventList { + unsigned int capacity; // Events max entries (MAX_AUTOMATION_EVENTS) + unsigned int count; // Events entries count + AutomationEvent *events; // Events entries +} AutomationEventList; + +//---------------------------------------------------------------------------------- +// Enumerators Definition +//---------------------------------------------------------------------------------- +// System/Window config flags +// NOTE: Every bit registers one state (use it with bit masks) +// By default all flags are set to 0 +typedef enum { + FLAG_VSYNC_HINT = 0x00000040, // Set to try enabling V-Sync on GPU + FLAG_FULLSCREEN_MODE = 0x00000002, // Set to run program in fullscreen + FLAG_WINDOW_RESIZABLE = 0x00000004, // Set to allow resizable window + FLAG_WINDOW_UNDECORATED = 0x00000008, // Set to disable window decoration (frame and buttons) + FLAG_WINDOW_HIDDEN = 0x00000080, // Set to hide window + FLAG_WINDOW_MINIMIZED = 0x00000200, // Set to minimize window (iconify) + FLAG_WINDOW_MAXIMIZED = 0x00000400, // Set to maximize window (expanded to monitor) + FLAG_WINDOW_UNFOCUSED = 0x00000800, // Set to window non focused + FLAG_WINDOW_TOPMOST = 0x00001000, // Set to window always on top + FLAG_WINDOW_ALWAYS_RUN = 0x00000100, // Set to allow windows running while minimized + FLAG_WINDOW_TRANSPARENT = 0x00000010, // Set to allow transparent framebuffer + FLAG_WINDOW_HIGHDPI = 0x00002000, // Set to support HighDPI + FLAG_WINDOW_MOUSE_PASSTHROUGH = 0x00004000, // Set to support mouse passthrough, only supported when FLAG_WINDOW_UNDECORATED + FLAG_BORDERLESS_WINDOWED_MODE = 0x00008000, // Set to run program in borderless windowed mode + FLAG_MSAA_4X_HINT = 0x00000020, // Set to try enabling MSAA 4X + FLAG_INTERLACED_HINT = 0x00010000 // Set to try enabling interlaced video format (for V3D) +} ConfigFlags; + +// Trace log level +// NOTE: Organized by priority level +typedef enum { + LOG_ALL = 0, // Display all logs + LOG_TRACE, // Trace logging, intended for internal use only + LOG_DEBUG, // Debug logging, used for internal debugging, it should be disabled on release builds + LOG_INFO, // Info logging, used for program execution info + LOG_WARNING, // Warning logging, used on recoverable failures + LOG_ERROR, // Error logging, used on unrecoverable failures + LOG_FATAL, // Fatal logging, used to abort program: exit(EXIT_FAILURE) + LOG_NONE // Disable logging +} TraceLogLevel; + +// Keyboard keys (US keyboard layout) +// NOTE: Use GetKeyPressed() to allow redefining +// required keys for alternative layouts +typedef enum { + KEY_NULL = 0, // Key: NULL, used for no key pressed + // Alphanumeric keys + KEY_APOSTROPHE = 39, // Key: ' + KEY_COMMA = 44, // Key: , + KEY_MINUS = 45, // Key: - + KEY_PERIOD = 46, // Key: . + KEY_SLASH = 47, // Key: / + KEY_ZERO = 48, // Key: 0 + KEY_ONE = 49, // Key: 1 + KEY_TWO = 50, // Key: 2 + KEY_THREE = 51, // Key: 3 + KEY_FOUR = 52, // Key: 4 + KEY_FIVE = 53, // Key: 5 + KEY_SIX = 54, // Key: 6 + KEY_SEVEN = 55, // Key: 7 + KEY_EIGHT = 56, // Key: 8 + KEY_NINE = 57, // Key: 9 + KEY_SEMICOLON = 59, // Key: ; + KEY_EQUAL = 61, // Key: = + KEY_A = 65, // Key: A | a + KEY_B = 66, // Key: B | b + KEY_C = 67, // Key: C | c + KEY_D = 68, // Key: D | d + KEY_E = 69, // Key: E | e + KEY_F = 70, // Key: F | f + KEY_G = 71, // Key: G | g + KEY_H = 72, // Key: H | h + KEY_I = 73, // Key: I | i + KEY_J = 74, // Key: J | j + KEY_K = 75, // Key: K | k + KEY_L = 76, // Key: L | l + KEY_M = 77, // Key: M | m + KEY_N = 78, // Key: N | n + KEY_O = 79, // Key: O | o + KEY_P = 80, // Key: P | p + KEY_Q = 81, // Key: Q | q + KEY_R = 82, // Key: R | r + KEY_S = 83, // Key: S | s + KEY_T = 84, // Key: T | t + KEY_U = 85, // Key: U | u + KEY_V = 86, // Key: V | v + KEY_W = 87, // Key: W | w + KEY_X = 88, // Key: X | x + KEY_Y = 89, // Key: Y | y + KEY_Z = 90, // Key: Z | z + KEY_LEFT_BRACKET = 91, // Key: [ + KEY_BACKSLASH = 92, // Key: '\' + KEY_RIGHT_BRACKET = 93, // Key: ] + KEY_GRAVE = 96, // Key: ` + // Function keys + KEY_SPACE = 32, // Key: Space + KEY_ESCAPE = 256, // Key: Esc + KEY_ENTER = 257, // Key: Enter + KEY_TAB = 258, // Key: Tab + KEY_BACKSPACE = 259, // Key: Backspace + KEY_INSERT = 260, // Key: Ins + KEY_DELETE = 261, // Key: Del + KEY_RIGHT = 262, // Key: Cursor right + KEY_LEFT = 263, // Key: Cursor left + KEY_DOWN = 264, // Key: Cursor down + KEY_UP = 265, // Key: Cursor up + KEY_PAGE_UP = 266, // Key: Page up + KEY_PAGE_DOWN = 267, // Key: Page down + KEY_HOME = 268, // Key: Home + KEY_END = 269, // Key: End + KEY_CAPS_LOCK = 280, // Key: Caps lock + KEY_SCROLL_LOCK = 281, // Key: Scroll down + KEY_NUM_LOCK = 282, // Key: Num lock + KEY_PRINT_SCREEN = 283, // Key: Print screen + KEY_PAUSE = 284, // Key: Pause + KEY_F1 = 290, // Key: F1 + KEY_F2 = 291, // Key: F2 + KEY_F3 = 292, // Key: F3 + KEY_F4 = 293, // Key: F4 + KEY_F5 = 294, // Key: F5 + KEY_F6 = 295, // Key: F6 + KEY_F7 = 296, // Key: F7 + KEY_F8 = 297, // Key: F8 + KEY_F9 = 298, // Key: F9 + KEY_F10 = 299, // Key: F10 + KEY_F11 = 300, // Key: F11 + KEY_F12 = 301, // Key: F12 + KEY_LEFT_SHIFT = 340, // Key: Shift left + KEY_LEFT_CONTROL = 341, // Key: Control left + KEY_LEFT_ALT = 342, // Key: Alt left + KEY_LEFT_SUPER = 343, // Key: Super left + KEY_RIGHT_SHIFT = 344, // Key: Shift right + KEY_RIGHT_CONTROL = 345, // Key: Control right + KEY_RIGHT_ALT = 346, // Key: Alt right + KEY_RIGHT_SUPER = 347, // Key: Super right + KEY_KB_MENU = 348, // Key: KB menu + // Keypad keys + KEY_KP_0 = 320, // Key: Keypad 0 + KEY_KP_1 = 321, // Key: Keypad 1 + KEY_KP_2 = 322, // Key: Keypad 2 + KEY_KP_3 = 323, // Key: Keypad 3 + KEY_KP_4 = 324, // Key: Keypad 4 + KEY_KP_5 = 325, // Key: Keypad 5 + KEY_KP_6 = 326, // Key: Keypad 6 + KEY_KP_7 = 327, // Key: Keypad 7 + KEY_KP_8 = 328, // Key: Keypad 8 + KEY_KP_9 = 329, // Key: Keypad 9 + KEY_KP_DECIMAL = 330, // Key: Keypad . + KEY_KP_DIVIDE = 331, // Key: Keypad / + KEY_KP_MULTIPLY = 332, // Key: Keypad * + KEY_KP_SUBTRACT = 333, // Key: Keypad - + KEY_KP_ADD = 334, // Key: Keypad + + KEY_KP_ENTER = 335, // Key: Keypad Enter + KEY_KP_EQUAL = 336, // Key: Keypad = + // Android key buttons + KEY_BACK = 4, // Key: Android back button + KEY_MENU = 5, // Key: Android menu button + KEY_VOLUME_UP = 24, // Key: Android volume up button + KEY_VOLUME_DOWN = 25 // Key: Android volume down button +} KeyboardKey; + +// Add backwards compatibility support for deprecated names +#define MOUSE_LEFT_BUTTON MOUSE_BUTTON_LEFT +#define MOUSE_RIGHT_BUTTON MOUSE_BUTTON_RIGHT +#define MOUSE_MIDDLE_BUTTON MOUSE_BUTTON_MIDDLE + +// Mouse buttons +typedef enum { + MOUSE_BUTTON_LEFT = 0, // Mouse button left + MOUSE_BUTTON_RIGHT = 1, // Mouse button right + MOUSE_BUTTON_MIDDLE = 2, // Mouse button middle (pressed wheel) + MOUSE_BUTTON_SIDE = 3, // Mouse button side (advanced mouse device) + MOUSE_BUTTON_EXTRA = 4, // Mouse button extra (advanced mouse device) + MOUSE_BUTTON_FORWARD = 5, // Mouse button forward (advanced mouse device) + MOUSE_BUTTON_BACK = 6, // Mouse button back (advanced mouse device) +} MouseButton; + +// Mouse cursor +typedef enum { + MOUSE_CURSOR_DEFAULT = 0, // Default pointer shape + MOUSE_CURSOR_ARROW = 1, // Arrow shape + MOUSE_CURSOR_IBEAM = 2, // Text writing cursor shape + MOUSE_CURSOR_CROSSHAIR = 3, // Cross shape + MOUSE_CURSOR_POINTING_HAND = 4, // Pointing hand cursor + MOUSE_CURSOR_RESIZE_EW = 5, // Horizontal resize/move arrow shape + MOUSE_CURSOR_RESIZE_NS = 6, // Vertical resize/move arrow shape + MOUSE_CURSOR_RESIZE_NWSE = 7, // Top-left to bottom-right diagonal resize/move arrow shape + MOUSE_CURSOR_RESIZE_NESW = 8, // The top-right to bottom-left diagonal resize/move arrow shape + MOUSE_CURSOR_RESIZE_ALL = 9, // The omnidirectional resize/move cursor shape + MOUSE_CURSOR_NOT_ALLOWED = 10 // The operation-not-allowed shape +} MouseCursor; + +// Gamepad buttons +typedef enum { + GAMEPAD_BUTTON_UNKNOWN = 0, // Unknown button, just for error checking + GAMEPAD_BUTTON_LEFT_FACE_UP, // Gamepad left DPAD up button + GAMEPAD_BUTTON_LEFT_FACE_RIGHT, // Gamepad left DPAD right button + GAMEPAD_BUTTON_LEFT_FACE_DOWN, // Gamepad left DPAD down button + GAMEPAD_BUTTON_LEFT_FACE_LEFT, // Gamepad left DPAD left button + GAMEPAD_BUTTON_RIGHT_FACE_UP, // Gamepad right button up (i.e. PS3: Triangle, Xbox: Y) + GAMEPAD_BUTTON_RIGHT_FACE_RIGHT, // Gamepad right button right (i.e. PS3: Circle, Xbox: B) + GAMEPAD_BUTTON_RIGHT_FACE_DOWN, // Gamepad right button down (i.e. PS3: Cross, Xbox: A) + GAMEPAD_BUTTON_RIGHT_FACE_LEFT, // Gamepad right button left (i.e. PS3: Square, Xbox: X) + GAMEPAD_BUTTON_LEFT_TRIGGER_1, // Gamepad top/back trigger left (first), it could be a trailing button + GAMEPAD_BUTTON_LEFT_TRIGGER_2, // Gamepad top/back trigger left (second), it could be a trailing button + GAMEPAD_BUTTON_RIGHT_TRIGGER_1, // Gamepad top/back trigger right (first), it could be a trailing button + GAMEPAD_BUTTON_RIGHT_TRIGGER_2, // Gamepad top/back trigger right (second), it could be a trailing button + GAMEPAD_BUTTON_MIDDLE_LEFT, // Gamepad center buttons, left one (i.e. PS3: Select) + GAMEPAD_BUTTON_MIDDLE, // Gamepad center buttons, middle one (i.e. PS3: PS, Xbox: XBOX) + GAMEPAD_BUTTON_MIDDLE_RIGHT, // Gamepad center buttons, right one (i.e. PS3: Start) + GAMEPAD_BUTTON_LEFT_THUMB, // Gamepad joystick pressed button left + GAMEPAD_BUTTON_RIGHT_THUMB // Gamepad joystick pressed button right +} GamepadButton; + +// Gamepad axis +typedef enum { + GAMEPAD_AXIS_LEFT_X = 0, // Gamepad left stick X axis + GAMEPAD_AXIS_LEFT_Y = 1, // Gamepad left stick Y axis + GAMEPAD_AXIS_RIGHT_X = 2, // Gamepad right stick X axis + GAMEPAD_AXIS_RIGHT_Y = 3, // Gamepad right stick Y axis + GAMEPAD_AXIS_LEFT_TRIGGER = 4, // Gamepad back trigger left, pressure level: [1..-1] + GAMEPAD_AXIS_RIGHT_TRIGGER = 5 // Gamepad back trigger right, pressure level: [1..-1] +} GamepadAxis; + +// Material map index +typedef enum { + MATERIAL_MAP_ALBEDO = 0, // Albedo material (same as: MATERIAL_MAP_DIFFUSE) + MATERIAL_MAP_METALNESS, // Metalness material (same as: MATERIAL_MAP_SPECULAR) + MATERIAL_MAP_NORMAL, // Normal material + MATERIAL_MAP_ROUGHNESS, // Roughness material + MATERIAL_MAP_OCCLUSION, // Ambient occlusion material + MATERIAL_MAP_EMISSION, // Emission material + MATERIAL_MAP_HEIGHT, // Heightmap material + MATERIAL_MAP_CUBEMAP, // Cubemap material (NOTE: Uses GL_TEXTURE_CUBE_MAP) + MATERIAL_MAP_IRRADIANCE, // Irradiance material (NOTE: Uses GL_TEXTURE_CUBE_MAP) + MATERIAL_MAP_PREFILTER, // Prefilter material (NOTE: Uses GL_TEXTURE_CUBE_MAP) + MATERIAL_MAP_BRDF // Brdf material +} MaterialMapIndex; + +#define MATERIAL_MAP_DIFFUSE MATERIAL_MAP_ALBEDO +#define MATERIAL_MAP_SPECULAR MATERIAL_MAP_METALNESS + +// Shader location index +typedef enum { + SHADER_LOC_VERTEX_POSITION = 0, // Shader location: vertex attribute: position + SHADER_LOC_VERTEX_TEXCOORD01, // Shader location: vertex attribute: texcoord01 + SHADER_LOC_VERTEX_TEXCOORD02, // Shader location: vertex attribute: texcoord02 + SHADER_LOC_VERTEX_NORMAL, // Shader location: vertex attribute: normal + SHADER_LOC_VERTEX_TANGENT, // Shader location: vertex attribute: tangent + SHADER_LOC_VERTEX_COLOR, // Shader location: vertex attribute: color + SHADER_LOC_MATRIX_MVP, // Shader location: matrix uniform: model-view-projection + SHADER_LOC_MATRIX_VIEW, // Shader location: matrix uniform: view (camera transform) + SHADER_LOC_MATRIX_PROJECTION, // Shader location: matrix uniform: projection + SHADER_LOC_MATRIX_MODEL, // Shader location: matrix uniform: model (transform) + SHADER_LOC_MATRIX_NORMAL, // Shader location: matrix uniform: normal + SHADER_LOC_VECTOR_VIEW, // Shader location: vector uniform: view + SHADER_LOC_COLOR_DIFFUSE, // Shader location: vector uniform: diffuse color + SHADER_LOC_COLOR_SPECULAR, // Shader location: vector uniform: specular color + SHADER_LOC_COLOR_AMBIENT, // Shader location: vector uniform: ambient color + SHADER_LOC_MAP_ALBEDO, // Shader location: sampler2d texture: albedo (same as: SHADER_LOC_MAP_DIFFUSE) + SHADER_LOC_MAP_METALNESS, // Shader location: sampler2d texture: metalness (same as: SHADER_LOC_MAP_SPECULAR) + SHADER_LOC_MAP_NORMAL, // Shader location: sampler2d texture: normal + SHADER_LOC_MAP_ROUGHNESS, // Shader location: sampler2d texture: roughness + SHADER_LOC_MAP_OCCLUSION, // Shader location: sampler2d texture: occlusion + SHADER_LOC_MAP_EMISSION, // Shader location: sampler2d texture: emission + SHADER_LOC_MAP_HEIGHT, // Shader location: sampler2d texture: height + SHADER_LOC_MAP_CUBEMAP, // Shader location: samplerCube texture: cubemap + SHADER_LOC_MAP_IRRADIANCE, // Shader location: samplerCube texture: irradiance + SHADER_LOC_MAP_PREFILTER, // Shader location: samplerCube texture: prefilter + SHADER_LOC_MAP_BRDF, // Shader location: sampler2d texture: brdf + SHADER_LOC_VERTEX_BONEIDS, // Shader location: vertex attribute: boneIds + SHADER_LOC_VERTEX_BONEWEIGHTS, // Shader location: vertex attribute: boneWeights + SHADER_LOC_BONE_MATRICES // Shader location: array of matrices uniform: boneMatrices +} ShaderLocationIndex; + +#define SHADER_LOC_MAP_DIFFUSE SHADER_LOC_MAP_ALBEDO +#define SHADER_LOC_MAP_SPECULAR SHADER_LOC_MAP_METALNESS + +// Shader uniform data type +typedef enum { + SHADER_UNIFORM_FLOAT = 0, // Shader uniform type: float + SHADER_UNIFORM_VEC2, // Shader uniform type: vec2 (2 float) + SHADER_UNIFORM_VEC3, // Shader uniform type: vec3 (3 float) + SHADER_UNIFORM_VEC4, // Shader uniform type: vec4 (4 float) + SHADER_UNIFORM_INT, // Shader uniform type: int + SHADER_UNIFORM_IVEC2, // Shader uniform type: ivec2 (2 int) + SHADER_UNIFORM_IVEC3, // Shader uniform type: ivec3 (3 int) + SHADER_UNIFORM_IVEC4, // Shader uniform type: ivec4 (4 int) + SHADER_UNIFORM_SAMPLER2D // Shader uniform type: sampler2d +} ShaderUniformDataType; + +// Shader attribute data types +typedef enum { + SHADER_ATTRIB_FLOAT = 0, // Shader attribute type: float + SHADER_ATTRIB_VEC2, // Shader attribute type: vec2 (2 float) + SHADER_ATTRIB_VEC3, // Shader attribute type: vec3 (3 float) + SHADER_ATTRIB_VEC4 // Shader attribute type: vec4 (4 float) +} ShaderAttributeDataType; + +// Pixel formats +// NOTE: Support depends on OpenGL version and platform +typedef enum { + PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1, // 8 bit per pixel (no alpha) + PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA, // 8*2 bpp (2 channels) + PIXELFORMAT_UNCOMPRESSED_R5G6B5, // 16 bpp + PIXELFORMAT_UNCOMPRESSED_R8G8B8, // 24 bpp + PIXELFORMAT_UNCOMPRESSED_R5G5B5A1, // 16 bpp (1 bit alpha) + PIXELFORMAT_UNCOMPRESSED_R4G4B4A4, // 16 bpp (4 bit alpha) + PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, // 32 bpp + PIXELFORMAT_UNCOMPRESSED_R32, // 32 bpp (1 channel - float) + PIXELFORMAT_UNCOMPRESSED_R32G32B32, // 32*3 bpp (3 channels - float) + PIXELFORMAT_UNCOMPRESSED_R32G32B32A32, // 32*4 bpp (4 channels - float) + PIXELFORMAT_UNCOMPRESSED_R16, // 16 bpp (1 channel - half float) + PIXELFORMAT_UNCOMPRESSED_R16G16B16, // 16*3 bpp (3 channels - half float) + PIXELFORMAT_UNCOMPRESSED_R16G16B16A16, // 16*4 bpp (4 channels - half float) + PIXELFORMAT_COMPRESSED_DXT1_RGB, // 4 bpp (no alpha) + PIXELFORMAT_COMPRESSED_DXT1_RGBA, // 4 bpp (1 bit alpha) + PIXELFORMAT_COMPRESSED_DXT3_RGBA, // 8 bpp + PIXELFORMAT_COMPRESSED_DXT5_RGBA, // 8 bpp + PIXELFORMAT_COMPRESSED_ETC1_RGB, // 4 bpp + PIXELFORMAT_COMPRESSED_ETC2_RGB, // 4 bpp + PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA, // 8 bpp + PIXELFORMAT_COMPRESSED_PVRT_RGB, // 4 bpp + PIXELFORMAT_COMPRESSED_PVRT_RGBA, // 4 bpp + PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA, // 8 bpp + PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA // 2 bpp +} PixelFormat; + +// Texture parameters: filter mode +// NOTE 1: Filtering considers mipmaps if available in the texture +// NOTE 2: Filter is accordingly set for minification and magnification +typedef enum { + TEXTURE_FILTER_POINT = 0, // No filter, just pixel approximation + TEXTURE_FILTER_BILINEAR, // Linear filtering + TEXTURE_FILTER_TRILINEAR, // Trilinear filtering (linear with mipmaps) + TEXTURE_FILTER_ANISOTROPIC_4X, // Anisotropic filtering 4x + TEXTURE_FILTER_ANISOTROPIC_8X, // Anisotropic filtering 8x + TEXTURE_FILTER_ANISOTROPIC_16X, // Anisotropic filtering 16x +} TextureFilter; + +// Texture parameters: wrap mode +typedef enum { + TEXTURE_WRAP_REPEAT = 0, // Repeats texture in tiled mode + TEXTURE_WRAP_CLAMP, // Clamps texture to edge pixel in tiled mode + TEXTURE_WRAP_MIRROR_REPEAT, // Mirrors and repeats the texture in tiled mode + TEXTURE_WRAP_MIRROR_CLAMP // Mirrors and clamps to border the texture in tiled mode +} TextureWrap; + +// Cubemap layouts +typedef enum { + CUBEMAP_LAYOUT_AUTO_DETECT = 0, // Automatically detect layout type + CUBEMAP_LAYOUT_LINE_VERTICAL, // Layout is defined by a vertical line with faces + CUBEMAP_LAYOUT_LINE_HORIZONTAL, // Layout is defined by a horizontal line with faces + CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR, // Layout is defined by a 3x4 cross with cubemap faces + CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE, // Layout is defined by a 4x3 cross with cubemap faces + CUBEMAP_LAYOUT_PANORAMA // Layout is defined by a panorama image (equirrectangular map) +} CubemapLayout; + +// Font type, defines generation method +typedef enum { + FONT_DEFAULT = 0, // Default font generation, anti-aliased + FONT_BITMAP, // Bitmap font generation, no anti-aliasing + FONT_SDF // SDF font generation, requires external shader +} FontType; + +// Color blending modes (pre-defined) +typedef enum { + BLEND_ALPHA = 0, // Blend textures considering alpha (default) + BLEND_ADDITIVE, // Blend textures adding colors + BLEND_MULTIPLIED, // Blend textures multiplying colors + BLEND_ADD_COLORS, // Blend textures adding colors (alternative) + BLEND_SUBTRACT_COLORS, // Blend textures subtracting colors (alternative) + BLEND_ALPHA_PREMULTIPLY, // Blend premultiplied textures considering alpha + BLEND_CUSTOM, // Blend textures using custom src/dst factors (use rlSetBlendFactors()) + BLEND_CUSTOM_SEPARATE // Blend textures using custom rgb/alpha separate src/dst factors (use rlSetBlendFactorsSeparate()) +} BlendMode; + +// Gesture +// NOTE: Provided as bit-wise flags to enable only desired gestures +typedef enum { + GESTURE_NONE = 0, // No gesture + GESTURE_TAP = 1, // Tap gesture + GESTURE_DOUBLETAP = 2, // Double tap gesture + GESTURE_HOLD = 4, // Hold gesture + GESTURE_DRAG = 8, // Drag gesture + GESTURE_SWIPE_RIGHT = 16, // Swipe right gesture + GESTURE_SWIPE_LEFT = 32, // Swipe left gesture + GESTURE_SWIPE_UP = 64, // Swipe up gesture + GESTURE_SWIPE_DOWN = 128, // Swipe down gesture + GESTURE_PINCH_IN = 256, // Pinch in gesture + GESTURE_PINCH_OUT = 512 // Pinch out gesture +} Gesture; + +// Camera system modes +typedef enum { + CAMERA_CUSTOM = 0, // Camera custom, controlled by user (UpdateCamera() does nothing) + CAMERA_FREE, // Camera free mode + CAMERA_ORBITAL, // Camera orbital, around target, zoom supported + CAMERA_FIRST_PERSON, // Camera first person + CAMERA_THIRD_PERSON // Camera third person +} CameraMode; + +// Camera projection +typedef enum { + CAMERA_PERSPECTIVE = 0, // Perspective projection + CAMERA_ORTHOGRAPHIC // Orthographic projection +} CameraProjection; + +// N-patch layout +typedef enum { + NPATCH_NINE_PATCH = 0, // Npatch layout: 3x3 tiles + NPATCH_THREE_PATCH_VERTICAL, // Npatch layout: 1x3 tiles + NPATCH_THREE_PATCH_HORIZONTAL // Npatch layout: 3x1 tiles +} NPatchLayout; + +// Callbacks to hook some internal functions +// WARNING: These callbacks are intended for advanced users +typedef void (*TraceLogCallback)(int logLevel, const char *text, va_list args); // Logging: Redirect trace log messages +typedef unsigned char *(*LoadFileDataCallback)(const char *fileName, int *dataSize); // FileIO: Load binary data +typedef bool (*SaveFileDataCallback)(const char *fileName, void *data, int dataSize); // FileIO: Save binary data +typedef char *(*LoadFileTextCallback)(const char *fileName); // FileIO: Load text data +typedef bool (*SaveFileTextCallback)(const char *fileName, char *text); // FileIO: Save text data + +//------------------------------------------------------------------------------------ +// Global Variables Definition +//------------------------------------------------------------------------------------ +// It's lonely here... + +//------------------------------------------------------------------------------------ +// Window and Graphics Device Functions (Module: core) +//------------------------------------------------------------------------------------ + +#if defined(__cplusplus) +extern "C" { // Prevents name mangling of functions +#endif + +// Window-related functions +RLAPI void InitWindow(int width, int height, const char *title); // Initialize window and OpenGL context +RLAPI void CloseWindow(void); // Close window and unload OpenGL context +RLAPI bool WindowShouldClose(void); // Check if application should close (KEY_ESCAPE pressed or windows close icon clicked) +RLAPI bool IsWindowReady(void); // Check if window has been initialized successfully +RLAPI bool IsWindowFullscreen(void); // Check if window is currently fullscreen +RLAPI bool IsWindowHidden(void); // Check if window is currently hidden (only PLATFORM_DESKTOP) +RLAPI bool IsWindowMinimized(void); // Check if window is currently minimized (only PLATFORM_DESKTOP) +RLAPI bool IsWindowMaximized(void); // Check if window is currently maximized (only PLATFORM_DESKTOP) +RLAPI bool IsWindowFocused(void); // Check if window is currently focused (only PLATFORM_DESKTOP) +RLAPI bool IsWindowResized(void); // Check if window has been resized last frame +RLAPI bool IsWindowState(unsigned int flag); // Check if one specific window flag is enabled +RLAPI void SetWindowState(unsigned int flags); // Set window configuration state using flags (only PLATFORM_DESKTOP) +RLAPI void ClearWindowState(unsigned int flags); // Clear window configuration state flags +RLAPI void ToggleFullscreen(void); // Toggle window state: fullscreen/windowed [resizes monitor to match window resolution] (only PLATFORM_DESKTOP) +RLAPI void ToggleBorderlessWindowed(void); // Toggle window state: borderless windowed [resizes window to match monitor resolution] (only PLATFORM_DESKTOP) +RLAPI void MaximizeWindow(void); // Set window state: maximized, if resizable (only PLATFORM_DESKTOP) +RLAPI void MinimizeWindow(void); // Set window state: minimized, if resizable (only PLATFORM_DESKTOP) +RLAPI void RestoreWindow(void); // Set window state: not minimized/maximized (only PLATFORM_DESKTOP) +RLAPI void SetWindowIcon(Image image); // Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP) +RLAPI void SetWindowIcons(Image *images, int count); // Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP) +RLAPI void SetWindowTitle(const char *title); // Set title for window (only PLATFORM_DESKTOP and PLATFORM_WEB) +RLAPI void SetWindowPosition(int x, int y); // Set window position on screen (only PLATFORM_DESKTOP) +RLAPI void SetWindowMonitor(int monitor); // Set monitor for the current window +RLAPI void SetWindowMinSize(int width, int height); // Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE) +RLAPI void SetWindowMaxSize(int width, int height); // Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE) +RLAPI void SetWindowSize(int width, int height); // Set window dimensions +RLAPI void SetWindowOpacity(float opacity); // Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP) +RLAPI void SetWindowFocused(void); // Set window focused (only PLATFORM_DESKTOP) +RLAPI void *GetWindowHandle(void); // Get native window handle +RLAPI int GetScreenWidth(void); // Get current screen width +RLAPI int GetScreenHeight(void); // Get current screen height +RLAPI int GetRenderWidth(void); // Get current render width (it considers HiDPI) +RLAPI int GetRenderHeight(void); // Get current render height (it considers HiDPI) +RLAPI int GetMonitorCount(void); // Get number of connected monitors +RLAPI int GetCurrentMonitor(void); // Get current connected monitor +RLAPI Vector2 GetMonitorPosition(int monitor); // Get specified monitor position +RLAPI int GetMonitorWidth(int monitor); // Get specified monitor width (current video mode used by monitor) +RLAPI int GetMonitorHeight(int monitor); // Get specified monitor height (current video mode used by monitor) +RLAPI int GetMonitorPhysicalWidth(int monitor); // Get specified monitor physical width in millimetres +RLAPI int GetMonitorPhysicalHeight(int monitor); // Get specified monitor physical height in millimetres +RLAPI int GetMonitorRefreshRate(int monitor); // Get specified monitor refresh rate +RLAPI Vector2 GetWindowPosition(void); // Get window position XY on monitor +RLAPI Vector2 GetWindowScaleDPI(void); // Get window scale DPI factor +RLAPI const char *GetMonitorName(int monitor); // Get the human-readable, UTF-8 encoded name of the specified monitor +RLAPI void SetClipboardText(const char *text); // Set clipboard text content +RLAPI const char *GetClipboardText(void); // Get clipboard text content +RLAPI void EnableEventWaiting(void); // Enable waiting for events on EndDrawing(), no automatic event polling +RLAPI void DisableEventWaiting(void); // Disable waiting for events on EndDrawing(), automatic events polling + +// Cursor-related functions +RLAPI void ShowCursor(void); // Shows cursor +RLAPI void HideCursor(void); // Hides cursor +RLAPI bool IsCursorHidden(void); // Check if cursor is not visible +RLAPI void EnableCursor(void); // Enables cursor (unlock cursor) +RLAPI void DisableCursor(void); // Disables cursor (lock cursor) +RLAPI bool IsCursorOnScreen(void); // Check if cursor is on the screen + +// Drawing-related functions +RLAPI void ClearBackground(Color color); // Set background color (framebuffer clear color) +RLAPI void BeginDrawing(void); // Setup canvas (framebuffer) to start drawing +RLAPI void EndDrawing(void); // End canvas drawing and swap buffers (double buffering) +RLAPI void BeginMode2D(Camera2D camera); // Begin 2D mode with custom camera (2D) +RLAPI void EndMode2D(void); // Ends 2D mode with custom camera +RLAPI void BeginMode3D(Camera3D camera); // Begin 3D mode with custom camera (3D) +RLAPI void EndMode3D(void); // Ends 3D mode and returns to default 2D orthographic mode +RLAPI void BeginTextureMode(RenderTexture2D target); // Begin drawing to render texture +RLAPI void EndTextureMode(void); // Ends drawing to render texture +RLAPI void BeginShaderMode(Shader shader); // Begin custom shader drawing +RLAPI void EndShaderMode(void); // End custom shader drawing (use default shader) +RLAPI void BeginBlendMode(int mode); // Begin blending mode (alpha, additive, multiplied, subtract, custom) +RLAPI void EndBlendMode(void); // End blending mode (reset to default: alpha blending) +RLAPI void BeginScissorMode(int x, int y, int width, int height); // Begin scissor mode (define screen area for following drawing) +RLAPI void EndScissorMode(void); // End scissor mode +RLAPI void BeginVrStereoMode(VrStereoConfig config); // Begin stereo rendering (requires VR simulator) +RLAPI void EndVrStereoMode(void); // End stereo rendering (requires VR simulator) + +// VR stereo config functions for VR simulator +RLAPI VrStereoConfig LoadVrStereoConfig(VrDeviceInfo device); // Load VR stereo config for VR simulator device parameters +RLAPI void UnloadVrStereoConfig(VrStereoConfig config); // Unload VR stereo config + +// Shader management functions +// NOTE: Shader functionality is not available on OpenGL 1.1 +RLAPI Shader LoadShader(const char *vsFileName, const char *fsFileName); // Load shader from files and bind default locations +RLAPI Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode); // Load shader from code strings and bind default locations +RLAPI bool IsShaderReady(Shader shader); // Check if a shader is ready +RLAPI int GetShaderLocation(Shader shader, const char *uniformName); // Get shader uniform location +RLAPI int GetShaderLocationAttrib(Shader shader, const char *attribName); // Get shader attribute location +RLAPI void SetShaderValue(Shader shader, int locIndex, const void *value, int uniformType); // Set shader uniform value +RLAPI void SetShaderValueV(Shader shader, int locIndex, const void *value, int uniformType, int count); // Set shader uniform value vector +RLAPI void SetShaderValueMatrix(Shader shader, int locIndex, Matrix mat); // Set shader uniform value (matrix 4x4) +RLAPI void SetShaderValueTexture(Shader shader, int locIndex, Texture2D texture); // Set shader uniform value for texture (sampler2d) +RLAPI void UnloadShader(Shader shader); // Unload shader from GPU memory (VRAM) + +// Screen-space-related functions +#define GetMouseRay GetScreenToWorldRay // Compatibility hack for previous raylib versions +RLAPI Ray GetScreenToWorldRay(Vector2 position, Camera camera); // Get a ray trace from screen position (i.e mouse) +RLAPI Ray GetScreenToWorldRayEx(Vector2 position, Camera camera, int width, int height); // Get a ray trace from screen position (i.e mouse) in a viewport +RLAPI Vector2 GetWorldToScreen(Vector3 position, Camera camera); // Get the screen space position for a 3d world space position +RLAPI Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int height); // Get size position for a 3d world space position +RLAPI Vector2 GetWorldToScreen2D(Vector2 position, Camera2D camera); // Get the screen space position for a 2d camera world space position +RLAPI Vector2 GetScreenToWorld2D(Vector2 position, Camera2D camera); // Get the world space position for a 2d camera screen space position +RLAPI Matrix GetCameraMatrix(Camera camera); // Get camera transform matrix (view matrix) +RLAPI Matrix GetCameraMatrix2D(Camera2D camera); // Get camera 2d transform matrix + +// Timing-related functions +RLAPI void SetTargetFPS(int fps); // Set target FPS (maximum) +RLAPI float GetFrameTime(void); // Get time in seconds for last frame drawn (delta time) +RLAPI double GetTime(void); // Get elapsed time in seconds since InitWindow() +RLAPI int GetFPS(void); // Get current FPS + +// Custom frame control functions +// NOTE: Those functions are intended for advanced users that want full control over the frame processing +// By default EndDrawing() does this job: draws everything + SwapScreenBuffer() + manage frame timing + PollInputEvents() +// To avoid that behaviour and control frame processes manually, enable in config.h: SUPPORT_CUSTOM_FRAME_CONTROL +RLAPI void SwapScreenBuffer(void); // Swap back buffer with front buffer (screen drawing) +RLAPI void PollInputEvents(void); // Register all input events +RLAPI void WaitTime(double seconds); // Wait for some time (halt program execution) + +// Random values generation functions +RLAPI void SetRandomSeed(unsigned int seed); // Set the seed for the random number generator +RLAPI int GetRandomValue(int min, int max); // Get a random value between min and max (both included) +RLAPI int *LoadRandomSequence(unsigned int count, int min, int max); // Load random values sequence, no values repeated +RLAPI void UnloadRandomSequence(int *sequence); // Unload random values sequence + +// Misc. functions +RLAPI void TakeScreenshot(const char *fileName); // Takes a screenshot of current screen (filename extension defines format) +RLAPI void SetConfigFlags(unsigned int flags); // Setup init configuration flags (view FLAGS) +RLAPI void OpenURL(const char *url); // Open URL with default system browser (if available) + +// NOTE: Following functions implemented in module [utils] +//------------------------------------------------------------------ +RLAPI void TraceLog(int logLevel, const char *text, ...); // Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...) +RLAPI void SetTraceLogLevel(int logLevel); // Set the current threshold (minimum) log level +RLAPI void *MemAlloc(unsigned int size); // Internal memory allocator +RLAPI void *MemRealloc(void *ptr, unsigned int size); // Internal memory reallocator +RLAPI void MemFree(void *ptr); // Internal memory free + +// Set custom callbacks +// WARNING: Callbacks setup is intended for advanced users +RLAPI void SetTraceLogCallback(TraceLogCallback callback); // Set custom trace log +RLAPI void SetLoadFileDataCallback(LoadFileDataCallback callback); // Set custom file binary data loader +RLAPI void SetSaveFileDataCallback(SaveFileDataCallback callback); // Set custom file binary data saver +RLAPI void SetLoadFileTextCallback(LoadFileTextCallback callback); // Set custom file text data loader +RLAPI void SetSaveFileTextCallback(SaveFileTextCallback callback); // Set custom file text data saver + +// Files management functions +RLAPI unsigned char *LoadFileData(const char *fileName, int *dataSize); // Load file data as byte array (read) +RLAPI void UnloadFileData(unsigned char *data); // Unload file data allocated by LoadFileData() +RLAPI bool SaveFileData(const char *fileName, void *data, int dataSize); // Save data to file from byte array (write), returns true on success +RLAPI bool ExportDataAsCode(const unsigned char *data, int dataSize, const char *fileName); // Export data to code (.h), returns true on success +RLAPI char *LoadFileText(const char *fileName); // Load text data from file (read), returns a '\0' terminated string +RLAPI void UnloadFileText(char *text); // Unload file text data allocated by LoadFileText() +RLAPI bool SaveFileText(const char *fileName, char *text); // Save text data to file (write), string must be '\0' terminated, returns true on success +//------------------------------------------------------------------ + +// File system functions +RLAPI bool FileExists(const char *fileName); // Check if file exists +RLAPI bool DirectoryExists(const char *dirPath); // Check if a directory path exists +RLAPI bool IsFileExtension(const char *fileName, const char *ext); // Check file extension (including point: .png, .wav) +RLAPI int GetFileLength(const char *fileName); // Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h) +RLAPI const char *GetFileExtension(const char *fileName); // Get pointer to extension for a filename string (includes dot: '.png') +RLAPI const char *GetFileName(const char *filePath); // Get pointer to filename for a path string +RLAPI const char *GetFileNameWithoutExt(const char *filePath); // Get filename string without extension (uses static string) +RLAPI const char *GetDirectoryPath(const char *filePath); // Get full path for a given fileName with path (uses static string) +RLAPI const char *GetPrevDirectoryPath(const char *dirPath); // Get previous directory path for a given path (uses static string) +RLAPI const char *GetWorkingDirectory(void); // Get current working directory (uses static string) +RLAPI const char *GetApplicationDirectory(void); // Get the directory of the running application (uses static string) +RLAPI int MakeDirectory(const char *dirPath); // Create directories (including full path requested), returns 0 on success +RLAPI bool ChangeDirectory(const char *dir); // Change working directory, return true on success +RLAPI bool IsPathFile(const char *path); // Check if a given path is a file or a directory +RLAPI bool IsFileNameValid(const char *fileName); // Check if fileName is valid for the platform/OS +RLAPI FilePathList LoadDirectoryFiles(const char *dirPath); // Load directory filepaths +RLAPI FilePathList LoadDirectoryFilesEx(const char *basePath, const char *filter, bool scanSubdirs); // Load directory filepaths with extension filtering and recursive directory scan. Use 'DIR' in the filter string to include directories in the result +RLAPI void UnloadDirectoryFiles(FilePathList files); // Unload filepaths +RLAPI bool IsFileDropped(void); // Check if a file has been dropped into window +RLAPI FilePathList LoadDroppedFiles(void); // Load dropped filepaths +RLAPI void UnloadDroppedFiles(FilePathList files); // Unload dropped filepaths +RLAPI long GetFileModTime(const char *fileName); // Get file modification time (last write time) + +// Compression/Encoding functionality +RLAPI unsigned char *CompressData(const unsigned char *data, int dataSize, int *compDataSize); // Compress data (DEFLATE algorithm), memory must be MemFree() +RLAPI unsigned char *DecompressData(const unsigned char *compData, int compDataSize, int *dataSize); // Decompress data (DEFLATE algorithm), memory must be MemFree() +RLAPI char *EncodeDataBase64(const unsigned char *data, int dataSize, int *outputSize); // Encode data to Base64 string, memory must be MemFree() +RLAPI unsigned char *DecodeDataBase64(const unsigned char *data, int *outputSize); // Decode Base64 string data, memory must be MemFree() + +// Automation events functionality +RLAPI AutomationEventList LoadAutomationEventList(const char *fileName); // Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS +RLAPI void UnloadAutomationEventList(AutomationEventList list); // Unload automation events list from file +RLAPI bool ExportAutomationEventList(AutomationEventList list, const char *fileName); // Export automation events list as text file +RLAPI void SetAutomationEventList(AutomationEventList *list); // Set automation event list to record to +RLAPI void SetAutomationEventBaseFrame(int frame); // Set automation event internal base frame to start recording +RLAPI void StartAutomationEventRecording(void); // Start recording automation events (AutomationEventList must be set) +RLAPI void StopAutomationEventRecording(void); // Stop recording automation events +RLAPI void PlayAutomationEvent(AutomationEvent event); // Play a recorded automation event + +//------------------------------------------------------------------------------------ +// Input Handling Functions (Module: core) +//------------------------------------------------------------------------------------ + +// Input-related functions: keyboard +RLAPI bool IsKeyPressed(int key); // Check if a key has been pressed once +RLAPI bool IsKeyPressedRepeat(int key); // Check if a key has been pressed again (Only PLATFORM_DESKTOP) +RLAPI bool IsKeyDown(int key); // Check if a key is being pressed +RLAPI bool IsKeyReleased(int key); // Check if a key has been released once +RLAPI bool IsKeyUp(int key); // Check if a key is NOT being pressed +RLAPI int GetKeyPressed(void); // Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty +RLAPI int GetCharPressed(void); // Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty +RLAPI void SetExitKey(int key); // Set a custom key to exit program (default is ESC) + +// Input-related functions: gamepads +RLAPI bool IsGamepadAvailable(int gamepad); // Check if a gamepad is available +RLAPI const char *GetGamepadName(int gamepad); // Get gamepad internal name id +RLAPI bool IsGamepadButtonPressed(int gamepad, int button); // Check if a gamepad button has been pressed once +RLAPI bool IsGamepadButtonDown(int gamepad, int button); // Check if a gamepad button is being pressed +RLAPI bool IsGamepadButtonReleased(int gamepad, int button); // Check if a gamepad button has been released once +RLAPI bool IsGamepadButtonUp(int gamepad, int button); // Check if a gamepad button is NOT being pressed +RLAPI int GetGamepadButtonPressed(void); // Get the last gamepad button pressed +RLAPI int GetGamepadAxisCount(int gamepad); // Get gamepad axis count for a gamepad +RLAPI float GetGamepadAxisMovement(int gamepad, int axis); // Get axis movement value for a gamepad axis +RLAPI int SetGamepadMappings(const char *mappings); // Set internal gamepad mappings (SDL_GameControllerDB) +RLAPI void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor); // Set gamepad vibration for both motors + +// Input-related functions: mouse +RLAPI bool IsMouseButtonPressed(int button); // Check if a mouse button has been pressed once +RLAPI bool IsMouseButtonDown(int button); // Check if a mouse button is being pressed +RLAPI bool IsMouseButtonReleased(int button); // Check if a mouse button has been released once +RLAPI bool IsMouseButtonUp(int button); // Check if a mouse button is NOT being pressed +RLAPI int GetMouseX(void); // Get mouse position X +RLAPI int GetMouseY(void); // Get mouse position Y +RLAPI Vector2 GetMousePosition(void); // Get mouse position XY +RLAPI Vector2 GetMouseDelta(void); // Get mouse delta between frames +RLAPI void SetMousePosition(int x, int y); // Set mouse position XY +RLAPI void SetMouseOffset(int offsetX, int offsetY); // Set mouse offset +RLAPI void SetMouseScale(float scaleX, float scaleY); // Set mouse scaling +RLAPI float GetMouseWheelMove(void); // Get mouse wheel movement for X or Y, whichever is larger +RLAPI Vector2 GetMouseWheelMoveV(void); // Get mouse wheel movement for both X and Y +RLAPI void SetMouseCursor(int cursor); // Set mouse cursor + +// Input-related functions: touch +RLAPI int GetTouchX(void); // Get touch position X for touch point 0 (relative to screen size) +RLAPI int GetTouchY(void); // Get touch position Y for touch point 0 (relative to screen size) +RLAPI Vector2 GetTouchPosition(int index); // Get touch position XY for a touch point index (relative to screen size) +RLAPI int GetTouchPointId(int index); // Get touch point identifier for given index +RLAPI int GetTouchPointCount(void); // Get number of touch points + +//------------------------------------------------------------------------------------ +// Gestures and Touch Handling Functions (Module: rgestures) +//------------------------------------------------------------------------------------ +RLAPI void SetGesturesEnabled(unsigned int flags); // Enable a set of gestures using flags +RLAPI bool IsGestureDetected(unsigned int gesture); // Check if a gesture have been detected +RLAPI int GetGestureDetected(void); // Get latest detected gesture +RLAPI float GetGestureHoldDuration(void); // Get gesture hold time in milliseconds +RLAPI Vector2 GetGestureDragVector(void); // Get gesture drag vector +RLAPI float GetGestureDragAngle(void); // Get gesture drag angle +RLAPI Vector2 GetGesturePinchVector(void); // Get gesture pinch delta +RLAPI float GetGesturePinchAngle(void); // Get gesture pinch angle + +//------------------------------------------------------------------------------------ +// Camera System Functions (Module: rcamera) +//------------------------------------------------------------------------------------ +RLAPI void UpdateCamera(Camera *camera, int mode); // Update camera position for selected mode +RLAPI void UpdateCameraPro(Camera *camera, Vector3 movement, Vector3 rotation, float zoom); // Update camera movement/rotation + +//------------------------------------------------------------------------------------ +// Basic Shapes Drawing Functions (Module: shapes) +//------------------------------------------------------------------------------------ +// Set texture and rectangle to be used on shapes drawing +// NOTE: It can be useful when using basic shapes and one single font, +// defining a font char white rectangle would allow drawing everything in a single draw call +RLAPI void SetShapesTexture(Texture2D texture, Rectangle source); // Set texture and rectangle to be used on shapes drawing +RLAPI Texture2D GetShapesTexture(void); // Get texture that is used for shapes drawing +RLAPI Rectangle GetShapesTextureRectangle(void); // Get texture source rectangle that is used for shapes drawing + +// Basic shapes drawing functions +RLAPI void DrawPixel(int posX, int posY, Color color); // Draw a pixel using geometry [Can be slow, use with care] +RLAPI void DrawPixelV(Vector2 position, Color color); // Draw a pixel using geometry (Vector version) [Can be slow, use with care] +RLAPI void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color); // Draw a line +RLAPI void DrawLineV(Vector2 startPos, Vector2 endPos, Color color); // Draw a line (using gl lines) +RLAPI void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw a line (using triangles/quads) +RLAPI void DrawLineStrip(const Vector2 *points, int pointCount, Color color); // Draw lines sequence (using gl lines) +RLAPI void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw line segment cubic-bezier in-out interpolation +RLAPI void DrawCircle(int centerX, int centerY, float radius, Color color); // Draw a color-filled circle +RLAPI void DrawCircleSector(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); // Draw a piece of a circle +RLAPI void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); // Draw circle sector outline +RLAPI void DrawCircleGradient(int centerX, int centerY, float radius, Color inner, Color outer); // Draw a gradient-filled circle +RLAPI void DrawCircleV(Vector2 center, float radius, Color color); // Draw a color-filled circle (Vector version) +RLAPI void DrawCircleLines(int centerX, int centerY, float radius, Color color); // Draw circle outline +RLAPI void DrawCircleLinesV(Vector2 center, float radius, Color color); // Draw circle outline (Vector version) +RLAPI void DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse +RLAPI void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse outline +RLAPI void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); // Draw ring +RLAPI void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); // Draw ring outline +RLAPI void DrawRectangle(int posX, int posY, int width, int height, Color color); // Draw a color-filled rectangle +RLAPI void DrawRectangleV(Vector2 position, Vector2 size, Color color); // Draw a color-filled rectangle (Vector version) +RLAPI void DrawRectangleRec(Rectangle rec, Color color); // Draw a color-filled rectangle +RLAPI void DrawRectanglePro(Rectangle rec, Vector2 origin, float rotation, Color color); // Draw a color-filled rectangle with pro parameters +RLAPI void DrawRectangleGradientV(int posX, int posY, int width, int height, Color top, Color bottom); // Draw a vertical-gradient-filled rectangle +RLAPI void DrawRectangleGradientH(int posX, int posY, int width, int height, Color left, Color right); // Draw a horizontal-gradient-filled rectangle +RLAPI void DrawRectangleGradientEx(Rectangle rec, Color topLeft, Color bottomLeft, Color topRight, Color bottomRight); // Draw a gradient-filled rectangle with custom vertex colors +RLAPI void DrawRectangleLines(int posX, int posY, int width, int height, Color color); // Draw rectangle outline +RLAPI void DrawRectangleLinesEx(Rectangle rec, float lineThick, Color color); // Draw rectangle outline with extended parameters +RLAPI void DrawRectangleRounded(Rectangle rec, float roundness, int segments, Color color); // Draw rectangle with rounded edges +RLAPI void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, Color color); // Draw rectangle lines with rounded edges +RLAPI void DrawRectangleRoundedLinesEx(Rectangle rec, float roundness, int segments, float lineThick, Color color); // Draw rectangle with rounded edges outline +RLAPI void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw a color-filled triangle (vertex in counter-clockwise order!) +RLAPI void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw triangle outline (vertex in counter-clockwise order!) +RLAPI void DrawTriangleFan(const Vector2 *points, int pointCount, Color color); // Draw a triangle fan defined by points (first vertex is the center) +RLAPI void DrawTriangleStrip(const Vector2 *points, int pointCount, Color color); // Draw a triangle strip defined by points +RLAPI void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color color); // Draw a regular polygon (Vector version) +RLAPI void DrawPolyLines(Vector2 center, int sides, float radius, float rotation, Color color); // Draw a polygon outline of n sides +RLAPI void DrawPolyLinesEx(Vector2 center, int sides, float radius, float rotation, float lineThick, Color color); // Draw a polygon outline of n sides with extended parameters + +// Splines drawing functions +RLAPI void DrawSplineLinear(const Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Linear, minimum 2 points +RLAPI void DrawSplineBasis(const Vector2 *points, int pointCount, float thick, Color color); // Draw spline: B-Spline, minimum 4 points +RLAPI void DrawSplineCatmullRom(const Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Catmull-Rom, minimum 4 points +RLAPI void DrawSplineBezierQuadratic(const Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...] +RLAPI void DrawSplineBezierCubic(const Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...] +RLAPI void DrawSplineSegmentLinear(Vector2 p1, Vector2 p2, float thick, Color color); // Draw spline segment: Linear, 2 points +RLAPI void DrawSplineSegmentBasis(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color); // Draw spline segment: B-Spline, 4 points +RLAPI void DrawSplineSegmentCatmullRom(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color); // Draw spline segment: Catmull-Rom, 4 points +RLAPI void DrawSplineSegmentBezierQuadratic(Vector2 p1, Vector2 c2, Vector2 p3, float thick, Color color); // Draw spline segment: Quadratic Bezier, 2 points, 1 control point +RLAPI void DrawSplineSegmentBezierCubic(Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float thick, Color color); // Draw spline segment: Cubic Bezier, 2 points, 2 control points + +// Spline segment point evaluation functions, for a given t [0.0f .. 1.0f] +RLAPI Vector2 GetSplinePointLinear(Vector2 startPos, Vector2 endPos, float t); // Get (evaluate) spline point: Linear +RLAPI Vector2 GetSplinePointBasis(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t); // Get (evaluate) spline point: B-Spline +RLAPI Vector2 GetSplinePointCatmullRom(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t); // Get (evaluate) spline point: Catmull-Rom +RLAPI Vector2 GetSplinePointBezierQuad(Vector2 p1, Vector2 c2, Vector2 p3, float t); // Get (evaluate) spline point: Quadratic Bezier +RLAPI Vector2 GetSplinePointBezierCubic(Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float t); // Get (evaluate) spline point: Cubic Bezier + +// Basic shapes collision detection functions +RLAPI bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2); // Check collision between two rectangles +RLAPI bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2); // Check collision between two circles +RLAPI bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec); // Check collision between circle and rectangle +RLAPI bool CheckCollisionPointRec(Vector2 point, Rectangle rec); // Check if point is inside rectangle +RLAPI bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius); // Check if point is inside circle +RLAPI bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3); // Check if point is inside a triangle +RLAPI bool CheckCollisionPointPoly(Vector2 point, const Vector2 *points, int pointCount); // Check if point is within a polygon described by array of vertices +RLAPI bool CheckCollisionLines(Vector2 startPos1, Vector2 endPos1, Vector2 startPos2, Vector2 endPos2, Vector2 *collisionPoint); // Check the collision between two lines defined by two points each, returns collision point by reference +RLAPI bool CheckCollisionPointLine(Vector2 point, Vector2 p1, Vector2 p2, int threshold); // Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold] +RLAPI bool CheckCollisionCircleLine(Vector2 center, float radius, Vector2 p1, Vector2 p2); // Check if circle collides with a line created betweeen two points [p1] and [p2] +RLAPI Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2); // Get collision rectangle for two rectangles collision + +//------------------------------------------------------------------------------------ +// Texture Loading and Drawing Functions (Module: textures) +//------------------------------------------------------------------------------------ + +// Image loading functions +// NOTE: These functions do not require GPU access +RLAPI Image LoadImage(const char *fileName); // Load image from file into CPU memory (RAM) +RLAPI Image LoadImageRaw(const char *fileName, int width, int height, int format, int headerSize); // Load image from RAW file data +RLAPI Image LoadImageAnim(const char *fileName, int *frames); // Load image sequence from file (frames appended to image.data) +RLAPI Image LoadImageAnimFromMemory(const char *fileType, const unsigned char *fileData, int dataSize, int *frames); // Load image sequence from memory buffer +RLAPI Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); // Load image from memory buffer, fileType refers to extension: i.e. '.png' +RLAPI Image LoadImageFromTexture(Texture2D texture); // Load image from GPU texture data +RLAPI Image LoadImageFromScreen(void); // Load image from screen buffer and (screenshot) +RLAPI bool IsImageReady(Image image); // Check if an image is ready +RLAPI void UnloadImage(Image image); // Unload image from CPU memory (RAM) +RLAPI bool ExportImage(Image image, const char *fileName); // Export image data to file, returns true on success +RLAPI unsigned char *ExportImageToMemory(Image image, const char *fileType, int *fileSize); // Export image to memory buffer +RLAPI bool ExportImageAsCode(Image image, const char *fileName); // Export image as code file defining an array of bytes, returns true on success + +// Image generation functions +RLAPI Image GenImageColor(int width, int height, Color color); // Generate image: plain color +RLAPI Image GenImageGradientLinear(int width, int height, int direction, Color start, Color end); // Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient +RLAPI Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer); // Generate image: radial gradient +RLAPI Image GenImageGradientSquare(int width, int height, float density, Color inner, Color outer); // Generate image: square gradient +RLAPI Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2); // Generate image: checked +RLAPI Image GenImageWhiteNoise(int width, int height, float factor); // Generate image: white noise +RLAPI Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale); // Generate image: perlin noise +RLAPI Image GenImageCellular(int width, int height, int tileSize); // Generate image: cellular algorithm, bigger tileSize means bigger cells +RLAPI Image GenImageText(int width, int height, const char *text); // Generate image: grayscale image from text data + +// Image manipulation functions +RLAPI Image ImageCopy(Image image); // Create an image duplicate (useful for transformations) +RLAPI Image ImageFromImage(Image image, Rectangle rec); // Create an image from another image piece +RLAPI Image ImageFromChannel(Image image, int selectedChannel); // Create an image from a selected channel of another image (GRAYSCALE) +RLAPI Image ImageText(const char *text, int fontSize, Color color); // Create an image from text (default font) +RLAPI Image ImageTextEx(Font font, const char *text, float fontSize, float spacing, Color tint); // Create an image from text (custom sprite font) +RLAPI void ImageFormat(Image *image, int newFormat); // Convert image data to desired format +RLAPI void ImageToPOT(Image *image, Color fill); // Convert image to POT (power-of-two) +RLAPI void ImageCrop(Image *image, Rectangle crop); // Crop an image to a defined rectangle +RLAPI void ImageAlphaCrop(Image *image, float threshold); // Crop image depending on alpha value +RLAPI void ImageAlphaClear(Image *image, Color color, float threshold); // Clear alpha channel to desired color +RLAPI void ImageAlphaMask(Image *image, Image alphaMask); // Apply alpha mask to image +RLAPI void ImageAlphaPremultiply(Image *image); // Premultiply alpha channel +RLAPI void ImageBlurGaussian(Image *image, int blurSize); // Apply Gaussian blur using a box blur approximation +RLAPI void ImageKernelConvolution(Image *image, const float *kernel, int kernelSize); // Apply custom square convolution kernel to image +RLAPI void ImageResize(Image *image, int newWidth, int newHeight); // Resize image (Bicubic scaling algorithm) +RLAPI void ImageResizeNN(Image *image, int newWidth,int newHeight); // Resize image (Nearest-Neighbor scaling algorithm) +RLAPI void ImageResizeCanvas(Image *image, int newWidth, int newHeight, int offsetX, int offsetY, Color fill); // Resize canvas and fill with color +RLAPI void ImageMipmaps(Image *image); // Compute all mipmap levels for a provided image +RLAPI void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp); // Dither image data to 16bpp or lower (Floyd-Steinberg dithering) +RLAPI void ImageFlipVertical(Image *image); // Flip image vertically +RLAPI void ImageFlipHorizontal(Image *image); // Flip image horizontally +RLAPI void ImageRotate(Image *image, int degrees); // Rotate image by input angle in degrees (-359 to 359) +RLAPI void ImageRotateCW(Image *image); // Rotate image clockwise 90deg +RLAPI void ImageRotateCCW(Image *image); // Rotate image counter-clockwise 90deg +RLAPI void ImageColorTint(Image *image, Color color); // Modify image color: tint +RLAPI void ImageColorInvert(Image *image); // Modify image color: invert +RLAPI void ImageColorGrayscale(Image *image); // Modify image color: grayscale +RLAPI void ImageColorContrast(Image *image, float contrast); // Modify image color: contrast (-100 to 100) +RLAPI void ImageColorBrightness(Image *image, int brightness); // Modify image color: brightness (-255 to 255) +RLAPI void ImageColorReplace(Image *image, Color color, Color replace); // Modify image color: replace color +RLAPI Color *LoadImageColors(Image image); // Load color data from image as a Color array (RGBA - 32bit) +RLAPI Color *LoadImagePalette(Image image, int maxPaletteSize, int *colorCount); // Load colors palette from image as a Color array (RGBA - 32bit) +RLAPI void UnloadImageColors(Color *colors); // Unload color data loaded with LoadImageColors() +RLAPI void UnloadImagePalette(Color *colors); // Unload colors palette loaded with LoadImagePalette() +RLAPI Rectangle GetImageAlphaBorder(Image image, float threshold); // Get image alpha border rectangle +RLAPI Color GetImageColor(Image image, int x, int y); // Get image pixel color at (x, y) position + +// Image drawing functions +// NOTE: Image software-rendering functions (CPU) +RLAPI void ImageClearBackground(Image *dst, Color color); // Clear image background with given color +RLAPI void ImageDrawPixel(Image *dst, int posX, int posY, Color color); // Draw pixel within an image +RLAPI void ImageDrawPixelV(Image *dst, Vector2 position, Color color); // Draw pixel within an image (Vector version) +RLAPI void ImageDrawLine(Image *dst, int startPosX, int startPosY, int endPosX, int endPosY, Color color); // Draw line within an image +RLAPI void ImageDrawLineV(Image *dst, Vector2 start, Vector2 end, Color color); // Draw line within an image (Vector version) +RLAPI void ImageDrawLineEx(Image *dst, Vector2 start, Vector2 end, int thick, Color color); // Draw a line defining thickness within an image +RLAPI void ImageDrawCircle(Image *dst, int centerX, int centerY, int radius, Color color); // Draw a filled circle within an image +RLAPI void ImageDrawCircleV(Image *dst, Vector2 center, int radius, Color color); // Draw a filled circle within an image (Vector version) +RLAPI void ImageDrawCircleLines(Image *dst, int centerX, int centerY, int radius, Color color); // Draw circle outline within an image +RLAPI void ImageDrawCircleLinesV(Image *dst, Vector2 center, int radius, Color color); // Draw circle outline within an image (Vector version) +RLAPI void ImageDrawRectangle(Image *dst, int posX, int posY, int width, int height, Color color); // Draw rectangle within an image +RLAPI void ImageDrawRectangleV(Image *dst, Vector2 position, Vector2 size, Color color); // Draw rectangle within an image (Vector version) +RLAPI void ImageDrawRectangleRec(Image *dst, Rectangle rec, Color color); // Draw rectangle within an image +RLAPI void ImageDrawRectangleLines(Image *dst, Rectangle rec, int thick, Color color); // Draw rectangle lines within an image +RLAPI void ImageDrawTriangle(Image *dst, Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw triangle within an image +RLAPI void ImageDrawTriangleEx(Image *dst, Vector2 v1, Vector2 v2, Vector2 v3, Color c1, Color c2, Color c3); // Draw triangle with interpolated colors within an image +RLAPI void ImageDrawTriangleLines(Image *dst, Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw triangle outline within an image +RLAPI void ImageDrawTriangleFan(Image *dst, Vector2 *points, int pointCount, Color color); // Draw a triangle fan defined by points within an image (first vertex is the center) +RLAPI void ImageDrawTriangleStrip(Image *dst, Vector2 *points, int pointCount, Color color); // Draw a triangle strip defined by points within an image +RLAPI void ImageDraw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint); // Draw a source image within a destination image (tint applied to source) +RLAPI void ImageDrawText(Image *dst, const char *text, int posX, int posY, int fontSize, Color color); // Draw text (using default font) within an image (destination) +RLAPI void ImageDrawTextEx(Image *dst, Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // Draw text (custom sprite font) within an image (destination) + +// Texture loading functions +// NOTE: These functions require GPU access +RLAPI Texture2D LoadTexture(const char *fileName); // Load texture from file into GPU memory (VRAM) +RLAPI Texture2D LoadTextureFromImage(Image image); // Load texture from image data +RLAPI TextureCubemap LoadTextureCubemap(Image image, int layout); // Load cubemap from image, multiple image cubemap layouts supported +RLAPI RenderTexture2D LoadRenderTexture(int width, int height); // Load texture for rendering (framebuffer) +RLAPI bool IsTextureReady(Texture2D texture); // Check if a texture is ready +RLAPI void UnloadTexture(Texture2D texture); // Unload texture from GPU memory (VRAM) +RLAPI bool IsRenderTextureReady(RenderTexture2D target); // Check if a render texture is ready +RLAPI void UnloadRenderTexture(RenderTexture2D target); // Unload render texture from GPU memory (VRAM) +RLAPI void UpdateTexture(Texture2D texture, const void *pixels); // Update GPU texture with new data +RLAPI void UpdateTextureRec(Texture2D texture, Rectangle rec, const void *pixels); // Update GPU texture rectangle with new data + +// Texture configuration functions +RLAPI void GenTextureMipmaps(Texture2D *texture); // Generate GPU mipmaps for a texture +RLAPI void SetTextureFilter(Texture2D texture, int filter); // Set texture scaling filter mode +RLAPI void SetTextureWrap(Texture2D texture, int wrap); // Set texture wrapping mode + +// Texture drawing functions +RLAPI void DrawTexture(Texture2D texture, int posX, int posY, Color tint); // Draw a Texture2D +RLAPI void DrawTextureV(Texture2D texture, Vector2 position, Color tint); // Draw a Texture2D with position defined as Vector2 +RLAPI void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint); // Draw a Texture2D with extended parameters +RLAPI void DrawTextureRec(Texture2D texture, Rectangle source, Vector2 position, Color tint); // Draw a part of a texture defined by a rectangle +RLAPI void DrawTexturePro(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint); // Draw a part of a texture defined by a rectangle with 'pro' parameters +RLAPI void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest, Vector2 origin, float rotation, Color tint); // Draws a texture (or part of it) that stretches or shrinks nicely + +// Color/pixel related functions +RLAPI bool ColorIsEqual(Color col1, Color col2); // Check if two colors are equal +RLAPI Color Fade(Color color, float alpha); // Get color with alpha applied, alpha goes from 0.0f to 1.0f +RLAPI int ColorToInt(Color color); // Get hexadecimal value for a Color (0xRRGGBBAA) +RLAPI Vector4 ColorNormalize(Color color); // Get Color normalized as float [0..1] +RLAPI Color ColorFromNormalized(Vector4 normalized); // Get Color from normalized values [0..1] +RLAPI Vector3 ColorToHSV(Color color); // Get HSV values for a Color, hue [0..360], saturation/value [0..1] +RLAPI Color ColorFromHSV(float hue, float saturation, float value); // Get a Color from HSV values, hue [0..360], saturation/value [0..1] +RLAPI Color ColorTint(Color color, Color tint); // Get color multiplied with another color +RLAPI Color ColorBrightness(Color color, float factor); // Get color with brightness correction, brightness factor goes from -1.0f to 1.0f +RLAPI Color ColorContrast(Color color, float contrast); // Get color with contrast correction, contrast values between -1.0f and 1.0f +RLAPI Color ColorAlpha(Color color, float alpha); // Get color with alpha applied, alpha goes from 0.0f to 1.0f +RLAPI Color ColorAlphaBlend(Color dst, Color src, Color tint); // Get src alpha-blended into dst color with tint +RLAPI Color ColorLerp(Color color1, Color color2, float factor); // Get color lerp interpolation between two colors, factor [0.0f..1.0f] +RLAPI Color GetColor(unsigned int hexValue); // Get Color structure from hexadecimal value +RLAPI Color GetPixelColor(void *srcPtr, int format); // Get Color from a source pixel pointer of certain format +RLAPI void SetPixelColor(void *dstPtr, Color color, int format); // Set color formatted into destination pixel pointer +RLAPI int GetPixelDataSize(int width, int height, int format); // Get pixel data size in bytes for certain format + +//------------------------------------------------------------------------------------ +// Font Loading and Text Drawing Functions (Module: text) +//------------------------------------------------------------------------------------ + +// Font loading/unloading functions +RLAPI Font GetFontDefault(void); // Get the default Font +RLAPI Font LoadFont(const char *fileName); // Load font from file into GPU memory (VRAM) +RLAPI Font LoadFontEx(const char *fileName, int fontSize, int *codepoints, int codepointCount); // Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character set, font size is provided in pixels height +RLAPI Font LoadFontFromImage(Image image, Color key, int firstChar); // Load font from Image (XNA style) +RLAPI Font LoadFontFromMemory(const char *fileType, const unsigned char *fileData, int dataSize, int fontSize, int *codepoints, int codepointCount); // Load font from memory buffer, fileType refers to extension: i.e. '.ttf' +RLAPI bool IsFontReady(Font font); // Check if a font is ready +RLAPI GlyphInfo *LoadFontData(const unsigned char *fileData, int dataSize, int fontSize, int *codepoints, int codepointCount, int type); // Load font data for further use +RLAPI Image GenImageFontAtlas(const GlyphInfo *glyphs, Rectangle **glyphRecs, int glyphCount, int fontSize, int padding, int packMethod); // Generate image font atlas using chars info +RLAPI void UnloadFontData(GlyphInfo *glyphs, int glyphCount); // Unload font chars info data (RAM) +RLAPI void UnloadFont(Font font); // Unload font from GPU memory (VRAM) +RLAPI bool ExportFontAsCode(Font font, const char *fileName); // Export font as code file, returns true on success + +// Text drawing functions +RLAPI void DrawFPS(int posX, int posY); // Draw current FPS +RLAPI void DrawText(const char *text, int posX, int posY, int fontSize, Color color); // Draw text (using default font) +RLAPI void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // Draw text using font and additional parameters +RLAPI void DrawTextPro(Font font, const char *text, Vector2 position, Vector2 origin, float rotation, float fontSize, float spacing, Color tint); // Draw text using Font and pro parameters (rotation) +RLAPI void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float fontSize, Color tint); // Draw one character (codepoint) +RLAPI void DrawTextCodepoints(Font font, const int *codepoints, int codepointCount, Vector2 position, float fontSize, float spacing, Color tint); // Draw multiple character (codepoint) + +// Text font info functions +RLAPI void SetTextLineSpacing(int spacing); // Set vertical line spacing when drawing with line-breaks +RLAPI int MeasureText(const char *text, int fontSize); // Measure string width for default font +RLAPI Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing); // Measure string size for Font +RLAPI int GetGlyphIndex(Font font, int codepoint); // Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found +RLAPI GlyphInfo GetGlyphInfo(Font font, int codepoint); // Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found +RLAPI Rectangle GetGlyphAtlasRec(Font font, int codepoint); // Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found + +// Text codepoints management functions (unicode characters) +RLAPI char *LoadUTF8(const int *codepoints, int length); // Load UTF-8 text encoded from codepoints array +RLAPI void UnloadUTF8(char *text); // Unload UTF-8 text encoded from codepoints array +RLAPI int *LoadCodepoints(const char *text, int *count); // Load all codepoints from a UTF-8 text string, codepoints count returned by parameter +RLAPI void UnloadCodepoints(int *codepoints); // Unload codepoints data from memory +RLAPI int GetCodepointCount(const char *text); // Get total number of codepoints in a UTF-8 encoded string +RLAPI int GetCodepoint(const char *text, int *codepointSize); // Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure +RLAPI int GetCodepointNext(const char *text, int *codepointSize); // Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure +RLAPI int GetCodepointPrevious(const char *text, int *codepointSize); // Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure +RLAPI const char *CodepointToUTF8(int codepoint, int *utf8Size); // Encode one codepoint into UTF-8 byte array (array length returned as parameter) + +// Text strings management functions (no UTF-8 strings, only byte chars) +// NOTE: Some strings allocate memory internally for returned strings, just be careful! +RLAPI int TextCopy(char *dst, const char *src); // Copy one string to another, returns bytes copied +RLAPI bool TextIsEqual(const char *text1, const char *text2); // Check if two text string are equal +RLAPI unsigned int TextLength(const char *text); // Get text length, checks for '\0' ending +RLAPI const char *TextFormat(const char *text, ...); // Text formatting with variables (sprintf() style) +RLAPI const char *TextSubtext(const char *text, int position, int length); // Get a piece of a text string +RLAPI char *TextReplace(const char *text, const char *replace, const char *by); // Replace text string (WARNING: memory must be freed!) +RLAPI char *TextInsert(const char *text, const char *insert, int position); // Insert text in a position (WARNING: memory must be freed!) +RLAPI const char *TextJoin(const char **textList, int count, const char *delimiter); // Join text strings with delimiter +RLAPI const char **TextSplit(const char *text, char delimiter, int *count); // Split text into multiple strings +RLAPI void TextAppend(char *text, const char *append, int *position); // Append text at specific position and move cursor! +RLAPI int TextFindIndex(const char *text, const char *find); // Find first text occurrence within a string +RLAPI const char *TextToUpper(const char *text); // Get upper case version of provided string +RLAPI const char *TextToLower(const char *text); // Get lower case version of provided string +RLAPI const char *TextToPascal(const char *text); // Get Pascal case notation version of provided string +RLAPI const char *TextToSnake(const char *text); // Get Snake case notation version of provided string +RLAPI const char *TextToCamel(const char *text); // Get Camel case notation version of provided string + +RLAPI int TextToInteger(const char *text); // Get integer value from text (negative values not supported) +RLAPI float TextToFloat(const char *text); // Get float value from text (negative values not supported) + +//------------------------------------------------------------------------------------ +// Basic 3d Shapes Drawing Functions (Module: models) +//------------------------------------------------------------------------------------ + +// Basic geometric 3D shapes drawing functions +RLAPI void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color); // Draw a line in 3D world space +RLAPI void DrawPoint3D(Vector3 position, Color color); // Draw a point in 3D space, actually a small line +RLAPI void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color); // Draw a circle in 3D world space +RLAPI void DrawTriangle3D(Vector3 v1, Vector3 v2, Vector3 v3, Color color); // Draw a color-filled triangle (vertex in counter-clockwise order!) +RLAPI void DrawTriangleStrip3D(const Vector3 *points, int pointCount, Color color); // Draw a triangle strip defined by points +RLAPI void DrawCube(Vector3 position, float width, float height, float length, Color color); // Draw cube +RLAPI void DrawCubeV(Vector3 position, Vector3 size, Color color); // Draw cube (Vector version) +RLAPI void DrawCubeWires(Vector3 position, float width, float height, float length, Color color); // Draw cube wires +RLAPI void DrawCubeWiresV(Vector3 position, Vector3 size, Color color); // Draw cube wires (Vector version) +RLAPI void DrawSphere(Vector3 centerPos, float radius, Color color); // Draw sphere +RLAPI void DrawSphereEx(Vector3 centerPos, float radius, int rings, int slices, Color color); // Draw sphere with extended parameters +RLAPI void DrawSphereWires(Vector3 centerPos, float radius, int rings, int slices, Color color); // Draw sphere wires +RLAPI void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); // Draw a cylinder/cone +RLAPI void DrawCylinderEx(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color); // Draw a cylinder with base at startPos and top at endPos +RLAPI void DrawCylinderWires(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); // Draw a cylinder/cone wires +RLAPI void DrawCylinderWiresEx(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color); // Draw a cylinder wires with base at startPos and top at endPos +RLAPI void DrawCapsule(Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color); // Draw a capsule with the center of its sphere caps at startPos and endPos +RLAPI void DrawCapsuleWires(Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color); // Draw capsule wireframe with the center of its sphere caps at startPos and endPos +RLAPI void DrawPlane(Vector3 centerPos, Vector2 size, Color color); // Draw a plane XZ +RLAPI void DrawRay(Ray ray, Color color); // Draw a ray line +RLAPI void DrawGrid(int slices, float spacing); // Draw a grid (centered at (0, 0, 0)) + +//------------------------------------------------------------------------------------ +// Model 3d Loading and Drawing Functions (Module: models) +//------------------------------------------------------------------------------------ + +// Model management functions +RLAPI Model LoadModel(const char *fileName); // Load model from files (meshes and materials) +RLAPI Model LoadModelFromMesh(Mesh mesh); // Load model from generated mesh (default material) +RLAPI bool IsModelReady(Model model); // Check if a model is ready +RLAPI void UnloadModel(Model model); // Unload model (including meshes) from memory (RAM and/or VRAM) +RLAPI BoundingBox GetModelBoundingBox(Model model); // Compute model bounding box limits (considers all meshes) + +// Model drawing functions +RLAPI void DrawModel(Model model, Vector3 position, float scale, Color tint); // Draw a model (with texture if set) +RLAPI void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); // Draw a model with extended parameters +RLAPI void DrawModelWires(Model model, Vector3 position, float scale, Color tint); // Draw a model wires (with texture if set) +RLAPI void DrawModelWiresEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); // Draw a model wires (with texture if set) with extended parameters +RLAPI void DrawModelPoints(Model model, Vector3 position, float scale, Color tint); // Draw a model as points +RLAPI void DrawModelPointsEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); // Draw a model as points with extended parameters +RLAPI void DrawBoundingBox(BoundingBox box, Color color); // Draw bounding box (wires) +RLAPI void DrawBillboard(Camera camera, Texture2D texture, Vector3 position, float scale, Color tint); // Draw a billboard texture +RLAPI void DrawBillboardRec(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector2 size, Color tint); // Draw a billboard texture defined by source +RLAPI void DrawBillboardPro(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector3 up, Vector2 size, Vector2 origin, float rotation, Color tint); // Draw a billboard texture defined by source and rotation + +// Mesh management functions +RLAPI void UploadMesh(Mesh *mesh, bool dynamic); // Upload mesh vertex data in GPU and provide VAO/VBO ids +RLAPI void UpdateMeshBuffer(Mesh mesh, int index, const void *data, int dataSize, int offset); // Update mesh vertex data in GPU for a specific buffer index +RLAPI void UnloadMesh(Mesh mesh); // Unload mesh data from CPU and GPU +RLAPI void DrawMesh(Mesh mesh, Material material, Matrix transform); // Draw a 3d mesh with material and transform +RLAPI void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, int instances); // Draw multiple mesh instances with material and different transforms +RLAPI BoundingBox GetMeshBoundingBox(Mesh mesh); // Compute mesh bounding box limits +RLAPI void GenMeshTangents(Mesh *mesh); // Compute mesh tangents +RLAPI bool ExportMesh(Mesh mesh, const char *fileName); // Export mesh data to file, returns true on success +RLAPI bool ExportMeshAsCode(Mesh mesh, const char *fileName); // Export mesh as code file (.h) defining multiple arrays of vertex attributes + +// Mesh generation functions +RLAPI Mesh GenMeshPoly(int sides, float radius); // Generate polygonal mesh +RLAPI Mesh GenMeshPlane(float width, float length, int resX, int resZ); // Generate plane mesh (with subdivisions) +RLAPI Mesh GenMeshCube(float width, float height, float length); // Generate cuboid mesh +RLAPI Mesh GenMeshSphere(float radius, int rings, int slices); // Generate sphere mesh (standard sphere) +RLAPI Mesh GenMeshHemiSphere(float radius, int rings, int slices); // Generate half-sphere mesh (no bottom cap) +RLAPI Mesh GenMeshCylinder(float radius, float height, int slices); // Generate cylinder mesh +RLAPI Mesh GenMeshCone(float radius, float height, int slices); // Generate cone/pyramid mesh +RLAPI Mesh GenMeshTorus(float radius, float size, int radSeg, int sides); // Generate torus mesh +RLAPI Mesh GenMeshKnot(float radius, float size, int radSeg, int sides); // Generate trefoil knot mesh +RLAPI Mesh GenMeshHeightmap(Image heightmap, Vector3 size); // Generate heightmap mesh from image data +RLAPI Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize); // Generate cubes-based map mesh from image data + +// Material loading/unloading functions +RLAPI Material *LoadMaterials(const char *fileName, int *materialCount); // Load materials from model file +RLAPI Material LoadMaterialDefault(void); // Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps) +RLAPI bool IsMaterialReady(Material material); // Check if a material is ready +RLAPI void UnloadMaterial(Material material); // Unload material from GPU memory (VRAM) +RLAPI void SetMaterialTexture(Material *material, int mapType, Texture2D texture); // Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...) +RLAPI void SetModelMeshMaterial(Model *model, int meshId, int materialId); // Set material for a mesh + +// Model animations loading/unloading functions +RLAPI ModelAnimation *LoadModelAnimations(const char *fileName, int *animCount); // Load model animations from file +RLAPI void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); // Update model animation pose +RLAPI void UnloadModelAnimation(ModelAnimation anim); // Unload animation data +RLAPI void UnloadModelAnimations(ModelAnimation *animations, int animCount); // Unload animation array data +RLAPI bool IsModelAnimationValid(Model model, ModelAnimation anim); // Check model animation skeleton match +RLAPI void UpdateModelAnimationBoneMatrices(Model model, ModelAnimation anim, int frame); // Update model animation mesh bone matrices (Note GPU skinning does not work on Mac) + +// Collision detection functions +RLAPI bool CheckCollisionSpheres(Vector3 center1, float radius1, Vector3 center2, float radius2); // Check collision between two spheres +RLAPI bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2); // Check collision between two bounding boxes +RLAPI bool CheckCollisionBoxSphere(BoundingBox box, Vector3 center, float radius); // Check collision between box and sphere +RLAPI RayCollision GetRayCollisionSphere(Ray ray, Vector3 center, float radius); // Get collision info between ray and sphere +RLAPI RayCollision GetRayCollisionBox(Ray ray, BoundingBox box); // Get collision info between ray and box +RLAPI RayCollision GetRayCollisionMesh(Ray ray, Mesh mesh, Matrix transform); // Get collision info between ray and mesh +RLAPI RayCollision GetRayCollisionTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3); // Get collision info between ray and triangle +RLAPI RayCollision GetRayCollisionQuad(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3, Vector3 p4); // Get collision info between ray and quad + +//------------------------------------------------------------------------------------ +// Audio Loading and Playing Functions (Module: audio) +//------------------------------------------------------------------------------------ +typedef void (*AudioCallback)(void *bufferData, unsigned int frames); + +// Audio device management functions +RLAPI void InitAudioDevice(void); // Initialize audio device and context +RLAPI void CloseAudioDevice(void); // Close the audio device and context +RLAPI bool IsAudioDeviceReady(void); // Check if audio device has been initialized successfully +RLAPI void SetMasterVolume(float volume); // Set master volume (listener) +RLAPI float GetMasterVolume(void); // Get master volume (listener) + +// Wave/Sound loading/unloading functions +RLAPI Wave LoadWave(const char *fileName); // Load wave data from file +RLAPI Wave LoadWaveFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); // Load wave from memory buffer, fileType refers to extension: i.e. '.wav' +RLAPI bool IsWaveReady(Wave wave); // Checks if wave data is ready +RLAPI Sound LoadSound(const char *fileName); // Load sound from file +RLAPI Sound LoadSoundFromWave(Wave wave); // Load sound from wave data +RLAPI Sound LoadSoundAlias(Sound source); // Create a new sound that shares the same sample data as the source sound, does not own the sound data +RLAPI bool IsSoundReady(Sound sound); // Checks if a sound is ready +RLAPI void UpdateSound(Sound sound, const void *data, int sampleCount); // Update sound buffer with new data +RLAPI void UnloadWave(Wave wave); // Unload wave data +RLAPI void UnloadSound(Sound sound); // Unload sound +RLAPI void UnloadSoundAlias(Sound alias); // Unload a sound alias (does not deallocate sample data) +RLAPI bool ExportWave(Wave wave, const char *fileName); // Export wave data to file, returns true on success +RLAPI bool ExportWaveAsCode(Wave wave, const char *fileName); // Export wave sample data to code (.h), returns true on success + +// Wave/Sound management functions +RLAPI void PlaySound(Sound sound); // Play a sound +RLAPI void StopSound(Sound sound); // Stop playing a sound +RLAPI void PauseSound(Sound sound); // Pause a sound +RLAPI void ResumeSound(Sound sound); // Resume a paused sound +RLAPI bool IsSoundPlaying(Sound sound); // Check if a sound is currently playing +RLAPI void SetSoundVolume(Sound sound, float volume); // Set volume for a sound (1.0 is max level) +RLAPI void SetSoundPitch(Sound sound, float pitch); // Set pitch for a sound (1.0 is base level) +RLAPI void SetSoundPan(Sound sound, float pan); // Set pan for a sound (0.5 is center) +RLAPI Wave WaveCopy(Wave wave); // Copy a wave to a new wave +RLAPI void WaveCrop(Wave *wave, int initFrame, int finalFrame); // Crop a wave to defined frames range +RLAPI void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels); // Convert wave data to desired format +RLAPI float *LoadWaveSamples(Wave wave); // Load samples data from wave as a 32bit float data array +RLAPI void UnloadWaveSamples(float *samples); // Unload samples data loaded with LoadWaveSamples() + +// Music management functions +RLAPI Music LoadMusicStream(const char *fileName); // Load music stream from file +RLAPI Music LoadMusicStreamFromMemory(const char *fileType, const unsigned char *data, int dataSize); // Load music stream from data +RLAPI bool IsMusicReady(Music music); // Checks if a music stream is ready +RLAPI void UnloadMusicStream(Music music); // Unload music stream +RLAPI void PlayMusicStream(Music music); // Start music playing +RLAPI bool IsMusicStreamPlaying(Music music); // Check if music is playing +RLAPI void UpdateMusicStream(Music music); // Updates buffers for music streaming +RLAPI void StopMusicStream(Music music); // Stop music playing +RLAPI void PauseMusicStream(Music music); // Pause music playing +RLAPI void ResumeMusicStream(Music music); // Resume playing paused music +RLAPI void SeekMusicStream(Music music, float position); // Seek music to a position (in seconds) +RLAPI void SetMusicVolume(Music music, float volume); // Set volume for music (1.0 is max level) +RLAPI void SetMusicPitch(Music music, float pitch); // Set pitch for a music (1.0 is base level) +RLAPI void SetMusicPan(Music music, float pan); // Set pan for a music (0.5 is center) +RLAPI float GetMusicTimeLength(Music music); // Get music time length (in seconds) +RLAPI float GetMusicTimePlayed(Music music); // Get current music time played (in seconds) + +// AudioStream management functions +RLAPI AudioStream LoadAudioStream(unsigned int sampleRate, unsigned int sampleSize, unsigned int channels); // Load audio stream (to stream raw audio pcm data) +RLAPI bool IsAudioStreamReady(AudioStream stream); // Checks if an audio stream is ready +RLAPI void UnloadAudioStream(AudioStream stream); // Unload audio stream and free memory +RLAPI void UpdateAudioStream(AudioStream stream, const void *data, int frameCount); // Update audio stream buffers with data +RLAPI bool IsAudioStreamProcessed(AudioStream stream); // Check if any audio stream buffers requires refill +RLAPI void PlayAudioStream(AudioStream stream); // Play audio stream +RLAPI void PauseAudioStream(AudioStream stream); // Pause audio stream +RLAPI void ResumeAudioStream(AudioStream stream); // Resume audio stream +RLAPI bool IsAudioStreamPlaying(AudioStream stream); // Check if audio stream is playing +RLAPI void StopAudioStream(AudioStream stream); // Stop audio stream +RLAPI void SetAudioStreamVolume(AudioStream stream, float volume); // Set volume for audio stream (1.0 is max level) +RLAPI void SetAudioStreamPitch(AudioStream stream, float pitch); // Set pitch for audio stream (1.0 is base level) +RLAPI void SetAudioStreamPan(AudioStream stream, float pan); // Set pan for audio stream (0.5 is centered) +RLAPI void SetAudioStreamBufferSizeDefault(int size); // Default size for new audio streams +RLAPI void SetAudioStreamCallback(AudioStream stream, AudioCallback callback); // Audio thread callback to request new data + +RLAPI void AttachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Attach audio stream processor to stream, receives the samples as 'float' +RLAPI void DetachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Detach audio stream processor from stream + +RLAPI void AttachAudioMixedProcessor(AudioCallback processor); // Attach audio stream processor to the entire audio pipeline, receives the samples as 'float' +RLAPI void DetachAudioMixedProcessor(AudioCallback processor); // Detach audio stream processor from the entire audio pipeline + +#if defined(__cplusplus) +} +#endif + +#endif // RAYLIB_H diff --git a/include/raymath.h b/include/raymath.h new file mode 100644 index 0000000..62d52f8 --- /dev/null +++ b/include/raymath.h @@ -0,0 +1,2583 @@ +/********************************************************************************************** +* +* raymath v1.5 - Math functions to work with Vector2, Vector3, Matrix and Quaternions +* +* CONVENTIONS: +* - Matrix structure is defined as row-major (memory layout) but parameters naming AND all +* math operations performed by the library consider the structure as it was column-major +* It is like transposed versions of the matrices are used for all the maths +* It benefits some functions making them cache-friendly and also avoids matrix +* transpositions sometimes required by OpenGL +* Example: In memory order, row0 is [m0 m4 m8 m12] but in semantic math row0 is [m0 m1 m2 m3] +* - Functions are always self-contained, no function use another raymath function inside, +* required code is directly re-implemented inside +* - Functions input parameters are always received by value (2 unavoidable exceptions) +* - Functions use always a "result" variable for return +* - Functions are always defined inline +* - Angles are always in radians (DEG2RAD/RAD2DEG macros provided for convenience) +* - No compound literals used to make sure libray is compatible with C++ +* +* CONFIGURATION: +* #define RAYMATH_IMPLEMENTATION +* Generates the implementation of the library into the included file. +* If not defined, the library is in header only mode and can be included in other headers +* or source files without problems. But only ONE file should hold the implementation. +* +* #define RAYMATH_STATIC_INLINE +* Define static inline functions code, so #include header suffices for use. +* This may use up lots of memory. +* +* +* LICENSE: zlib/libpng +* +* Copyright (c) 2015-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. +* +**********************************************************************************************/ + +#ifndef RAYMATH_H +#define RAYMATH_H + +#if defined(RAYMATH_IMPLEMENTATION) && defined(RAYMATH_STATIC_INLINE) + #error "Specifying both RAYMATH_IMPLEMENTATION and RAYMATH_STATIC_INLINE is contradictory" +#endif + +// Function specifiers definition +#if defined(RAYMATH_IMPLEMENTATION) + #if defined(_WIN32) && defined(BUILD_LIBTYPE_SHARED) + #define RMAPI __declspec(dllexport) extern inline // We are building raylib as a Win32 shared library (.dll) + #elif defined(BUILD_LIBTYPE_SHARED) + #define RMAPI __attribute__((visibility("default"))) // We are building raylib as a Unix shared library (.so/.dylib) + #elif defined(_WIN32) && defined(USE_LIBTYPE_SHARED) + #define RMAPI __declspec(dllimport) // We are using raylib as a Win32 shared library (.dll) + #else + #define RMAPI extern inline // Provide external definition + #endif +#elif defined(RAYMATH_STATIC_INLINE) + #define RMAPI static inline // Functions may be inlined, no external out-of-line definition +#else + #if defined(__TINYC__) + #define RMAPI static inline // plain inline not supported by tinycc (See issue #435) + #else + #define RMAPI inline // Functions may be inlined or external definition used + #endif +#endif + + +//---------------------------------------------------------------------------------- +// Defines and Macros +//---------------------------------------------------------------------------------- +#ifndef PI + #define PI 3.14159265358979323846f +#endif + +#ifndef EPSILON + #define EPSILON 0.000001f +#endif + +#ifndef DEG2RAD + #define DEG2RAD (PI/180.0f) +#endif + +#ifndef RAD2DEG + #define RAD2DEG (180.0f/PI) +#endif + +// Get float vector for Matrix +#ifndef MatrixToFloat + #define MatrixToFloat(mat) (MatrixToFloatV(mat).v) +#endif + +// Get float vector for Vector3 +#ifndef Vector3ToFloat + #define Vector3ToFloat(vec) (Vector3ToFloatV(vec).v) +#endif + +//---------------------------------------------------------------------------------- +// Types and Structures Definition +//---------------------------------------------------------------------------------- +#if !defined(RL_VECTOR2_TYPE) +// Vector2 type +typedef struct Vector2 { + float x; + float y; +} Vector2; +#define RL_VECTOR2_TYPE +#endif + +#if !defined(RL_VECTOR3_TYPE) +// Vector3 type +typedef struct Vector3 { + float x; + float y; + float z; +} Vector3; +#define RL_VECTOR3_TYPE +#endif + +#if !defined(RL_VECTOR4_TYPE) +// Vector4 type +typedef struct Vector4 { + float x; + float y; + float z; + float w; +} Vector4; +#define RL_VECTOR4_TYPE +#endif + +#if !defined(RL_QUATERNION_TYPE) +// Quaternion type +typedef Vector4 Quaternion; +#define RL_QUATERNION_TYPE +#endif + +#if !defined(RL_MATRIX_TYPE) +// Matrix type (OpenGL style 4x4 - right handed, column major) +typedef struct Matrix { + float m0, m4, m8, m12; // Matrix first row (4 components) + float m1, m5, m9, m13; // Matrix second row (4 components) + float m2, m6, m10, m14; // Matrix third row (4 components) + float m3, m7, m11, m15; // Matrix fourth row (4 components) +} Matrix; +#define RL_MATRIX_TYPE +#endif + +// NOTE: Helper types to be used instead of array return types for *ToFloat functions +typedef struct float3 { + float v[3]; +} float3; + +typedef struct float16 { + float v[16]; +} float16; + +#include // Required for: sinf(), cosf(), tan(), atan2f(), sqrtf(), floor(), fminf(), fmaxf(), fabsf() + +//---------------------------------------------------------------------------------- +// Module Functions Definition - Utils math +//---------------------------------------------------------------------------------- + +// Clamp float value +RMAPI float Clamp(float value, float min, float max) +{ + float result = (value < min)? min : value; + + if (result > max) result = max; + + return result; +} + +// Calculate linear interpolation between two floats +RMAPI float Lerp(float start, float end, float amount) +{ + float result = start + amount*(end - start); + + return result; +} + +// Normalize input value within input range +RMAPI float Normalize(float value, float start, float end) +{ + float result = (value - start)/(end - start); + + return result; +} + +// Remap input value within input range to output range +RMAPI float Remap(float value, float inputStart, float inputEnd, float outputStart, float outputEnd) +{ + float result = (value - inputStart)/(inputEnd - inputStart)*(outputEnd - outputStart) + outputStart; + + return result; +} + +// Wrap input value from min to max +RMAPI float Wrap(float value, float min, float max) +{ + float result = value - (max - min)*floorf((value - min)/(max - min)); + + return result; +} + +// Check whether two given floats are almost equal +RMAPI int FloatEquals(float x, float y) +{ +#if !defined(EPSILON) + #define EPSILON 0.000001f +#endif + + int result = (fabsf(x - y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(x), fabsf(y)))); + + return result; +} + +//---------------------------------------------------------------------------------- +// Module Functions Definition - Vector2 math +//---------------------------------------------------------------------------------- + +// Vector with components value 0.0f +RMAPI Vector2 Vector2Zero(void) +{ + Vector2 result = { 0.0f, 0.0f }; + + return result; +} + +// Vector with components value 1.0f +RMAPI Vector2 Vector2One(void) +{ + Vector2 result = { 1.0f, 1.0f }; + + return result; +} + +// Add two vectors (v1 + v2) +RMAPI Vector2 Vector2Add(Vector2 v1, Vector2 v2) +{ + Vector2 result = { v1.x + v2.x, v1.y + v2.y }; + + return result; +} + +// Add vector and float value +RMAPI Vector2 Vector2AddValue(Vector2 v, float add) +{ + Vector2 result = { v.x + add, v.y + add }; + + return result; +} + +// Subtract two vectors (v1 - v2) +RMAPI Vector2 Vector2Subtract(Vector2 v1, Vector2 v2) +{ + Vector2 result = { v1.x - v2.x, v1.y - v2.y }; + + return result; +} + +// Subtract vector by float value +RMAPI Vector2 Vector2SubtractValue(Vector2 v, float sub) +{ + Vector2 result = { v.x - sub, v.y - sub }; + + return result; +} + +// Calculate vector length +RMAPI float Vector2Length(Vector2 v) +{ + float result = sqrtf((v.x*v.x) + (v.y*v.y)); + + return result; +} + +// Calculate vector square length +RMAPI float Vector2LengthSqr(Vector2 v) +{ + float result = (v.x*v.x) + (v.y*v.y); + + return result; +} + +// Calculate two vectors dot product +RMAPI float Vector2DotProduct(Vector2 v1, Vector2 v2) +{ + float result = (v1.x*v2.x + v1.y*v2.y); + + return result; +} + +// Calculate distance between two vectors +RMAPI float Vector2Distance(Vector2 v1, Vector2 v2) +{ + float result = sqrtf((v1.x - v2.x)*(v1.x - v2.x) + (v1.y - v2.y)*(v1.y - v2.y)); + + return result; +} + +// Calculate square distance between two vectors +RMAPI float Vector2DistanceSqr(Vector2 v1, Vector2 v2) +{ + float result = ((v1.x - v2.x)*(v1.x - v2.x) + (v1.y - v2.y)*(v1.y - v2.y)); + + return result; +} + +// Calculate angle between two vectors +// NOTE: Angle is calculated from origin point (0, 0) +RMAPI float Vector2Angle(Vector2 v1, Vector2 v2) +{ + float result = 0.0f; + + float dot = v1.x*v2.x + v1.y*v2.y; + float det = v1.x*v2.y - v1.y*v2.x; + + result = atan2f(det, dot); + + return result; +} + +// Calculate angle defined by a two vectors line +// NOTE: Parameters need to be normalized +// Current implementation should be aligned with glm::angle +RMAPI float Vector2LineAngle(Vector2 start, Vector2 end) +{ + float result = 0.0f; + + // TODO(10/9/2023): Currently angles move clockwise, determine if this is wanted behavior + result = -atan2f(end.y - start.y, end.x - start.x); + + return result; +} + +// Scale vector (multiply by value) +RMAPI Vector2 Vector2Scale(Vector2 v, float scale) +{ + Vector2 result = { v.x*scale, v.y*scale }; + + return result; +} + +// Multiply vector by vector +RMAPI Vector2 Vector2Multiply(Vector2 v1, Vector2 v2) +{ + Vector2 result = { v1.x*v2.x, v1.y*v2.y }; + + return result; +} + +// Negate vector +RMAPI Vector2 Vector2Negate(Vector2 v) +{ + Vector2 result = { -v.x, -v.y }; + + return result; +} + +// Divide vector by vector +RMAPI Vector2 Vector2Divide(Vector2 v1, Vector2 v2) +{ + Vector2 result = { v1.x/v2.x, v1.y/v2.y }; + + return result; +} + +// Normalize provided vector +RMAPI Vector2 Vector2Normalize(Vector2 v) +{ + Vector2 result = { 0 }; + float length = sqrtf((v.x*v.x) + (v.y*v.y)); + + if (length > 0) + { + float ilength = 1.0f/length; + result.x = v.x*ilength; + result.y = v.y*ilength; + } + + return result; +} + +// Transforms a Vector2 by a given Matrix +RMAPI Vector2 Vector2Transform(Vector2 v, Matrix mat) +{ + Vector2 result = { 0 }; + + float x = v.x; + float y = v.y; + float z = 0; + + result.x = mat.m0*x + mat.m4*y + mat.m8*z + mat.m12; + result.y = mat.m1*x + mat.m5*y + mat.m9*z + mat.m13; + + return result; +} + +// Calculate linear interpolation between two vectors +RMAPI Vector2 Vector2Lerp(Vector2 v1, Vector2 v2, float amount) +{ + Vector2 result = { 0 }; + + result.x = v1.x + amount*(v2.x - v1.x); + result.y = v1.y + amount*(v2.y - v1.y); + + return result; +} + +// Calculate reflected vector to normal +RMAPI Vector2 Vector2Reflect(Vector2 v, Vector2 normal) +{ + Vector2 result = { 0 }; + + float dotProduct = (v.x*normal.x + v.y*normal.y); // Dot product + + result.x = v.x - (2.0f*normal.x)*dotProduct; + result.y = v.y - (2.0f*normal.y)*dotProduct; + + return result; +} + +// Get min value for each pair of components +RMAPI Vector2 Vector2Min(Vector2 v1, Vector2 v2) +{ + Vector2 result = { 0 }; + + result.x = fminf(v1.x, v2.x); + result.y = fminf(v1.y, v2.y); + + return result; +} + +// Get max value for each pair of components +RMAPI Vector2 Vector2Max(Vector2 v1, Vector2 v2) +{ + Vector2 result = { 0 }; + + result.x = fmaxf(v1.x, v2.x); + result.y = fmaxf(v1.y, v2.y); + + return result; +} + +// Rotate vector by angle +RMAPI Vector2 Vector2Rotate(Vector2 v, float angle) +{ + Vector2 result = { 0 }; + + float cosres = cosf(angle); + float sinres = sinf(angle); + + result.x = v.x*cosres - v.y*sinres; + result.y = v.x*sinres + v.y*cosres; + + return result; +} + +// Move Vector towards target +RMAPI Vector2 Vector2MoveTowards(Vector2 v, Vector2 target, float maxDistance) +{ + Vector2 result = { 0 }; + + float dx = target.x - v.x; + float dy = target.y - v.y; + float value = (dx*dx) + (dy*dy); + + if ((value == 0) || ((maxDistance >= 0) && (value <= maxDistance*maxDistance))) return target; + + float dist = sqrtf(value); + + result.x = v.x + dx/dist*maxDistance; + result.y = v.y + dy/dist*maxDistance; + + return result; +} + +// Invert the given vector +RMAPI Vector2 Vector2Invert(Vector2 v) +{ + Vector2 result = { 1.0f/v.x, 1.0f/v.y }; + + return result; +} + +// Clamp the components of the vector between +// min and max values specified by the given vectors +RMAPI Vector2 Vector2Clamp(Vector2 v, Vector2 min, Vector2 max) +{ + Vector2 result = { 0 }; + + result.x = fminf(max.x, fmaxf(min.x, v.x)); + result.y = fminf(max.y, fmaxf(min.y, v.y)); + + return result; +} + +// Clamp the magnitude of the vector between two min and max values +RMAPI Vector2 Vector2ClampValue(Vector2 v, float min, float max) +{ + Vector2 result = v; + + float length = (v.x*v.x) + (v.y*v.y); + if (length > 0.0f) + { + length = sqrtf(length); + + float scale = 1; // By default, 1 as the neutral element. + if (length < min) + { + scale = min/length; + } + else if (length > max) + { + scale = max/length; + } + + result.x = v.x*scale; + result.y = v.y*scale; + } + + return result; +} + +// Check whether two given vectors are almost equal +RMAPI int Vector2Equals(Vector2 p, Vector2 q) +{ +#if !defined(EPSILON) + #define EPSILON 0.000001f +#endif + + int result = ((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) && + ((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))); + + return result; +} + +// Compute the direction of a refracted ray +// v: normalized direction of the incoming ray +// n: normalized normal vector of the interface of two optical media +// r: ratio of the refractive index of the medium from where the ray comes +// to the refractive index of the medium on the other side of the surface +RMAPI Vector2 Vector2Refract(Vector2 v, Vector2 n, float r) +{ + Vector2 result = { 0 }; + + float dot = v.x*n.x + v.y*n.y; + float d = 1.0f - r*r*(1.0f - dot*dot); + + if (d >= 0.0f) + { + d = sqrtf(d); + v.x = r*v.x - (r*dot + d)*n.x; + v.y = r*v.y - (r*dot + d)*n.y; + + result = v; + } + + return result; +} + + +//---------------------------------------------------------------------------------- +// Module Functions Definition - Vector3 math +//---------------------------------------------------------------------------------- + +// Vector with components value 0.0f +RMAPI Vector3 Vector3Zero(void) +{ + Vector3 result = { 0.0f, 0.0f, 0.0f }; + + return result; +} + +// Vector with components value 1.0f +RMAPI Vector3 Vector3One(void) +{ + Vector3 result = { 1.0f, 1.0f, 1.0f }; + + return result; +} + +// Add two vectors +RMAPI Vector3 Vector3Add(Vector3 v1, Vector3 v2) +{ + Vector3 result = { v1.x + v2.x, v1.y + v2.y, v1.z + v2.z }; + + return result; +} + +// Add vector and float value +RMAPI Vector3 Vector3AddValue(Vector3 v, float add) +{ + Vector3 result = { v.x + add, v.y + add, v.z + add }; + + return result; +} + +// Subtract two vectors +RMAPI Vector3 Vector3Subtract(Vector3 v1, Vector3 v2) +{ + Vector3 result = { v1.x - v2.x, v1.y - v2.y, v1.z - v2.z }; + + return result; +} + +// Subtract vector by float value +RMAPI Vector3 Vector3SubtractValue(Vector3 v, float sub) +{ + Vector3 result = { v.x - sub, v.y - sub, v.z - sub }; + + return result; +} + +// Multiply vector by scalar +RMAPI Vector3 Vector3Scale(Vector3 v, float scalar) +{ + Vector3 result = { v.x*scalar, v.y*scalar, v.z*scalar }; + + return result; +} + +// Multiply vector by vector +RMAPI Vector3 Vector3Multiply(Vector3 v1, Vector3 v2) +{ + Vector3 result = { v1.x*v2.x, v1.y*v2.y, v1.z*v2.z }; + + return result; +} + +// Calculate two vectors cross product +RMAPI Vector3 Vector3CrossProduct(Vector3 v1, Vector3 v2) +{ + Vector3 result = { v1.y*v2.z - v1.z*v2.y, v1.z*v2.x - v1.x*v2.z, v1.x*v2.y - v1.y*v2.x }; + + return result; +} + +// Calculate one vector perpendicular vector +RMAPI Vector3 Vector3Perpendicular(Vector3 v) +{ + Vector3 result = { 0 }; + + float min = fabsf(v.x); + Vector3 cardinalAxis = {1.0f, 0.0f, 0.0f}; + + if (fabsf(v.y) < min) + { + min = fabsf(v.y); + Vector3 tmp = {0.0f, 1.0f, 0.0f}; + cardinalAxis = tmp; + } + + if (fabsf(v.z) < min) + { + Vector3 tmp = {0.0f, 0.0f, 1.0f}; + cardinalAxis = tmp; + } + + // Cross product between vectors + result.x = v.y*cardinalAxis.z - v.z*cardinalAxis.y; + result.y = v.z*cardinalAxis.x - v.x*cardinalAxis.z; + result.z = v.x*cardinalAxis.y - v.y*cardinalAxis.x; + + return result; +} + +// Calculate vector length +RMAPI float Vector3Length(const Vector3 v) +{ + float result = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z); + + return result; +} + +// Calculate vector square length +RMAPI float Vector3LengthSqr(const Vector3 v) +{ + float result = v.x*v.x + v.y*v.y + v.z*v.z; + + return result; +} + +// Calculate two vectors dot product +RMAPI float Vector3DotProduct(Vector3 v1, Vector3 v2) +{ + float result = (v1.x*v2.x + v1.y*v2.y + v1.z*v2.z); + + return result; +} + +// Calculate distance between two vectors +RMAPI float Vector3Distance(Vector3 v1, Vector3 v2) +{ + float result = 0.0f; + + float dx = v2.x - v1.x; + float dy = v2.y - v1.y; + float dz = v2.z - v1.z; + result = sqrtf(dx*dx + dy*dy + dz*dz); + + return result; +} + +// Calculate square distance between two vectors +RMAPI float Vector3DistanceSqr(Vector3 v1, Vector3 v2) +{ + float result = 0.0f; + + float dx = v2.x - v1.x; + float dy = v2.y - v1.y; + float dz = v2.z - v1.z; + result = dx*dx + dy*dy + dz*dz; + + return result; +} + +// Calculate angle between two vectors +RMAPI float Vector3Angle(Vector3 v1, Vector3 v2) +{ + float result = 0.0f; + + Vector3 cross = { v1.y*v2.z - v1.z*v2.y, v1.z*v2.x - v1.x*v2.z, v1.x*v2.y - v1.y*v2.x }; + float len = sqrtf(cross.x*cross.x + cross.y*cross.y + cross.z*cross.z); + float dot = (v1.x*v2.x + v1.y*v2.y + v1.z*v2.z); + result = atan2f(len, dot); + + return result; +} + +// Negate provided vector (invert direction) +RMAPI Vector3 Vector3Negate(Vector3 v) +{ + Vector3 result = { -v.x, -v.y, -v.z }; + + return result; +} + +// Divide vector by vector +RMAPI Vector3 Vector3Divide(Vector3 v1, Vector3 v2) +{ + Vector3 result = { v1.x/v2.x, v1.y/v2.y, v1.z/v2.z }; + + return result; +} + +// Normalize provided vector +RMAPI Vector3 Vector3Normalize(Vector3 v) +{ + Vector3 result = v; + + float length = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z); + if (length != 0.0f) + { + float ilength = 1.0f/length; + + result.x *= ilength; + result.y *= ilength; + result.z *= ilength; + } + + return result; +} + +//Calculate the projection of the vector v1 on to v2 +RMAPI Vector3 Vector3Project(Vector3 v1, Vector3 v2) +{ + Vector3 result = { 0 }; + + float v1dv2 = (v1.x*v2.x + v1.y*v2.y + v1.z*v2.z); + float v2dv2 = (v2.x*v2.x + v2.y*v2.y + v2.z*v2.z); + + float mag = v1dv2/v2dv2; + + result.x = v2.x*mag; + result.y = v2.y*mag; + result.z = v2.z*mag; + + return result; +} + +//Calculate the rejection of the vector v1 on to v2 +RMAPI Vector3 Vector3Reject(Vector3 v1, Vector3 v2) +{ + Vector3 result = { 0 }; + + float v1dv2 = (v1.x*v2.x + v1.y*v2.y + v1.z*v2.z); + float v2dv2 = (v2.x*v2.x + v2.y*v2.y + v2.z*v2.z); + + float mag = v1dv2/v2dv2; + + result.x = v1.x - (v2.x*mag); + result.y = v1.y - (v2.y*mag); + result.z = v1.z - (v2.z*mag); + + return result; +} + +// Orthonormalize provided vectors +// Makes vectors normalized and orthogonal to each other +// Gram-Schmidt function implementation +RMAPI void Vector3OrthoNormalize(Vector3 *v1, Vector3 *v2) +{ + float length = 0.0f; + float ilength = 0.0f; + + // Vector3Normalize(*v1); + Vector3 v = *v1; + length = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z); + if (length == 0.0f) length = 1.0f; + ilength = 1.0f/length; + v1->x *= ilength; + v1->y *= ilength; + v1->z *= ilength; + + // Vector3CrossProduct(*v1, *v2) + Vector3 vn1 = { v1->y*v2->z - v1->z*v2->y, v1->z*v2->x - v1->x*v2->z, v1->x*v2->y - v1->y*v2->x }; + + // Vector3Normalize(vn1); + v = vn1; + length = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z); + if (length == 0.0f) length = 1.0f; + ilength = 1.0f/length; + vn1.x *= ilength; + vn1.y *= ilength; + vn1.z *= ilength; + + // Vector3CrossProduct(vn1, *v1) + Vector3 vn2 = { vn1.y*v1->z - vn1.z*v1->y, vn1.z*v1->x - vn1.x*v1->z, vn1.x*v1->y - vn1.y*v1->x }; + + *v2 = vn2; +} + +// Transforms a Vector3 by a given Matrix +RMAPI Vector3 Vector3Transform(Vector3 v, Matrix mat) +{ + Vector3 result = { 0 }; + + float x = v.x; + float y = v.y; + float z = v.z; + + result.x = mat.m0*x + mat.m4*y + mat.m8*z + mat.m12; + result.y = mat.m1*x + mat.m5*y + mat.m9*z + mat.m13; + result.z = mat.m2*x + mat.m6*y + mat.m10*z + mat.m14; + + return result; +} + +// Transform a vector by quaternion rotation +RMAPI Vector3 Vector3RotateByQuaternion(Vector3 v, Quaternion q) +{ + Vector3 result = { 0 }; + + result.x = v.x*(q.x*q.x + q.w*q.w - q.y*q.y - q.z*q.z) + v.y*(2*q.x*q.y - 2*q.w*q.z) + v.z*(2*q.x*q.z + 2*q.w*q.y); + result.y = v.x*(2*q.w*q.z + 2*q.x*q.y) + v.y*(q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z) + v.z*(-2*q.w*q.x + 2*q.y*q.z); + result.z = v.x*(-2*q.w*q.y + 2*q.x*q.z) + v.y*(2*q.w*q.x + 2*q.y*q.z)+ v.z*(q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z); + + return result; +} + +// Rotates a vector around an axis +RMAPI Vector3 Vector3RotateByAxisAngle(Vector3 v, Vector3 axis, float angle) +{ + // Using Euler-Rodrigues Formula + // Ref.: https://en.wikipedia.org/w/index.php?title=Euler%E2%80%93Rodrigues_formula + + Vector3 result = v; + + // Vector3Normalize(axis); + float length = sqrtf(axis.x*axis.x + axis.y*axis.y + axis.z*axis.z); + if (length == 0.0f) length = 1.0f; + float ilength = 1.0f/length; + axis.x *= ilength; + axis.y *= ilength; + axis.z *= ilength; + + angle /= 2.0f; + float a = sinf(angle); + float b = axis.x*a; + float c = axis.y*a; + float d = axis.z*a; + a = cosf(angle); + Vector3 w = { b, c, d }; + + // Vector3CrossProduct(w, v) + Vector3 wv = { w.y*v.z - w.z*v.y, w.z*v.x - w.x*v.z, w.x*v.y - w.y*v.x }; + + // Vector3CrossProduct(w, wv) + Vector3 wwv = { w.y*wv.z - w.z*wv.y, w.z*wv.x - w.x*wv.z, w.x*wv.y - w.y*wv.x }; + + // Vector3Scale(wv, 2*a) + a *= 2; + wv.x *= a; + wv.y *= a; + wv.z *= a; + + // Vector3Scale(wwv, 2) + wwv.x *= 2; + wwv.y *= 2; + wwv.z *= 2; + + result.x += wv.x; + result.y += wv.y; + result.z += wv.z; + + result.x += wwv.x; + result.y += wwv.y; + result.z += wwv.z; + + return result; +} + +// Move Vector towards target +RMAPI Vector3 Vector3MoveTowards(Vector3 v, Vector3 target, float maxDistance) +{ + Vector3 result = { 0 }; + + float dx = target.x - v.x; + float dy = target.y - v.y; + float dz = target.z - v.z; + float value = (dx*dx) + (dy*dy) + (dz*dz); + + if ((value == 0) || ((maxDistance >= 0) && (value <= maxDistance*maxDistance))) return target; + + float dist = sqrtf(value); + + result.x = v.x + dx/dist*maxDistance; + result.y = v.y + dy/dist*maxDistance; + result.z = v.z + dz/dist*maxDistance; + + return result; +} + +// Calculate linear interpolation between two vectors +RMAPI Vector3 Vector3Lerp(Vector3 v1, Vector3 v2, float amount) +{ + Vector3 result = { 0 }; + + result.x = v1.x + amount*(v2.x - v1.x); + result.y = v1.y + amount*(v2.y - v1.y); + result.z = v1.z + amount*(v2.z - v1.z); + + return result; +} + +// Calculate cubic hermite interpolation between two vectors and their tangents +// as described in the GLTF 2.0 specification: https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#interpolation-cubic +RMAPI Vector3 Vector3CubicHermite(Vector3 v1, Vector3 tangent1, Vector3 v2, Vector3 tangent2, float amount) +{ + Vector3 result = { 0 }; + + float amountPow2 = amount*amount; + float amountPow3 = amount*amount*amount; + + result.x = (2*amountPow3 - 3*amountPow2 + 1)*v1.x + (amountPow3 - 2*amountPow2 + amount)*tangent1.x + (-2*amountPow3 + 3*amountPow2)*v2.x + (amountPow3 - amountPow2)*tangent2.x; + result.y = (2*amountPow3 - 3*amountPow2 + 1)*v1.y + (amountPow3 - 2*amountPow2 + amount)*tangent1.y + (-2*amountPow3 + 3*amountPow2)*v2.y + (amountPow3 - amountPow2)*tangent2.y; + result.z = (2*amountPow3 - 3*amountPow2 + 1)*v1.z + (amountPow3 - 2*amountPow2 + amount)*tangent1.z + (-2*amountPow3 + 3*amountPow2)*v2.z + (amountPow3 - amountPow2)*tangent2.z; + + return result; +} + +// Calculate reflected vector to normal +RMAPI Vector3 Vector3Reflect(Vector3 v, Vector3 normal) +{ + Vector3 result = { 0 }; + + // I is the original vector + // N is the normal of the incident plane + // R = I - (2*N*(DotProduct[I, N])) + + float dotProduct = (v.x*normal.x + v.y*normal.y + v.z*normal.z); + + result.x = v.x - (2.0f*normal.x)*dotProduct; + result.y = v.y - (2.0f*normal.y)*dotProduct; + result.z = v.z - (2.0f*normal.z)*dotProduct; + + return result; +} + +// Get min value for each pair of components +RMAPI Vector3 Vector3Min(Vector3 v1, Vector3 v2) +{ + Vector3 result = { 0 }; + + result.x = fminf(v1.x, v2.x); + result.y = fminf(v1.y, v2.y); + result.z = fminf(v1.z, v2.z); + + return result; +} + +// Get max value for each pair of components +RMAPI Vector3 Vector3Max(Vector3 v1, Vector3 v2) +{ + Vector3 result = { 0 }; + + result.x = fmaxf(v1.x, v2.x); + result.y = fmaxf(v1.y, v2.y); + result.z = fmaxf(v1.z, v2.z); + + return result; +} + +// Compute barycenter coordinates (u, v, w) for point p with respect to triangle (a, b, c) +// NOTE: Assumes P is on the plane of the triangle +RMAPI Vector3 Vector3Barycenter(Vector3 p, Vector3 a, Vector3 b, Vector3 c) +{ + Vector3 result = { 0 }; + + Vector3 v0 = { b.x - a.x, b.y - a.y, b.z - a.z }; // Vector3Subtract(b, a) + Vector3 v1 = { c.x - a.x, c.y - a.y, c.z - a.z }; // Vector3Subtract(c, a) + Vector3 v2 = { p.x - a.x, p.y - a.y, p.z - a.z }; // Vector3Subtract(p, a) + float d00 = (v0.x*v0.x + v0.y*v0.y + v0.z*v0.z); // Vector3DotProduct(v0, v0) + float d01 = (v0.x*v1.x + v0.y*v1.y + v0.z*v1.z); // Vector3DotProduct(v0, v1) + float d11 = (v1.x*v1.x + v1.y*v1.y + v1.z*v1.z); // Vector3DotProduct(v1, v1) + float d20 = (v2.x*v0.x + v2.y*v0.y + v2.z*v0.z); // Vector3DotProduct(v2, v0) + float d21 = (v2.x*v1.x + v2.y*v1.y + v2.z*v1.z); // Vector3DotProduct(v2, v1) + + float denom = d00*d11 - d01*d01; + + result.y = (d11*d20 - d01*d21)/denom; + result.z = (d00*d21 - d01*d20)/denom; + result.x = 1.0f - (result.z + result.y); + + return result; +} + +// Projects a Vector3 from screen space into object space +// NOTE: We are avoiding calling other raymath functions despite available +RMAPI Vector3 Vector3Unproject(Vector3 source, Matrix projection, Matrix view) +{ + Vector3 result = { 0 }; + + // Calculate unprojected matrix (multiply view matrix by projection matrix) and invert it + Matrix matViewProj = { // MatrixMultiply(view, projection); + view.m0*projection.m0 + view.m1*projection.m4 + view.m2*projection.m8 + view.m3*projection.m12, + view.m0*projection.m1 + view.m1*projection.m5 + view.m2*projection.m9 + view.m3*projection.m13, + view.m0*projection.m2 + view.m1*projection.m6 + view.m2*projection.m10 + view.m3*projection.m14, + view.m0*projection.m3 + view.m1*projection.m7 + view.m2*projection.m11 + view.m3*projection.m15, + view.m4*projection.m0 + view.m5*projection.m4 + view.m6*projection.m8 + view.m7*projection.m12, + view.m4*projection.m1 + view.m5*projection.m5 + view.m6*projection.m9 + view.m7*projection.m13, + view.m4*projection.m2 + view.m5*projection.m6 + view.m6*projection.m10 + view.m7*projection.m14, + view.m4*projection.m3 + view.m5*projection.m7 + view.m6*projection.m11 + view.m7*projection.m15, + view.m8*projection.m0 + view.m9*projection.m4 + view.m10*projection.m8 + view.m11*projection.m12, + view.m8*projection.m1 + view.m9*projection.m5 + view.m10*projection.m9 + view.m11*projection.m13, + view.m8*projection.m2 + view.m9*projection.m6 + view.m10*projection.m10 + view.m11*projection.m14, + view.m8*projection.m3 + view.m9*projection.m7 + view.m10*projection.m11 + view.m11*projection.m15, + view.m12*projection.m0 + view.m13*projection.m4 + view.m14*projection.m8 + view.m15*projection.m12, + view.m12*projection.m1 + view.m13*projection.m5 + view.m14*projection.m9 + view.m15*projection.m13, + view.m12*projection.m2 + view.m13*projection.m6 + view.m14*projection.m10 + view.m15*projection.m14, + view.m12*projection.m3 + view.m13*projection.m7 + view.m14*projection.m11 + view.m15*projection.m15 }; + + // Calculate inverted matrix -> MatrixInvert(matViewProj); + // Cache the matrix values (speed optimization) + float a00 = matViewProj.m0, a01 = matViewProj.m1, a02 = matViewProj.m2, a03 = matViewProj.m3; + float a10 = matViewProj.m4, a11 = matViewProj.m5, a12 = matViewProj.m6, a13 = matViewProj.m7; + float a20 = matViewProj.m8, a21 = matViewProj.m9, a22 = matViewProj.m10, a23 = matViewProj.m11; + float a30 = matViewProj.m12, a31 = matViewProj.m13, a32 = matViewProj.m14, a33 = matViewProj.m15; + + float b00 = a00*a11 - a01*a10; + float b01 = a00*a12 - a02*a10; + float b02 = a00*a13 - a03*a10; + float b03 = a01*a12 - a02*a11; + float b04 = a01*a13 - a03*a11; + float b05 = a02*a13 - a03*a12; + float b06 = a20*a31 - a21*a30; + float b07 = a20*a32 - a22*a30; + float b08 = a20*a33 - a23*a30; + float b09 = a21*a32 - a22*a31; + float b10 = a21*a33 - a23*a31; + float b11 = a22*a33 - a23*a32; + + // Calculate the invert determinant (inlined to avoid double-caching) + float invDet = 1.0f/(b00*b11 - b01*b10 + b02*b09 + b03*b08 - b04*b07 + b05*b06); + + Matrix matViewProjInv = { + (a11*b11 - a12*b10 + a13*b09)*invDet, + (-a01*b11 + a02*b10 - a03*b09)*invDet, + (a31*b05 - a32*b04 + a33*b03)*invDet, + (-a21*b05 + a22*b04 - a23*b03)*invDet, + (-a10*b11 + a12*b08 - a13*b07)*invDet, + (a00*b11 - a02*b08 + a03*b07)*invDet, + (-a30*b05 + a32*b02 - a33*b01)*invDet, + (a20*b05 - a22*b02 + a23*b01)*invDet, + (a10*b10 - a11*b08 + a13*b06)*invDet, + (-a00*b10 + a01*b08 - a03*b06)*invDet, + (a30*b04 - a31*b02 + a33*b00)*invDet, + (-a20*b04 + a21*b02 - a23*b00)*invDet, + (-a10*b09 + a11*b07 - a12*b06)*invDet, + (a00*b09 - a01*b07 + a02*b06)*invDet, + (-a30*b03 + a31*b01 - a32*b00)*invDet, + (a20*b03 - a21*b01 + a22*b00)*invDet }; + + // Create quaternion from source point + Quaternion quat = { source.x, source.y, source.z, 1.0f }; + + // Multiply quat point by unprojecte matrix + Quaternion qtransformed = { // QuaternionTransform(quat, matViewProjInv) + matViewProjInv.m0*quat.x + matViewProjInv.m4*quat.y + matViewProjInv.m8*quat.z + matViewProjInv.m12*quat.w, + matViewProjInv.m1*quat.x + matViewProjInv.m5*quat.y + matViewProjInv.m9*quat.z + matViewProjInv.m13*quat.w, + matViewProjInv.m2*quat.x + matViewProjInv.m6*quat.y + matViewProjInv.m10*quat.z + matViewProjInv.m14*quat.w, + matViewProjInv.m3*quat.x + matViewProjInv.m7*quat.y + matViewProjInv.m11*quat.z + matViewProjInv.m15*quat.w }; + + // Normalized world points in vectors + result.x = qtransformed.x/qtransformed.w; + result.y = qtransformed.y/qtransformed.w; + result.z = qtransformed.z/qtransformed.w; + + return result; +} + +// Get Vector3 as float array +RMAPI float3 Vector3ToFloatV(Vector3 v) +{ + float3 buffer = { 0 }; + + buffer.v[0] = v.x; + buffer.v[1] = v.y; + buffer.v[2] = v.z; + + return buffer; +} + +// Invert the given vector +RMAPI Vector3 Vector3Invert(Vector3 v) +{ + Vector3 result = { 1.0f/v.x, 1.0f/v.y, 1.0f/v.z }; + + return result; +} + +// Clamp the components of the vector between +// min and max values specified by the given vectors +RMAPI Vector3 Vector3Clamp(Vector3 v, Vector3 min, Vector3 max) +{ + Vector3 result = { 0 }; + + result.x = fminf(max.x, fmaxf(min.x, v.x)); + result.y = fminf(max.y, fmaxf(min.y, v.y)); + result.z = fminf(max.z, fmaxf(min.z, v.z)); + + return result; +} + +// Clamp the magnitude of the vector between two values +RMAPI Vector3 Vector3ClampValue(Vector3 v, float min, float max) +{ + Vector3 result = v; + + float length = (v.x*v.x) + (v.y*v.y) + (v.z*v.z); + if (length > 0.0f) + { + length = sqrtf(length); + + float scale = 1; // By default, 1 as the neutral element. + if (length < min) + { + scale = min/length; + } + else if (length > max) + { + scale = max/length; + } + + result.x = v.x*scale; + result.y = v.y*scale; + result.z = v.z*scale; + } + + return result; +} + +// Check whether two given vectors are almost equal +RMAPI int Vector3Equals(Vector3 p, Vector3 q) +{ +#if !defined(EPSILON) + #define EPSILON 0.000001f +#endif + + int result = ((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) && + ((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) && + ((fabsf(p.z - q.z)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z))))); + + return result; +} + +// Compute the direction of a refracted ray +// v: normalized direction of the incoming ray +// n: normalized normal vector of the interface of two optical media +// r: ratio of the refractive index of the medium from where the ray comes +// to the refractive index of the medium on the other side of the surface +RMAPI Vector3 Vector3Refract(Vector3 v, Vector3 n, float r) +{ + Vector3 result = { 0 }; + + float dot = v.x*n.x + v.y*n.y + v.z*n.z; + float d = 1.0f - r*r*(1.0f - dot*dot); + + if (d >= 0.0f) + { + d = sqrtf(d); + v.x = r*v.x - (r*dot + d)*n.x; + v.y = r*v.y - (r*dot + d)*n.y; + v.z = r*v.z - (r*dot + d)*n.z; + + result = v; + } + + return result; +} + + +//---------------------------------------------------------------------------------- +// Module Functions Definition - Vector4 math +//---------------------------------------------------------------------------------- + +RMAPI Vector4 Vector4Zero(void) +{ + Vector4 result = { 0.0f, 0.0f, 0.0f, 0.0f }; + return result; +} + +RMAPI Vector4 Vector4One(void) +{ + Vector4 result = { 1.0f, 1.0f, 1.0f, 1.0f }; + return result; +} + +RMAPI Vector4 Vector4Add(Vector4 v1, Vector4 v2) +{ + Vector4 result = { + v1.x + v2.x, + v1.y + v2.y, + v1.z + v2.z, + v1.w + v2.w + }; + return result; +} + +RMAPI Vector4 Vector4AddValue(Vector4 v, float add) +{ + Vector4 result = { + v.x + add, + v.y + add, + v.z + add, + v.w + add + }; + return result; +} + +RMAPI Vector4 Vector4Subtract(Vector4 v1, Vector4 v2) +{ + Vector4 result = { + v1.x - v2.x, + v1.y - v2.y, + v1.z - v2.z, + v1.w - v2.w + }; + return result; +} + +RMAPI Vector4 Vector4SubtractValue(Vector4 v, float add) +{ + Vector4 result = { + v.x - add, + v.y - add, + v.z - add, + v.w - add + }; + return result; +} + +RMAPI float Vector4Length(Vector4 v) +{ + float result = sqrtf((v.x*v.x) + (v.y*v.y) + (v.z*v.z) + (v.w*v.w)); + return result; +} + +RMAPI float Vector4LengthSqr(Vector4 v) +{ + float result = (v.x*v.x) + (v.y*v.y) + (v.z*v.z) + (v.w*v.w); + return result; +} + +RMAPI float Vector4DotProduct(Vector4 v1, Vector4 v2) +{ + float result = (v1.x*v2.x + v1.y*v2.y + v1.z*v2.z + v1.w*v2.w); + return result; +} + +// Calculate distance between two vectors +RMAPI float Vector4Distance(Vector4 v1, Vector4 v2) +{ + float result = sqrtf( + (v1.x - v2.x)*(v1.x - v2.x) + (v1.y - v2.y)*(v1.y - v2.y) + + (v1.z - v2.z)*(v1.z - v2.z) + (v1.w - v2.w)*(v1.w - v2.w)); + return result; +} + +// Calculate square distance between two vectors +RMAPI float Vector4DistanceSqr(Vector4 v1, Vector4 v2) +{ + float result = + (v1.x - v2.x)*(v1.x - v2.x) + (v1.y - v2.y)*(v1.y - v2.y) + + (v1.z - v2.z)*(v1.z - v2.z) + (v1.w - v2.w)*(v1.w - v2.w); + + return result; +} + +RMAPI Vector4 Vector4Scale(Vector4 v, float scale) +{ + Vector4 result = { v.x*scale, v.y*scale, v.z*scale, v.w*scale }; + return result; +} + +// Multiply vector by vector +RMAPI Vector4 Vector4Multiply(Vector4 v1, Vector4 v2) +{ + Vector4 result = { v1.x*v2.x, v1.y*v2.y, v1.z*v2.z, v1.w*v2.w }; + return result; +} + +// Negate vector +RMAPI Vector4 Vector4Negate(Vector4 v) +{ + Vector4 result = { -v.x, -v.y, -v.z, -v.w }; + return result; +} + +// Divide vector by vector +RMAPI Vector4 Vector4Divide(Vector4 v1, Vector4 v2) +{ + Vector4 result = { v1.x/v2.x, v1.y/v2.y, v1.z/v2.z, v1.w/v2.w }; + return result; +} + +// Normalize provided vector +RMAPI Vector4 Vector4Normalize(Vector4 v) +{ + Vector4 result = { 0 }; + float length = sqrtf((v.x*v.x) + (v.y*v.y) + (v.z*v.z) + (v.w*v.w)); + + if (length > 0) + { + float ilength = 1.0f/length; + result.x = v.x*ilength; + result.y = v.y*ilength; + result.z = v.z*ilength; + result.w = v.w*ilength; + } + + return result; +} + +// Get min value for each pair of components +RMAPI Vector4 Vector4Min(Vector4 v1, Vector4 v2) +{ + Vector4 result = { 0 }; + + result.x = fminf(v1.x, v2.x); + result.y = fminf(v1.y, v2.y); + result.z = fminf(v1.z, v2.z); + result.w = fminf(v1.w, v2.w); + + return result; +} + +// Get max value for each pair of components +RMAPI Vector4 Vector4Max(Vector4 v1, Vector4 v2) +{ + Vector4 result = { 0 }; + + result.x = fmaxf(v1.x, v2.x); + result.y = fmaxf(v1.y, v2.y); + result.z = fmaxf(v1.z, v2.z); + result.w = fmaxf(v1.w, v2.w); + + return result; +} + +// Calculate linear interpolation between two vectors +RMAPI Vector4 Vector4Lerp(Vector4 v1, Vector4 v2, float amount) +{ + Vector4 result = { 0 }; + + result.x = v1.x + amount*(v2.x - v1.x); + result.y = v1.y + amount*(v2.y - v1.y); + result.z = v1.z + amount*(v2.z - v1.z); + result.w = v1.w + amount*(v2.w - v1.w); + + return result; +} + +// Move Vector towards target +RMAPI Vector4 Vector4MoveTowards(Vector4 v, Vector4 target, float maxDistance) +{ + Vector4 result = { 0 }; + + float dx = target.x - v.x; + float dy = target.y - v.y; + float dz = target.z - v.z; + float dw = target.w - v.w; + float value = (dx*dx) + (dy*dy) + (dz*dz) + (dw*dw); + + if ((value == 0) || ((maxDistance >= 0) && (value <= maxDistance*maxDistance))) return target; + + float dist = sqrtf(value); + + result.x = v.x + dx/dist*maxDistance; + result.y = v.y + dy/dist*maxDistance; + result.z = v.z + dz/dist*maxDistance; + result.w = v.w + dw/dist*maxDistance; + + return result; +} + +// Invert the given vector +RMAPI Vector4 Vector4Invert(Vector4 v) +{ + Vector4 result = { 1.0f/v.x, 1.0f/v.y, 1.0f/v.z, 1.0f/v.w }; + return result; +} + +// Check whether two given vectors are almost equal +RMAPI int Vector4Equals(Vector4 p, Vector4 q) +{ +#if !defined(EPSILON) + #define EPSILON 0.000001f +#endif + + int result = ((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) && + ((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) && + ((fabsf(p.z - q.z)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z))))) && + ((fabsf(p.w - q.w)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.w), fabsf(q.w))))); + return result; +} + + +//---------------------------------------------------------------------------------- +// Module Functions Definition - Matrix math +//---------------------------------------------------------------------------------- + +// Compute matrix determinant +RMAPI float MatrixDeterminant(Matrix mat) +{ + float result = 0.0f; + + // Cache the matrix values (speed optimization) + float a00 = mat.m0, a01 = mat.m1, a02 = mat.m2, a03 = mat.m3; + float a10 = mat.m4, a11 = mat.m5, a12 = mat.m6, a13 = mat.m7; + float a20 = mat.m8, a21 = mat.m9, a22 = mat.m10, a23 = mat.m11; + float a30 = mat.m12, a31 = mat.m13, a32 = mat.m14, a33 = mat.m15; + + result = a30*a21*a12*a03 - a20*a31*a12*a03 - a30*a11*a22*a03 + a10*a31*a22*a03 + + a20*a11*a32*a03 - a10*a21*a32*a03 - a30*a21*a02*a13 + a20*a31*a02*a13 + + a30*a01*a22*a13 - a00*a31*a22*a13 - a20*a01*a32*a13 + a00*a21*a32*a13 + + a30*a11*a02*a23 - a10*a31*a02*a23 - a30*a01*a12*a23 + a00*a31*a12*a23 + + a10*a01*a32*a23 - a00*a11*a32*a23 - a20*a11*a02*a33 + a10*a21*a02*a33 + + a20*a01*a12*a33 - a00*a21*a12*a33 - a10*a01*a22*a33 + a00*a11*a22*a33; + + return result; +} + +// Get the trace of the matrix (sum of the values along the diagonal) +RMAPI float MatrixTrace(Matrix mat) +{ + float result = (mat.m0 + mat.m5 + mat.m10 + mat.m15); + + return result; +} + +// Transposes provided matrix +RMAPI Matrix MatrixTranspose(Matrix mat) +{ + Matrix result = { 0 }; + + result.m0 = mat.m0; + result.m1 = mat.m4; + result.m2 = mat.m8; + result.m3 = mat.m12; + result.m4 = mat.m1; + result.m5 = mat.m5; + result.m6 = mat.m9; + result.m7 = mat.m13; + result.m8 = mat.m2; + result.m9 = mat.m6; + result.m10 = mat.m10; + result.m11 = mat.m14; + result.m12 = mat.m3; + result.m13 = mat.m7; + result.m14 = mat.m11; + result.m15 = mat.m15; + + return result; +} + +// Invert provided matrix +RMAPI Matrix MatrixInvert(Matrix mat) +{ + Matrix result = { 0 }; + + // Cache the matrix values (speed optimization) + float a00 = mat.m0, a01 = mat.m1, a02 = mat.m2, a03 = mat.m3; + float a10 = mat.m4, a11 = mat.m5, a12 = mat.m6, a13 = mat.m7; + float a20 = mat.m8, a21 = mat.m9, a22 = mat.m10, a23 = mat.m11; + float a30 = mat.m12, a31 = mat.m13, a32 = mat.m14, a33 = mat.m15; + + float b00 = a00*a11 - a01*a10; + float b01 = a00*a12 - a02*a10; + float b02 = a00*a13 - a03*a10; + float b03 = a01*a12 - a02*a11; + float b04 = a01*a13 - a03*a11; + float b05 = a02*a13 - a03*a12; + float b06 = a20*a31 - a21*a30; + float b07 = a20*a32 - a22*a30; + float b08 = a20*a33 - a23*a30; + float b09 = a21*a32 - a22*a31; + float b10 = a21*a33 - a23*a31; + float b11 = a22*a33 - a23*a32; + + // Calculate the invert determinant (inlined to avoid double-caching) + float invDet = 1.0f/(b00*b11 - b01*b10 + b02*b09 + b03*b08 - b04*b07 + b05*b06); + + result.m0 = (a11*b11 - a12*b10 + a13*b09)*invDet; + result.m1 = (-a01*b11 + a02*b10 - a03*b09)*invDet; + result.m2 = (a31*b05 - a32*b04 + a33*b03)*invDet; + result.m3 = (-a21*b05 + a22*b04 - a23*b03)*invDet; + result.m4 = (-a10*b11 + a12*b08 - a13*b07)*invDet; + result.m5 = (a00*b11 - a02*b08 + a03*b07)*invDet; + result.m6 = (-a30*b05 + a32*b02 - a33*b01)*invDet; + result.m7 = (a20*b05 - a22*b02 + a23*b01)*invDet; + result.m8 = (a10*b10 - a11*b08 + a13*b06)*invDet; + result.m9 = (-a00*b10 + a01*b08 - a03*b06)*invDet; + result.m10 = (a30*b04 - a31*b02 + a33*b00)*invDet; + result.m11 = (-a20*b04 + a21*b02 - a23*b00)*invDet; + result.m12 = (-a10*b09 + a11*b07 - a12*b06)*invDet; + result.m13 = (a00*b09 - a01*b07 + a02*b06)*invDet; + result.m14 = (-a30*b03 + a31*b01 - a32*b00)*invDet; + result.m15 = (a20*b03 - a21*b01 + a22*b00)*invDet; + + return result; +} + +// Get identity matrix +RMAPI Matrix MatrixIdentity(void) +{ + Matrix result = { 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f }; + + return result; +} + +// Add two matrices +RMAPI Matrix MatrixAdd(Matrix left, Matrix right) +{ + Matrix result = { 0 }; + + result.m0 = left.m0 + right.m0; + result.m1 = left.m1 + right.m1; + result.m2 = left.m2 + right.m2; + result.m3 = left.m3 + right.m3; + result.m4 = left.m4 + right.m4; + result.m5 = left.m5 + right.m5; + result.m6 = left.m6 + right.m6; + result.m7 = left.m7 + right.m7; + result.m8 = left.m8 + right.m8; + result.m9 = left.m9 + right.m9; + result.m10 = left.m10 + right.m10; + result.m11 = left.m11 + right.m11; + result.m12 = left.m12 + right.m12; + result.m13 = left.m13 + right.m13; + result.m14 = left.m14 + right.m14; + result.m15 = left.m15 + right.m15; + + return result; +} + +// Subtract two matrices (left - right) +RMAPI Matrix MatrixSubtract(Matrix left, Matrix right) +{ + Matrix result = { 0 }; + + result.m0 = left.m0 - right.m0; + result.m1 = left.m1 - right.m1; + result.m2 = left.m2 - right.m2; + result.m3 = left.m3 - right.m3; + result.m4 = left.m4 - right.m4; + result.m5 = left.m5 - right.m5; + result.m6 = left.m6 - right.m6; + result.m7 = left.m7 - right.m7; + result.m8 = left.m8 - right.m8; + result.m9 = left.m9 - right.m9; + result.m10 = left.m10 - right.m10; + result.m11 = left.m11 - right.m11; + result.m12 = left.m12 - right.m12; + result.m13 = left.m13 - right.m13; + result.m14 = left.m14 - right.m14; + result.m15 = left.m15 - right.m15; + + return result; +} + +// Get two matrix multiplication +// NOTE: When multiplying matrices... the order matters! +RMAPI Matrix MatrixMultiply(Matrix left, Matrix right) +{ + Matrix result = { 0 }; + + result.m0 = left.m0*right.m0 + left.m1*right.m4 + left.m2*right.m8 + left.m3*right.m12; + result.m1 = left.m0*right.m1 + left.m1*right.m5 + left.m2*right.m9 + left.m3*right.m13; + result.m2 = left.m0*right.m2 + left.m1*right.m6 + left.m2*right.m10 + left.m3*right.m14; + result.m3 = left.m0*right.m3 + left.m1*right.m7 + left.m2*right.m11 + left.m3*right.m15; + result.m4 = left.m4*right.m0 + left.m5*right.m4 + left.m6*right.m8 + left.m7*right.m12; + result.m5 = left.m4*right.m1 + left.m5*right.m5 + left.m6*right.m9 + left.m7*right.m13; + result.m6 = left.m4*right.m2 + left.m5*right.m6 + left.m6*right.m10 + left.m7*right.m14; + result.m7 = left.m4*right.m3 + left.m5*right.m7 + left.m6*right.m11 + left.m7*right.m15; + result.m8 = left.m8*right.m0 + left.m9*right.m4 + left.m10*right.m8 + left.m11*right.m12; + result.m9 = left.m8*right.m1 + left.m9*right.m5 + left.m10*right.m9 + left.m11*right.m13; + result.m10 = left.m8*right.m2 + left.m9*right.m6 + left.m10*right.m10 + left.m11*right.m14; + result.m11 = left.m8*right.m3 + left.m9*right.m7 + left.m10*right.m11 + left.m11*right.m15; + result.m12 = left.m12*right.m0 + left.m13*right.m4 + left.m14*right.m8 + left.m15*right.m12; + result.m13 = left.m12*right.m1 + left.m13*right.m5 + left.m14*right.m9 + left.m15*right.m13; + result.m14 = left.m12*right.m2 + left.m13*right.m6 + left.m14*right.m10 + left.m15*right.m14; + result.m15 = left.m12*right.m3 + left.m13*right.m7 + left.m14*right.m11 + left.m15*right.m15; + + return result; +} + +// Get translation matrix +RMAPI Matrix MatrixTranslate(float x, float y, float z) +{ + Matrix result = { 1.0f, 0.0f, 0.0f, x, + 0.0f, 1.0f, 0.0f, y, + 0.0f, 0.0f, 1.0f, z, + 0.0f, 0.0f, 0.0f, 1.0f }; + + return result; +} + +// Create rotation matrix from axis and angle +// NOTE: Angle should be provided in radians +RMAPI Matrix MatrixRotate(Vector3 axis, float angle) +{ + Matrix result = { 0 }; + + float x = axis.x, y = axis.y, z = axis.z; + + float lengthSquared = x*x + y*y + z*z; + + if ((lengthSquared != 1.0f) && (lengthSquared != 0.0f)) + { + float ilength = 1.0f/sqrtf(lengthSquared); + x *= ilength; + y *= ilength; + z *= ilength; + } + + float sinres = sinf(angle); + float cosres = cosf(angle); + float t = 1.0f - cosres; + + result.m0 = x*x*t + cosres; + result.m1 = y*x*t + z*sinres; + result.m2 = z*x*t - y*sinres; + result.m3 = 0.0f; + + result.m4 = x*y*t - z*sinres; + result.m5 = y*y*t + cosres; + result.m6 = z*y*t + x*sinres; + result.m7 = 0.0f; + + result.m8 = x*z*t + y*sinres; + result.m9 = y*z*t - x*sinres; + result.m10 = z*z*t + cosres; + result.m11 = 0.0f; + + result.m12 = 0.0f; + result.m13 = 0.0f; + result.m14 = 0.0f; + result.m15 = 1.0f; + + return result; +} + +// Get x-rotation matrix +// NOTE: Angle must be provided in radians +RMAPI Matrix MatrixRotateX(float angle) +{ + Matrix result = { 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f }; // MatrixIdentity() + + float cosres = cosf(angle); + float sinres = sinf(angle); + + result.m5 = cosres; + result.m6 = sinres; + result.m9 = -sinres; + result.m10 = cosres; + + return result; +} + +// Get y-rotation matrix +// NOTE: Angle must be provided in radians +RMAPI Matrix MatrixRotateY(float angle) +{ + Matrix result = { 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f }; // MatrixIdentity() + + float cosres = cosf(angle); + float sinres = sinf(angle); + + result.m0 = cosres; + result.m2 = -sinres; + result.m8 = sinres; + result.m10 = cosres; + + return result; +} + +// Get z-rotation matrix +// NOTE: Angle must be provided in radians +RMAPI Matrix MatrixRotateZ(float angle) +{ + Matrix result = { 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f }; // MatrixIdentity() + + float cosres = cosf(angle); + float sinres = sinf(angle); + + result.m0 = cosres; + result.m1 = sinres; + result.m4 = -sinres; + result.m5 = cosres; + + return result; +} + + +// Get xyz-rotation matrix +// NOTE: Angle must be provided in radians +RMAPI Matrix MatrixRotateXYZ(Vector3 angle) +{ + Matrix result = { 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f }; // MatrixIdentity() + + float cosz = cosf(-angle.z); + float sinz = sinf(-angle.z); + float cosy = cosf(-angle.y); + float siny = sinf(-angle.y); + float cosx = cosf(-angle.x); + float sinx = sinf(-angle.x); + + result.m0 = cosz*cosy; + result.m1 = (cosz*siny*sinx) - (sinz*cosx); + result.m2 = (cosz*siny*cosx) + (sinz*sinx); + + result.m4 = sinz*cosy; + result.m5 = (sinz*siny*sinx) + (cosz*cosx); + result.m6 = (sinz*siny*cosx) - (cosz*sinx); + + result.m8 = -siny; + result.m9 = cosy*sinx; + result.m10= cosy*cosx; + + return result; +} + +// Get zyx-rotation matrix +// NOTE: Angle must be provided in radians +RMAPI Matrix MatrixRotateZYX(Vector3 angle) +{ + Matrix result = { 0 }; + + float cz = cosf(angle.z); + float sz = sinf(angle.z); + float cy = cosf(angle.y); + float sy = sinf(angle.y); + float cx = cosf(angle.x); + float sx = sinf(angle.x); + + result.m0 = cz*cy; + result.m4 = cz*sy*sx - cx*sz; + result.m8 = sz*sx + cz*cx*sy; + result.m12 = 0; + + result.m1 = cy*sz; + result.m5 = cz*cx + sz*sy*sx; + result.m9 = cx*sz*sy - cz*sx; + result.m13 = 0; + + result.m2 = -sy; + result.m6 = cy*sx; + result.m10 = cy*cx; + result.m14 = 0; + + result.m3 = 0; + result.m7 = 0; + result.m11 = 0; + result.m15 = 1; + + return result; +} + +// Get scaling matrix +RMAPI Matrix MatrixScale(float x, float y, float z) +{ + Matrix result = { x, 0.0f, 0.0f, 0.0f, + 0.0f, y, 0.0f, 0.0f, + 0.0f, 0.0f, z, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f }; + + return result; +} + +// Get perspective projection matrix +RMAPI Matrix MatrixFrustum(double left, double right, double bottom, double top, double nearPlane, double farPlane) +{ + Matrix result = { 0 }; + + float rl = (float)(right - left); + float tb = (float)(top - bottom); + float fn = (float)(farPlane - nearPlane); + + result.m0 = ((float)nearPlane*2.0f)/rl; + result.m1 = 0.0f; + result.m2 = 0.0f; + result.m3 = 0.0f; + + result.m4 = 0.0f; + result.m5 = ((float)nearPlane*2.0f)/tb; + result.m6 = 0.0f; + result.m7 = 0.0f; + + result.m8 = ((float)right + (float)left)/rl; + result.m9 = ((float)top + (float)bottom)/tb; + result.m10 = -((float)farPlane + (float)nearPlane)/fn; + result.m11 = -1.0f; + + result.m12 = 0.0f; + result.m13 = 0.0f; + result.m14 = -((float)farPlane*(float)nearPlane*2.0f)/fn; + result.m15 = 0.0f; + + return result; +} + +// Get perspective projection matrix +// NOTE: Fovy angle must be provided in radians +RMAPI Matrix MatrixPerspective(double fovY, double aspect, double nearPlane, double farPlane) +{ + Matrix result = { 0 }; + + double top = nearPlane*tan(fovY*0.5); + double bottom = -top; + double right = top*aspect; + double left = -right; + + // MatrixFrustum(-right, right, -top, top, near, far); + float rl = (float)(right - left); + float tb = (float)(top - bottom); + float fn = (float)(farPlane - nearPlane); + + result.m0 = ((float)nearPlane*2.0f)/rl; + result.m5 = ((float)nearPlane*2.0f)/tb; + result.m8 = ((float)right + (float)left)/rl; + result.m9 = ((float)top + (float)bottom)/tb; + result.m10 = -((float)farPlane + (float)nearPlane)/fn; + result.m11 = -1.0f; + result.m14 = -((float)farPlane*(float)nearPlane*2.0f)/fn; + + return result; +} + +// Get orthographic projection matrix +RMAPI Matrix MatrixOrtho(double left, double right, double bottom, double top, double nearPlane, double farPlane) +{ + Matrix result = { 0 }; + + float rl = (float)(right - left); + float tb = (float)(top - bottom); + float fn = (float)(farPlane - nearPlane); + + result.m0 = 2.0f/rl; + result.m1 = 0.0f; + result.m2 = 0.0f; + result.m3 = 0.0f; + result.m4 = 0.0f; + result.m5 = 2.0f/tb; + result.m6 = 0.0f; + result.m7 = 0.0f; + result.m8 = 0.0f; + result.m9 = 0.0f; + result.m10 = -2.0f/fn; + result.m11 = 0.0f; + result.m12 = -((float)left + (float)right)/rl; + result.m13 = -((float)top + (float)bottom)/tb; + result.m14 = -((float)farPlane + (float)nearPlane)/fn; + result.m15 = 1.0f; + + return result; +} + +// Get camera look-at matrix (view matrix) +RMAPI Matrix MatrixLookAt(Vector3 eye, Vector3 target, Vector3 up) +{ + Matrix result = { 0 }; + + float length = 0.0f; + float ilength = 0.0f; + + // Vector3Subtract(eye, target) + Vector3 vz = { eye.x - target.x, eye.y - target.y, eye.z - target.z }; + + // Vector3Normalize(vz) + Vector3 v = vz; + length = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z); + if (length == 0.0f) length = 1.0f; + ilength = 1.0f/length; + vz.x *= ilength; + vz.y *= ilength; + vz.z *= ilength; + + // Vector3CrossProduct(up, vz) + Vector3 vx = { up.y*vz.z - up.z*vz.y, up.z*vz.x - up.x*vz.z, up.x*vz.y - up.y*vz.x }; + + // Vector3Normalize(x) + v = vx; + length = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z); + if (length == 0.0f) length = 1.0f; + ilength = 1.0f/length; + vx.x *= ilength; + vx.y *= ilength; + vx.z *= ilength; + + // Vector3CrossProduct(vz, vx) + Vector3 vy = { vz.y*vx.z - vz.z*vx.y, vz.z*vx.x - vz.x*vx.z, vz.x*vx.y - vz.y*vx.x }; + + result.m0 = vx.x; + result.m1 = vy.x; + result.m2 = vz.x; + result.m3 = 0.0f; + result.m4 = vx.y; + result.m5 = vy.y; + result.m6 = vz.y; + result.m7 = 0.0f; + result.m8 = vx.z; + result.m9 = vy.z; + result.m10 = vz.z; + result.m11 = 0.0f; + result.m12 = -(vx.x*eye.x + vx.y*eye.y + vx.z*eye.z); // Vector3DotProduct(vx, eye) + result.m13 = -(vy.x*eye.x + vy.y*eye.y + vy.z*eye.z); // Vector3DotProduct(vy, eye) + result.m14 = -(vz.x*eye.x + vz.y*eye.y + vz.z*eye.z); // Vector3DotProduct(vz, eye) + result.m15 = 1.0f; + + return result; +} + +// Get float array of matrix data +RMAPI float16 MatrixToFloatV(Matrix mat) +{ + float16 result = { 0 }; + + result.v[0] = mat.m0; + result.v[1] = mat.m1; + result.v[2] = mat.m2; + result.v[3] = mat.m3; + result.v[4] = mat.m4; + result.v[5] = mat.m5; + result.v[6] = mat.m6; + result.v[7] = mat.m7; + result.v[8] = mat.m8; + result.v[9] = mat.m9; + result.v[10] = mat.m10; + result.v[11] = mat.m11; + result.v[12] = mat.m12; + result.v[13] = mat.m13; + result.v[14] = mat.m14; + result.v[15] = mat.m15; + + return result; +} + +//---------------------------------------------------------------------------------- +// Module Functions Definition - Quaternion math +//---------------------------------------------------------------------------------- + +// Add two quaternions +RMAPI Quaternion QuaternionAdd(Quaternion q1, Quaternion q2) +{ + Quaternion result = {q1.x + q2.x, q1.y + q2.y, q1.z + q2.z, q1.w + q2.w}; + + return result; +} + +// Add quaternion and float value +RMAPI Quaternion QuaternionAddValue(Quaternion q, float add) +{ + Quaternion result = {q.x + add, q.y + add, q.z + add, q.w + add}; + + return result; +} + +// Subtract two quaternions +RMAPI Quaternion QuaternionSubtract(Quaternion q1, Quaternion q2) +{ + Quaternion result = {q1.x - q2.x, q1.y - q2.y, q1.z - q2.z, q1.w - q2.w}; + + return result; +} + +// Subtract quaternion and float value +RMAPI Quaternion QuaternionSubtractValue(Quaternion q, float sub) +{ + Quaternion result = {q.x - sub, q.y - sub, q.z - sub, q.w - sub}; + + return result; +} + +// Get identity quaternion +RMAPI Quaternion QuaternionIdentity(void) +{ + Quaternion result = { 0.0f, 0.0f, 0.0f, 1.0f }; + + return result; +} + +// Computes the length of a quaternion +RMAPI float QuaternionLength(Quaternion q) +{ + float result = sqrtf(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w); + + return result; +} + +// Normalize provided quaternion +RMAPI Quaternion QuaternionNormalize(Quaternion q) +{ + Quaternion result = { 0 }; + + float length = sqrtf(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w); + if (length == 0.0f) length = 1.0f; + float ilength = 1.0f/length; + + result.x = q.x*ilength; + result.y = q.y*ilength; + result.z = q.z*ilength; + result.w = q.w*ilength; + + return result; +} + +// Invert provided quaternion +RMAPI Quaternion QuaternionInvert(Quaternion q) +{ + Quaternion result = q; + + float lengthSq = q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w; + + if (lengthSq != 0.0f) + { + float invLength = 1.0f/lengthSq; + + result.x *= -invLength; + result.y *= -invLength; + result.z *= -invLength; + result.w *= invLength; + } + + return result; +} + +// Calculate two quaternion multiplication +RMAPI Quaternion QuaternionMultiply(Quaternion q1, Quaternion q2) +{ + Quaternion result = { 0 }; + + float qax = q1.x, qay = q1.y, qaz = q1.z, qaw = q1.w; + float qbx = q2.x, qby = q2.y, qbz = q2.z, qbw = q2.w; + + result.x = qax*qbw + qaw*qbx + qay*qbz - qaz*qby; + result.y = qay*qbw + qaw*qby + qaz*qbx - qax*qbz; + result.z = qaz*qbw + qaw*qbz + qax*qby - qay*qbx; + result.w = qaw*qbw - qax*qbx - qay*qby - qaz*qbz; + + return result; +} + +// Scale quaternion by float value +RMAPI Quaternion QuaternionScale(Quaternion q, float mul) +{ + Quaternion result = { 0 }; + + result.x = q.x*mul; + result.y = q.y*mul; + result.z = q.z*mul; + result.w = q.w*mul; + + return result; +} + +// Divide two quaternions +RMAPI Quaternion QuaternionDivide(Quaternion q1, Quaternion q2) +{ + Quaternion result = { q1.x/q2.x, q1.y/q2.y, q1.z/q2.z, q1.w/q2.w }; + + return result; +} + +// Calculate linear interpolation between two quaternions +RMAPI Quaternion QuaternionLerp(Quaternion q1, Quaternion q2, float amount) +{ + Quaternion result = { 0 }; + + result.x = q1.x + amount*(q2.x - q1.x); + result.y = q1.y + amount*(q2.y - q1.y); + result.z = q1.z + amount*(q2.z - q1.z); + result.w = q1.w + amount*(q2.w - q1.w); + + return result; +} + +// Calculate slerp-optimized interpolation between two quaternions +RMAPI Quaternion QuaternionNlerp(Quaternion q1, Quaternion q2, float amount) +{ + Quaternion result = { 0 }; + + // QuaternionLerp(q1, q2, amount) + result.x = q1.x + amount*(q2.x - q1.x); + result.y = q1.y + amount*(q2.y - q1.y); + result.z = q1.z + amount*(q2.z - q1.z); + result.w = q1.w + amount*(q2.w - q1.w); + + // QuaternionNormalize(q); + Quaternion q = result; + float length = sqrtf(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w); + if (length == 0.0f) length = 1.0f; + float ilength = 1.0f/length; + + result.x = q.x*ilength; + result.y = q.y*ilength; + result.z = q.z*ilength; + result.w = q.w*ilength; + + return result; +} + +// Calculates spherical linear interpolation between two quaternions +RMAPI Quaternion QuaternionSlerp(Quaternion q1, Quaternion q2, float amount) +{ + Quaternion result = { 0 }; + +#if !defined(EPSILON) + #define EPSILON 0.000001f +#endif + + float cosHalfTheta = q1.x*q2.x + q1.y*q2.y + q1.z*q2.z + q1.w*q2.w; + + if (cosHalfTheta < 0) + { + q2.x = -q2.x; q2.y = -q2.y; q2.z = -q2.z; q2.w = -q2.w; + cosHalfTheta = -cosHalfTheta; + } + + if (fabsf(cosHalfTheta) >= 1.0f) result = q1; + else if (cosHalfTheta > 0.95f) result = QuaternionNlerp(q1, q2, amount); + else + { + float halfTheta = acosf(cosHalfTheta); + float sinHalfTheta = sqrtf(1.0f - cosHalfTheta*cosHalfTheta); + + if (fabsf(sinHalfTheta) < EPSILON) + { + result.x = (q1.x*0.5f + q2.x*0.5f); + result.y = (q1.y*0.5f + q2.y*0.5f); + result.z = (q1.z*0.5f + q2.z*0.5f); + result.w = (q1.w*0.5f + q2.w*0.5f); + } + else + { + float ratioA = sinf((1 - amount)*halfTheta)/sinHalfTheta; + float ratioB = sinf(amount*halfTheta)/sinHalfTheta; + + result.x = (q1.x*ratioA + q2.x*ratioB); + result.y = (q1.y*ratioA + q2.y*ratioB); + result.z = (q1.z*ratioA + q2.z*ratioB); + result.w = (q1.w*ratioA + q2.w*ratioB); + } + } + + return result; +} + +// Calculate quaternion cubic spline interpolation using Cubic Hermite Spline algorithm +// as described in the GLTF 2.0 specification: https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#interpolation-cubic +RMAPI Quaternion QuaternionCubicHermiteSpline(Quaternion q1, Quaternion outTangent1, Quaternion q2, Quaternion inTangent2, float t) +{ + float t2 = t*t; + float t3 = t2*t; + float h00 = 2*t3 - 3*t2 + 1; + float h10 = t3 - 2*t2 + t; + float h01 = -2*t3 + 3*t2; + float h11 = t3 - t2; + + Quaternion p0 = QuaternionScale(q1, h00); + Quaternion m0 = QuaternionScale(outTangent1, h10); + Quaternion p1 = QuaternionScale(q2, h01); + Quaternion m1 = QuaternionScale(inTangent2, h11); + + Quaternion result = { 0 }; + + result = QuaternionAdd(p0, m0); + result = QuaternionAdd(result, p1); + result = QuaternionAdd(result, m1); + result = QuaternionNormalize(result); + + return result; +} + +// Calculate quaternion based on the rotation from one vector to another +RMAPI Quaternion QuaternionFromVector3ToVector3(Vector3 from, Vector3 to) +{ + Quaternion result = { 0 }; + + float cos2Theta = (from.x*to.x + from.y*to.y + from.z*to.z); // Vector3DotProduct(from, to) + Vector3 cross = { from.y*to.z - from.z*to.y, from.z*to.x - from.x*to.z, from.x*to.y - from.y*to.x }; // Vector3CrossProduct(from, to) + + result.x = cross.x; + result.y = cross.y; + result.z = cross.z; + result.w = 1.0f + cos2Theta; + + // QuaternionNormalize(q); + // NOTE: Normalize to essentially nlerp the original and identity to 0.5 + Quaternion q = result; + float length = sqrtf(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w); + if (length == 0.0f) length = 1.0f; + float ilength = 1.0f/length; + + result.x = q.x*ilength; + result.y = q.y*ilength; + result.z = q.z*ilength; + result.w = q.w*ilength; + + return result; +} + +// Get a quaternion for a given rotation matrix +RMAPI Quaternion QuaternionFromMatrix(Matrix mat) +{ + Quaternion result = { 0 }; + + float fourWSquaredMinus1 = mat.m0 + mat.m5 + mat.m10; + float fourXSquaredMinus1 = mat.m0 - mat.m5 - mat.m10; + float fourYSquaredMinus1 = mat.m5 - mat.m0 - mat.m10; + float fourZSquaredMinus1 = mat.m10 - mat.m0 - mat.m5; + + int biggestIndex = 0; + float fourBiggestSquaredMinus1 = fourWSquaredMinus1; + if (fourXSquaredMinus1 > fourBiggestSquaredMinus1) + { + fourBiggestSquaredMinus1 = fourXSquaredMinus1; + biggestIndex = 1; + } + + if (fourYSquaredMinus1 > fourBiggestSquaredMinus1) + { + fourBiggestSquaredMinus1 = fourYSquaredMinus1; + biggestIndex = 2; + } + + if (fourZSquaredMinus1 > fourBiggestSquaredMinus1) + { + fourBiggestSquaredMinus1 = fourZSquaredMinus1; + biggestIndex = 3; + } + + float biggestVal = sqrtf(fourBiggestSquaredMinus1 + 1.0f)*0.5f; + float mult = 0.25f/biggestVal; + + switch (biggestIndex) + { + case 0: + result.w = biggestVal; + result.x = (mat.m6 - mat.m9)*mult; + result.y = (mat.m8 - mat.m2)*mult; + result.z = (mat.m1 - mat.m4)*mult; + break; + case 1: + result.x = biggestVal; + result.w = (mat.m6 - mat.m9)*mult; + result.y = (mat.m1 + mat.m4)*mult; + result.z = (mat.m8 + mat.m2)*mult; + break; + case 2: + result.y = biggestVal; + result.w = (mat.m8 - mat.m2)*mult; + result.x = (mat.m1 + mat.m4)*mult; + result.z = (mat.m6 + mat.m9)*mult; + break; + case 3: + result.z = biggestVal; + result.w = (mat.m1 - mat.m4)*mult; + result.x = (mat.m8 + mat.m2)*mult; + result.y = (mat.m6 + mat.m9)*mult; + break; + } + + return result; +} + +// Get a matrix for a given quaternion +RMAPI Matrix QuaternionToMatrix(Quaternion q) +{ + Matrix result = { 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f }; // MatrixIdentity() + + float a2 = q.x*q.x; + float b2 = q.y*q.y; + float c2 = q.z*q.z; + float ac = q.x*q.z; + float ab = q.x*q.y; + float bc = q.y*q.z; + float ad = q.w*q.x; + float bd = q.w*q.y; + float cd = q.w*q.z; + + result.m0 = 1 - 2*(b2 + c2); + result.m1 = 2*(ab + cd); + result.m2 = 2*(ac - bd); + + result.m4 = 2*(ab - cd); + result.m5 = 1 - 2*(a2 + c2); + result.m6 = 2*(bc + ad); + + result.m8 = 2*(ac + bd); + result.m9 = 2*(bc - ad); + result.m10 = 1 - 2*(a2 + b2); + + return result; +} + +// Get rotation quaternion for an angle and axis +// NOTE: Angle must be provided in radians +RMAPI Quaternion QuaternionFromAxisAngle(Vector3 axis, float angle) +{ + Quaternion result = { 0.0f, 0.0f, 0.0f, 1.0f }; + + float axisLength = sqrtf(axis.x*axis.x + axis.y*axis.y + axis.z*axis.z); + + if (axisLength != 0.0f) + { + angle *= 0.5f; + + float length = 0.0f; + float ilength = 0.0f; + + // Vector3Normalize(axis) + length = axisLength; + if (length == 0.0f) length = 1.0f; + ilength = 1.0f/length; + axis.x *= ilength; + axis.y *= ilength; + axis.z *= ilength; + + float sinres = sinf(angle); + float cosres = cosf(angle); + + result.x = axis.x*sinres; + result.y = axis.y*sinres; + result.z = axis.z*sinres; + result.w = cosres; + + // QuaternionNormalize(q); + Quaternion q = result; + length = sqrtf(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w); + if (length == 0.0f) length = 1.0f; + ilength = 1.0f/length; + result.x = q.x*ilength; + result.y = q.y*ilength; + result.z = q.z*ilength; + result.w = q.w*ilength; + } + + return result; +} + +// Get the rotation angle and axis for a given quaternion +RMAPI void QuaternionToAxisAngle(Quaternion q, Vector3 *outAxis, float *outAngle) +{ + if (fabsf(q.w) > 1.0f) + { + // QuaternionNormalize(q); + float length = sqrtf(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w); + if (length == 0.0f) length = 1.0f; + float ilength = 1.0f/length; + + q.x = q.x*ilength; + q.y = q.y*ilength; + q.z = q.z*ilength; + q.w = q.w*ilength; + } + + Vector3 resAxis = { 0.0f, 0.0f, 0.0f }; + float resAngle = 2.0f*acosf(q.w); + float den = sqrtf(1.0f - q.w*q.w); + + if (den > EPSILON) + { + resAxis.x = q.x/den; + resAxis.y = q.y/den; + resAxis.z = q.z/den; + } + else + { + // This occurs when the angle is zero. + // Not a problem: just set an arbitrary normalized axis. + resAxis.x = 1.0f; + } + + *outAxis = resAxis; + *outAngle = resAngle; +} + +// Get the quaternion equivalent to Euler angles +// NOTE: Rotation order is ZYX +RMAPI Quaternion QuaternionFromEuler(float pitch, float yaw, float roll) +{ + Quaternion result = { 0 }; + + float x0 = cosf(pitch*0.5f); + float x1 = sinf(pitch*0.5f); + float y0 = cosf(yaw*0.5f); + float y1 = sinf(yaw*0.5f); + float z0 = cosf(roll*0.5f); + float z1 = sinf(roll*0.5f); + + result.x = x1*y0*z0 - x0*y1*z1; + result.y = x0*y1*z0 + x1*y0*z1; + result.z = x0*y0*z1 - x1*y1*z0; + result.w = x0*y0*z0 + x1*y1*z1; + + return result; +} + +// Get the Euler angles equivalent to quaternion (roll, pitch, yaw) +// NOTE: Angles are returned in a Vector3 struct in radians +RMAPI Vector3 QuaternionToEuler(Quaternion q) +{ + Vector3 result = { 0 }; + + // Roll (x-axis rotation) + float x0 = 2.0f*(q.w*q.x + q.y*q.z); + float x1 = 1.0f - 2.0f*(q.x*q.x + q.y*q.y); + result.x = atan2f(x0, x1); + + // Pitch (y-axis rotation) + float y0 = 2.0f*(q.w*q.y - q.z*q.x); + y0 = y0 > 1.0f ? 1.0f : y0; + y0 = y0 < -1.0f ? -1.0f : y0; + result.y = asinf(y0); + + // Yaw (z-axis rotation) + float z0 = 2.0f*(q.w*q.z + q.x*q.y); + float z1 = 1.0f - 2.0f*(q.y*q.y + q.z*q.z); + result.z = atan2f(z0, z1); + + return result; +} + +// Transform a quaternion given a transformation matrix +RMAPI Quaternion QuaternionTransform(Quaternion q, Matrix mat) +{ + Quaternion result = { 0 }; + + result.x = mat.m0*q.x + mat.m4*q.y + mat.m8*q.z + mat.m12*q.w; + result.y = mat.m1*q.x + mat.m5*q.y + mat.m9*q.z + mat.m13*q.w; + result.z = mat.m2*q.x + mat.m6*q.y + mat.m10*q.z + mat.m14*q.w; + result.w = mat.m3*q.x + mat.m7*q.y + mat.m11*q.z + mat.m15*q.w; + + return result; +} + +// Check whether two given quaternions are almost equal +RMAPI int QuaternionEquals(Quaternion p, Quaternion q) +{ +#if !defined(EPSILON) + #define EPSILON 0.000001f +#endif + + int result = (((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) && + ((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) && + ((fabsf(p.z - q.z)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z))))) && + ((fabsf(p.w - q.w)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.w), fabsf(q.w)))))) || + (((fabsf(p.x + q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) && + ((fabsf(p.y + q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) && + ((fabsf(p.z + q.z)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z))))) && + ((fabsf(p.w + q.w)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.w), fabsf(q.w)))))); + + return result; +} + +// Decompose a transformation matrix into its rotational, translational and scaling components +RMAPI void MatrixDecompose(Matrix mat, Vector3 *translation, Quaternion *rotation, Vector3 *scale) +{ + // Extract translation. + translation->x = mat.m12; + translation->y = mat.m13; + translation->z = mat.m14; + + // Extract upper-left for determinant computation + const float a = mat.m0; + const float b = mat.m4; + const float c = mat.m8; + const float d = mat.m1; + const float e = mat.m5; + const float f = mat.m9; + const float g = mat.m2; + const float h = mat.m6; + const float i = mat.m10; + const float A = e*i - f*h; + const float B = f*g - d*i; + const float C = d*h - e*g; + + // Extract scale + const float det = a*A + b*B + c*C; + Vector3 abc = { a, b, c }; + Vector3 def = { d, e, f }; + Vector3 ghi = { g, h, i }; + + float scalex = Vector3Length(abc); + float scaley = Vector3Length(def); + float scalez = Vector3Length(ghi); + Vector3 s = { scalex, scaley, scalez }; + + if (det < 0) s = Vector3Negate(s); + + *scale = s; + + // Remove scale from the matrix if it is not close to zero + Matrix clone = mat; + if (!FloatEquals(det, 0)) + { + clone.m0 /= s.x; + clone.m5 /= s.y; + clone.m10 /= s.z; + + // Extract rotation + *rotation = QuaternionFromMatrix(clone); + } + else + { + // Set to identity if close to zero + *rotation = QuaternionIdentity(); + } +} + +#endif // RAYMATH_H diff --git a/lib/libraylib.a b/lib/libraylib.a new file mode 100644 index 0000000000000000000000000000000000000000..f1c3097a63ca6ba1d05eed12334b62604256f598 GIT binary patch literal 2722894 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%0A_JtHjO$u4~qV^9@*2hmj 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

F&PfoCxyP@xtW*XKdxEI~_mxVZ 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%0DDdNM(e;v4{Dw7vC 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 mrew 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

LxLd;=cZbNs{i);bMZP2BHX!e~ zN0E2jws6Ni8IR-kB7ZXDo=4tsFCy=_*TWt6Haw2|0QpXg`viH%eU`lAz6E#OS$G`x zbMmJ!?h^8jTjiVVdYr@k{^oG~wIUCn)fxXju&?s-vxgc{AZEZ{|Wpi&dIOf z`hUTHD*n~v^&j$W)*sK|MsWQtA`hR{75@ov&*9VYIPTeS&*6)5_|W554>{K<+{e!cMjk%P$InN>ef-=E?&IfH z_!Fzx1VF-f8!sI-+s=A`#jZ;aObtbPuaZu{%I|^ z`4RB&z0<;ctAwJHTUZxgAN~g1*RhxUlIFwP(1!)hk~hh%8r(i?4PTdhQeoWfA`j!* zhuY-z?*rF=AlyDT$nm#^`+e%ZaKBz2ox`7jyU#y>`#jQ@IlMx6@-DfBKDb_^a`-mO zviuO%@kF@mdo^7DbMOoB`~laq$FJGAdhUW>jHk}>EN`8+=I|wO{YU?ndGz;%TjytR z*KtmG5;pdEFm-PGd-=R)p5%>v^Ss(O z@-TWhuNs!7!oOMG^Qu359OI6KJMPc;!}Z%WUcZ0Ay?)ohyL0_ktdP~?{lZ3(hx+wb zhwHBeKOO%rIsP-?zMlWG9DWDf_1&amR{tdW))a0(d*|@?;Sb}fRw?s80dER_5`Hp# zJiIr2GW_igGQaD)cjb&fMgBPW)9^FlQ{dOapMk#xp9Y^3d12k_HA^?{0=Vn`9Xwph zg~!!P@Vl>;lMnl<;9mpRU$IKshfq%s_EnY0i|==;!=Ghd$HHHMpA3Hvek1%<_}!5g z`m?lY+MkEv*8dpX{!GSie`dlR_e=Qm)U!#|Y@bYr*ND7OXSKMFyTPrqF5Ein*24#ci1SKm*;##xcjyh{AE1n=I|?X_~;z|2;BRTkKtawXK$SC z+py0UG*9=*P`LfS3?3dL6|SSJA}`+OH;~tV7hM1SaMyQSj(@XFvi`qGKW~IP-@oA# zs$}(#td@DqPldmQ|Fi!`*Zsg(IsX3xUs);^iBy`{!fw52?@5Cz^5py?){LcOp5j ze_->cwyd{Zdz9Nz%cPbcU4x03Vm&GM-KIr#@Puc3kNdh+@&Am@Aw+^$0o&NJ=g z+~+a9-F4$Wd%$%arjYYKeBq?d`)nlVKBG@|^L$=9JIHlD?kVKF4o{ME{R8BDe*3ad z=k){ny3X|{k#qg6aJ$acxZT-F&ght-0*ePy5yv`qxe?p zI_%rX`Tp%sgcgN*^W|MQBFUfh`8p%JQ z{v%Fz>vNq1xZMvi*bm9%ydSP7=lzgI^?5(cC+G8gzK1WP`p)^*_OphZ`>7zmf$o>S zO7*#)kI8v`PCdh2AO1YeTynnMd5xUs^%glFm%vcBKJVudH4w-?wp7D`f`YT7xg*hY`1^D9Zx3TP5GP1`SyJtInQ?`Igh)O zoNwQ|hP(anxIyGR?rG#a?)l_jQU8<4zb4Nj=RS+bxt|Znxu1c9-Q$=>$K`9db6ob( zxYwWK=4Vm1`Bu2SK8E9c%$|!h zb*yKM>6m!OWgWTm(57974dnc}25-Tg_2ld6|H!$Y-oxDfTdB|3^IdOaAMV>{0{Xub z?u^U%3UYpZ?ln=qb?kg+lk;3aZi|1EH5J)3Di*O5C<&9M9YOY$3OJ*SLx_s`QE|7r8n$&1P7kf&3fxfi+f z<>Q_Mx5qsP$335%kISRveB6tuJ|Fkxly{E1t^Wc!*I!4@$Ne>r`tOndL&s|;xnECr z-MWnGd>yVN=i|GAoR9B1xLvn~TRJA!aVd%Ey#5#DU8tY`Bj@AtH{8}w!Erfmw5jhn zuUl_&J}!OXdfw$aVo*X1FD0}-cdVOt=DUBCbF?}>AB3FOGnbs# z^M1I_w}A3oznGlsuO#R7Ec2+pf&3WSKegokZi_aUQ$$5YF z9Otg5^AbS2&KYp04j=d2IJZ96c?@p%c?pio3UXezGIBmHYpFi(^GeD)$HmsKCg=L^ zk@In>^{C%z_l;>vJDDuYW$(=k7wo#fn413AxkFV*MyHdEf2udUxo&h-zI^L+gh-2S)Y&g*}nNBs%py=XnJCO?7vesW&tugH0w&rWpLpV#>kxZSt*{5fKZ zo9FtslAp-^z-^rptp8)=ygtR`y#6bwKJU*m$~)_C>sOL<{Wr*Y{i{9d`(NSCm)GYE zxSf|hPxiUe&GY(PP98|>GYf9(q+osKk#qmq>(iUo;cfEKl>d~R>$j1gOm*f?GxhCy?jP%1+dJ;BlJk6X z$-8#^ueQ(o;d*^9puDr5wtg`=*I!A#gzA@h)L%!=^Qt1}b=X4A`H*DabqK-ZY~keG z=XvD*)Mpf2*WpIWJL_QU&nM^lcaq;k=k3KF^{dGH(DB{s;a_?9J6HRzL;Jos|zQ#9S0zV*b^WCrY&D;9p#BH6sQcT`iPo7tShp+JPbsoOS!|Oe~&vdsR-dA(r z_Ii|obyz^o$2W(Z_s>04pU+E=Q{LG>w*Ir^Tz?HY@1GYv>i&Q=`>uHvUpFG=L2hK;4^Y7!?aJvtyasN4woY&!Da=v{mr24!M zpCRXU*hF=l{aJ-|*hYC?hvRQ_=XENr!vGIoaz2i)lJoBchv5JAkNY`Y=D2-w|2@e0IQD{T|EG}i zag3ol&T;hX>wNL^yOi>L9P`Qh)A~Q_;e&2+k2~jwlk)UFc@O`GoR4F#o85VFoy*|1{}3F!UtOsdcQ-%QTq=6ZPV40r!H z$2a1Vqlee8KRNdkM$Y&52E%n-?c#ry5kcZNKyOx~ya~e74 zZ};%O=eo!7OsaqOEv|F@NOI13-vx9{JsrcaB#>Y{!?5%RX{GUi- z4|#aE+fDyY{Q-2o>Pyb`!^ye+C=Z`Z&h<0k&T*Mc>lSl|yPikSOIWvfa$dK~$$8z9 z;JR+J$$4J?cz95@yFQ$s?cs|({7DaA3%C2T0rTBJ&hxD%zlE+BTc|!?FSb+Od8pD} zFVgSyUFQ;vn?=s!-bK#qoD0`=9-q^B{VC*JKbibin%8u=*55>VXP?;qKPKn;+sQMj z{+Ay0f1>;pTDOCg=iA@zi`@A-zf#+EKAC(Tje8p0nHSf&lJd^4p0-XF`E}%PlRLk% z+x%va`q6iHggP#Ezg3Jo`mJ9aIj`Gg*3)ZevyZ-h1-2%=evQN=UYwgJhWria|_ky^U^lTUqksb?lJRn#&sTg zv~?zvCzI!rUrGL7@@eEv^D>JXC4>xs&`V^1k<(I(of63+~jv zg7QN=^4F2`ewasfuBSSE^W1Uy_ml>>Gp_Rxi0ywb<@x+``~9Yllb=u5_q*UauV*Nq zMfsH;`R^$2T#rKMb$sc#>~ww!?6^4NE}%MJ!FAl*qY=I{*H-5$>#mvpxY>pLZ!gi0-EaK5XhZdFP=cdwl!A zb=ykCJ^pMMWM9j^5gDbK&>UgeR`qP#QThRlvH9hZfa=lQ<;h}(~oZ%6*W zaHk*6r##{2`S;=(aP9wY$~*PC`Gu7K1g`m?DSs#B zfAz?pQS8>gi}GP`tshVM9Li7f$j_ntBFf+5k$;HtcT@gRkNiuNUrhN*k9-~Fb1DCs zNB#ii@1gwvdE`%6=C0?xls_4+>vs*fZ6)Q&uVwF8Abb9Nm!0xmOQ{a!=de?LEj#7UTIJT^zvEBy@JHazdER*_!uI(U z<#`=`CqI|^NqWv5cPM!gIoCNr&iQj!yLC9fgq-sqkaPZTxHGTQJ2sJ>*QI5h*Pl&( zKJ{NiKAhZtP3Lu{lXHFrIrsTHIp;5UzVrI2a6Mj?9{H~+&+9Pch0g2mCLc-j9bN9` zFCt$=&hu&@=X}Uow+`p;BIo?upPs{}Ye;xv%>6zdyQTkd8|MJJo-J{6VT; z4A=g9yyjcK8uf$Nss3r?4^jP4xYl32!MA=1>c7HH^N>AKfSu}xlXLxZ z;adNkPkie)q&vIE&#%tI7kt`z{(HEt^Pug%dAmNt*s1?$a_)aLT>HO-oR4G54&QMz za9q;aY1~`MdE6|xj{C|^Q{QnOx8w_VT<2#o_?*r6J^aQm-MsT(0bM%2bX;zQJ2l4B zd93m)cicESk0pQYI`^~5!~eI(cif|cc6@1p>$n#+cAg&t*L?0?H_z+PN^TNn+sN&(ZTR&NHp-9T9syJxsoouBU!Kx#RNv((Z73JCcC< zC$m%iQ^_Bp`e%65pHF%2e=$4NUqb#U)qmKd{uMu)d1?RGu~Yq7KStvYg6p`)9q7D%Uv{eBpZsyEKM=0<|N6z$cl;B& zo(BEudRKa%ihktrv<{=-&ieD~#o{Ud8P%UeK9TCo^Qg0!@?2+?hd)ow^;-|Q^Wx(; z^bgnhdOG9J&VAiqoqO|P<8~jW+3P8LN95n@Dftt0y!_hT`n(TY|8brB%scuHKjwXY z`2OL7F3yqt|KIA;@nhaF?;sKKu{4w2K=lmQGFZJ*%KLoDz!^nAF zPf#7__QK9fmKL^Q|QJvr6x(+G5 z%(%{1pMB-wlTUE_boyz>aleM0`k6ug4D~Y`uKl!}==Q_=^G|Z#pF?|ho=+s7MEkao z{BrWQ;C4UPVO}4w)4aBkFQ<8Jr}}){cT?V3H(P%nJJsJ$UPAQ`der}&oY(D^lic;; z-|PP%=X~FjJI@axkM5X&y&V}&&h_KTIiEs4h1UOWxU>FQv<~-Ceh7`bocs!^^F@%` zKhG<$kL!Hg)5tl$lAQBh`?__mqH&KW=Q^{#E7|L%UpGw|LK8)%dBInmb9UWiQ9mz{^SnML=lTc8d0s)M zy8ZCH29Wc-29tCBu^ygD&hvWiGhpQBl=4pf z4Aie6=lZXabNwoh`kN@v^*<)(`rFB$rS5=m~OX z9Rg728*;9*=UlgrlaHBg=Jgjj|9;nRXy^Go9=`KDH(yHq?;+>(@miqz=~q7V#MPUl+Q0UWe|{ zoqK-|f84{@kv~W4@EN(Y&LNoBz>Cbd&R5>IW8wCGT2820|D_)OA~~;5{wQ}|tEr#I z$;-%Bdie9?T<1gbHB{#_^5@CFCFlGPX(!AydIqBt^*&J7vXlk5vQ8{@H#p7vyq%{m*1uOJl_^_-an6C>buSf7KQY1d?|kL!`)P2yAMChilk>Pk$zP=XIh^YAen_YMOO($d z|Dt1XyZ*W4yU2S_a@U{hoKAiL9mfdrI;wLG`3TCt0(VB?``cY6yX(e21MaLF|DHRW z^89=5L*zHm`LL9npO-S=a(CRJ9UH=~Plkstf;;^ZE=S0DfBIkH*5~V8Pq_0_ z-k)*ge7#seej^>P?pK=n&ez%Gk$vPX9UR|6_9Qe>*w%|0UJu{(C36{c!)6 zkf&3hpObU{Ctl^&;r{O?=Q@8*b@S|(O*3xi8-nxXG;*Hrb>tOvewYb&s_}e#CcER# zp?M{c-$cHEoaglvIp;T#bN-yG-ElczdX4XV_v83hkn?xYnY{WHnAemGqFpGeNf>wa=xXTRyDALlEdmqw9uK8u|5 zuaI;8JMx*dPx@cyj?4K(a?U?Y&iS{=)2ROM2zb79>>+lOX&+9PxB3jR5Z*|w1 z*C&LW>kRSmX>eVi6w34Z+)K{=myz>6e3P8lXAAkAG_P;TdEKtfbmz;*x15~E-9qkD zpPcJ=o#)nPKZTs{Kje{fKg-B@{a+{N4S61U9XaP8$a3e!{jVYCe%>SJbxytA z?ei77-Jb<_e#+0IyJ3+#F8^M$JJi@=j-TIYO{}yt7yfNFu|Brkxt!L$ZosT;< z&mEV4UzkYFk5^A2=YAf(zw`RsCVhVITRkS&7k9EGDqaN?vGsyY)W|MRO#pIkXBj@}& z4?pbTS3J>qpO3?xpYm~BO}?7eVI$Sy$8-LnJfE-5DKg_~{ZZsx|0=k%A6}*N&)t;g z`pd}+sLz+kA142n>i?JOcX`t7lk1!bclzP{)#QAC>^iE$_cwCL`8=OT&iBV2B`>G` zSCjMcdY_zcPro4N+wmXCd7mF7=XE~mDYHK3bgaW#>gO!Dvp%oUdJcg*{}wizq_5bjwfBe(tI6D2mLG=USdc1u`BL(o!FA z`)O~IbN*X$zMs~0o!dYEe$FBV2 z!zn+F`n*K)w*CalucrJ|$~V&WWftYfQvPPjJH6(acKk9azm)QKQhqPhe~|KA|53_2 z^_|Diol6ntX?<2mKC|Oz&gD6e{413Ij{13r^VEM0<(+<<$L5^NN8-+B2|Jh1$iJuh zjUM%XpuAH*7xnjxhdMv(xco-mMD@GAY68wzUe6wIyWjGTJ6gu?MDcuhU-Erae~?H0 zA(VH(PspclMe+Z@emb+t2Hi=YBR({wM0^6UuWxJ1Niod_{TgXRqXKKR-~O`)MKP^Wmb~rrJn?{&ov!`- zqNonvo{o}y59I$N?gyVj{xcoNRI1O%F@y5|qx@YS`8>)yYub+MSE0CF&nKzQ^R)i& zdgMQ({0o%-k(~F#A5zC2_jbxpr#eGk>wKR?!kwR9Px;9n`KgrW`nQvFoku+CJVkk~ z^E^4%dDo-PN0jF}yUDrE?;dsjraaf_wcf0ou1^Hqp3m+2M^T>ZTtd$MWO>wCNO`Wa zoP0gqpQ-eyvw`wF?oP_{pN#AE`Qjn) zSP!4<;a7>1o4_btlrr}NlW%JX^eEAnwP?$6{ruOn3d0M!q8!|k8z2a)sn{7iB_j}3+EJ{eAV z-Y0n;`3EV_`+S+??QvWyZuixjROe$_=MTt7(YkFX=lOo+;Xzeq-JJRULhBgs zl=EXK|9_O9KzUxDD=7aP<*)I`-$Bl=6D%MfOY63ZoL@&=P0s7NoqQVA`HFlD`F^;w zo~_jXVaoIR40y|3&qI_S4A=b=Mfu+;ALEgqOFobKe3I(?L3PR~&wai_`8LXbKzTln zpHco#%J25bcYE8cgY%W2&vP!^SlPS;jXL{tH zBX6g5uAn-6T&gI4g!1ot|FCgDR{s{S(d z=jTnWgFE|^Zy#Ty{2r=5aEsf|ue8rckn`==1oGZgXDZwo_aE9nvnbEUF^Bvxjax+i z4b@*s_4$1G0_AyLZ&TiRLce`{<0Hy*KRYPjh4SBfLw&A*J3sx7@^4e#pYrc}bK5_f!K7+~m_UInC)6dCN zzmW3W&%5MYe;+y5KS0jwaMq`t_Zb6s`r+qu#*y>$6@Q>QTtB_ut`2m@Gd#O-}o=&f6)5(-QmtFnED(9 z*Lj^s`F@nY*drfL`BN!B%_Dyu<$3*YB|nYo+)mENF^@ci@=w5ZUe8j#KjmNc$cODT z>*jpr^TSZMvu{tQI-@Di`(y#-`Ei>?l;`9A1UbJCRXI674zr1zkNX$o{P@g4a(=w! z2;7+$KYr5f3wIs3&tP)ipF_y`^>mk#bDuNFZ>D{FCpoYG61dYR|Gw}D<+;yi$eq7k z+us-7BIkaZsQwvreD_nH>mUE6Ss!~Iv*)EixbxE&Xxy{NA0{8=Q74x2+~?Kg&r_Wn z$zLYFoBSd2hu}{Cp)}veDbMp=OU}oAJvl$`XcPGxH100AuG=2U^L$&$-=aFbcDeiW zb@D#synn*r&bR|;zQZZc*Wc0PeEanf)#3B`2?Sk7NH$ z&g&Ms+uff7X};&douBf2M^c{8|M4FAD=5$B{}~?nbjtJje<3-a|8vRt{Qn3!pZ{0D zbzUz}p3ncUd*sjg%H3D|ILZ0syst*WoqcsCt#dr(d7ba3Jl`%Xp*-)O$0*N_=P&cf z|CgK}&;O8|Z%4i%=lyetoNq@?{Mua~z8yIY?yLjfj+{w(p4U*y^W*Rrc;qLM^YvmT z`Aj+w+)K{$T1L*dJFk-S`!l>r&d2?IxHDhAJ=#Wjp6@Qo^W*uA9{DZ}?mFK?^BO?T z^NNQ%{qXHqBIUWCYbhT_`*x;B{$9#Eo!Q&FhbX^_`Ya{q+q(@Ob>5;p&+Bt?zP)QC z=i9qK$ocl}m_24ao%P|{yW`=`PkDX%QhpGv&*>idNOJx?cN96_KK_TC^J~fZcI{Pi z-iIHl?Ff&R0HE}{aKXf z`cIG_rhWAy)#)hXw+qitew*@q-u{T3&sRIh`TE{K&g=XG`MuOn3pww%zsUJGcKy~} zPp%&Xx5v>wZV*Cw{yqINa{hh%CXYI|QJ(AEPtJ9oA>Tst-AMiqc|AElUiTY$myYLh z+WX0WM@~bF6jgHF(az0-BJnFPi{#2?H z{=M(K?79tyJ3l>z^6?(|M9SY!`2vspc5!$`I_4GH%+ddCdel?AIdQ<1~It%Xn zlwZFv-y>fvZu?w8b-2$4@*Z@(8?dkQer_dq_D?eQ&l0%vfAQn?YsrtJ`qktg&^mld z&X1RV1-I8n`#9up;=sSaOHkNd&Q%lXRd5C*sPZJoiC=Q`2ke0|LEsB;hHdE7FO z{94NMxEnq4?^2%Ye?iXYlb|1ckFT9?Ke+Q#9ygqv=X<`?iNJX;Mcme(L3Oy#nu zVdA&q`*87v_&!4XK71c3z7*f%ZNdNT^J#dr<#i3E#(yZ^ics z;-BODMDacNK1uvXe4i|S5Z|YWAIA5o;@!F!NE64$XZxj#pNxElcz-xPUi#m4J{z7T z`C;&E@lo&`@$v9n@yp?P;#b4-#b?3`#OJ~b#qWR@iQfY+7JnFCBK{=2RD318O#FRZ zf6K*RM!rJ)4S1#a7WjJckKt9~JK@#h-@-SG{{*iQ{|#O%egs}8-rYGNbX@Aqzy94n zz2Q5=PlN9g9|Ug@KM&q0J`&y}J`Ub2-qYW}e(@>Dw}@X0Zxx>fZxg>2-Y&in?uYer zzIFb&5AH9%6y8JpX}JA-Fy~w6pH=Wc$-e{-65jw17T*L95#I_A75^L_CcXzAF8(7t zLi`{+Qv5JHO1vAcU(w`689Yh+DtNN^_3#w& zIq+0*=RFynOPcs1c)Iul@C@_+9XN@%!OB#2&w+=E|BUNbnD|4;hl{r%A0gfq`AG2qc$9cwc(iyZ zJVyK+c&vC7JWl*#c)U11PQoui{0ig~#Z%x(;GX` z@#o-~;uY{L@z>$m;+x?);&>XZU#>Ww-s6`ij)&#_^2MF!AUc-<@#C?d3&s1ui^R`> z7mE*umxvFCmx_;umx)h+my1tZL zUd!iP_KQ2Op>i%Q;?8sEolC2@^W1Ca(kAXaC&Rh4i#yLbIC{bP&-t ztInlT{CfC$ap$?_&ZSCxKD=7oz7Nu7ap$#~&ZS0t3A|Rk5MC$#47^^v48B8r9ekH~ z6}&0?%&I-XNdR-aC`sSjvEXQll(w;KkT?)!Luaa1kV=#1)d|`2G12gJ<#m8Jn>^s zFrF_S2rm#n6<#PF1}_pH3NIFqhL?z60xuO$fR~9+g_nz`!YjmYf>(-X!Pkr54X+Z< zhgXX~4&N+Z02_c#?PzT)&dV+u+n+X&G0hukKpCvJKz=K-@q%yo8jxl z{|{azZud{M__4js?dfLmKzNP#sqk9yFnFE#P-1ooM5=Q-!>bK%Zs zr?TGxcb;3teh)lK{9(BB-qDN{ z)8GZ-GvI~dH^Ym>7r=|fmt*})#P37CRD3DCO#Eqhx%eu0h4@SGO7RWw_2Qf0RpMLW z)#9JSH;eCq*NFcJuN6NCuMY||9^N8;IlNW;YIvLYOnAHaT)1Dyduj6d>JGTS_&x9*;t#_E#Gix*im!wRiLZqR zi@ydB5#I<875@+(CjJ>bT>NWzg!n#qr1-D!DDgkx(c;HopTvmwg2#%V0*@0P0FM_R z0#6Vh0Z$Yk15Xm42u~Kj5}qPH9iA$FBRoxf9z0$AE_jCc{qRijh5gNb%@ThC`E2nO z@Eq|M;JM5Akkz z!9alcL-zan2OJ`wp6@k#Jf@hR{!@xD1`9m~b-^`%05C60Tg_*VFO z@jcj|RpN(`uNDtlX!_YK{wTagyd7REeh}lg^_%87-SkDIWn~`r6 z-wbaO?{<%wZ?pIh@crU_?=|@r@i=&^`0NKwzD@il_@BqnQai7Ttif=_eNPHVSSo|}1i1WqW?ej0}xDD`V$sdHrh#!K-ivJ0Z6F&lv7oYurS?2`tZuc8c6km*dl6WuVlf}=> zH+53P?S4)bxBEFw-0tUeal4;0#O;306u0|1OWf|~Y;n7v?dM$C<7M}AuH@~0&J(x$ zIbYoF=K^uNp9{t9el8NX`?*-$?&lJ5yPr$N?S3v3xBIzV-0tTJal4-@#qEAxFK+j9 zmAKu{)#7$PZx&C+{;UzV`?*%!?&msjyPxaD?S9@Ne#|Pf&v%JWfj5Z11#c8T5#A(z z!)jB%S^N~__lutfZxKHO-YOnZX6mkI4ct0 z2rm}@7G5IW7cUqt6~7W*CjJb(T)aQLLi`-et5WRx<{e+8OfqaB` z51jWR#nX_F62A=|EuIUH5q|_8D}EjNj1ymue7yKc=rck5W#kjZ--aiNZ-pm|e+f?! z-v>_>{|%ld9*jQI#iwAt8R7#UF#9=Ed@MXmd?q|w{26$T_?Pfp@ze1J4|(FNkk1#7 z!@LT_Uqil7d<(ot{4T6RvG`ZWmxxcsxTWIzkuMYf3tleX1M{sAe-QmtiuXr;y?8SE zsS-aA`D*de@Xg|v!E3~?hS!QejXvwdXCq%Pegpd4A)bx=F7YMs2Js?zqxf_1Ch11M{-4-?HNtAs-_7XEAQ5_-f?C#Mi;Y#ovV6*MZq_Yv7TRuY*U4FT(HX z(c%gCeIZ7CKJE|O*OS?CFTw3;oaB4s`Wr9ah~u6h{^)9R+!MuzuQ8q^z7qLl@t5E! z;%~rH#ovRciGK=D7ylY=U*Bfe;YWC;SN6X1p7SHg?LuZI_l-wZDizXM(>ejmI{{84zh_;PrK_zUn#@z>z%#W%sL#6N~t zi+>5_z`%f zco)23WtMn1c(!;?c#e24c&>PFc%FD4c)oZ)c!79-c%k?Jc#-%Zc(M3kc!~JA@KW(% z@G|ic@N)5y@CxzK@JjKq@b%*3;Z@=j;nm`k;G4y#z-z>>g4c>)4X+cQ4zCxV0pB4$ z3%*Ny4!l8pF1%5E9=u6>0lZm!A$-61B6y4VJ@8iX`{8Zk55n8Um%{z4Q|Kj9gYKLXDb@3PL^?q`X2gJ+BPgxlAP+i`orb0yy!o+sW1 zo-f`HULf8dUMM~QUL-yUUMxNsULt-jyi|M`yi9xqyj*-Fyh405yi(lGcfI&{>g4c>)4X+cQ4zCxV0pB4$3%*Ny4!l8pF1%5E9=u6>0lZm!A$-61 zB6y4VJ@8iX`{8Zk55n8Um%{ztt;KkyD;U(hd!b`=6 z!OO%)z{|x)!Yjl_!z;zd!q_z`%fco)1Oy?x&lJ8n04w&Z)lbHsbWbH#hZ^ThkW z^TqqY3&i`w3&jV(i^K=Pi^T`SOT^EGmx>RAmx+&nmy3^tSBQ^>SBj5?uNNN=uM(dK zuNI#K-z+`_UL$@LyjJ{bc%Arkc)j=x_zv+|@Ll3_;0@w);f><+;7#HS;LYL-;rqoG z!CS=dfwzj^4{sBH5Z*4n6z+GD@85qPgZqm=3GX4k3?3l90v;&73LYfB1|BTF79Jx0 zGCWlLRd|^A26(vmoA3znjqphEE$}Gu_udL&)%L#u9xnMe;r4SiZGIy>Qu15iQR45zqs6zvW5lA^}R}b8IEJM_>=I>;*Y^=#FxTr#UF&%iQf;e7rzI-Lwpf@ zm-s?>gZKh?qxd{{llWYCv-lkNe(_oG7V#PIR`KcZHu055qPoq z@zG}767g&AHC`%yXo2xE@n(3r_-=TG_=oUH@z>$&#V^DM$5x4F-(~u#7M}*+EItfg zBYpzBRy=Ewsb44l64s|){DN$g-y!}ye3$qTc!PKdyixqTJ5Bv2@dvOz&EhxRZSwoY zFNL>=4~4gi`@`GBTd+Ru;yoWSL(Gh4=&TO7Vx`>%||1SBWoySBtmLHpgqT_?Pe+@$cZZ;s@Y$;sH0B`t{<0 z@EziQ@Ll4^!yCjy;Em#;@Fwvvc(Zsoe7|@EyhS_`-YOmiZxfG(w~NQX{rdWz|4)be zi!a0ne)kYhf(M9S4-XW-2_7W=AUs%nDLh1c5j<2pA08&Y3?44N0v;j03LYuG1|B88 z79K7BGCW57Rd}rU26&wKoA7w?8_li};duYp&I&xTiv-v-|-emA^E{2_R) z_*3vY@#o<6;_Ki$#NUGN68`|+Aif>mDE~=H~X+fd?>tC{Cs$u z_zCcK@r&Sor}&=#FNXVzUjpwTeil4H{8D(J_yzDF@hjlL;{Sn%h+hK_6~7K1CVm4v zT-@d(#OJRx>mMn8526 z)JYOw3Qrba0Z$SC0-h@V9Xw6^;?-t-(#03zg94!-HS#s$A@Ex9P)}1bx5ER(zk>&gx4?tM|Aq&P2kbR{hKP^C2W*ClZ~D&U!^9WE!^J0{PK5ZS$VZA_ z^}VSdB_4u0(c+iEW5knCCsy3{A17}6j~7oxodj{)f1UJ19xvYg7~_fJ=}XPuyOYJoAfGCJJv>)DzRf&d zinsIrxBoTpLdg%oxW(dM;eCWl#ealv7Qgm>Gj6^3s|99WM;qz*nO(Ozw;At2KXxjd z6KLuLioYJ-&8!0|;zJX}*C*iT;1F{Uni~k76G8~=nn2v9L zGl$)e_o3rs&M-;dhmOa=c^^7{DLmZ#Z~xZ693Cw`70&z6sdEFI_nYJC@N}s&AD%6~ z5S}l7FT7ZM3A|kVF?f~uQ}9~xOpaJ+QCseD4T$j;fzuxcGW_toRr3Bys!shUwz5_WY!^0d z?z27L_K?ry?P(Csqjo>BuAi%Q5U!tlH7wH9*UzPz2lwx3es24}beQ=*Ry_KA<5}Xb z3^%Tyck>5aKVN1&Zt(T-+!5!S((5v*6LVy|wEwYNV-?B)$foA^t90 z-?zN~MW&9ve|QvJ-|u<@T;F#(ew3*bfZKW7XA?Y3ymqw7$A}+)G3F)y0z6l|w{vH_ z<5D7?4cGUlErRR&!48N$TE+=vE zdeFE&PvFjnjR%}!{%!l|y3~9hAzoW(JV(5Hv2p!7<{NPRdzt@olh?nqls;=*AGgmb zHC_{J{%!kw|7G)iU_W2aebsy)D}MZcjVFoU^qTQv@!jwy@%;5B-zJ{2!Fa%_=HIr@ zyWyeYOW;xBU&G_Y$GvXqrijlFWGGJDdMZ)S>l`FrQ(0W ztHl$ynELkd3ESr$c&p@3dDrB7;PDBYKOG(-z62gA{t7%!d=ETXycM1$e%X7bpF;5$ z;N{|P!#9h64sQ_eR%7b7iC+khKHdDhYsbHwe=6Vw;*;JtxoYw6;LYMQJ}`OzGt9qj z{l)Mo@gL!-;^RIv|9^q_W_Y=HJA9Y;tXlLF>f6tI@KEvYTTL!T{4#jH_*);De7Sh| z$HsSv-vjp>V191bXGNX)K3M!Gc$9e9Hj_^he+r%@-scmOFBBgOFBiWFUM*e#uNPkq zZx(+S?l;hPzD@98@h+d5T%`Ev@ObeEc#8OW@LchHc!l`ndNXdb_;H^Z4?WYj|MRz- z@1w*w!4t*jd~WjT;>+MU;;Z4M;_dJT@rQSs`hj7-eZKLf`94Yfn%%}T#BYY@ioXIc z68{9gOFZT)Q-8nsRCv@N-#*`l$BWm%Q^XI$v&Ap}+SDx+p9e1&-wNL$erbcL(;{99 z_dm2h@$l1Q*rZt-Hqr`LJ@#0J2sp6~Q1>(o< zHT5gRSHPRaGru$WcJaI6!QtlTT|55e{Id(5B>vs^CRZpvbf58Z@$v9#@mt~b;>+Mo z;xEJ7#NUMn4L0N3{?Giud>gZ?_!sb9;tPH@ z`TgQs;C|C$<{T7LPh)yhywaUMaricayIZpZACHCh>l4#@ofmz{AfqKezjKEj(6y zJ3K|a6`mcy`*#(0lN-*KOX zhln@BBgIGJi5{8apTn!gS9dex1`YEa_x$e0GsK(lM5J8t(4Hn=B|ZmUCteC~7XKX{ zc)o8x$;X-c_V0mq|BnkWo+J4i`Wr74Kjw7fW#W182Jvn1Ht~zjFm-~4`}X+^JY0MW zJVE?aJb^1!JbQqtUnD+xpz(6?$Khd7zWuxsX7bVEZ^M(s&m3g(nc}P9MdH7~Ys6nZ z%hYKTzvFD<0V90-Tm_F4e`c`BCySTC^Tcb;G5K2Yb0Unli>IDzJp2ORe&!7|9xMJR zJXyRPo+-WsULbzqd8U4)cpq-z5GIJT}_5&)N|tpCrB=o-6*>1two3o*HeuP5jxB#=}PXj{C+%#$&|m;Ys2@ z!866LA7$zkiC4kP#kaw0#4p1W?%KrXk4B#t`Szc8vGE-7cgGm76#p7e*lZV{G|uFM zM)}sC4UZ6C47Yz*x98hK@C?aMjx+W1#23R$#GipzioXP}6CXU@)Nd0X@gL(6F~0Mf zHoL{qT6m)RwWfZW_~&r@JPy16zlRq{{ug+u_}}pL;yqKa4&wdb4dQ3Q z+r+Phhs64>&)e`=@sFmPadX5QuQOgG{wKU#eDU=rUoCzrp3q${9tm#}zZ~v2*6--W zuJcpyAo0)P;o=SO81etX6U9SkbU8X+ns_8UTYMb6Kzup8RQw(IdhvlbbU8Y1n|J{{ z@Dks3SP2gk-vEyh{{@~TK4_*HH(h)xJWqUPn#q@lXTz(+SHtVYUx&AgN6#|#gU0#J z_i1>zcqKeh`~W;({KDC$zI{GX*N$PFf4+k6lKk)+O@6=lSh!!DZ=X})LE=l`(cTAnJQbcIek(j% ze9}#(eu?<=@b%*F!Ry2u;f>paqb4{P&;-lbk;t#+J#iQq$Iu+tC zz;}rU;&p=U;`Vimp%Z=k`~dlAar=71MDah6&k(n-L(CH&KHv0TEN)+)SSenCe2ut$ z-C~1yG+wvZE^c4X7<8%ceA|$Z6wh2>`b-mVgI9|0zTM;-#24IQJm@mtaWBFPp(4bW z!PCUs;W^@$EHw3t#23LU#H-*n;wRjR{>9Vat>P=;feF6z3cbtJ$q+v#$9TSYEqsS~ z$s&{AFJ24xpX57kD?CIz^lnopN<0CcAiflyCjJRLNBl2%q4=Q1X50qxV{(nRik}IO zo$Na=`?}*4ar=5_`}|*f`(j^zT_E{amzr_Q#J_;oi1&KLMbowecA73)i5&_$kjDFA+ZnUMc=0 zyk0#01yiRoqCf$&iAG4LqyDe!plneY_x1@KJqd*FHE8!AknrQ+Yh>%<4WZ1Qd5 zv*BS^`ObF*JXZWec&@np+|N?+V_z}jwuq-z8V{Q4JMQ1`RPpftntYDZqhsPDvY=(71{lZL_Dx{&DB^I-E0aKHukg&H?S8{7#4D%gKKWZzn(YiR7c^s(rnGL|^jta5s5! zr{rtN*TOrcAwgJ&FA7y^4c!(I`WNQh_{iy0}qmCeJS~*EVXaSH{$u^-@pUp zfqzKeo~_mybynO-zG#U4Ur>{&ihRmY@h0-M@ILaN4wJm)ezk8VJcc|U?jSFNXOjEi zZgM}of;<4PC2xl}lOKoolRs;g`-+;U-q%*Rll)Yqv~bdK8B z*dHdHd=vJKagiT_mysL$!&H;ouy0Hk`Fn6%t||P|r_+zZkuqln`AK*+`Kl`<-$1?% zZkn&wKRrhBR`Ll}@p$qXa1VJmyqWx|u~H{UehwbLK%HmHILUj+XO9>6lfMEFk|#$? zKHjO;{|nqh{`{4aZzi8HLA;&(4tP|aTE7n-OFnv{)Nzyl4qie2IlPU0rA_MelefYh z52*7LVqYUSxv}3-1^HXZw~^;vjlSf2;f{rB-|R_}&m>|(WVJU$;JmHeVa$ybwmXNp^vsCBNw1}#bCDR3A0B6t(|h&!deDPOHW z=Pq$4`Lwy>0dixXt`71e*uN{WK&^jMq134%zw1HqAo-QW;u(c%ovS?J_2l=Ki-*W3 ztQ5BusdbF~&GO0DJ}LPI@?SqC-c4Q!x46~%@53GBLo1|?oBURIEqNupo%|1Q(}QZ? zQBO<#c=G$;Ipmw+HRL0(kxvtO3_QA6?fcjo>03_z$Xf9r`KcGhGfLDtv+#K$t>gt8 zB;QNEX`^_8N3GLXD_%xEXOnmvdG>4K(M#1jW8M(YBww>l+)wV?A>K=V@h)-4Lu&o+ zc8h0`FKraBC4UARCI!ha*(>?Pht>Mc`^3x1XS^xiL4Nve@esMaMLeQZt-lnWPQL9O z$-Bvq!0X9xJRtd;WorE~N5wtlR(KWpRJfl!1>Qmai;ty#ANftk#4~=Q&U5Dp@jCJk zPl|`g&zurBFIVea-Gln%w$tJb;0@%7@K*Af@J{mk;6d_5 zaMPpe{XPnhB3}*9B){XoWPUe!9=x3VNq9T?n14#0=*QG~jD18?$;iv#{Tgh$kSn|d2N^<+TLE*x60{Lv@)5wkegq`FC$a~3~;6Czxcs=>G z5re~ncapyk50OU>k-T}OdcV`)Hu7S4BKZz@8u`SbQr|`XGk7_9HoTVH3lEUL4DTc# zK1}-dlK%uA`J{TkY48~GCGceOMtBzaNAObe5Zp(8qgm!`AfE&8C;#MP$wxh<&i^eu zmi+QdB<~;}5BHI;87}#D@~TMjUh>c2mI`&A-b>M!yl#YeKKVy*Klz5sBp)Q7iVa7T zo>u#A8!34&c}|pgfZQ@#Jn|W}&KRqB7W+8ydU9j`^H%cH*caXMtXhBnM5&WTZtR!t zB;Re5yqDbAN8Lwm!#?VMa$|q>7V`U$?+N}cDSYb9?dKLXDoUpiUxHRKax#GA-(g13?112?Z$=UESrAwLFp zkpBSBAfI@h%;O@T4EK^J!|TbPgm;r4g7=Z1fXA#+@9XBD$ULd!!>K|SR&02kNuCJzkY~WF$QQ%?cz}E-yo>y=aO?BxJXKSrzKgsQpZi%xeiH5@ABPRZ{p9)Z0Qp+Dd96Cn zPHg-fP5#RnGG{#boA5I7S8tNMkNl7DMUPgX5yp4Q{OX^r(R{M@$B%VnA1U#MmIe01g zC-7GCU5ll@rAF=h>=JQ1`5W+b@_G4^cac8`FC%{p?jvu9camRUDD^|+GvE=gsPoT* zTgj{8@#OpA`Q+z{q;G(HT)DV)gW5NDgLpD|HQY(w46i1iw^8b}kq@mEH*Hk=ZimN` zpMaN=XTK_S0_0!7JIK$$&9!RZ>P=E7iG0dtaX0w~@Fw!x>m=VsUIaJ2Y6`ywXww$X|uK$bY&;@-^g5@OJVWUYERmliK$H+(G_lxQBd&U+VbDZCk~=$lr$BHmiMq z@rLA+$nS@zlb67q zPQG}D%yqnx}P&|H% z+IQwr@ho!N$KrnS3CF~Pa6kDKcS+u|ORclw z9&so64VmJ`zRQEOW%{uUUPJkV@F4lqSyIQeTkU%U9!q{pw&XL(8{y^TSKTl92J$uV zF7mT*bE7&>-aM&eCw~m?Ab$y-LEZ_kBcJnt)DMyGTPPmUq|WmW+)Cbv4_tDRn+xz9 z$lrq>Cod?Jyls!#H=#&8hkTwJ^~oz96mKIx2=60bT`c*iy=vdj;OXQiOC;|kAM6n? zC7%SZB%clskne?ekbem8AwLH1C;t=NvQNFQAxmXWJNa~YB6$)#jr`~E9P*iP5BY8I z3i5Qgv5&a%=XyT8f$|ICt>jO^JIS}egXCx6re^i|40{N_59Bw(W5{R1Q^_~Mv&e@( zEcNTi{maEee35xL%SvQRHLRi^q_E3r{BB^0MS}$k)|~d&teNh_{emv|YT5 zJOv&dQ0GtGA^CXnxo{8p0l1%h#!jizPTspqJV?G`x47wd>O4=wt>hcv3FLo)XOZ9B zDD^AIABQ)P?}B%cpMab9t8010rBJH3*qT4>O7b4mwXxdzu-P{``ePQC!Y@QByWd@$iIe1zGDi% zjK7~RZISxPU;RPyedK?GN4BbcZS9gzB>xDWPJSHjBL64c zOFsIeh;YLO^2JBRL*%nR7Iz#{=lpr6coq5hFU0G}Q{VyeLU@qe{H4^1epl_A0Z%2b zg6EKLhL@7R3$G&o6z(VQhqsVl)-7{(l23()$W!3v_tg7x!ENNr;mPD@;SJ>86Ee?X z@-^^o^4;)0@px07xeJ!y z{ldbfaqi+GcV4mfKbXttd9Ha66z3M?$W8%$j{xXFBziF)RD?M-el}&wXnxehG(EW#&UlLCCJTD9M`yZkm zeE&bwOz%HcI|jZo=j&;c>A=K+Dp_5O$1)q&yx#V>tk1YXU2pU^)@S{j^`2d_-mWeW z->XjYbWJ8V*7NhP#rkxk5$f1*Hcm^liwix!&Jn}I5#yf`>CaDpqQ?Bj@6Srj^cLLT z)F|_p{U80yw6z!NpMwuD$3KGzfBagcmgWA{n&~Y@YRAA=S(EfnrvAorGtRGRi!QYO z@E%#;KCq~EZS*(JyZ_Dl+PxQEZ$Uld+=BJ-aO33OC+njPz}dJRrX|yx90Ha$1nW+ WF4w+uq4k-oW&ZDfTqzg4{(k`8 operator*(const Vec2D& left, T scalar){ return Vec2D(left.x * scalar, left.y * scalar); }; -struct Color{ - int r; - int g; - int b; -}; - /*template */ /*bool contains(T X, T Y) {*/ /* for (unsigned int i=0;i +#include + +#define RAYGUI_IMPLEMENTATION +#include "raygui/raygui.h" +#include "raygui/dark/style_dark.h" + #include "libremidi/libremidi.hpp" #include "libremidi/message.hpp" #include "libremidi/observer_configuration.hpp" -#include -#include -#include -#include -#include -#include -#include - -#include #include -#include #include #include +#include #include "node.h" #include "signal.h" @@ -37,20 +44,47 @@ std::vector midi_out_ports; std::vector nodes; std::vector signals; +//std::map> connections; + Vec2D mouse_pos; Vec2D drag_start; -bool mouse_pressed = false; bool mouse_clicked = false; bool mouse_touched = false; +bool mouse_dragging = false; +enum States {IDLE, CONFIG}; + +struct AppState{ + int width; + int height; + States state; +} app; int main(){ srand(time(NULL)); - sf::RenderWindow window(sf::VideoMode({2560,1440}), "VISEQ"); - window.setFramerateLimit(120); + InitWindow(2560, 1440, "VISEQ"); + + GuiLoadStyleDark(); + + int monitor = 0; //GetCurrentMonitor(); + + SetWindowMonitor(monitor); + + app.width = GetMonitorWidth(monitor); + app.height = GetMonitorHeight(monitor); + + Camera2D camera = { 0 }; + camera.target = (Vector2){ app.width/2.0f, app.height/2.0f }; + camera.offset = (Vector2){ app.width/2.0f, app.height/2.0f }; + camera.rotation = 0.0f; + camera.zoom = 1.0f; + + SetTargetFPS(120); + + ToggleFullscreen(); for(const libremidi::input_port& port : obs.get_input_ports()){ midi_in_ports.push_back(port); @@ -61,96 +95,127 @@ int main(){ } for(int i = 0; i < 10; i++){ - nodes.emplace(nodes.end(), Node((float)(rand() % 2000 + 280), (float)(rand() % 1000 + 220), 15.0f)); + nodes.emplace(nodes.end(), Node((float)(rand() % 2160 + 200), (float)(rand() % 1040 + 200), 15.0f)); } - for(int i = 0; i < 10; i++){ - signals.emplace(signals.end(), Signal(2560.f/2.f, 1440.f/2.f, 5.0f)); - signals[i].target_node_id = rand() % 9; + for(int i = 0; i < 1; i++){ + signals.emplace(signals.end(), Signal(0, 0, 5.0f, 2.0f)); + signals[i].next = &nodes[0]; } midi_out.open_port(midi_out_ports[2]); Vec2D drag_origin; - - sf::Clock deltaClock; - while(window.isOpen()){ - sf::Event event; - while(window.pollEvent(event) ){ + Node* connecting_from; - if(event.type == sf::Event::Closed){ - window.close(); - } - } + while(!WindowShouldClose()){ - sf::Vector2i mp = sf::Mouse::getPosition(window); + Vector2 mp = GetScreenToWorld2D(GetMousePosition(), camera); Vec2D mouse_pos = {(float)mp.x, (float)mp.y}; - bool mouse_toggled = false; - mouse_pressed = sf::Mouse::isButtonPressed(sf::Mouse::Button::Left); + bool mouse_down = IsMouseButtonDown(MOUSE_BUTTON_LEFT); + bool mouse_clicked = IsMouseButtonPressed(MOUSE_BUTTON_LEFT); + bool mouse_released = IsMouseButtonReleased(MOUSE_BUTTON_LEFT); - if(!mouse_pressed && mouse_clicked) mouse_clicked = false; - if(mouse_pressed && !mouse_clicked){ - mouse_clicked = true; - mouse_toggled = true; + if(mouse_clicked){ drag_start = mouse_pos; } - window.clear(sf::Color(46,46,46)); + BeginDrawing(); + + ClearBackground((Color){46,46,46}); + + BeginMode2D(camera); + + bool hovering = false; - bool hovering = false; + for( auto& n : nodes){ + Vec2D connector_position = n.position - ((n.position - mouse_pos)).norm() * (n.radius + 10.0f); + float dist_connector = (connector_position - mouse_pos).length(); + + float dist = (n.position - mouse_pos).length(); + + // connect nodes + if( (dist <= n.radius + 25.0f && dist > n.radius) || n.connecting){ + n.hover_connect = true; + } else { + n.hover_connect = false; + } - for( auto& n : nodes){ + if(dist_connector <= 6.0f && mouse_clicked) { + connecting_from = &n; + n.connecting = true; + } - if((n.position - mouse_pos).length() <= n.radius && !hovering) { - n.hover_move = true; - hovering = true; - } else { - n.hover_move = false; - } + if(n.connecting && mouse_down){ + DrawLine(connector_position.x, connector_position.y, mouse_pos.x, mouse_pos.y, (Color){229, 181, 103, 255}); + } + + if(mouse_released && n.connecting) { + n.connecting = false; + } + + if(mouse_released && n.hover_connect) { + n.connections.push_back(connecting_from); + connecting_from->connections.push_back(&n); + } + + // move node + if((n.position - mouse_pos).length() <= n.radius || n.picked_up){ + n.hover_move = true; + } else { + n.hover_move = false; + } - if(mouse_clicked && n.hover_move){ - n.clicked = true; - } - if(mouse_toggled) drag_origin = n.position; - if(mouse_pressed && n.clicked){ - n.position = mouse_pos; // - (drag_start - drag_origin); - } - if(!mouse_pressed) n.clicked = false; - n.update(); - n.draw(&window); - } + if(mouse_clicked && n.hover_move){ + n.picked_up = true; + drag_origin = mouse_pos; + } + if(mouse_down && n.picked_up){ + n.position = mouse_pos - (n.position - drag_origin); + } + if(mouse_down && n.hover_move) hovering = true; - for( auto& n : signals){ - n.speed = 2.0f; - n.direction = nodes[n.target_node_id].position - n.position; - if(n.position.dist(&nodes[n.target_node_id].position) < n.speed * 1.5) { - n.target_node_id++; - midi_out.send_message(libremidi::channel_events::control_change(2, n.target_node_id, 50)); - } - if(n.target_node_id == 10) n.target_node_id = 0; - n.update(); - n.draw(&window); - } - - if(!hovering && mouse_clicked) { - Vec2D ref = {1.f,0.f}; - Vec2D lineVec = mouse_pos - drag_start; - float width = lineVec.length(); - float angle = ref.angleDeg(lineVec); + if(mouse_released) { + n.picked_up = false; + } + n.draw(&mouse_pos); + } - sf::RectangleShape line; - line.setSize(sf::Vector2f(width, 2)); - line.setPosition(drag_start.x, drag_start.y); - line.setRotation(angle); - line.setFillColor(sf::Color(100,0,0)); - window.draw(line); - } - //window.draw(); - window.display(); + /*for( auto from : connections){*/ + /* for( auto to : from.second){*/ + /* Vec2D from_position = from.first->position - ((from.first->position - to->position)).norm() * (from.first->radius + 10.0f);*/ + /* Vec2D to_position = to->position - ((to->position - from.first->position)).norm() * (to->radius + 10.0f);*/ + /* DrawLine(from_position.x, from_position.y, to_position.x, to_position.y, (Color){229, 181, 103, 255});*/ + /* }*/ + /*}*/ + + for( auto& s : signals){ + s.direction = s.next->position - s.position; + if(s.position.dist(&s.next->position) < s.speed * 1.5) { + if(s.next->connections.size() > 0) { + s.next = s.next->connections[0]; + } + //midi_out.send_message(libremidi::channel_events::control_change(2, 10, 50)); + } + s.draw(&mouse_pos); + } + + if(!hovering && mouse_clicked) { + } + + EndMode2D(); + GuiWindowBox((Rectangle){16,16,232,400}, "config"); + + GuiButton((Rectangle){32, 64, 96, 20}, "button"); + + EndDrawing(); } + CloseWindow(); + + return 0; } diff --git a/src/moveable.h b/src/moveable.h index df5aea6..bc2b149 100644 --- a/src/moveable.h +++ b/src/moveable.h @@ -1,6 +1,5 @@ #pragma once -#include "SFML/Graphics/RenderWindow.hpp" #include "datatypes.h" class Movable{ @@ -16,6 +15,6 @@ class Movable{ Vec2D direction; virtual void update() {}; - virtual void draw(sf::RenderWindow *window) {}; + virtual void draw(Vec2D *mouse) {}; }; diff --git a/src/node.h b/src/node.h index ac24bee..3850f21 100644 --- a/src/node.h +++ b/src/node.h @@ -1,13 +1,14 @@ #pragma once -#include -#include +#include #include "datatypes.h" #include "moveable.h" #include +#define R 10.0f + class Node : public Movable{ public: @@ -16,21 +17,32 @@ class Node : public Movable{ float radius; - bool clicked = false; + int id; + bool picked_up = false; bool hover_move = false; bool hover_connect = false; + bool connecting = false; std::vector connections; - void update() {}; - - void draw(sf::RenderWindow* window) { - - sf::CircleShape circle(radius); - circle.setOrigin(radius/2.f, radius/2.f); - if(!hover_move) circle.setFillColor(sf::Color(180, 210, 115)); - if(hover_move) circle.setFillColor(sf::Color(108, 153, 187)); - circle.setPosition(position.x, position.y); - window->draw(circle); + void draw(Vec2D *mouse) { + if(!hover_move) DrawCircle(position.x, position.y, radius, (Color){180, 210, 115, 255}); + if(hover_move) DrawCircle(position.x, position.y, radius, (Color){108, 153, 187, 255}); + + Vec2D connector = position - ((position - *mouse)).norm() * (radius + R); + + for(auto& to : connections){ + Vec2D from_position = position - ((position - to->position)).norm() * (radius + 10.0f); + Vec2D to_position = to->position - ((to->position - position)).norm() * (to->radius + 10.0f); + DrawLine(from_position.x, from_position.y, to_position.x, to_position.y, (Color){229, 181, 103, 255}); + } + + if(hover_connect){ + DrawCircleLines(position.x, position.y, radius + R, (Color){108, 153, 187, 255}); + DrawCircle(connector.x, connector.y, 6.0f, (Color){108, 153, 187, 255}); + } else { + DrawCircleLines(position.x, position.y, radius + R, (Color){108, 153, 187, 50}); + DrawCircle(connector.x, connector.y, 6.0f, (Color){108, 153, 187, 50}); + } } }; diff --git a/src/signal.h b/src/signal.h index f44c6bd..259260a 100644 --- a/src/signal.h +++ b/src/signal.h @@ -1,32 +1,32 @@ #pragma once -#include "SFML/Graphics/CircleShape.hpp" -#include "SFML/Graphics/Color.hpp" -#include "SFML/Graphics/RenderWindow.hpp" +#include + #include "datatypes.h" #include "moveable.h" +#include "node.h" class Signal : public Movable{ public: Signal(); - Signal(float x, float y, float r) : Movable(Vec2D(x, y), Vec2D(0,0), 0.0), radius(r) {} + Signal(float x, float y, float r, float s) : Movable(Vec2D(x, y), Vec2D(0,0), s), radius(r) {} int id = 0; - + + Node *next; + + bool at_target = false; int target_node_id = 1; int source_node_id = 0; float radius; - void update() { position += direction.norm() * speed;}; + void draw(Vec2D *mouse) { + + position += direction.norm() * speed; - void draw(sf::RenderWindow *window) { - sf::CircleShape circle(radius); - circle.setFillColor(sf::Color(232, 125, 62)); - circle.setPosition(position.x, position.y); -// circle.getPoint(); -// circle.getPointCount() - window->draw(circle); - }; + DrawCircle(position.x, position.y, radius, (Color){232, 125, 62, 255}); + + } };

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%0AdKD9%$q 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