/* add a new gp-layer and make it the active layer */ bGPDlayer *gpencil_layer_addnew(bGPdata *gpd, const char *name, int setactive) { bGPDlayer *gpl; /* check that list is ok */ if (gpd == NULL) return NULL; /* allocate memory for frame and add to end of list */ gpl = MEM_callocN(sizeof(bGPDlayer), "bGPDlayer"); /* add to datablock */ BLI_addtail(&gpd->layers, gpl); /* set basic settings */ copy_v4_v4(gpl->color, U.gpencil_new_layer_col); gpl->thickness = 3; /* auto-name */ BLI_strncpy(gpl->info, name, sizeof(gpl->info)); BLI_uniquename(&gpd->layers, gpl, DATA_("GP_Layer"), '.', offsetof(bGPDlayer, info), sizeof(gpl->info)); /* make this one the active one */ if (setactive) gpencil_layer_setactive(gpd, gpl); /* return layer */ return gpl; }
/* make layer active one after being clicked on */ static void gp_ui_activelayer_cb(bContext *C, void *gpd, void *gpl) { /* make sure the layer we want to remove is the active one */ gpencil_layer_setactive(gpd, gpl); WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL); }
static void rna_GPencil_active_layer_index_set(PointerRNA *ptr, int value) { bGPdata *gpd = (bGPdata *)ptr->id.data; bGPDlayer *gpl = BLI_findlink(&gpd->layers, value); gpencil_layer_setactive(gpd, gpl); }
/* delete 'active' layer */ static void gp_ui_dellayer_cb (bContext *C, void *gpd, void *gpl) { /* make sure the layer we want to remove is the active one */ gpencil_layer_setactive(gpd, gpl); gpencil_layer_delactive(gpd); WM_event_add_notifier(C, NC_SCREEN|ND_GPENCIL|NA_EDITED, NULL); // XXX please work! }