[Bf-blender-cvs] [f1f09b565e8] asset-greasepencil: GPencil: Select visible frame for preview image
Antonio Vazquez
noreply at git.blender.org
Sat Jul 24 12:12:34 CEST 2021
Commit: f1f09b565e83d18796d3337ae971a3549948310f
Author: Antonio Vazquez
Date: Sat Jul 24 12:12:25 2021 +0200
Branches: asset-greasepencil
https://developer.blender.org/rBf1f09b565e83d18796d3337ae971a3549948310f
GPencil: Select visible frame for preview image
The datablock must be in a frame inside the range to get a visible thumbnail.
===================================================================
M source/blender/blenkernel/BKE_gpencil.h
M source/blender/blenkernel/intern/gpencil.c
M source/blender/editors/gpencil/gpencil_asset.c
M source/blender/editors/render/render_preview.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 92e70b41e7b..406e6f35c02 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -171,6 +171,7 @@ struct bGPDcurve *BKE_gpencil_stroke_editcurve_new(const int tot_curve_points);
#define GPENCIL_STRENGTH_MIN 0.003f
bool BKE_gpencil_layer_is_editable(const struct bGPDlayer *gpl);
+void BKE_gpencil_frame_min_max(const struct bGPdata *gpd, int *r_min, int *r_max);
/* How gpencil_layer_getframe() should behave when there
* is no existing GP-Frame on the frame requested.
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 13a8d4f105f..67e1a6c17fc 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -3163,4 +3163,20 @@ void BKE_gpencil_frame_selected_hash(bGPdata *gpd, struct GHash *r_list)
}
}
+/* Get min and max frame number for all layers. */
+void BKE_gpencil_frame_min_max(const bGPdata *gpd, int *r_min, int *r_max)
+{
+ *r_min = INT_MAX;
+ *r_max = INT_MIN;
+ LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
+ LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) {
+ if (gpf->framenum < *r_min) {
+ *r_min = gpf->framenum;
+ }
+ if (gpf->framenum > *r_max) {
+ *r_max = gpf->framenum;
+ }
+ }
+ }
+}
/** \} */
diff --git a/source/blender/editors/gpencil/gpencil_asset.c b/source/blender/editors/gpencil/gpencil_asset.c
index 34b19a34822..e0edc6e449d 100644
--- a/source/blender/editors/gpencil/gpencil_asset.c
+++ b/source/blender/editors/gpencil/gpencil_asset.c
@@ -195,20 +195,6 @@ static bool gpencil_asset_generic_poll(bContext *C)
return ED_operator_view3d_active(C);
}
-/* Helper: Get lower frame number from asset strokes. */
-static int gpencil_asset_get_first_franum(const bGPdata *gpd)
-{
- int first_fra = INT_MAX;
- LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
- LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) {
- if (gpf->framenum < first_fra) {
- first_fra = gpf->framenum;
- }
- }
- }
- return first_fra;
-}
-
/* -------------------------------------------------------------------- */
/** \name Create Grease Pencil data block Asset operator
* \{ */
@@ -241,7 +227,6 @@ static bool gpencil_asset_create(const bContext *C,
const bool retime_frames)
{
Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
bool non_supported_feature = false;
/* Create a copy of selected data block. */
@@ -356,9 +341,8 @@ static bool gpencil_asset_create(const bContext *C,
strcpy(gpl_dst->info, "Asset_Layer");
}
- /* Ensure preview is done with first available frame. */
- const int first_franum = gpencil_asset_get_first_franum(gpd);
- CFRA = first_franum;
+ int f_min, f_max;
+ BKE_gpencil_frame_min_max(gpd, &f_min, &f_max);
/* Mark as asset. */
ED_asset_mark_id(C, &gpd->id);
@@ -367,7 +351,7 @@ static bool gpencil_asset_create(const bContext *C,
if (retime_frames) {
LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) {
- gpf->framenum -= first_franum - 1;
+ gpf->framenum -= f_min - 1;
}
}
}
diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c
index b248d73411f..40b7751fc6c 100644
--- a/source/blender/editors/render/render_preview.c
+++ b/source/blender/editors/render/render_preview.c
@@ -62,6 +62,7 @@
#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_global.h"
+#include "BKE_gpencil.h"
#include "BKE_icons.h"
#include "BKE_idprop.h"
#include "BKE_image.h"
@@ -1017,12 +1018,20 @@ static void gpencil_preview_render(IconPreview *preview, IconPreviewSize *previe
BLI_assert(preview->id_copy && (preview->id_copy != preview->id));
+ /* Find the frame number to make preview visible. */
+ int f_min, f_max;
+ bGPdata *gpd = (bGPdata *)preview->id_copy;
+ BKE_gpencil_frame_min_max(gpd, &f_min, &f_max);
+ const int framenum = ((preview->scene->r.cfra < f_min) || (preview->scene->r.cfra > f_max)) ?
+ f_min :
+ preview->scene->r.cfra;
+
struct ObjectPreviewData preview_data = {
.pr_main = preview_main,
/* Act on a copy. */
.object = NULL,
.datablock = (ID *)preview->id_copy,
- .cfra = preview->scene->r.cfra,
+ .cfra = framenum,
.sizex = preview_sized->sizex,
.sizey = preview_sized->sizey,
};
More information about the Bf-blender-cvs
mailing list