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