(ImageLoading) Added new method to get closest image size
[platform/core/uifw/dali-adaptor.git] / platform-abstractions / slp / resource-loader / resource-bitmap-requester.cpp
1 //
2 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //     http://floralicense.org/license/
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an AS IS BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 #include "resource-bitmap-requester.h"
18 #include <dali/integration-api/resource-cache.h>
19
20 using namespace Dali::Integration;
21
22 namespace Dali
23 {
24 namespace SlpPlatform
25 {
26
27 ResourceBitmapRequester::ResourceBitmapRequester( ResourceLoader& resourceLoader )
28 : ResourceRequesterBase( resourceLoader )
29 {
30   mThreadImage  = new ResourceThreadImage( resourceLoader );
31   mThreadDistanceField = new ResourceThreadDistanceField( resourceLoader );
32 }
33
34 ResourceBitmapRequester::~ResourceBitmapRequester()
35 {
36   delete mThreadImage;
37   delete mThreadDistanceField;
38 }
39
40 void ResourceBitmapRequester::Pause()
41 {
42   mThreadImage->Pause();
43   mThreadDistanceField->Pause();
44 }
45
46 void ResourceBitmapRequester::Resume()
47 {
48   mThreadImage->Resume();
49   mThreadDistanceField->Resume();
50 }
51
52 void ResourceBitmapRequester::LoadResource( Integration::ResourceRequest& request )
53 {
54   DALI_ASSERT_DEBUG( (0 != dynamic_cast<BitmapResourceType*>(request.GetType())) && "Only requsts for bitmap resources can ever be routed to ResourceBitmapRequester.\n");
55   BitmapResourceType* resType = static_cast<BitmapResourceType*>(request.GetType());
56   if( resType )
57   {
58     // Work out if the resource is in memory or a file:
59     const ResourceThreadBase::RequestType requestType = request.GetResource().Get() ? ResourceThreadBase::RequestDecode : ResourceThreadBase::RequestLoad;
60
61     // Work out what thread to decode / load the image on:
62     ResourceThreadBase* const imageThread = mThreadImage;
63     ResourceThreadBase* const distanceFieldThread = mThreadDistanceField ;
64     ResourceThreadBase* const workerThread = ( !resType->imageAttributes.IsDistanceField() ) ? imageThread : distanceFieldThread;
65
66     // Dispatch the job to the right thread:
67     workerThread->AddRequest( request, requestType );
68   }
69 }
70
71 Integration::LoadStatus ResourceBitmapRequester::LoadFurtherResources( Integration::ResourceRequest& request, LoadedResource partialResource )
72 {
73   // Nothing to do
74   return RESOURCE_COMPLETELY_LOADED;
75 }
76
77 void ResourceBitmapRequester::SaveResource(const Integration::ResourceRequest& request )
78 {
79   // Nothing to do
80 }
81
82 void ResourceBitmapRequester::CancelLoad(Integration::ResourceId id, Integration::ResourceTypeId typeId)
83 {
84   mThreadImage->CancelRequest(id);
85   mThreadDistanceField->CancelRequest(id);
86 }
87
88 void ResourceBitmapRequester::GetClosestImageSize( const std::string& filename,
89                                                    const ImageAttributes& attributes,
90                                                    Vector2 &closestSize )
91 {
92   mThreadImage->GetClosestImageSize(filename, attributes, closestSize );
93 }
94
95 void ResourceBitmapRequester::GetClosestImageSize( Integration::ResourcePointer resourceBuffer,
96                                                    const ImageAttributes& attributes,
97                                                    Vector2 &closestSize )
98 {
99   mThreadImage->GetClosestImageSize(resourceBuffer, attributes, closestSize );
100 }
101
102 } // SlpPlatform
103 } // Dali