// CLASS HEADER
#include <dali/internal/event/actors/image-actor-impl.h>
+// EXTERNAL INCLUDES
+#include <cstring> // for strcmp
+
// INTERNAL INCLUDES
-#include <dali/internal/event/images/nine-patch-image-impl.h>
#include <dali/public-api/object/type-registry.h>
-#include <dali/internal/event/common/property-index-ranges.h>
+#include <dali/devel-api/scripting/scripting.h>
+#include <dali/internal/event/common/property-helper.h>
+#include <dali/internal/event/effects/shader-effect-impl.h>
#include <dali/internal/event/images/image-connector.h>
-#include <dali/public-api/scripting/scripting.h>
+#include <dali/internal/event/images/nine-patch-image-impl.h>
namespace Dali
{
-const Property::Index ImageActor::PIXEL_AREA = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
-const Property::Index ImageActor::STYLE = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 1;
-const Property::Index ImageActor::BORDER = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 2;
-const Property::Index ImageActor::IMAGE = Internal::DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT + 3;
-
namespace Internal
{
namespace
{
+// Properties
+
+// Name Type writable animatable constraint-input enum for index-checking
+DALI_PROPERTY_TABLE_BEGIN
+DALI_PROPERTY( "pixel-area", RECTANGLE, true, false, true, Dali::ImageActor::Property::PIXEL_AREA )
+DALI_PROPERTY( "style", STRING, true, false, true, Dali::ImageActor::Property::STYLE )
+DALI_PROPERTY( "border", VECTOR4, true, false, true, Dali::ImageActor::Property::BORDER )
+DALI_PROPERTY( "image", MAP, true, false, false, Dali::ImageActor::Property::IMAGE )
+DALI_PROPERTY_TABLE_END( DEFAULT_DERIVED_ACTOR_PROPERTY_START_INDEX )
+
BaseHandle Create()
{
return Dali::ImageActor::New();
}
-TypeRegistration mType( typeid(Dali::ImageActor), typeid(Dali::RenderableActor), Create );
-
-const Internal::PropertyDetails DEFAULT_IMAGE_ACTOR_PROPERTY_DETAILS[] =
-{
- // Name Type writable animatable constraint-input
- { "pixel-area", Property::RECTANGLE, true, false, true }, // PIXEL_AREA
- { "style", Property::STRING, true, false, true }, // STYLE
- { "border", Property::VECTOR4, true, false, true }, // BORDER
- { "image", Property::MAP, true, false, false }, // IMAGE
-};
-const int DEFAULT_IMAGE_ACTOR_PROPERTY_COUNT = sizeof( DEFAULT_IMAGE_ACTOR_PROPERTY_DETAILS ) / sizeof( DEFAULT_IMAGE_ACTOR_PROPERTY_DETAILS[0] );
+TypeRegistration mType( typeid( Dali::ImageActor ), typeid( Dali::Actor ), Create );
ImageActor::Style StyleEnum(const std::string &s)
{
actor->Initialize();
// Create the attachment
- actor->mImageAttachment = ImageAttachment::New( *actor->mNode );
+ actor->mImageAttachment = ImageAttachment::New( actor->GetEventThreadServices(), *actor->mNode );
actor->Attach( *actor->mImageAttachment );
return actor;
void ImageActor::OnInitialize()
{
+ SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
}
void ImageActor::SetImage( ImagePtr& image )
NinePatchImage* ninePatchImage = NinePatchImage::DownCast( image.Get() );
if( ninePatchImage )
{
- newImage = ninePatchImage->CreateCroppedBitmapImage();
+ newImage = ninePatchImage->CreateCroppedBufferImage();
SetStyle( Dali::ImageActor::STYLE_NINE_PATCH );
SetNinePatchBorder( ninePatchImage->GetStretchBorders(), true );
}
}
// set the actual image (normal or 9 patch) and natural size based on that
mImageAttachment->SetImage( newImage );
- SetNaturalSize();
+
+ RelayoutRequest();
}
ImagePtr ImageActor::GetImage()
return mImageAttachment->GetImage();
}
-void ImageActor::SetToNaturalSize()
-{
- mUsingNaturalSize = true;
-
- SetNaturalSize();
-}
-
void ImageActor::SetPixelArea( const PixelArea& pixelArea )
{
mImageAttachment->SetPixelArea( pixelArea );
- SetNaturalSize();
+ RelayoutRequest();
}
const ImageActor::PixelArea& ImageActor::GetPixelArea() const
{
mImageAttachment->ClearPixelArea();
- if( mUsingNaturalSize )
- {
- ImagePtr image = mImageAttachment->GetImage();
- if( image )
- {
- mInternalSetSize = true;
- SetSize( image->GetNaturalSize() );
- mInternalSetSize = false;
- }
- }
+ RelayoutRequest();
}
void ImageActor::SetStyle( Style style )
}
ImageActor::ImageActor()
-: RenderableActor(),
- mUsingNaturalSize(true),
- mInternalSetSize(false)
+: Actor( Actor::RENDERABLE )
{
}
{
}
-void ImageActor::SetNaturalSize()
-{
- if( mUsingNaturalSize )
- {
- mInternalSetSize = true;
- SetSize( CalculateNaturalSize() );
- mInternalSetSize = false;
- }
-}
-
Vector3 ImageActor::GetNaturalSize() const
{
Vector2 naturalSize( CalculateNaturalSize() );
return size;
}
-void ImageActor::OnSizeSet( const Vector3& targetSize )
-{
- if( !mInternalSetSize )
- {
- mUsingNaturalSize = false;
- }
-}
-
-void ImageActor::OnSizeAnimation(Animation& animation, const Vector3& targetSize)
-{
- mUsingNaturalSize = false;
-}
-
void ImageActor::OnStageConnectionInternal()
{
}
unsigned int ImageActor::GetDefaultPropertyCount() const
{
- return RenderableActor::GetDefaultPropertyCount() + DEFAULT_IMAGE_ACTOR_PROPERTY_COUNT;
+ return Actor::GetDefaultPropertyCount() + DEFAULT_PROPERTY_COUNT;
}
void ImageActor::GetDefaultPropertyIndices( Property::IndexContainer& indices ) const
{
- RenderableActor::GetDefaultPropertyIndices( indices ); // RenderableActor class properties
+ Actor::GetDefaultPropertyIndices( indices ); // Actor class properties
- indices.reserve( indices.size() + DEFAULT_IMAGE_ACTOR_PROPERTY_COUNT );
+ indices.Reserve( indices.Size() + DEFAULT_PROPERTY_COUNT );
- int index = DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
- for ( int i = 0; i < DEFAULT_IMAGE_ACTOR_PROPERTY_COUNT; ++i, ++index )
+ int index = DEFAULT_DERIVED_ACTOR_PROPERTY_START_INDEX;
+ for ( int i = 0; i < DEFAULT_PROPERTY_COUNT; ++i, ++index )
{
- indices.push_back( index );
+ indices.PushBack( index );
}
}
bool ImageActor::IsDefaultPropertyWritable( Property::Index index ) const
{
- if( index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT )
+ if( index < DEFAULT_ACTOR_PROPERTY_MAX_COUNT )
{
- return RenderableActor::IsDefaultPropertyWritable(index);
+ return Actor::IsDefaultPropertyWritable(index);
}
- else
+
+ index -= DEFAULT_DERIVED_ACTOR_PROPERTY_START_INDEX;
+ if ( ( index >= 0 ) && ( index < DEFAULT_PROPERTY_COUNT ) )
{
- index -= DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
- if ( ( index >= 0 ) && ( index < DEFAULT_IMAGE_ACTOR_PROPERTY_COUNT ) )
- {
- return DEFAULT_IMAGE_ACTOR_PROPERTY_DETAILS[ index ].writable;
- }
+ return DEFAULT_PROPERTY_DETAILS[ index ].writable;
}
+
return false;
}
bool ImageActor::IsDefaultPropertyAnimatable( Property::Index index ) const
{
- if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
+ if( index < DEFAULT_ACTOR_PROPERTY_MAX_COUNT )
{
- return RenderableActor::IsDefaultPropertyAnimatable(index);
+ return Actor::IsDefaultPropertyAnimatable( index );
}
- else
+
+ index -= DEFAULT_DERIVED_ACTOR_PROPERTY_START_INDEX;
+ if ( ( index >= 0 ) && ( index < DEFAULT_PROPERTY_COUNT ) )
{
- index -= DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
- if ( ( index >= 0 ) && ( index < DEFAULT_IMAGE_ACTOR_PROPERTY_COUNT ) )
- {
- return DEFAULT_IMAGE_ACTOR_PROPERTY_DETAILS[ index ].animatable;
- }
+ return DEFAULT_PROPERTY_DETAILS[ index ].animatable;
}
+
return false;
}
bool ImageActor::IsDefaultPropertyAConstraintInput( Property::Index index ) const
{
- if( index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT )
+ if( index < DEFAULT_ACTOR_PROPERTY_MAX_COUNT )
{
- return RenderableActor::IsDefaultPropertyAConstraintInput(index);
+ return Actor::IsDefaultPropertyAConstraintInput( index );
}
- else
+
+ index -= DEFAULT_DERIVED_ACTOR_PROPERTY_START_INDEX;
+ if ( ( index >= 0 ) && ( index < DEFAULT_PROPERTY_COUNT ) )
{
- index -= DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
- if ( ( index >= 0 ) && ( index < DEFAULT_IMAGE_ACTOR_PROPERTY_COUNT ) )
- {
- return DEFAULT_IMAGE_ACTOR_PROPERTY_DETAILS[ index ].constraintInput;
- }
+ return DEFAULT_PROPERTY_DETAILS[ index ].constraintInput;
}
+
return false;
}
Property::Type ImageActor::GetDefaultPropertyType( Property::Index index ) const
{
- if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
+ if( index < DEFAULT_ACTOR_PROPERTY_MAX_COUNT )
{
- return RenderableActor::GetDefaultPropertyType(index);
+ return Actor::GetDefaultPropertyType( index );
}
- else
- {
- index -= DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
- if ( ( index >= 0 ) && ( index < DEFAULT_IMAGE_ACTOR_PROPERTY_COUNT ) )
- {
- return DEFAULT_IMAGE_ACTOR_PROPERTY_DETAILS[index].type;
- }
- else
- {
- // index out-of-bounds
- return Property::NONE;
- }
+ index -= DEFAULT_DERIVED_ACTOR_PROPERTY_START_INDEX;
+ if ( ( index >= 0 ) && ( index < DEFAULT_PROPERTY_COUNT ) )
+ {
+ return DEFAULT_PROPERTY_DETAILS[index].type;
}
+
+ // index out-of-bounds
+ return Property::NONE;
}
const char* ImageActor::GetDefaultPropertyName( Property::Index index ) const
{
- if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
+ if( index < DEFAULT_ACTOR_PROPERTY_MAX_COUNT)
{
- return RenderableActor::GetDefaultPropertyName(index);
+ return Actor::GetDefaultPropertyName(index);
}
- else
- {
- index -= DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
- if ( ( index >= 0 ) && ( index < DEFAULT_IMAGE_ACTOR_PROPERTY_COUNT ) )
- {
- return DEFAULT_IMAGE_ACTOR_PROPERTY_DETAILS[index].name;
- }
- else
- {
- // index out-of-bounds
- return NULL;
- }
+ index -= DEFAULT_DERIVED_ACTOR_PROPERTY_START_INDEX;
+ if ( ( index >= 0 ) && ( index < DEFAULT_PROPERTY_COUNT ) )
+ {
+ return DEFAULT_PROPERTY_DETAILS[index].name;
}
+
+ // index out-of-bounds
+ return NULL;
}
Property::Index ImageActor::GetDefaultPropertyIndex(const std::string& name) const
Property::Index index = Property::INVALID_INDEX;
// Look for name in default properties
- for( int i = 0; i < DEFAULT_IMAGE_ACTOR_PROPERTY_COUNT; ++i )
+ for( int i = 0; i < DEFAULT_PROPERTY_COUNT; ++i )
{
- const Internal::PropertyDetails* property = &DEFAULT_IMAGE_ACTOR_PROPERTY_DETAILS[ i ];
- if( 0 == strcmp( name.c_str(), property->name ) ) // dont want to convert rhs to string
+ const Internal::PropertyDetails* property = &DEFAULT_PROPERTY_DETAILS[ i ];
+ if( 0 == strcmp( name.c_str(), property->name ) ) // Don't want to convert rhs to string
{
- index = i + DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT;
+ index = i + DEFAULT_DERIVED_ACTOR_PROPERTY_START_INDEX;
break;
}
}
// If not found, check in base class
if( Property::INVALID_INDEX == index )
{
- index = RenderableActor::GetDefaultPropertyIndex( name );
+ index = Actor::GetDefaultPropertyIndex( name );
}
return index;
}
void ImageActor::SetDefaultProperty( Property::Index index, const Property::Value& propertyValue )
{
- if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
+ if( index < DEFAULT_ACTOR_PROPERTY_MAX_COUNT )
{
- RenderableActor::SetDefaultProperty(index, propertyValue);
+ Actor::SetDefaultProperty( index, propertyValue );
}
else
{
switch(index)
{
- case Dali::ImageActor::PIXEL_AREA:
+ case Dali::ImageActor::Property::PIXEL_AREA:
{
SetPixelArea(propertyValue.Get<Rect<int> >());
break;
}
- case Dali::ImageActor::STYLE:
+ case Dali::ImageActor::Property::STYLE:
{
- SetStyle(StyleEnum(propertyValue.Get<std::string>()));
+ SetStyle( StyleEnum( propertyValue.Get<std::string>() ) );
break;
}
- case Dali::ImageActor::BORDER:
+ case Dali::ImageActor::Property::BORDER:
{
SetNinePatchBorder( propertyValue.Get<Vector4>(), true /*in pixels*/ );
break;
}
- case Dali::ImageActor::IMAGE:
+ case Dali::ImageActor::Property::IMAGE:
{
Dali::Image img = Scripting::NewImage( propertyValue );
if(img)
Property::Value ImageActor::GetDefaultProperty( Property::Index index ) const
{
Property::Value ret;
- if(index < DEFAULT_RENDERABLE_ACTOR_PROPERTY_MAX_COUNT)
+ if( index < DEFAULT_ACTOR_PROPERTY_MAX_COUNT )
{
- ret = RenderableActor::GetDefaultProperty(index);
+ ret = Actor::GetDefaultProperty( index );
}
else
{
- switch(index)
+ switch( index )
{
- case Dali::ImageActor::PIXEL_AREA:
+ case Dali::ImageActor::Property::PIXEL_AREA:
{
Rect<int> r = GetPixelArea();
ret = r;
break;
}
- case Dali::ImageActor::STYLE:
+ case Dali::ImageActor::Property::STYLE:
{
- ret = StyleString(GetStyle());
+ ret = StyleString( GetStyle() );
break;
}
- case Dali::ImageActor::BORDER:
+ case Dali::ImageActor::Property::BORDER:
{
ret = GetNinePatchBorder();
break;
}
- case Dali::ImageActor::IMAGE:
+ case Dali::ImageActor::Property::IMAGE:
{
Property::Map map;
Scripting::CreatePropertyMap( Dali::Image( mImageAttachment->GetImage().Get() ), map );
}
default:
{
- DALI_LOG_WARNING("Unknown property (%d)\n", index);
+ DALI_LOG_WARNING( "Unknown property (%d)\n", index );
break;
}
} // switch(index)
return ret;
}
+
+void ImageActor::SetSortModifier(float modifier)
+{
+ mImageAttachment->SetSortModifier( modifier );
+}
+
+float ImageActor::GetSortModifier() const
+{
+ return mImageAttachment->GetSortModifier();
+}
+
+void ImageActor::SetDepthIndex( int depthIndex )
+{
+ mImageAttachment->SetSortModifier( depthIndex );
+}
+
+int ImageActor::GetDepthIndex() const
+{
+ return static_cast< int >( mImageAttachment->GetSortModifier() );
+}
+
+void ImageActor::SetCullFace(CullFaceMode mode)
+{
+ mImageAttachment->SetCullFace( mode );
+}
+
+CullFaceMode ImageActor::GetCullFace() const
+{
+ return mImageAttachment->GetCullFace();
+}
+
+void ImageActor::SetBlendMode( BlendingMode::Type mode )
+{
+ mImageAttachment->SetBlendMode( mode );
+}
+
+BlendingMode::Type ImageActor::GetBlendMode() const
+{
+ return mImageAttachment->GetBlendMode();
+}
+
+void ImageActor::SetBlendFunc( BlendingFactor::Type srcFactorRgba, BlendingFactor::Type destFactorRgba )
+{
+ mImageAttachment->SetBlendFunc( srcFactorRgba, destFactorRgba, srcFactorRgba, destFactorRgba );
+}
+
+void ImageActor::SetBlendFunc( BlendingFactor::Type srcFactorRgb, BlendingFactor::Type destFactorRgb,
+ BlendingFactor::Type srcFactorAlpha, BlendingFactor::Type destFactorAlpha )
+{
+ mImageAttachment->SetBlendFunc( srcFactorRgb, destFactorRgb, srcFactorAlpha, destFactorAlpha );
+}
+
+void ImageActor::GetBlendFunc( BlendingFactor::Type& srcFactorRgb, BlendingFactor::Type& destFactorRgb,
+ BlendingFactor::Type& srcFactorAlpha, BlendingFactor::Type& destFactorAlpha ) const
+{
+ mImageAttachment->GetBlendFunc( srcFactorRgb, destFactorRgb, srcFactorAlpha, destFactorAlpha );
+}
+
+void ImageActor::SetBlendEquation( BlendingEquation::Type equationRgba )
+{
+ mImageAttachment->SetBlendEquation( equationRgba, equationRgba );
+}
+
+void ImageActor::SetBlendEquation( BlendingEquation::Type equationRgb, BlendingEquation::Type equationAlpha )
+{
+ mImageAttachment->SetBlendEquation( equationRgb, equationAlpha );
+}
+
+void ImageActor::GetBlendEquation( BlendingEquation::Type& equationRgb, BlendingEquation::Type& equationAlpha ) const
+{
+ mImageAttachment->GetBlendEquation( equationRgb, equationAlpha );
+}
+
+void ImageActor::SetBlendColor( const Vector4& color )
+{
+ mImageAttachment->SetBlendColor( color );
+}
+
+const Vector4& ImageActor::GetBlendColor() const
+{
+ return mImageAttachment->GetBlendColor();
+}
+
+void ImageActor::SetFilterMode( FilterMode::Type minFilter, FilterMode::Type magFilter )
+{
+ mImageAttachment->SetFilterMode( minFilter, magFilter );
+}
+
+void ImageActor::GetFilterMode( FilterMode::Type& minFilter, FilterMode::Type& magFilter ) const
+{
+ return mImageAttachment->GetFilterMode( minFilter, magFilter );
+}
+
+void ImageActor::SetShaderEffect(ShaderEffect& effect)
+{
+ mImageAttachment->SetShaderEffect( effect );
+}
+
+ShaderEffectPtr ImageActor::GetShaderEffect() const
+{
+ return mImageAttachment->GetShaderEffect();
+}
+
+void ImageActor::RemoveShaderEffect()
+{
+ return mImageAttachment->RemoveShaderEffect();
+}
+
+
} // namespace Internal
} // namespace Dali