Git Product home page Git Product logo

imgui-notify's Introduction

imgui-notify

Is a header-only wrapper made to create notifications with Dear ImGui. As I couldn't find any library for this I just decided to create my own. We will use Font Awesome 5 for icons.

forthebadge forthebadge

Requirements

  • You must use a font other than the default one. Font-Awesome icons used in this library cannot be merged with default font. You can use Tahoma (provided in the example project).
  • If you load the font using AddFontFromMemoryTTF (from memory, instead of from a file on disk) and memory is read-only as in the example, you must pass a ImFontConfig structure with FontDataOwnedByAtlas = false to prevent imgui from attempting to free the buffer (which will lead into a crash).

Changes in version 2

  • Toast now contains a title. If no title is provided, a default one is used (ImGuiToastType_Success will result in "Success")
  • Added getters and setters to get/set private properties
  • Added assertions
  • Constructors will only accept a content (formatting is possible), title must be set with ImGuiToast::set_title() (see example)
  • "notify" namespace was removed, we now use "ImGui" namespace for a better implementation
  • "notify::init" was removed, you must now call "ImGui::MergeIconsWithLatestFont" after EACH loaded font in your initialisation (see example)
  • "notify::render" was renamed to "ImGui::RenderNotifications()"
  • By default, NOTIFY_USE_SEPARATOR is defined which will add a separator (horizontal line) between the title and the content.
  • Now supporting multiline content (1/3 of the total view port width as max-width)

Usage

Include

#include "src/imgui_notify.h"
#include "tahoma.h" // <-- Required font!

Initialisation (after impl call, e.g ImGui_ImplDX12_Init)

ImGuiIO* io = &ImGui::GetIO();

ImFontConfig font_cfg;
font_cfg.FontDataOwnedByAtlas = false;
io->Fonts->AddFontFromMemoryTTF((void*)tahoma, sizeof(tahoma), 17.f, &font_cfg);

// Initialize notify
ImGui::MergeIconsWithLatestFont(16.f, false);

// If you use multiple fonts, repeat the same thing!
// io->Fonts->AddFontFromMemoryTTF((void*)another_font, sizeof(another_font), 17.f, &font_cfg);
// ImGui::MergeIconsWithLatestFont(16.f, false);

Create notifications

// A few examples... (no title provided, default one used!)
ImGui::InsertNotification({ ImGuiToastType_Success, 3000, "Hello World! This is a success! %s", "We can also format here:)" });
ImGui::InsertNotification({ ImGuiToastType_Warning, 3000, "Hello World! This is a warning! %d", 0x1337 });
ImGui::InsertNotification({ ImGuiToastType_Error, 3000, "Hello World! This is an error! 0x%X", 0xDEADBEEF });
ImGui::InsertNotification({ ImGuiToastType_Info, 3000, "Hello World! This is an info!" });
ImGui::InsertNotification({ ImGuiToastType_Info, 3000, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation" });

// Now using a custom title...
ImGuiToast toast(ImGuiToastType_Success, 3000); // <-- content can also be passed here as above
toast.set_title("This is a %s title", "wonderful");
toast.set_content("Lorem ipsum dolor sit amet");
ImGui::InsertNotification(toast);

Rendering

// Render toasts on top of everything, at the end of your code!
// You should push style vars here
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 5.f); // Round borders
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(43.f / 255.f, 43.f / 255.f, 43.f / 255.f, 100.f / 255.f)); // Background color
ImGui::RenderNotifications(); // <-- Here we render all notifications
ImGui::PopStyleVar(1); // Don't forget to Pop()
ImGui::PopStyleColor(1);

Showcase

Showcase

License

MIT license

imgui-notify's People

Contributors

patrickcjk avatar thegondos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.