[gimp/gimp-2-10] app: allow setting handle-bar limits explicitly



commit e5916c81cc685c48ee451a3ebef81291d2b3c682
Author: Ell <ell_se yahoo com>
Date:   Tue Jun 2 18:28:27 2020 +0300

    app: allow setting handle-bar limits explicitly
    
    In GimpHandleBar, add gimp_handle_bar_{set,unset,get}_limits(), to
    allow settings the handle-bar limits explicitly, rather than
    inheriting the adjustment limits.
    
    (cherry picked from commit fa5dd99559079cbf58a1224c04cab0a6fbe7afd8)

 app/widgets/gimphandlebar.c | 52 +++++++++++++++++++++++++++++++++++++++++----
 app/widgets/gimphandlebar.h |  9 ++++++++
 2 files changed, 57 insertions(+), 4 deletions(-)
---
diff --git a/app/widgets/gimphandlebar.c b/app/widgets/gimphandlebar.c
index 3b4d92bc1b..09b425bc2e 100644
--- a/app/widgets/gimphandlebar.c
+++ b/app/widgets/gimphandlebar.c
@@ -96,6 +96,8 @@ gimp_handle_bar_init (GimpHandleBar *bar)
   gtk_event_box_set_visible_window (GTK_EVENT_BOX (bar), FALSE);
 
   bar->orientation = GTK_ORIENTATION_HORIZONTAL;
+
+  bar->limits_set  = FALSE;
   bar->lower       = 0.0;
   bar->upper       = 1.0;
 }
@@ -356,6 +358,45 @@ gimp_handle_bar_set_adjustment (GimpHandleBar  *bar,
   gimp_handle_bar_adjustment_changed (bar->slider_adj[handle_no], bar);
 }
 
+void
+gimp_handle_bar_set_limits (GimpHandleBar *bar,
+                            gdouble        lower,
+                            gdouble        upper)
+{
+  g_return_if_fail (GIMP_IS_HANDLE_BAR (bar));
+
+  bar->limits_set = TRUE;
+  bar->lower      = lower;
+  bar->upper      = upper;
+
+  gtk_widget_queue_draw (GTK_WIDGET (bar));
+}
+
+void
+gimp_handle_bar_unset_limits (GimpHandleBar *bar)
+{
+  g_return_if_fail (GIMP_IS_HANDLE_BAR (bar));
+
+  bar->limits_set = FALSE;
+  bar->lower      = 0.0;
+  bar->upper      = 1.0;
+
+  gimp_handle_bar_adjustment_changed (NULL, bar);
+}
+
+gboolean
+gimp_handle_bar_get_limits (GimpHandleBar *bar,
+                            gdouble       *lower,
+                            gdouble       *upper)
+{
+  g_return_val_if_fail (GIMP_IS_HANDLE_BAR (bar), FALSE);
+
+  if (lower) *lower = bar->lower;
+  if (upper) *upper = bar->upper;
+
+  return bar->limits_set;
+}
+
 void
 gimp_handle_bar_connect_events (GimpHandleBar *bar,
                                 GtkWidget     *event_source)
@@ -387,11 +428,14 @@ static void
 gimp_handle_bar_adjustment_changed (GtkAdjustment *adjustment,
                                     GimpHandleBar *bar)
 {
-  if (bar->slider_adj[0])
-    bar->lower = gtk_adjustment_get_lower (bar->slider_adj[0]);
+  if (! bar->limits_set)
+    {
+      if (bar->slider_adj[0])
+        bar->lower = gtk_adjustment_get_lower (bar->slider_adj[0]);
 
-  if (bar->slider_adj[2])
-    bar->upper = gtk_adjustment_get_upper (bar->slider_adj[2]);
+      if (bar->slider_adj[2])
+        bar->upper = gtk_adjustment_get_upper (bar->slider_adj[2]);
+    }
 
   gtk_widget_queue_draw (GTK_WIDGET (bar));
 }
diff --git a/app/widgets/gimphandlebar.h b/app/widgets/gimphandlebar.h
index 1cca177926..6007d50c04 100644
--- a/app/widgets/gimphandlebar.h
+++ b/app/widgets/gimphandlebar.h
@@ -36,6 +36,7 @@ struct _GimpHandleBar
   GtkOrientation  orientation;
 
   GtkAdjustment  *slider_adj[3];
+  gboolean        limits_set;
   gdouble         lower;
   gdouble         upper;
 
@@ -57,6 +58,14 @@ void        gimp_handle_bar_set_adjustment (GimpHandleBar  *bar,
                                             gint            handle_no,
                                             GtkAdjustment  *adjustment);
 
+void        gimp_handle_bar_set_limits     (GimpHandleBar  *bar,
+                                            gdouble         lower,
+                                            gdouble         upper);
+void        gimp_handle_bar_unset_limits   (GimpHandleBar  *bar);
+gboolean    gimp_handle_bar_get_limits     (GimpHandleBar  *bar,
+                                            gdouble        *lower,
+                                            gdouble        *upper);
+
 void        gimp_handle_bar_connect_events (GimpHandleBar  *bar,
                                             GtkWidget      *event_source);
 


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