Cleanup: GreasePencil: Move to IDTypeInfo and remove unused BKE API.

This commit is contained in:
2020-03-09 17:51:49 +01:00
parent c010290e75
commit 3e9dbe7f62
6 changed files with 56 additions and 46 deletions

View File

@@ -112,15 +112,12 @@ struct bGPDlayer *BKE_gpencil_layer_duplicate(const struct bGPDlayer *gpl_src);
void BKE_gpencil_frame_copy_strokes(struct bGPDframe *gpf_src, struct bGPDframe *gpf_dst); void BKE_gpencil_frame_copy_strokes(struct bGPDframe *gpf_src, struct bGPDframe *gpf_dst);
struct bGPDstroke *BKE_gpencil_stroke_duplicate(struct bGPDstroke *gps_src, const bool dup_points); struct bGPDstroke *BKE_gpencil_stroke_duplicate(struct bGPDstroke *gps_src, const bool dup_points);
void BKE_gpencil_copy_data(struct bGPdata *gpd_dst, const struct bGPdata *gpd_src, const int flag);
struct bGPdata *BKE_gpencil_copy(struct Main *bmain, const struct bGPdata *gpd); struct bGPdata *BKE_gpencil_copy(struct Main *bmain, const struct bGPdata *gpd);
struct bGPdata *BKE_gpencil_data_duplicate(struct Main *bmain, struct bGPdata *BKE_gpencil_data_duplicate(struct Main *bmain,
const struct bGPdata *gpd, const struct bGPdata *gpd,
bool internal_copy); bool internal_copy);
void BKE_gpencil_make_local(struct Main *bmain, struct bGPdata *gpd, const int flags);
void BKE_gpencil_frame_delete_laststroke(struct bGPDlayer *gpl, struct bGPDframe *gpf); void BKE_gpencil_frame_delete_laststroke(struct bGPDlayer *gpl, struct bGPDframe *gpf);
/* materials */ /* materials */

View File

@@ -150,7 +150,7 @@ extern IDTypeInfo IDType_ID_AC;
extern IDTypeInfo IDType_ID_NT; extern IDTypeInfo IDType_ID_NT;
extern IDTypeInfo IDType_ID_BR; extern IDTypeInfo IDType_ID_BR;
extern IDTypeInfo IDType_ID_PA; extern IDTypeInfo IDType_ID_PA;
// extern IDTypeInfo IDType_ID_GD; extern IDTypeInfo IDType_ID_GD;
extern IDTypeInfo IDType_ID_WM; extern IDTypeInfo IDType_ID_WM;
extern IDTypeInfo IDType_ID_MC; extern IDTypeInfo IDType_ID_MC;
extern IDTypeInfo IDType_ID_MSK; extern IDTypeInfo IDType_ID_MSK;

View File

@@ -59,6 +59,7 @@
#include "BKE_deform.h" #include "BKE_deform.h"
#include "BKE_gpencil.h" #include "BKE_gpencil.h"
#include "BKE_icons.h" #include "BKE_icons.h"
#include "BKE_idtype.h"
#include "BKE_image.h" #include "BKE_image.h"
#include "BKE_lib_id.h" #include "BKE_lib_id.h"
#include "BKE_main.h" #include "BKE_main.h"
@@ -73,6 +74,54 @@
static CLG_LogRef LOG = {"bke.gpencil"}; static CLG_LogRef LOG = {"bke.gpencil"};
static void greasepencil_copy_data(Main *UNUSED(bmain),
ID *id_dst,
const ID *id_src,
const int UNUSED(flag))
{
bGPdata *gpd_dst = (bGPdata *)id_dst;
const bGPdata *gpd_src = (const bGPdata *)id_src;
/* duplicate material array */
if (gpd_src->mat) {
gpd_dst->mat = MEM_dupallocN(gpd_src->mat);
}
/* copy layers */
BLI_listbase_clear(&gpd_dst->layers);
LISTBASE_FOREACH (bGPDlayer *, gpl_src, &gpd_src->layers) {
/* make a copy of source layer and its data */
/* TODO here too could add unused flags... */
bGPDlayer *gpl_dst = BKE_gpencil_layer_duplicate(gpl_src);
BLI_addtail(&gpd_dst->layers, gpl_dst);
}
}
static void greasepencil_free_data(ID *id)
{
/* Really not ideal, but for now will do... In theory custom behaviors like not freeing cache
* should be handled through specific API, and not be part of the generic one. */
BKE_gpencil_free((bGPdata *)id, true);
}
IDTypeInfo IDType_ID_GD = {
.id_code = ID_GD,
.id_filter = FILTER_ID_GD,
.main_listbase_index = INDEX_ID_GD,
.struct_size = sizeof(bGPdata),
.name = "GPencil",
.name_plural = "grease_pencils",
.translation_context = BLT_I18NCONTEXT_ID_GPENCIL,
.flags = 0,
.init_data = NULL,
.copy_data = greasepencil_copy_data,
.free_data = greasepencil_free_data,
.make_local = NULL,
};
/* ************************************************** */ /* ************************************************** */
/* Draw Engine */ /* Draw Engine */
@@ -671,35 +720,6 @@ bGPDlayer *BKE_gpencil_layer_duplicate(const bGPDlayer *gpl_src)
return gpl_dst; return gpl_dst;
} }
/**
* Only copy internal data of GreasePencil ID from source
* to already allocated/initialized destination.
* You probably never want to use that directly,
* use #BKE_id_copy or #BKE_id_copy_ex for typical needs.
*
* WARNING! This function will not handle ID user count!
*
* \param flag: Copying options (see BKE_lib_id.h's LIB_ID_COPY_... flags for more).
*/
void BKE_gpencil_copy_data(bGPdata *gpd_dst, const bGPdata *gpd_src, const int UNUSED(flag))
{
/* duplicate material array */
if (gpd_src->mat) {
gpd_dst->mat = MEM_dupallocN(gpd_src->mat);
}
/* copy layers */
BLI_listbase_clear(&gpd_dst->layers);
LISTBASE_FOREACH (bGPDlayer *, gpl_src, &gpd_src->layers) {
/* make a copy of source layer and its data */
/* TODO here too could add unused flags... */
bGPDlayer *gpl_dst = BKE_gpencil_layer_duplicate(gpl_src);
BLI_addtail(&gpd_dst->layers, gpl_dst);
}
}
/* Standard API to make a copy of GP datablock, separate from copying its data */ /* Standard API to make a copy of GP datablock, separate from copying its data */
bGPdata *BKE_gpencil_copy(Main *bmain, const bGPdata *gpd) bGPdata *BKE_gpencil_copy(Main *bmain, const bGPdata *gpd)
{ {
@@ -733,17 +753,12 @@ bGPdata *BKE_gpencil_data_duplicate(Main *bmain, const bGPdata *gpd_src, bool in
} }
/* Copy internal data (layers, etc.) */ /* Copy internal data (layers, etc.) */
BKE_gpencil_copy_data(gpd_dst, gpd_src, 0); greasepencil_copy_data(bmain, &gpd_dst->id, &gpd_src->id, 0);
/* return new */ /* return new */
return gpd_dst; return gpd_dst;
} }
void BKE_gpencil_make_local(Main *bmain, bGPdata *gpd, const int flags)
{
BKE_lib_id_make_local_generic(bmain, &gpd->id, flags);
}
/* ************************************************** */ /* ************************************************** */
/* GP Stroke API */ /* GP Stroke API */

View File

@@ -77,7 +77,7 @@ static void id_type_init(void)
INIT_TYPE(ID_NT); INIT_TYPE(ID_NT);
INIT_TYPE(ID_BR); INIT_TYPE(ID_BR);
INIT_TYPE(ID_PA); INIT_TYPE(ID_PA);
// INIT_TYPE(ID_GD); INIT_TYPE(ID_GD);
INIT_TYPE(ID_WM); INIT_TYPE(ID_WM);
INIT_TYPE(ID_MC); INIT_TYPE(ID_MC);
INIT_TYPE(ID_MSK); INIT_TYPE(ID_MSK);

View File

@@ -536,9 +536,7 @@ bool BKE_lib_id_make_local(Main *bmain, ID *id, const bool test, const int flags
BLI_assert(0); BLI_assert(0);
return true; return true;
case ID_GD: case ID_GD:
if (!test) { BLI_assert(0);
BKE_gpencil_make_local(bmain, (bGPdata *)id, flags);
}
return true; return true;
case ID_MC: case ID_MC:
BLI_assert(0); BLI_assert(0);
@@ -740,7 +738,7 @@ bool BKE_id_copy_ex(Main *bmain, const ID *id, ID **r_newid, const int flag)
BLI_assert(0); BLI_assert(0);
break; break;
case ID_GD: case ID_GD:
BKE_gpencil_copy_data((bGPdata *)*r_newid, (bGPdata *)id, flag); BLI_assert(0);
break; break;
case ID_MC: case ID_MC:
BLI_assert(0); BLI_assert(0);
@@ -1368,7 +1366,7 @@ void BKE_libblock_init_empty(ID *id)
BLI_assert(0); BLI_assert(0);
break; break;
case ID_GD: case ID_GD:
/* Nothing to do. */ BLI_assert(0);
break; break;
case ID_MSK: case ID_MSK:
BLI_assert(0); BLI_assert(0);

View File

@@ -220,7 +220,7 @@ void BKE_libblock_free_datablock(ID *id, const int UNUSED(flag))
BLI_assert(0); BLI_assert(0);
break; break;
case ID_GD: case ID_GD:
BKE_gpencil_free((bGPdata *)id, true); BLI_assert(0);
break; break;
case ID_MC: case ID_MC:
BLI_assert(0); BLI_assert(0);