-namespace
-{
-
-BaseHandle CreateImage()
-{
- ImagePtr image = Image::New();
- return Dali::Image(image.Get());
-}
-
-TypeRegistration mType( typeid(Dali::Image), typeid(Dali::BaseHandle), CreateImage );
-
-Dali::SignalConnectorType signalConnector1(mType, Dali::Image::SIGNAL_IMAGE_LOADING_FINISHED, &Image::DoConnectSignal);
-Dali::SignalConnectorType signalConnector2(mType, Dali::Image::SIGNAL_IMAGE_UPLOADED, &Image::DoConnectSignal);
-}
-
-Image::Image( LoadPolicy loadPol, ReleasePolicy releasePol )
-: mWidth(0),
- mHeight(0),
- mNaturalSizeSet(false),
- mLoadPolicy(loadPol),
- mReleasePolicy(releasePol),
- mConnectionCount(0),
- mImageFactory(ThreadLocalStorage::Get().GetImageFactory())
-{
-}
-
-ImagePtr Image::New()
-{
- ImagePtr image = new Image;
- image->Initialize();
- return image;
-}
-
-ImagePtr Image::New( const std::string& filename, const Dali::ImageAttributes& attributes, LoadPolicy loadPol, ReleasePolicy releasePol )
-{
- if( IsNinePatchFileName(filename) )
- {
- NinePatchImagePtr image = NinePatchImage::New( filename, attributes, loadPol, releasePol );
- return image;
- }
- else
- {
- ImagePtr image = new Image( loadPol, releasePol );
- image->Initialize();
-
- image->mRequest = image->mImageFactory.RegisterRequest( filename, &attributes );
-
- if( Dali::Image::Immediate == loadPol )
- {
- // Trigger loading of the image on a seperate resource thread as soon as it
- // can be scheduled:
- image->mTicket = image->mImageFactory.Load( image->mRequest.Get() );
- image->mTicket->AddObserver( *image );
- }
-
- // else lazily load image data later, only when it is needed to draw something:
-
- DALI_LOG_SET_OBJECT_STRING( image, filename );
-
- return image;
- }
-}
-
-ImagePtr Image::New( NativeImage& nativeImg, LoadPolicy loadPol, ReleasePolicy releasePol )
-{
- ImagePtr image = new Image;
- image->Initialize();
-
- ResourceClient &resourceClient = ThreadLocalStorage::Get().GetResourceClient();
-
- image->mWidth = nativeImg.GetWidth();
- image->mHeight = nativeImg.GetHeight();
- image->mNaturalSizeSet = true;
-
- const ResourceTicketPtr& ticket = resourceClient.AddNativeImage( nativeImg );
- DALI_ASSERT_DEBUG( dynamic_cast<ImageTicket*>( ticket.Get() ) && "Resource ticket not ImageTicket subclass for image resource.\n" );
- image->mTicket = static_cast<ImageTicket*>(ticket.Get());
- image->mTicket->AddObserver( *image );
-
- return image;
-}
-
-Image::~Image()
-{
- if( mTicket )
- {
- mTicket->RemoveObserver( *this );
- if( Stage::IsInstalled() )
- {
- mImageFactory.ReleaseTicket( mTicket.Get() );
- }
- }
-
- if( Stage::IsInstalled() )
- {
- UnregisterObject();
- }
-}
-
-bool Image::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
-{
- bool connected( true );
- DALI_ASSERT_DEBUG( dynamic_cast<Image*>( object ) && "Resource ticket not ImageTicket subclass for image resource.\n" );
- Image* image = static_cast<Image*>(object);
-
- if( Dali::Image::SIGNAL_IMAGE_LOADING_FINISHED == signalName )
- {
- image->LoadingFinishedSignal().Connect( tracker, functor );
- }
- else if(Dali::Image::SIGNAL_IMAGE_UPLOADED == signalName)
- {
- image->UploadedSignal().Connect( tracker, functor );
- }
- else
- {
- // signalName does not match any signal
- connected = false;
- }
-
- return connected;
-}
-
-ResourceId Image::GetResourceId() const
-{
- ResourceId ret = mTicket ? mTicket->GetId() : 0;
-
- return ret;
-}
-
-const Dali::ImageAttributes& Image::GetAttributes() const
-{
- if( mTicket )
- {
- return mImageFactory.GetActualAttributes( mTicket->GetId() );
- }
- else
- {
- return mImageFactory.GetRequestAttributes( mRequest.Get() );
- }
-}
-
-const std::string& Image::GetFilename() const
-{
- return mImageFactory.GetRequestPath( mRequest.Get() );
-}
-
-void Image::Reload()
-{
- if ( mRequest )
- {
- ResourceTicketPtr ticket = mImageFactory.Reload( mRequest.Get() );
- SetTicket( ticket.Get() );
- }
-}
-
-void Image::ResourceLoadingFailed(const ResourceTicket& ticket)
-{
- mLoadingFinishedV2.Emit( Dali::Image( this ) );
-}
-
-void Image::ResourceLoadingSucceeded(const ResourceTicket& ticket)
-{
- // Update size with actual loaded size
- const ImageTicket* imageTicket = static_cast<const ImageTicket*>(&ticket);
- mWidth = imageTicket->GetWidth();
- mHeight = imageTicket->GetHeight();
- mNaturalSizeSet = true;
- mLoadingFinishedV2.Emit( Dali::Image( this ) );
-}
-
-void Image::ResourceUploaded(const ResourceTicket& ticket)
-{
- mUploadedV2.Emit( Dali::Image( this ) );
-}
-
-void Image::ResourceSavingSucceeded( const ResourceTicket& ticket )
-{
- // do nothing
-}
-
-void Image::ResourceSavingFailed( const ResourceTicket& ticket )
-{
- // do nothing
-}
-