2 * Copyright (c) 2014 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 "widget-impl.h"
22 #include <system_info.h>
25 #include <dali/integration-api/debug.h>
26 #include <dali/public-api/math/vector2.h>
42 static bool IsWidgetFeatureEnabled()
44 static bool feature = false;
45 static bool retrieved = false;
51 ret = system_info_get_platform_bool("http://tizen.org/feature/shell.appwidget", &feature);
52 if(ret != SYSTEM_INFO_ERROR_NONE)
54 DALI_LOG_ERROR("failed to get system info\n"); /* LCOV_EXCL_LINE */
55 return false; /* LCOV_EXCL_LINE */
63 } // anonymous namespace
65 Dali::Widget Widget::New( const std::string& id )
67 if(!IsWidgetFeatureEnabled())
69 DALI_LOG_ERROR("not supported");
70 Dali::Widget handle(NULL);
76 DALI_LOG_ERROR("class id is NULL");
77 Dali::Widget handle(NULL);
81 WidgetPtr widget ( new Widget( id ) );
82 Dali::Widget handle( widget.Get() );
86 static int OnInit(widget_base_instance_h instance_h, bundle *content, int w, int h, void *classData)
89 widget_base_context_get_id(instance_h, &id);
90 widget_base_class_on_create(instance_h, content, w, h);
92 Dali::Window window = Dali::Adaptor::Get().GetWindow();
93 Any nativeHandle = window.GetNativeHandle();
94 Ecore_Wl_Window * wlWindow = AnyCast<Ecore_Wl_Window*>( nativeHandle );
95 widget_base_context_window_bind( instance_h, id, wlWindow);
96 window.SetSize( Dali::Window::WindowSize( w, h ) );
98 Internal::Adaptor::Widget* widget = static_cast< Internal::Adaptor::Widget* >( classData );
99 widget->mCreateSignal.Emit( std::string(id), content, window );
104 static int OnDestroy(widget_base_instance_h instance_h, widget_base_destroy_type_e reason, bundle *content, void *classData)
107 widget_base_context_get_id(instance_h, &id);
109 Dali::Widget::WidgetTerminateType destroyReason = Dali::Widget::WidgetTerminateType::TEMPORARY;
111 if(reason == WIDGET_BASE_DESTROY_TYPE_PERMANENT)
113 destroyReason = Dali::Widget::WidgetTerminateType::PERMANENT;
116 Internal::Adaptor::Widget* widget = static_cast< Internal::Adaptor::Widget* >( classData );
117 widget->mTerminateSignal.Emit(std::string(id), content, destroyReason );
119 widget_base_class_on_destroy(instance_h, reason, content);
124 static int OnPause(widget_base_instance_h instance_h, void *classData)
127 widget_base_context_get_id(instance_h, &id);
129 widget_base_class_on_pause(instance_h);
131 Internal::Adaptor::Widget* widget = static_cast< Internal::Adaptor::Widget* >( classData );
132 widget->mPauseSignal.Emit(id);
137 static int OnResume(widget_base_instance_h instance_h, void *classData)
140 widget_base_context_get_id(instance_h, &id);
142 widget_base_class_on_resume(instance_h);
144 Internal::Adaptor::Widget* widget = static_cast< Internal::Adaptor::Widget* >( classData );
145 widget->mResumeSignal.Emit(id);
150 static int OnResize(widget_base_instance_h instance_h, int w, int h, void *classData)
153 widget_base_context_get_id(instance_h, &id);
155 widget_base_class_on_resize(instance_h, w, h);
157 Internal::Adaptor::Widget* widget = static_cast< Internal::Adaptor::Widget* >( classData );
158 Dali::Window window = Dali::Adaptor::Get().GetWindow();
159 window.SetSize( Dali::Window::WindowSize(w, h) );
160 widget->mResizeSignal.Emit(id, window);
165 static int OnUpdate(widget_base_instance_h instance_h, bundle *content, int force, void *classData)
168 widget_base_context_get_id(instance_h, &id);
170 widget_base_class_on_update(instance_h, content, force);
172 Internal::Adaptor::Widget* widget = static_cast< Internal::Adaptor::Widget* >( classData );
173 widget->mUpdateSignal.Emit(id, content, force);
178 Widget::Widget( const std::string& id )
188 widget_base_class cls = widget_base_class_get_default();
189 cls.ops.create = OnInit;
190 cls.ops.destroy = OnDestroy;
191 cls.ops.pause = OnPause;
192 cls.ops.resume = OnResume;
193 cls.ops.resize = OnResize;
194 cls.ops.update = OnUpdate;
196 widget_base_class_add(cls, mClassId.c_str(), this);