epezent / implot

Immediate Mode Plotting
MIT License
4.65k stars 517 forks source link

PlotText does not honour ImPlotItemFlags_NoFit flag (v0.14) #406

Closed villains closed 1 year ago

villains commented 1 year ago

As the title says. I was trying to plot some text annotations on a plot, without having the x- and y-axis extents increasing to fit the text. However, PlotText does not honour the new ImPlotItemFlags_NoFit flag, and updates the x and y extents anyway.

However, I was able to get it working with these 2 minor changes:

diff --git a/implot_items.cpp b/implot_items.cpp
index 1fbdf5b..f000f21 100644
--- a/implot_items.cpp
+++ b/implot_items.cpp
@@ -2656,7 +2656,7 @@ void PlotText(const char* text, double x, double y, const ImVec2& pixel_offset,
         ImVec2 siz = CalcTextSizeVertical(text) * 0.5f;
         ImVec2 ctr = siz * 0.5f;
         ImVec2 pos = PlotToPixels(ImPlotPoint(x,y),IMPLOT_AUTO,IMPLOT_AUTO) + ImVec2(-ctr.x, ctr.y) + pixel_offset;
-        if (FitThisFrame()) {
+        if (FitThisFrame() && (flags & ImPlotItemFlags_NoFit) == 0) {
             FitPoint(PixelsToPlot(pos));
             FitPoint(PixelsToPlot(pos.x + siz.x, pos.y - siz.y));
         }
@@ -2665,7 +2665,7 @@ void PlotText(const char* text, double x, double y, const ImVec2& pixel_offset,
     else {
         ImVec2 siz = ImGui::CalcTextSize(text);
         ImVec2 pos = PlotToPixels(ImPlotPoint(x,y),IMPLOT_AUTO,IMPLOT_AUTO) - siz * 0.5f + pixel_offset;
-        if (FitThisFrame()) {
+        if (FitThisFrame() && (flags & ImPlotItemFlags_NoFit) == 0) {
             FitPoint(PixelsToPlot(pos));
             FitPoint(PixelsToPlot(pos+siz));
         }
epezent commented 1 year ago

https://github.com/epezent/implot/commit/d87512353495e7760e7fda7566a05beef7627d8f

villains commented 1 year ago

Thank you!