X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Factors%2Fimage-actor-impl.cpp;h=5c6b0280ddc2cbf8899b60b15739f5c9681af25c;hb=1c92aff3ef39de0b3f2699b432deeb3937172f1c;hp=550596f04fbb82034b1375a7d305d03e013a20d2;hpb=078039368f80a882a4166ab9b550c31ad72398ec;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/actors/image-actor-impl.cpp b/dali/internal/event/actors/image-actor-impl.cpp index 550596f..5c6b028 100644 --- a/dali/internal/event/actors/image-actor-impl.cpp +++ b/dali/internal/event/actors/image-actor-impl.cpp @@ -18,43 +18,42 @@ // CLASS HEADER #include +// EXTERNAL INCLUDES +#include // for strcmp + // INTERNAL INCLUDES -#include #include -#include +#include +#include +#include #include -#include +#include 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) { @@ -97,7 +96,7 @@ ImageActorPtr ImageActor::New() actor->Initialize(); // Create the attachment - actor->mImageAttachment = ImageAttachment::New( *actor->mStage, *actor->mNode ); + actor->mImageAttachment = ImageAttachment::New( actor->GetEventThreadServices(), *actor->mNode ); actor->Attach( *actor->mImageAttachment ); return actor; @@ -105,6 +104,7 @@ ImageActorPtr ImageActor::New() void ImageActor::OnInitialize() { + SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS ); } void ImageActor::SetImage( ImagePtr& image ) @@ -125,14 +125,15 @@ 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() @@ -140,18 +141,11 @@ 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 @@ -168,16 +162,7 @@ void ImageActor::ClearPixelArea() { mImageAttachment->ClearPixelArea(); - if( mUsingNaturalSize ) - { - ImagePtr image = mImageAttachment->GetImage(); - if( image ) - { - mInternalSetSize = true; - SetSize( image->GetNaturalSize() ); - mInternalSetSize = false; - } - } + RelayoutRequest(); } void ImageActor::SetStyle( Style style ) @@ -212,9 +197,7 @@ RenderableAttachment& ImageActor::GetRenderableAttachment() const } ImageActor::ImageActor() -: RenderableActor(), - mUsingNaturalSize(true), - mInternalSetSize(false) +: Actor( Actor::RENDERABLE ) { } @@ -222,16 +205,6 @@ ImageActor::~ImageActor() { } -void ImageActor::SetNaturalSize() -{ - if( mUsingNaturalSize ) - { - mInternalSetSize = true; - SetSize( CalculateNaturalSize() ); - mInternalSetSize = false; - } -} - Vector3 ImageActor::GetNaturalSize() const { Vector2 naturalSize( CalculateNaturalSize() ); @@ -261,19 +234,6 @@ Vector2 ImageActor::CalculateNaturalSize() const 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() { } @@ -284,115 +244,102 @@ void ImageActor::OnStageDisconnectionInternal() 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 @@ -400,12 +347,12 @@ Property::Index ImageActor::GetDefaultPropertyIndex(const std::string& name) con 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; } } @@ -413,37 +360,37 @@ Property::Index ImageActor::GetDefaultPropertyIndex(const std::string& name) con // 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 >()); break; } - case Dali::ImageActor::STYLE: + case Dali::ImageActor::Property::STYLE: { - SetStyle(StyleEnum(propertyValue.Get())); + SetStyle( StyleEnum( propertyValue.Get() ) ); break; } - case Dali::ImageActor::BORDER: + case Dali::ImageActor::Property::BORDER: { SetNinePatchBorder( propertyValue.Get(), true /*in pixels*/ ); break; } - case Dali::ImageActor::IMAGE: + case Dali::ImageActor::Property::IMAGE: { Dali::Image img = Scripting::NewImage( propertyValue ); if(img) @@ -470,31 +417,31 @@ void ImageActor::SetDefaultProperty( Property::Index index, const Property::Valu 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 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 ); @@ -503,7 +450,7 @@ Property::Value ImageActor::GetDefaultProperty( Property::Index index ) const } default: { - DALI_LOG_WARNING("Unknown property (%d)\n", index); + DALI_LOG_WARNING( "Unknown property (%d)\n", index ); break; } } // switch(index) @@ -512,6 +459,115 @@ Property::Value ImageActor::GetDefaultProperty( Property::Index index ) const 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