Author: post
Date: 2013-01-27 18:34:34 +0100 (Sun, 27 Jan 2013)
New Revision: 4324

Modified:
   trunk/librawstudio/rs-curve.c
Log:
Make curve tool always select closest point, and use delayed updates to 
alleviate flicker in the curve widget.

Modified: trunk/librawstudio/rs-curve.c
===================================================================
--- trunk/librawstudio/rs-curve.c       2013-01-27 16:55:30 UTC (rev 4323)
+++ trunk/librawstudio/rs-curve.c       2013-01-27 17:34:34 UTC (rev 4324)
@@ -218,7 +218,7 @@
                g_free(curve->bg_buffer);
        curve->bg_buffer = NULL;
        curve->histogram_uptodate = TRUE;
-       rs_curve_draw_histogram(curve);
+       gtk_widget_queue_draw(GTK_WIDGET(curve));
        gdk_threads_leave();
 }
 
@@ -274,7 +274,7 @@
                g_object_unref(request);
                g_object_unref(response);
        }
-       rs_curve_draw(curve);
+       gtk_widget_queue_draw(GTK_WIDGET(curve));
 }
 
 void 
@@ -293,7 +293,7 @@
                curve->rgb_values[1] = -1;
                curve->rgb_values[2] = -1;
        }
-       rs_curve_draw(curve);
+       gtk_widget_queue_draw(GTK_WIDGET(curve));
 }
 
 /**
@@ -373,7 +373,8 @@
        rs_curve_changed(curve);
 
        /* Redraw everything */
-       rs_curve_draw(curve);
+       gtk_widget_queue_draw(GTK_WIDGET(curve));
+
        return;
 }
 
@@ -951,7 +952,7 @@
                g_signal_emit (G_OBJECT (curve), 
                        signals[RIGHTCLICK_SIGNAL], 0);
 
-       rs_curve_draw(curve);
+       gtk_widget_queue_draw(widget);
 
        return(TRUE);
 }
@@ -1042,19 +1043,22 @@
 
                /* Find knot below cursor if any  */
                curve->active_knot = -1;
+               /* This also indicates the closeness the cursor must be to 
'pick up' a point */
+               float closest_distance = 16.0f;
                for(i=0;i<n;i++)
                {
-                       if (fabsf(event->x-knots[i*2+0]) < 16.0)
+                       float dist = fabsf(event->x-knots[i*2+0]);
+                       if (dist < closest_distance)
                        {
+                               closest_distance = dist;
                                curve->active_knot = i;
-                               break;
                        }
                }
        }
 
        /* Update knots if needed */
        if (old_active_knot != curve->active_knot)
-               rs_curve_draw(RS_CURVE_WIDGET(widget));
+               gtk_widget_queue_draw(widget);
        g_free(knots);
 
        return(TRUE);


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to