mirror of
https://github.com/gwm17/implot.git
synced 2025-02-16 19:08:50 -05:00
more fixes for box selection and key modifiers
This commit is contained in:
parent
ae568a3260
commit
02e3226e51
24
implot.cpp
24
implot.cpp
|
@ -990,19 +990,21 @@ bool BeginPlot(const char* title, const char* x_label, const char* y_label, cons
|
||||||
if (plot.Selecting && (IO.MouseReleased[gp.InputMap.BoxSelectButton] || !IO.MouseDown[gp.InputMap.BoxSelectButton])) {
|
if (plot.Selecting && (IO.MouseReleased[gp.InputMap.BoxSelectButton] || !IO.MouseDown[gp.InputMap.BoxSelectButton])) {
|
||||||
UpdateTransformCache();
|
UpdateTransformCache();
|
||||||
ImVec2 select_size = plot.SelectStart - IO.MousePos;
|
ImVec2 select_size = plot.SelectStart - IO.MousePos;
|
||||||
if (ImHasFlag(plot.Flags, ImPlotFlags_BoxSelect) && ImFabs(select_size.x) > 2 && ImFabs(select_size.y) > 2) {
|
if (ImHasFlag(plot.Flags, ImPlotFlags_BoxSelect)) {
|
||||||
ImPlotPoint p1 = PixelsToPlot(plot.SelectStart);
|
ImPlotPoint p1 = PixelsToPlot(plot.SelectStart);
|
||||||
ImPlotPoint p2 = PixelsToPlot(IO.MousePos);
|
ImPlotPoint p2 = PixelsToPlot(IO.MousePos);
|
||||||
if (!gp.X.LockMin && IO.KeyMods != gp.InputMap.HorizontalMod)
|
const bool x_can_change = !ImHasFlag(IO.KeyMods,gp.InputMap.HorizontalMod) && ImFabs(select_size.x) > 2;
|
||||||
|
const bool y_can_change = !ImHasFlag(IO.KeyMods,gp.InputMap.VerticalMod) && ImFabs(select_size.y) > 2;
|
||||||
|
if (!gp.X.LockMin && x_can_change)
|
||||||
plot.XAxis.Range.Min = ImMin(p1.x, p2.x);
|
plot.XAxis.Range.Min = ImMin(p1.x, p2.x);
|
||||||
if (!gp.X.LockMax && IO.KeyMods != gp.InputMap.HorizontalMod)
|
if (!gp.X.LockMax && x_can_change)
|
||||||
plot.XAxis.Range.Max = ImMax(p1.x, p2.x);
|
plot.XAxis.Range.Max = ImMax(p1.x, p2.x);
|
||||||
for (int i = 0; i < IMPLOT_Y_AXES; i++) {
|
for (int i = 0; i < IMPLOT_Y_AXES; i++) {
|
||||||
p1 = PixelsToPlot(plot.SelectStart, i);
|
p1 = PixelsToPlot(plot.SelectStart, i);
|
||||||
p2 = PixelsToPlot(IO.MousePos, i);
|
p2 = PixelsToPlot(IO.MousePos, i);
|
||||||
if (!gp.Y[i].LockMin && IO.KeyMods != gp.InputMap.VerticalMod)
|
if (!gp.Y[i].LockMin && y_can_change)
|
||||||
plot.YAxis[i].Range.Min = ImMin(p1.y, p2.y);
|
plot.YAxis[i].Range.Min = ImMin(p1.y, p2.y);
|
||||||
if (!gp.Y[i].LockMax && IO.KeyMods != gp.InputMap.VerticalMod)
|
if (!gp.Y[i].LockMax && y_can_change)
|
||||||
plot.YAxis[i].Range.Max = ImMax(p1.y, p2.y);
|
plot.YAxis[i].Range.Max = ImMax(p1.y, p2.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1433,10 +1435,10 @@ void EndPlot() {
|
||||||
PushPlotClipRect();
|
PushPlotClipRect();
|
||||||
// render selection/query
|
// render selection/query
|
||||||
if (plot.Selecting) {
|
if (plot.Selecting) {
|
||||||
ImRect select_bb(ImMin(IO.MousePos, plot.SelectStart), ImMax(IO.MousePos, plot.SelectStart));
|
const ImRect select_bb(ImMin(IO.MousePos, plot.SelectStart), ImMax(IO.MousePos, plot.SelectStart));
|
||||||
bool wide_enough = select_bb.GetWidth() > 2;
|
const bool wide_enough = ImFabs(select_bb.GetWidth()) > 2;
|
||||||
bool tall_enough = select_bb.GetWidth() > 2;
|
const bool tall_enough = ImFabs(select_bb.GetHeight()) > 2;
|
||||||
bool big_enough = wide_enough && tall_enough;
|
const bool big_enough = wide_enough && tall_enough;
|
||||||
if (plot.Selecting && !gp.LockPlot && ImHasFlag(plot.Flags, ImPlotFlags_BoxSelect)) {
|
if (plot.Selecting && !gp.LockPlot && ImHasFlag(plot.Flags, ImPlotFlags_BoxSelect)) {
|
||||||
const ImVec4 col = GetStyleColorVec4(ImPlotCol_Selection);
|
const ImVec4 col = GetStyleColorVec4(ImPlotCol_Selection);
|
||||||
const ImU32 col_bg = ImGui::GetColorU32(col * ImVec4(1,1,1,0.25f));
|
const ImU32 col_bg = ImGui::GetColorU32(col * ImVec4(1,1,1,0.25f));
|
||||||
|
@ -1445,11 +1447,11 @@ void EndPlot() {
|
||||||
DrawList.AddRectFilled(gp.BB_Plot.Min, gp.BB_Plot.Max, col_bg);
|
DrawList.AddRectFilled(gp.BB_Plot.Min, gp.BB_Plot.Max, col_bg);
|
||||||
DrawList.AddRect( gp.BB_Plot.Min, gp.BB_Plot.Max, col_bd);
|
DrawList.AddRect( gp.BB_Plot.Min, gp.BB_Plot.Max, col_bd);
|
||||||
}
|
}
|
||||||
else if ((gp.X.Lock || IO.KeyMods == gp.InputMap.HorizontalMod) && big_enough) {
|
else if ((gp.X.Lock || IO.KeyMods == gp.InputMap.HorizontalMod) && tall_enough) {
|
||||||
DrawList.AddRectFilled(ImVec2(gp.BB_Plot.Min.x, select_bb.Min.y), ImVec2(gp.BB_Plot.Max.x, select_bb.Max.y), col_bg);
|
DrawList.AddRectFilled(ImVec2(gp.BB_Plot.Min.x, select_bb.Min.y), ImVec2(gp.BB_Plot.Max.x, select_bb.Max.y), col_bg);
|
||||||
DrawList.AddRect( ImVec2(gp.BB_Plot.Min.x, select_bb.Min.y), ImVec2(gp.BB_Plot.Max.x, select_bb.Max.y), col_bd);
|
DrawList.AddRect( ImVec2(gp.BB_Plot.Min.x, select_bb.Min.y), ImVec2(gp.BB_Plot.Max.x, select_bb.Max.y), col_bd);
|
||||||
}
|
}
|
||||||
else if ((any_y_locked || IO.KeyMods == gp.InputMap.VerticalMod) && big_enough) {
|
else if ((any_y_locked || IO.KeyMods == gp.InputMap.VerticalMod) && wide_enough) {
|
||||||
DrawList.AddRectFilled(ImVec2(select_bb.Min.x, gp.BB_Plot.Min.y), ImVec2(select_bb.Max.x, gp.BB_Plot.Max.y), col_bg);
|
DrawList.AddRectFilled(ImVec2(select_bb.Min.x, gp.BB_Plot.Min.y), ImVec2(select_bb.Max.x, gp.BB_Plot.Max.y), col_bg);
|
||||||
DrawList.AddRect( ImVec2(select_bb.Min.x, gp.BB_Plot.Min.y), ImVec2(select_bb.Max.x, gp.BB_Plot.Max.y), col_bd);
|
DrawList.AddRect( ImVec2(select_bb.Min.x, gp.BB_Plot.Min.y), ImVec2(select_bb.Max.x, gp.BB_Plot.Max.y), col_bd);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user