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_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);
void scene_deselect_all(struct Scene *sce);
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) {
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>");
if (do_prefix) sprintf(stamp_data->marker, "Marker %s", text);

@ -732,26 +732,47 @@ Object *scene_find_camera_switch(Scene *scene)
}
#endif
static char *get_cfra_marker_name(Scene *scene)
char *scene_find_marker_name(Scene *scene, int frame)
{
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)
if (m1->frame==frame)
return m1->name;
if (m1 == m2)
break;
if (m2->frame==CFRA)
if (m2->frame==frame)
return m2->name;
}
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 *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:
* 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;
/* 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 */
if(ob) {