|
|
@ -269,26 +269,26 @@ struct IMGUI_API ImRect |
|
|
|
ImRect(const ImVec4& v) : Min(v.x, v.y), Max(v.z, v.w) {} |
|
|
|
ImRect(float x1, float y1, float x2, float y2) : Min(x1, y1), Max(x2, y2) {} |
|
|
|
|
|
|
|
ImVec2 GetCenter() const { return ImVec2((Min.x+Max.x)*0.5f, (Min.y+Max.y)*0.5f); } |
|
|
|
ImVec2 GetSize() const { return ImVec2(Max.x-Min.x, Max.y-Min.y); } |
|
|
|
float GetWidth() const { return Max.x-Min.x; } |
|
|
|
float GetHeight() const { return Max.y-Min.y; } |
|
|
|
ImVec2 GetTL() const { return Min; } // Top-left
|
|
|
|
ImVec2 GetTR() const { return ImVec2(Max.x, Min.y); } // Top-right
|
|
|
|
ImVec2 GetBL() const { return ImVec2(Min.x, Max.y); } // Bottom-left
|
|
|
|
ImVec2 GetBR() const { return Max; } // Bottom-right
|
|
|
|
bool Contains(const ImVec2& p) const { return p.x >= Min.x && p.y >= Min.y && p.x < Max.x && p.y < Max.y; } |
|
|
|
bool Contains(const ImRect& r) const { return r.Min.x >= Min.x && r.Min.y >= Min.y && r.Max.x < Max.x && r.Max.y < Max.y; } |
|
|
|
bool Overlaps(const ImRect& r) const { return r.Min.y < Max.y && r.Max.y > Min.y && r.Min.x < Max.x && r.Max.x > Min.x; } |
|
|
|
void Add(const ImVec2& rhs) { if (Min.x > rhs.x) Min.x = rhs.x; if (Min.y > rhs.y) Min.y = rhs.y; if (Max.x < rhs.x) Max.x = rhs.x; if (Max.y < rhs.y) Max.y = rhs.y; } |
|
|
|
void Add(const ImRect& rhs) { if (Min.x > rhs.Min.x) Min.x = rhs.Min.x; if (Min.y > rhs.Min.y) Min.y = rhs.Min.y; if (Max.x < rhs.Max.x) Max.x = rhs.Max.x; if (Max.y < rhs.Max.y) Max.y = rhs.Max.y; } |
|
|
|
void Expand(const float amount) { Min.x -= amount; Min.y -= amount; Max.x += amount; Max.y += amount; } |
|
|
|
void Expand(const ImVec2& amount) { Min.x -= amount.x; Min.y -= amount.y; Max.x += amount.x; Max.y += amount.y; } |
|
|
|
void Translate(const ImVec2& v) { Min.x += v.x; Min.y += v.y; Max.x += v.x; Max.y += v.y; } |
|
|
|
void ClipWith(const ImRect& clip) { if (Min.x < clip.Min.x) Min.x = clip.Min.x; if (Min.y < clip.Min.y) Min.y = clip.Min.y; if (Max.x > clip.Max.x) Max.x = clip.Max.x; if (Max.y > clip.Max.y) Max.y = clip.Max.y; } |
|
|
|
void Floor() { Min.x = (float)(int)Min.x; Min.y = (float)(int)Min.y; Max.x = (float)(int)Max.x; Max.y = (float)(int)Max.y; } |
|
|
|
void FixInverted() { if (Min.x > Max.x) ImSwap(Min.x, Max.x); if (Min.y > Max.y) ImSwap(Min.y, Max.y); } |
|
|
|
bool IsFinite() const { return Min.x != FLT_MAX; } |
|
|
|
ImVec2 GetCenter() const { return ImVec2((Min.x + Max.x) * 0.5f, (Min.y + Max.y) * 0.5f); } |
|
|
|
ImVec2 GetSize() const { return ImVec2(Max.x - Min.x, Max.y - Min.y); } |
|
|
|
float GetWidth() const { return Max.x - Min.x; } |
|
|
|
float GetHeight() const { return Max.y - Min.y; } |
|
|
|
ImVec2 GetTL() const { return Min; } // Top-left
|
|
|
|
ImVec2 GetTR() const { return ImVec2(Max.x, Min.y); } // Top-right
|
|
|
|
ImVec2 GetBL() const { return ImVec2(Min.x, Max.y); } // Bottom-left
|
|
|
|
ImVec2 GetBR() const { return Max; } // Bottom-right
|
|
|
|
bool Contains(const ImVec2& p) const { return p.x >= Min.x && p.y >= Min.y && p.x < Max.x && p.y < Max.y; } |
|
|
|
bool Contains(const ImRect& r) const { return r.Min.x >= Min.x && r.Min.y >= Min.y && r.Max.x < Max.x && r.Max.y < Max.y; } |
|
|
|
bool Overlaps(const ImRect& r) const { return r.Min.y < Max.y && r.Max.y > Min.y && r.Min.x < Max.x && r.Max.x > Min.x; } |
|
|
|
void Add(const ImVec2& p) { if (Min.x > p.x) Min.x = p.x; if (Min.y > p.y) Min.y = p.y; if (Max.x < p.x) Max.x = p.x; if (Max.y < p.y) Max.y = p.y; } |
|
|
|
void Add(const ImRect& r) { if (Min.x > r.Min.x) Min.x = r.Min.x; if (Min.y > r.Min.y) Min.y = r.Min.y; if (Max.x < r.Max.x) Max.x = r.Max.x; if (Max.y < r.Max.y) Max.y = r.Max.y; } |
|
|
|
void Expand(const float amount) { Min.x -= amount; Min.y -= amount; Max.x += amount; Max.y += amount; } |
|
|
|
void Expand(const ImVec2& amount) { Min.x -= amount.x; Min.y -= amount.y; Max.x += amount.x; Max.y += amount.y; } |
|
|
|
void Translate(const ImVec2& v) { Min.x += v.x; Min.y += v.y; Max.x += v.x; Max.y += v.y; } |
|
|
|
void ClipWith(const ImRect& r) { if (Min.x < r.Min.x) Min.x = r.Min.x; if (Min.y < r.Min.y) Min.y = r.Min.y; if (Max.x > r.Max.x) Max.x = r.Max.x; if (Max.y > r.Max.y) Max.y = r.Max.y; } |
|
|
|
void Floor() { Min.x = (float)(int)Min.x; Min.y = (float)(int)Min.y; Max.x = (float)(int)Max.x; Max.y = (float)(int)Max.y; } |
|
|
|
void FixInverted() { if (Min.x > Max.x) ImSwap(Min.x, Max.x); if (Min.y > Max.y) ImSwap(Min.y, Max.y); } |
|
|
|
bool IsFinite() const { return Min.x != FLT_MAX; } |
|
|
|
}; |
|
|
|
|
|
|
|
// Stacked color modifier, backup of modified data so we can restore it
|
|
|
|