2011-02-23 10:52:22 +00:00
/*
2008-11-30 18:39:49 +00:00
* * * * * * BEGIN GPL LICENSE BLOCK * * * * *
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software Foundation ,
2010-02-12 13:34:04 +00:00
* Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
2008-11-30 18:39:49 +00:00
*
* Contributor ( s ) : Brecht Van Lommel
*
* * * * * * END GPL LICENSE BLOCK * * * * *
*/
2011-02-27 20:20:01 +00:00
/** \file blender/makesrna/intern/rna_image.c
* \ ingroup RNA
*/
2008-11-30 18:39:49 +00:00
# include <stdlib.h>
# include "RNA_define.h"
2010-03-07 20:27:40 +00:00
# include "RNA_enum_types.h"
2008-11-30 18:39:49 +00:00
# include "rna_internal.h"
# include "DNA_image_types.h"
# include "DNA_scene_types.h"
2009-06-16 00:52:21 +00:00
# include "BKE_context.h"
2010-04-06 16:53:48 +00:00
# include "BKE_depsgraph.h"
2008-11-30 18:39:49 +00:00
# include "BKE_image.h"
2009-06-23 00:45:41 +00:00
# include "WM_types.h"
2011-12-30 14:17:11 +00:00
# include "WM_api.h"
2009-06-23 00:45:41 +00:00
2009-09-16 19:27:08 +00:00
static EnumPropertyItem image_source_items [ ] = {
2011-04-28 12:43:28 +00:00
{ IMA_SRC_FILE , " FILE " , 0 , " Single Image " , " Single image file " } ,
{ IMA_SRC_SEQUENCE , " SEQUENCE " , 0 , " Image Sequence " , " Multiple image files, as a sequence " } ,
{ IMA_SRC_MOVIE , " MOVIE " , 0 , " Movie File " , " Movie file " } ,
2009-09-16 19:27:08 +00:00
{ IMA_SRC_GENERATED , " GENERATED " , 0 , " Generated " , " Generated image " } ,
{ IMA_SRC_VIEWER , " VIEWER " , 0 , " Viewer " , " Compositing node viewer " } ,
{ 0 , NULL , 0 , NULL , NULL } } ;
2008-11-30 18:39:49 +00:00
# ifdef RNA_RUNTIME
2009-06-30 19:10:14 +00:00
# include "IMB_imbuf_types.h"
2011-05-31 02:14:25 +00:00
static void rna_Image_animated_update ( Main * UNUSED ( bmain ) , Scene * UNUSED ( scene ) , PointerRNA * ptr )
2009-06-16 00:52:21 +00:00
{
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 ;
}
}
2009-06-30 19:10:14 +00:00
static int rna_Image_dirty_get ( PointerRNA * ptr )
{
Image * ima = ( Image * ) ptr - > data ;
ImBuf * ibuf ;
for ( ibuf = ima - > ibufs . first ; ibuf ; ibuf = ibuf - > next )
if ( ibuf - > userflags & IB_BITMAPDIRTY )
return 1 ;
return 0 ;
}
2011-05-31 02:14:25 +00:00
static void rna_Image_source_update ( Main * UNUSED ( bmain ) , Scene * UNUSED ( scene ) , PointerRNA * ptr )
2009-09-16 19:27:08 +00:00
{
Image * ima = ptr - > id . data ;
BKE_image_signal ( ima , NULL , IMA_SIGNAL_SRC_CHANGE ) ;
2010-12-05 18:59:23 +00:00
DAG_id_tag_update ( & ima - > id , 0 ) ;
2009-09-16 19:27:08 +00:00
}
2011-05-31 02:14:25 +00:00
static void rna_Image_fields_update ( Main * UNUSED ( bmain ) , Scene * UNUSED ( scene ) , PointerRNA * ptr )
2009-09-16 19:27:08 +00:00
{
Image * ima = ptr - > id . data ;
ImBuf * ibuf ;
2009-09-30 18:18:32 +00:00
void * lock ;
2009-09-16 19:27:08 +00:00
2009-09-30 18:18:32 +00:00
ibuf = BKE_image_acquire_ibuf ( ima , NULL , & lock ) ;
2009-09-16 19:27:08 +00:00
if ( ibuf ) {
short nr = 0 ;
if ( ! ( ima - > flag & IMA_FIELDS ) & & ( ibuf - > flags & IB_fields ) ) nr = 1 ;
if ( ( ima - > flag & IMA_FIELDS ) & & ! ( ibuf - > flags & IB_fields ) ) nr = 1 ;
if ( nr )
BKE_image_signal ( ima , NULL , IMA_SIGNAL_FREE ) ;
}
2009-09-30 18:18:32 +00:00
BKE_image_release_ibuf ( ima , lock ) ;
2009-09-16 19:27:08 +00:00
}
2012-01-11 13:18:24 +00:00
static void rna_Image_free_update ( Main * UNUSED ( bmain ) , Scene * UNUSED ( scene ) , PointerRNA * ptr )
{
Image * ima = ptr - > id . data ;
BKE_image_signal ( ima , NULL , IMA_SIGNAL_FREE ) ;
WM_main_add_notifier ( NC_IMAGE | NA_EDITED , & ima - > id ) ;
DAG_id_tag_update ( & ima - > id , 0 ) ;
}
2011-05-31 02:14:25 +00:00
static void rna_Image_reload_update ( Main * UNUSED ( bmain ) , Scene * UNUSED ( scene ) , PointerRNA * ptr )
2009-09-16 19:27:08 +00:00
{
Image * ima = ptr - > id . data ;
BKE_image_signal ( ima , NULL , IMA_SIGNAL_RELOAD ) ;
2011-12-30 14:17:11 +00:00
WM_main_add_notifier ( NC_IMAGE | NA_EDITED , & ima - > id ) ;
2010-12-05 18:59:23 +00:00
DAG_id_tag_update ( & ima - > id , 0 ) ;
2009-09-16 19:27:08 +00:00
}
2011-05-31 02:14:25 +00:00
static void rna_Image_generated_update ( Main * UNUSED ( bmain ) , Scene * UNUSED ( scene ) , PointerRNA * ptr )
2009-09-16 19:27:08 +00:00
{
Image * ima = ptr - > id . data ;
BKE_image_signal ( ima , NULL , IMA_SIGNAL_FREE ) ;
}
2011-05-31 02:14:25 +00:00
static void rna_ImageUser_update ( Main * UNUSED ( bmain ) , Scene * scene , PointerRNA * ptr )
2009-09-16 19:27:08 +00:00
{
ImageUser * iuser = ptr - > data ;
2010-01-19 14:04:33 +00:00
BKE_image_user_calc_frame ( iuser , scene - > r . cfra , 0 ) ;
2009-09-16 19:27:08 +00:00
}
2010-09-20 09:52:29 +00:00
char * rna_ImageUser_path ( PointerRNA * ptr )
{
if ( ptr - > id . data ) {
// ImageUser *iuser= ptr->data;
switch ( GS ( ( ( ID * ) ptr - > id . data ) - > name ) ) {
case ID_TE :
return BLI_strdup ( " image_user " ) ;
}
}
return BLI_strdup ( " " ) ;
}
2011-05-31 02:14:25 +00:00
static EnumPropertyItem * rna_Image_source_itemf ( bContext * UNUSED ( C ) , PointerRNA * ptr , PropertyRNA * UNUSED ( prop ) , int * free )
2009-09-16 19:27:08 +00:00
{
Image * ima = ( Image * ) ptr - > data ;
EnumPropertyItem * item = NULL ;
int totitem = 0 ;
if ( ima - > source = = IMA_SRC_VIEWER ) {
RNA_enum_items_add_value ( & item , & totitem , image_source_items , IMA_SRC_VIEWER ) ;
}
else {
RNA_enum_items_add_value ( & item , & totitem , image_source_items , IMA_SRC_FILE ) ;
RNA_enum_items_add_value ( & item , & totitem , image_source_items , IMA_SRC_SEQUENCE ) ;
RNA_enum_items_add_value ( & item , & totitem , image_source_items , IMA_SRC_MOVIE ) ;
RNA_enum_items_add_value ( & item , & totitem , image_source_items , IMA_SRC_GENERATED ) ;
}
RNA_enum_item_end ( & item , & totitem ) ;
* free = 1 ;
return item ;
}
2010-03-07 20:27:40 +00:00
static int rna_Image_file_format_get ( PointerRNA * ptr )
{
Image * image = ( Image * ) ptr - > data ;
ImBuf * ibuf = BKE_image_get_ibuf ( image , NULL ) ;
return BKE_ftype_to_imtype ( ibuf ? ibuf - > ftype : 0 ) ;
}
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 */
2010-10-28 19:40:05 +00:00
ImBuf * ibuf ;
int ftype = BKE_imtype_to_ftype ( value ) ;
/*
ibuf = BKE_image_get_ibuf ( image , NULL ) ;
2010-03-07 20:27:40 +00:00
if ( ibuf )
2010-10-28 19:40:05 +00:00
ibuf - > ftype = ftype ;
*/
/* to be safe change all buffer file types */
2010-10-29 07:11:45 +00:00
for ( ibuf = image - > ibufs . first ; ibuf ; ibuf = ibuf - > next ) {
2010-10-28 19:40:05 +00:00
ibuf - > ftype = ftype ;
}
2010-03-07 20:27:40 +00:00
}
}
2009-07-03 17:44:20 +00:00
static int rna_Image_has_data_get ( PointerRNA * ptr )
{
Image * im = ( Image * ) ptr - > data ;
if ( im - > ibufs . first )
return 1 ;
return 0 ;
}
2010-01-06 10:46:49 +00:00
static void rna_Image_size_get ( PointerRNA * ptr , int * values )
{
Image * im = ( Image * ) ptr - > data ;
ImBuf * ibuf ;
void * lock ;
ibuf = BKE_image_acquire_ibuf ( im , NULL , & lock ) ;
if ( ibuf ) {
values [ 0 ] = ibuf - > x ;
values [ 1 ] = ibuf - > y ;
}
2010-03-22 09:30:00 +00:00
else {
2010-01-06 10:46:49 +00:00
values [ 0 ] = 0 ;
values [ 1 ] = 0 ;
}
BKE_image_release_ibuf ( im , lock ) ;
}
2011-05-13 14:27:12 +00:00
static void rna_Image_resolution_get ( PointerRNA * ptr , float * values )
{
Image * im = ( Image * ) ptr - > data ;
ImBuf * ibuf ;
void * lock ;
ibuf = BKE_image_acquire_ibuf ( im , NULL , & lock ) ;
if ( ibuf ) {
values [ 0 ] = ibuf - > ppm [ 0 ] ;
values [ 1 ] = ibuf - > ppm [ 1 ] ;
}
else {
values [ 0 ] = 0 ;
values [ 1 ] = 0 ;
}
BKE_image_release_ibuf ( im , lock ) ;
}
static void rna_Image_resolution_set ( PointerRNA * ptr , const float * values )
{
Image * im = ( Image * ) ptr - > data ;
ImBuf * ibuf ;
void * lock ;
ibuf = BKE_image_acquire_ibuf ( im , NULL , & lock ) ;
if ( ibuf ) {
ibuf - > ppm [ 0 ] = values [ 0 ] ;
ibuf - > ppm [ 1 ] = values [ 1 ] ;
}
BKE_image_release_ibuf ( im , lock ) ;
}
2010-01-06 10:46:49 +00:00
2009-07-03 17:44:20 +00:00
static int rna_Image_depth_get ( PointerRNA * ptr )
{
Image * im = ( Image * ) ptr - > data ;
2009-09-30 18:18:32 +00:00
ImBuf * ibuf ;
void * lock ;
2011-11-21 20:47:19 +00:00
int planes ;
2009-09-30 18:18:32 +00:00
ibuf = BKE_image_acquire_ibuf ( im , NULL , & lock ) ;
2009-07-03 17:44:20 +00:00
2009-09-30 18:18:32 +00:00
if ( ! ibuf )
2011-11-21 20:47:19 +00:00
planes = 0 ;
2009-09-30 18:18:32 +00:00
else if ( ibuf - > rect_float )
2011-11-21 20:47:19 +00:00
planes = ibuf - > planes * 4 ;
2009-09-30 18:18:32 +00:00
else
2011-11-21 20:47:19 +00:00
planes = ibuf - > planes ;
2009-07-03 17:44:20 +00:00
2009-09-30 18:18:32 +00:00
BKE_image_release_ibuf ( im , lock ) ;
2009-07-03 17:44:20 +00:00
2011-11-21 20:47:19 +00:00
return planes ;
2009-07-03 17:44:20 +00:00
}
2011-04-03 16:17:39 +00:00
static int rna_Image_pixels_get_length ( PointerRNA * ptr , int length [ RNA_MAX_ARRAY_DIMENSION ] )
{
Image * ima = ptr - > id . data ;
ImBuf * ibuf ;
void * lock ;
ibuf = BKE_image_acquire_ibuf ( ima , NULL , & lock ) ;
2011-04-04 17:10:48 +00:00
if ( ibuf )
length [ 0 ] = ibuf - > x * ibuf - > y * ibuf - > channels ;
else
2011-04-03 16:17:39 +00:00
length [ 0 ] = 0 ;
BKE_image_release_ibuf ( ima , lock ) ;
2011-04-04 17:10:48 +00:00
return length [ 0 ] ;
2011-04-03 16:17:39 +00:00
}
static void rna_Image_pixels_get ( PointerRNA * ptr , float * values )
{
Image * ima = ptr - > id . data ;
ImBuf * ibuf ;
void * lock ;
int i , size ;
ibuf = BKE_image_acquire_ibuf ( ima , NULL , & lock ) ;
if ( ibuf ) {
size = ibuf - > x * ibuf - > y * ibuf - > channels ;
if ( ibuf - > rect_float ) {
memcpy ( values , ibuf - > rect_float , sizeof ( float ) * size ) ;
}
else {
for ( i = 0 ; i < size ; i + + )
values [ i ] = ( ( unsigned char * ) ibuf - > rect ) [ i ] * ( 1.0f / 255.0f ) ;
}
}
BKE_image_release_ibuf ( ima , lock ) ;
}
static void rna_Image_pixels_set ( PointerRNA * ptr , const float * values )
{
Image * ima = ptr - > id . data ;
ImBuf * ibuf ;
void * lock ;
int i , size ;
ibuf = BKE_image_acquire_ibuf ( ima , NULL , & lock ) ;
if ( ibuf ) {
size = ibuf - > x * ibuf - > y * ibuf - > channels ;
if ( ibuf - > rect_float ) {
memcpy ( ibuf - > rect_float , values , sizeof ( float ) * size ) ;
}
else {
for ( i = 0 ; i < size ; i + + )
( ( unsigned char * ) ibuf - > rect ) [ i ] = FTOCHAR ( values [ i ] ) ;
}
2011-04-06 12:54:47 +00:00
ibuf - > userflags | = IB_BITMAPDIRTY ;
2011-04-03 16:17:39 +00:00
}
BKE_image_release_ibuf ( ima , lock ) ;
}
2008-11-30 18:39:49 +00:00
# else
static void rna_def_imageuser ( BlenderRNA * brna )
{
StructRNA * srna ;
PropertyRNA * prop ;
2008-12-19 04:06:24 +00:00
srna = RNA_def_struct ( brna , " ImageUser " , NULL ) ;
2010-02-10 21:15:44 +00:00
RNA_def_struct_ui_text ( srna , " Image User " , " Parameters defining how an Image datablock is used by another datablock " ) ;
2010-09-20 09:52:29 +00:00
RNA_def_struct_path_func ( srna , " rna_ImageUser_path " ) ;
2008-11-30 18:39:49 +00:00
2010-08-20 06:09:58 +00:00
prop = RNA_def_property ( srna , " use_auto_refresh " , PROP_BOOLEAN , PROP_NONE ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_boolean_sdna ( prop , NULL , " flag " , IMA_ANIM_ALWAYS ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Auto Refresh " , " Always refresh image on frame changes " ) ;
2009-09-16 19:27:08 +00:00
RNA_def_property_update ( prop , 0 , " rna_ImageUser_update " ) ;
2008-11-30 18:39:49 +00:00
/* animation */
2010-08-21 04:51:00 +00:00
prop = RNA_def_property ( srna , " use_cyclic " , PROP_BOOLEAN , PROP_NONE ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_boolean_sdna ( prop , NULL , " cycl " , 0 ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Cyclic " , " Cycle the images in the movie " ) ;
2009-09-16 19:27:08 +00:00
RNA_def_property_update ( prop , 0 , " rna_ImageUser_update " ) ;
2008-11-30 18:39:49 +00:00
2010-08-21 04:51:00 +00:00
prop = RNA_def_property ( srna , " frame_duration " , PROP_INT , PROP_NONE ) ;
RNA_def_property_int_sdna ( prop , NULL , " frames " ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_range ( prop , 0 , MAXFRAMEF ) ;
2011-10-20 07:56:04 +00:00
RNA_def_property_ui_text ( prop , " Frames " , " Number of images of a movie to use " ) ;
2009-09-16 19:27:08 +00:00
RNA_def_property_update ( prop , 0 , " rna_ImageUser_update " ) ;
2008-11-30 18:39:49 +00:00
2010-08-21 04:51:00 +00:00
prop = RNA_def_property ( srna , " frame_offset " , PROP_INT , PROP_NONE ) ;
RNA_def_property_int_sdna ( prop , NULL , " offset " ) ;
2010-09-15 03:45:33 +00:00
RNA_def_property_range ( prop , MINAFRAMEF , MAXFRAMEF ) ;
2011-10-20 07:56:04 +00:00
RNA_def_property_ui_text ( prop , " Offset " , " Offset the number of the frame to use in the animation " ) ;
2009-09-16 19:27:08 +00:00
RNA_def_property_update ( prop , 0 , " rna_ImageUser_update " ) ;
2008-11-30 18:39:49 +00:00
2010-04-01 21:44:56 +00:00
prop = RNA_def_property ( srna , " frame_start " , PROP_INT , PROP_TIME ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_int_sdna ( prop , NULL , " sfra " ) ;
2010-09-15 03:45:33 +00:00
RNA_def_property_range ( prop , MINAFRAMEF , MAXFRAMEF ) ;
2011-10-20 07:56:04 +00:00
RNA_def_property_ui_text ( prop , " Start Frame " , " Global starting frame of the movie/sequence, assuming first picture has a #1 " ) ;
2009-09-16 19:27:08 +00:00
RNA_def_property_update ( prop , 0 , " rna_ImageUser_update " ) ;
2008-11-30 18:39:49 +00:00
prop = RNA_def_property ( srna , " fields_per_frame " , PROP_INT , PROP_NONE ) ;
RNA_def_property_int_sdna ( prop , NULL , " fie_ima " ) ;
2010-11-21 03:45:35 +00:00
RNA_def_property_range ( prop , 1 , 200 ) ;
2011-10-20 07:56:04 +00:00
RNA_def_property_ui_text ( prop , " Fields per Frame " , " Number of fields per rendered frame (2 fields is 1 image) " ) ;
2009-09-16 19:27:08 +00:00
RNA_def_property_update ( prop , 0 , " rna_ImageUser_update " ) ;
2008-11-30 18:39:49 +00:00
2009-01-10 22:57:33 +00:00
prop = RNA_def_property ( srna , " multilayer_layer " , PROP_INT , PROP_UNSIGNED ) ;
2008-12-18 23:34:19 +00:00
RNA_def_property_int_sdna ( prop , NULL , " layer " ) ;
2009-03-23 13:24:48 +00:00
RNA_def_property_clear_flag ( prop , PROP_EDITABLE ) ; /* image_multi_cb */
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Layer " , " Layer in multilayer image " ) ;
2008-11-30 18:39:49 +00:00
2009-01-10 22:57:33 +00:00
prop = RNA_def_property ( srna , " multilayer_pass " , PROP_INT , PROP_UNSIGNED ) ;
2008-12-18 23:34:19 +00:00
RNA_def_property_int_sdna ( prop , NULL , " pass " ) ;
2009-03-23 13:24:48 +00:00
RNA_def_property_clear_flag ( prop , PROP_EDITABLE ) ; /* image_multi_cb */
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Pass " , " Pass in multilayer image " ) ;
2008-11-30 18:39:49 +00:00
}
static void rna_def_image ( BlenderRNA * brna )
{
StructRNA * srna ;
PropertyRNA * prop ;
static const EnumPropertyItem prop_type_items [ ] = {
2009-06-16 00:52:21 +00:00
{ IMA_TYPE_IMAGE , " IMAGE " , 0 , " Image " , " " } ,
{ IMA_TYPE_MULTILAYER , " MULTILAYER " , 0 , " Multilayer " , " " } ,
2009-09-16 19:27:08 +00:00
{ IMA_TYPE_UV_TEST , " UV_TEST " , 0 , " UV Test " , " " } ,
{ IMA_TYPE_R_RESULT , " RENDER_RESULT " , 0 , " Render Result " , " " } ,
2009-06-16 00:52:21 +00:00
{ IMA_TYPE_COMPOSITE , " COMPOSITING " , 0 , " Compositing " , " " } ,
{ 0 , NULL , 0 , NULL , NULL } } ;
2008-11-30 18:39:49 +00:00
static const EnumPropertyItem prop_generated_type_items [ ] = {
2009-06-16 00:52:21 +00:00
{ 0 , " BLANK " , 0 , " Blank " , " Generate a blank image " } ,
2010-03-21 00:25:52 +00:00
{ 1 , " UV_GRID " , 0 , " UV Grid " , " Generated grid to test UV mappings " } ,
{ 2 , " COLOR_GRID " , 0 , " Color Grid " , " Generated improved UV grid to test UV mappings " } ,
2009-06-16 00:52:21 +00:00
{ 0 , NULL , 0 , NULL , NULL } } ;
2008-11-30 18:39:49 +00:00
static const EnumPropertyItem prop_mapping_items [ ] = {
2009-06-16 00:52:21 +00:00
{ 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 } } ;
2009-09-16 19:58:01 +00:00
static const EnumPropertyItem prop_field_order_items [ ] = {
2010-02-10 18:29:58 +00:00
{ 0 , " EVEN " , 0 , " Upper First " , " Upper field first " } ,
{ IMA_STD_FIELD , " ODD " , 0 , " Lower First " , " Lower field first " } ,
2009-09-16 19:58:01 +00:00
{ 0 , NULL , 0 , NULL , NULL } } ;
2008-11-30 18:39:49 +00:00
2008-12-19 04:06:24 +00:00
srna = RNA_def_struct ( brna , " Image " , " ID " ) ;
2010-02-10 21:15:44 +00:00
RNA_def_struct_ui_text ( srna , " Image " , " Image datablock referencing an external or packed image " ) ;
2009-06-03 23:16:51 +00:00
RNA_def_struct_ui_icon ( srna , ICON_IMAGE_DATA ) ;
2008-11-30 18:39:49 +00:00
2010-06-02 17:58:28 +00:00
prop = RNA_def_property ( srna , " filepath " , PROP_STRING , PROP_FILEPATH ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_string_sdna ( prop , NULL , " name " ) ;
2010-06-02 17:58:28 +00:00
RNA_def_property_ui_text ( prop , " File Name " , " Image/Movie file name " ) ;
2009-09-16 19:27:08 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , " rna_Image_reload_update " ) ;
2008-11-30 18:39:49 +00:00
2010-03-06 21:47:16 +00:00
/* eek. this is horrible but needed so we can save to a new name without blanking the data :( */
2010-06-02 17:58:28 +00:00
prop = RNA_def_property ( srna , " filepath_raw " , PROP_STRING , PROP_FILEPATH ) ;
2010-03-06 21:47:16 +00:00
RNA_def_property_string_sdna ( prop , NULL , " name " ) ;
2010-06-02 17:58:28 +00:00
RNA_def_property_ui_text ( prop , " File Name " , " Image/Movie file name (without data refreshing) " ) ;
2010-03-06 21:47:16 +00:00
2010-03-07 20:27:40 +00:00
prop = RNA_def_property ( srna , " file_format " , PROP_ENUM , PROP_NONE ) ;
RNA_def_property_enum_items ( prop , 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 " ) ;
2008-11-30 18:39:49 +00:00
prop = RNA_def_property ( srna , " source " , PROP_ENUM , PROP_NONE ) ;
2009-09-16 19:27:08 +00:00
RNA_def_property_enum_items ( prop , image_source_items ) ;
RNA_def_property_enum_funcs ( prop , NULL , NULL , " rna_Image_source_itemf " ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Source " , " Where the image comes from " ) ;
2009-09-16 19:27:08 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , " rna_Image_source_update " ) ;
2008-11-30 18:39:49 +00:00
prop = RNA_def_property ( srna , " type " , PROP_ENUM , PROP_NONE ) ;
RNA_def_property_enum_items ( prop , prop_type_items ) ;
2009-09-16 19:27:08 +00:00
RNA_def_property_clear_flag ( prop , PROP_EDITABLE ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Type " , " How to generate the image " ) ;
2009-06-23 00:45:41 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , NULL ) ;
2008-11-30 18:39:49 +00:00
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 " , " " ) ;
2009-09-16 19:58:01 +00:00
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 ) ;
2011-11-26 12:30:01 +00:00
RNA_def_property_ui_text ( prop , " Field Order " , " Order of video fields (select which lines are displayed first) " ) ;
2009-09-16 19:58:01 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , NULL ) ;
2008-11-30 18:39:49 +00:00
/* booleans */
2010-08-18 04:10:23 +00:00
prop = RNA_def_property ( srna , " use_fields " , PROP_BOOLEAN , PROP_NONE ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_boolean_sdna ( prop , NULL , " flag " , IMA_FIELDS ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Fields " , " Use fields of the image " ) ;
2009-09-16 19:27:08 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , " rna_Image_fields_update " ) ;
2008-11-30 18:39:49 +00:00
2010-08-20 06:09:58 +00:00
prop = RNA_def_property ( srna , " use_premultiply " , PROP_BOOLEAN , PROP_NONE ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_boolean_sdna ( prop , NULL , " flag " , IMA_DO_PREMUL ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Premultiply " , " Convert RGB from key alpha to premultiplied alpha " ) ;
2012-01-11 13:18:24 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , " rna_Image_free_update " ) ;
2011-12-30 14:17:11 +00:00
prop = RNA_def_property ( srna , " use_color_unpremultiply " , PROP_BOOLEAN , PROP_NONE ) ;
RNA_def_property_boolean_sdna ( prop , NULL , " flag " , IMA_CM_PREDIVIDE ) ;
RNA_def_property_ui_text ( prop , " Color Unpremultiply " , " For premultiplied alpha images, do color space conversion on colors without alpha, to avoid fringing for images with light backgrounds " ) ;
2012-01-11 13:18:24 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , " rna_Image_free_update " ) ;
2008-11-30 18:39:49 +00:00
2010-08-18 07:14:10 +00:00
prop = RNA_def_property ( srna , " is_dirty " , PROP_BOOLEAN , PROP_NONE ) ;
2009-06-30 19:10:14 +00:00
RNA_def_property_boolean_funcs ( prop , " rna_Image_dirty_get " , NULL ) ;
RNA_def_property_clear_flag ( prop , PROP_EDITABLE ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Dirty " , " Image has changed and is not saved " ) ;
2009-06-30 19:10:14 +00:00
2008-11-30 18:39:49 +00:00
/* generated image (image_generated_change_cb) */
prop = RNA_def_property ( srna , " generated_type " , PROP_ENUM , PROP_NONE ) ;
2008-12-03 20:17:12 +00:00
RNA_def_property_enum_sdna ( prop , NULL , " gen_type " ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_enum_items ( prop , prop_generated_type_items ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Generated Type " , " Generated image type " ) ;
2009-09-16 19:27:08 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , " rna_Image_generated_update " ) ;
2008-11-30 18:39:49 +00:00
prop = RNA_def_property ( srna , " generated_width " , PROP_INT , PROP_NONE ) ;
RNA_def_property_int_sdna ( prop , NULL , " gen_x " ) ;
2009-04-12 17:28:41 +00:00
RNA_def_property_range ( prop , 1 , 16384 ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Generated Width " , " Generated image width " ) ;
2009-09-16 19:27:08 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , " rna_Image_generated_update " ) ;
2008-11-30 18:39:49 +00:00
prop = RNA_def_property ( srna , " generated_height " , PROP_INT , PROP_NONE ) ;
RNA_def_property_int_sdna ( prop , NULL , " gen_y " ) ;
2009-04-12 17:28:41 +00:00
RNA_def_property_range ( prop , 1 , 16384 ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Generated Height " , " Generated image height " ) ;
2009-09-16 19:27:08 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , " rna_Image_generated_update " ) ;
2008-11-30 18:39:49 +00:00
2011-07-21 00:41:00 +00:00
prop = RNA_def_property ( srna , " use_generated_float " , PROP_BOOLEAN , PROP_NONE ) ;
RNA_def_property_boolean_sdna ( prop , NULL , " gen_flag " , IMA_GEN_FLOAT ) ;
RNA_def_property_ui_text ( prop , " Float Buffer " , " Generate floating point buffer " ) ;
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , " rna_Image_generated_update " ) ;
2008-11-30 18:39:49 +00:00
/* realtime properties */
prop = RNA_def_property ( srna , " mapping " , PROP_ENUM , PROP_NONE ) ;
2008-12-03 20:17:12 +00:00
RNA_def_property_enum_bitflag_sdna ( prop , NULL , " flag " ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_enum_items ( prop , prop_mapping_items ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Mapping " , " Mapping type to use for this image in the game engine " ) ;
2009-06-23 00:45:41 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , NULL ) ;
2008-11-30 18:39:49 +00:00
RNA: subtypes and units
* Reviewed subtypes, making them more specific and adding new ones.
* Subtypes now have an associated type of units (length, area, volume,
mass, rotation, time, velocity, acceleration). These are not used
yet anywhere.
* Centralized code that decides the name of array items based on
subtype (XYZ, RGB), was copied in 3 places.
* RNA_def_float etc functions still need to be update, will do this
later together with another change.
2009-08-10 21:31:05 +00:00
prop = RNA_def_property ( srna , " display_aspect " , PROP_FLOAT , PROP_XYZ ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_float_sdna ( prop , NULL , " aspx " ) ;
RNA_def_property_array ( prop , 2 ) ;
RNA_def_property_range ( prop , 0.1f , 5000.0f ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Display Aspect " , " Display Aspect for this image, does not affect rendering " ) ;
2009-06-23 00:45:41 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , NULL ) ;
2008-11-30 18:39:49 +00:00
2010-08-20 06:09:58 +00:00
prop = RNA_def_property ( srna , " use_animation " , PROP_BOOLEAN , PROP_NONE ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_boolean_sdna ( prop , NULL , " tpageflag " , IMA_TWINANIM ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Animated " , " Use as animated texture in the game engine " ) ;
2009-06-23 00:45:41 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , " rna_Image_animated_update " ) ;
2008-11-30 18:39:49 +00:00
2010-08-20 06:09:58 +00:00
prop = RNA_def_property ( srna , " frame_start " , PROP_INT , PROP_NONE ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_int_sdna ( prop , NULL , " twsta " ) ;
RNA_def_property_range ( prop , 0 , 128 ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Animation Start " , " Start frame of an animated texture " ) ;
2009-06-23 00:45:41 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , " rna_Image_animated_update " ) ;
2008-11-30 18:39:49 +00:00
2010-08-20 06:09:58 +00:00
prop = RNA_def_property ( srna , " frame_end " , PROP_INT , PROP_NONE ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_int_sdna ( prop , NULL , " twend " ) ;
RNA_def_property_range ( prop , 0 , 128 ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Animation End " , " End frame of an animated texture " ) ;
2009-06-23 00:45:41 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , " rna_Image_animated_update " ) ;
2008-11-30 18:39:49 +00:00
2010-08-20 06:09:58 +00:00
prop = RNA_def_property ( srna , " fps " , PROP_INT , PROP_NONE ) ;
2008-12-26 02:02:06 +00:00
RNA_def_property_int_sdna ( prop , NULL , " animspeed " ) ;
RNA_def_property_range ( prop , 1 , 100 ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Animation Speed " , " Speed of the animation in frames per second " ) ;
2009-06-23 00:45:41 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , NULL ) ;
2008-11-30 18:39:49 +00:00
2010-08-21 04:51:00 +00:00
prop = RNA_def_property ( srna , " use_tiles " , PROP_BOOLEAN , PROP_NONE ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_boolean_sdna ( prop , NULL , " tpageflag " , IMA_TILES ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Tiles " , " Use of tilemode for faces (default shift-LMB to pick the tile for selected faces) " ) ;
2009-06-23 00:45:41 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , NULL ) ;
2008-11-30 18:39:49 +00:00
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 ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Tiles X " , " Degree of repetition in the X direction " ) ;
2009-06-23 00:45:41 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , NULL ) ;
2008-11-30 18:39:49 +00:00
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 ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Tiles Y " , " Degree of repetition in the Y direction " ) ;
2009-06-23 00:45:41 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , NULL ) ;
2008-11-30 18:39:49 +00:00
2010-08-20 06:09:58 +00:00
prop = RNA_def_property ( srna , " use_clamp_x " , PROP_BOOLEAN , PROP_NONE ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_boolean_sdna ( prop , NULL , " tpageflag " , IMA_CLAMP_U ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Clamp X " , " Disable texture repeating horizontally " ) ;
2009-06-23 00:45:41 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , NULL ) ;
2008-11-30 18:39:49 +00:00
2010-08-20 06:09:58 +00:00
prop = RNA_def_property ( srna , " use_clamp_y " , PROP_BOOLEAN , PROP_NONE ) ;
2008-11-30 18:39:49 +00:00
RNA_def_property_boolean_sdna ( prop , NULL , " tpageflag " , IMA_CLAMP_V ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Clamp Y " , " Disable texture repeating vertically " ) ;
2009-06-23 00:45:41 +00:00
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , NULL ) ;
2010-06-03 16:26:04 +00:00
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_ui_text ( prop , " Bindcode " , " OpenGL bindcode " ) ;
RNA_def_property_update ( prop , NC_IMAGE | ND_DISPLAY , NULL ) ;
2009-07-03 17:44:20 +00:00
/*
Image . has_data and Image . depth are temporary ,
Update import_obj . py when they are replaced ( Arystan )
*/
prop = RNA_def_property ( srna , " has_data " , PROP_BOOLEAN , PROP_NONE ) ;
RNA_def_property_boolean_funcs ( prop , " rna_Image_has_data_get " , NULL ) ;
RNA_def_property_clear_flag ( prop , PROP_EDITABLE ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Has data " , " True if this image has data " ) ;
2009-07-03 17:44:20 +00:00
2010-05-20 08:51:03 +00:00
prop = RNA_def_property ( srna , " depth " , PROP_INT , PROP_UNSIGNED ) ;
2009-07-03 17:44:20 +00:00
RNA_def_property_int_funcs ( prop , " rna_Image_depth_get " , NULL , NULL ) ;
2010-02-10 18:29:58 +00:00
RNA_def_property_ui_text ( prop , " Depth " , " Image bit depth " ) ;
2009-07-03 17:44:20 +00:00
RNA_def_property_clear_flag ( prop , PROP_EDITABLE ) ;
2009-07-23 12:55:26 +00:00
2010-02-10 18:29:58 +00:00
prop = RNA_def_int_vector ( srna , " size " , 2 , NULL , 0 , 0 , " Size " , " Width and height in pixels, zero when image data cant be loaded " , 0 , 0 ) ;
2010-01-06 10:46:49 +00:00
RNA_def_property_int_funcs ( prop , " rna_Image_size_get " , NULL , NULL ) ;
RNA_def_property_clear_flag ( prop , PROP_EDITABLE ) ;
2011-05-13 14:27:12 +00:00
prop = RNA_def_float_vector ( srna , " resolution " , 2 , NULL , 0 , 0 , " Resolution " , " X/Y pixels per meter " , 0 , 0 ) ;
RNA_def_property_float_funcs ( prop , " rna_Image_resolution_get " , " rna_Image_resolution_set " , NULL ) ;
2011-04-03 16:17:39 +00:00
prop = RNA_def_property ( srna , " pixels " , PROP_FLOAT , PROP_NONE ) ;
RNA_def_property_flag ( prop , PROP_DYNAMIC ) ;
2011-04-04 17:10:48 +00:00
RNA_def_property_multi_array ( prop , 1 , NULL ) ;
2011-04-03 16:17:39 +00:00
RNA_def_property_ui_text ( prop , " Pixels " , " Image pixels in floating point values " ) ;
RNA_def_property_dynamic_array_funcs ( prop , " rna_Image_pixels_get_length " ) ;
RNA_def_property_float_funcs ( prop , " rna_Image_pixels_get " , " rna_Image_pixels_set " , NULL ) ;
2009-07-23 12:55:26 +00:00
RNA_api_image ( srna ) ;
2008-11-30 18:39:49 +00:00
}
void RNA_def_image ( BlenderRNA * brna )
{
rna_def_image ( brna ) ;
rna_def_imageuser ( brna ) ;
}
# endif