[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