Add GetResourceStoragePath
[platform/core/uifw/dali-adaptor.git] / dali / internal / adaptor / common / adaptor-impl.h
1 #ifndef DALI_INTERNAL_ADAPTOR_IMPL_H
2 #define DALI_INTERNAL_ADAPTOR_IMPL_H
3
4 /*
5  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
6  *
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
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <dali/public-api/common/vector-wrapper.h>
23 #include <dali/public-api/math/rect.h>
24 #include <dali/public-api/signals/callback.h>
25 #include <dali/public-api/math/uint-16-pair.h>
26 #include <dali/integration-api/render-controller.h>
27
28 // INTERNAL INCLUDES
29 #include <dali/public-api/adaptor-framework/tts-player.h>
30 #include <dali/devel-api/adaptor-framework/clipboard.h>
31 #include <dali/integration-api/scene.h>
32 #include <dali/integration-api/adaptor-framework/adaptor.h>
33 #include <dali/integration-api/adaptor-framework/scene-holder-impl.h>
34 #include <dali/integration-api/adaptor-framework/trigger-event-factory.h>
35 #include <dali/internal/adaptor/common/adaptor-internal-services.h>
36 #include <dali/internal/graphics/common/graphics-interface.h>
37 #include <dali/internal/legacy/common/tizen-platform-abstraction.h>
38 #include <dali/internal/network/common/socket-factory.h>
39 #include <dali/internal/system/common/core-event-interface.h>
40 #include <dali/internal/system/common/environment-options.h>
41 #include <dali/internal/system/common/kernel-trace.h>
42 #include <dali/internal/system/common/system-trace.h>
43 #include <dali/internal/window-system/common/damage-observer.h>
44 #include <dali/internal/window-system/common/window-visibility-observer.h>
45
46 #include <string>
47
48 namespace Dali
49 {
50
51 class RenderSurfaceInterface;
52
53 namespace Accessibility
54 {
55 class Bridge;
56 }
57
58 namespace Integration
59 {
60 class Core;
61 class GlAbstraction;
62 class Processor;
63 class AddOnManager;
64 }
65
66 namespace Internal
67 {
68
69 namespace Adaptor
70 {
71 class DisplayConnection;
72 class GraphicsFactory;
73 class GlImplementation;
74 class GlSyncImplementation;
75 class ThreadController;
76 class TriggerEvent;
77 class CallbackManager;
78 class FeedbackPluginProxy;
79 class FeedbackController;
80 class VSyncMonitor;
81 class PerformanceInterface;
82 class LifeCycleObserver;
83 class ObjectProfiler;
84 class SceneHolder;
85 class ConfigurationManager;
86 enum class ThreadMode;
87
88 /**
89  * Implementation of the Adaptor class.
90  */
91 class Adaptor : public Integration::RenderController,
92                 public AdaptorInternalServices,
93                 public CoreEventInterface,
94                 public DamageObserver,
95                 public WindowVisibilityObserver
96 {
97 public:
98
99   using AdaptorSignalType =  Dali::Adaptor::AdaptorSignalType;
100   using WindowCreatedSignalType = Dali::Adaptor::WindowCreatedSignalType;
101
102   using SurfaceSize = Uint16Pair;          ///< Surface size type
103
104   /**
105    * Creates a New Adaptor
106    * @param[in]  window              The window handle
107    * @param[in]  surface             A render surface can be one of the following
108    *                                  - Pixmap, adaptor will use existing Pixmap to draw on to
109    *                                  - Window, adaptor will use existing Window to draw on to
110    * @param[in]  environmentOptions  A pointer to the environment options. If NULL then one is created.
111    * @param[in]  threadMode          The thread mode
112    */
113   static Dali::Adaptor* New( Dali::Integration::SceneHolder window,
114                              Dali::RenderSurfaceInterface* surface,
115                              EnvironmentOptions* environmentOptions,
116                              ThreadMode threadMode );
117
118   /**
119    * Creates a New Adaptor
120    * @param[in]  window              The window handle
121    * @param[in]  environmentOptions  A pointer to the environment options. If NULL then one is created.
122    */
123   static Dali::Adaptor* New( Dali::Integration::SceneHolder window,
124                              EnvironmentOptions* environmentOptions );
125
126   /**
127    * Creates a New Adaptor
128    * @param[in]  graphicsFactory     A factory that creates the graphics interface
129    * @param[in]  window              The window handle
130    * @param[in]  surface             A render surface can be one of the following
131    *                                  - Pixmap, adaptor will use existing Pixmap to draw on to
132    *                                  - Window, adaptor will use existing Window to draw on to
133    * @param[in]  environmentOptions  A pointer to the environment options. If NULL then one is created.
134    * @param[in]  threadMode          The thread mode
135    */
136   static Dali::Adaptor* New( GraphicsFactory& graphicsFactory,
137                              Dali::Integration::SceneHolder window,
138                              Dali::RenderSurfaceInterface* surface,
139                              EnvironmentOptions* environmentOptions,
140                              ThreadMode threadMode );
141
142   /**
143    * Creates a New Adaptor
144    * @param[in]  graphicsFactory     A factory that creates the graphics interface
145    * @param[in]  window              The window handle
146    * @param[in]  environmentOptions  A pointer to the environment options. If NULL then one is created.
147    */
148   static Dali::Adaptor* New( GraphicsFactory& graphicsFactory,
149                              Dali::Integration::SceneHolder window,
150                              EnvironmentOptions* environmentOptions );
151
152   /**
153    * 2-step initialisation, this should be called after creating an adaptor instance.
154    * @param[in]  graphicsFactory     A factory that creates the graphics interface
155    */
156   void Initialize( GraphicsFactory& graphicsFactory );
157
158   /**
159    * Virtual destructor.
160    */
161   ~Adaptor() override;
162
163   /**
164    * @copydoc Dali::Adaptor::Get()
165    */
166   static Dali::Adaptor& Get();
167
168   /**
169    * @copydoc Dali::Adaptor::IsAvailable()
170    */
171   static bool IsAvailable();
172
173   /**
174    * @copydoc Dali::Core::SceneCreated();
175    */
176   void SceneCreated();
177
178   static std::string GetApplicationPackageName();
179
180 public: // AdaptorInternalServices implementation
181   /**
182    * @copydoc Dali::Adaptor::Start()
183    */
184   virtual void Start();
185
186   /**
187    * @copydoc Dali::Adaptor::Pause()
188    */
189   virtual void Pause();
190
191   /**
192    * @copydoc Dali::Adaptor::Resume()
193    */
194   virtual void Resume();
195
196   /**
197    * @copydoc Dali::Adaptor::Stop()
198    */
199   virtual void Stop();
200
201   /**
202    * @copydoc Dali::Adaptor::ContextLost()
203    */
204   virtual void ContextLost();
205
206   /**
207    * @copydoc Dali::Adaptor::ContextRegained()
208    */
209   virtual void ContextRegained();
210
211   /**
212    * @copydoc Dali::EventFeeder::FeedTouchPoint()
213    */
214   virtual void FeedTouchPoint( TouchPoint& point, int timeStamp );
215
216   /**
217    * @copydoc Dali::EventFeeder::FeedWheelEvent()
218    */
219   virtual void FeedWheelEvent( Dali::WheelEvent& wheelEvent );
220
221   /**
222    * @copydoc Dali::EventFeeder::FeedKeyEvent()
223    */
224   virtual void FeedKeyEvent( Dali::KeyEvent& keyEvent );
225
226   /**
227    * @copydoc Dali::Adaptor::ReplaceSurface()
228    */
229   virtual void ReplaceSurface( Dali::Integration::SceneHolder window, Dali::RenderSurfaceInterface& surface );
230
231   /**
232    * @copydoc Dali::Adaptor::GetSurface()
233    */
234   virtual Dali::RenderSurfaceInterface& GetSurface() const;
235
236   /**
237    * @copydoc Dali::Adaptor::ReleaseSurfaceLock()
238    */
239   virtual void ReleaseSurfaceLock();
240
241   /**
242    * Retrieve the TtsPlayer.
243    * @param[in] mode The mode of TtsPlayer
244    * @return A handle to the TtsPlayer.
245    */
246   virtual Dali::TtsPlayer GetTtsPlayer(Dali::TtsPlayer::Mode mode);
247
248   /**
249    * @copydoc Dali::Adaptor::AddIdle()
250    */
251   virtual bool AddIdle( CallbackBase* callback, bool hasReturnValue, bool forceAdd );
252
253   /**
254    * Adds a new Window instance to the Adaptor
255    * @param[in]  childWindow The child window instance
256    */
257   virtual bool AddWindow( Dali::Integration::SceneHolder childWindow );
258
259   /**
260    * Removes an existing Window instance from the Adaptor
261    * @param[in]  window The Window instance
262    */
263   virtual bool RemoveWindow( Dali::Integration::SceneHolder* childWindow );
264
265   /**
266    * Removes an existing Window instance from the Adaptor
267    * @param[in]  windowName The Window name
268    * @note If two Windows have the same name, the first one that matches will be removed
269    */
270   virtual bool RemoveWindow( std::string childWindowName );
271
272   /**
273    * @copydoc Dali::Adaptor::RemoveIdle()
274    */
275   virtual void RemoveIdle( CallbackBase* callback );
276
277   /**
278    * @copydoc Dali::Adaptor::ProcessIdle()
279    */
280   virtual void ProcessIdle();
281
282   /**
283    * Sets a pre-render callback.
284    */
285   void SetPreRenderCallback( CallbackBase* callback );
286
287   /**
288    * Removes an existing Window instance from the Adaptor
289    * @param[in]  childWindow The Window instance
290    */
291   bool RemoveWindow( Dali::Internal::Adaptor::SceneHolder* childWindow );
292
293   /**
294    * @brief Deletes the rendering surface
295    * @param[in] surface to delete
296    */
297   void DeleteSurface( Dali::RenderSurfaceInterface& surface );
298
299   /**
300    * @brief Retrieve the window that the given actor is added to.
301    *
302    * @param[in] actor The actor
303    * @return The window the actor is added to or a null pointer if the actor is not added to any widnow.
304    */
305   Dali::Internal::Adaptor::SceneHolder* GetWindow( Dali::Actor& actor );
306
307   /**
308    * @copydoc Dali::Adaptor::GetWindows()
309    */
310   Dali::WindowContainer GetWindows() const;
311
312   /**
313    * @copydoc Dali::Adaptor::GetSceneHolders()
314    */
315   Dali::SceneHolderList GetSceneHolders() const;
316
317   /**
318    * @copydoc Dali::Adaptor::GetObjectRegistry()
319    */
320   Dali::ObjectRegistry GetObjectRegistry() const;
321
322 public:
323
324   /**
325    * @return the Core instance
326    */
327   Dali::Integration::Core& GetCore() override;
328
329   /**
330    * @copydoc Dali::Adaptor::SetRenderRefreshRate()
331    */
332   void SetRenderRefreshRate( unsigned int numberOfVSyncsPerRender );
333
334   /**
335    * Return the PlatformAbstraction.
336    * @return The PlatformAbstraction.
337    */
338   Integration::PlatformAbstraction& GetPlatformAbstraction() const;
339
340   /**
341    * Destroy the TtsPlayer of specific mode.
342    * @param[in] mode The mode of TtsPlayer to destroy
343    */
344   void DestroyTtsPlayer(Dali::TtsPlayer::Mode mode);
345
346   /**
347    * Gets native window handle
348    *
349    * @return native window handle
350    */
351   Any GetNativeWindowHandle();
352
353   /**
354    * @brief Retrieve native window handle that the given actor is added to.
355    *
356    * @param[in] actor The actor
357    * @return native window handle
358    */
359   Any GetNativeWindowHandle( Dali::Actor actor );
360
361   /**
362    * Get the native display associated with the graphics backend
363    *
364    * @return A handle to the native display
365    */
366   Any GetGraphicsDisplay();
367
368   /**
369    * Sets use remote surface for Surface output
370    * @param[in] useRemoteSurface True if the remote surface is used
371    */
372   void SetUseRemoteSurface(bool useRemoteSurface);
373
374 public:
375
376   /**
377    * Adds an adaptor observer so that we can observe the adaptor's lifetime events.
378    * @param[in]  observer  The observer.
379    * @note Observers should remove themselves when they are destroyed.
380    */
381   void AddObserver( LifeCycleObserver& observer );
382
383   /**
384    * Removes the observer from the adaptor.
385    * @param[in]  observer  The observer to remove.
386    * @note Observers should remove themselves when they are destroyed.
387    */
388   void RemoveObserver( LifeCycleObserver& observer );
389
390   /**
391    * Emits the Notification event to the Dali core.
392    */
393   void SendNotificationEvent();
394
395   /**
396    * Request adaptor to update once
397    */
398   void RequestUpdateOnce();
399
400   /**
401    * @copydoc Dali::Adaptor::NotifySceneCreated()
402    */
403   void NotifySceneCreated();
404
405   /**
406    * @copydoc Dali::Adaptor::NotifyLanguageChanged()
407    */
408   void NotifyLanguageChanged();
409
410   /**
411    * Gets AppId of current application
412    */
413   void GetAppId( std::string& appId );
414
415   /**
416    * Gets path for resource storage.
417    * @param[out] path Path for resource storage
418    */
419   void GetResourceStoragePath( std::string& path );
420
421   /**
422    * @copydoc Dali::Adaptor::SurfaceResizePrepare
423    */
424   void SurfaceResizePrepare( Dali::RenderSurfaceInterface* surface, SurfaceSize surfaceSize );
425
426   /**
427    * @copydoc Dali::Adaptor::SurfaceResizeComplete
428    */
429   void SurfaceResizeComplete( Dali::RenderSurfaceInterface* surface, SurfaceSize surfaceSize );
430
431   /**
432    * Sets layout direction of root by system language
433    * @param[in] locale System locale
434    */
435   void SetRootLayoutDirection( std::string locale );
436
437   /**
438    * @copydoc Dali::Adaptor::RenderOnce
439    */
440   void RenderOnce();
441
442   /**
443    * @copydoc Dali::Adaptor::GetLogFactory
444    */
445   const LogFactoryInterface& GetLogFactory();
446
447   /**
448    * @copydoc Dali::Adaptor::RegisterProcessor
449    */
450   void RegisterProcessor( Integration::Processor& processor );
451
452   /**
453    * @coydoc Dali::Adaptor::UnregisterProcessor
454    */
455   void UnregisterProcessor( Integration::Processor& processor );
456
457   /**
458    * Check MultipleWindow is supported
459    */
460   bool IsMultipleWindowSupported() const;
461
462 public:  //AdaptorInternalServices
463
464   /**
465    * @copydoc Dali::Internal::Adaptor::AdaptorInternalServices::GetPlatformAbstractionInterface()
466    */
467   Dali::Integration::PlatformAbstraction& GetPlatformAbstractionInterface() override;
468
469   /**
470    * @copydoc Dali::Internal::Adaptor::AdaptorInternalServices::GetDisplayConnectionInterface()
471    */
472   Dali::DisplayConnection& GetDisplayConnectionInterface() override;
473
474   /**
475    * @copydoc Dali::Internal::Adaptor::AdaptorInternalServices::GetGraphicsInterface()
476    */
477   GraphicsInterface& GetGraphicsInterface() override;
478
479   /**
480    * @copydoc Dali::Internal::Adaptor::AdaptorInternalServices::GetTriggerEventInterface()
481    */
482   TriggerEventInterface& GetProcessCoreEventsTrigger() override;
483
484   /**
485    * @copydoc Dali::Internal::Adaptor::AdaptorInternalServices::GetSocketFactoryInterface()
486    */
487   SocketFactoryInterface& GetSocketFactoryInterface() override;
488
489   /**
490    * @copydoc Dali::Internal::Adaptor::AdaptorInternalServices::GetRenderSurfaceInterface()
491    */
492   Dali::RenderSurfaceInterface* GetRenderSurfaceInterface() override;
493
494   /**
495    * @copydoc Dali::Internal::Adaptor::AdaptorInternalServices::GetPerformanceInterface()
496    */
497   PerformanceInterface* GetPerformanceInterface() override;
498
499   /**
500    * copydoc Dali::Internal::Adaptor::AdaptorInternalServices::GetKernelTraceInterface()
501    */
502   TraceInterface& GetKernelTraceInterface() override;
503
504   /**
505    * copydoc Dali::Internal::Adaptor::AdaptorInternalServices::GetSystemTraceInterface()
506    */
507   TraceInterface& GetSystemTraceInterface() override;
508
509   /**
510    * copydoc Dali::Internal::Adaptor::AdaptorInternalServices::GetWindowContainerInterface()
511    */
512   void GetWindowContainerInterface( WindowContainer& windows ) override;
513
514 public: // Signals
515
516   /**
517    * @copydoc Dali::Adaptor::SignalResized
518    */
519   AdaptorSignalType& ResizedSignal()
520   {
521     return mResizedSignal;
522   }
523
524   /**
525    * @copydoc Dali::Adaptor::LanguageChangedSignal
526    */
527   AdaptorSignalType& LanguageChangedSignal()
528   {
529     return mLanguageChangedSignal;
530   }
531
532   /**
533    * @copydoc Dali::Adaptor::WindowCreatedSignal
534    */
535   WindowCreatedSignalType& WindowCreatedSignal()
536   {
537     return mWindowCreatedSignal;
538   }
539
540 public: // From Dali::Internal::Adaptor::CoreEventInterface
541
542   /**
543    * @copydoc Dali::Internal::Adaptor:CoreEventInterface:::ProcessCoreEvents()
544    */
545   void ProcessCoreEvents() override;
546
547 private: // From Dali::Internal::Adaptor::CoreEventInterface
548
549   /**
550    * @copydoc Dali::Internal::Adaptor::CoreEventInterface::QueueCoreEvent()
551    */
552   void QueueCoreEvent(const Dali::Integration::Event& event) override;
553
554 private: // From Dali::Integration::RenderController
555
556   /**
557    * @copydoc Dali::Integration::RenderController::RequestUpdate()
558    */
559   void RequestUpdate( bool forceUpdate ) override;
560
561   /**
562    * @copydoc Dali::Integration::RenderController::RequestProcessEventsOnIdle()
563    */
564   void RequestProcessEventsOnIdle( bool forceProcess ) override;
565
566 public: // From Dali::Internal::Adaptor::WindowVisibilityObserver
567
568   /**
569    * Called when the window becomes fully or partially visible.
570    */
571   void OnWindowShown() override;
572
573   /**
574    * Called when the window is fully hidden.
575    */
576   void OnWindowHidden() override;
577
578 private: // From Dali::Internal::Adaptor::DamageObserver
579
580   /**
581    * @copydoc Dali::Internal::Adaptor::DamageObserver::OnDamaged()
582    */
583   void OnDamaged( const DamageArea& area ) override;
584
585 private:
586
587   // Undefined
588   Adaptor(const Adaptor&) = delete;
589   Adaptor& operator=(Adaptor&) = delete;
590
591 private:
592
593   /**
594    * Assigns the render surface to the adaptor
595    *
596    */
597   void SetSurface(Dali::RenderSurfaceInterface *surface);
598
599   /**
600    * called after surface is created
601    */
602   void SurfaceInitialized();
603
604   /**
605    * Sends an notification message from main loop idle handler
606    */
607   bool ProcessCoreEventsFromIdle();
608
609   /**
610    * Gets path for data/resource storage.
611    * @param[out] path Path for data/resource storage
612    */
613   void GetDataStoragePath(std::string& path);
614
615   /**
616    * Sets up system information if needs
617    */
618   void SetupSystemInformation();
619
620   /**
621    * Adds a callback to be run when entering an idle state.
622    *
623    * A callback of the following type should be used:
624    * @code
625    *   bool MyFunction();
626    * @endcode
627    * This callback will be called repeatedly as long as it returns true. A return of 0 deletes this callback.
628    */
629   bool AddIdleEnterer( CallbackBase* callback, bool forceAdd );
630
631   /**
632    * Removes a previously added the idle enterer callback.
633    */
634   void RemoveIdleEnterer( CallbackBase* callback );
635
636 private:
637
638   /**
639    * Constructor
640    * @param[in]  window       window handle
641    * @param[in]  adaptor      The public adaptor
642    * @param[in]  surface      A render surface can be one of the following
643    *                          - Pixmap, adaptor will use existing Pixmap to draw on to
644    *                          - Window, adaptor will use existing Window to draw on to
645    * @param[in]  environmentOptions  A pointer to the environment options. If NULL then one is created.
646    * @param[in]  threadMode   The ThreadMode of the Adaptor
647    */
648   Adaptor( Dali::Integration::SceneHolder window, Dali::Adaptor& adaptor, Dali::RenderSurfaceInterface* surface, EnvironmentOptions* environmentOptions, ThreadMode threadMode );
649
650 private: // Types
651
652   enum State
653   {
654     READY,                     ///< Initial state before Adaptor::Start is called.
655     RUNNING,                   ///< Adaptor is running.
656     PAUSED,                    ///< Adaptor has been paused.
657     PAUSED_WHILE_HIDDEN,       ///< Adaptor is paused while window is hidden (& cannot be resumed until window is shown).
658     PAUSED_WHILE_INITIALIZING, ///< Adaptor is paused while application is initializing.
659     STOPPED,                   ///< Adaptor has been stopped.
660   };
661
662   // There is no weak handle for BaseHandle in DALi, but we can't ref count the window here,
663   // so we have to store the raw pointer.
664   using WindowContainer = std::vector<Dali::Internal::Adaptor::SceneHolder*>;
665   using ObserverContainer = std::vector<LifeCycleObserver*>;
666
667 private: // Data
668
669   AdaptorSignalType                     mResizedSignal;               ///< Resized signal.
670   AdaptorSignalType                     mLanguageChangedSignal;       ///< Language changed signal.
671   WindowCreatedSignalType               mWindowCreatedSignal;    ///< Window created signal.
672
673   Dali::Adaptor&                        mAdaptor;                     ///< Reference to public adaptor instance.
674   State                                 mState;                       ///< Current state of the adaptor
675   Dali::Integration::Core*              mCore;                        ///< Dali Core
676   ThreadController*                     mThreadController;            ///< Controls the threads
677
678   std::unique_ptr< GraphicsInterface >  mGraphics;                    ///< Graphics interface
679   Dali::DisplayConnection*              mDisplayConnection;           ///< Display connection
680   WindowContainer                       mWindows;                     ///< A container of all the Windows that are currently created
681
682   std::unique_ptr<ConfigurationManager> mConfigurationManager;        ///< Configuration manager
683
684   TizenPlatform::TizenPlatformAbstraction* mPlatformAbstraction;      ///< Platform abstraction
685
686   CallbackManager*                      mCallbackManager;             ///< Used to install callbacks
687   bool                                  mNotificationOnIdleInstalled; ///< whether the idle handler is installed to send an notification event
688   TriggerEventInterface*                mNotificationTrigger;         ///< Notification event trigger
689   FeedbackPluginProxy*                  mDaliFeedbackPlugin;          ///< Used to access feedback support
690   FeedbackController*                   mFeedbackController;          ///< Plays feedback effects for Dali-Toolkit UI Controls.
691   Dali::TtsPlayer                       mTtsPlayers[Dali::TtsPlayer::MODE_NUM];                   ///< Provides TTS support
692   ObserverContainer                     mObservers;                   ///< A list of adaptor observer pointers
693   EnvironmentOptions*                   mEnvironmentOptions;          ///< environment options
694   PerformanceInterface*                 mPerformanceInterface;        ///< Performance interface
695   KernelTrace                           mKernelTracer;                ///< Kernel tracer
696   SystemTrace                           mSystemTracer;                ///< System tracer
697   ObjectProfiler*                       mObjectProfiler;              ///< Tracks object lifetime for profiling
698   SocketFactory                         mSocketFactory;               ///< Socket factory
699   ThreadMode                            mThreadMode;                  ///< The thread mode
700   const bool                            mEnvironmentOptionsOwned:1;   ///< Whether we own the EnvironmentOptions (and thus, need to delete it)
701   bool                                  mUseRemoteSurface:1;          ///< whether the remoteSurface is used or not
702   Dali::LayoutDirection::Type           mRootLayoutDirection;         ///< LayoutDirection of window
703
704   std::unique_ptr<Integration::AddOnManager> mAddOnManager;           ///< Pointer to the addon manager
705
706   class AccessibilityObserver : public ConnectionTracker
707   {
708   public:
709     void OnAccessibleKeyEvent( const Dali::KeyEvent& event );
710   };
711   AccessibilityObserver accessibilityObserver;
712
713 public:
714   inline static Adaptor& GetImplementation(Dali::Adaptor& adaptor) { return *adaptor.mImpl; }
715 };
716
717 } // namespace Internal
718
719 } // namespace Adaptor
720
721 } // namespace Dali
722
723 #endif // DALI_INTERNAL_ADAPTOR_IMPL_H