diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-08-13 21:36:29 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-08-13 21:36:29 +0400 |
commit | c0539d267d92235baef17e9e6a1edc25cc8beeeb (patch) | |
tree | f9939180d04453a7fdf16c932121566e1a241072 /source | |
parent | be513d1b15630b629d09a6fdfa6ada808586a9dc (diff) |
draw ugly red bands on a sequence strip when its data cant be found (mask, clip, scene, sound)
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_sequencer.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/sequencer.c | 18 | ||||
-rw-r--r-- | source/blender/editors/space_sequencer/sequencer_draw.c | 15 |
3 files changed, 33 insertions, 1 deletions
diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h index fee1db99c5c..718daf1454e 100644 --- a/source/blender/blenkernel/BKE_sequencer.h +++ b/source/blender/blenkernel/BKE_sequencer.h @@ -297,6 +297,7 @@ void BKE_sequencer_update_sound(struct Scene *scene, struct bSound *sound); void BKE_seqence_base_unique_name_recursive(ListBase *seqbasep, struct Sequence *seq); void BKE_sequence_base_dupli_recursive(struct Scene *scene, struct Scene *scene_to, ListBase *nseqbase, ListBase *seqbase, int dupe_flag); +int BKE_seqence_is_valid_check(struct Sequence *seq); void BKE_sequencer_clear_scene_in_allseqs(struct Main *bmain, struct Scene *sce); diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index 528b9dff164..cec868cfc10 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -4042,3 +4042,21 @@ void BKE_sequence_base_dupli_recursive(Scene *scene, Scene *scene_to, ListBase * } } } + +/* called on draw, needs to be fast, + * we could cache and use a flag if we want to make checks for file paths resolving for eg. */ +int BKE_seqence_is_valid_check(Sequence *seq) +{ + switch (seq->type) { + case SEQ_TYPE_MASK: + return (seq->mask != NULL); + case SEQ_TYPE_MOVIECLIP: + return (seq->clip != NULL); + case SEQ_TYPE_SCENE: + return (seq->scene != NULL); + case SEQ_TYPE_SOUND_RAM: + return (seq->sound != NULL); + } + + return TRUE; +} diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index 2a6538e175b..7dd98c39e4c 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -700,7 +700,9 @@ static void draw_seq_strip(Scene *scene, ARegion *ar, Sequence *seq, int outline /* draw the main strip body */ if (is_single_image) { /* single image */ - draw_shadedstrip(seq, background_col, BKE_sequence_tx_get_final_left(seq, 0), y1, BKE_sequence_tx_get_final_right(seq, 0), y2); + draw_shadedstrip(seq, background_col, + BKE_sequence_tx_get_final_left(seq, 0), y1, + BKE_sequence_tx_get_final_right(seq, 0), y2); } else { /* normal operation */ draw_shadedstrip(seq, background_col, x1, y1, x2, y2); @@ -741,6 +743,17 @@ static void draw_seq_strip(Scene *scene, ARegion *ar, Sequence *seq, int outline glDisable(GL_BLEND); } + if (!BKE_seqence_is_valid_check(seq)) { + glEnable(GL_POLYGON_STIPPLE); + + /* panic! */ + glColor4ub(255, 0, 0, 255); + glPolygonStipple(stipple_diag_stripes_pos); + glRectf(x1, y1, x2, y2); + + glDisable(GL_POLYGON_STIPPLE); + } + get_seq_color3ubv(scene, seq, col); if (G.moving && (seq->flag & SELECT)) { if (seq->flag & SEQ_OVERLAP) { |