Fix T48830: Outliner draw crash, missing NULL check

Fix from @cheleb
This commit is contained in:
Campbell Barton 2016-07-12 14:39:39 +10:00
parent 0708b9aba8
commit b8f217ef21

@ -1240,106 +1240,106 @@ static void tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeSto
UI_icon_draw(x, y, ICON_DOT); break; UI_icon_draw(x, y, ICON_DOT); break;
} }
} }
else if (GS(tselem->id->name) == ID_OB) { else if (tselem->id) {
Object *ob = (Object *)tselem->id; if (GS(tselem->id->name) == ID_OB) {
switch (ob->type) { Object *ob = (Object *)tselem->id;
case OB_LAMP: switch (ob->type) {
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_LAMP); break; case OB_LAMP:
case OB_MESH: tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_LAMP); break;
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_MESH); break; case OB_MESH:
case OB_CAMERA: tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_MESH); break;
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_CAMERA); break; case OB_CAMERA:
case OB_CURVE: tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_CAMERA); break;
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_CURVE); break; case OB_CURVE:
case OB_MBALL: tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_CURVE); break;
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_META); break; case OB_MBALL:
case OB_LATTICE: tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_META); break;
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_LATTICE); break; case OB_LATTICE:
case OB_ARMATURE: tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_LATTICE); break;
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_ARMATURE); break; case OB_ARMATURE:
case OB_FONT: tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_ARMATURE); break;
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_FONT); break; case OB_FONT:
case OB_SURF: tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_FONT); break;
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_SURFACE); break; case OB_SURF:
case OB_SPEAKER: tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_SURFACE); break;
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_SPEAKER); break; case OB_SPEAKER:
case OB_EMPTY: tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_SPEAKER); break;
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_EMPTY); break; case OB_EMPTY:
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_OB_EMPTY); break;
}
}
else {
switch (GS(tselem->id->name)) {
case ID_SCE:
tselem_draw_icon_uibut(&arg, ICON_SCENE_DATA); break;
case ID_ME:
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_MESH); break;
case ID_CU:
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_CURVE); break;
case ID_MB:
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_META); break;
case ID_LT:
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_LATTICE); break;
case ID_LA:
{
Lamp *la = (Lamp *)tselem->id;
switch (la->type) {
case LA_LOCAL:
tselem_draw_icon_uibut(&arg, ICON_LAMP_POINT); break;
case LA_SUN:
tselem_draw_icon_uibut(&arg, ICON_LAMP_SUN); break;
case LA_SPOT:
tselem_draw_icon_uibut(&arg, ICON_LAMP_SPOT); break;
case LA_HEMI:
tselem_draw_icon_uibut(&arg, ICON_LAMP_HEMI); break;
case LA_AREA:
tselem_draw_icon_uibut(&arg, ICON_LAMP_AREA); break;
default:
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_LAMP); break;
}
break;
} }
case ID_MA: }
tselem_draw_icon_uibut(&arg, ICON_MATERIAL_DATA); break; else {
case ID_TE: switch (GS(tselem->id->name)) {
tselem_draw_icon_uibut(&arg, ICON_TEXTURE_DATA); break; case ID_SCE:
case ID_IM: tselem_draw_icon_uibut(&arg, ICON_SCENE_DATA); break;
tselem_draw_icon_uibut(&arg, ICON_IMAGE_DATA); break; case ID_ME:
case ID_SPK: tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_MESH); break;
case ID_SO: case ID_CU:
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_SPEAKER); break; tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_CURVE); break;
case ID_AR: case ID_MB:
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_ARMATURE); break; tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_META); break;
case ID_CA: case ID_LT:
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_CAMERA); break; tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_LATTICE); break;
case ID_KE: case ID_LA:
tselem_draw_icon_uibut(&arg, ICON_SHAPEKEY_DATA); break; {
case ID_WO: Lamp *la = (Lamp *)tselem->id;
tselem_draw_icon_uibut(&arg, ICON_WORLD_DATA); break; switch (la->type) {
case ID_AC: case LA_LOCAL:
tselem_draw_icon_uibut(&arg, ICON_ACTION); break; tselem_draw_icon_uibut(&arg, ICON_LAMP_POINT); break;
case ID_NLA: case LA_SUN:
tselem_draw_icon_uibut(&arg, ICON_NLA); break; tselem_draw_icon_uibut(&arg, ICON_LAMP_SUN); break;
case ID_TXT: case LA_SPOT:
tselem_draw_icon_uibut(&arg, ICON_SCRIPT); break; tselem_draw_icon_uibut(&arg, ICON_LAMP_SPOT); break;
case ID_GR: case LA_HEMI:
tselem_draw_icon_uibut(&arg, ICON_GROUP); break; tselem_draw_icon_uibut(&arg, ICON_LAMP_HEMI); break;
case ID_LI: case LA_AREA:
if (tselem->id->tag & LIB_TAG_MISSING) { tselem_draw_icon_uibut(&arg, ICON_LAMP_AREA); break;
tselem_draw_icon_uibut(&arg, ICON_LIBRARY_DATA_BROKEN); default:
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_LAMP); break;
}
break;
} }
else if (((Library *)tselem->id)->parent) { case ID_MA:
tselem_draw_icon_uibut(&arg, ICON_LIBRARY_DATA_INDIRECT); tselem_draw_icon_uibut(&arg, ICON_MATERIAL_DATA); break;
} case ID_TE:
else { tselem_draw_icon_uibut(&arg, ICON_TEXTURE_DATA); break;
tselem_draw_icon_uibut(&arg, ICON_LIBRARY_DATA_DIRECT); case ID_IM:
} tselem_draw_icon_uibut(&arg, ICON_IMAGE_DATA); break;
break; case ID_SPK:
case ID_LS: case ID_SO:
tselem_draw_icon_uibut(&arg, ICON_LINE_DATA); break; tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_SPEAKER); break;
case ID_GD: case ID_AR:
tselem_draw_icon_uibut(&arg, ICON_GREASEPENCIL); break; tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_ARMATURE); break;
case ID_CA:
tselem_draw_icon_uibut(&arg, ICON_OUTLINER_DATA_CAMERA); break;
case ID_KE:
tselem_draw_icon_uibut(&arg, ICON_SHAPEKEY_DATA); break;
case ID_WO:
tselem_draw_icon_uibut(&arg, ICON_WORLD_DATA); break;
case ID_AC:
tselem_draw_icon_uibut(&arg, ICON_ACTION); break;
case ID_NLA:
tselem_draw_icon_uibut(&arg, ICON_NLA); break;
case ID_TXT:
tselem_draw_icon_uibut(&arg, ICON_SCRIPT); break;
case ID_GR:
tselem_draw_icon_uibut(&arg, ICON_GROUP); break;
case ID_LI:
if (tselem->id->tag & LIB_TAG_MISSING) {
tselem_draw_icon_uibut(&arg, ICON_LIBRARY_DATA_BROKEN);
}
else if (((Library *)tselem->id)->parent) {
tselem_draw_icon_uibut(&arg, ICON_LIBRARY_DATA_INDIRECT);
}
else {
tselem_draw_icon_uibut(&arg, ICON_LIBRARY_DATA_DIRECT);
}
break;
case ID_LS:
tselem_draw_icon_uibut(&arg, ICON_LINE_DATA); break;
case ID_GD:
tselem_draw_icon_uibut(&arg, ICON_GREASEPENCIL); break;
}
} }
} }
} }