Installation
Installing UntitledImGuiTextUtils is easy. Simply put all code into your project's code and compile them into your binary statically.
Make sure to also have a relatively up-to-date dear imgui version,
and that imgui.h
is in the include path, so that it can be
included in the following way:
#include <imgui.h>
Finally, to include the library, simply include
UImguiTextUtils.h
.
Configuration
Disabling C++ strings
By default, we have additional functions that use
std::string
for convenience. To disable C++ strings, define
the UIMGUI_TEXT_UTILS_DISABLE_STRING
macro.
Using custom C++ strings
If you want to replace std::string
with another
std::string
-compatible C++ string, simply define the
UIMGUI_TEXT_UTILS_CUSTOM_STRING
macro and make sure it is
equal to the type of the string. Then, define the
UIMGUI_TEXT_UTILS_CUSTOM_STRING_INCLUDE
macro, where its
value should be a string pointing to the type's header to include.
Exporting symbols out of DLLs
If you want to export the symbols of the library out of a DLL, simply
define the MLS_EXPORT_LIBRARY
macro. Then when building the
library, make sure the macro MLS_LIB_COMPILE
is
enabled.
Users of CMake will have that enabled by default.
Integrating into your project
At some point after dear imgui is initialised, make sure to configure
your data. All data is stored in the UImGui::TextUtilsData
struct, which looks like this:
struct IMGUI_API TextUtilsData
{
* bold;
ImFont* italic;
ImFont* boldItalic;
ImFont* monospace;
ImFont* small;
ImFont
std::function<void(const char*)> defaultLinkClickEvent = [](const char*) -> void {};
};
The ImFont*
variables are pointers to dear imgui fonts,
these will be used by different functions to render with specific font
styles, thus, make sure that valid fonts are provided.
The last variable is the default link click event. It gets called when the user clicks on a link.
Setting the data
To set the data, simply call
UImGui::TextUtils::initTextUtilsData
and pass a pointer to
a TextUtilsData
struct as an argument. You have to store
the struct yourself, so make sure it is not deallocated, until no
further calls to the library are made.
Example code:
void setData()
{
auto& io = ImGui::GetIO();
.Fonts->AddFontDefault();
iostatic UImGui::TextUtilsData data =
{
.bold = io.Fonts->AddFontFromFileTTF(UIMGUI_CONTENT_DIR"NotoSans-Bold.ttf", 16.0f),
.italic = io.Fonts->AddFontFromFileTTF(UIMGUI_CONTENT_DIR"NotoSans-Italic.ttf", 16.0f),
.boldItalic = io.Fonts->AddFontFromFileTTF(UIMGUI_CONTENT_DIR"NotoSans-BoldItalic.ttf", 16.0f),
.monospace = io.Fonts->AddFontFromFileTTF(UIMGUI_CONTENT_DIR"JetBrainsMono-Regular.ttf", 16.0f),
.smallFont = io.Fonts->AddFontFromFileTTF(UIMGUI_CONTENT_DIR"NotoSans-Light.ttf", 13.0f)
};
::TextUtils::initTextUtilsData(&data);
UImGui}
At any point, you can also fetch the global
TextUtilsData
structure by calling the
UImGui::TextUtils::getTextUtilsData
function.
Testing out the library
In classic dear imgui fashion, we offer a demo window that showcases
all features of the library. To use it, simply call
UImGui::TextUtils::ShowDemoWindow
.