[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46742] branches/soc-2011-tomato/source/ blender/editors/space_clip/tracking_ops.c: Tomato: sliding corner with Ctrl holded down would have scaling behavior

Sergey Sharybin sergey.vfx at gmail.com
Thu May 17 18:45:03 CEST 2012


Revision: 46742
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46742
Author:   nazgul
Date:     2012-05-17 16:45:02 +0000 (Thu, 17 May 2012)
Log Message:
-----------
Tomato: sliding corner with Ctrl holded down would have scaling behavior

Modified Paths:
--------------
    branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c

Modified: branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c	2012-05-17 15:52:56 UTC (rev 46741)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c	2012-05-17 16:45:02 UTC (rev 46742)
@@ -264,7 +264,7 @@
 	float smin[2], smax[2], spos[2], soff[2], scorners[4][2];
 	float (*smarkers)[2];
 
-	int lock, accurate;
+	int lock, accurate, scale;
 } SlideMarkerData;
 
 static SlideMarkerData *create_slide_marker_data(SpaceClip *sc, MovieTrackingTrack *track,
@@ -636,6 +636,10 @@
 				if (ELEM(event->type, LEFTCTRLKEY, RIGHTCTRLKEY))
 					data->lock = event->val == KM_RELEASE;
 
+			if (data->action == SLIDE_ACTION_POS)
+				if (ELEM(event->type, LEFTCTRLKEY, RIGHTCTRLKEY))
+					data->scale = event->val == KM_PRESS;
+
 			if (ELEM(event->type, LEFTSHIFTKEY, RIGHTSHIFTKEY))
 				data->accurate = event->val == KM_PRESS;
 
@@ -718,15 +722,31 @@
 						BKE_tracking_clamp_track(data->track, CLAMP_SEARCH_POS);
 				}
 				else if (data->action == SLIDE_ACTION_POS) {
-					float spos[2];
+					if (data->scale) {
+						float scale = 1.0f + 10.0f * (dx - dy);
 
-					copy_v2_v2(spos, data->pos);
+						if (scale > 0.0f) {
+							int a;
 
-					data->pos[0] = data->spos[0] + dx;
-					data->pos[1] = data->spos[1] + dy;
+							for (a = 0; a < 4; a++) {
+								mul_v2_v2fl(data->corners[a], data->scorners[a], scale);
+							}
+						}
+					}
+					else {
+						float spos[2];
 
-					if (!slide_check_corners(data->corners)) {
-						copy_v2_v2(data->pos, spos);
+						copy_v2_v2(spos, data->pos);
+
+						/* corners might've been scaled before, restore their original position */
+						memcpy(data->corners, data->scorners, sizeof(data->scorners));
+
+						data->pos[0] = data->spos[0] + dx;
+						data->pos[1] = data->spos[1] + dy;
+
+						if (!slide_check_corners(data->corners)) {
+							copy_v2_v2(data->pos, spos);
+						}
 					}
 
 					/* currently only patterns are allowed to have such combination of event and data */




More information about the Bf-blender-cvs mailing list