Author: post
Date: 2009-07-11 22:10:29 +0200 (Sat, 11 Jul 2009)
New Revision: 2588

Modified:
   trunk/src/rs-navigator.c
   trunk/src/rs-navigator.h
   trunk/src/rs-preview-widget.c
   trunk/src/rs-preview-widget.h
Log:
Added quick mode for scrollbars, image navigation, zoom change. Interface for 
this is added to the preview widget. Loupe is now also disabled in 100% view.

Modified: trunk/src/rs-navigator.c
===================================================================
--- trunk/src/rs-navigator.c    2009-07-11 20:01:15 UTC (rev 2587)
+++ trunk/src/rs-navigator.c    2009-07-11 20:10:29 UTC (rev 2588)
@@ -22,6 +22,7 @@
 G_DEFINE_TYPE (RSNavigator, rs_navigator, GTK_TYPE_DRAWING_AREA)
 
 static gboolean button_press_event(GtkWidget *widget, GdkEventButton *event);
+static gboolean button_release_event(GtkWidget *widget, GdkEventButton *event);
 static gboolean motion_notify_event(GtkWidget *widget, GdkEventMotion *event);
 static gboolean expose(GtkWidget *widget, GdkEventExpose *event);
 static void size_allocate(GtkWidget *widget, GtkAllocation *allocation, 
gpointer user_data);
@@ -58,6 +59,7 @@
 
        object_class->finalize = rs_navigator_finalize;
        widget_class->button_press_event = button_press_event;
+       widget_class->button_release_event = button_release_event;
        widget_class->motion_notify_event = motion_notify_event;
        widget_class->expose_event = expose;
 }
@@ -72,8 +74,10 @@
 
        gtk_widget_set_events(GTK_WIDGET(navigator), 0
                | GDK_BUTTON_PRESS_MASK
+               | GDK_BUTTON_RELEASE_MASK
                | GDK_POINTER_MOTION_MASK);
        gtk_widget_set_app_paintable(GTK_WIDGET(navigator), TRUE);
+
 }
 
 RSNavigator *
@@ -112,6 +116,14 @@
        rs_filter_set_previous(navigator->cache, source_filter);
 }
 
+void
+rs_navigator_set_preview_widget(RSNavigator *navigator, RSPreviewWidget 
*preview) {
+       g_assert(RS_IS_NAVIGATOR(navigator));
+       g_assert(RS_IS_PREVIEW_WIDGET(preview));
+
+       navigator->preview = preview;
+}
+
 static void
 get_placement(RSNavigator *navigator, GdkRectangle *placement)
 {
@@ -157,12 +169,26 @@
 {
        RSNavigator *navigator = RS_NAVIGATOR(widget);
 
+       rs_preview_widget_quick_start(navigator->preview, TRUE);
+
        move_to(navigator, event->x, event->y);
 
        return TRUE;
 }
 
 static gboolean
+button_release_event(GtkWidget *widget, GdkEventButton *event)
+{
+       RSNavigator *navigator = RS_NAVIGATOR(widget);
+
+       move_to(navigator, event->x, event->y);
+
+       rs_preview_widget_quick_end(navigator->preview);
+
+       return TRUE;
+}
+
+static gboolean
 motion_notify_event(GtkWidget *widget, GdkEventMotion *event)
 {
        RSNavigator *navigator = RS_NAVIGATOR(widget);
@@ -178,9 +204,10 @@
        navigator->last_x = x;
        navigator->last_y = y;
 
-       if (mask & (GDK_BUTTON1_MASK|GDK_BUTTON2_MASK|GDK_BUTTON3_MASK))
+       if (mask & (GDK_BUTTON1_MASK|GDK_BUTTON2_MASK|GDK_BUTTON3_MASK)) {
                move_to(navigator, (gdouble) x, (gdouble) y);
 
+       }
        return TRUE;
 }
 

Modified: trunk/src/rs-navigator.h
===================================================================
--- trunk/src/rs-navigator.h    2009-07-11 20:01:15 UTC (rev 2587)
+++ trunk/src/rs-navigator.h    2009-07-11 20:10:29 UTC (rev 2588)
@@ -21,6 +21,7 @@
 #define RS_NAVIGATOR_H
 
 #include <rawstudio.h>
+#include <rs-preview-widget.h>
 #include <glib-object.h>
 
 G_BEGIN_DECLS
@@ -59,6 +60,9 @@
        gint y;
        gint x_page;
        gint y_page;
+
+       RSPreviewWidget *preview;
+
 } RSNavigator;
 
 typedef struct {
@@ -71,6 +75,7 @@
 
 void rs_navigator_set_adjustments(RSNavigator *navigator, GtkAdjustment 
*vadjustment, GtkAdjustment *hadjustment);
 void rs_navigator_set_source_filter(RSNavigator *navigator, RSFilter 
*source_filter);
+void rs_navigator_set_preview_widget(RSNavigator *navigator, RSPreviewWidget 
*preview);
 
 G_END_DECLS
 

Modified: trunk/src/rs-preview-widget.c
===================================================================
--- trunk/src/rs-preview-widget.c       2009-07-11 20:01:15 UTC (rev 2587)
+++ trunk/src/rs-preview-widget.c       2009-07-11 20:10:29 UTC (rev 2588)
@@ -120,6 +120,7 @@
 
        gboolean zoom_to_fit;
        gboolean exposure_mask;
+       gboolean keep_quick_enabled;
 
        GdkColor bgcolor; /* Background color of widget */
        VIEW_SPLIT split;
@@ -308,6 +309,7 @@
        preview->zoom_to_fit = TRUE;
        preview->exposure_mask = FALSE;
        preview->crop_near = CROP_NEAR_NOTHING;
+       preview->keep_quick_enabled = FALSE;
 
        preview->vadjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 
100.0, 1.0, 10.0, 10.0));
        preview->hadjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 
100.0, 1.0, 10.0, 10.0));
@@ -495,9 +497,11 @@
                gtk_widget_set_size_request(GTK_WIDGET(navigator), 
NAVIGATOR_WIDTH, NAVIGATOR_HEIGHT);
 
                preview->navigator = rs_toolbox_add_widget(preview->toolbox, 
GTK_WIDGET(navigator), _("Display Navigation"));
+               rs_navigator_set_preview_widget(navigator, preview);
                gtk_widget_show_all(GTK_WIDGET(preview->navigator));
        }
 
+       rs_preview_widget_quick_start(preview, FALSE);
        preview->zoom_to_fit = zoom_to_fit;
 }
 
@@ -510,6 +514,10 @@
        if (preview->loupe_enabled != enabled)
        {
                preview->loupe_enabled = enabled;
+
+               if (!preview->zoom_to_fit)
+                       preview->loupe_enabled = FALSE;
+
                if (preview->loupe_enabled)
                {
                        rs_loupe_set_filter(preview->loupe, 
preview->loupe_filter_end);
@@ -887,6 +895,10 @@
        if (!GTK_WIDGET_DRAWABLE(GTK_WIDGET(preview)))
                return;
 
+       /* FIXME: Check all views.*/
+       if (rs_filter_param_get_quick(preview->param[0]) && 
!preview->keep_quick_enabled)
+               full_redraw = TRUE;
+
        if (full_redraw)
        {
                rect.x = 0;
@@ -1087,6 +1099,40 @@
        rs_photo_set_angle(preview->photo, 0.0, FALSE);
 }
 
+/**
+ * Enables quick mode in display
+ * @param preview A RSPreviewWidget
+ */
+void
+rs_preview_widget_quick_start(RSPreviewWidget *preview, gboolean keep_quick) 
+{
+       gint i;
+
+       preview->keep_quick_enabled = keep_quick;
+
+       for(i=0;i<MAX_VIEWS;i++)
+               rs_filter_param_set_quick(preview->param[i], TRUE);
+
+}
+
+/**
+ * Disables quick mode in display and redraws screen
+ * @param preview A RSPreviewWidget
+ */
+void
+rs_preview_widget_quick_end(RSPreviewWidget *preview) 
+{
+       gint i;
+
+       preview->keep_quick_enabled = FALSE;
+
+       for(i=0;i<MAX_VIEWS;i++) {
+               DIRTY(preview->dirty[i], SCREEN);
+       }
+
+       rs_preview_widget_update(preview, TRUE);
+}
+
 static void
 get_max_size(RSPreviewWidget *preview, gint *width, gint *height)
 {
@@ -1322,7 +1368,11 @@
                        *preview->last_roi[i] = roi;
 
                        rs_filter_param_set_roi(preview->param[i], &roi);
-                       RSFilterResponse *response = 
rs_filter_get_image8(preview->filter_end[i], preview->param[i]);
+
+                       /* Clone, now so it cannot change while filters are 
being called */
+                       RSFilterParam *new_param = 
rs_filter_param_clone(preview->param[i]);  
+
+                       RSFilterResponse *response = 
rs_filter_get_image8(preview->filter_end[i], new_param);
                        GdkPixbuf *buffer = 
rs_filter_response_get_image8(response);
 
                        if (buffer)
@@ -1340,14 +1390,12 @@
                                g_object_unref(buffer);
                        }
 
-                       /* This is a hack to redraw when we got a "quick" 
response - should
-                          be replacedby something threaded or something */
-                       if(rs_filter_response_get_quick(response))
+                       if(rs_filter_param_get_quick(new_param) && 
!preview->keep_quick_enabled)
                        {
                                rs_filter_param_set_quick(preview->param[i], 
FALSE);
                                gdk_window_invalidate_rect(window, &area, 
FALSE);
                        }
-
+                       g_object_unref(new_param);
                        g_object_unref(response);
                }
 
@@ -1688,10 +1736,8 @@
 scrollbar_press(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
 {
        RSPreviewWidget *preview = RS_PREVIEW_WIDGET(user_data);
-       gint i;
 
-       for(i=0;i<MAX_VIEWS;i++)
-               rs_filter_param_set_quick(preview->param[i], TRUE);
+       rs_preview_widget_quick_start(preview, TRUE);
 
        return FALSE;
 }
@@ -1700,14 +1746,9 @@
 scrollbar_release(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
 {
        RSPreviewWidget *preview = RS_PREVIEW_WIDGET(user_data);
-       gint i;
 
-       for(i=0;i<MAX_VIEWS;i++)
-               rs_filter_param_set_quick(preview->param[i], FALSE);
+       rs_preview_widget_quick_end(preview);
 
-       DIRTY(preview->dirty[0], SCREEN);
-       rs_preview_widget_update(preview, TRUE);
-
        return FALSE;
 }
 
@@ -1730,9 +1771,10 @@
 
        if (!preview->zoom_to_fit)
        {
+               /* Update Screen */
                DIRTY(preview->dirty[0], SCREEN);
-               if (preview->adjustment_changed_helper_timeout == 0)
-                       preview->adjustment_changed_helper_timeout = 
g_timeout_add(1, adjustment_changed_helper, preview);
+
+               rs_preview_widget_update(preview, TRUE);
        }
 }
 

Modified: trunk/src/rs-preview-widget.h
===================================================================
--- trunk/src/rs-preview-widget.h       2009-07-11 20:01:15 UTC (rev 2587)
+++ trunk/src/rs-preview-widget.h       2009-07-11 20:10:29 UTC (rev 2588)
@@ -154,6 +154,20 @@
 extern void
 rs_preview_widget_unstraighten(RSPreviewWidget *preview);
 
+/*
+ * Enables quick mode in display
+ * @param preview A RSPreviewWidget
+ */
+extern void
+rs_preview_widget_quick_start(RSPreviewWidget *preview, gboolean keep_quick);
+
+/*
+ * Disables quick mode in display and redraws screen
+ * @param preview A RSPreviewWidget
+ */
+extern void
+rs_preview_widget_quick_end(RSPreviewWidget *preview);
+
 #define RS_PREVIEW_TYPE_WIDGET             (rs_preview_widget_get_type ())
 #define RS_PREVIEW_WIDGET(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
RS_PREVIEW_TYPE_WIDGET, RSPreviewWidget))
 #define RS_PREVIEW_WIDGET_CLASS(obj)       (G_TYPE_CHECK_CLASS_CAST ((obj), 
RS_PREVIEW_WIDGET, RSPreviewWidgetClass))


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

Reply via email to