[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