Cleanup: use `rna_enum_` prefix for RNA enums
[blender.git] / source / blender / makesrna / intern / rna_image.c
index 141de511a0904c9dcd8fd2eb0be3d759245e7833..63fa59828ac931408427fe53b6775c4f6dea4f07 100644 (file)
@@ -35,6 +35,7 @@
 #include "BKE_depsgraph.h"
 #include "BKE_image.h"
 
+#include "RNA_access.h"
 #include "RNA_define.h"
 #include "RNA_enum_types.h"
 
@@ -43,7 +44,7 @@
 #include "WM_types.h"
 #include "WM_api.h"
 
-EnumPropertyItem image_generated_type_items[] = {
+EnumPropertyItem rna_enum_image_generated_type_items[] = {
        {IMA_GENTYPE_BLANK, "BLANK", 0, "Blank", "Generate a blank image"},
        {IMA_GENTYPE_GRID, "UV_GRID", 0, "UV Grid", "Generated grid to test UV mappings"},
        {IMA_GENTYPE_GRID_COLOR, "COLOR_GRID", 0, "Color Grid", "Generated improved UV grid to test UV mappings"},
@@ -77,6 +78,16 @@ static void rna_Image_animated_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
        }
 }
 
+static int rna_Image_is_stereo_3d_get(PointerRNA *ptr)
+{
+       return BKE_image_is_stereo((Image *)ptr->data);
+}
+
+static int rna_Image_is_multiview_get(PointerRNA *ptr)
+{
+       return BKE_image_is_multiview((Image *)ptr->data);
+}
+
 static int rna_Image_dirty_get(PointerRNA *ptr)
 {
        return BKE_image_is_dirty((Image *)ptr->data);
@@ -137,6 +148,23 @@ static void rna_Image_colormanage_update(Main *UNUSED(bmain), Scene *UNUSED(scen
        WM_main_add_notifier(NC_IMAGE | NA_EDITED, &ima->id);
 }
 
+static void rna_Image_views_format_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
+{
+       Image *ima = ptr->id.data;
+       ImBuf *ibuf;
+       void *lock;
+
+       ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
+
+       if (ibuf) {
+               ImageUser iuser = {NULL};
+               iuser.scene = scene;
+               BKE_image_signal(ima, &iuser, IMA_SIGNAL_FREE);
+       }
+
+       BKE_image_release_ibuf(ima, ibuf, lock);
+}
+
 static void rna_ImageUser_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
 {
        ImageUser *iuser = ptr->data;
@@ -193,7 +221,7 @@ static int rna_Image_file_format_get(PointerRNA *ptr)
 {
        Image *image = (Image *)ptr->data;
        ImBuf *ibuf = BKE_image_acquire_ibuf(image, NULL, NULL);
-       int imtype = BKE_ftype_to_imtype(ibuf ? ibuf->ftype : 0);
+       int imtype = BKE_image_ftype_to_imtype(ibuf ? ibuf->ftype : 0, ibuf ? &ibuf->foptions : NULL);
 
        BKE_image_release_ibuf(image, ibuf, NULL);
 
@@ -204,8 +232,9 @@ static void rna_Image_file_format_set(PointerRNA *ptr, int value)
 {
        Image *image = (Image *)ptr->data;
        if (BKE_imtype_is_movie(value) == 0) { /* should be able to throw an error here */
-               int ftype = BKE_imtype_to_ftype(value);
-               BKE_image_file_format_set(image, ftype);
+               ImbFormatOptions options;
+               int ftype = BKE_image_imtype_to_ftype(value, &options);
+               BKE_image_file_format_set(image, ftype, &options);
        }
 }
 
@@ -292,11 +321,20 @@ static int rna_Image_depth_get(PointerRNA *ptr)
 
 static int rna_Image_frame_duration_get(PointerRNA *ptr)
 {
-       Image *im = (Image *)ptr->data;
+       Image *ima = ptr->id.data;
+       int duration = 1;
+
+       if (BKE_image_has_anim(ima)) {
+               duration = IMB_anim_get_duration(((ImageAnim *)ima->anims.first)->anim, IMB_TC_RECORD_RUN);
+       }
+       else {
+               /* acquire ensures ima->anim is set, if possible! */
+               void *lock;
+               ImBuf *ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
+               BKE_image_release_ibuf(ima, ibuf, lock);
+       }
 
-       if (im->anim)
-               return IMB_anim_get_duration(im->anim, IMB_TC_RECORD_RUN);
-       return 1;
+       return duration;
 }
 
 static int rna_Image_pixels_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
@@ -399,6 +437,19 @@ static int rna_Image_is_float_get(PointerRNA *ptr)
        return is_float;
 }
 
+static PointerRNA rna_Image_packed_file_get(PointerRNA *ptr)
+{
+       Image *ima = (Image *)ptr->id.data;
+
+       if (BKE_image_has_packedfile(ima)) {
+               ImagePackedFile *imapf = ima->packedfiles.first;
+               return rna_pointer_inherit_refine(ptr, &RNA_PackedFile, imapf->packedfile);
+       }
+       else {
+               return PointerRNA_NULL;
+       }
+}
+
 static void rna_Image_render_slots_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
 {
        Image *image = (Image *)ptr->id.data;
@@ -445,7 +496,7 @@ static void rna_def_imageuser(BlenderRNA *brna)
 
        srna = RNA_def_struct(brna, "ImageUser", NULL);
        RNA_def_struct_ui_text(srna, "Image User",
-                              "Parameters defining how an Image datablock is used by another datablock");
+                              "Parameters defining how an Image data-block is used by another data-block");
        RNA_def_struct_path_func(srna, "rna_ImageUser_path");
 
        prop = RNA_def_property(srna, "use_auto_refresh", PROP_BOOLEAN, PROP_NONE);
@@ -502,6 +553,32 @@ static void rna_def_imageuser(BlenderRNA *brna)
        RNA_def_property_int_sdna(prop, NULL, "pass");
        RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* image_multi_cb */
        RNA_def_property_ui_text(prop, "Pass", "Pass in multilayer image");
+
+       prop = RNA_def_property(srna, "multilayer_view", PROP_INT, PROP_UNSIGNED);
+       RNA_def_property_int_sdna(prop, NULL, "view");
+       RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* image_multi_cb */
+       RNA_def_property_ui_text(prop, "View", "View in multilayer image");
+}
+
+/* image.packed_files */
+static void rna_def_image_packed_files(BlenderRNA *brna)
+{
+       StructRNA *srna;
+       PropertyRNA *prop;
+
+       srna = RNA_def_struct(brna, "ImagePackedFile", NULL);
+       RNA_def_struct_sdna(srna, "ImagePackedFile");
+
+       prop = RNA_def_property(srna, "packed_file", PROP_POINTER, PROP_NONE);
+       RNA_def_property_pointer_sdna(prop, NULL, "packedfile");
+       RNA_def_property_ui_text(prop, "Packed File", "");
+       RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+       prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
+       RNA_def_property_string_sdna(prop, NULL, "filepath");
+       RNA_def_struct_name_property(srna, prop);
+
+       RNA_api_image_packed_file(srna);
 }
 
 static void rna_def_render_slot(BlenderRNA *brna)
@@ -572,7 +649,7 @@ static void rna_def_image(BlenderRNA *brna)
        };
 
        srna = RNA_def_struct(brna, "Image", "ID");
-       RNA_def_struct_ui_text(srna, "Image", "Image datablock referencing an external or packed image");
+       RNA_def_struct_ui_text(srna, "Image", "Image data-block referencing an external or packed image");
        RNA_def_struct_ui_icon(srna, ICON_IMAGE_DATA);
 
        prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
@@ -586,7 +663,7 @@ static void rna_def_image(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "File Name", "Image/Movie file name (without data refreshing)");
 
        prop = RNA_def_property(srna, "file_format", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_items(prop, image_type_items);
+       RNA_def_property_enum_items(prop, rna_enum_image_type_items);
        RNA_def_property_enum_funcs(prop, "rna_Image_file_format_get", "rna_Image_file_format_set", NULL);
        RNA_def_property_ui_text(prop, "File Format", "Format used for re-saving this file");
 
@@ -603,15 +680,23 @@ static void rna_def_image(BlenderRNA *brna)
        RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
 
        prop = RNA_def_property(srna, "packed_file", PROP_POINTER, PROP_NONE);
+       RNA_def_property_struct_type(prop, "PackedFile");
        RNA_def_property_pointer_sdna(prop, NULL, "packedfile");
-       RNA_def_property_ui_text(prop, "Packed File", "");
-       
+       RNA_def_property_pointer_funcs(prop, "rna_Image_packed_file_get", NULL, NULL, NULL);
+       RNA_def_property_ui_text(prop, "Packed File", "First packed file of the image");
+
+       prop = RNA_def_property(srna, "packed_files", PROP_COLLECTION, PROP_NONE);
+       RNA_def_property_collection_sdna(prop, NULL, "packedfiles", NULL);
+       RNA_def_property_struct_type(prop, "ImagePackedFile");
+       RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+       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_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)");
        RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, NULL);
-       
+
        /* booleans */
        prop = RNA_def_property(srna, "use_fields", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_FIELDS);
@@ -630,6 +715,26 @@ static void rna_def_image(BlenderRNA *brna)
        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_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_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_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_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_boolean_funcs(prop, "rna_Image_dirty_get", NULL);
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -638,7 +743,7 @@ static void rna_def_image(BlenderRNA *brna)
        /* generated image (image_generated_change_cb) */
        prop = RNA_def_property(srna, "generated_type", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "gen_type");
-       RNA_def_property_enum_items(prop, image_generated_type_items);
+       RNA_def_property_enum_items(prop, rna_enum_image_generated_type_items);
        RNA_def_property_ui_text(prop, "Generated Type", "Generated image type");
        RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_generated_update");
        RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
@@ -665,7 +770,7 @@ static void rna_def_image(BlenderRNA *brna)
        RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_generated_update");
        RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
 
-       prop = RNA_def_property(srna, "generated_color", PROP_FLOAT, PROP_COLOR);
+       prop = RNA_def_property(srna, "generated_color", PROP_FLOAT, PROP_COLOR_GAMMA);
        RNA_def_property_float_sdna(prop, NULL, "gen_color");
        RNA_def_property_array(prop, 4);
        RNA_def_property_ui_text(prop, "Color", "Fill color for the generated image");
@@ -694,13 +799,13 @@ static void rna_def_image(BlenderRNA *brna)
 
        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, 128);
+       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, 128);
+       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");
 
@@ -810,6 +915,19 @@ static void rna_def_image(BlenderRNA *brna)
        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_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");
+       RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Image_views_format_update");
+
+       prop = RNA_def_property(srna, "stereo_3d_format", PROP_POINTER, PROP_NONE);
+       RNA_def_property_pointer_sdna(prop, NULL, "stereo3d_format");
+       RNA_def_property_flag(prop, PROP_NEVER_NULL);
+       RNA_def_property_struct_type(prop, "Stereo3dFormat");
+       RNA_def_property_ui_text(prop, "Stereo 3D Format", "Settings for stereo 3d");
+
        RNA_api_image(srna);
 }
 
@@ -819,6 +937,7 @@ void RNA_def_image(BlenderRNA *brna)
        rna_def_render_slots(brna);
        rna_def_image(brna);
        rna_def_imageuser(brna);
+       rna_def_image_packed_files(brna);
 }
 
 #endif