Author: abrander
Date: 2010-04-03 03:05:56 +0200 (Sat, 03 Apr 2010)
New Revision: 3325
Modified:
trunk/librawstudio/rs-filter.c
trunk/librawstudio/rs-filter.h
trunk/plugins/crop/crop.c
trunk/plugins/input-file/input-file.c
trunk/plugins/input-image16/input-image16.c
trunk/plugins/load-dcraw/dcrawloader.c
trunk/plugins/load-gdk/load-gdk.c
trunk/plugins/load-rawspeed/rawstudio-plugin-api.cpp
trunk/plugins/output-tifffile/output-tifffile.c
trunk/plugins/resample/resample.c
trunk/plugins/rotate/rotate.c
trunk/src/application.c
trunk/src/rs-batch.c
trunk/src/rs-loupe.c
trunk/src/rs-navigator.c
trunk/src/rs-preview-widget.c
trunk/src/rs-save-dialog.c
Log:
Replaced rs_filter_get_width() and rs_filter_get_height() by
rs_filter_get_size().
Modified: trunk/librawstudio/rs-filter.c
===================================================================
--- trunk/librawstudio/rs-filter.c 2010-04-03 01:03:39 UTC (rev 3324)
+++ trunk/librawstudio/rs-filter.c 2010-04-03 01:05:56 UTC (rev 3325)
@@ -69,8 +69,7 @@
klass->get_image = NULL;
klass->get_image8 = NULL;
- klass->get_width = NULL;
- klass->get_height = NULL;
+ klass->get_size = NULL;
klass->previous_changed = NULL;
object_class->dispose = dispose;
@@ -175,10 +174,11 @@
/* Returns a new rectangle, or NULL if ROI was within bounds*/
static GdkRectangle*
-clamp_roi(const GdkRectangle *roi, RSFilter *filter)
+clamp_roi(const GdkRectangle *roi, RSFilter *filter, const RSFilterRequest
*request)
{
- int w = rs_filter_get_width(filter);
- int h = rs_filter_get_height(filter);
+ RSFilterResponse *response = rs_filter_get_size(filter, request);
+ gint w = rs_filter_response_get_width(response);
+ gint h = rs_filter_response_get_height(response);
if ((roi->x >= 0) && (roi->y >=0) && (roi->x + roi->width <= w) &&
(roi->y + roi->height <= h))
return NULL;
@@ -221,7 +221,7 @@
if (filter->enabled && (roi = rs_filter_request_get_roi(request)))
{
- roi = clamp_roi(roi, filter);
+ roi = clamp_roi(roi, filter, request);
if (roi)
{
r = rs_filter_request_clone(request);
@@ -314,7 +314,7 @@
if (filter->enabled && (roi = rs_filter_request_get_roi(request)))
{
- roi = clamp_roi(roi, filter);
+ roi = clamp_roi(roi, filter, request);
if (roi)
{
r = rs_filter_request_clone(request);
@@ -372,41 +372,49 @@
}
/**
- * Get the returned width of a RSFilter
+ * Get predicted size of a RSFilter
* @param filter A RSFilter
- * @return Width in pixels
+ * @param request A RSFilterRequest defining parameters for the request
*/
-gint
-rs_filter_get_width(RSFilter *filter)
+RSFilterResponse *
+rs_filter_get_size(RSFilter *filter, const RSFilterRequest *request)
{
- gint width;
+ RSFilterResponse *response = NULL;
+
g_assert(RS_IS_FILTER(filter));
- if (RS_FILTER_GET_CLASS(filter)->get_width && filter->enabled)
- width = RS_FILTER_GET_CLASS(filter)->get_width(filter);
- else
- width = rs_filter_get_width(filter->previous);
+ if (RS_FILTER_GET_CLASS(filter)->get_size && filter->enabled)
+ response = RS_FILTER_GET_CLASS(filter)->get_size(filter,
request);
+ else if (filter->previous)
+ response = rs_filter_get_size(filter->previous, request);
- return width;
+ return response;
}
/**
- * Get the returned height of a RSFilter
+ * Get predicted size of a RSFilter
* @param filter A RSFilter
- * @return Height in pixels
+ * @param request A RSFilterRequest defining parameters for the request
+ * @param width A pointer to a gint where the width will be written or NULL
+ * @param height A pointer to a gint where the height will be written or NULL
+ * @return TRUE if width/height is known, FALSE otherwise
*/
-gint
-rs_filter_get_height(RSFilter *filter)
+gboolean
+rs_filter_get_size_simple(RSFilter *filter, const RSFilterRequest *request,
gint *width, gint *height)
{
- gint height;
- g_assert(RS_IS_FILTER(filter));
+ gint w, h;
+ RSFilterResponse *response = rs_filter_get_size(filter, request);
- if (RS_FILTER_GET_CLASS(filter)->get_height && filter->enabled)
- height = RS_FILTER_GET_CLASS(filter)->get_height(filter);
- else
- height = rs_filter_get_height(filter->previous);
+ w = rs_filter_response_get_width(response);
+ h = rs_filter_response_get_height(response);
+ if (width)
+ *width = w;
+ if (height)
+ *height = h;
- return height;
+ g_object_unref(response);
+
+ return ((w>0) && (h>0));
}
/**
@@ -705,11 +713,13 @@
for(i=0; i<n_next; i++)
{
RSFilter *next =
RS_FILTER(g_slist_nth_data(filter->next_filters, i));
+ RSFilterResponse *response = rs_filter_get_size(filter,
RS_FILTER_REQUEST_QUICK);
/* Edge - print dimensions along */
g_string_append_printf(str, "\t\"%p\" -> \"%p\" [label=\"
%dx%d\"];\n",
filter, next,
- rs_filter_get_width(filter),
rs_filter_get_height(filter));
+ rs_filter_response_get_width(response),
rs_filter_response_get_height(response));
+ g_object_unref(response);
/* Recursively call ourself for every "next" filter */
rs_filter_graph_helper(str, next);
Modified: trunk/librawstudio/rs-filter.h
===================================================================
--- trunk/librawstudio/rs-filter.h 2010-04-03 01:03:39 UTC (rev 3324)
+++ trunk/librawstudio/rs-filter.h 2010-04-03 01:05:56 UTC (rev 3325)
@@ -97,8 +97,7 @@
const gchar *name;
RSFilterFunc get_image;
RSFilterFunc get_image8;
- gint (*get_width)(RSFilter *filter);
- gint (*get_height)(RSFilter *filter);
+ RSFilterResponse *(*get_size)(RSFilter *filter, const RSFilterRequest
*request);
void (*previous_changed)(RSFilter *filter, RSFilter *parent,
RSFilterChangedMask mask);
};
@@ -144,18 +143,21 @@
extern RSFilterResponse *rs_filter_get_image8(RSFilter *filter, const
RSFilterRequest *request);
/**
- * Get the returned width of a RSFilter
+ * Get predicted size of a RSFilter
* @param filter A RSFilter
- * @return Width in pixels
+ * @param request A RSFilterRequest defining parameters for the request
*/
-extern gint rs_filter_get_width(RSFilter *filter);
+extern RSFilterResponse *rs_filter_get_size(RSFilter *filter, const
RSFilterRequest *request);
/**
- * Get the returned height of a RSFilter
+ * Get predicted size of a RSFilter
* @param filter A RSFilter
- * @return Height in pixels
+ * @param request A RSFilterRequest defining parameters for the request
+ * @param width A pointer to a gint where the width will be written or NULL
+ * @param height A pointer to a gint where the height will be written or NULL
+ * @return TRUE if width/height is known, FALSE otherwise
*/
-extern gint rs_filter_get_height(RSFilter *filter);
+extern gboolean rs_filter_get_size_simple(RSFilter *filter, const
RSFilterRequest *request, gint *width, gint *height);
/**
* Set a GObject property on zero or more filters above #filter recursively
Modified: trunk/plugins/crop/crop.c
===================================================================
--- trunk/plugins/crop/crop.c 2010-04-03 01:03:39 UTC (rev 3324)
+++ trunk/plugins/crop/crop.c 2010-04-03 01:05:56 UTC (rev 3325)
@@ -65,8 +65,7 @@
static void set_property (GObject *object, guint property_id, const GValue
*value, GParamSpec *pspec);
static void calc(RSCrop *crop);
static RSFilterResponse *get_image(RSFilter *filter, const RSFilterRequest
*request);
-static gint get_width(RSFilter *filter);
-static gint get_height(RSFilter *filter);
+static RSFilterResponse *get_size(RSFilter *filter, const RSFilterRequest
*request);
static RSFilterClass *rs_crop_parent_class = NULL;
@@ -130,8 +129,7 @@
filter_class->name = "Crop filter";
filter_class->get_image = get_image;
- filter_class->get_width = get_width;
- filter_class->get_height = get_height;
+ filter_class->get_size = get_size;
}
static void
@@ -243,8 +241,10 @@
crop->scale = 1.0f;
rs_filter_get_recursive(RS_FILTER(crop), "scale", &crop->scale, NULL);
- gint parent_width = rs_filter_get_width(filter->previous);
- gint parent_height = rs_filter_get_height(filter->previous);
+ RSFilterResponse *response = rs_filter_get_size(filter->previous,
RS_FILTER_REQUEST_QUICK);
+ gint parent_width = rs_filter_response_get_width(response);
+ gint parent_height = rs_filter_response_get_height(response);
+ g_object_unref(response);
crop->effective.x1 = CLAMP((float)crop->target.x1 * crop->scale + 0.5f,
0, parent_width-1);
crop->effective.x2 = CLAMP((float)crop->target.x2 * crop->scale + 0.5f,
0, parent_width-1);
@@ -264,10 +264,14 @@
RSFilterResponse *response;
RS_IMAGE16 *output;
RS_IMAGE16 *input;
- gint parent_width = rs_filter_get_width(filter->previous);
- gint parent_height = rs_filter_get_height(filter->previous);
gint row;
+ /* We request response twice, is that wise? */
+ response = rs_filter_get_size(filter->previous, request);
+ gint parent_width = rs_filter_response_get_width(response);
+ gint parent_height = rs_filter_response_get_height(response);
+ g_object_unref(response);
+
calc(crop);
/* Special case for full crop */
@@ -325,21 +329,19 @@
return response;
}
-static gint
-get_width(RSFilter *filter)
+static RSFilterResponse *
+get_size(RSFilter *filter, const RSFilterRequest *request)
{
RSCrop *crop = RS_CROP(filter);
calc(crop);
- return crop->width;
-}
+ RSFilterResponse *previous_response =
rs_filter_get_size(filter->previous, request);
+ RSFilterResponse *response =
rs_filter_response_clone(previous_response);
+ g_object_unref(previous_response);
-static gint
-get_height(RSFilter *filter)
-{
- RSCrop *crop = RS_CROP(filter);
- calc(crop);
+ rs_filter_response_set_width(response, crop->width);
+ rs_filter_response_set_height(response, crop->height);
- return crop->height;
+ return response;
}
Modified: trunk/plugins/input-file/input-file.c
===================================================================
--- trunk/plugins/input-file/input-file.c 2010-04-03 01:03:39 UTC (rev
3324)
+++ trunk/plugins/input-file/input-file.c 2010-04-03 01:05:56 UTC (rev
3325)
@@ -50,8 +50,7 @@
static void get_property (GObject *object, guint property_id, GValue *value,
GParamSpec *pspec);
static void set_property (GObject *object, guint property_id, const GValue
*value, GParamSpec *pspec);
static RSFilterResponse *get_image(RSFilter *filter, const RSFilterRequest
*request);
-static gint get_width(RSFilter *filter);
-static gint get_height(RSFilter *filter);
+static RSFilterResponse *get_size(RSFilter *filter, const RSFilterRequest
*request);
static RSFilterClass *rs_input_file_parent_class = NULL;
@@ -87,8 +86,7 @@
filter_class->name = "File loader based on rs_filetypes";
filter_class->get_image = get_image;
- filter_class->get_width = get_width;
- filter_class->get_height = get_height;
+ filter_class->get_size = get_size;
}
static void
@@ -159,24 +157,17 @@
return response;
}
-static gint
-get_width(RSFilter *filter)
+static RSFilterResponse *
+get_size(RSFilter *filter, const RSFilterRequest *request)
{
+ RSFilterResponse *response = rs_filter_response_new();
RSInputFile *input = RS_INPUT_FILE(filter);
if (input->image)
- return input->image->w;
- else
- return -1;
-}
+ {
+ rs_filter_response_set_width(response, input->image->w);
+ rs_filter_response_set_height(response, input->image->h);
+ }
-static gint
-get_height(RSFilter *filter)
-{
- RSInputFile *input = RS_INPUT_FILE(filter);
-
- if (input->image)
- return input->image->h;
- else
- return -1;
+ return response;
}
Modified: trunk/plugins/input-image16/input-image16.c
===================================================================
--- trunk/plugins/input-image16/input-image16.c 2010-04-03 01:03:39 UTC (rev
3324)
+++ trunk/plugins/input-image16/input-image16.c 2010-04-03 01:05:56 UTC (rev
3325)
@@ -54,9 +54,8 @@
static void get_property (GObject *object, guint property_id, GValue *value,
GParamSpec *pspec);
static void set_property (GObject *object, guint property_id, const GValue
*value, GParamSpec *pspec);
static RSFilterResponse *get_image(RSFilter *filter, const RSFilterRequest
*request);
+static RSFilterResponse *get_size(RSFilter *filter, const RSFilterRequest
*request);
static void dispose (GObject *object);
-static gint get_width(RSFilter *filter);
-static gint get_height(RSFilter *filter);
static RSFilterClass *rs_input_image16_parent_class = NULL;
@@ -98,8 +97,7 @@
filter_class->name = "Import a RS_IMAGE16 into a RSFilter chain";
filter_class->get_image = get_image;
- filter_class->get_width = get_width;
- filter_class->get_height = get_height;
+ filter_class->get_size = get_size;
}
static void
@@ -195,25 +193,18 @@
return rs_filter_response_new();
}
-static gint
-get_width(RSFilter *filter)
+static RSFilterResponse *
+get_size(RSFilter *filter, const RSFilterRequest *request)
{
RSInputImage16 *input_image16 = RS_INPUT_IMAGE16(filter);
- if (!RS_IS_IMAGE16(input_image16->image))
- return -1;
+ RSFilterResponse *response =
rs_filter_response_clone(RS_FILTER_RESPONSE(input_image16->image_response));
- return input_image16->image->w;
-}
+ if (input_image16->image)
+ {
+ rs_filter_response_set_width(response, input_image16->image->w);
+ rs_filter_response_set_height(response,
input_image16->image->h);
+ }
-static gint
-get_height(RSFilter *filter)
-{
- RSInputImage16 *input_image16 = RS_INPUT_IMAGE16(filter);
-
- if (!RS_IS_IMAGE16(input_image16->image))
- return -1;
-
- return input_image16->image->h;
+ return response;
}
-
Modified: trunk/plugins/load-dcraw/dcrawloader.c
===================================================================
--- trunk/plugins/load-dcraw/dcrawloader.c 2010-04-03 01:03:39 UTC (rev
3324)
+++ trunk/plugins/load-dcraw/dcrawloader.c 2010-04-03 01:05:56 UTC (rev
3325)
@@ -177,6 +177,8 @@
dcraw_data *raw = g_new0(dcraw_data, 1);
RS_IMAGE16 *image = NULL;
+ RSFilterResponse* response = rs_filter_response_new();
+
rs_io_lock();
if (!dcraw_open(raw, (char *) filename))
{
@@ -189,8 +191,9 @@
rs_io_unlock();
g_free(raw);
- RSFilterResponse* response = rs_filter_response_new();
rs_filter_response_set_image(response, image);
+ rs_filter_response_set_width(response, image->w);
+ rs_filter_response_set_height(response, image->h);
g_object_unref(image);
return response;
}
Modified: trunk/plugins/load-gdk/load-gdk.c
===================================================================
--- trunk/plugins/load-gdk/load-gdk.c 2010-04-03 01:03:39 UTC (rev 3324)
+++ trunk/plugins/load-gdk/load-gdk.c 2010-04-03 01:05:56 UTC (rev 3325)
@@ -64,6 +64,8 @@
RSFilterResponse* response = rs_filter_response_new();
rs_filter_response_set_image(response, image);
+ rs_filter_response_set_width(response, image->w);
+ rs_filter_response_set_height(response, image->h);
g_object_unref(image);
return response;
}
Modified: trunk/plugins/load-rawspeed/rawstudio-plugin-api.cpp
===================================================================
--- trunk/plugins/load-rawspeed/rawstudio-plugin-api.cpp 2010-04-03
01:03:39 UTC (rev 3324)
+++ trunk/plugins/load-rawspeed/rawstudio-plugin-api.cpp 2010-04-03
01:05:56 UTC (rev 3325)
@@ -149,6 +149,8 @@
RSFilterResponse* response = rs_filter_response_new();
rs_filter_response_set_image(response, image);
+ rs_filter_response_set_width(response, image->w);
+ rs_filter_response_set_height(response, image->h);
g_object_unref(image);
return response;
}
Modified: trunk/plugins/output-tifffile/output-tifffile.c
===================================================================
--- trunk/plugins/output-tifffile/output-tifffile.c 2010-04-03 01:03:39 UTC
(rev 3324)
+++ trunk/plugins/output-tifffile/output-tifffile.c 2010-04-03 01:05:56 UTC
(rev 3325)
@@ -209,19 +209,17 @@
if (tifffile->color_space &&
!g_str_equal(G_OBJECT_TYPE_NAME(tifffile->color_space), "RSSrgb"))
profile = rs_color_space_get_icc_profile(tifffile->color_space);
- rs_tiff_generic_init(tiff, rs_filter_get_width(filter),
rs_filter_get_height(filter), 3, profile, tifffile->uncompressed);
-
RSFilterRequest *request = rs_filter_request_new();
rs_filter_request_set_quick(request, FALSE);
rs_filter_param_set_object(RS_FILTER_PARAM(request), "colorspace",
tifffile->color_space);
if (tifffile->save16bit)
{
- gint width = rs_filter_get_width(filter);
gint col;
response = rs_filter_get_image(filter, request);
RS_IMAGE16 *image = rs_filter_response_get_image(response);
- gushort *line = g_new(gushort, width*3);
+ rs_tiff_generic_init(tiff, image->w, image->h, 3, profile,
tifffile->uncompressed);
+ gushort *line = g_new(gushort, image->w*3);
g_assert(image->channels == 3);
g_assert(image->pixelsize == 4);
@@ -231,7 +229,7 @@
for(row=0;row<image->h;row++)
{
gushort *buf = GET_PIXEL(image, 0, row);
- for(col=0;col<width; col++)
+ for(col=0;col<image->w; col++)
{
line[col*3 + R] = buf[col*4 + R];
line[col*3 + G] = buf[col*4 + G];
Modified: trunk/plugins/resample/resample.c
===================================================================
--- trunk/plugins/resample/resample.c 2010-04-03 01:03:39 UTC (rev 3324)
+++ trunk/plugins/resample/resample.c 2010-04-03 01:05:56 UTC (rev 3325)
@@ -75,8 +75,7 @@
static void previous_changed(RSFilter *filter, RSFilter *parent,
RSFilterChangedMask mask);
static RSFilterChangedMask recalculate_dimensions(RSResample *resample);
static RSFilterResponse *get_image(RSFilter *filter, const RSFilterRequest
*request);
-static gint get_width(RSFilter *filter);
-static gint get_height(RSFilter *filter);
+static RSFilterResponse *get_size(RSFilter *filter, const RSFilterRequest
*request);
static void ResizeH(ResampleInfo *info);
void ResizeV(ResampleInfo *info);
extern void ResizeV_SSE2(ResampleInfo *info);
@@ -128,8 +127,7 @@
filter_class->name = "Resample filter";
filter_class->get_image = get_image;
- filter_class->get_width = get_width;
- filter_class->get_height = get_height;
+ filter_class->get_size = get_size;
filter_class->previous_changed = previous_changed;
}
@@ -219,11 +217,16 @@
{
RSFilterChangedMask mask = 0;
gint new_width, new_height;
+ gint previous_width = 0;
+ gint previous_height = 0;
+ if (RS_FILTER(resample)->previous)
+ rs_filter_get_size_simple(RS_FILTER(resample)->previous,
RS_FILTER_REQUEST_QUICK, &previous_width, &previous_height);
+
if (resample->bounding_box && RS_FILTER(resample)->previous)
{
- const gint previous_width = new_width =
rs_filter_get_width(RS_FILTER(resample)->previous);
- const gint previous_height = new_height =
rs_filter_get_height(RS_FILTER(resample)->previous);
+ new_width = previous_width;
+ new_height = previous_height;
rs_constrain_to_bounding_box(resample->target_width,
resample->target_height, &new_width, &new_height);
resample->scale = ((((gfloat) new_width)/ previous_width) +
(((gfloat) new_height)/ previous_height))/2.0;
}
@@ -233,8 +236,6 @@
new_height = resample->target_height;
if (RS_FILTER(resample)->previous)
{
- const gint previous_width =
rs_filter_get_width(RS_FILTER(resample)->previous);
- const gint previous_height =
rs_filter_get_height(RS_FILTER(resample)->previous);
if (previous_width > 0 && previous_height > 0)
resample->scale = MIN((gfloat)new_width /
previous_width, (gfloat)new_height / previous_height);
else
@@ -307,9 +308,10 @@
RS_IMAGE16 *afterVertical;
RS_IMAGE16 *input;
RS_IMAGE16 *output = NULL;
- gint input_width = rs_filter_get_width(filter->previous);
- gint input_height = rs_filter_get_height(filter->previous);
+ gint input_width;
+ gint input_height;
+ rs_filter_get_size_simple(filter->previous, request, &input_width,
&input_height);
/* Return the input, if the new size is uninitialized */
if ((resample->new_width == -1) || (resample->new_height == -1))
@@ -430,26 +432,22 @@
return response;
}
-static gint
-get_width(RSFilter *filter)
+static RSFilterResponse *
+get_size(RSFilter *filter, const RSFilterRequest *request)
{
RSResample *resample = RS_RESAMPLE(filter);
+ RSFilterResponse *previous_response =
rs_filter_get_size(filter->previous, request);
- if (resample->new_width == -1)
- return rs_filter_get_width(filter->previous);
- else
- return resample->new_width;
-}
+ if ((resample->new_width == -1) || (resample->new_height == -1))
+ return previous_response;
-static gint
-get_height(RSFilter *filter)
-{
- RSResample *resample = RS_RESAMPLE(filter);
+ RSFilterResponse *response =
rs_filter_response_clone(previous_response);
+ g_object_unref(previous_response);
- if (resample->new_height == -1)
- return rs_filter_get_height(filter->previous);
- else
- return resample->new_height;
+ rs_filter_response_set_width(response, resample->new_width);
+ rs_filter_response_set_height(response, resample->new_height);
+
+ return response;
}
static guint
Modified: trunk/plugins/rotate/rotate.c
===================================================================
--- trunk/plugins/rotate/rotate.c 2010-04-03 01:03:39 UTC (rev 3324)
+++ trunk/plugins/rotate/rotate.c 2010-04-03 01:05:56 UTC (rev 3325)
@@ -72,11 +72,10 @@
static void previous_changed(RSFilter *filter, RSFilter *parent,
RSFilterChangedMask mask);
static RSFilterResponse *get_image(RSFilter *filter, const RSFilterRequest
*request);
static void turn_right_angle(RS_IMAGE16 *in, RS_IMAGE16 *out, gint start_y,
gint end_y, const int direction);
-static gint get_width(RSFilter *filter);
-static gint get_height(RSFilter *filter);
+static RSFilterResponse *get_size(RSFilter *filter, const RSFilterRequest
*request);
static void inline bilinear(RS_IMAGE16 *in, gushort *out, gint x, gint y);
static void inline nearest(RS_IMAGE16 *in, gushort *out, gint x, gint y);
-static void recalculate(RSRotate *rotate);
+static void recalculate(RSRotate *rotate, const RSFilterRequest *request);
gpointer start_rotate_thread(gpointer _thread_info);
static RSFilterClass *rs_rotate_parent_class = NULL;
@@ -112,8 +111,7 @@
filter_class->name = "Bilinear rotate filter";
filter_class->previous_changed = previous_changed;
filter_class->get_image = get_image;
- filter_class->get_width = get_width;
- filter_class->get_height = get_height;
+ filter_class->get_size = get_size;
}
static void
@@ -208,7 +206,7 @@
/* Calculate rotated ROI */
old_roi = rs_filter_request_get_roi(request);
RSFilterRequest *new_request = rs_filter_request_clone(request);
- recalculate(rotate);
+ recalculate(rotate, request);
gdouble minx, miny;
gdouble maxx, maxy;
@@ -216,8 +214,9 @@
matrix3_affine_translate(&rotate->affine, -minx, -miny);
/* Create new ROI */
- gint prev_w = rs_filter_get_width(filter->previous);
- gint prev_h = rs_filter_get_height(filter->previous);
+ gint prev_w;
+ gint prev_h;
+ rs_filter_get_size_simple(filter->previous, request, &prev_w,
&prev_h);
roi = g_new(GdkRectangle, 1);
roi->x = MAX(0, (gint)minx);
roi->y = MAX(0, (gint)miny);
@@ -257,7 +256,7 @@
straight = TRUE;
} else {
output = rs_image16_new(rotate->new_width, rotate->new_height,
3, 4);
- recalculate(rotate);
+ recalculate(rotate, request);
}
if (rs_filter_request_get_quick(request))
@@ -347,26 +346,22 @@
}
-static gint
-get_width(RSFilter *filter)
+static RSFilterResponse *
+get_size(RSFilter *filter, const RSFilterRequest *request)
{
RSRotate *rotate = RS_ROTATE(filter);
+ RSFilterResponse *previous_response =
rs_filter_get_size(filter->previous, request);
if (rotate->dirty)
- recalculate(rotate);
+ recalculate(rotate, request);
- return rotate->new_width;
-}
+ RSFilterResponse *response =
rs_filter_response_clone(previous_response);
+ g_object_unref(previous_response);
-static gint
-get_height(RSFilter *filter)
-{
- RSRotate *rotate = RS_ROTATE(filter);
+ rs_filter_response_set_width(response, rotate->new_width);
+ rs_filter_response_set_height(response, rotate->new_height);
- if (rotate->dirty)
- recalculate(rotate);
-
- return rotate->new_height;
+ return response;
}
static void inline
@@ -453,11 +448,13 @@
}
static void
-recalculate(RSRotate *rotate)
+recalculate(RSRotate *rotate, const RSFilterRequest *request)
{
RSFilter *previous = RS_FILTER(rotate)->previous;
- gint previous_width = rs_filter_get_width(previous);
- gint previous_height = rs_filter_get_height(previous);
+ RSFilterResponse *response = rs_filter_get_size(previous, request);
+ gint previous_width = rs_filter_response_get_width(response);
+ gint previous_height = rs_filter_response_get_height(response);
+ g_object_unref(response);
/* Bail out, if parent returns negative dimensions */
if ((previous_width < 0) || (previous_height < 0))
Modified: trunk/src/application.c
===================================================================
--- trunk/src/application.c 2010-04-03 01:03:39 UTC (rev 3324)
+++ trunk/src/application.c 2010-04-03 01:05:56 UTC (rev 3325)
@@ -185,7 +185,9 @@
"rectangle", photo->crop,
"settings", photo->settings[snapshot],
NULL);
- actual_scale = ((gdouble) width / (gdouble)
rs_filter_get_width(finput));
+ gint input_width;
+ rs_filter_get_size_simple(finput, RS_FILTER_REQUEST_QUICK,
&input_width, NULL);
+ actual_scale = ((gdouble) width / (gdouble) input_width);
if (0 < width && 0 < height) /* We only wan't to set width and height
if they are not -1 */
rs_filter_set_recursive(fend, "width", width, "height", height,
NULL);
Modified: trunk/src/rs-batch.c
===================================================================
--- trunk/src/rs-batch.c 2010-04-03 01:03:39 UTC (rev 3324)
+++ trunk/src/rs-batch.c 2010-04-03 01:05:56 UTC (rev 3325)
@@ -608,8 +608,9 @@
{
case LOCK_SCALE:
scale = queue->scale/100.0;
- width = (gint) (((gdouble)
rs_filter_get_width(fcrop)) * scale);
- height = (gint) (((gdouble)
rs_filter_get_height(fcrop)) * scale);
+ rs_filter_get_size_simple(fcrop,
RS_FILTER_REQUEST_QUICK, &width, &height);
+ width = (gint) (((gdouble) width) *
scale);
+ height = (gint) (((gdouble) height) *
scale);
break;
case LOCK_WIDTH:
width = queue->width;
Modified: trunk/src/rs-loupe.c
===================================================================
--- trunk/src/rs-loupe.c 2010-04-03 01:03:39 UTC (rev 3324)
+++ trunk/src/rs-loupe.c 2010-04-03 01:05:56 UTC (rev 3325)
@@ -211,8 +211,9 @@
GdkDrawable *drawable = GDK_DRAWABLE(loupe->canvas->window);
GdkGC *gc = gdk_gc_new(drawable);
- const gint width = rs_filter_get_width(loupe->filter);
- const gint height = rs_filter_get_height(loupe->filter);
+ gint width;
+ gint height;
+ rs_filter_get_size_simple(loupe->filter, RS_FILTER_REQUEST_QUICK,
&width, &height);
/* Get window size */
gint window_width, window_height;
Modified: trunk/src/rs-navigator.c
===================================================================
--- trunk/src/rs-navigator.c 2010-04-03 01:03:39 UTC (rev 3324)
+++ trunk/src/rs-navigator.c 2010-04-03 01:05:56 UTC (rev 3325)
@@ -128,8 +128,7 @@
static void
get_placement(RSNavigator *navigator, GdkRectangle *placement)
{
- placement->width = rs_filter_get_width(navigator->cache);
- placement->height = rs_filter_get_height(navigator->cache);
+ rs_filter_get_size_simple(navigator->cache, RS_FILTER_REQUEST_QUICK,
&placement->width, &placement->height);
placement->x = navigator->widget_width/2 - placement->width/2;
placement->y = navigator->widget_height/2 - placement->height/2;
}
@@ -343,8 +342,7 @@
GdkPixbuf *pixbuf = rs_filter_response_get_image8(response);
GdkRectangle placement, rect;
- placement.width = rs_filter_get_width(navigator->cache);
- placement.height = rs_filter_get_height(navigator->cache);
+ rs_filter_get_size_simple(navigator->cache,
RS_FILTER_REQUEST_QUICK, &placement.width, &placement.height);
placement.x = navigator->widget_width/2 - placement.width/2;
placement.y = navigator->widget_height/2 - placement.height/2;
Modified: trunk/src/rs-preview-widget.c
===================================================================
--- trunk/src/rs-preview-widget.c 2010-04-03 01:03:39 UTC (rev 3324)
+++ trunk/src/rs-preview-widget.c 2010-04-03 01:05:56 UTC (rev 3325)
@@ -450,6 +450,8 @@
void
rs_preview_widget_set_zoom_to_fit(RSPreviewWidget *preview, gboolean
zoom_to_fit)
{
+ gint width;
+ gint height;
gint view;
g_assert(RS_IS_PREVIEW_WIDGET(preview));
@@ -501,11 +503,12 @@
if (preview->photo)
{
+ rs_filter_get_size_simple(preview->filter_end[0],
preview->request[0], &width, &height);
/* Update scrollbars to reflect the change */
gdouble val;
- val = (gdouble)
rs_filter_get_width(preview->filter_end[0]);
+ val = (gdouble) width;
g_object_set(G_OBJECT(preview->hadjustment), "upper",
val, NULL);
- val = (gdouble)
rs_filter_get_height(preview->filter_end[0]);
+ val = (gdouble) height;
g_object_set(G_OBJECT(preview->vadjustment), "upper",
val, NULL);
if (inside_image)
@@ -526,9 +529,10 @@
gtk_widget_show(preview->vscrollbar);
gtk_widget_show(preview->hscrollbar);
+ rs_filter_get_size_simple(preview->filter_end[0],
preview->request[0], &width, &height);
rs_filter_set_recursive(preview->filter_end[0],
- "width", rs_filter_get_width(preview->filter_input),
- "height", rs_filter_get_height(preview->filter_input),
+ "width", width,
+ "height", height,
NULL);
gdk_window_set_cursor(GTK_WIDGET(rawstudio_window)->window,
NULL);
@@ -946,7 +950,7 @@
g_assert(RS_IS_PREVIEW_WIDGET(preview));
- if (rs_filter_get_width(preview->filter_input) < 0)
+ if (!rs_filter_get_size_simple(preview->filter_input,
preview->request[0], NULL, NULL))
return;
if (!GTK_WIDGET_DRAWABLE(GTK_WIDGET(preview)))
@@ -1258,8 +1262,10 @@
{
gint xoffset = 0, yoffset = 0;
gint width, height;
+ gint filter_width, filter_height;
- if (rs_filter_get_width(preview->filter_end[view])<1)
+ rs_filter_get_size_simple(preview->filter_end[view],
preview->request[view], &filter_width, &filter_height);
+ if (filter_width<1)
return FALSE;
if (!VIEW_IS_VALID(view))
return FALSE;
@@ -1279,10 +1285,10 @@
height = (height -
preview->views*SPLITTER_WIDTH)/preview->views;
}
- placement->x = xoffset + (width -
rs_filter_get_width(preview->filter_end[view]))/2;
- placement->y = yoffset + (height -
rs_filter_get_height(preview->filter_end[view]))/2;
- placement->width = rs_filter_get_width(preview->filter_end[view]);
- placement->height = rs_filter_get_height(preview->filter_end[view]);
+ placement->x = xoffset + (width - filter_width)/2;
+ placement->y = yoffset + (height - filter_height)/2;
+ placement->width = filter_width;
+ placement->height = filter_height;
return TRUE;
}
@@ -1309,12 +1315,13 @@
gint _scaled_x, _scaled_y;
gint _real_x, _real_y;
gint _max_w, _max_h;
+ gint filter_width, filter_height;
/* FIXME: This is so outdated */
if (!preview->photo)
return ret;
- if (!rs_filter_get_width(preview->filter_end[view])<0)
+ if (!rs_filter_get_size_simple(preview->filter_end[view],
preview->request[view], &filter_width, &filter_height))
return ret;
rs_image16_transform_getwh(preview->photo->input, preview->photo->crop,
preview->photo->angle, preview->photo->orientation, &_max_w, &_max_h);
@@ -1338,13 +1345,13 @@
_real_y = _scaled_y;
}
- if ((_scaled_x < rs_filter_get_width(preview->filter_end[view])) &&
(_scaled_y < rs_filter_get_height(preview->filter_end[view])) && (_scaled_x >=
0) && (_scaled_y >= 0))
+ if ((_scaled_x < filter_width) && (_scaled_y < filter_height) &&
(_scaled_x >= 0) && (_scaled_y >= 0))
ret = TRUE;
if (scaled_x)
- *scaled_x = MIN(MAX(0, _scaled_x),
rs_filter_get_width(preview->filter_end[view]));
+ *scaled_x = MIN(MAX(0, _scaled_x), filter_width);
if (scaled_y)
- *scaled_y = MIN(MAX(0, _scaled_y),
rs_filter_get_height(preview->filter_end[view]));
+ *scaled_y = MIN(MAX(0, _scaled_y), filter_height);
if (real_x)
*real_x = MIN(MAX(0, _real_x), _max_w);
if (real_y)
@@ -1394,8 +1401,7 @@
for(i=0;i<preview->views;i++)
{
- width = rs_filter_get_width(preview->filter_end[i]);
- height = rs_filter_get_height(preview->filter_end[i]);
+ rs_filter_get_size_simple(preview->filter_end[i],
preview->request[i], &width, &height);
if (preview->zoom_to_fit)
get_placement(preview, i, &placement);
@@ -2310,10 +2316,12 @@
{
if ((view==0) && (mask & RS_FILTER_CHANGED_DIMENSION))
{
+ gint width, height;
+
rs_filter_get_size_simple(preview->filter_end[0], preview->request[0], &width,
&height);
gdouble val;
- val = (gdouble)
rs_filter_get_width(preview->filter_end[0]);
+ val = (gdouble) width;
g_object_set(G_OBJECT(preview->hadjustment),
"upper", val, NULL);
- val = (gdouble)
rs_filter_get_height(preview->filter_end[0]);
+ val = (gdouble) height;
g_object_set(G_OBJECT(preview->vadjustment),
"upper", val, NULL);
}
DIRTY(preview->dirty[view], SCREEN);
Modified: trunk/src/rs-save-dialog.c
===================================================================
--- trunk/src/rs-save-dialog.c 2010-04-03 01:03:39 UTC (rev 3324)
+++ trunk/src/rs-save-dialog.c 2010-04-03 01:05:56 UTC (rev 3325)
@@ -197,8 +197,10 @@
g_object_unref(dialog->photo);
dialog->photo = g_object_ref(photo);
- dialog->w_original = rs_filter_get_width(dialog->fcrop);
- dialog->h_original = rs_filter_get_height(dialog->fcrop);
+ gint w, h;
+ rs_filter_get_size_simple(dialog->fcrop, RS_FILTER_REQUEST_QUICK, &w,
&h);
+ dialog->w_original = w;
+ dialog->h_original = h;
gtk_spin_button_set_value(dialog->w_spin, dialog->w_original);
gtk_spin_button_set_value(dialog->h_spin, dialog->h_original);
@@ -295,7 +297,9 @@
rs_job_update_description(slot, description);
g_free(description);
- actual_scale = ((gdouble) dialog->save_width / (gdouble)
rs_filter_get_width(dialog->fcrop));
+ gint input_width;
+ rs_filter_get_size_simple(dialog->fcrop, RS_FILTER_REQUEST_QUICK,
&input_width, NULL);
+ actual_scale = ((gdouble) dialog->save_width / (gdouble) input_width);
/* Set input profile */
RSDcpFile *dcp_profile = rs_photo_get_dcp_profile(dialog->photo);
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit