summaryrefslogtreecommitdiff
path: root/community/gimp-refocus
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2012-03-06 00:01:33 +0000
committerroot <root@rshg054.dnsready.net>2012-03-06 00:01:33 +0000
commitb8afacf1f28ac27321feb9b92bd50dd8961b7736 (patch)
treede441882aca38091a1e438e1d8da8a9af3bd023a /community/gimp-refocus
parent11711de1942a141f28faef695c4c78c8357fbf23 (diff)
Tue Mar 6 00:01:33 UTC 2012
Diffstat (limited to 'community/gimp-refocus')
-rw-r--r--community/gimp-refocus/PKGBUILD35
-rw-r--r--community/gimp-refocus/refocus-gimp-2.0.patch209
-rw-r--r--community/gimp-refocus/refocus-gimp-preview.patch440
-rw-r--r--community/gimp-refocus/refocus-mirror-fix.patch54
4 files changed, 738 insertions, 0 deletions
diff --git a/community/gimp-refocus/PKGBUILD b/community/gimp-refocus/PKGBUILD
new file mode 100644
index 000000000..5cc3b5703
--- /dev/null
+++ b/community/gimp-refocus/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 128457 2011-06-24 02:06:37Z eric $
+# Maintainer: Tobias Kieslich <tobias@justdreams.de>
+# Contributor: Tobias Kieslich <tobias@justdreams.de>
+
+pkgname=gimp-refocus
+pkgver=0.9.0
+pkgrel=3
+pkgdesc="A sharpen plugin for gimp using FIR Wiener filtering"
+arch=('i686' 'x86_64')
+url="http://refocus.sourceforge.net/"
+license=('GPL2')
+depends=('gimp')
+source=(http://downloads.sourceforge.net/sourceforge/refocus/refocus-${pkgver}.tar.gz \
+ refocus-gimp-2.0.patch refocus-mirror-fix.patch refocus-gimp-preview.patch)
+md5sums=('8d4eac4ef45c904fb5e73021696bec94'
+ '8ef9dfe697cd20be2be14c1ee53a240a'
+ '532593cba030feab8ffa7800fc9cd782'
+ '6b55dbdc656646c765064cf21e1a3c57')
+
+build() {
+ cd "${srcdir}/refocus-${pkgver}"
+ patch -Np0 -i ../refocus-gimp-2.0.patch
+ patch -Np0 -i ../refocus-mirror-fix.patch
+ patch -Np0 -i ../refocus-gimp-preview.patch
+ aclocal
+ autoconf
+ automake --add-missing
+ ./configure --prefix=/usr --bindir=/usr/lib/gimp/2.0/plug-ins
+ make
+}
+
+package() {
+ cd "${srcdir}/refocus-${pkgver}"
+ make DESTDIR="${pkgdir}" install
+}
diff --git a/community/gimp-refocus/refocus-gimp-2.0.patch b/community/gimp-refocus/refocus-gimp-2.0.patch
new file mode 100644
index 000000000..259ee9f87
--- /dev/null
+++ b/community/gimp-refocus/refocus-gimp-2.0.patch
@@ -0,0 +1,209 @@
+Index: configure.in
+===================================================================
+RCS file: /cvsroot/refocus/refocus/configure.in,v
+retrieving revision 1.1.1.1
+diff -u -u -r1.1.1.1 configure.in
+--- configure.in 30 Jan 2003 21:29:29 -0000 1.1.1.1
++++ configure.in 6 Apr 2004 20:26:54 -0000
+@@ -1,8 +1,8 @@
+ dnl Process this file with autoconf to produce a configure script.
+
+-AC_INIT(README)
+-
+-AM_INIT_AUTOMAKE(refocus, 0.9.0)
++AC_INIT([refocus],[0.9.0])
++AC_CONFIG_SRCDIR(README)
++AM_INIT_AUTOMAKE
+
+ AC_PROG_CC
+ AC_CHECK_PROG(GCC3, gcc3, gcc3)
+@@ -12,7 +12,7 @@
+ AC_MSG_RESULT([using $CC as compiler])
+ fi
+
+-AC_STDC_HEADERS
++AC_HEADER_STDC([])
+ AC_PROG_RANLIB
+
+ # Check if the user has ATLAS installed in ./lib-atlas
+@@ -36,7 +36,7 @@
+ AC_SUBST(LAPACK_INCLUDE_DIR)
+ AM_CONDITIONAL(HAVE_ATLAS, test x${have_atlas} = xyes)
+
+-AM_PATH_GIMP(1.2.0)
++AM_PATH_GIMP_2_0(2.0.0)
+ AM_PATH_GTK_2_0(2.0.0)
+ AM_PATH_GLIB_2_0(2.0.0)
+
+@@ -106,5 +106,6 @@
+ #Check if erf is defined in the mathlibrary
+ AC_CHECK_LIB(m, erf, AC_DEFINE(HAVE_ERF))
+
+-AC_OUTPUT([Makefile src/Makefile lib/Makefile doc/Makefile gtk-doc/Makefile ])
++AC_CONFIG_FILES([Makefile src/Makefile lib/Makefile doc/Makefile gtk-doc/Makefile ])
++AC_OUTPUT
+
+Index: lib/Makefile.am
+===================================================================
+RCS file: /cvsroot/refocus/refocus/lib/Makefile.am,v
+retrieving revision 1.1.1.1
+diff -u -u -r1.1.1.1 Makefile.am
+--- lib/Makefile.am 30 Jan 2003 21:29:52 -0000 1.1.1.1
++++ lib/Makefile.am 6 Apr 2004 20:26:55 -0000
+@@ -1,4 +1,4 @@
+-CFLAGS=-fomit-frame-pointer -O3 -funroll-all-loops
++AM_CFLAGS=-fomit-frame-pointer -O3 -funroll-all-loops
+
+
+ noinst_LIBRARIES = liblapack.a libatlas.a libcblas.a
+Index: src/Makefile.am
+===================================================================
+RCS file: /cvsroot/refocus/refocus/src/Makefile.am,v
+retrieving revision 1.1.1.1
+diff -u -u -r1.1.1.1 Makefile.am
+--- src/Makefile.am 30 Jan 2003 21:30:18 -0000 1.1.1.1
++++ src/Makefile.am 6 Apr 2004 20:26:55 -0000
+@@ -11,7 +11,7 @@
+ EXTRA_DIST = dummy-plugin.c
+
+ refocus_SOURCES = refocus.c conv.c gimppreview.c prevman.c util.c matrix.c tilebuf.c bdclosure.c fwlapack.c
+-refocus_LDADD = @GTK_LIBS@ -lgimp ${ldadd_atlas}
++refocus_LDADD = @GIMP_LIBS@ ${ldadd_atlas}
+ refocus_DEPENDENCIES=@LAPACK_LIB_DIR@/liblapack.a
+
+ test_matrix_SOURCES = matrix.c test-matrix.c fwlapack.c
+Index: src/gimppreview.c
+===================================================================
+RCS file: /cvsroot/refocus/refocus/src/gimppreview.c,v
+retrieving revision 1.1.1.1
+diff -u -u -r1.1.1.1 gimppreview.c
+--- src/gimppreview.c 30 Jan 2003 21:30:18 -0000 1.1.1.1
++++ src/gimppreview.c 6 Apr 2004 20:26:55 -0000
+@@ -344,7 +344,7 @@
+
+ /* Save the drawable info. */
+ preview->drawable = drawable;
+- preview->drawable_has_alpha = gimp_drawable_has_alpha (drawable->id);
++ preview->drawable_has_alpha = gimp_drawable_has_alpha (drawable->drawable_id);
+
+ /* Calculate our preview size. */
+ if (preview_size == PREVIEW_FIXED_SIZE)
+Index: src/prevman.c
+===================================================================
+RCS file: /cvsroot/refocus/refocus/src/prevman.c,v
+retrieving revision 1.1.1.1
+diff -u -u -r1.1.1.1 prevman.c
+--- src/prevman.c 30 Jan 2003 21:30:18 -0000 1.1.1.1
++++ src/prevman.c 6 Apr 2004 20:26:56 -0000
+@@ -52,7 +52,7 @@
+ tile_source->width = drawable->width;
+ tile_source->height = drawable->height;
+ tile_source->bpp = drawable->bpp;
+- tile_source->has_alpha = gimp_drawable_has_alpha (drawable->id);
++ tile_source->has_alpha = gimp_drawable_has_alpha (drawable->drawable_id);
+ tile_source->un.drw.drawable = drawable;
+ gimp_pixel_rgn_init (&tile_source->un.drw.pixel_rgn, drawable, x, y, width,
+ height, FALSE, FALSE);
+@@ -144,7 +144,7 @@
+ tile_sink->width = drawable->width;
+ tile_sink->height = drawable->height;
+ tile_sink->bpp = drawable->bpp;
+- tile_sink->has_alpha = gimp_drawable_has_alpha (drawable->id);
++ tile_sink->has_alpha = gimp_drawable_has_alpha (drawable->drawable_id);
+ gimp_pixel_rgn_init (&tile_sink->un.drw.pixel_rgn, drawable, x, y, width,
+ height, TRUE, TRUE);
+ }
+@@ -159,7 +159,7 @@
+ tile_sink->width = width;
+ tile_sink->height = height;
+ tile_sink->bpp = drawable->bpp;
+- tile_sink->has_alpha = gimp_drawable_has_alpha (drawable->id);
++ tile_sink->has_alpha = gimp_drawable_has_alpha (drawable->drawable_id);
+ tile_sink->un.prv.data = g_new (guchar,
+ tile_sink->width * tile_sink->height *
+ tile_sink->bpp);
+Index: src/refocus.c
+===================================================================
+RCS file: /cvsroot/refocus/refocus/src/refocus.c,v
+retrieving revision 1.1.1.1
+diff -u -u -r1.1.1.1 refocus.c
+--- src/refocus.c 30 Jan 2003 21:30:19 -0000 1.1.1.1
++++ src/refocus.c 6 Apr 2004 20:26:56 -0000
+@@ -45,9 +45,9 @@
+
+ /* Declare local functions. */
+ static void query (void);
+-static void run (char *name,
++static void run (const gchar *name,
+ gint nparams,
+- GimpParam * param,
++ const GimpParam * param,
+ gint * nreturn_vals, GimpParam ** return_vals);
+ static gint dialog ();
+ static void doit (void);
+@@ -111,7 +111,6 @@
+ {GIMP_PDB_FLOAT, "noise", "Noise to Signal ratio"},
+ };
+ static GimpParamDef *return_vals = NULL;
+- static gint nargs = (gint) (sizeof (args) / sizeof (args[0]));
+ static gint nreturn_vals = 0;
+
+ gimp_install_procedure ("plug_in_refocus",
+@@ -123,15 +122,15 @@
+ "<Image>/Filters/Enhance/Refocus ...",
+ "RGB*, GRAY*",
+ GIMP_PLUGIN,
+- nargs, nreturn_vals, args, return_vals);
++ G_N_ELEMENTS(args), nreturn_vals, args, return_vals);
+ }
+
+ static void
+-run (char *name, gint n_params, GimpParam * param,
++run (const gchar *name, gint n_params, const GimpParam * param,
+ gint * nreturn_vals, GimpParam ** return_vals)
+ {
+ static GimpParam values[1];
+- GimpRunModeType run_mode;
++ GimpRunMode run_mode;
+ GimpPDBStatusType status = GIMP_PDB_SUCCESS;
+
+ (void) name; /* Shut up warnings about unused parameters. */
+@@ -186,8 +185,8 @@
+ {
+
+ /* Make sure that the drawable is gray or RGB color */
+- if (gimp_drawable_is_rgb (drawable->id) ||
+- gimp_drawable_is_gray (drawable->id))
++ if (gimp_drawable_is_rgb (drawable->drawable_id) ||
++ gimp_drawable_is_gray (drawable->drawable_id))
+ {
+ doit ();
+
+@@ -411,7 +410,7 @@
+ event_is_current =
+ gimp_preview_draw_unscaled_row (GIMP_PREVIEW (my_widgets.preview),
+ event->event_id,
+- gimp_drawable_type (drawable->id),
++ gimp_drawable_type (drawable->drawable_id),
+ row, buf);
+ };
+ g_free (buf);
+@@ -608,7 +607,7 @@
+ gimp_progress_init ("Computing matrix");
+ update_matrix ();
+ gimp_progress_init ("Applying convolution");
+- gimp_drawable_mask_bounds (drawable->id, &sx1, &sy1, &sx2, &sy2);
++ gimp_drawable_mask_bounds (drawable->drawable_id, &sx1, &sy1, &sx2, &sy2);
+ width = sx2 - sx1;
+ height = sy2 - sy1;
+ tile_source_init_from_drawable (&source, drawable, sx1, sy1, width, height);
+@@ -618,7 +617,7 @@
+ matrix, 2 * my_config.mat_width + 1,
+ &update_progress_closure);
+ gimp_drawable_flush (drawable);
+- gimp_drawable_merge_shadow (drawable->id, TRUE);
+- gimp_drawable_update (drawable->id, sx1, sy1, width, height);
++ gimp_drawable_merge_shadow (drawable->drawable_id, TRUE);
++ gimp_drawable_update (drawable->drawable_id, sx1, sy1, width, height);
+ g_free (matrix);
+ }
diff --git a/community/gimp-refocus/refocus-gimp-preview.patch b/community/gimp-refocus/refocus-gimp-preview.patch
new file mode 100644
index 000000000..089365dcb
--- /dev/null
+++ b/community/gimp-refocus/refocus-gimp-preview.patch
@@ -0,0 +1,440 @@
+diff -ur src/gimppreview.c src/gimppreview.c
+--- src/gimppreview.c 2008-03-17 17:20:49.000000000 -0700
++++ src/gimppreview.c 2008-03-17 17:15:51.000000000 -0700
+@@ -36,18 +36,18 @@
+ #include "gimppreview.h"
+
+
+-static void gimp_preview_init (GimpPreview * preview);
+-static void gimp_preview_class_init (GimpPreviewClass * klass);
++static void gimp_preview_init (RefocusPreview * preview);
++static void gimp_preview_class_init (RefocusPreviewClass * klass);
+
+ static void gimp_preview_plus_callback (GtkWidget * widget, gpointer data);
+ static void gimp_preview_minus_callback (GtkWidget * widget, gpointer data);
+ static gint gimp_preview_event (GtkWidget * widget, GdkEvent * event,
+ gpointer data);
+-static void gimp_preview_recompute_sizes (GimpPreview * preview,
++static void gimp_preview_recompute_sizes (RefocusPreview * preview,
+ gdouble newscale);
+-static void gimp_preview_update_preview (GimpPreview * preview);
++static void gimp_preview_update_preview (RefocusPreview * preview);
+
+-static void gimp_preview_image_set_size (GimpPreview * preview, gint width,
++static void gimp_preview_image_set_size (RefocusPreview * preview, gint width,
+ gint height);
+ static void gimp_preview_size_request (GtkWidget * widget,
+ GtkRequisition * requisition);
+@@ -58,7 +58,7 @@
+ GtkCallback callback,
+ gpointer callback_data);
+ gboolean gimp_preview_update_preview_idle_fun (gpointer data);
+-void gimp_preview_schedule_update (GimpPreview * preview);
++void gimp_preview_schedule_update (RefocusPreview * preview);
+
+ #define PROGRESS_BAR_HEIGHT (10)
+ #define PREVIEW_SIZE (100)
+@@ -94,11 +94,11 @@
+
+
+ /*
+- * Apps which use a GimpPreview widget should not be accessing the private
++ * Apps which use a RefocusPreview widget should not be accessing the private
+ * data!
+ */
+ #define PREVIEW_DATA(preview) \
+- ((GimpPreviewData*)(GIMP_PREVIEW (preview)->private_data))
++ ((RefocusPreviewData*)(GIMP_PREVIEW (preview)->private_data))
+
+ typedef struct
+ {
+@@ -126,7 +126,7 @@
+ GtkWidget *image;
+ GtkWidget *progress_bar;
+ }
+-GimpPreviewData;
++RefocusPreviewData;
+
+
+ /* Convert coordinate in preview space to image coordinates */
+@@ -155,20 +155,20 @@
+ if (!preview_type)
+ {
+ GTypeInfo preview_info = {
+- sizeof (GimpPreviewClass),
++ sizeof (RefocusPreviewClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) gimp_preview_class_init,
+ (GClassFinalizeFunc) NULL,
+ (gconstpointer) NULL, /* class_data */
+- sizeof (GimpPreview),
++ sizeof (RefocusPreview),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) gimp_preview_init,
+ (GTypeValueTable *) NULL /* value_table */
+ };
+
+ preview_type =
+- g_type_register_static (GTK_TYPE_CONTAINER, "GimpPreview",
++ g_type_register_static (GTK_TYPE_CONTAINER, "RefocusPreview",
+ &preview_info, 0);
+ }
+
+@@ -181,7 +181,7 @@
+ * by GTK's internal mechanisms.
+ */
+ static void
+-gimp_preview_class_init (GimpPreviewClass * klass)
++gimp_preview_class_init (RefocusPreviewClass * klass)
+ {
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
+@@ -190,7 +190,7 @@
+ g_signal_new ("update_preview",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST,
+- G_STRUCT_OFFSET (GimpPreviewClass, update_preview),
++ G_STRUCT_OFFSET (RefocusPreviewClass, update_preview),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__POINTER,
+@@ -200,7 +200,7 @@
+ g_signal_new ("preview_changed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST,
+- G_STRUCT_OFFSET (GimpPreviewClass, preview_changed),
++ G_STRUCT_OFFSET (RefocusPreviewClass, preview_changed),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+
+ klass->update_preview = NULL;
+@@ -212,7 +212,7 @@
+
+
+ void
+-gimp_preview_set_scale_amount(GimpPreview *preview, gdouble scale_amount)
++gimp_preview_set_scale_amount(RefocusPreview *preview, gdouble scale_amount)
+ {
+ /*
+ * If the caller wants to set the scale amount, let them do so.
+@@ -269,7 +269,7 @@
+ * by GTK's internal mechanisms.
+ */
+ static void
+-gimp_preview_init (GimpPreview * preview)
++gimp_preview_init (RefocusPreview * preview)
+ {
+ gchar buffer[10];
+
+@@ -277,7 +277,7 @@
+ GTK_WIDGET_SET_FLAGS (preview, GTK_NO_WINDOW);
+ GTK_CONTAINER (preview)->resize_mode = GTK_RESIZE_IMMEDIATE;
+
+- preview->private_data = g_malloc0 (sizeof (GimpPreviewData));
++ preview->private_data = g_malloc0 (sizeof (RefocusPreviewData));
+
+
+ PREVIEW_DATA (preview)->label = gtk_label_new ("");
+@@ -307,7 +307,7 @@
+ gimp_preview_new_with_args (GimpDrawable * drawable, gint cb_preview_size,
+ gdouble cb_scale_amount, gint cb_allow_scale)
+ {
+- GimpPreview *preview;
++ RefocusPreview *preview;
+ GtkWidget *frame;
+ GtkWidget *hbox;
+ GtkWidget *event_box;
+@@ -454,7 +454,7 @@
+ static void
+ gimp_preview_size_request (GtkWidget * widget, GtkRequisition * requisition)
+ {
+- GimpPreview *preview = GIMP_PREVIEW (widget);
++ RefocusPreview *preview = GIMP_PREVIEW (widget);
+ GtkRequisition resize_box_requisition;
+
+ #ifdef PREVIEW_DEBUG
+@@ -478,7 +478,7 @@
+ static void
+ gimp_preview_size_allocate (GtkWidget * widget, GtkAllocation * allocation)
+ {
+- GimpPreview *preview = GIMP_PREVIEW (widget);
++ RefocusPreview *preview = GIMP_PREVIEW (widget);
+ GtkAllocation resize_box_allocation, progress_bar_allocation,
+ event_box_allocation;
+ GtkRequisition resize_box_requisition;
+@@ -543,7 +543,7 @@
+ gboolean include_internals,
+ GtkCallback callback, gpointer callback_data)
+ {
+- GimpPreview *preview = GIMP_PREVIEW (container);
++ RefocusPreview *preview = GIMP_PREVIEW (container);
+
+ if (PREVIEW_DATA (preview)->resize_box)
+ {
+@@ -564,7 +564,7 @@
+ * Plug-ins call this to do an update of the preview area.
+ */
+ void
+-gimp_preview_update (GimpPreview * preview)
++gimp_preview_update (RefocusPreview * preview)
+ {
+ gimp_preview_recompute_sizes (preview, preview->scale);
+ gimp_preview_update_preview (preview);
+@@ -579,7 +579,7 @@
+ static void
+ gimp_preview_plus_callback (GtkWidget * widget, gpointer data)
+ {
+- GimpPreview *preview;
++ RefocusPreview *preview;
+ gchar buffer[10];
+ gdouble new_scale;
+
+@@ -616,7 +616,7 @@
+ static void
+ gimp_preview_minus_callback (GtkWidget * widget, gpointer data)
+ {
+- GimpPreview *preview;
++ RefocusPreview *preview;
+ gchar buffer[10];
+ gdouble new_scale;
+
+@@ -651,7 +651,7 @@
+ static gint
+ gimp_preview_event (GtkWidget * widget, GdkEvent * event, gpointer data)
+ {
+- GimpPreview *preview;
++ RefocusPreview *preview;
+ GdkEventButton *button_event;
+ gint x, y;
+ gint dx, dy;
+@@ -733,7 +733,7 @@
+ * This function is also used for initializing the preview.
+ */
+ static void
+-gimp_preview_recompute_sizes (GimpPreview * preview, gdouble new_scale)
++gimp_preview_recompute_sizes (RefocusPreview * preview, gdouble new_scale)
+ {
+
+ /* The center of the preview in image coordinates.
+@@ -765,7 +765,7 @@
+ }
+
+ void
+-gimp_preview_generate_update_event (GimpPreview * preview)
++gimp_preview_generate_update_event (RefocusPreview * preview)
+ /* Signal the user that the preview must be updated */
+ {
+ const gdouble scale = preview->scale;
+@@ -783,7 +783,7 @@
+ 0,
+ preview->drawable->height - image_y);
+
+- GimpPreviewEvent preview_event;
++ RefocusPreviewEvent preview_event;
+
+ preview_event.event_id = PREVIEW_DATA (preview)->current_event_id;
+ preview_event.scale = preview->scale;
+@@ -814,7 +814,7 @@
+ * to step through source and destination!
+ */
+ static void
+-gimp_preview_update_preview (GimpPreview * preview)
++gimp_preview_update_preview (RefocusPreview * preview)
+ {
+ GimpPixelRgn region;
+ guchar *image_data = NULL;
+@@ -1012,7 +1012,7 @@
+
+
+ void
+-gimp_preview_force_redraw (GimpPreview * preview)
++gimp_preview_force_redraw (RefocusPreview * preview)
+ {
+ gtk_widget_queue_draw (GTK_WIDGET (PREVIEW_DATA (preview)->image));
+ }
+@@ -1022,7 +1022,7 @@
+ gboolean
+ gimp_preview_update_preview_idle_fun (gpointer data)
+ {
+- GimpPreview *preview = GIMP_PREVIEW (data);
++ RefocusPreview *preview = GIMP_PREVIEW (data);
+ gint event_id = PREVIEW_DATA (preview)->current_event_id;
+
+ #ifdef PREVIEW_DEBUG
+@@ -1041,7 +1041,7 @@
+ }
+
+ void
+-gimp_preview_schedule_update (GimpPreview * preview)
++gimp_preview_schedule_update (RefocusPreview * preview)
+ {
+ PREVIEW_DATA (preview)->current_event_id++;
+
+@@ -1082,7 +1082,7 @@
+ }
+
+ void
+-gimp_preview_image_set_size (GimpPreview * preview, gint width, gint height)
++gimp_preview_image_set_size (RefocusPreview * preview, gint width, gint height)
+ {
+ const gint real_width = MIN (preview->max_width, width);
+ const gint real_height = MIN (preview->max_height, height);
+@@ -1120,8 +1120,8 @@
+
+ /**
+ * gimp_preview_draw_row:
+- * @preview: the #GimpPreview
+- * @event_id: event_id that was sent with the #GimpPreviewEvent.
++ * @preview: the #RefocusPreview
++ * @event_id: event_id that was sent with the #RefocusPreviewEvent.
+ * @type: the format of the data (e.g. %GIMP_RGBA_IMAGE).
+ * @row:the relative number of the row within the preview.
+ * The top row of the preview is number 0.
+@@ -1137,7 +1137,7 @@
+ * with the same event-id will be ignored by the preview.
+ **/
+ gboolean
+-gimp_preview_draw_row (GimpPreview * preview, const gint event_id,
++gimp_preview_draw_row (RefocusPreview * preview, const gint event_id,
+ GimpImageType type, gint row,
+ const guchar * const data)
+ {
+@@ -1247,8 +1247,8 @@
+
+ /**
+ * gimp_preview_draw_unscaled_row:
+- * @preview: the #GimpPreview
+- * @event_id: event_id that was sent with the #GimpPreviewEvent.
++ * @preview: the #RefocusPreview
++ * @event_id: event_id that was sent with the #RefocusPreviewEvent.
+ * @type: the format of the data (e.g. %GIMP_RGBA_IMAGE).
+ * @row:row is the relative position of the row w.r.t. preview_event->image_y.
+ * The top row has number 0.
+@@ -1267,7 +1267,7 @@
+ * with the same event-id will be ignored by the preview.
+ **/
+ gboolean
+-gimp_preview_draw_unscaled_row (GimpPreview * preview, const gint event_id,
++gimp_preview_draw_unscaled_row (RefocusPreview * preview, const gint event_id,
+ GimpImageType type, const gint row,
+ const guchar * const data)
+ {
+@@ -1445,8 +1445,8 @@
+
+ /**
+ * gimp_preview_progress_set_fraction:
+- * @preview: the #GimpPreview.
+- * @event_id: event_id that was sent with the #GimpPreviewEvent.
++ * @preview: the #RefocusPreview.
++ * @event_id: event_id that was sent with the #RefocusPreviewEvent.
+ * @fraction: the fraction completed.
+ *
+ * Set the progress bar of the preview to @fraction completed.
+@@ -1456,7 +1456,7 @@
+ * with the same event-id will be ignored by the preview.
+ **/
+ gboolean
+-gimp_preview_progress_set_fraction (GimpPreview * preview,
++gimp_preview_progress_set_fraction (RefocusPreview * preview,
+ const gint event_id, double fraction)
+ {
+ const gboolean return_status =
+diff -ur src/gimppreview.h src/gimppreview.h
+--- src/gimppreview.h 2003-01-30 13:30:18.000000000 -0800
++++ src/gimppreview.h 2008-03-17 17:16:29.000000000 -0700
+@@ -33,24 +33,24 @@
+ #define PREVIEW_FIXED_SIZE 0
+ #define PREVIEW_DEFAULT_SIZE -1
+ #define GIMP_TYPE_PREVIEW (gimp_preview_get_type ())
+-#define GIMP_PREVIEW(obj) (GTK_CHECK_CAST ((obj), GIMP_TYPE_PREVIEW, GimpPreview))
+-#define GIMP_PREVIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GIMP_TYPE_PREVIEW, GimpPreviewClass))
++#define GIMP_PREVIEW(obj) (GTK_CHECK_CAST ((obj), GIMP_TYPE_PREVIEW, RefocusPreview))
++#define GIMP_PREVIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GIMP_TYPE_PREVIEW, RefocusPreviewClass))
+ #define GIMP_IS_PREVIEW(obj) (GTK_CHECK_TYPE ((obj), GIMP_TYPE_PREVIEW))
+ #define GIMP_IS_PREVIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_PREVIEW))
+-typedef struct _GimpPreview GimpPreview;
+-typedef struct _GimpPreviewClass GimpPreviewClass;
+-typedef struct _GimpPreviewEvent GimpPreviewEvent;
++typedef struct _RefocusPreview RefocusPreview;
++typedef struct _RefocusPreviewClass RefocusPreviewClass;
++typedef struct _RefocusPreviewEvent RefocusPreviewEvent;
+
+-struct _GimpPreviewClass
++struct _RefocusPreviewClass
+ {
+ GtkContainerClass parent_class;
+
+- void (*update_preview) (GimpPreview * preview, GimpPreviewEvent * event);
+- void (*preview_changed) (GimpPreview * preview);
++ void (*update_preview) (RefocusPreview * preview, RefocusPreviewEvent * event);
++ void (*preview_changed) (RefocusPreview * preview);
+ };
+
+
+-struct _GimpPreview
++struct _RefocusPreview
+ {
+ GtkContainer parent;
+
+@@ -75,13 +75,13 @@
+ };
+
+ /**
+- * GimpPreviewEvent:
++ * RefocusPreviewEvent:
+ * @event_id: Id of this event. This is needed for gimp_preview_draw_row,
+ * gimp_preview_draw_unscaled_row and gimp_preview_progress_set_fraction.
+ * @scale: Current scale of the preview.
+ *
+ **/
+-struct _GimpPreviewEvent
++struct _RefocusPreviewEvent
+ {
+ gint event_id; /* Id of this event */
+ gdouble scale; /* Scale of preview */
+@@ -113,20 +113,20 @@
+ gint preview_size,
+ gdouble scale_amount,
+ gint allow_scale);
+-void gimp_preview_update (GimpPreview * preview);
++void gimp_preview_update (RefocusPreview * preview);
+
+-gboolean gimp_preview_draw_row (GimpPreview * preview, const gint event_id,
++gboolean gimp_preview_draw_row (RefocusPreview * preview, const gint event_id,
+ GimpImageType type, const gint row,
+ const guchar * const data);
+
+-gboolean gimp_preview_draw_unscaled_row (GimpPreview * preview,
++gboolean gimp_preview_draw_unscaled_row (RefocusPreview * preview,
+ const gint event_id,
+ GimpImageType type, const gint row,
+ const guchar * const data);
+
+-void gimp_preview_force_redraw (GimpPreview * preview);
++void gimp_preview_force_redraw (RefocusPreview * preview);
+
+-gboolean gimp_preview_progress_set_fraction (GimpPreview * preview,
++gboolean gimp_preview_progress_set_fraction (RefocusPreview * preview,
+ const gint event_id,
+ double fraction);
+
+diff -ur src/refocus.c src/refocus.c
+--- src/refocus.c 2008-03-17 17:20:49.000000000 -0700
++++ src/refocus.c 2008-03-17 17:18:48.000000000 -0700
+@@ -25,6 +25,7 @@
+ #include <time.h>
+ #include <string.h>
+ #include <libgimp/gimp.h>
++#include <libgimp/gimpcompat.h>
+ #include <gtk/gtk.h>
+ #include <sys/types.h>
+ #include <signal.h>
+@@ -372,7 +373,7 @@
+ }
+
+ static void
+-preview_callback (GtkWidget * widget, GimpPreviewEvent * event, gpointer data)
++preview_callback (GtkWidget * widget, RefocusPreviewEvent * event, gpointer data)
+ {
+ TileSource source;
+ TileSink sink;
diff --git a/community/gimp-refocus/refocus-mirror-fix.patch b/community/gimp-refocus/refocus-mirror-fix.patch
new file mode 100644
index 000000000..af79dd893
--- /dev/null
+++ b/community/gimp-refocus/refocus-mirror-fix.patch
@@ -0,0 +1,54 @@
+Index: src/tilebuf.c
+===================================================================
+RCS file: /cvsroot/refocus/refocus/src/tilebuf.c,v
+retrieving revision 1.1.1.1
+diff -u -u -r1.1.1.1 tilebuf.c
+--- src/tilebuf.c 30 Jan 2003 21:30:19 -0000 1.1.1.1
++++ src/tilebuf.c 6 Apr 2004 20:26:56 -0000
+@@ -140,7 +140,10 @@
+
+ for (x = x_lo - 1; x >= buf->real_x; x--)
+ {
+- copy_col (buf, 2 * x_lo - x, y_start, y_end - y_start, x);
++ gint sx = 2 * x_lo - x;
++ copy_col (buf,
++ sx<=buf->real_x+buf->real_width-1?sx:buf->real_x+buf->real_width-1,
++ y_start, y_end - y_start, x);
+ };
+ }
+ break;
+@@ -171,7 +174,9 @@
+
+ for (x = x_hi; x < buf->real_x + buf->real_width; x++)
+ {
+- copy_col (buf, 2 * (x_hi - 1) - x, y_start, y_end - y_start, x);
++ gint sx = 2 * (x_hi - 1) - x;
++ copy_col (buf, sx>=buf->real_x?sx:buf->real_x,
++ y_start, y_end - y_start, x);
+ };
+ }
+ break;
+@@ -200,7 +205,10 @@
+
+ for (y = y_lo - 1; y >= buf->real_y; y--)
+ {
+- copy_row (buf, buf->real_x, 2 * y_lo - y, buf->real_width, y);
++ gint sy = 2 * y_lo - y;
++ copy_row (buf, buf->real_x,
++ sy<=buf->real_y+buf->real_height-1?sy:buf->real_y+buf->real_height-1,
++ buf->real_width, y);
+ };
+ }
+ break;
+@@ -230,8 +238,9 @@
+
+ for (y = y_hi; y < buf->real_y + buf->real_height; y++)
+ {
+- copy_row (buf, buf->real_x, 2 * (y_hi - 1) - y, buf->real_width,
+- y);
++ gint sy = 2 * (y_hi - 1) - y;
++ copy_row (buf, buf->real_x, sy>=buf->real_y?sy:buf->real_y,
++ buf->real_width, y);
+ };
+ }
+ break;