[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30108] trunk/blender: Sequencer display overlay option, this can show a border area from another time to help compare for color grading .

Campbell Barton ideasman42 at gmail.com
Thu Jul 8 12:03:29 CEST 2010


Revision: 30108
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30108
Author:   campbellbarton
Date:     2010-07-08 12:03:29 +0200 (Thu, 08 Jul 2010)

Log Message:
-----------
Sequencer display overlay option, this can show a border area from another time to help compare for color grading.
- Okey sets the border in the display.
- Okey resets the frame offset in the sequencer timeline.
- ghost icon in the header can enable/disable.
- frame offset can be relative or absolute (lock icon)

Not very happy that this commit adds a call to BKE_animsys_evaluate_animdata(scene, ...) in do_build_seq_array_recursively()
without this the offset frames dont have fcurves applied.
Though we will need something like this for prefetch frames to work too.

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_sequencer.py
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c
    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_sequence_types.h
    trunk/blender/source/blender/makesrna/intern/rna_sequencer.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/release/scripts/ui/space_sequencer.py
===================================================================
--- trunk/blender/release/scripts/ui/space_sequencer.py	2010-07-08 09:52:13 UTC (rev 30107)
+++ trunk/blender/release/scripts/ui/space_sequencer.py	2010-07-08 10:03:29 UTC (rev 30108)
@@ -69,7 +69,15 @@
         else:
             layout.prop(st, "display_channel", text="Channel")
 
+            ed = context.scene.sequence_editor
+            if ed:
+                row = layout.row(align=True)
+                row.prop(ed, "show_overlay", text="", icon='GHOST_ENABLED')
+                if ed.show_overlay:
+                    row.prop(ed, "overlay_frame", text="")
+                    row.prop(ed, "overlay_lock", text="", icon='LOCKED')
 
+
 class SEQUENCER_MT_view_toggle(bpy.types.Menu):
     bl_label = "View Type"
 
@@ -126,6 +134,10 @@
             layout.operator_context = 'INVOKE_REGION_PREVIEW'
             layout.operator("sequencer.view_all_preview", text='Fit preview in window')
             layout.operator_context = 'INVOKE_DEFAULT'
+
+            # # XXX, invokes in the header view
+            # layout.operator("sequencer.view_ghost_border", text='Overlay Border')
+
         layout.operator("sequencer.view_selected")
 
         layout.prop(st, "draw_frames")

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-07-08 09:52:13 UTC (rev 30107)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-07-08 10:03:29 UTC (rev 30108)
@@ -2544,6 +2544,10 @@
 	int i;
 	TStripElem* se = 0;
 
+	// XXX for prefetch and overlay offset!..., very bad!!!
+	AnimData *adt= BKE_animdata_from_id(&scene->id);
+	BKE_animsys_evaluate_animdata(&scene->id, adt, cfra, ADT_RECALC_ANIM);
+
 	count = get_shown_sequences(seqbasep, cfra, chanshown, 
 					(Sequence **)&seq_arr);
 

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c	2010-07-08 09:52:13 UTC (rev 30107)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c	2010-07-08 10:03:29 UTC (rev 30108)
@@ -690,7 +690,7 @@
 	else special_seq_update= 0;
 }
 
-void draw_image_seq(const bContext* C, Scene *scene, ARegion *ar, SpaceSeq *sseq)
+void draw_image_seq(const bContext* C, Scene *scene, ARegion *ar, SpaceSeq *sseq, int cfra, int frame_ofs)
 {
 	extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad);
 	struct ImBuf *ibuf;
@@ -726,9 +726,11 @@
 		viewrecty /= proxy_size / 100.0;
 	}
 
-	/* XXX TODO: take color from theme */
-	glClearColor(0.0, 0.0, 0.0, 0.0);
-	glClear(GL_COLOR_BUFFER_BIT);
+	if(frame_ofs == 0) {
+		/* XXX TODO: take color from theme */
+		glClearColor(0.0, 0.0, 0.0, 0.0);
+		glClear(GL_COLOR_BUFFER_BIT);
+	}
 
 	/* without this colors can flicker from previous opengl state */
 	glColor4ub(255, 255, 255, 255);
@@ -746,13 +748,13 @@
 	else {
 		recursive= 1;
 		if (special_seq_update) {
-			ibuf= give_ibuf_seq_direct(scene, rectx, recty, (scene->r.cfra), proxy_size, special_seq_update);
+			ibuf= give_ibuf_seq_direct(scene, rectx, recty, cfra + frame_ofs, proxy_size, special_seq_update);
 		} 
 		else if (!U.prefetchframes) { // XXX || (G.f & G_PLAYANIM) == 0) {
-			ibuf= (ImBuf *)give_ibuf_seq(scene, rectx, recty, (scene->r.cfra), sseq->chanshown, proxy_size);
+			ibuf= (ImBuf *)give_ibuf_seq(scene, rectx, recty, cfra + frame_ofs, sseq->chanshown, proxy_size);
 		} 
 		else {
-			ibuf= (ImBuf *)give_ibuf_seq_threaded(scene, rectx, recty, (scene->r.cfra), sseq->chanshown, proxy_size);
+			ibuf= (ImBuf *)give_ibuf_seq_threaded(scene, rectx, recty, cfra + frame_ofs, sseq->chanshown, proxy_size);
 		}
 		recursive= 0;
 		
@@ -812,11 +814,26 @@
 	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 
 	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, ibuf->x, ibuf->y, 0, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect);
-	glBegin(GL_QUADS); 
-		glTexCoord2f(0.0f, 0.0f); glVertex2f(v2d->tot.xmin, v2d->tot.ymin);
-		glTexCoord2f(0.0f, 1.0f);glVertex2f(v2d->tot.xmin, v2d->tot.ymax); 
+	glBegin(GL_QUADS);
+
+	if(frame_ofs) {
+		rctf tot_clip;
+		tot_clip.xmin= v2d->tot.xmin + (ABS(v2d->tot.xmax - v2d->tot.xmin) * scene->ed->over_border.xmin);
+		tot_clip.ymin= v2d->tot.ymin + (ABS(v2d->tot.ymax - v2d->tot.ymin) * scene->ed->over_border.ymin);
+		tot_clip.xmax= v2d->tot.xmin + (ABS(v2d->tot.xmax - v2d->tot.xmin) * scene->ed->over_border.xmax);
+		tot_clip.ymax= v2d->tot.ymin + (ABS(v2d->tot.ymax - v2d->tot.ymin) * scene->ed->over_border.ymax);
+
+		glTexCoord2f(scene->ed->over_border.xmin, scene->ed->over_border.ymin);glVertex2f(tot_clip.xmin, tot_clip.ymin);
+		glTexCoord2f(scene->ed->over_border.xmin, scene->ed->over_border.ymax);glVertex2f(tot_clip.xmin, tot_clip.ymax);
+		glTexCoord2f(scene->ed->over_border.xmax, scene->ed->over_border.ymax);glVertex2f(tot_clip.xmax, tot_clip.ymax);
+		glTexCoord2f(scene->ed->over_border.xmax, scene->ed->over_border.ymin);glVertex2f(tot_clip.xmax, tot_clip.ymin);
+	}
+	else {
+		glTexCoord2f(0.0f, 0.0f);glVertex2f(v2d->tot.xmin, v2d->tot.ymin);
+		glTexCoord2f(0.0f, 1.0f);glVertex2f(v2d->tot.xmin, v2d->tot.ymax);
 		glTexCoord2f(1.0f, 1.0f);glVertex2f(v2d->tot.xmax, v2d->tot.ymax);
-		glTexCoord2f(1.0f, 0.0f);glVertex2f(v2d->tot.xmax, v2d->tot.ymin); 
+		glTexCoord2f(1.0f, 0.0f);glVertex2f(v2d->tot.xmax, v2d->tot.ymin);
+	}
 	glEnd( );
 	glBindTexture(GL_TEXTURE_2D, last_texid);
 	glDisable(GL_TEXTURE_2D);
@@ -1056,6 +1073,19 @@
 	/* preview range */
 	UI_view2d_view_ortho(C, v2d);
 	ANIM_draw_previewrange(C, v2d);
+
+	/* overlap playhead */
+	if(scene->ed && scene->ed->over_flag & SEQ_EDIT_OVERLAY_SHOW) {
+		int cfra_over= (scene->ed->over_flag & SEQ_EDIT_OVERLAY_ABS) ? scene->ed->over_cfra : scene->r.cfra + scene->ed->over_ofs;
+		glColor3f(0.2, 0.2, 0.2);
+		// glRectf(cfra_over, v2d->cur.ymin, scene->ed->over_ofs + scene->r.cfra + 1, v2d->cur.ymax);
+
+		glBegin(GL_LINES);
+			glVertex2f(cfra_over, v2d->cur.ymin);
+			glVertex2f(cfra_over, v2d->cur.ymax);
+		glEnd();
+
+	}
 	
 	/* reset view matrix */
 	UI_view2d_view_restore(C);

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2010-07-08 09:52:13 UTC (rev 30107)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2010-07-08 10:03:29 UTC (rev 30108)
@@ -1117,7 +1117,16 @@
 	return (seq_give_editing(CTX_data_scene(C), FALSE) != NULL);
 }
 
+int sequencer_view_poll(bContext *C)
+{
+	SpaceSeq *sseq= CTX_wm_space_seq(C);
+	Editing *ed= seq_give_editing(CTX_data_scene(C), FALSE);
+	if (ed && sseq && (sseq->mainb == SEQ_DRAW_IMG_IMBUF))
+		return 1;
 
+	return 0;
+}
+
 /* snap operator*/
 static int sequencer_snap_exec(bContext *C, wmOperator *op)
 {
@@ -2723,3 +2732,62 @@
 	/* properties */
 }
 
+/* borderselect operator */
+static int view_ghost_border_exec(bContext *C, wmOperator *op)
+{
+	Scene *scene= CTX_data_scene(C);
+	Editing *ed= seq_give_editing(scene, FALSE);
+	View2D *v2d= UI_view2d_fromcontext(C);
+
+	rctf rect;
+
+	/* convert coordinates of rect to 'tot' rect coordinates */
+	UI_view2d_region_to_view(v2d, RNA_int_get(op->ptr, "xmin"), RNA_int_get(op->ptr, "ymin"), &rect.xmin, &rect.ymin);
+	UI_view2d_region_to_view(v2d, RNA_int_get(op->ptr, "xmax"), RNA_int_get(op->ptr, "ymax"), &rect.xmax, &rect.ymax);
+
+	if(ed==NULL)
+		return OPERATOR_CANCELLED;
+
+	rect.xmin /=  (float)(ABS(v2d->tot.xmax - v2d->tot.xmin));
+	rect.ymin /=  (float)(ABS(v2d->tot.ymax - v2d->tot.ymin));
+
+	rect.xmax /=  (float)(ABS(v2d->tot.xmax - v2d->tot.xmin));
+	rect.ymax /=  (float)(ABS(v2d->tot.ymax - v2d->tot.ymin));
+
+	rect.xmin+=0.5;
+	rect.xmax+=0.5;
+	rect.ymin+=0.5;
+	rect.ymax+=0.5;
+
+	CLAMP(rect.xmin, 0.0f, 1.0f);
+	CLAMP(rect.ymin, 0.0f, 1.0f);
+	CLAMP(rect.xmax, 0.0f, 1.0f);
+	CLAMP(rect.ymax, 0.0f, 1.0f);
+
+	scene->ed->over_border= rect;
+
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
+
+	return OPERATOR_FINISHED;
+}
+
+/* ****** Border Select ****** */
+void SEQUENCER_OT_view_ghost_border(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Border Offset View";
+	ot->idname= "SEQUENCER_OT_view_ghost_border";
+	ot->description="Enable border select mode";
+
+	/* api callbacks */
+	ot->invoke= WM_border_select_invoke;
+	ot->exec= view_ghost_border_exec;
+	ot->modal= WM_border_select_modal;
+	ot->poll= sequencer_view_poll;
+
+	/* flags */
+	ot->flag= 0;
+
+	/* rna */
+	WM_operator_properties_gesture_border(ot, FALSE);
+}

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_intern.h	2010-07-08 09:52:13 UTC (rev 30107)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_intern.h	2010-07-08 10:03:29 UTC (rev 30108)
@@ -48,7 +48,7 @@
 
 /* sequencer_draw.c */
 void draw_timeline_seq(const struct bContext *C, struct ARegion *ar);
-void draw_image_seq(const struct bContext* C, struct Scene *scene,struct  ARegion *ar, struct SpaceSeq *sseq);
+void draw_image_seq(const struct bContext* C, struct Scene *scene,struct  ARegion *ar, struct SpaceSeq *sseq, int cfra, int offset);
 
 void seq_reset_imageofs(struct SpaceSeq *sseq);
 
@@ -69,6 +69,7 @@
 
 /* operator helpers */
 int sequencer_edit_poll(struct bContext *C);
+int sequencer_view_poll(struct bContext *C);
 
 /* externs */
 extern EnumPropertyItem sequencer_prop_effect_types[];
@@ -103,6 +104,7 @@
 void SEQUENCER_OT_view_all(struct wmOperatorType *ot);
 void SEQUENCER_OT_view_selected(struct wmOperatorType *ot);
 void SEQUENCER_OT_view_zoom_ratio(struct wmOperatorType *ot);
+void SEQUENCER_OT_view_ghost_border(struct wmOperatorType *ot);
 
 void SEQUENCER_OT_copy(struct wmOperatorType *ot);
 void SEQUENCER_OT_paste(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_ops.c	2010-07-08 09:52:13 UTC (rev 30107)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list