[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14772] trunk/blender/source/blender: fix for [#8359] Sequencer image preview: HOME hotkey zooming at output res , not at "full view"

Campbell Barton ideasman42 at gmail.com
Fri May 9 22:08:28 CEST 2008


Revision: 14772
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14772
Author:   campbellbarton
Date:     2008-05-09 22:08:28 +0200 (Fri, 09 May 2008)

Log Message:
-----------
fix for [#8359] Sequencer image preview: HOME hotkey zooming at output res, not at "full view"
also made image and sequencer account for aspect ratio and added numpad 1,2,4,8 keys for zooming.

Modified Paths:
--------------
    trunk/blender/source/blender/blenlib/BLI_arithb.h
    trunk/blender/source/blender/blenlib/intern/arithb.c
    trunk/blender/source/blender/include/BIF_drawseq.h
    trunk/blender/source/blender/src/drawimage.c
    trunk/blender/source/blender/src/drawseq.c
    trunk/blender/source/blender/src/header_seq.c
    trunk/blender/source/blender/src/space.c

Modified: trunk/blender/source/blender/blenlib/BLI_arithb.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_arithb.h	2008-05-09 20:00:18 UTC (rev 14771)
+++ trunk/blender/source/blender/blenlib/BLI_arithb.h	2008-05-09 20:08:28 UTC (rev 14772)
@@ -96,8 +96,8 @@
 void CalcNormLong(int *v1, int *v2, int *v3, float *n);
 /* CalcNormShort: is ook uitprodukt - (translates as 'is also out/cross product') */
 void CalcNormShort(short *v1, short *v2, short *v3, float *n);
+float power_of_2(float val);
 
-
 /**
  * @section Euler conversion routines
  */

Modified: trunk/blender/source/blender/blenlib/intern/arithb.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/arithb.c	2008-05-09 20:00:18 UTC (rev 14771)
+++ trunk/blender/source/blender/blenlib/intern/arithb.c	2008-05-09 20:08:28 UTC (rev 14772)
@@ -4345,3 +4345,8 @@
 	if ((ct[0]*n[0] + ct[1]*n[1] + ct[2]*n[2]) < 0.0f)
 		VecMulf(tang, -1.0f);
 }
+
+/* used for zoom values*/
+float power_of_2(float val) {
+	return pow(2, ceil(log(val) / log(2)));
+}

Modified: trunk/blender/source/blender/include/BIF_drawseq.h
===================================================================
--- trunk/blender/source/blender/include/BIF_drawseq.h	2008-05-09 20:00:18 UTC (rev 14771)
+++ trunk/blender/source/blender/include/BIF_drawseq.h	2008-05-09 20:08:28 UTC (rev 14772)
@@ -39,5 +39,7 @@
 
 void seq_viewmove(SpaceSeq *sseq);
 void seq_reset_imageofs(SpaceSeq *sseq);
+void seq_viewzoom(unsigned short event, int invert);
+void seq_home(void);
 #endif
 

Modified: trunk/blender/source/blender/src/drawimage.c
===================================================================
--- trunk/blender/source/blender/src/drawimage.c	2008-05-09 20:00:18 UTC (rev 14771)
+++ trunk/blender/source/blender/src/drawimage.c	2008-05-09 20:08:28 UTC (rev 14772)
@@ -2349,17 +2349,6 @@
 	sa->win_swap= WIN_BACK_OK;
 }
 
-static void image_zoom_power_of_two(void)
-{
-	/* Make zoom a power of 2 */
-
-	G.sima->zoom = 1 / G.sima->zoom;
-	G.sima->zoom = log(G.sima->zoom) / log(2);
-	G.sima->zoom = ceil(G.sima->zoom);
-	G.sima->zoom = pow(2, G.sima->zoom);
-	G.sima->zoom = 1 / G.sima->zoom;
-}
-
 static void image_zoom_set_factor(float zoomfac)
 {
 	SpaceImage *sima= curarea->spacedata.first;
@@ -2503,8 +2492,10 @@
 		imgheight = 256;
 	}
 	else {
-		imgwidth = ibuf->x;
-		imgheight = ibuf->y;
+		float xuser_asp, yuser_asp;
+		image_pixel_aspect(G.sima->image, &xuser_asp, &yuser_asp);
+		imgwidth = ibuf->x * xuser_asp;
+		imgheight = ibuf->y * yuser_asp;
 	}
 
 	/* Check if the image will fit in the image with zoom==1 */
@@ -2515,9 +2506,7 @@
 		/* Find the zoom value that will fit the image in the image space */
 		zoomX = ((float)width) / ((float)imgwidth);
 		zoomY = ((float)height) / ((float)imgheight);
-		G.sima->zoom= MIN2(zoomX, zoomY);
-
-		image_zoom_power_of_two();
+		G.sima->zoom = 1.0f / power_of_2(1/ MIN2(zoomX, zoomY) );
 	}
 	else {
 		G.sima->zoom= 1.0f;

Modified: trunk/blender/source/blender/src/drawseq.c
===================================================================
--- trunk/blender/source/blender/src/drawseq.c	2008-05-09 20:00:18 UTC (rev 14771)
+++ trunk/blender/source/blender/src/drawseq.c	2008-05-09 20:08:28 UTC (rev 14772)
@@ -913,6 +913,64 @@
 	sseq->xof = sseq->yof = sseq->zoom = 0;
 }
 
+void seq_home(void)
+{
+	SpaceSeq *sseq= curarea->spacedata.first;
+	
+	if (!sseq->mainb) {
+		G.v2d->cur= G.v2d->tot;
+		test_view2d(G.v2d, curarea->winx, curarea->winy);
+		view2d_do_locks(curarea, V2D_LOCK_COPY);
+	} else {
+		float zoomX, zoomY;
+		int width, height, imgwidth, imgheight;	
+		
+		width = curarea->winx;
+		height = curarea->winy;
+		
+		seq_reset_imageofs(sseq);
+		
+		imgwidth= (G.scene->r.size*G.scene->r.xsch)/100;
+		imgheight= (G.scene->r.size*G.scene->r.ysch)/100;
+		
+		/* Apply aspect, dosnt need to be that accurate */
+		imgwidth= (int)(imgwidth * ((float)G.scene->r.xasp / (float)G.scene->r.yasp));
+		
+		if (((imgwidth >= width) || (imgheight >= height)) && 
+			((width > 0) && (height > 0))) {
+			
+			/* Find the zoom value that will fit the image in the image space */
+			zoomX = ((float)width) / ((float)imgwidth);
+			zoomY = ((float)height) / ((float)imgheight);
+			sseq->zoom= (zoomX < zoomY) ? zoomX : zoomY;
+	
+			sseq->zoom = 1.0f / power_of_2(1/ MIN2(zoomX, zoomY) );
+		}
+		else {
+			sseq->zoom= 1.0f;
+		}
+	}
+	scrarea_queue_winredraw(curarea);
+}
+
+void seq_viewzoom(unsigned short event, int invert)
+{
+	SpaceSeq *sseq= curarea->spacedata.first;
+
+	if(event==PAD1)
+		sseq->zoom= 1.0;
+	else if(event==PAD2)
+		sseq->zoom= (invert)? 2.0: 0.5;
+	else if(event==PAD4)
+		sseq->zoom= (invert)? 4.0: 0.25;
+	else if(event==PAD8)
+		sseq->zoom= (invert)? 8.0: 0.125;
+	
+	/* ensure pixel exact locations for draw */
+	sseq->xof= (int)sseq->xof;
+	sseq->yof= (int)sseq->yof;
+}
+
 void seq_viewmove(SpaceSeq *sseq)
 {	
 	ScrArea *sa;

Modified: trunk/blender/source/blender/src/header_seq.c
===================================================================
--- trunk/blender/source/blender/src/header_seq.c	2008-05-09 20:00:18 UTC (rev 14771)
+++ trunk/blender/source/blender/src/header_seq.c	2008-05-09 20:08:28 UTC (rev 14772)
@@ -75,13 +75,13 @@
 	switch(event)
 	{
 	case 1: /* Play Back Animation */
-			play_anim(0);
-			break;
+		play_anim(0);
+		break;
 	case 2: /* Play Back Animation in All */
-			play_anim(1);
-			break;
+		play_anim(1);
+		break;
 	case 3:
-		do_seq_buttons(B_SEQHOME);
+		seq_home();
 		break;
 	case 4:
 		if(last_seq) {
@@ -450,7 +450,7 @@
 		seq_mute_sel(0);
 		break;
 	case 22:
-		seq_mute_sel(-1);
+		seq_mute_sel(0);
 		break;
 	case 23:
 		seq_cut(CFRA, 0);
@@ -620,21 +620,13 @@
 void do_seq_buttons(short event)
 {
 	Editing *ed;
-	SpaceSeq *sseq= curarea->spacedata.first;
 	
 	ed= G.scene->ed;
 	if(ed==0) return;
 	
 	switch(event) {
-	case B_SEQHOME:
-		if(sseq->mainb)
-			seq_reset_imageofs(sseq);
-		else {
-			G.v2d->cur= G.v2d->tot;
-			test_view2d(G.v2d, curarea->winx, curarea->winy);
-			view2d_do_locks(curarea, V2D_LOCK_COPY);
-		}
-		scrarea_queue_winredraw(curarea);
+	case B_HOME:
+		seq_home();
 		break;
 	case B_SEQCLEAR:
 		free_imbuf_seq();

Modified: trunk/blender/source/blender/src/space.c
===================================================================
--- trunk/blender/source/blender/src/space.c	2008-05-09 20:00:18 UTC (rev 14771)
+++ trunk/blender/source/blender/src/space.c	2008-05-09 20:08:28 UTC (rev 14772)
@@ -4909,7 +4909,7 @@
 			break;
 		case HOMEKEY:
 			if((G.qual==0))
-				do_seq_buttons(B_SEQHOME);
+				seq_home();
 			break;
 		case PADPERIOD:	
 			if(last_seq) {
@@ -5073,7 +5073,11 @@
 					del_seq();
 			}
 			break;
-		}
+		case PAD1: case PAD2: case PAD4: case PAD8:
+			seq_viewzoom(event, (G.qual & LR_SHIFTKEY)==0);
+			doredraw= 1;
+			break;
+		}	
 	}
 
 	if(doredraw) scrarea_queue_winredraw(curarea);





More information about the Bf-blender-cvs mailing list