1 #ifndef __DALI_EXTENSION_INTERNAL_EVAS_PLUGIN_H__
2 #define __DALI_EXTENSION_INTERNAL_EVAS_PLUGIN_H__
5 * Copyright (c) 2019 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <Elementary.h>
23 #include <Ecore_IMF_Evas.h>
24 #include <tbm_surface.h>
26 #include <dali/public-api/dali-core.h>
27 #include <dali/public-api/math/rect.h>
28 #include <dali/public-api/object/base-object.h>
29 #include <dali/public-api/common/intrusive-ptr.h>
30 #include <dali/public-api/common/stage.h>
31 #include <dali/public-api/signals/connection-tracker.h>
32 #include <dali/public-api/adaptor-framework/timer.h>
34 #include <dali/devel-api/adaptor-framework/singleton-service.h>
35 #include <dali/devel-api/adaptor-framework/clipboard.h>
36 #include <dali/devel-api/adaptor-framework/clipboard-event-notifier.h>
37 #include <dali/devel-api/adaptor-framework/accessibility-adaptor.h>
40 #include <dali/integration-api/debug.h>
41 #include <dali/integration-api/adaptors/adaptor.h>
42 #include <dali/integration-api/adaptors/native-render-surface.h>
43 #include <dali/integration-api/adaptors/native-render-surface-factory.h>
44 #include <dali/integration-api/adaptors/trigger-event-factory.h>
45 #ifdef DALI_EVASPLUGIN_USE_IMF_MANAGER
46 #include <dali/integration-api/adaptors/imf-manager-impl.h>
49 #include <dali-toolkit/public-api/accessibility-manager/accessibility-manager.h>
58 #include "evas-event-handler.h"
59 #include "ecore-wl-event-handler.h"
60 #include "evas-plugin-event-interface.h"
61 #include "evas-plugin-visibility-interface.h"
63 #include <dali-extension/devel-api/evas-plugin/evas-plugin.h>
67 class TriggerEventInterface;
68 class NativeRenderSurface;
76 typedef Rect<int> PositionSize;
79 typedef IntrusivePtr<EvasPlugin> EvasPluginPtr;
82 * Implementation of the EvasPlugin class.
84 class EvasPlugin : public BaseObject,
85 public ConnectionTracker,
86 public Extension::Internal::EvasPluginEventInterface,
87 public Extension::Internal::EvasPluginVisibilityInterface
91 typedef Dali::Extension::EvasPlugin::EvasPluginSignalType EvasPluginSignalType;
94 * @brief Create a new evas plugin
95 * @param[in] parentEvasObject A pointer of the parent evas object
96 * @param[in] width The width of Dali view port
97 * @param[in] height The height of Dali view port
98 * @param[in] transparent Whether the evas object is transparent or not
100 static EvasPluginPtr New(Evas_Object* parentEvasObject, int width, int height, bool transparent);
105 * @copydoc Dali::Extension::EvasPlugin::Start()
110 * @copydoc Dali::Extension::EvasPlugin::Pause()
115 * @copydoc Dali::Extension::EvasPlugin::Resume()
120 * @copydoc Dali::Extension::EvasPlugin::Stop()
125 * @copydoc Dali::Extension::EvasPlugin::GetDaliAccessEvasObject()
127 Evas_Object* GetDaliAccessEvasObject();
130 * @copydoc Dali::Extension::EvasPlugin::GetDaliEvasObject()
132 Evas_Object* GetDaliEvasObject();
135 * @copydoc Dali::Extension::EvasPlugin::InitSignal()
137 EvasPluginSignalType& InitSignal()
143 * @copydoc Dali::Extension::EvasPlugin::TerminateSignal()
145 EvasPluginSignalType& TerminateSignal()
147 return mTerminateSignal;
151 * @copydoc Dali::Extension::EvasPlugin::PauseSignal()
153 EvasPluginSignalType& PauseSignal()
159 * @copydoc Dali::Extension::EvasPlugin::ResumeSignal()
161 EvasPluginSignalType& ResumeSignal()
163 return mResumeSignal;
167 * @copydoc Dali::Extension::EvasPlugin::ResizeSignal()
169 EvasPluginSignalType& ResizeSignal()
171 return mResizeSignal;
175 * @copydoc Dali::Extension::EvasPlugin::FocusedSignal()
177 EvasPluginSignalType& FocusedSignal()
179 return mFocusedSignal;
183 * @copydoc Dali::Extension::EvasPlugin::UnFocusedSignal()
185 EvasPluginSignalType& UnFocusedSignal()
187 return mUnFocusedSignal;
193 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnEvasObjectTouchEvent
195 virtual void OnEvasObjectTouchEvent(TouchPoint& touchPoint, unsigned long timeStamp);
198 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnEvasObjectWheelEvent
200 virtual void OnEvasObjectWheelEvent(WheelEvent& wheelEvent);
203 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnEvasObjectKeyEvent
205 virtual void OnEvasObjectKeyEvent(KeyEvent& keyEvent);
208 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnEvasObjectMove
210 virtual void OnEvasObjectMove(const Rect<int>& geometry);
213 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnEvasObjectResize
215 virtual void OnEvasObjectResize(const Rect<int>& geometry);
218 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnEvasObjectFocusIn
220 virtual void OnEvasObjectFocusIn();
223 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnEvasObjectFocusOut
225 virtual void OnEvasObjectFocusOut();
228 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnEvasRenderPost
230 virtual void OnEvasPostRender();
233 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnElmAccessActionHighlight
235 virtual bool OnElmAccessActionHighlight(Dali::Extension::Internal::AccessActionInfo& accessActionInfo);
238 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnElmAccessActionUnhighlight
240 virtual bool OnElmAccessActionUnhighlight(Dali::Extension::Internal::AccessActionInfo& accessActionInfo);
243 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnElmAccessActionHighlightNext
245 virtual bool OnElmAccessActionHighlightNext(Dali::Extension::Internal::AccessActionInfo& accessActionInfo);
248 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnElmAccessActionHighlightPrev
250 virtual bool OnElmAccessActionHighlightPrev(Dali::Extension::Internal::AccessActionInfo& accessActionInfo);
253 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnElmAccessActionActivate
255 virtual bool OnElmAccessActionActivate(Dali::Extension::Internal::AccessActionInfo& accessActionInfo);
258 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnElmAccessActionUp
260 virtual bool OnElmAccessActionUp(Dali::Extension::Internal::AccessActionInfo& accessActionInfo);
263 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnElmAccessActionDown
265 virtual bool OnElmAccessActionDown(Dali::Extension::Internal::AccessActionInfo& accessActionInfo);
268 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnElmAccessActionScroll
270 virtual bool OnElmAccessActionScroll(Dali::Extension::Internal::AccessActionInfo& accessActionInfo);
273 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface:OnElmAccessActionBack:
275 virtual bool OnElmAccessActionBack(Dali::Extension::Internal::AccessActionInfo& accessActionInfo);
278 * @copydoc Dali::Extension::Internal::EvasPluginEventInterface::OnElmAccessActionRead
280 virtual bool OnElmAccessActionRead(Dali::Extension::Internal::AccessActionInfo& accessActionInfo);
283 * @copydoc Dali::Extension::Internal::EvasPluginVisibilityInterface::OnElmEcoreWlVisibility
285 virtual void OnEcoreWlVisibility(bool visibility);
289 * To resize, create new surface with evas object's size and replace with it.
291 void ResizeSurface();
293 #ifdef DALI_EVASPLUGIN_USE_IMF_MANAGER
295 * For ImfActivated signal
296 * When the imf is activated, it will handle the focus
297 * @param[in] imfManager imfManager instance
299 void OnImfActivated(ImfManager& imfManager);
303 * This function is called after drawing by dali.
308 * Called when the accessibility action event dispatched from elm_access.
309 * @param[in] actionType elm accessibility action type structure
310 * @param[in] x x position for action, it could be unnecessary
311 * @param[in] y y position for action, it could be unnecessary
312 * @return True if the event was handled
314 bool OnElmAccessibilityActionEvent(AccessActionInfo& actionInfo, int x = -1, int y = -1);
318 * Private constructor
319 * @param[in] parentEvasObject A pointer of the parent evas object
320 * @param[in] width The width of Dali view port
321 * @param[in] height The height of Dali view port
322 * @param[in] transparent Whether the evas object is transparent or not
324 EvasPlugin(Evas_Object* parentEvasObject, int width, int height, bool transparent);
329 virtual ~EvasPlugin();
332 EvasPlugin(const EvasPlugin&);
333 EvasPlugin& operator=(EvasPlugin&);
345 NativeRenderSurface* mTBMRenderSurface;
347 TriggerEventInterface* mRenderNotification;
348 Extension::Internal::EvasEventHandler* mEvasEventHandler;
349 Extension::Internal::EcoreWlEventHandler* mEcoreWlEventHandler;
351 bool mIsFocus:1; ///< Flag
352 bool mTransparent:1; ///< Whether
354 SingletonService mSingletonService;
357 EvasPluginSignalType mInitSignal;
358 EvasPluginSignalType mTerminateSignal;
359 EvasPluginSignalType mPauseSignal;
360 EvasPluginSignalType mResumeSignal;
361 EvasPluginSignalType mResizeSignal;
362 EvasPluginSignalType mFocusedSignal;
363 EvasPluginSignalType mUnFocusedSignal;
369 inline EvasPlugin& GetImplementation(Extension::EvasPlugin& evasPlugin)
371 DALI_ASSERT_ALWAYS(evasPlugin && "evasPluing handle is empty");
373 BaseObject& handle = evasPlugin.GetBaseObject();
375 return static_cast<EvasPlugin&>(handle);
378 inline const EvasPlugin& GetImplementation(const Extension::EvasPlugin& evasPlugin)
380 DALI_ASSERT_ALWAYS(evasPlugin && "evasPlugin handle is empty");
382 const BaseObject& handle = evasPlugin.GetBaseObject();
384 return static_cast<const EvasPlugin&>(handle);
387 } // namespace Internal
389 } // namespace Extension
393 #endif // __DALI_EXTENSION_INTERNAL_EVAS_PLUGIN_H__