[libshumate] viewport: Fix failed check in min/max zoom



commit 996f9a7a09e99573cafff36869d01de2f159e779
Author: James Westman <james jwestman net>
Date:   Thu Oct 6 11:15:20 2022 -0500

    viewport: Fix failed check in min/max zoom
    
    The check failed when a min zoom greater than 0 was set before a max
    zoom was set, because the max zoom is still 0 at that point in the object
    construction process.
    
    Fixed by setting the default values in the initializer method.

 shumate/shumate-viewport.c | 11 +++++++++--
 tests/viewport.c           | 14 +++++++-------
 2 files changed, 16 insertions(+), 9 deletions(-)
---
diff --git a/shumate/shumate-viewport.c b/shumate/shumate-viewport.c
index 8c68dbe..6eeff69 100644
--- a/shumate/shumate-viewport.c
+++ b/shumate/shumate-viewport.c
@@ -36,6 +36,9 @@
  * accessible via the interface methods.
  */
 
+#define DEFAULT_MIN_ZOOM 0
+#define DEFAULT_MAX_ZOOM 20
+
 struct _ShumateViewport
 {
   GObject parent_instance;
@@ -237,7 +240,7 @@ shumate_viewport_class_init (ShumateViewportClass *klass)
     g_param_spec_uint ("min-zoom-level",
                        "Min zoom level",
                        "The lowest allowed level of zoom",
-                       0, 20, 0,
+                       0, 20, DEFAULT_MIN_ZOOM,
                        G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
 
   /**
@@ -249,7 +252,7 @@ shumate_viewport_class_init (ShumateViewportClass *klass)
     g_param_spec_uint ("max-zoom-level",
                        "Max zoom level",
                        "The highest allowed level of zoom",
-                       0, 20, 20,
+                       0, 20, DEFAULT_MAX_ZOOM,
                        G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
 
   /**
@@ -292,6 +295,10 @@ shumate_viewport_class_init (ShumateViewportClass *klass)
 static void
 shumate_viewport_init (ShumateViewport *self)
 {
+  /* We need to set these here, otherwise the max_zoom >= min_zoom check in
+   * the setter functions may fail if they're not called in the right order. */
+  self->min_zoom_level = DEFAULT_MIN_ZOOM;
+  self->max_zoom_level = DEFAULT_MAX_ZOOM;
 }
 
 static void
diff --git a/tests/viewport.c b/tests/viewport.c
index 670dbb7..a74ea2b 100644
--- a/tests/viewport.c
+++ b/tests/viewport.c
@@ -30,11 +30,11 @@ test_viewport_zoom_level_max (void)
   ShumateViewport *viewport;
 
   viewport = shumate_viewport_new ();
-  g_assert_cmpuint (shumate_viewport_get_max_zoom_level (viewport), ==, 0);
-
-  shumate_viewport_set_max_zoom_level (viewport, 20);
   g_assert_cmpuint (shumate_viewport_get_max_zoom_level (viewport), ==, 20);
 
+  shumate_viewport_set_max_zoom_level (viewport, 17);
+  g_assert_cmpuint (shumate_viewport_get_max_zoom_level (viewport), ==, 17);
+
   /* Setting the maximum zoom level must update the current zoom level too */
   shumate_viewport_set_zoom_level (viewport, 15);
   shumate_viewport_set_max_zoom_level (viewport, 10);
@@ -48,19 +48,19 @@ test_viewport_zoom_level_clamp (void)
 
   viewport = shumate_viewport_new ();
   g_assert_cmpuint (shumate_viewport_get_min_zoom_level (viewport), ==, 0);
-  g_assert_cmpuint (shumate_viewport_get_max_zoom_level (viewport), ==, 0);
+  g_assert_cmpuint (shumate_viewport_get_max_zoom_level (viewport), ==, 20);
 
   /* Can't set min zoom level > max zoom level */
   g_test_expect_message ("shumate",
                          G_LOG_LEVEL_CRITICAL,
                          "shumate_viewport_set_min_zoom_level: assertion 'min_zoom_level <= 
self->max_zoom_level' failed");
 
-  shumate_viewport_set_min_zoom_level (viewport, 5);
+  shumate_viewport_set_min_zoom_level (viewport, 21);
   g_test_assert_expected_messages ();
   g_assert_cmpuint (shumate_viewport_get_min_zoom_level (viewport), ==, 0);
 
-  shumate_viewport_set_max_zoom_level (viewport, 15);
   shumate_viewport_set_min_zoom_level (viewport, 5);
+  shumate_viewport_set_max_zoom_level (viewport, 15);
 
   /* Equally, can't set max zoom level < min zoom level */
   g_test_expect_message ("shumate",
@@ -127,7 +127,7 @@ test_viewport_zoom_level_notify (void)
                                NULL);
 
   /* Max zoom level */
-  for (i = 20; i > 15; i--)
+  for (i = 10; i > 5; i--)
     shumate_viewport_set_max_zoom_level (viewport, i);
   g_assert_cmpuint (max_zoom_level_notify_counter, ==, 5);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]