@@ -149,8 +149,8 @@ Item {
149149 onClicked: {
150150 if (checked) {
151151 solutionZoomAllButton .checked = false ;
152- y_axis_half = Utils .spanBetweenValues (solutionPositionXAxis .max , solutionPositionXAxis .min ) / 2 ;
153152 x_axis_half = Utils .spanBetweenValues (solutionPositionYAxis .max , solutionPositionYAxis .min ) / 2 ;
153+ y_axis_half = Utils .spanBetweenValues (solutionPositionXAxis .max , solutionPositionXAxis .min ) / 2 ;
154154 center_solution = true ;
155155 zoom_all = false ;
156156 } else {
@@ -225,23 +225,29 @@ Item {
225225 solutionPositionYAxis .freezeTicks ();
226226 }
227227
228+ function fixAspectRatio () {
229+ const aspect_ratio = height / width;
230+ const x_range = Math .abs (solutionPositionXAxis .max - solutionPositionXAxis .min );
231+ const y_range = Math .abs (solutionPositionYAxis .max - solutionPositionYAxis .min );
232+ const range_diff = aspect_ratio * x_range - y_range;
233+ if (range_diff < 0 ) {
234+ const correction = Math .abs (range_diff / aspect_ratio / 2 );
235+ solutionPositionXAxis .min -= correction;
236+ solutionPositionXAxis .max += correction;
237+ } else {
238+ const correction = Math .abs (range_diff / 2 );
239+ solutionPositionYAxis .min -= correction;
240+ solutionPositionYAxis .max += correction;
241+ }
242+ }
243+
228244 // This function make the ticks on the x & y axes have the
229245 // same interval, and have them land on evenish numbers.
230246 // It also ensures the ranges of the two axes are the same.
231247 function setTicks () {
232248 const x_tick_interval = solutionPositionXAxis .getGoodTickInterval ();
233249 const y_tick_interval = solutionPositionYAxis .getGoodTickInterval ();
234250 const max_tick_interval = Math .max (x_tick_interval, y_tick_interval);
235- const x_range = Math .abs (solutionPositionXAxis .max - solutionPositionXAxis .min );
236- const y_range = Math .abs (solutionPositionYAxis .max - solutionPositionYAxis .min );
237- const range_diff = Math .abs (x_range - y_range);
238- if (x_range < y_range) {
239- solutionPositionXAxis .min -= range_diff / 2 ;
240- solutionPositionXAxis .max += range_diff / 2 ;
241- } else {
242- solutionPositionYAxis .min -= range_diff / 2 ;
243- solutionPositionYAxis .max += range_diff / 2 ;
244- }
245251 solutionPositionXAxis .setGoodTicks (max_tick_interval);
246252 solutionPositionYAxis .setGoodTicks (max_tick_interval);
247253 }
@@ -254,6 +260,7 @@ Item {
254260 solutionPositionXAxis .min = orig_lon_min;
255261 solutionPositionYAxis .max = orig_lat_max;
256262 solutionPositionYAxis .min = orig_lat_min;
263+ solutionPositionChart .fixAspectRatio ();
257264 // update ticks
258265 solutionPositionChart .setTicks ();
259266 }
@@ -268,6 +275,7 @@ Item {
268275 solutionPositionYAxis .max = cur_solution .y + y_axis_half;
269276 solutionPositionYAxis .min = cur_solution .y - y_axis_half;
270277 }
278+ solutionPositionChart .fixAspectRatio ();
271279 // update ticks
272280 solutionPositionChart .setTicks ();
273281 }
@@ -290,6 +298,16 @@ Item {
290298 zoom_all = false ;
291299 }
292300
301+ onWidthChanged: {
302+ solutionPositionChart .freezeTicks ();
303+ solutionPositionChart .fixAspectRatio ();
304+ solutionPositionChart .setTicks ();
305+ }
306+ onHeightChanged: {
307+ solutionPositionChart .freezeTicks ();
308+ solutionPositionChart .fixAspectRatio ();
309+ solutionPositionChart .setTicks ();
310+ }
293311 Layout .preferredWidth : parent .width
294312 Layout .preferredHeight : parent .height - Constants .commonChart .heightOffset
295313 Layout .alignment : Qt .AlignBottom
0 commit comments