//------------------------------------------------------------------------------ // VERSION 0.9.1 // // LICENSE // This software is dual-licensed to the public domain and under the following // license: you are granted a perpetual, irrevocable license to copy, modify, // publish, and distribute this file as you see fit. // // CREDITS // Written by Michal Cichon //------------------------------------------------------------------------------ # ifndef __IMGUI_EXTRA_MATH_H__ # define __IMGUI_EXTRA_MATH_H__ # pragma once //------------------------------------------------------------------------------ # ifndef IMGUI_DEFINE_MATH_OPERATORS # define IMGUI_DEFINE_MATH_OPERATORS # endif # include # include //------------------------------------------------------------------------------ struct ImLine { ImVec2 A, B; }; //------------------------------------------------------------------------------ # if IMGUI_VERSION_NUM < 19002 inline bool operator==(const ImVec2& lhs, const ImVec2& rhs); inline bool operator!=(const ImVec2& lhs, const ImVec2& rhs); # endif inline ImVec2 operator*(const float lhs, const ImVec2& rhs); # if IMGUI_VERSION_NUM < 18955 inline ImVec2 operator-(const ImVec2& lhs); # endif //------------------------------------------------------------------------------ inline float ImLength(float v); inline float ImLength(const ImVec2& v); inline float ImLengthSqr(float v); inline ImVec2 ImNormalized(const ImVec2& v); //------------------------------------------------------------------------------ inline bool ImRect_IsEmpty(const ImRect& rect); inline ImVec2 ImRect_ClosestPoint(const ImRect& rect, const ImVec2& p, bool snap_to_edge); inline ImVec2 ImRect_ClosestPoint(const ImRect& rect, const ImVec2& p, bool snap_to_edge, float radius); inline ImVec2 ImRect_ClosestPoint(const ImRect& rect, const ImRect& b); inline ImLine ImRect_ClosestLine(const ImRect& rect_a, const ImRect& rect_b); inline ImLine ImRect_ClosestLine(const ImRect& rect_a, const ImRect& rect_b, float radius_a, float radius_b); //------------------------------------------------------------------------------ namespace ImEasing { template inline V EaseOutQuad(V b, V c, T t) { return b - c * (t * (t - 2)); } } // namespace ImEasing //------------------------------------------------------------------------------ # include "imgui_extra_math.inl" //------------------------------------------------------------------------------ # endif // __IMGUI_EXTRA_MATH_H__