Collection of draw (from ImDrawList) and widgets. Version

Incentivise development Patreon

Become a Patron

PR & Discussion are open.



  • Triangle Pointer {Right, Up, Left, Down}

Used internally for LineSlider

  • Hue Band
  • Luminance Band
  • Saturation Band

Used Internally to implement HueSelector.

  • Color Ring

TODO: Ring HueSelector TODO: Add support for 2D (angle, radius) lambda

  • Custom Color Ring

  • Chromatic Plot{Bilinear, Nearest}
    • Chromatic Point
    • Chromatic Line

  • Convex Mask

Support for ConvexMask, will fail or flip triangle if the shape is not convex. In practice some non-convex shape could work if all vertices are visible from the corner of the BoundingBox Used.

  • DrawColorDensityPlot (aka ShaderToy)

Use carefully that can have impact on your performances for HighRes canvas or/and expensive lambda.


  • Hue Selector


Draft means draft.


  • ChromaticityPlot


  • DragLengthScalar

  • Slider 2D Float A version for Slider2DScaler is available for (Im{S|U}{8,16,32,64}, Float and Double)

  • Slider 2D Int

  • Range Select 2D

  • Slider 3D

  • Grid

  • 2D Move

  • Line Slider (TBD)


C++ features used internally:

  • std::string
  • template
  • constexpr
  • if constexpr
  • Lambda from template
  • auto
  • std::vector<float>, std::vector<bool> for isoline
You might also like...
  • Docking branch

    Docking branch

    Seems like api breaking changes:

    dear_widgets.cpp:1097:62: error: no member named 'FocusableItemRegister' in namespace 'ImGui'
                            const bool focus_requested = temp_input_allowed && ImGui::FocusableItemRegister(window, id);
    dear_widgets.cpp:1100:83: error: no member named 'NavInputId' in 'ImGuiContext'
                            if (focus_requested || clicked || double_clicked || g.NavActivateId == id || g.NavInputId == id)
                                                                                                         ~ ^
    dear_widgets.cpp:1106:100: error: no member named 'NavInputId' in 'ImGuiContext'
                                    if (temp_input_allowed && (focus_requested || (clicked && g.IO.KeyCtrl) || double_clicked || g.NavInputId == id))
                                                                                                                                 ~ ^
    dear_widgets.cpp:1109:13: error: no type named 'FocusableItemUnregister' in namespace 'ImGui'
    dear_widgets.cpp:1117:8: error: no member named 'NavInputId' in 'ImGuiContext'
                                            g.NavInputId = id;
                                            ~ ^
    dear_widgets.cpp:1119:13: error: no type named 'FocusableItemUnregister' in namespace 'ImGui'
    opened by caxapexac 1
  • Slider2* SameLine bug

    Slider2* SameLine bug

    Put two Slider2* widgets on ImGui::SameLine() and try to space them.

    Whether you pass an argument to ImGui::SameLine or follow that with ImGui::Ident() or ImGui::Dummy(), the rightmost Slider2 widget shrinks in scale the further you move it away from the leftmost Slider2 widget

    opened by logixworx 0
  • Feature Request

    Feature Request

    Excellent widget set! I have a simple feature request.

    For Slider 2d, I'd like to have a circle constraint on the center point. Draw a circle on the slider box and constrain the slider point inside the bounds of the circle.

    Also for the range widget I'd also like the option of having a circle drawn inside the box. But no constraints on the range rect - I'd like a function that returns the intersection points between the range rect and circle.

    opened by logixworx 6