diff --git a/implot.cpp b/implot.cpp index f13de78..eaea588 100644 --- a/implot.cpp +++ b/implot.cpp @@ -34,14 +34,14 @@ You can read releases logs https://github.com/epezent/implot/releases for more d - 2020/05/13 (0.2) - ImMarker was change to ImPlotMarker and ImAxisFlags was changed to ImPlotAxisFlags - 2020/05/11 (0.2) - ImPlotFlags_Selection was changed to ImPlotFlags_BoxSelect - 2020/05/11 (0.2) - The namespace ImGui:: was replaced with ImPlot::. As a result, the following additional changes were made: - - Functions that were prefixed or decorated with the word "Plot" have been truncated. E.g., `ImGui::PlotBar` is now just `ImPlot::Bar`. + - Functions that were prefixed or decorated with the word "Plot" have been truncated. E.g., `ImGui::PlotBar` is now just `ImPlot::Bar`. It should be fairly obvious what was what. - - Some functions have been given names that would have otherwise collided with the ImGui namespace. This has been done to maintain a consistent - style with ImGui. E.g., 'ImGui::PushPlotStyleVar` is now 'ImPlot::PushStyleVar'. + - Some functions have been given names that would have otherwise collided with the ImGui namespace. This has been done to maintain a consistent + style with ImGui. E.g., 'ImGui::PushPlotStyleVar` is now 'ImPlot::PushStyleVar'. - 2020/05/10 (0.2) - The following function/struct names were changes: - ImPlotRange -> ImPlotLimits - GetPlotRange() -> GetPlotLimits() - - SetNextPlotRange -> SetNextPlotLimits + - SetNextPlotRange -> SetNextPlotLimits - SetNextPlotRangeX -> SetNextPlotLimitsX - SetNextPlotRangeY -> SetNextPlotLimitsY - 2020/05/10 (0.2) - Plot queries are pixel based by default. Query rects that maintain relative plot position have been removed. This was done to support multi-y-axis. @@ -139,7 +139,7 @@ inline bool HasFlag(TSet set, TFlag flag) { } /// Flips a flag in a flagset -template +template inline void FlipFlag(TSet& set, TFlag flag) { HasFlag(set, flag) ? set &= ~flag : set |= flag; } @@ -240,7 +240,7 @@ ImVec4 NextColor(); /// Tick mark info struct ImTick { - ImTick(double value, bool major, bool render_label = true) { + ImTick(double value, bool major, bool render_label = true) { PlotPos = value; Major = major; RenderLabel = render_label; @@ -255,11 +255,11 @@ struct ImTick { struct ImPlotItem { ImPlotItem() { - Show = true; + Show = true; Highlight = false; - Color = NextColor(); - NameOffset = -1; - ID = 0; + Color = NextColor(); + NameOffset = -1; + ID = 0; } ~ImPlotItem() { ID = 0; } bool Show; @@ -271,13 +271,13 @@ struct ImPlotItem { /// Plot axis structure. You shouldn't need to construct this! struct ImPlotAxis { - ImPlotAxis() { + ImPlotAxis() { Dragging = false; Range.Min = 0; Range.Max = 1; - Divisions = 3; - Subdivisions = 10; - Flags = PreviousFlags = ImPlotAxisFlags_Default; + Divisions = 3; + Subdivisions = 10; + Flags = PreviousFlags = ImPlotAxisFlags_Default; } bool Dragging; ImPlotRange Range; @@ -332,14 +332,14 @@ struct ImPlotContext { RestorePalette(); } - /// ALl Plots + /// ALl Plots ImPool Plots; /// Current Plot ImPlotState* CurrentPlot; // Legend - ImVector LegendIndices; + ImVector LegendIndices; ImGuiTextBuffer LegendLabels; - // Bounding regions + // Bounding regions ImRect BB_Frame; ImRect BB_Canvas; ImRect BB_Grid; @@ -347,8 +347,8 @@ struct ImPlotContext { bool Hov_Frame; bool Hov_Grid; // Cached Colors - ImU32 Col_Frame, Col_Bg, Col_Border, - Col_Txt, Col_TxtDis, + ImU32 Col_Frame, Col_Bg, Col_Border, + Col_Txt, Col_TxtDis, Col_SlctBg, Col_SlctBd, Col_QryBg, Col_QryBd; struct AxisColor { @@ -386,7 +386,7 @@ struct ImPlotContext { ImPlotStyle Style; ImVector ColorModifiers; // Stack for PushStyleColor()/PopStyleColor() ImVector StyleModifiers; // Stack for PushStyleVar()/PopStyleVar() - ImNextPlotData NextPlotData; + ImNextPlotData NextPlotData; // Digital plot item count int DigitalPlotItemCnt; int DigitalPlotOffset; @@ -465,7 +465,7 @@ inline ImVec2 PlotToPixels(float x, float y, int y_axis_in = -1) { if (HasFlag(gp.CurrentPlot->XAxis.Flags, ImPlotAxisFlags_LogScale)) { float t = log10(x / gp.CurrentPlot->XAxis.Range.Min) / gp.LogDenX; x = ImLerp(gp.CurrentPlot->XAxis.Range.Min, gp.CurrentPlot->XAxis.Range.Max, t); - } + } if (HasFlag(gp.CurrentPlot->YAxis[y_axis].Flags, ImPlotAxisFlags_LogScale)) { float t = log10(y / gp.CurrentPlot->YAxis[y_axis].Range.Min) / gp.LogDenY[y_axis]; y = ImLerp(gp.CurrentPlot->YAxis[y_axis].Range.Min, gp.CurrentPlot->YAxis[y_axis].Range.Max, t); @@ -723,9 +723,9 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons const ImGuiID ID = Window->GetID(title); const ImGuiStyle &Style = G.Style; - const ImGuiIO & IO = ImGui::GetIO(); + const ImGuiIO & IO = ImGui::GetIO(); - bool just_created = gp.Plots.GetByKey(ID) == NULL; + bool just_created = gp.Plots.GetByKey(ID) == NULL; gp.CurrentPlot = gp.Plots.GetOrAddByKey(ID); ImPlotState &plot = *gp.CurrentPlot; @@ -739,10 +739,10 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons plot.YAxis[2].Flags = y3_flags; } else { - // TODO: Check which individual flags changed, and only reset those! + // TODO: Check which individual flags changed, and only reset those! // There's probably an easy bit mask trick I'm not aware of. - if (flags != plot.PreviousFlags) - plot.Flags = flags; + if (flags != plot.PreviousFlags) + plot.Flags = flags; if (y_flags != plot.YAxis[0].PreviousFlags) plot.YAxis[0].PreviousFlags = y_flags; if (y2_flags != plot.YAxis[1].PreviousFlags) @@ -826,7 +826,7 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons if (HasFlag(plot.XAxis.Flags, ImPlotAxisFlags_Adaptive)) { plot.XAxis.Divisions = (int)IM_ROUND(0.003 * gp.BB_Canvas.GetWidth()); if (plot.XAxis.Divisions < 2) - plot.XAxis.Divisions = 2; + plot.XAxis.Divisions = 2; } for (int i = 0; i < MAX_Y_AXES; i++) { if (HasFlag(plot.YAxis[i].Flags, ImPlotAxisFlags_Adaptive)) { @@ -871,7 +871,7 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons ImGui::RenderFrame(gp.BB_Frame.Min, gp.BB_Frame.Max, gp.Col_Frame, true, Style.FrameRounding); // canvas bb - gp.BB_Canvas = ImRect(gp.BB_Frame.Min + Style.WindowPadding, gp.BB_Frame.Max - Style.WindowPadding); + gp.BB_Canvas = ImRect(gp.BB_Frame.Min + Style.WindowPadding, gp.BB_Frame.Max - Style.WindowPadding); gp.RenderX = (HasFlag(plot.XAxis.Flags, ImPlotAxisFlags_GridLines) || HasFlag(plot.XAxis.Flags, ImPlotAxisFlags_TickMarks) || @@ -879,8 +879,8 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons for (int i = 0; i < MAX_Y_AXES; i++) { gp.RenderY[i] = y[i].present && - (HasFlag(plot.YAxis[i].Flags, ImPlotAxisFlags_GridLines) || - HasFlag(plot.YAxis[i].Flags, ImPlotAxisFlags_TickMarks) || + (HasFlag(plot.YAxis[i].Flags, ImPlotAxisFlags_GridLines) || + HasFlag(plot.YAxis[i].Flags, ImPlotAxisFlags_TickMarks) || HasFlag(plot.YAxis[i].Flags, ImPlotAxisFlags_TickLabels)) && plot.YAxis[i].Divisions > 1; } @@ -945,7 +945,7 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons ImRect centralRegion({gp.BB_Grid.Min.x + 6, gp.BB_Grid.Min.y}, {gp.BB_Grid.Max.x - 6, gp.BB_Grid.Max.y}); - + const bool hov_y_axis_region[MAX_Y_AXES] = { y[0].present && (yAxisRegion_bb[0].Contains(IO.MousePos) || centralRegion.Contains(IO.MousePos)), y[1].present && (yAxisRegion_bb[1].Contains(IO.MousePos) || centralRegion.Contains(IO.MousePos)), @@ -954,7 +954,7 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons const bool any_hov_y_axis_region = hov_y_axis_region[0] || hov_y_axis_region[1] || hov_y_axis_region[2]; // legend hovered from last frame - const bool hov_legend = HasFlag(plot.Flags, ImPlotFlags_Legend) ? gp.Hov_Frame && plot.BB_Legend.Contains(IO.MousePos) : false; + const bool hov_legend = HasFlag(plot.Flags, ImPlotFlags_Legend) ? gp.Hov_Frame && plot.BB_Legend.Contains(IO.MousePos) : false; bool hov_query = false; if (gp.Hov_Frame && gp.Hov_Grid && plot.Queried && !plot.Querying) { @@ -970,7 +970,7 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons if (plot.DraggingQuery && (IO.MouseReleased[0] || !IO.MouseDown[0])) { plot.DraggingQuery = false; } - if (plot.DraggingQuery) { + if (plot.DraggingQuery) { ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeAll); plot.QueryRect.Min += IO.MouseDelta; plot.QueryRect.Max += IO.MouseDelta; @@ -980,8 +980,8 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons const bool any_y_dragging = plot.YAxis[0].Dragging || plot.YAxis[1].Dragging || plot.YAxis[2].Dragging; if (IO.MouseDown[0] && !plot.XAxis.Dragging && !any_y_dragging) { plot.DraggingQuery = true; - } - } + } + } // DRAG INPUT ------------------------------------------------------------- @@ -989,7 +989,7 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons // end drags if (plot.XAxis.Dragging && (IO.MouseReleased[0] || !IO.MouseDown[0])) { plot.XAxis.Dragging = false; - G.IO.MouseDragMaxDistanceSqr[0] = 0; + G.IO.MouseDragMaxDistanceSqr[0] = 0; } for (int i = 0; i < MAX_Y_AXES; i++) { if (plot.YAxis[i].Dragging && (IO.MouseReleased[0] || !IO.MouseDown[0])) { @@ -1061,8 +1061,8 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons if (gp.Hov_Frame && (hov_x_axis_region || any_hov_y_axis_region) && IO.MouseWheel != 0) { UpdateTransformCache(); float zoom_rate = 0.1f; - if (IO.MouseWheel > 0) - zoom_rate = (-zoom_rate) / (1.0f + (2.0f * zoom_rate)); + if (IO.MouseWheel > 0) + zoom_rate = (-zoom_rate) / (1.0f + (2.0f * zoom_rate)); float tx = Remap(IO.MousePos.x, gp.BB_Grid.Min.x, gp.BB_Grid.Max.x, 0, 1); float ty = Remap(IO.MousePos.y, gp.BB_Grid.Min.y, gp.BB_Grid.Max.y, 0, 1); if (hov_x_axis_region && !x.lock) { @@ -1086,7 +1086,7 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons if (!y[i].lock_max) plot.YAxis[i].Range.Max = y[i].flip ? plot_br.y : plot_tl.y; } - } + } } // BOX-SELECTION AND QUERY ------------------------------------------------ @@ -1110,11 +1110,11 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons if (!y[i].lock_max && !IO.KeyShift) plot.YAxis[i].Range.Max = ImMax(p1.y, p2.y); } - } + } plot.Selecting = false; } // bad selection - if (plot.Selecting && (!HasFlag(plot.Flags, ImPlotFlags_BoxSelect) || lock_plot) && ImLengthSqr(plot.SelectStart - IO.MousePos) > 4) { + if (plot.Selecting && (!HasFlag(plot.Flags, ImPlotFlags_BoxSelect) || lock_plot) && ImLengthSqr(plot.SelectStart - IO.MousePos) > 4) { ImGui::SetMouseCursor(ImGuiMouseCursor_NotAllowed); } // cancel selection @@ -1168,7 +1168,7 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons plot.Queried = false; plot.QueryRect = ImRect(0,0,0,0); } - + // DOUBLE CLICK ----------------------------------------------------------- if ( IO.MouseDoubleClicked[0] && gp.Hov_Frame && (hov_x_axis_region || any_hov_y_axis_region) && !hov_legend && !hov_query) { @@ -1179,7 +1179,7 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons } } else { - gp.FitThisFrame = false; + gp.FitThisFrame = false; gp.FitX = false; for (int i = 0; i < MAX_Y_AXES; i++) { gp.FitY[i] = false; @@ -1190,7 +1190,7 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons // focus window if ((IO.MouseClicked[0] || IO.MouseClicked[1]) && gp.Hov_Frame) - ImGui::FocusWindow(ImGui::GetCurrentWindow()); + ImGui::FocusWindow(ImGui::GetCurrentWindow()); UpdateTransformCache(); @@ -1311,7 +1311,7 @@ inline void AxisMenu(ImPlotAxis& Axis) { bool grid = HasFlag(Axis.Flags, ImPlotAxisFlags_GridLines); bool ticks = HasFlag(Axis.Flags, ImPlotAxisFlags_TickMarks); bool labels = HasFlag(Axis.Flags, ImPlotAxisFlags_TickLabels); - if (ImGui::Checkbox("##LockMin", &lock_min)) + if (ImGui::Checkbox("##LockMin", &lock_min)) FlipFlag(Axis.Flags, ImPlotAxisFlags_LockMin); ImGui::SameLine(); if (lock_min) { @@ -1349,8 +1349,8 @@ inline void AxisMenu(ImPlotAxis& Axis) { } void PlotContextMenu(ImPlotState& plot) { - if (ImGui::BeginMenu("X-Axis")) { - ImGui::PushID("X"); + if (ImGui::BeginMenu("X-Axis")) { + ImGui::PushID("X"); AxisMenu(plot.XAxis); ImGui::PopID(); ImGui::EndMenu(); @@ -1369,13 +1369,13 @@ void PlotContextMenu(ImPlotState& plot) { snprintf(buf, sizeof(buf) - 1, "Y-Axis %d", i + 1); } if (ImGui::BeginMenu(buf)) { - ImGui::PushID(i); + ImGui::PushID(i); AxisMenu(plot.YAxis[i]); ImGui::PopID(); ImGui::EndMenu(); } } - + ImGui::Separator(); if ((ImGui::BeginMenu("Settings"))) { if (ImGui::MenuItem("Box Select",NULL,HasFlag(plot.Flags, ImPlotFlags_BoxSelect))) { @@ -1444,7 +1444,7 @@ class BufferWriter { void EndPlot() { - IM_ASSERT_USER_ERROR(gp.CurrentPlot != NULL, "Mismatched BeginPlot()/EndPlot()!"); + IM_ASSERT_USER_ERROR(gp.CurrentPlot != NULL, "Mismatched BeginPlot()/EndPlot()!"); ImPlotState &plot = *gp.CurrentPlot; ImGuiContext &G = *GImGui; @@ -1536,7 +1536,7 @@ void EndPlot() { if (plot.QueryRect.GetWidth() > 2 && plot.QueryRect.GetHeight() > 2) { DrawList.AddRectFilled(plot.QueryRect.Min + gp.BB_Grid.Min, plot.QueryRect.Max + gp.BB_Grid.Min, gp.Col_QryBg); DrawList.AddRect( plot.QueryRect.Min + gp.BB_Grid.Min, plot.QueryRect.Max + gp.BB_Grid.Min, gp.Col_QryBd); - } + } } else if (plot.Queried) { ImRect bb_query = plot.QueryRect; @@ -1601,7 +1601,7 @@ void EndPlot() { const char* label = GetLegendLabel(i); const char* text_display_end = ImGui::FindRenderedTextEnd(label, NULL); if (label != text_display_end) - DrawList.AddText(legend_content_bb.Min + legend_padding + ImVec2(legend_icon_size, i * txt_ht), + DrawList.AddText(legend_content_bb.Min + legend_padding + ImVec2(legend_icon_size, i * txt_ht), item->Show ? (item->Highlight ? col_hl_txt : gp.Col_Txt) : gp.Col_TxtDis, label, text_display_end); } } @@ -1683,7 +1683,7 @@ void EndPlot() { // Reset next plot data gp.NextPlotData = ImNextPlotData(); // Pop ImGui::PushID at the end of BeginPlot - ImGui::PopID(); + ImGui::PopID(); // End child window if (!HasFlag(plot.Flags, ImPlotFlags_NoChild)) ImGui::EndChild(); @@ -1740,15 +1740,15 @@ void PopPlotClipRect() { ImGui::PopClipRect(); } -bool IsPlotHovered() { +bool IsPlotHovered() { IM_ASSERT_USER_ERROR(gp.CurrentPlot != NULL, "IsPlotHovered() Needs to be called between BeginPlot() and EndPlot()!"); - return gp.Hov_Grid; + return gp.Hov_Grid; } ImVec2 GetPlotMousePos(int y_axis_in) { IM_ASSERT_USER_ERROR(y_axis_in >= -1 && y_axis_in < MAX_Y_AXES, "y_axis needs to between -1 and MAX_Y_AXES"); IM_ASSERT_USER_ERROR(gp.CurrentPlot != NULL, "GetPlotMousePos() Needs to be called between BeginPlot() and EndPlot()!"); const int y_axis = y_axis_in >= 0 ? y_axis_in : gp.CurrentPlot->CurrentYAxis; - return gp.LastMousePos[y_axis]; + return gp.LastMousePos[y_axis]; } @@ -1798,7 +1798,7 @@ struct ImPlotStyleVarInfo { void* GetVarPtr(ImPlotStyle* style) const { return (void*)((unsigned char*)style + Offset); } }; -static const ImPlotStyleVarInfo GPlotStyleVarInfo[] = +static const ImPlotStyleVarInfo GPlotStyleVarInfo[] = { { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImPlotStyle, LineWeight) }, // ImPlotStyleVar_LineWeight { ImGuiDataType_S32, 1, (ImU32)IM_OFFSETOF(ImPlotStyle, Marker) }, // ImPlotStyleVar_Marker @@ -1909,8 +1909,8 @@ void PopStyleVar(int count) { ((float*)data)[0] = backup.BackupFloat[0]; } else if (info->Type == ImGuiDataType_Float && info->Count == 2) { - ((float*)data)[0] = backup.BackupFloat[0]; - ((float*)data)[1] = backup.BackupFloat[1]; + ((float*)data)[0] = backup.BackupFloat[0]; + ((float*)data)[1] = backup.BackupFloat[1]; } else if (info->Type == ImGuiDataType_S32 && info->Count == 1) { ((int*)data)[0] = backup.BackupInt[0]; @@ -2013,34 +2013,34 @@ inline void MarkerCross(ImDrawList& DrawList, const ImVec2& c, float s, bool out template inline void RenderMarkers(Transformer transformer, ImDrawList& DrawList, Getter getter, int count, int offset, bool rend_mk_line, ImU32 col_mk_line, bool rend_mk_fill, ImU32 col_mk_fill, bool cull) { int idx = offset; - for (int i = 0; i < count; ++i) { + for (int i = 0; i < count; ++i) { ImVec2 c; c = transformer(getter(idx)); idx = (idx + 1) % count; if (!cull || gp.BB_Grid.Contains(c)) { // TODO: Optimize the loop and if statements, this is atrocious - if (HasFlag(gp.Style.Marker, ImPlotMarker_Circle)) + if (HasFlag(gp.Style.Marker, ImPlotMarker_Circle)) MarkerCircle(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); if (HasFlag(gp.Style.Marker, ImPlotMarker_Square)) - MarkerSquare(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); - if (HasFlag(gp.Style.Marker, ImPlotMarker_Diamond)) + MarkerSquare(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); + if (HasFlag(gp.Style.Marker, ImPlotMarker_Diamond)) MarkerDiamond(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); if (HasFlag(gp.Style.Marker, ImPlotMarker_Up)) - MarkerUp(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); - if (HasFlag(gp.Style.Marker, ImPlotMarker_Down)) - MarkerDown(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); + MarkerUp(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); + if (HasFlag(gp.Style.Marker, ImPlotMarker_Down)) + MarkerDown(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); if (HasFlag(gp.Style.Marker, ImPlotMarker_Left)) - MarkerLeft(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); - if (HasFlag(gp.Style.Marker, ImPlotMarker_Right)) - MarkerRight(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); + MarkerLeft(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); + if (HasFlag(gp.Style.Marker, ImPlotMarker_Right)) + MarkerRight(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); if (HasFlag(gp.Style.Marker, ImPlotMarker_Cross)) - MarkerCross(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); + MarkerCross(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); if (HasFlag(gp.Style.Marker, ImPlotMarker_Plus)) - MarkerPlus(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); + MarkerPlus(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); if (HasFlag(gp.Style.Marker, ImPlotMarker_Asterisk)) - MarkerAsterisk(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); + MarkerAsterisk(DrawList, c, gp.Style.MarkerSize, rend_mk_line, col_mk_line, rend_mk_fill, col_mk_fill, gp.Style.MarkerWeight); } - } + } } inline void RenderLine(ImDrawList& DrawList, const ImVec2& p1, const ImVec2& p2, float line_weight, ImU32 col_line, ImVec2 uv) { @@ -2049,7 +2049,7 @@ inline void RenderLine(ImDrawList& DrawList, const ImVec2& p1, const ImVec2& p2, float dy = p2.y - p1.y; IM_NORMALIZE2F_OVER_ZERO(dx, dy); dx *= (line_weight * 0.5f); - dy *= (line_weight * 0.5f); + dy *= (line_weight * 0.5f); DrawList._VtxWritePtr[0].pos.x = p1.x + dy; DrawList._VtxWritePtr[0].pos.y = p1.y - dx; DrawList._VtxWritePtr[0].uv = uv; @@ -2084,13 +2084,13 @@ inline void RenderLineAA(ImDrawList& DrawList, const ImVec2& p1, const ImVec2& p template inline void RenderLineStrip(Transformer transformer, ImDrawList& DrawList, Getter getter, int count, int offset, float line_weight, ImU32 col_line, bool cull) { // render line segments - offset %= count; + offset %= count; if (offset < 0) offset += count; // shift negative offset to positive range int i_start = offset + 1; if (i_start >= count ) i_start -= count; int i_end = offset + count; if (i_end >= count) i_end -= count; - + const int segments = count - 1; ImVec2 p1 = transformer(getter(offset)); bool test1 = !cull || gp.BB_Grid.Contains(p1); @@ -2098,7 +2098,7 @@ inline void RenderLineStrip(Transformer transformer, ImDrawList& DrawList, Gette for (int i1 = i_start; i1 != i_end; i1 = i1 + 1 < count ? i1 + 1 : i1 + 1 - count) { ImVec2 p2 = transformer(getter(i1)); - bool test2 = !cull || gp.BB_Grid.Contains(p2); + bool test2 = !cull || gp.BB_Grid.Contains(p2); if (test1 | test2) RenderLineAA(DrawList, p1, p2, line_weight, col_line); p1 = p2; @@ -2115,14 +2115,14 @@ inline void RenderLineStrip(Transformer transformer, ImDrawList& DrawList, Gette bool test2 = !cull || gp.BB_Grid.Contains(p2); if (test1 | test2) RenderLine(DrawList, p1, p2, line_weight, col_line, uv); - else + else segments_culled++; p1 = p2; test1 = test2; } - if (segments_culled > 0) - DrawList.PrimUnreserve(segments_culled * 6, segments_culled * 4); - } + if (segments_culled > 0) + DrawList.PrimUnreserve(segments_culled * 6, segments_culled * 4); + } } //----------------------------------------------------------------------------- @@ -2310,7 +2310,7 @@ void PlotBarEx(const char* label_id, Getter getter, int count, float width, int } int idx = offset; - for (int i = 0; i < count; ++i) { + for (int i = 0; i < count; ++i) { ImVec2 p; p = getter(idx); idx = (idx + 1) % count; @@ -2380,7 +2380,7 @@ void PlotBarHEx(const char* label_id, Getter getter, int count, float height, i } int idx = offset; - for (int i = 0; i < count; ++i) { + for (int i = 0; i < count; ++i) { ImVec2 p; p = getter(idx); idx = (idx + 1) % count; @@ -2421,7 +2421,7 @@ struct GetterError { Xs = xs; Ys = ys; Neg = neg; Pos = pos; Stride = stride; } ImVec4 operator()(int idx) { - return ImVec4(StrideIndex(Xs, idx, Stride), + return ImVec4(StrideIndex(Xs, idx, Stride), StrideIndex(Ys, idx, Stride), StrideIndex(Neg, idx, Stride), StrideIndex(Pos, idx, Stride)); @@ -2511,7 +2511,7 @@ void PieChart(const char** label_ids, float* values, int count, const ImVec2& ce float sum = 0; for (int i = 0; i < count; ++i) sum += values[i]; - + const bool normalize = sum > 1.0f; PushPlotClipRect(); @@ -2541,7 +2541,7 @@ void PieChart(const char** label_ids, float* values, int count, const ImVec2& ce } } a0 = a1; - } + } PopPlotClipRect(); } @@ -2617,7 +2617,7 @@ inline void PlotDigitalEx(const char* label_id, Getter getter, int count, int of pMax.x = gp.PixelRange[ax].Min.x + mx * (itemData2.x - gp.CurrentPlot->XAxis.Range.Min); i1 = i2; s++; - } + } //do not extend plot outside plot range if (pMin.x < gp.PixelRange[ax].Min.x) pMin.x = gp.PixelRange[ax].Min.x; if (pMax.x < gp.PixelRange[ax].Min.x) pMax.x = gp.PixelRange[ax].Min.x; @@ -2632,7 +2632,7 @@ inline void PlotDigitalEx(const char* label_id, Getter getter, int count, int of } gp.DigitalPlotItemCnt++; gp.DigitalPlotOffset += pixYMax; - } + } ImGui::PopClipRect(); } diff --git a/implot.h b/implot.h index 6ad31f7..41bc707 100644 --- a/implot.h +++ b/implot.h @@ -67,7 +67,7 @@ enum ImPlotAxisFlags_ { ImPlotAxisFlags_Auxiliary = ImPlotAxisFlags_Default & ~ImPlotAxisFlags_GridLines, }; -// Plot styling colors +// Plot styling colors enum ImPlotCol_ { ImPlotCol_Line, // plot line/outline color (defaults to a rotating color set) ImPlotCol_Fill, // plot fill color for bars (defaults to the current line color) @@ -102,7 +102,7 @@ enum ImPlotStyleVar_ { // Marker specification enum ImPlotMarker_ { ImPlotMarker_None = 1 << 0, // no marker - ImPlotMarker_Circle = 1 << 1, // a circle marker will be rendered at each point + ImPlotMarker_Circle = 1 << 1, // a circle marker will be rendered at each point ImPlotMarker_Square = 1 << 2, // a square maker will be rendered at each point ImPlotMarker_Diamond = 1 << 3, // a diamond marker will be rendered at each point ImPlotMarker_Up = 1 << 4, // an upward-pointing triangle marker will up rendered at each point @@ -154,13 +154,13 @@ namespace ImPlot { // be called, e.g. "if (BeginPlot(...)) { ... EndPlot(); }"". #title_id must // be unique. If you need to avoid ID collisions or don't want to display a // title in the plot, use double hashes (e.g. "MyPlot##Hidden"). If #x_label -// and/or #y_label are provided, axes labels will be displayed. -bool BeginPlot(const char* title_id, - const char* x_label = NULL, - const char* y_label = NULL, - const ImVec2& size = ImVec2(-1,-1), - ImPlotFlags flags = ImPlotFlags_Default, - ImPlotAxisFlags x_flags = ImPlotAxisFlags_Default, +// and/or #y_label are provided, axes labels will be displayed. +bool BeginPlot(const char* title_id, + const char* x_label = NULL, + const char* y_label = NULL, + const ImVec2& size = ImVec2(-1,-1), + ImPlotFlags flags = ImPlotFlags_Default, + ImPlotAxisFlags x_flags = ImPlotAxisFlags_Default, ImPlotAxisFlags y_flags = ImPlotAxisFlags_Default, ImPlotAxisFlags y2_flags = ImPlotAxisFlags_Auxiliary, ImPlotAxisFlags y3_flags = ImPlotAxisFlags_Auxiliary); @@ -228,7 +228,7 @@ void RestorePalette(); void PushStyleColor(ImPlotCol idx, ImU32 col); // Temporarily modify a plot color. void PushStyleColor(ImPlotCol idx, const ImVec4& col); -// Undo temporary color modification. +// Undo temporary color modification. void PopStyleColor(int count = 1); // Temporarily modify a style variable of float type. diff --git a/implot_demo.cpp b/implot_demo.cpp index e172ebf..c79f8df 100644 --- a/implot_demo.cpp +++ b/implot_demo.cpp @@ -38,7 +38,7 @@ namespace { float RandomRange( float min, float max ) { - float scale = rand() / (float) RAND_MAX; + float scale = rand() / (float) RAND_MAX; return min + scale * ( max - min ); } @@ -60,7 +60,7 @@ struct ScrollingData { Data.shrink(0); Offset = 0; } - } + } }; struct RollingData { @@ -92,8 +92,8 @@ struct BenchmarkItem { } // private namespace -namespace ImPlot { - +namespace ImPlot { + void ShowDemoWindow(bool* p_open) { static bool show_app_metrics = false; static bool show_app_style_editor = false; @@ -170,7 +170,7 @@ void ShowDemoWindow(bool* p_open) { } if (ImPlot::BeginPlot("Scatter Plot", NULL, NULL, {-1,300})) { ImPlot::PushStyleVar(ImPlotStyleVar_LineWeight, 0); - ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Cross); + ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Cross); ImPlot::PushStyleVar(ImPlotStyleVar_MarkerSize, 3); ImPlot::Plot("Data 1", xs1, ys1, 100); ImPlot::PopStyleVar(2); @@ -300,50 +300,50 @@ void ShowDemoWindow(bool* p_open) { float ys[2] = {10,11}; // filled ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Circle); - ImPlot::Plot("Circle##Fill", xs, ys, 2); + ImPlot::Plot("Circle##Fill", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Square); ys[0]--; ys[1]--; - ImPlot::Plot("Square##Fill", xs, ys, 2); + ImPlot::Plot("Square##Fill", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Diamond); ys[0]--; ys[1]--; - ImPlot::Plot("Diamond##Fill", xs, ys, 2); + ImPlot::Plot("Diamond##Fill", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Up); ys[0]--; ys[1]--; - ImPlot::Plot("Up##Fill", xs, ys, 2); + ImPlot::Plot("Up##Fill", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Down); ys[0]--; ys[1]--; - ImPlot::Plot("Down##Fill", xs, ys, 2); + ImPlot::Plot("Down##Fill", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Left); ys[0]--; ys[1]--; - ImPlot::Plot("Left##Fill", xs, ys, 2); + ImPlot::Plot("Left##Fill", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Right); ys[0]--; ys[1]--; - ImPlot::Plot("Right##Fill", xs, ys, 2); + ImPlot::Plot("Right##Fill", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Cross); ys[0]--; ys[1]--; - ImPlot::Plot("Cross##Fill", xs, ys, 2); + ImPlot::Plot("Cross##Fill", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Plus); ys[0]--; ys[1]--; - ImPlot::Plot("Plus##Fill", xs, ys, 2); + ImPlot::Plot("Plus##Fill", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Asterisk); ys[0]--; ys[1]--; - ImPlot::Plot("Asterisk##Fill", xs, ys, 2); + ImPlot::Plot("Asterisk##Fill", xs, ys, 2); ImPlot::PopStyleVar(10); xs[0] = 6; xs[1] = 9; ys[0] = 10; ys[1] = 11; ImPlot::PushStyleColor(ImPlotCol_MarkerFill, ImVec4(0,0,0,0)); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Circle); - ImPlot::Plot("Circle", xs, ys, 2); + ImPlot::Plot("Circle", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Square); ys[0]--; ys[1]--; - ImPlot::Plot("Square", xs, ys, 2); + ImPlot::Plot("Square", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Diamond); ys[0]--; ys[1]--; - ImPlot::Plot("Diamond", xs, ys, 2); + ImPlot::Plot("Diamond", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Up); ys[0]--; ys[1]--; - ImPlot::Plot("Up", xs, ys, 2); + ImPlot::Plot("Up", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Down); ys[0]--; ys[1]--; - ImPlot::Plot("Down", xs, ys, 2); + ImPlot::Plot("Down", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Left); ys[0]--; ys[1]--; - ImPlot::Plot("Left", xs, ys, 2); + ImPlot::Plot("Left", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Right); ys[0]--; ys[1]--; - ImPlot::Plot("Right", xs, ys, 2); + ImPlot::Plot("Right", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Cross); ys[0]--; ys[1]--; - ImPlot::Plot("Cross", xs, ys, 2); + ImPlot::Plot("Cross", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Plus); ys[0]--; ys[1]--; - ImPlot::Plot("Plus", xs, ys, 2); + ImPlot::Plot("Plus", xs, ys, 2); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Asterisk); ys[0]--; ys[1]--; - ImPlot::Plot("Asterisk", xs, ys, 2); + ImPlot::Plot("Asterisk", xs, ys, 2); ImPlot::PopStyleColor(); ImPlot::PopStyleVar(10); @@ -353,12 +353,12 @@ void ShowDemoWindow(bool* p_open) { ImPlot::PushStyleVar(ImPlotStyleVar_LineWeight, 2); ImPlot::PushStyleVar(ImPlotStyleVar_MarkerSize, 8); ImPlot::PushStyleVar(ImPlotStyleVar_MarkerWeight, 2); - ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Circle | ImPlotMarker_Cross); + ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Circle | ImPlotMarker_Cross); ImPlot::PushStyleColor(ImPlotCol_MarkerOutline, ImVec4(0,0,0,1)); ImPlot::PushStyleColor(ImPlotCol_MarkerFill, ImVec4(1,1,1,1)); ImPlot::PushStyleColor(ImPlotCol_Line, ImVec4(0,0,0,1)); - ImPlot::Plot("Circle|Cross", xs, ys, 2); - ImPlot::PopStyleVar(4); + ImPlot::Plot("Circle|Cross", xs, ys, 2); + ImPlot::PopStyleVar(4); ImPlot::PopStyleColor(3); ImPlot::Text("Filled Markers", 1.5, 11.75); @@ -454,7 +454,7 @@ void ShowDemoWindow(bool* p_open) { static ImVector data; ImPlotLimits range, query; if (ImPlot::BeginPlot("##Drawing", NULL, NULL, ImVec2(-1,300), ImPlotFlags_Default | ImPlotFlags_Query, ImPlotAxisFlags_GridLines, ImPlotAxisFlags_GridLines)) { - if (ImPlot::IsPlotHovered() && ImGui::IsMouseClicked(0) && ImGui::GetIO().KeyCtrl) + if (ImPlot::IsPlotHovered() && ImGui::IsMouseClicked(0) && ImGui::GetIO().KeyCtrl) data.push_back(ImPlot::GetPlotMousePos()); ImPlot::PushStyleVar(ImPlotStyleVar_LineWeight, 0); ImPlot::PushStyleVar(ImPlotStyleVar_Marker, ImPlotMarker_Diamond); @@ -469,7 +469,7 @@ void ShowDemoWindow(bool* p_open) { avg.x += data[i].x; avg.y += data[i].y; cnt++; - } + } } if (cnt > 0) { avg.x = avg.x / cnt; @@ -563,8 +563,8 @@ void ShowDemoWindow(bool* p_open) { t += ImGui::GetIO().DeltaTime; for (int i = 0; i < 10; ++i) { if (show[i]) - data[i].AddPoint(t, data[i].Data.empty() ? - 0.25f + 0.5f * (float)rand() / float(RAND_MAX) : + data[i].AddPoint(t, data[i].Data.empty() ? + 0.25f + 0.5f * (float)rand() / float(RAND_MAX) : data[i].Data.back().y + (0.005f + 0.0002f * (float)rand() / float(RAND_MAX)) * (-1 + 2 * (float)rand() / float(RAND_MAX))); } } @@ -736,8 +736,8 @@ void ShowDemoWindow(bool* p_open) { ImPlot::SetNextPlotLimits(-0.5f, 9.5f, -0.5f, 9.5f); if (ImPlot::BeginPlot("##Custom", NULL, NULL, {-1,300}, ImPlotFlags_Default & ~ImPlotFlags_Legend, 0)) { float lin[10] = {8,8,9,7,8,8,8,9,7,8}; - float bar[10] = {1,2,5,3,4,1,2,5,3,4}; - float dot[10] = {7,6,6,7,8,5,6,5,8,7}; + float bar[10] = {1,2,5,3,4,1,2,5,3,4}; + float dot[10] = {7,6,6,7,8,5,6,5,8,7}; ImPlot::Bar("Bar", bar, 10, 0.5f); ImPlot::Plot("Line", lin, 10); ImPlot::PushStyleVar(ImPlotStyleVar_LineWeight, 0); @@ -771,18 +771,18 @@ void ShowDemoWindow(bool* p_open) { ImGui::BulletText("%d lines with %d points each @ %.3f FPS.",n_items,1000,ImGui::GetIO().Framerate); SetNextPlotLimits(0,1,0,1, ImGuiCond_Always); if (ImPlot::BeginPlot("##Bench",NULL,NULL,{-1,300},ImPlotFlags_Default | ImPlotFlags_NoChild)) { - char buff[16]; + char buff[16]; for (int i = 0; i < 100; ++i) { sprintf(buff, "item_%d",i); ImPlot::PushStyleColor(ImPlotCol_Line, items[i].Col); ImPlot::Plot(buff, items[i].Data, 1000); ImPlot::PopStyleColor(); - } + } ImPlot::EndPlot(); } } //------------------------------------------------------------------------- - ImGui::End(); + ImGui::End(); } } // namespace ImPlot