[libshumate] viewport: Fix failed check in min/max zoom
- From: Corentin Noël <corentinnoel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libshumate] viewport: Fix failed check in min/max zoom
- Date: Thu, 6 Oct 2022 17:54:54 +0000 (UTC)
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]