FIX: autofit when adjusting graph not shooting into outer space (LOL)

This commit is contained in:
boreddevnl 2026-04-02 15:58:56 +02:00
parent 0ddb1e7610
commit 823e9c0ce7

View file

@ -627,10 +627,8 @@ static void autofit_2d_view(void) {
if (y_min_data * y_max_data <= 0 || my_fabs(y_min_data) < (y_max_data - y_min_data) * 0.5) { if (y_min_data * y_max_data <= 0 || my_fabs(y_min_data) < (y_max_data - y_min_data) * 0.5) {
double max_abs = my_fabs(y_min_data); double max_abs = my_fabs(y_min_data);
if (my_fabs(y_max_data) > max_abs) max_abs = my_fabs(y_max_data); if (my_fabs(y_max_data) > max_abs) max_abs = my_fabs(y_max_data);
double pad = max_abs * 0.15; double pad = max_abs * 0.15;
if (pad < 0.5) pad = 0.5; if (pad < 0.5) pad = 0.5;
view_y_min = -(max_abs + pad); view_y_min = -(max_abs + pad);
view_y_max = (max_abs + pad); view_y_max = (max_abs + pad);
} else { } else {
@ -640,29 +638,21 @@ static void autofit_2d_view(void) {
view_y_max = y_max_data + pad; view_y_max = y_max_data + pad;
} }
double cx = (view_x_min + view_x_max) / 2.0;
double cy = (view_y_min + view_y_max) / 2.0;
double x_range = view_x_max - view_x_min; double x_range = view_x_max - view_x_min;
double y_range = view_y_max - view_y_min; double target_y_range = x_range * (double)graph_h / (double)graph_w;
double current_y_range = view_y_max - view_y_min;
if (x_range * graph_h < y_range * graph_w) { if (current_y_range < target_y_range) {
double target_x_range = y_range * (double)graph_w / (double)graph_h; double cy = (view_y_min + view_y_max) / 2.0;
if (my_fabs(cx) < x_range * 0.1) { if (my_fabs(cy) < current_y_range * 0.1) cy = 0;
view_x_min = -target_x_range / 2.0; view_y_min = cy - target_y_range / 2.0;
view_x_max = target_x_range / 2.0; view_y_max = cy + target_y_range / 2.0;
} else {
view_x_min = cx - target_x_range / 2.0;
view_x_max = cx + target_x_range / 2.0;
}
} else { } else {
double target_y_range = x_range * (double)graph_h / (double)graph_w; double target_x_range = current_y_range * (double)graph_w / (double)graph_h;
if (my_fabs(cy) < y_range * 0.1) { double cx = (view_x_min + view_x_max) / 2.0;
view_y_min = -target_y_range / 2.0; if (my_fabs(cx) < x_range * 0.1) cx = 0;
view_y_max = target_y_range / 2.0; view_x_min = cx - target_x_range / 2.0;
} else { view_x_max = cx + target_x_range / 2.0;
view_y_min = cy - target_y_range / 2.0;
view_y_max = cy + target_y_range / 2.0;
}
} }
} else { } else {
apply_aspect_ratio(); apply_aspect_ratio();