bugfix [#20990] maker name don't show in render stamp

This commit is contained in:
Campbell Barton 2010-02-06 14:56:25 +00:00
parent eafdf42c24
commit bd0b26f7bb
4 changed files with 30 additions and 27 deletions

@ -68,6 +68,9 @@ int next_object(struct Scene *scene, int val, struct Base **base, struct Object
struct Object *scene_find_camera(struct Scene *sc); struct Object *scene_find_camera(struct Scene *sc);
struct Object *scene_find_camera_switch(struct Scene *scene); // DURIAN_CAMERA_SWITCH struct Object *scene_find_camera_switch(struct Scene *scene); // DURIAN_CAMERA_SWITCH
char *scene_find_marker_name(struct Scene *scene, int frame);
char *scene_find_last_marker_name(struct Scene *scene, int frame);
struct Base *scene_add_base(struct Scene *sce, struct Object *ob); struct Base *scene_add_base(struct Scene *sce, struct Object *ob);
void scene_deselect_all(struct Scene *sce); void scene_deselect_all(struct Scene *sce);
void scene_select_base(struct Scene *sce, struct Base *selbase); void scene_select_base(struct Scene *sce, struct Base *selbase);

@ -1011,9 +1011,9 @@ static void stampdata(Scene *scene, StampData *stamp_data, int do_prefix)
} }
if (scene->r.stamp & R_STAMP_MARKER) { if (scene->r.stamp & R_STAMP_MARKER) {
TimeMarker *marker = NULL; // XXX get_frame_marker(scene->r.cfra); char *name = scene_find_last_marker_name(scene, CFRA);
if (marker) strcpy(text, marker->name); if (name) strcpy(text, name);
else strcpy(text, "<none>"); else strcpy(text, "<none>");
if (do_prefix) sprintf(stamp_data->marker, "Marker %s", text); if (do_prefix) sprintf(stamp_data->marker, "Marker %s", text);

@ -732,26 +732,47 @@ Object *scene_find_camera_switch(Scene *scene)
} }
#endif #endif
static char *get_cfra_marker_name(Scene *scene) char *scene_find_marker_name(Scene *scene, int frame)
{ {
ListBase *markers= &scene->markers; ListBase *markers= &scene->markers;
TimeMarker *m1, *m2; TimeMarker *m1, *m2;
/* search through markers for match */ /* search through markers for match */
for (m1=markers->first, m2=markers->last; m1 && m2; m1=m1->next, m2=m2->prev) { for (m1=markers->first, m2=markers->last; m1 && m2; m1=m1->next, m2=m2->prev) {
if (m1->frame==CFRA) if (m1->frame==frame)
return m1->name; return m1->name;
if (m1 == m2) if (m1 == m2)
break; break;
if (m2->frame==CFRA) if (m2->frame==frame)
return m2->name; return m2->name;
} }
return NULL; return NULL;
} }
/* return the current marker for this frame,
we can have more then 1 marker per frame, this just returns the first :/ */
char *scene_find_last_marker_name(Scene *scene, int frame)
{
TimeMarker *marker, *best_marker = NULL;
int best_frame = -MAXFRAME*2;
for (marker= scene->markers.first; marker; marker= marker->next) {
if (marker->frame==frame) {
return marker;
}
if ( marker->frame > best_frame && marker->frame < frame) {
best_marker = marker;
best_frame = marker->frame;
}
}
return best_marker ? best_marker->name : NULL;
}
Base *scene_add_base(Scene *sce, Object *ob) Base *scene_add_base(Scene *sce, Object *ob)
{ {
Base *b= MEM_callocN(sizeof(*b), "scene_add_base"); Base *b= MEM_callocN(sizeof(*b), "scene_add_base");

@ -755,27 +755,6 @@ static void draw_viewport_name(ARegion *ar, View3D *v3d)
} }
} }
static char *get_cfra_marker_name(Scene *scene)
{
ListBase *markers= &scene->markers;
TimeMarker *m1, *m2;
/* search through markers for match */
for (m1=markers->first, m2=markers->last; m1 && m2; m1=m1->next, m2=m2->prev) {
if (m1->frame==CFRA)
return m1->name;
if (m1 == m2)
break;
if (m2->frame==CFRA)
return m2->name;
}
return NULL;
}
/* draw info beside axes in bottom left-corner: /* draw info beside axes in bottom left-corner:
* framenum, object name, bone name (if available), marker name (if available) * framenum, object name, bone name (if available), marker name (if available)
*/ */
@ -785,7 +764,7 @@ static void draw_selected_name(Scene *scene, Object *ob, View3D *v3d)
short offset=30; short offset=30;
/* get name of marker on current frame (if available) */ /* get name of marker on current frame (if available) */
markern= get_cfra_marker_name(scene); markern= scene_find_marker_name(scene, CFRA);
/* check if there is an object */ /* check if there is an object */
if(ob) { if(ob) {