[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25386] trunk/blender: Sequencer drawing cleanup (Part 1)

Andrea Weikert elubie at gmx.net
Mon Dec 14 22:42:25 CET 2009


Revision: 25386
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25386
Author:   elubie
Date:     2009-12-14 22:42:25 +0100 (Mon, 14 Dec 2009)

Log Message:
-----------
Sequencer drawing cleanup (Part 1)

Separated preview drawing into own ARegion, this should make using View2D possible
The Sequencer now has three view types: Sequencer, Preview and split Sequencer/Preview.

Changing the preview can be done either by the combobox in the header or toggling through those types with CTRL+TAB.

Notes:
* Icon for split Sequencer/Preview view missing still. 
* Naming items in the comboboxes can be improved (just Preview instead of Image Preview?)

Next steps:
* bringing back View2D handling (zoom/pan) for image preview
* experimenting with splitting the Preview ARegion for In/Out editing

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_sequencer.py
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/include/ED_sequencer.h
    trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_intern.h
    trunk/blender/source/blender/editors/space_sequencer/sequencer_ops.c
    trunk/blender/source/blender/editors/space_sequencer/space_sequencer.c
    trunk/blender/source/blender/makesdna/DNA_screen_types.h
    trunk/blender/source/blender/makesdna/DNA_space_types.h
    trunk/blender/source/blender/makesrna/intern/rna_space.c

Modified: trunk/blender/release/scripts/ui/space_sequencer.py
===================================================================
--- trunk/blender/release/scripts/ui/space_sequencer.py	2009-12-14 21:31:36 UTC (rev 25385)
+++ trunk/blender/release/scripts/ui/space_sequencer.py	2009-12-14 21:42:25 UTC (rev 25386)
@@ -44,21 +44,38 @@
 
             row.separator()
 
-            if st.display_mode == 'SEQUENCER':
+            if (st.view_type == 'SEQUENCER') or (st.view_type == 'SEQUENCER_PREVIEW'):
                 sub.menu("SEQUENCER_MT_select")
                 sub.menu("SEQUENCER_MT_marker")
                 sub.menu("SEQUENCER_MT_add")
                 sub.menu("SEQUENCER_MT_strip")
 
-        layout.prop(st, "display_mode", text="")
+        layout.prop(st, "view_type", text="")
 
-        if st.display_mode == 'SEQUENCER':
+        if (st.view_type == 'PREVIEW') or (st.view_type == 'SEQUENCER_PREVIEW'):
+            layout.prop(st, "display_mode", text="")
+
+        if (st.view_type == 'SEQUENCER'):
             layout.separator()
             layout.operator("sequencer.refresh_all")
+        elif (st.view_type == 'SEQUENCER_PREVIEW'):
+            layout.separator()
+            layout.operator("sequencer.refresh_all")
+            layout.prop(st, "display_channel", text="Channel")
         else:
             layout.prop(st, "display_channel", text="Channel")
 
+class SEQUENCER_MT_view_toggle(bpy.types.Menu):
+    bl_label = "View Type"
 
+    def draw(self, context):
+        layout = self.layout
+        
+        layout.operator("sequencer.view_toggle").type = 'SEQUENCER'
+        layout.operator("sequencer.view_toggle").type = 'PREVIEW'
+        layout.operator("sequencer.view_toggle").type = 'SEQUENCER_PREVIEW'
+
+
 class SEQUENCER_MT_view(bpy.types.Menu):
     bl_label = "View"
 
@@ -98,7 +115,10 @@
 
         """
         layout.separator()
-        layout.operator("sequencer.view_all")
+        if (st.view_type == 'SEQUENCER') or (st.view_type == 'SEQUENCER_PREVIEW'):
+            layout.operator("sequencer.view_all", text='View all Sequences')
+        if (st.view_type == 'PREVIEW') or (st.view_type == 'SEQUENCER_PREVIEW'):
+            layout.operator("sequencer.view_all_preview", text='Fit preview in window')
         layout.operator("sequencer.view_selected")
 
         layout.prop(st, "draw_frames")
@@ -262,17 +282,23 @@
 class SequencerButtonsPanel(bpy.types.Panel):
     bl_space_type = 'SEQUENCE_EDITOR'
     bl_region_type = 'UI'
+    
+    def has_sequencer(self, context):
+        return (context.space_data.view_type == 'SEQUENCER') or (context.space_data.view_type == 'SEQUENCER_PREVIEW')
 
     def poll(self, context):
-        return (context.space_data.display_mode == 'SEQUENCER') and (act_strip(context) is not None)
+        return self.has_sequencer(context) and (act_strip(context) is not None)
 
 
 class SequencerButtonsPanel_Output(bpy.types.Panel):
     bl_space_type = 'SEQUENCE_EDITOR'
     bl_region_type = 'UI'
 
+    def has_preview(self, context):
+        return (context.space_data.view_type == 'PREVIEW') or (context.space_data.view_type == 'SEQUENCER_PREVIEW')
+
     def poll(self, context):
-        return context.space_data.display_mode != 'SEQUENCER'
+        return self.has_preview(context)
 
 
 class SEQUENCER_PT_edit(SequencerButtonsPanel):
@@ -331,7 +357,7 @@
     bl_label = "Effect Strip"
 
     def poll(self, context):
-        if context.space_data.display_mode != 'SEQUENCER':
+        if not self.has_sequencer(context):
             return False
 
         strip = act_strip(context)
@@ -429,7 +455,7 @@
     bl_label = "Strip Input"
 
     def poll(self, context):
-        if context.space_data.display_mode != 'SEQUENCER':
+        if not self.has_sequencer(context):
             return False
 
         strip = act_strip(context)
@@ -485,7 +511,7 @@
     bl_label = "Sound"
 
     def poll(self, context):
-        if context.space_data.display_mode != 'SEQUENCER':
+        if not self.has_sequencer(context):
             return False
 
         strip = act_strip(context)
@@ -519,7 +545,7 @@
     bl_label = "Scene"
 
     def poll(self, context):
-        if context.space_data.display_mode != 'SEQUENCER':
+        if not self.has_sequencer(context):
             return False
 
         strip = act_strip(context)
@@ -540,7 +566,7 @@
     bl_label = "Filter"
 
     def poll(self, context):
-        if context.space_data.display_mode != 'SEQUENCER':
+        if not self.has_sequencer(context):
             return False
 
         strip = act_strip(context)
@@ -590,7 +616,7 @@
     bl_label = "Proxy"
 
     def poll(self, context):
-        if context.space_data.display_mode != 'SEQUENCER':
+        if not self.has_sequencer(context):
             return False
 
         strip = act_strip(context)
@@ -630,6 +656,7 @@
 
 bpy.types.register(SEQUENCER_HT_header) # header/menu classes
 bpy.types.register(SEQUENCER_MT_view)
+bpy.types.register(SEQUENCER_MT_view_toggle)
 bpy.types.register(SEQUENCER_MT_select)
 bpy.types.register(SEQUENCER_MT_marker)
 bpy.types.register(SEQUENCER_MT_add)

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2009-12-14 21:31:36 UTC (rev 25385)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2009-12-14 21:42:25 UTC (rev 25386)
@@ -6003,6 +6003,12 @@
 				ar->regiontype= RGN_TYPE_UI;
 				ar->alignment= RGN_ALIGN_TOP;
 				break;
+			case SPACE_SEQ:
+				ar= MEM_callocN(sizeof(ARegion), "preview area for sequencer");
+				BLI_addtail(lb, ar);
+				ar->regiontype= RGN_TYPE_UI;
+				ar->alignment= RGN_ALIGN_TOP;
+				break;
 			case SPACE_VIEW3D:
 				/* toolbar */
 				ar= MEM_callocN(sizeof(ARegion), "toolbar for view3d");
@@ -10169,6 +10175,23 @@
 			}
 		}
 	}
+	{ /* fix for new view type in sequencer */
+		bScreen *screen;
+		ScrArea *sa;
+		SpaceLink *sl;
+		
+		for(screen= main->screen.first; screen; screen= screen->id.next) {
+			for(sa= screen->areabase.first; sa; sa= sa->next) {
+				for(sl= sa->spacedata.first; sl; sl= sl->next) {
+					if(sl->spacetype==SPACE_SEQ) {
+						SpaceSeq *sseq = (SpaceSeq *)sl;
+						if (sseq->view == 0) sseq->view = SEQ_VIEW_SEQUENCE;
+						if (sseq->mainb == 0) sseq->mainb = SEQ_DRAW_IMG_IMBUF;
+					}
+				}
+			}
+		}
+	}
 
 	/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
 	/* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */

Modified: trunk/blender/source/blender/editors/include/ED_sequencer.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_sequencer.h	2009-12-14 21:31:36 UTC (rev 25385)
+++ trunk/blender/source/blender/editors/include/ED_sequencer.h	2009-12-14 21:42:25 UTC (rev 25386)
@@ -28,4 +28,7 @@
 #define SEQ_ZOOM_FAC(szoom) (szoom > 0)? (szoom) : (szoom == 0)? (1.0) : (-1.0/szoom)
 
 
+/* in space_sequencer.c, for rna update function */
+void ED_sequencer_update_view(bContext *C, int view);
+
 #endif /*  ED_SEQUENCER_H */

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-12-14 21:31:36 UTC (rev 25385)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-12-14 21:42:25 UTC (rev 25386)
@@ -83,6 +83,7 @@
 #include "ED_screen.h"
 #include "ED_transform.h"
 #include "ED_util.h"
+#include "ED_sequencer.h"
 
 #include "UI_interface.h"
 #include "UI_resources.h"
@@ -2268,58 +2269,85 @@
 	bScreen *sc= CTX_wm_screen(C);
 	ScrArea *area= CTX_wm_area(C);
 	ARegion *ar= CTX_wm_region(C);
+	View2D *v2d= UI_view2d_fromcontext(C);
+
+	v2d->cur= v2d->tot;
+	UI_view2d_curRect_validate(v2d);
+	UI_view2d_sync(sc, area, v2d, V2D_LOCK_COPY);
+	
+	ED_area_tag_redraw(CTX_wm_area(C));
+	return OPERATOR_FINISHED;
+}
+
+void SEQUENCER_OT_view_all(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "View All";
+	ot->idname= "SEQUENCER_OT_view_all";
+	ot->description="View all the strips in the sequencer.";
+	
+	/* api callbacks */
+	ot->exec= sequencer_view_all_exec;
+
+	ot->poll= ED_operator_sequencer_active;
+	
+	/* flags */
+	ot->flag= OPTYPE_REGISTER;
+}
+
+/* view_all operator */
+static int sequencer_view_all_preview_exec(bContext *C, wmOperator *op)
+{
+	Scene *scene= CTX_data_scene(C);
+	bScreen *sc= CTX_wm_screen(C);
+	ScrArea *area= CTX_wm_area(C);
+	ARegion *ar= CTX_wm_region(C);
 	SpaceSeq *sseq= area->spacedata.first;
 	View2D *v2d= UI_view2d_fromcontext(C);
 
-	if (sseq->mainb==SEQ_DRAW_SEQUENCE) {
-		v2d->cur= v2d->tot;
-		UI_view2d_curRect_validate(v2d);
-		UI_view2d_sync(sc, area, v2d, V2D_LOCK_COPY);
-	} else {
-		/* Like zooming on an image view */
-		float zoomX, zoomY;
-		int width, height, imgwidth, imgheight;
 
-		width = ar->winx;
-		height = ar->winy;
+	/* Like zooming on an image view */
+	float zoomX, zoomY;
+	int width, height, imgwidth, imgheight;
 
-		seq_reset_imageofs(sseq);
+	width = ar->winx;
+	height = ar->winy;
 
-		imgwidth= (scene->r.size*scene->r.xsch)/100;
-		imgheight= (scene->r.size*scene->r.ysch)/100;
+	seq_reset_imageofs(sseq);
 
-		/* Apply aspect, dosnt need to be that accurate */
-		imgwidth= (int)(imgwidth * ((float)scene->r.xasp / (float)scene->r.yasp));
+	imgwidth= (scene->r.size*scene->r.xsch)/100;
+	imgheight= (scene->r.size*scene->r.ysch)/100;
 
-		if (((imgwidth >= width) || (imgheight >= height)) &&
-			((width > 0) && (height > 0))) {
+	/* Apply aspect, dosnt need to be that accurate */
+	imgwidth= (int)(imgwidth * ((float)scene->r.xasp / (float)scene->r.yasp));
 
-			/* 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;
+	if (((imgwidth >= width) || (imgheight >= height)) &&
+		((width > 0) && (height > 0))) {
 
-			sseq->zoom = 1.0f / power_of_2(1/ MIN2(zoomX, zoomY) );
-		}
-		else {
-			sseq->zoom= 1.0f;
-		}
+		/* 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;
+	}
 
-
 	ED_area_tag_redraw(CTX_wm_area(C));

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list