static VFontData *vfont_get_data(Main *bmain, VFont *vfont) { if (vfont == NULL) { return NULL; } /* And then set the data */ if (!vfont->data) { PackedFile *pf; if (BKE_vfont_is_builtin(vfont)) { pf = get_builtin_packedfile(); } else { if (vfont->packedfile) { pf = vfont->packedfile; /* We need to copy a tmp font to memory unless it is already there */ if (vfont->temp_pf == NULL) { vfont->temp_pf = dupPackedFile(pf); } } else { pf = newPackedFile(NULL, vfont->name, ID_BLEND_PATH(bmain, &vfont->id)); if (vfont->temp_pf == NULL) { vfont->temp_pf = newPackedFile(NULL, vfont->name, ID_BLEND_PATH(bmain, &vfont->id)); } } if (!pf) { printf("Font file doesn't exist: %s\n", vfont->name); /* DON'T DO THIS * missing file shouldn't modifty path! - campbell */ #if 0 strcpy(vfont->name, FO_BUILTIN_NAME); #endif pf = get_builtin_packedfile(); } } if (pf) { vfont->data = BLI_vfontdata_from_freetypefont(pf); if (pf != vfont->packedfile) { freePackedFile(pf); } } } return vfont->data; }
/** * Only copy internal data of Sound ID from source to already allocated/initialized destination. * You probably nerver want to use that directly, use 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_library.h's LIB_ID_COPY_... flags for more). */ void BKE_sound_copy_data(Main *bmain, bSound *sound_dst, const bSound *UNUSED(sound_src), const int UNUSED(flag)) { sound_dst->handle = NULL; sound_dst->cache = NULL; sound_dst->waveform = NULL; sound_dst->playback_handle = NULL; sound_dst->spinlock = NULL; /* Think this is OK? Otherwise, easy to create new spinlock here... */ /* Just to be sure, should not have any value actually after reading time. */ sound_dst->ipo = NULL; sound_dst->newpackedfile = NULL; if (sound_dst->packedfile) { sound_dst->packedfile = dupPackedFile(sound_dst->packedfile); } /* Initialize whole runtime (audaspace) stuff. */ BKE_sound_load(bmain, sound_dst); }
static VFontData *vfont_get_data(Main *bmain, VFont *vfont) { if (vfont == NULL) { return NULL; } /* And then set the data */ if (!vfont->data) { PackedFile *pf; BLI_mutex_lock(&vfont_mutex); if (vfont->data) { /* Check data again, since it might have been already * initialized from other thread (previous check is * not accurate or threading, just prevents unneeded * lock if all the data is here for sure). */ BLI_mutex_unlock(&vfont_mutex); return vfont->data; } if (BKE_vfont_is_builtin(vfont)) { pf = get_builtin_packedfile(); } else { if (vfont->packedfile) { pf = vfont->packedfile; /* We need to copy a tmp font to memory unless it is already there */ if (vfont->temp_pf == NULL) { vfont->temp_pf = dupPackedFile(pf); } } else { pf = newPackedFile(NULL, vfont->name, ID_BLEND_PATH(bmain, &vfont->id)); if (vfont->temp_pf == NULL) { vfont->temp_pf = newPackedFile(NULL, vfont->name, ID_BLEND_PATH(bmain, &vfont->id)); } } if (!pf) { printf("Font file doesn't exist: %s\n", vfont->name); /* DON'T DO THIS * missing file shouldn't modifty path! - campbell */ #if 0 strcpy(vfont->name, FO_BUILTIN_NAME); #endif pf = get_builtin_packedfile(); } } if (pf) { vfont->data = BLI_vfontdata_from_freetypefont(pf); if (pf != vfont->packedfile) { freePackedFile(pf); } } BLI_mutex_unlock(&vfont_mutex); } return vfont->data; }