2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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.
17 * @file evas_object.cpp
18 * @author Lukasz Wrzosek (l.wrzosel@samsung.com)
20 * @brief This file is the implementation for Evas_Object wrapper from Efl.
23 #include "evas_object.h"
25 #include <dpl/foreach.h>
32 Evas_Object* EvasObject::IConnection::GetEvasObject()
34 return m_object->GetObject();
37 void EvasObject::IConnection::Disconnect()
39 m_object->DisconnectCallback(this);
42 EvasObject::IConnection::IConnection(EvasObject::EvasObjectShared* object) :
47 void EvasObject::IConnection::SmartCallbackWrapper(void* data,
48 Evas_Object* /*object*/,
52 IConnection* Calle = static_cast<IConnection*>(data);
53 Calle->Call(event_info);
56 void EvasObject::IConnection::EvasCallbackWrapper(void* data,
58 Evas_Object* /*object*/,
62 IConnection* Calle = static_cast<IConnection*>(data);
63 Calle->Call(event_info);
66 Evas_Object* EvasObject::EvasObjectShared::GetObject()
71 EvasObject::EvasObjectShared::SmartConnectionBase::SmartConnectionBase(
72 const std::string& name,
73 EvasObject::EvasObjectShared* object) :
79 void EvasObject::EvasObjectShared::SmartConnectionBase::ConnectPrv()
81 evas_object_smart_callback_add(GetEvasObject(),
82 m_callbackName.c_str(),
83 &IConnection::SmartCallbackWrapper, this);
86 void EvasObject::EvasObjectShared::SmartConnectionBase::DisconnectPrv()
88 evas_object_smart_callback_del(GetEvasObject(),
89 m_callbackName.c_str(),
90 &IConnection::SmartCallbackWrapper);
93 EvasObject::EvasObjectShared::EvasConnectionBase::EvasConnectionBase(
94 Evas_Callback_Type type,
95 EvasObject::EvasObjectShared* object) :
101 void EvasObject::EvasObjectShared::EvasConnectionBase::ConnectPrv()
103 evas_object_event_callback_add(
104 GetEvasObject(), m_callbackType, &IConnection::EvasCallbackWrapper,
108 void EvasObject::EvasObjectShared::EvasConnectionBase::DisconnectPrv()
110 evas_object_event_callback_del_full(
111 GetEvasObject(), m_callbackType, &IConnection::EvasCallbackWrapper,
115 EvasObject::EvasObjectShared::EvasObjectShared() :
120 EvasObject::EvasObjectShared::EvasObjectShared(Evas_Object* object) :
124 evas_object_event_callback_add(m_object,
130 void EvasObject::EvasObjectShared::SetObject(Evas_Object* object)
132 Assert(m_object == NULL);
133 Assert(object != NULL);
135 evas_object_event_callback_add(m_object,
141 EvasObject::EvasObjectShared::~EvasObjectShared()
145 evas_object_event_callback_del(m_object,
152 bool EvasObject::EvasObjectShared::DisconnectCallback(IConnection* connection)
154 IConnectionsSet::iterator it = m_connections.find(connection);
155 if (it != m_connections.end()) {
156 (*it)->DisconnectPrv();
158 m_connections.erase(it);
164 void EvasObject::EvasObjectShared::DisconnectAll()
166 FOREACH(it, m_connections)
168 (*it)->DisconnectPrv();
171 m_connections.clear();
174 void EvasObject::EvasObjectShared::StaticOnDelEvent(void* data,
180 EvasObjectShared* This = static_cast<EvasObjectShared*>(data);
181 if (This->m_object) {
182 evas_object_event_callback_del(This->m_object,
185 This->DisconnectAll();
186 This->m_object = NULL;
190 EvasObject::EvasObject() :
191 m_object(new EvasObjectShared())
195 EvasObject::EvasObject(Evas_Object* object) :
196 m_object(new EvasObjectShared(object))
200 EvasObject::EvasObject(const EvasObject& other) :
201 m_object(other.m_object)
205 //this destructor must be here to let pimpl with shared_ptr work without warning
206 EvasObject::~EvasObject()
210 EvasObject& EvasObject::operator=(const EvasObject& other)
213 m_object = other.m_object;
217 EvasObject* EvasObject::operator=(Evas_Object* object)
220 m_object->SetObject(object);
224 bool EvasObject::DisconnectCallback(IConnection* connection)
227 return m_object->DisconnectCallback(connection);
230 void EvasObject::DisconnectAll()
233 m_object->DisconnectAll();
236 EvasObject::operator Evas_Object *()
239 return m_object->GetObject();