void BKE_brush_make_local(Brush *brush) { /* - only lib users: do nothing * - only local users: set flag * - mixed: make copy */ Main *bmain = G.main; Scene *scene; int is_local = FALSE, is_lib = FALSE; if (brush->id.lib == NULL) return; if (brush->clone.image) { /* special case: ima always local immediately. Clone image should only * have one user anyway. */ id_clear_lib_data(bmain, &brush->clone.image->id); extern_local_brush(brush); } for (scene = bmain->scene.first; scene && ELEM(0, is_lib, is_local); scene = scene->id.next) { if (BKE_paint_brush(&scene->toolsettings->imapaint.paint) == brush) { if (scene->id.lib) is_lib = TRUE; else is_local = TRUE; } } if (is_local && is_lib == FALSE) { id_clear_lib_data(bmain, &brush->id); extern_local_brush(brush); /* enable fake user by default */ if (!(brush->id.flag & LIB_FAKEUSER)) { brush->id.flag |= LIB_FAKEUSER; brush->id.us++; } } else if (is_local && is_lib) { Brush *brush_new = BKE_brush_copy(brush); brush_new->id.us = 1; /* only keep fake user */ brush_new->id.flag |= LIB_FAKEUSER; /* Remap paths of new ID using old library as base. */ BKE_id_lib_local_paths(bmain, brush->id.lib, &brush_new->id); for (scene = bmain->scene.first; scene; scene = scene->id.next) { if (BKE_paint_brush(&scene->toolsettings->imapaint.paint) == brush) { if (scene->id.lib == NULL) { BKE_paint_brush_set(&scene->toolsettings->imapaint.paint, brush_new); } } } } }
void make_local_brush(Brush *brush) { /* - only lib users: do nothing * - only local users: set flag * - mixed: make copy */ Main *bmain= G.main; Scene *scene; int local= 0, lib= 0; if(brush->id.lib==NULL) return; if(brush->clone.image) { /* special case: ima always local immediately */ brush->clone.image->id.lib= NULL; brush->clone.image->id.flag= LIB_LOCAL; new_id(&bmain->brush, (ID *)brush->clone.image, NULL); extern_local_brush(brush); } for(scene= bmain->scene.first; scene && ELEM(0, lib, local); scene=scene->id.next) { if(paint_brush(&scene->toolsettings->imapaint.paint)==brush) { if(scene->id.lib) lib= 1; else local= 1; } } if(local && lib==0) { brush->id.lib= NULL; brush->id.flag= LIB_LOCAL; new_id(&bmain->brush, (ID *)brush, NULL); extern_local_brush(brush); /* enable fake user by default */ if (!(brush->id.flag & LIB_FAKEUSER)) { brush->id.flag |= LIB_FAKEUSER; brush->id.us++; } } else if(local && lib) { Brush *brushn= copy_brush(brush); brushn->id.us= 1; /* only keep fake user */ brushn->id.flag |= LIB_FAKEUSER; for(scene= bmain->scene.first; scene; scene=scene->id.next) { if(paint_brush(&scene->toolsettings->imapaint.paint)==brush) { if(scene->id.lib==NULL) { paint_brush_set(&scene->toolsettings->imapaint.paint, brushn); } } } } }