Merge branch 'master' into blender2.8
authorCampbell Barton <ideasman42@gmail.com>
Mon, 7 May 2018 15:54:10 +0000 (17:54 +0200)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 7 May 2018 15:54:10 +0000 (17:54 +0200)
1  2 
source/blender/makesrna/intern/rna_ID.c
source/blender/makesrna/intern/rna_image.c

index a07e43162c23bc5d8a177530e07ea9b83162ed37,7357712aaef03f0b242a150a4278c8dcd1dba0c8..8ff46d4d17a4efd4e1ad7efb699a91bf2ebaeb98
@@@ -33,6 -33,7 +33,7 @@@
  #include "DNA_object_types.h"
  
  #include "BLI_utildefines.h"
+ #include "BLI_math_base.h"
  
  #include "BKE_icons.h"
  #include "BKE_object.h"
@@@ -74,7 -75,6 +75,7 @@@ const EnumPropertyItem rna_enum_id_type
        {ID_PC, "PAINTCURVE", ICON_CURVE_BEZCURVE, "Paint Curve", ""},
        {ID_PAL, "PALETTE", ICON_COLOR, "Palette", ""},
        {ID_PA, "PARTICLE", ICON_PARTICLE_DATA, "Particle", ""},
 +      {ID_LT, "LIGHT_PROBE", ICON_RADIO, "Light Probe", ""},
        {ID_SCE, "SCENE", ICON_SCENE_DATA, "Scene", ""},
        {ID_SCR, "SCREEN", ICON_SPLITSCREEN, "Screen", ""},
        {ID_SO, "SOUND", ICON_PLAY_AUDIO, "Sound", ""},
@@@ -83,7 -83,6 +84,7 @@@
        {ID_TE, "TEXTURE", ICON_TEXTURE_DATA, "Texture", ""},
        {ID_WM, "WINDOWMANAGER", ICON_FULLSCREEN, "Window Manager", ""},
        {ID_WO, "WORLD", ICON_WORLD_DATA, "World", ""},
 +      {ID_WS, "WORKSPACE", ICON_NONE, "Workspace", ""},
        {0, NULL, 0, NULL, NULL}
  };
  
  #include "BKE_idprop.h"
  #include "BKE_library.h"
  #include "BKE_library_query.h"
 +#include "BKE_library_override.h"
  #include "BKE_library_remap.h"
  #include "BKE_animsys.h"
  #include "BKE_material.h"
 -#include "BKE_depsgraph.h"
  #include "BKE_global.h"  /* XXX, remove me */
  
 +#include "DEG_depsgraph.h"
 +#include "DEG_depsgraph_build.h"
 +
  #include "WM_api.h"
  
 +void rna_ID_override_static_property_operation_refname_get(PointerRNA *ptr, char *value)
 +{
 +      IDOverrideStaticPropertyOperation *opop = ptr->data;
 +      strcpy(value, (opop->subitem_reference_name == NULL) ? "" : opop->subitem_reference_name);
 +}
 +
 +int rna_ID_override_static_property_operation_refname_length(PointerRNA *ptr)
 +{
 +      IDOverrideStaticPropertyOperation *opop = ptr->data;
 +      return (opop->subitem_reference_name == NULL) ? 0 : strlen(opop->subitem_reference_name);
 +}
 +
 +void rna_ID_override_static_property_operation_locname_get(PointerRNA *ptr, char *value)
 +{
 +      IDOverrideStaticPropertyOperation *opop = ptr->data;
 +      strcpy(value, (opop->subitem_local_name == NULL) ? "" : opop->subitem_local_name);
 +}
 +
 +int rna_ID_override_static_property_operation_locname_length(PointerRNA *ptr)
 +{
 +      IDOverrideStaticPropertyOperation *opop = ptr->data;
 +      return (opop->subitem_local_name == NULL) ? 0 : strlen(opop->subitem_local_name);
 +}
 +
 +
  /* name functions that ignore the first two ID characters */
  void rna_ID_name_get(PointerRNA *ptr, char *value)
  {
@@@ -196,7 -167,6 +197,7 @@@ short RNA_type_to_ID_code(const StructR
        if (base_type == &RNA_ParticleSettings) return ID_PA;
        if (base_type == &RNA_Palette) return ID_PAL;
        if (base_type == &RNA_PaintCurve) return ID_PC;
 +      if (base_type == &RNA_LightProbe) return ID_LP;
        if (base_type == &RNA_Scene) return ID_SCE;
        if (base_type == &RNA_Screen) return ID_SCR;
        if (base_type == &RNA_Sound) return ID_SO;
        if (base_type == &RNA_Texture) return ID_TE;
        if (base_type == &RNA_Text) return ID_TXT;
        if (base_type == &RNA_VectorFont) return ID_VF;
 +      if (base_type == &RNA_WorkSpace) return ID_WS;
        if (base_type == &RNA_World) return ID_WO;
        if (base_type == &RNA_WindowManager) return ID_WM;
  
@@@ -240,7 -209,6 +241,7 @@@ StructRNA *ID_code_to_RNA_type(short id
                case ID_PA: return &RNA_ParticleSettings;
                case ID_PAL: return &RNA_Palette;
                case ID_PC: return &RNA_PaintCurve;
 +              case ID_LP: return &RNA_LightProbe;
                case ID_SCE: return &RNA_Scene;
                case ID_SCR: return &RNA_Screen;
                case ID_SO: return &RNA_Sound;
                case ID_VF: return &RNA_VectorFont;
                case ID_WM: return &RNA_WindowManager;
                case ID_WO: return &RNA_World;
 +              case ID_WS: return &RNA_WorkSpace;
  
                /* deprecated */
                case ID_IP: break;
@@@ -337,15 -304,6 +338,15 @@@ static ID *rna_ID_copy(ID *id, Main *bm
        return NULL;
  }
  
 +static ID *rna_ID_override_create(ID *id, Main *bmain)
 +{
 +      if (id->lib == NULL) {
 +              return NULL;
 +      }
 +
 +      return BKE_override_static_create_from_id(bmain, id);
 +}
 +
  static void rna_ID_update_tag(ID *id, ReportList *reports, int flag)
  {
        /* XXX, new function for this! */
                }
        }
  
 -      DAG_id_tag_update(id, flag);
 +      DEG_id_tag_update(id, flag);
  }
  
  static void rna_ID_user_clear(ID *id)
@@@ -420,14 -378,14 +421,14 @@@ static struct ID *rna_ID_make_local(str
  static AnimData * rna_ID_animation_data_create(ID *id, Main *bmain)
  {
        AnimData *adt = BKE_animdata_add_id(id);
 -      DAG_relations_tag_update(bmain);
 +      DEG_relations_tag_update(bmain);
        return adt;
  }
  
  static void rna_ID_animation_data_free(ID *id, Main *bmain)
  {
        BKE_animdata_free(id, true);
 -      DAG_relations_tag_update(bmain);
 +      DEG_relations_tag_update(bmain);
  }
  
  #ifdef WITH_PYTHON
@@@ -493,7 -451,7 +494,7 @@@ static Material *rna_IDMaterials_pop_id
                return NULL;
        }
  
 -      DAG_id_tag_update(id, OB_RECALC_DATA);
 +      DEG_id_tag_update(id, OB_RECALC_DATA);
        WM_main_add_notifier(NC_OBJECT | ND_DRAW, id);
        WM_main_add_notifier(NC_OBJECT | ND_OB_SHADING, id);
  
@@@ -504,7 -462,7 +505,7 @@@ static void rna_IDMaterials_clear_id(I
  {
        BKE_material_clear_id(G.main, id, remove_material_slot);
  
 -      DAG_id_tag_update(id, OB_RECALC_DATA);
 +      DEG_id_tag_update(id, OB_RECALC_DATA);
        WM_main_add_notifier(NC_OBJECT | ND_DRAW, id);
        WM_main_add_notifier(NC_OBJECT | ND_OB_SHADING, id);
  }
@@@ -797,27 -755,6 +798,27 @@@ static PointerRNA rna_IDPreview_get(Poi
        return rna_pointer_inherit_refine(ptr, &RNA_ImagePreview, prv_img);
  }
  
 +static int rna_ID_is_updated_get(PointerRNA *ptr)
 +{
 +      ID *id = (ID *)ptr->data;
 +      /* TODO(sergey): Do we need to limit some of flags here? */
 +      return ((id->recalc & ID_RECALC_ALL) != 0);
 +}
 +
 +static int rna_ID_is_updated_data_get(PointerRNA *ptr)
 +{
 +      ID *id = (ID *)ptr->data;
 +      if (GS(id->name) != ID_OB) {
 +              return 0;
 +      }
 +      Object *object = (Object *)id;
 +      ID *data = object->data;
 +      if (data == NULL) {
 +              return 0;
 +      }
 +      return ((data->recalc & ID_RECALC_ALL) != 0);
 +}
 +
  static IDProperty *rna_IDPropertyWrapPtr_idprops(PointerRNA *ptr, bool UNUSED(create))
  {
        if (ptr == NULL) {
@@@ -1022,107 -959,6 +1023,107 @@@ static void rna_def_image_preview(Blend
        RNA_def_function_ui_description(func, "Reload the preview from its source path");
  }
  
 +static void rna_def_ID_override_static_property_operation(BlenderRNA *brna)
 +{
 +      StructRNA *srna;
 +      PropertyRNA *prop;
 +
 +      static const EnumPropertyItem static_override_property_operation_items[] = {
 +              {IDOVERRIDESTATIC_OP_NOOP, "NOOP", 0, "No-Op", "Does nothing, prevents adding actual overrides (NOT USED)"},
 +              {IDOVERRIDESTATIC_OP_REPLACE, "REPLACE", 0, "Replace", "Replace value of reference by overriding one"},
 +              {IDOVERRIDESTATIC_OP_ADD, "DIFF_ADD", 0, "Differential",
 +               "Stores and apply difference between reference and local value (NOT USED)"},
 +              {IDOVERRIDESTATIC_OP_SUBTRACT, "DIFF_SUB", 0, "Differential",
 +               "Stores and apply difference between reference and local value (NOT USED)"},
 +              {IDOVERRIDESTATIC_OP_MULTIPLY, "FACT_MULTIPLY", 0, "Factor",
 +               "Stores and apply multiplication factor between reference and local value (NOT USED)"},
 +              {IDOVERRIDESTATIC_OP_INSERT_AFTER, "INSERT_AFTER", 0, "Insert After",
 +               "Insert a new item into collection after the one referenced in subitem_reference_name or _index"},
 +              {IDOVERRIDESTATIC_OP_INSERT_BEFORE, "INSERT_BEFORE", 0, "Insert Before",
 +               "Insert a new item into collection after the one referenced in subitem_reference_name or _index (NOT USED)"},
 +              {0, NULL, 0, NULL, NULL}
 +      };
 +
 +      static const EnumPropertyItem static_override_property_flag_items[] = {
 +              {IDOVERRIDESTATIC_FLAG_MANDATORY, "MANDATORY", 0, "Mandatory",
 +               "For templates, prevents the user from removing pre-defined operation (NOT USED)"},
 +              {IDOVERRIDESTATIC_FLAG_LOCKED, "LOCKED", 0, "Locked",
 +               "Prevents the user from modifying that override operation (NOT USED)"},
 +              {0, NULL, 0, NULL, NULL}
 +      };
 +
 +      srna = RNA_def_struct(brna, "IDOverrideStaticPropertyOperation", NULL);
 +      RNA_def_struct_ui_text(srna, "ID Static Override Property Operation",
 +                             "Description of an override operation over an overridden property");
 +
 +      prop = RNA_def_enum(srna, "operation", static_override_property_operation_items, IDOVERRIDESTATIC_OP_REPLACE,
 +                          "Operation", "What override operation is performed");
 +      RNA_def_property_clear_flag(prop, PROP_EDITABLE);  /* For now. */
 +
 +      prop = RNA_def_enum(srna, "flag", static_override_property_flag_items, 0,
 +                          "Flags", "Optional flags (NOT USED)");
 +      RNA_def_property_clear_flag(prop, PROP_EDITABLE);  /* For now. */
 +
 +      prop = RNA_def_string(srna, "subitem_reference_name", NULL, INT_MAX, "Subitem Reference Name",
 +                            "Used to handle insertions into collection");
 +      RNA_def_property_clear_flag(prop, PROP_EDITABLE);  /* For now. */
 +      RNA_def_property_string_funcs(prop, "rna_ID_override_static_property_operation_refname_get",
 +                                    "rna_ID_override_static_property_operation_refname_length", NULL);
 +
 +      prop = RNA_def_string(srna, "subitem_local_name", NULL, INT_MAX, "Subitem Local Name",
 +                            "Used to handle insertions into collection");
 +      RNA_def_property_clear_flag(prop, PROP_EDITABLE);  /* For now. */
 +      RNA_def_property_string_funcs(prop, "rna_ID_override_static_property_operation_locname_get",
 +                                    "rna_ID_override_static_property_operation_locname_length", NULL);
 +
 +      prop = RNA_def_int(srna, "subitem_reference_index", -1, -1, INT_MAX, "Subitem Reference Index",
 +                         "Used to handle insertions into collection", -1, INT_MAX);
 +      RNA_def_property_clear_flag(prop, PROP_EDITABLE);  /* For now. */
 +
 +      prop = RNA_def_int(srna, "subitem_local_index", -1, -1, INT_MAX, "Subitem Local Index",
 +                         "Used to handle insertions into collection", -1, INT_MAX);
 +      RNA_def_property_clear_flag(prop, PROP_EDITABLE);  /* For now. */
 +}
 +
 +static void rna_def_ID_override_static_property(BlenderRNA *brna)
 +{
 +      StructRNA *srna;
 +      PropertyRNA *prop;
 +
 +      srna = RNA_def_struct(brna, "IDOverrideStaticProperty", NULL);
 +      RNA_def_struct_ui_text(srna, "ID Static Override Property", "Description of an overridden property");
 +
 +      /* String pointer, we *should* add get/set/etc. But NULL rna_path would be a nasty bug anyway... */
 +      prop = RNA_def_string(srna, "rna_path", NULL, INT_MAX, "RNA Path",
 +                            "RNA path leading to that property, from owning ID");
 +      RNA_def_property_clear_flag(prop, PROP_EDITABLE);  /* For now. */
 +
 +      RNA_def_collection(srna, "operations", "IDOverrideStaticPropertyOperation", "Operations",
 +                         "List of overriding operations for a property");
 +
 +      rna_def_ID_override_static_property_operation(brna);
 +}
 +
 +static void rna_def_ID_override_static(BlenderRNA *brna)
 +{
 +      StructRNA *srna;
 +      PropertyRNA *prop;
 +
 +      srna = RNA_def_struct(brna, "IDOverrideStatic", NULL);
 +      RNA_def_struct_ui_text(srna, "ID Static Override", "Struct gathering all data needed by statically overridden IDs");
 +
 +      RNA_def_pointer(srna, "reference", "ID", "Reference ID", "Linked ID used as reference by this override");
 +
 +      prop = RNA_def_boolean(srna, "auto_generate", true, "Auto Generate Override",
 +                             "Automatically generate overriding operations by detecting changes in properties");
 +      RNA_def_property_boolean_sdna(prop, NULL, "flag", STATICOVERRIDE_AUTO);
 +
 +      RNA_def_collection(srna, "properties", "IDOverrideStaticProperty", "Properties",
 +                         "List of overridden properties");
 +
 +      rna_def_ID_override_static_property(brna);
 +}
 +
  static void rna_def_ID(BlenderRNA *brna)
  {
        StructRNA *srna;
                                 "(initial state is undefined)");
  
        prop = RNA_def_property(srna, "is_updated", PROP_BOOLEAN, PROP_NONE);
 -      RNA_def_property_boolean_sdna(prop, NULL, "recalc", ID_RECALC);
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 +      RNA_def_property_boolean_funcs(prop, "rna_ID_is_updated_get", NULL);
        RNA_def_property_ui_text(prop, "Is Updated", "Data-block is tagged for recalculation");
  
        prop = RNA_def_property(srna, "is_updated_data", PROP_BOOLEAN, PROP_NONE);
 -      RNA_def_property_boolean_sdna(prop, NULL, "recalc", ID_RECALC_DATA);
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 +      RNA_def_property_boolean_funcs(prop, "rna_ID_is_updated_data_get", NULL);
        RNA_def_property_ui_text(prop, "Is Updated Data", "Data-block data is tagged for recalculation");
  
        prop = RNA_def_property(srna, "is_library_indirect", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
        RNA_def_property_ui_text(prop, "Library", "Library file the data-block is linked from");
  
 +      prop = RNA_def_pointer(srna, "override_static", "IDOverrideStatic", "Static Override", "Static override data");
 +      RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 +
        prop = RNA_def_pointer(srna, "preview", "ImagePreview", "Preview",
                               "Preview image and icon of this data-block (None if not supported for this type of data)");
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
        parm = RNA_def_pointer(func, "id", "ID", "", "New copy of the ID");
        RNA_def_function_return(func, parm);
  
 +      func = RNA_def_function(srna, "override_create", "rna_ID_override_create");
 +      RNA_def_function_ui_description(func, "Create an overridden local copy of this linked data-block (not supported for all data-blocks)");
 +      RNA_def_function_flag(func, FUNC_USE_MAIN);
 +      parm = RNA_def_pointer(func, "id", "ID", "", "New overridden local copy of the ID");
 +      RNA_def_function_return(func, parm);
 +
        func = RNA_def_function(srna, "user_clear", "rna_ID_user_clear");
        RNA_def_function_ui_description(func, "Clear the user count of a data-block so its not saved, "
                                        "on reload the data will be removed");
@@@ -1314,7 -1141,6 +1315,7 @@@ void RNA_def_ID(BlenderRNA *brna
        RNA_def_struct_ui_text(srna, "Any Type", "RNA type used for pointers to any possible data");
  
        rna_def_ID(brna);
 +      rna_def_ID_override_static(brna);
        rna_def_image_preview(brna);
        rna_def_ID_properties(brna);
        rna_def_ID_materials(brna);
index 6db8ee8bde1f13a5f3fe8ffe311d28ebf8d42b2e,5bb38f2930947bdf24b400b97108cc77e1eff4e0..4ed035c4e8697848d9d4300a38d89041abd70454
  #include "DNA_scene_types.h"
  
  #include "BLI_utildefines.h"
+ #include "BLI_math_base.h"
  
  #include "BKE_context.h"
 -#include "BKE_depsgraph.h"
  #include "BKE_image.h"
  
 +#include "DEG_depsgraph.h"
 +
  #include "RNA_access.h"
  #include "RNA_define.h"
  #include "RNA_enum_types.h"
@@@ -70,6 -70,19 +71,6 @@@ static const EnumPropertyItem image_sou
  #include "IMB_imbuf.h"
  #include "IMB_imbuf_types.h"
  
 -static void rna_Image_animated_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
 -{
 -      Image *ima = (Image *)ptr->data;
 -      int nr;
 -
 -      if (ima->flag & IMA_TWINANIM) {
 -              nr = ima->xrep * ima->yrep;
 -              if (ima->twsta >= nr) ima->twsta = 1;
 -              if (ima->twend >= nr) ima->twend = nr - 1;
 -              if (ima->twsta > ima->twend) ima->twsta = 1;
 -      }
 -}
 -
  static int rna_Image_is_stereo_3d_get(PointerRNA *ptr)
  {
        return BKE_image_is_stereo((Image *)ptr->data);
@@@ -92,7 -105,7 +93,7 @@@ static void rna_Image_source_set(Pointe
        if (value != ima->source) {
                ima->source = value;
                BKE_image_signal(ima, NULL, IMA_SIGNAL_SRC_CHANGE);
 -              DAG_id_tag_update(&ima->id, 0);
 +              DEG_id_tag_update(&ima->id, 0);
        }
  }
  
@@@ -122,7 -135,7 +123,7 @@@ static void rna_Image_reload_update(Mai
        Image *ima = ptr->id.data;
        BKE_image_signal(ima, NULL, IMA_SIGNAL_RELOAD);
        WM_main_add_notifier(NC_IMAGE | NA_EDITED, &ima->id);
 -      DAG_id_tag_update(&ima->id, 0);
 +      DEG_id_tag_update(&ima->id, 0);
  }
  
  static void rna_Image_generated_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
@@@ -135,7 -148,7 +136,7 @@@ static void rna_Image_colormanage_updat
  {
        Image *ima = ptr->id.data;
        BKE_image_signal(ima, NULL, IMA_SIGNAL_COLORMANAGE);
 -      DAG_id_tag_update(&ima->id, 0);
 +      DEG_id_tag_update(&ima->id, 0);
        WM_main_add_notifier(NC_IMAGE | ND_DISPLAY, &ima->id);
        WM_main_add_notifier(NC_IMAGE | NA_EDITED, &ima->id);
  }
@@@ -165,7 -178,7 +166,7 @@@ static void rna_ImageUser_update(Main *
  
        if (ptr->id.data) {
                /* Update material or texture for render preview. */
 -              DAG_id_tag_update(ptr->id.data, 0);
 +              DEG_id_tag_update(ptr->id.data, 0);
        }
  }
  
@@@ -635,6 -648,11 +636,6 @@@ static void rna_def_image(BlenderRNA *b
                {IMA_TYPE_COMPOSITE, "COMPOSITING", 0, "Compositing", ""},
                {0, NULL, 0, NULL, NULL}
        };
 -      static const EnumPropertyItem prop_mapping_items[] = {
 -              {0, "UV", 0, "UV Coordinates", "Use UV coordinates for mapping the image"},
 -              {IMA_REFLECT, "REFLECTION", 0, "Reflection", "Use reflection mapping for mapping the image"},
 -              {0, NULL, 0, NULL, NULL}
 -      };
        static const EnumPropertyItem prop_field_order_items[] = {
                {0, "EVEN", 0, "Upper First", "Upper field first"},
                {IMA_STD_FIELD, "ODD", 0, "Lower First", "Lower field first"},
        RNA_def_struct_ui_icon(srna, ICON_IMAGE_DATA);
  
        prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
 +      RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
        RNA_def_property_string_sdna(prop, NULL, "name");
        RNA_def_property_ui_text(prop, "File Name", "Image/Movie file name");
        RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_reload_update");
        RNA_def_property_ui_text(prop, "Packed Files", "Collection of packed images");
  
        prop = RNA_def_property(srna, "field_order", PROP_ENUM, PROP_NONE);
 +      RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
        RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
        RNA_def_property_enum_items(prop, prop_field_order_items);
        RNA_def_property_ui_text(prop, "Field Order", "Order of video fields (select which lines are displayed first)");
  
        /* booleans */
        prop = RNA_def_property(srna, "use_fields", PROP_BOOLEAN, PROP_NONE);
 +      RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_FIELDS);
        RNA_def_property_ui_text(prop, "Fields", "Use fields of the image");
        RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_fields_update");
        
  
        prop = RNA_def_property(srna, "use_view_as_render", PROP_BOOLEAN, PROP_NONE);
 +      RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_VIEW_AS_RENDER);
        RNA_def_property_ui_text(prop, "View as Render", "Apply render part of display transformation when displaying this image on the screen");
        RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
  
        prop = RNA_def_property(srna, "use_alpha", PROP_BOOLEAN, PROP_NONE);
 +      RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
        RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", IMA_IGNORE_ALPHA);
        RNA_def_property_ui_text(prop, "Use Alpha", "Use the alpha channel information from the image or make image fully opaque");
        RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_colormanage_update");
  
        prop = RNA_def_property(srna, "use_deinterlace", PROP_BOOLEAN, PROP_NONE);
 +      RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_DEINTERLACE);
        RNA_def_property_ui_text(prop, "Deinterlace", "Deinterlace movie file on load");
        RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_reload_update");
  
        prop = RNA_def_property(srna, "use_multiview", PROP_BOOLEAN, PROP_NONE);
 +      RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_USE_VIEWS);
        RNA_def_property_ui_text(prop, "Use Multi-View", "Use Multiple Views (when available)");
        RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_views_format_update");
  
        prop = RNA_def_property(srna, "is_stereo_3d", PROP_BOOLEAN, PROP_NONE);
 +      RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
        RNA_def_property_boolean_funcs(prop, "rna_Image_is_stereo_3d_get", NULL);
        RNA_def_property_ui_text(prop, "Stereo 3D", "Image has left and right views");
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
  
        prop = RNA_def_property(srna, "is_multiview", PROP_BOOLEAN, PROP_NONE);
 +      RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
        RNA_def_property_boolean_funcs(prop, "rna_Image_is_multiview_get", NULL);
        RNA_def_property_ui_text(prop, "Multiple Views", "Image has more than one view");
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
  
        prop = RNA_def_property(srna, "is_dirty", PROP_BOOLEAN, PROP_NONE);
 +      RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
        RNA_def_property_boolean_funcs(prop, "rna_Image_dirty_get", NULL);
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
        RNA_def_property_ui_text(prop, "Dirty", "Image has changed and is not saved");
        RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_generated_update");
        RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
  
 -      /* realtime properties */
 -      prop = RNA_def_property(srna, "mapping", PROP_ENUM, PROP_NONE);
 -      RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
 -      RNA_def_property_enum_items(prop, prop_mapping_items);
 -      RNA_def_property_ui_text(prop, "Mapping", "Mapping type to use for this image in the game engine");
 -      RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
 -
        prop = RNA_def_property(srna, "display_aspect", PROP_FLOAT, PROP_XYZ);
 +      RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
        RNA_def_property_float_sdna(prop, NULL, "aspx");
        RNA_def_property_array(prop, 2);
        RNA_def_property_range(prop, 0.1f, FLT_MAX);
        RNA_def_property_ui_text(prop, "Display Aspect", "Display Aspect for this image, does not affect rendering");
        RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
  
 -      prop = RNA_def_property(srna, "use_animation", PROP_BOOLEAN, PROP_NONE);
 -      RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_TWINANIM);
 -      RNA_def_property_ui_text(prop, "Animated", "Use as animated texture in the game engine");
 -      RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_animated_update");
 -
 -      prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_NONE);
 -      RNA_def_property_int_sdna(prop, NULL, "twsta");
 -      RNA_def_property_range(prop, 0, 255);
 -      RNA_def_property_ui_text(prop, "Animation Start", "Start frame of an animated texture");
 -      RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_animated_update");
 -
 -      prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_NONE);
 -      RNA_def_property_int_sdna(prop, NULL, "twend");
 -      RNA_def_property_range(prop, 0, 255);
 -      RNA_def_property_ui_text(prop, "Animation End", "End frame of an animated texture");
 -      RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_animated_update");
 -
 -      prop = RNA_def_property(srna, "fps", PROP_INT, PROP_NONE);
 -      RNA_def_property_int_sdna(prop, NULL, "animspeed");
 -      RNA_def_property_range(prop, 1, 100);
 -      RNA_def_property_ui_text(prop, "Animation Speed", "Speed of the animation in frames per second");
 -      RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
 -
 -      prop = RNA_def_property(srna, "use_tiles", PROP_BOOLEAN, PROP_NONE);
 -      RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_TILES);
 -      RNA_def_property_ui_text(prop, "Tiles",
 -                               "Use of tilemode for faces (default shift-LMB to pick the tile for selected faces)");
 -      RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
 -
 -      prop = RNA_def_property(srna, "tiles_x", PROP_INT, PROP_NONE);
 -      RNA_def_property_int_sdna(prop, NULL, "xrep");
 -      RNA_def_property_range(prop, 1, 16);
 -      RNA_def_property_ui_text(prop, "Tiles X", "Degree of repetition in the X direction");
 -      RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
 -
 -      prop = RNA_def_property(srna, "tiles_y", PROP_INT, PROP_NONE);
 -      RNA_def_property_int_sdna(prop, NULL, "yrep");
 -      RNA_def_property_range(prop, 1, 16);
 -      RNA_def_property_ui_text(prop, "Tiles Y", "Degree of repetition in the Y direction");
 -      RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
 -
 -      prop = RNA_def_property(srna, "use_clamp_x", PROP_BOOLEAN, PROP_NONE);
 -      RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_CLAMP_U);
 -      RNA_def_property_ui_text(prop, "Clamp X", "Disable texture repeating horizontally");
 -      RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
 -
 -      prop = RNA_def_property(srna, "use_clamp_y", PROP_BOOLEAN, PROP_NONE);
 -      RNA_def_property_boolean_sdna(prop, NULL, "tpageflag", IMA_CLAMP_V);
 -      RNA_def_property_ui_text(prop, "Clamp Y", "Disable texture repeating vertically");
 -      RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
 -
        prop = RNA_def_property(srna, "bindcode", PROP_INT, PROP_UNSIGNED);
        RNA_def_property_int_sdna(prop, NULL, "bindcode");
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
  
        prop = RNA_def_float_vector(srna, "resolution", 2, NULL, 0, 0, "Resolution", "X/Y pixels per meter", 0, 0);
 +      RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
        RNA_def_property_float_funcs(prop, "rna_Image_resolution_get", "rna_Image_resolution_set", NULL);
  
        prop = RNA_def_property(srna, "frame_duration", PROP_INT, PROP_UNSIGNED);
        RNA_def_property_ui_text(prop, "Color Space Settings", "Input color space settings");
  
        prop = RNA_def_property(srna, "alpha_mode", PROP_ENUM, PROP_NONE);
 +      RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
        RNA_def_property_enum_items(prop, alpha_mode_items);
        RNA_def_property_ui_text(prop, "Alpha Mode", "Representation of alpha information in the RGBA pixels");
        RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_colormanage_update");
  
        /* multiview */
        prop = RNA_def_property(srna, "views_format", PROP_ENUM, PROP_NONE);
 +      RNA_def_property_flag(prop, PROP_OVERRIDABLE_STATIC);
        RNA_def_property_enum_sdna(prop, NULL, "views_format");
        RNA_def_property_enum_items(prop, rna_enum_views_format_items);
        RNA_def_property_ui_text(prop, "Views Format", "Mode to load image views");