mirror of
https://github.com/Drezil/imgui.git
synced 2025-02-16 22:42:44 +00:00
ImDrawList: Clarified PathArcTo() need for a_min <= a_max with an assert. Fixed PathArcToFast() handling of a_min > a_max.
This commit is contained in:
parent
03038df1cc
commit
56f7bdae99
@ -78,6 +78,8 @@ Other Changes:
|
|||||||
- Log/Capture: Improved the ascii look of various widgets, making large dumps more easily human readable.
|
- Log/Capture: Improved the ascii look of various widgets, making large dumps more easily human readable.
|
||||||
- ImDrawList: Fixed AddCircle()/AddCircleFilled() with (rad > 0.0f && rad < 1.0f && num_segments == 0). (#3738)
|
- ImDrawList: Fixed AddCircle()/AddCircleFilled() with (rad > 0.0f && rad < 1.0f && num_segments == 0). (#3738)
|
||||||
Would lead to a buffer read overflow.
|
Would lead to a buffer read overflow.
|
||||||
|
- ImDrawList: Clarified PathArcTo() need for a_min <= a_max with an assert.
|
||||||
|
- ImDrawList: Fixed PathArcToFast() handling of a_min > a_max.
|
||||||
- Demo: Added 'Examples->Fullscreen Window' demo. (#3789)
|
- Demo: Added 'Examples->Fullscreen Window' demo. (#3789)
|
||||||
- Backends: Win32: Dynamically loading XInput DLL instead of linking with it, facilite compiling with
|
- Backends: Win32: Dynamically loading XInput DLL instead of linking with it, facilite compiling with
|
||||||
old WindowSDK versions or running on Windows 7. (#3646, #3645, #3248, #2716) [@Demonese]
|
old WindowSDK versions or running on Windows 7. (#3646, #3645, #3248, #2716) [@Demonese]
|
||||||
|
@ -7130,7 +7130,7 @@ static void ShowExampleAppCustomRendering(bool* p_open)
|
|||||||
static bool curve_segments_override = false;
|
static bool curve_segments_override = false;
|
||||||
static int curve_segments_override_v = 8;
|
static int curve_segments_override_v = 8;
|
||||||
static ImVec4 colf = ImVec4(1.0f, 1.0f, 0.4f, 1.0f);
|
static ImVec4 colf = ImVec4(1.0f, 1.0f, 0.4f, 1.0f);
|
||||||
ImGui::DragFloat("Size", &sz, 0.2f, 2.0f, 72.0f, "%.0f");
|
ImGui::DragFloat("Size", &sz, 0.2f, 2.0f, 100.0f, "%.0f");
|
||||||
ImGui::DragFloat("Thickness", &thickness, 0.05f, 1.0f, 8.0f, "%.02f");
|
ImGui::DragFloat("Thickness", &thickness, 0.05f, 1.0f, 8.0f, "%.02f");
|
||||||
ImGui::SliderInt("N-gon sides", &ngon_sides, 3, 12);
|
ImGui::SliderInt("N-gon sides", &ngon_sides, 3, 12);
|
||||||
ImGui::Checkbox("##circlesegmentoverride", &circle_segments_override);
|
ImGui::Checkbox("##circlesegmentoverride", &circle_segments_override);
|
||||||
@ -7147,6 +7147,7 @@ static void ShowExampleAppCustomRendering(bool* p_open)
|
|||||||
const ImDrawCornerFlags corners_none = 0;
|
const ImDrawCornerFlags corners_none = 0;
|
||||||
const ImDrawCornerFlags corners_all = ImDrawCornerFlags_All;
|
const ImDrawCornerFlags corners_all = ImDrawCornerFlags_All;
|
||||||
const ImDrawCornerFlags corners_tl_br = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotRight;
|
const ImDrawCornerFlags corners_tl_br = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotRight;
|
||||||
|
const float rounding = sz / 5.0f;
|
||||||
const int circle_segments = circle_segments_override ? circle_segments_override_v : 0;
|
const int circle_segments = circle_segments_override ? circle_segments_override_v : 0;
|
||||||
const int curve_segments = curve_segments_override ? curve_segments_override_v : 0;
|
const int curve_segments = curve_segments_override ? curve_segments_override_v : 0;
|
||||||
float x = p.x + 4.0f;
|
float x = p.x + 4.0f;
|
||||||
@ -7158,8 +7159,8 @@ static void ShowExampleAppCustomRendering(bool* p_open)
|
|||||||
draw_list->AddNgon(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, ngon_sides, th); x += sz + spacing; // N-gon
|
draw_list->AddNgon(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, ngon_sides, th); x += sz + spacing; // N-gon
|
||||||
draw_list->AddCircle(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, circle_segments, th); x += sz + spacing; // Circle
|
draw_list->AddCircle(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, circle_segments, th); x += sz + spacing; // Circle
|
||||||
draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 0.0f, corners_none, th); x += sz + spacing; // Square
|
draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 0.0f, corners_none, th); x += sz + spacing; // Square
|
||||||
draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f, corners_all, th); x += sz + spacing; // Square with all rounded corners
|
draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, rounding, corners_all, th); x += sz + spacing; // Square with all rounded corners
|
||||||
draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f, corners_tl_br, th); x += sz + spacing; // Square with two rounded corners
|
draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, rounding, corners_tl_br, th); x += sz + spacing; // Square with two rounded corners
|
||||||
draw_list->AddTriangle(ImVec2(x+sz*0.5f,y), ImVec2(x+sz, y+sz-0.5f), ImVec2(x, y+sz-0.5f), col, th);x += sz + spacing; // Triangle
|
draw_list->AddTriangle(ImVec2(x+sz*0.5f,y), ImVec2(x+sz, y+sz-0.5f), ImVec2(x, y+sz-0.5f), col, th);x += sz + spacing; // Triangle
|
||||||
//draw_list->AddTriangle(ImVec2(x+sz*0.2f,y), ImVec2(x, y+sz-0.5f), ImVec2(x+sz*0.4f, y+sz-0.5f), col, th);x+= sz*0.4f + spacing; // Thin triangle
|
//draw_list->AddTriangle(ImVec2(x+sz*0.2f,y), ImVec2(x, y+sz-0.5f), ImVec2(x+sz*0.4f, y+sz-0.5f), col, th);x+= sz*0.4f + spacing; // Thin triangle
|
||||||
draw_list->AddLine(ImVec2(x, y), ImVec2(x + sz, y), col, th); x += sz + spacing; // Horizontal line (note: drawing a filled rectangle will be faster!)
|
draw_list->AddLine(ImVec2(x, y), ImVec2(x + sz, y), col, th); x += sz + spacing; // Horizontal line (note: drawing a filled rectangle will be faster!)
|
||||||
|
@ -1018,11 +1018,12 @@ void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_coun
|
|||||||
|
|
||||||
void ImDrawList::PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12)
|
void ImDrawList::PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12)
|
||||||
{
|
{
|
||||||
if (radius == 0.0f || a_min_of_12 > a_max_of_12)
|
if (radius == 0.0f)
|
||||||
{
|
{
|
||||||
_Path.push_back(center);
|
_Path.push_back(center);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
IM_ASSERT(a_min_of_12 <= a_max_of_12);
|
||||||
|
|
||||||
// For legacy reason the PathArcToFast() always takes angles where 2*PI is represented by 12,
|
// For legacy reason the PathArcToFast() always takes angles where 2*PI is represented by 12,
|
||||||
// but it is possible to set IM_DRAWLIST_ARCFAST_TESSELATION_MULTIPLIER to a higher value. This should compile to a no-op otherwise.
|
// but it is possible to set IM_DRAWLIST_ARCFAST_TESSELATION_MULTIPLIER to a higher value. This should compile to a no-op otherwise.
|
||||||
@ -1046,6 +1047,7 @@ void ImDrawList::PathArcTo(const ImVec2& center, float radius, float a_min, floa
|
|||||||
_Path.push_back(center);
|
_Path.push_back(center);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
IM_ASSERT(a_min <= a_max);
|
||||||
|
|
||||||
// Note that we are adding a point at both a_min and a_max.
|
// Note that we are adding a point at both a_min and a_max.
|
||||||
// If you are trying to draw a full closed circle you don't want the overlapping points!
|
// If you are trying to draw a full closed circle you don't want the overlapping points!
|
||||||
|
Loading…
x
Reference in New Issue
Block a user