2 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 #include "resource-image-api.h"
22 #include <dali/public-api/images/image-operations.h>
26 #include <image/image-wrapper.h>
34 ResourceImage ResourceImageApi::GetResourceImage( v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args )
36 v8::HandleScope handleScope( isolate );
38 v8::Local<v8::Object> object = args.This();
39 v8::Local<v8::External> field = v8::Local<v8::External>::Cast( object->GetInternalField(0) );
40 void* ptr = field->Value();
42 ImageWrapper* wrapper = static_cast< ImageWrapper *>(ptr);
43 return ResourceImage::DownCast( wrapper->GetImage() );
47 * Create a new resource image object.
50 * @method ResourceImage
52 * @param {Object} options
53 * @param {String} options.url The URL of the image file to use.
54 * @param {Float} options.width The width to fit the loaded image to
55 * @param {Float} options.height The height to fit the loaded image to
56 * @return {Object} Image
58 Image ResourceImageApi::New( const v8::FunctionCallbackInfo< v8::Value >& args )
60 v8::Isolate* isolate = args.GetIsolate();
61 v8::HandleScope handleScope( isolate );
64 ImageDimensions dimensions;
65 v8::Local<v8::Value> options( args[0] );
67 if( !options->IsObject() )
69 DALI_SCRIPT_EXCEPTION( isolate, "Missing params" );
73 v8::Local<v8::Object> optionsObject = options->ToObject();
75 v8::Local<v8::Value> urlValue = optionsObject->Get( v8::String::NewFromUtf8( isolate, "url" ) );
76 if( urlValue->IsString() )
78 url = V8Utils::v8StringToStdString( urlValue );
82 DALI_SCRIPT_EXCEPTION( isolate, "Missing url");
86 v8::Local<v8::Value> widthValue = optionsObject->Get( v8::String::NewFromUtf8( isolate, "width" ) );
87 if( widthValue->IsUint32() )
89 const uint32_t width = widthValue->ToUint32()->Value();
90 dimensions = ImageDimensions( width, dimensions.GetHeight() );
93 v8::Local<v8::Value> heightValue = optionsObject->Get( v8::String::NewFromUtf8( isolate, "height" ) );
94 if( heightValue->IsUint32() )
96 const uint32_t height = heightValue->ToUint32()->Value();
97 dimensions = ImageDimensions( dimensions.GetWidth(), height );
100 return ResourceImage::New( url, dimensions );
104 * Query whether the image data has loaded.
106 * The asynchronous loading begins when the Image object is created.
107 * After the Image object is discarded, the image data will be released from memory
108 * this will occur when the object is garbage collected.
109 * @method getLoadPolicy
111 * @return {Integer} loading state either dali.RESOURCE_LOADING, dali.RESOURCE_LOADING_SUCCEEDED or dali.RESOUCE_LOADING_FAILED
113 void ResourceImageApi::GetLoadingState( const v8::FunctionCallbackInfo< v8::Value >& args )
115 v8::Isolate* isolate = args.GetIsolate();
116 v8::HandleScope handleScope( isolate );
118 ResourceImage image = GetResourceImage( isolate, args );
120 args.GetReturnValue().Set( v8::Integer::New( isolate, image.GetLoadingState() ) );
124 * Return the image url
128 * @return {String} filename
130 void ResourceImageApi::GetUrl( const v8::FunctionCallbackInfo< v8::Value >& args )
132 v8::Isolate* isolate = args.GetIsolate();
133 v8::HandleScope handleScope( isolate );
135 ResourceImage image = GetResourceImage( isolate, args );
137 v8::Local<v8::String> v8String = v8::String::NewFromUtf8( isolate, image.GetUrl().c_str() );
138 args.GetReturnValue().Set( v8String );
144 * @note if Image is offstage and OnDemand policy is set, reload request is ignored.
148 void ResourceImageApi::Reload( const v8::FunctionCallbackInfo< v8::Value >& args )
150 v8::Isolate* isolate = args.GetIsolate();
151 v8::HandleScope handleScope( isolate );
153 ResourceImage image = GetResourceImage( isolate, args );
157 } // namespace V8Plugin