[gedit/wip/adjustment-checks] utils: add gedit_utils_check_adjustment_invariants()




commit e9eff29545f3c8b5c5647e3d0b0043b4e4f7920d
Author: Sébastien Wilmet <swilmet informatique-libre be>
Date:   Mon Jul 25 02:17:35 2022 +0200

    utils: add gedit_utils_check_adjustment_invariants()

 gedit/gedit-utils.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 gedit/gedit-utils.h |  2 ++
 2 files changed, 69 insertions(+)
---
diff --git a/gedit/gedit-utils.c b/gedit/gedit-utils.c
index 9fc9e4fb0..1ea5a1aa0 100644
--- a/gedit/gedit-utils.c
+++ b/gedit/gedit-utils.c
@@ -539,4 +539,71 @@ gedit_utils_newline_type_to_string (GtkSourceNewlineType newline_type)
        return NULL;
 }
 
+gboolean
+gedit_utils_check_adjustment_invariants (GtkAdjustment *adjustment)
+{
+       gdouble value;
+       gdouble lower;
+       gdouble upper;
+       gdouble page_size;
+       gdouble page_increment;
+       gdouble step_increment;
+
+       g_return_val_if_fail (GTK_IS_ADJUSTMENT (adjustment), FALSE);
+
+       value = gtk_adjustment_get_value (adjustment);
+       lower = gtk_adjustment_get_lower (adjustment);
+       upper = gtk_adjustment_get_upper (adjustment);
+       page_size = gtk_adjustment_get_page_size (adjustment);
+       page_increment = gtk_adjustment_get_page_increment (adjustment);
+       step_increment = gtk_adjustment_get_step_increment (adjustment);
+
+       if (lower > upper)
+       {
+               return FALSE;
+       }
+
+       if (value < lower)
+       {
+               return FALSE;
+       }
+
+       if (value > upper)
+       {
+               return FALSE;
+       }
+
+       if (page_size < 0.0)
+       {
+               return FALSE;
+       }
+
+       if (page_increment < 0.0)
+       {
+               return FALSE;
+       }
+
+       if (step_increment < 0.0)
+       {
+               return FALSE;
+       }
+
+       if (page_size != 0.0)
+       {
+               gdouble real_upper = upper - page_size;
+
+               if (lower > real_upper)
+               {
+                       return FALSE;
+               }
+
+               if (value > real_upper)
+               {
+                       return FALSE;
+               }
+       }
+
+       return TRUE;
+}
+
 /* ex:set ts=8 noet: */
diff --git a/gedit/gedit-utils.h b/gedit/gedit-utils.h
index a6b423db0..f400f0e34 100644
--- a/gedit/gedit-utils.h
+++ b/gedit/gedit-utils.h
@@ -49,6 +49,8 @@ GtkSourceCompressionType   gedit_utils_get_compression_type_from_content_type (c
 
 const gchar               *gedit_utils_newline_type_to_string                 (GtkSourceNewlineType  
newline_type);
 
+gboolean                  gedit_utils_check_adjustment_invariants            (GtkAdjustment *adjustment);
+
 G_END_DECLS
 
 #endif /* GEDIT_UTILS_H */


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