Refactor: move Ipo .blend I/O to IDTypeInfo callbacks

This commit is contained in:
Jacques Lucke 2020-11-06 18:33:33 +01:00
parent 638913a3c0
commit 1762d5f43a
2 changed files with 71 additions and 73 deletions

View File

@ -52,6 +52,7 @@
#include "BLI_blenlib.h"
#include "BLI_dynstr.h"
#include "BLI_endian_switch.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
@ -75,6 +76,8 @@
#include "SEQ_sequencer.h"
#include "BLO_read_write.h"
#ifdef WIN32
# include "BLI_math_base.h" /* M_PI */
#endif
@ -110,6 +113,69 @@ static void ipo_free_data(ID *id)
}
}
static void ipo_blend_read_data(BlendDataReader *reader, ID *id)
{
Ipo *ipo = (Ipo *)id;
BLO_read_list(reader, &(ipo->curve));
LISTBASE_FOREACH (IpoCurve *, icu, &ipo->curve) {
BLO_read_data_address(reader, &icu->bezt);
BLO_read_data_address(reader, &icu->bp);
BLO_read_data_address(reader, &icu->driver);
/* Undo generic endian switching. */
if (BLO_read_requires_endian_switch(reader)) {
BLI_endian_switch_int16(&icu->blocktype);
if (icu->driver != NULL) {
/* Undo generic endian switching. */
if (BLO_read_requires_endian_switch(reader)) {
BLI_endian_switch_int16(&icu->blocktype);
if (icu->driver != NULL) {
BLI_endian_switch_int16(&icu->driver->blocktype);
}
}
}
/* Undo generic endian switching. */
if (BLO_read_requires_endian_switch(reader)) {
BLI_endian_switch_int16(&ipo->blocktype);
if (icu->driver != NULL) {
BLI_endian_switch_int16(&icu->driver->blocktype);
}
}
}
}
/* Undo generic endian switching. */
if (BLO_read_requires_endian_switch(reader)) {
BLI_endian_switch_int16(&ipo->blocktype);
}
}
static void ipo_blend_read_lib(BlendLibReader *reader, ID *id)
{
Ipo *ipo = (Ipo *)id;
LISTBASE_FOREACH (IpoCurve *, icu, &ipo->curve) {
if (icu->driver) {
BLO_read_id_address(reader, ipo->id.lib, &icu->driver->ob);
}
}
}
static void ipo_blend_read_expand(BlendExpander *expander, ID *id)
{
Ipo *ipo = (Ipo *)id;
LISTBASE_FOREACH (IpoCurve *, icu, &ipo->curve) {
if (icu->driver) {
BLO_expand(expander, icu->driver->ob);
}
}
}
IDTypeInfo IDType_ID_IP = {
.id_code = ID_IP,
.id_filter = 0,
@ -129,9 +195,9 @@ IDTypeInfo IDType_ID_IP = {
.foreach_cache = NULL,
.blend_write = NULL,
.blend_read_data = NULL,
.blend_read_lib = NULL,
.blend_read_expand = NULL,
.blend_read_data = ipo_blend_read_data,
.blend_read_lib = ipo_blend_read_lib,
.blend_read_expand = ipo_blend_read_expand,
.blend_read_undo_preserve = NULL,
};

View File

@ -2485,56 +2485,6 @@ static void direct_link_id_common(
/** \name Read Animation (legacy for version patching)
* \{ */
/* XXX deprecated - old animation system */
static void lib_link_ipo(BlendLibReader *reader, Ipo *ipo)
{
LISTBASE_FOREACH (IpoCurve *, icu, &ipo->curve) {
if (icu->driver) {
BLO_read_id_address(reader, ipo->id.lib, &icu->driver->ob);
}
}
}
/* XXX deprecated - old animation system */
static void direct_link_ipo(BlendDataReader *reader, Ipo *ipo)
{
BLO_read_list(reader, &(ipo->curve));
LISTBASE_FOREACH (IpoCurve *, icu, &ipo->curve) {
BLO_read_data_address(reader, &icu->bezt);
BLO_read_data_address(reader, &icu->bp);
BLO_read_data_address(reader, &icu->driver);
/* Undo generic endian switching. */
if (BLO_read_requires_endian_switch(reader)) {
BLI_endian_switch_int16(&icu->blocktype);
if (icu->driver != NULL) {
/* Undo generic endian switching. */
if (BLO_read_requires_endian_switch(reader)) {
BLI_endian_switch_int16(&icu->blocktype);
if (icu->driver != NULL) {
BLI_endian_switch_int16(&icu->driver->blocktype);
}
}
}
/* Undo generic endian switching. */
if (BLO_read_requires_endian_switch(reader)) {
BLI_endian_switch_int16(&ipo->blocktype);
if (icu->driver != NULL) {
BLI_endian_switch_int16(&icu->driver->blocktype);
}
}
}
}
/* Undo generic endian switching. */
if (BLO_read_requires_endian_switch(reader)) {
BLI_endian_switch_int16(&ipo->blocktype);
}
}
/** \} */
/* -------------------------------------------------------------------- */
@ -3357,12 +3307,10 @@ static bool direct_link_id(FileData *fd, Main *main, const int tag, ID *id, ID *
case ID_SCR:
success = direct_link_screen(&reader, (bScreen *)id);
break;
case ID_IP:
direct_link_ipo(&reader, (Ipo *)id);
break;
case ID_LI:
direct_link_library(fd, (Library *)id, main);
break;
case ID_IP:
case ID_OB:
case ID_SCE:
case ID_WM:
@ -3980,13 +3928,10 @@ static void lib_link_all(FileData *fd, Main *bmain)
* Please keep order of entries in that switch matching that order, it's easier to quickly see
* whether something is wrong then. */
switch (GS(id->name)) {
case ID_IP:
/* XXX deprecated... still needs to be maintained for version patches still. */
lib_link_ipo(&reader, (Ipo *)id);
break;
case ID_LI:
lib_link_library(&reader, (Library *)id); /* Only init users. */
break;
case ID_IP:
case ID_OB:
case ID_SCE:
case ID_WM:
@ -4601,16 +4546,6 @@ static void expand_doit_library(void *fdhandle, Main *mainvar, void *old)
static BLOExpandDoitCallback expand_doit;
// XXX deprecated - old animation system
static void expand_ipo(BlendExpander *expander, Ipo *ipo)
{
LISTBASE_FOREACH (IpoCurve *, icu, &ipo->curve) {
if (icu->driver) {
BLO_expand(expander, icu->driver->ob);
}
}
}
static void expand_id(BlendExpander *expander, ID *id);
static void expand_id_embedded_id(BlendExpander *expander, ID *id)
@ -4691,9 +4626,6 @@ void BLO_expand_main(void *fdhandle, Main *mainvar)
}
switch (GS(id->name)) {
case ID_IP:
expand_ipo(&expander, (Ipo *)id); /* XXX deprecated - old animation system */
break;
default:
break;
}