From e58b6a3279f36377d35146810ebcc0c8335c22de Mon Sep 17 00:00:00 2001 From: Pratik Borhade Date: Fri, 7 Feb 2025 10:56:32 +0100 Subject: [PATCH] Fix #134152: Grease Pencil: Keyframe color missing in viewport text overlays Use `TH_TIME_GP_KEYFRAME` theme to color the object name in viewport when there are any keyframes on any layer. Pull Request: https://projects.blender.org/blender/blender/pulls/134161 --- .../editors/space_view3d/view3d_draw.cc | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/source/blender/editors/space_view3d/view3d_draw.cc b/source/blender/editors/space_view3d/view3d_draw.cc index 28089378a0e..c4a2e209cb7 100644 --- a/source/blender/editors/space_view3d/view3d_draw.cc +++ b/source/blender/editors/space_view3d/view3d_draw.cc @@ -24,6 +24,7 @@ #include "BKE_context.hh" #include "BKE_customdata.hh" #include "BKE_global.hh" +#include "BKE_grease_pencil.hh" #include "BKE_image.hh" #include "BKE_key.hh" #include "BKE_layer.hh" @@ -1322,6 +1323,22 @@ static void draw_viewport_name(ARegion *region, View3D *v3d, int xoffset, int *y BLF_draw_default(xoffset, *yoffset, 0.0f, name, sizeof(tmpstr)); } +static bool is_grease_pencil_with_layer_keyframe(const Object &ob) +{ + if (ob.type != OB_GREASE_PENCIL) { + return false; + } + + using namespace blender::bke::greasepencil; + const GreasePencil &grease_pencil = *static_cast(ob.data); + for (const Layer *layer : grease_pencil.layers()) { + if (!layer->frames().is_empty()) { + return true; + } + } + return false; +} + /** * Draw info beside axes in top-left corner: * frame-number, collection, object name, bone name (if available), marker name (if available). @@ -1424,6 +1441,10 @@ static void draw_selected_name( } /* color depends on whether there is a keyframe */ + if (is_grease_pencil_with_layer_keyframe(*ob)) { + UI_FontThemeColor(font_id, TH_TIME_GP_KEYFRAME); + } + if (blender::animrig::id_frame_has_keyframe((ID *)ob, /* BKE_scene_ctime_get(scene) */ float(cfra))) {