[Rawstudio-commit] r2756 - trunk/plugins/crop

Klaus Post klauspost at gmail.com
Sun Nov 22 17:17:19 CET 2009


Author: post
Date: 2009-11-22 17:17:19 +0100 (Sun, 22 Nov 2009)
New Revision: 2756

Modified:
   trunk/plugins/crop/crop.c
Log:
Add ROI for Crop.

Modified: trunk/plugins/crop/crop.c
===================================================================
--- trunk/plugins/crop/crop.c	2009-11-22 15:41:31 UTC (rev 2755)
+++ trunk/plugins/crop/crop.c	2009-11-22 16:17:19 UTC (rev 2756)
@@ -264,11 +264,40 @@
 
 	calc(crop);
 
-	previous_response = rs_filter_get_image(filter->previous, request);
 	/* Special case for full crop */
 	if ((crop->width == parent_width) && (crop->height==parent_height))
-		return previous_response;
-
+		return rs_filter_get_image(filter->previous, request);
+	
+	/* Add ROI for cropped region */
+	if (!rs_filter_request_get_roi(request))
+	{
+		GdkRectangle* roi = g_new(GdkRectangle, 1);
+		roi->x = crop->effective.x1;
+		roi->y = crop->effective.y1;
+		roi->width = crop->width;
+		roi->height = crop->height;
+		RSFilterRequest *new_request = rs_filter_request_clone(request);
+		rs_filter_request_set_roi(new_request, roi);
+		previous_response = rs_filter_get_image(filter->previous, new_request);
+		g_free(roi);
+		g_object_unref(new_request);
+	} 
+	else 
+	{
+		/* Add crop to ROI */
+		GdkRectangle* org_roi = rs_filter_request_get_roi(request);
+		GdkRectangle* roi = g_new(GdkRectangle, 1);
+		roi->x = org_roi->x + crop->effective.x1;
+		roi->y = org_roi->y + crop->effective.y1;
+		roi->width = MIN(org_roi->width, crop->width - org_roi->x);
+		roi->height = MIN(org_roi->height, crop->height - org_roi->y);
+		RSFilterRequest *new_request = rs_filter_request_clone(request);
+		rs_filter_request_set_roi(new_request, roi);
+		previous_response = rs_filter_get_image(filter->previous, new_request);
+		g_free(roi);
+		g_object_unref(new_request);
+	}
+	
 	input = rs_filter_response_get_image(previous_response);
 
 	if (!RS_IS_IMAGE16(input))




More information about the Rawstudio-commit mailing list