/********************************************************************************************** * * raylibExtras * Utilities and Shared Components for Raylib * * rlImGui * basic ImGui integration * * LICENSE: ZLIB * * Copyright (c) 2024 Jeffery Myers * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * **********************************************************************************************/ #pragma once #include "raylib.h" // 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 RLIMGUIAPI __declspec(dllexport) // We are building the library as a Win32 shared library (.dll) #elif defined(USE_LIBTYPE_SHARED) #define RLIMGUIAPI __declspec(dllimport) // We are using the library as a Win32 shared library (.dll) #endif #else #if defined(BUILD_LIBTYPE_SHARED) #define RLIMGUIAPI __attribute__((visibility("default"))) // We are building as a Unix shared library (.so/.dylib) #endif #endif #ifndef RLIMGUIAPI #define RLIMGUIAPI // Functions defined as 'extern' by default (implicit specifiers) #endif #ifndef NO_FONT_AWESOME #include "IconsFontAwesome6.h" #ifndef FONT_AWESOME_ICON_SIZE #define FONT_AWESOME_ICON_SIZE 11 #endif #endif #ifdef __cplusplus extern "C" { #endif // High level API. This API is designed in the style of raylib and meant to work with reaylib code. // It will manage it's own ImGui context and call common ImGui functions (like NewFrame and Render) for you // for a lower level API that matches the other ImGui platforms, please see imgui_impl_raylib.h /// /// Sets up ImGui, loads fonts and themes /// Calls ImGui_ImplRaylib_Init and sets the theme. Will install Font awesome by default /// /// when true(default) the dark theme is used, when false the light theme is used RLIMGUIAPI void rlImGuiSetup(bool darkTheme); /// /// Starts a new ImGui Frame /// Calls ImGui_ImplRaylib_NewFrame, ImGui_ImplRaylib_ProcessEvents, and ImGui::NewFrame together /// RLIMGUIAPI void rlImGuiBegin(void); /// /// Ends an ImGui frame and submits all ImGui drawing to raylib for processing. /// Calls ImGui:Render, an d ImGui_ImplRaylib_RenderDrawData to draw to the current raylib render target /// RLIMGUIAPI void rlImGuiEnd(void); /// /// Cleanup ImGui and unload font atlas /// Calls ImGui_ImplRaylib_Shutdown /// RLIMGUIAPI void rlImGuiShutdown(void); // Advanced StartupAPI /// /// Custom initialization. Not needed if you call rlImGuiSetup. Only needed if you want to add custom setup code. /// must be followed by rlImGuiEndInitImGui /// Called by ImGui_ImplRaylib_Init, and does the first part of setup, before fonts are rendered /// RLIMGUIAPI void rlImGuiBeginInitImGui(void); /// /// End Custom initialization. Not needed if you call rlImGuiSetup. Only needed if you want to add custom setup code. /// must be proceeded by rlImGuiBeginInitImGui /// Called by ImGui_ImplRaylib_Init and does the second part of setup, and renders fonts. /// RLIMGUIAPI void rlImGuiEndInitImGui(void); /// /// Forces the font texture atlas to be recomputed and re-cached /// RLIMGUIAPI void rlImGuiReloadFonts(void); // Advanced Update API /// /// Starts a new ImGui Frame with a specified delta time /// /// delta time, any value < 0 will use raylib GetFrameTime RLIMGUIAPI void rlImGuiBeginDelta(float deltaTime); // ImGui Image API extensions // Purely for convenience in working with raylib textures as images. // If you want to call ImGui image functions directly, simply pass them the pointer to the texture. /// /// Draw a texture as an image in an ImGui Context /// Uses the current ImGui Cursor position and the full texture size. /// /// The raylib texture to draw RLIMGUIAPI void rlImGuiImage(const Texture *image); /// /// Draw a texture as an image in an ImGui Context at a specific size /// Uses the current ImGui Cursor position and the specified width and height /// The image will be scaled up or down to fit as needed /// /// The raylib texture to draw /// The width of the drawn image /// The height of the drawn image RLIMGUIAPI void rlImGuiImageSize(const Texture *image, int width, int height); /// /// Draw a texture as an image in an ImGui Context at a specific size /// Uses the current ImGui Cursor position and the specified size /// The image will be scaled up or down to fit as needed /// /// The raylib texture to draw /// The size of drawn image RLIMGUIAPI void rlImGuiImageSizeV(const Texture* image, Vector2 size); /// /// Draw a portion texture as an image in an ImGui Context at a defined size /// Uses the current ImGui Cursor position and the specified size /// The image will be scaled up or down to fit as needed /// /// The raylib texture to draw /// The width of the drawn image /// The height of the drawn image /// The portion of the texture to draw as an image. Negative values for the width and height will flip the image RLIMGUIAPI void rlImGuiImageRect(const Texture* image, int destWidth, int destHeight, Rectangle sourceRect); /// /// Draws a render texture as an image an ImGui Context, automatically flipping the Y axis so it will show correctly on screen /// /// The render texture to draw RLIMGUIAPI void rlImGuiImageRenderTexture(const RenderTexture* image); /// /// Draws a render texture as an image an ImGui Context, automatically flipping the Y axis so it will show correctly on screen /// Fits the render texture to the available content area /// /// The render texture to draw /// When true the image will be centered in the content area RLIMGUIAPI void rlImGuiImageRenderTextureFit(const RenderTexture* image, bool center); /// /// Draws a texture as an image button in an ImGui context. Uses the current ImGui cursor position and the full size of the texture /// /// The display name and ImGui ID for the button /// The texture to draw /// True if the button was clicked bool rlImGuiImageButton(const char* name, const Texture* image); /// /// Draws a texture as an image button in an ImGui context. Uses the current ImGui cursor position and the specified size. /// /// The display name and ImGui ID for the button /// The texture to draw /// The size of the button /// True if the button was clicked RLIMGUIAPI bool rlImGuiImageButtonSize(const char* name, const Texture* image, struct ImVec2 size); #ifdef __cplusplus } #endif