[ACR-564] deprecate unused API
[platform/core/csapi/tizenfx.git] / src / ElmSharp / ElmSharp / EvasObject.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 using System;
18 using System.Collections.Generic;
19 using System.Diagnostics;
20
21 namespace ElmSharp
22 {
23     /// <summary>
24     /// Enumeration for the Tooltip orientation.
25     /// </summary>
26     /// <since_tizen> preview </since_tizen>
27     [Obsolete("This has been deprecated in API12")]
28     public enum TooltipOrientation
29     {
30         /// <summary>
31         /// Default value. Tooltip moves with a mouse pointer.
32         /// </summary>
33         None,
34
35         /// <summary>
36         /// Tooltip should appear to the top left of the parent.
37         /// </summary>
38         TopLeft,
39
40         /// <summary>
41         /// Tooltip should appear to the left of the parent.
42         /// </summary>
43         Top,
44
45         /// <summary>
46         /// Tooltip should appear to the top right of the parent.
47         /// </summary>
48         TopRight,
49
50         /// <summary>
51         /// Tooltip should appear to the left of the parent.
52         /// </summary>
53         Left,
54
55         /// <summary>
56         /// Tooltip should appear to the center of the parent.
57         /// </summary>
58         Center,
59
60         /// <summary>
61         /// Tooltip should appear to the right of the parent.
62         /// </summary>
63         Right,
64
65         /// <summary>
66         /// Tooltip should appear to the bottom left of the parent.
67         /// </summary>
68         BottomLeft,
69
70         /// <summary>
71         /// Tooltip should appear to the bottom of the parent.
72         /// </summary>
73         Bottom,
74
75         /// <summary>
76         /// Tooltip should appear to the bottom right of the parent.
77         /// </summary>
78         BottomRight,
79     }
80
81     /// <summary>
82     /// Enumeration for the aspect control.
83     /// </summary>
84     /// <since_tizen> preview </since_tizen>
85     [Obsolete("This has been deprecated in API12")]
86     public enum AspectControl
87     {
88         /// <summary>
89         /// Preference on the scaling unset.
90         /// </summary>
91         None = 0,
92
93         /// <summary>
94         /// Same effect as the unset preference on the scaling.
95         /// </summary>
96         Neither = 1,
97
98         /// <summary>
99         /// Use all horizontal container space to place an object using the given aspect.
100         /// </summary>
101         Horizontal = 2,
102
103         /// <summary>
104         /// Use all vertical container space to place an object using the given aspect.
105         /// </summary>
106         Vertical = 3,
107
108         /// <summary>
109         /// Use all horizontal @b and vertical container spaces to place an object (never growing it out of those bounds), using the given aspect.
110         /// </summary>
111         Both = 4
112     }
113
114     /// <summary>
115     /// How the object should be rendered to output.
116     /// </summary>
117     /// <since_tizen> 5 </since_tizen>
118     [Obsolete("This has been deprecated in API12")]
119     public enum RenderOp
120     {
121         /// <summary>
122         /// default op: d = d * (1 - sa) + s
123         /// </summary>
124         Blend = 0,
125
126         /// <summary>
127         /// d = d*(1 - sa) + s*da
128         /// </summary>
129         BlendRel = 1,
130
131         /// <summary>
132         /// d = s
133         /// </summary>
134         Copy = 2,
135
136         /// <summary>
137         /// d = s*da
138         /// </summary>
139         CopyRel = 3,
140
141         /// <summary>
142         /// d = d + s
143         /// </summary>
144         Add = 4,
145
146         /// <summary>
147         /// d = d + s*da
148         /// </summary>
149         AddRel = 5,
150
151         /// <summary>
152         /// d = d - s
153         /// </summary>
154         Sub = 6,
155
156         /// <summary>
157         /// d = d - s*da
158         /// </summary>
159         SubRel = 7,
160
161         /// <summary>
162         /// d = d*s + d*(1 - sa) + s*(1 - da)
163         /// </summary>
164         Tint = 8,
165
166         /// <summary>
167         /// d = d*(1 - sa + s)
168         /// </summary>
169         TintRel = 9,
170
171         /// <summary>
172         /// d = d*sa
173         /// </summary>
174         Mask = 10,
175
176         /// <summary>
177         /// d = d*s
178         /// </summary>
179         Mul = 11
180     }
181
182     /// <summary>
183     /// The EvasObject is a base class for other widget classes.
184     /// </summary>
185     /// <since_tizen> preview </since_tizen>
186     [Obsolete("This has been deprecated in API12")]
187     public abstract class EvasObject
188     {
189         private IntPtr _realHandle = IntPtr.Zero;
190         private EvasCanvas _evasCanvas;
191         private string _automationId;
192
193         private event EventHandler _backButtonPressed;
194
195         private event EventHandler _moreButtonPressed;
196
197         private Interop.Eext.EextEventCallback _backButtonHandler;
198         private Interop.Eext.EextEventCallback _moreButtonHandler;
199
200         private static Dictionary<IntPtr, EvasObject> s_handleTable = new Dictionary<IntPtr, EvasObject>();
201
202         /// <summary>
203         /// Sets or gets the handle for EvasObject.
204         /// </summary>
205         /// <since_tizen> preview </since_tizen>
206         [Obsolete("This has been deprecated in API12")]
207         public IntPtr Handle { get; protected set; }
208
209         /// <summary>
210         /// Gets the parent object for EvasObject.
211         /// </summary>
212         /// <since_tizen> preview </since_tizen>
213         [Obsolete("This has been deprecated in API12")]
214         public EvasObject Parent { get; private set; }
215
216         /// <summary>
217         /// Sets or gets the real handle for EvasObject.
218         /// </summary>
219         /// <since_tizen> preview </since_tizen>
220         [Obsolete("This has been deprecated in API12")]
221         public IntPtr RealHandle
222         {
223             get
224             {
225                 return _realHandle == IntPtr.Zero ? Handle : _realHandle;
226             }
227             protected set
228             {
229                 _realHandle = value;
230                 Interop.Evas.evas_object_show(_realHandle);
231             }
232         }
233
234         EvasObjectEvent _deleted;
235         EvasObjectEvent<EvasKeyEventArgs> _keyup;
236         EvasObjectEvent<EvasKeyEventArgs> _keydown;
237         EvasObjectEvent _moved;
238         EvasObjectEvent _resized;
239         EvasObjectEvent _shown;
240         EvasObjectEvent _hidden;
241         EventHandler _renderPost;
242         Interop.Evas.EvasCallback _renderPostCallback = null;
243         Interop.Elementary.Elm_Tooltip_Content_Cb _tooltipContentCallback = null;
244
245         GetTooltipContentDelegate _tooltipContentDelegate = null;
246
247         readonly HashSet<IInvalidatable> _eventStore = new HashSet<IInvalidatable>();
248
249         /// <summary>
250         /// Creates and initializes a new instance of the EvasObject class with the parent EvasObject class parameter.
251         /// </summary>
252         /// <param name="parent">Parent EvasObject class.</param>
253         /// <since_tizen> preview </since_tizen>
254         [Obsolete("This has been deprecated in API12")]
255         protected EvasObject(EvasObject parent) : this()
256         {
257             Debug.Assert(parent == null || parent.IsRealized);
258             Realize(parent);
259         }
260
261         /// <summary>
262         /// Creates and initializes a new instance of the EvasObject class.
263         /// </summary>
264         /// <since_tizen> preview </since_tizen>
265         [Obsolete("This has been deprecated in API12")]
266         protected EvasObject()
267         {
268             _backButtonHandler = new Interop.Eext.EextEventCallback((d, o, i) => { _backButtonPressed?.Invoke(this, EventArgs.Empty); });
269             _moreButtonHandler = new Interop.Eext.EextEventCallback((d, o, i) => { _moreButtonPressed?.Invoke(this, EventArgs.Empty); });
270
271             OnInstantiated();
272
273             _tooltipContentCallback = (d, o, t) =>
274             {
275                 return _tooltipContentDelegate?.Invoke();
276             };
277         }
278
279         // C# Finalizer was called on GC thread
280         // So, We can't access to EFL object
281         // And When Finalizer was called, Field can be already released.
282         //~EvasObject()
283         //{
284         //    Unrealize();
285         //}
286
287         /// <summary>
288         /// Deleted will be triggered when the widght is deleted.
289         /// </summary>
290         /// <since_tizen> preview </since_tizen>
291         [Obsolete("This has been deprecated in API12")]
292         public event EventHandler Deleted;
293
294         /// <summary>
295         /// KeyUp will be triggered when the key is loose.
296         /// </summary>
297         /// <since_tizen> preview </since_tizen>
298         [Obsolete("This has been deprecated in API12")]
299         public event EventHandler<EvasKeyEventArgs> KeyUp
300         {
301             add { _keyup.On += value; }
302             remove { _keyup.On -= value; }
303         }
304
305         /// <summary>
306         /// KeyDown will be triggered when the key is pressed down.
307         /// </summary>
308         /// <since_tizen> preview </since_tizen>
309         [Obsolete("This has been deprecated in API12")]
310         public event EventHandler<EvasKeyEventArgs> KeyDown
311         {
312             add { _keydown.On += value; }
313             remove { _keydown.On -= value; }
314         }
315
316         /// <summary>
317         /// BackButtonPressed will be triggered when the Back button is pressed.
318         /// </summary>
319         /// <since_tizen> preview </since_tizen>
320         [Obsolete("This has been deprecated in API12")]
321         public event EventHandler BackButtonPressed
322         {
323             add
324             {
325                 if (_backButtonPressed == null)
326                 {
327                     Interop.Eext.eext_object_event_callback_add(RealHandle, Interop.Eext.EextCallbackType.EEXT_CALLBACK_BACK, _backButtonHandler, IntPtr.Zero);
328                 }
329                 _backButtonPressed += value;
330             }
331             remove
332             {
333                 _backButtonPressed -= value;
334                 if (_backButtonPressed == null)
335                 {
336                     Interop.Eext.eext_object_event_callback_del(RealHandle, Interop.Eext.EextCallbackType.EEXT_CALLBACK_BACK, _backButtonHandler);
337                 }
338             }
339         }
340
341         /// <summary>
342         /// MoreButtonPressed will be triggered when the More button is pressed.
343         /// </summary>
344         /// <since_tizen> preview </since_tizen>
345         [Obsolete("This has been deprecated in API12")]
346         public event EventHandler MoreButtonPressed
347         {
348             add
349             {
350                 if (_moreButtonPressed == null)
351                 {
352                     Interop.Eext.eext_object_event_callback_add(RealHandle, Interop.Eext.EextCallbackType.EEXT_CALLBACK_MORE, _moreButtonHandler, IntPtr.Zero);
353                 }
354                 _moreButtonPressed += value;
355             }
356             remove
357             {
358                 _moreButtonPressed -= value;
359                 if (_moreButtonPressed == null)
360                 {
361                     Interop.Eext.eext_object_event_callback_del(RealHandle, Interop.Eext.EextCallbackType.EEXT_CALLBACK_MORE, _moreButtonHandler);
362                 }
363             }
364         }
365
366         /// <summary>
367         /// Moved will be triggered when the widght is moved.
368         /// </summary>
369         /// <since_tizen> preview </since_tizen>
370         [Obsolete("This has been deprecated in API12")]
371         public event EventHandler Moved
372         {
373             add { _moved.On += value; }
374             remove { _moved.On -= value; }
375         }
376
377         /// <summary>
378         /// Resized Event Handler of the current widget's size.
379         /// </summary>
380         /// <since_tizen> preview </since_tizen>
381         [Obsolete("This has been deprecated in API12")]
382         public event EventHandler Resized
383         {
384             add { _resized.On += value; }
385             remove { _resized.On -= value; }
386         }
387
388         /// <summary>
389         /// Shown will be triggered when the widget is shown.
390         /// </summary>
391         /// <since_tizen> preview </since_tizen>
392         [Obsolete("This has been deprecated in API12")]
393         public event EventHandler Shown
394         {
395             add { _shown.On += value; }
396             remove { _shown.On -= value; }
397         }
398
399         /// <summary>
400         /// Hidden will be triggered when the widget is hidden.
401         /// </summary>
402         /// <since_tizen> preview </since_tizen>
403         [Obsolete("This has been deprecated in API12")]
404         public event EventHandler Hidden
405         {
406             add { _hidden.On += value; }
407             remove { _hidden.On -= value; }
408         }
409
410         /// <summary>
411         /// RenderPost Event Handler of the current widget.
412         /// </summary>
413         /// <since_tizen> preview </since_tizen>
414         [Obsolete("This has been deprecated in API12")]
415         public event EventHandler RenderPost
416         {
417             add
418             {
419                 _renderPost += value;
420                 if (_renderPostCallback == null)
421                 {
422                     _renderPostCallback = new Interop.Evas.EvasCallback((o, e, d) => _renderPost?.Invoke(this, EventArgs.Empty));
423                     Interop.Evas.evas_event_callback_add(Interop.Evas.evas_object_evas_get(RealHandle), Interop.Evas.ObjectCallbackType.RenderPost, _renderPostCallback, IntPtr.Zero);
424                 }
425             }
426             remove
427             {
428                 _renderPost -= value;
429                 if (_renderPost == null)
430                 {
431                     Interop.Evas.evas_event_callback_del(Interop.Evas.evas_object_evas_get(RealHandle), Interop.Evas.ObjectCallbackType.RenderPost, _renderPostCallback);
432                     _renderPostCallback = null;
433                 }
434             }
435         }
436
437         /// <summary>
438         /// Called when a widget's tooltip is activated and needs content.
439         /// </summary>
440         /// <returns></returns>
441         /// <since_tizen> preview </since_tizen>
442         [Obsolete("This has been deprecated in API12")]
443         public delegate EvasObject GetTooltipContentDelegate();
444
445         /// <summary>
446         /// Gets a widget's status of realized or not.
447         /// </summary>
448         /// <since_tizen> preview </since_tizen>
449         [Obsolete("This has been deprecated in API12")]
450         public bool IsRealized { get { return Handle != IntPtr.Zero; } }
451
452         /// <summary>
453         /// Gets EvasCanvas.
454         /// </summary>
455         /// <since_tizen> preview </since_tizen>
456         [Obsolete("This has been deprecated in API12")]
457         public EvasCanvas EvasCanvas
458         {
459             get
460             {
461                 if (_evasCanvas == null)
462                     _evasCanvas = new EvasCanvas(Handle);
463                 return _evasCanvas;
464             }
465         }
466
467         /// <summary>
468         /// Sets of gets a value that allow the automation framework to find and interact with this object.
469         /// </summary>
470         /// <since_tizen> preview </since_tizen>
471         [Obsolete("This has been deprecated in API12")]
472         public string AutomationId
473         {
474             get
475             {
476                 return _automationId;
477             }
478             set
479             {
480                 if (_automationId != null)
481                     throw new InvalidOperationException("AutomationId may only be set one time.");
482                 _automationId = value;
483             }
484         }
485
486         /// <summary>
487         /// Gets the current class's Name.
488         /// </summary>
489         /// <since_tizen> preview </since_tizen>
490         [Obsolete("This has been deprecated in API12")]
491         public string ClassName
492         {
493             get
494             {
495                 return Interop.Eo.efl_class_name_get(Interop.Eo.efl_class_get(RealHandle));
496             }
497         }
498
499         /// <summary>
500         /// Sets or gets the horizontal pointer hints for an object's weight.
501         /// </summary>
502         /// <since_tizen> preview </since_tizen>
503         [Obsolete("This has been deprecated in API12")]
504         public double WeightX
505         {
506             get
507             {
508                 return Interop.Evas.GetWeightX(Handle);
509             }
510             set
511             {
512                 Interop.Evas.SetWeightX(Handle, value);
513             }
514         }
515
516         /// <summary>
517         /// Sets or gets the vertical pointer hints for an object's weight.
518         /// </summary>
519         /// <since_tizen> preview </since_tizen>
520         [Obsolete("This has been deprecated in API12")]
521         public double WeightY
522         {
523             get
524             {
525                 return Interop.Evas.GetWeightY(Handle);
526             }
527             set
528             {
529                 Interop.Evas.SetWeightY(Handle, value);
530             }
531         }
532
533         /// <summary>
534         /// Sets or gets the horizontal alignment hint of an object's alignment.
535         /// </summary>
536         /// <since_tizen> preview </since_tizen>
537         [Obsolete("This has been deprecated in API12")]
538         public virtual double AlignmentX
539         {
540             get
541             {
542                 return Interop.Evas.GetAlignX(Handle);
543             }
544             set
545             {
546                 Interop.Evas.SetAlignX(Handle, value);
547             }
548         }
549
550         /// <summary>
551         /// Sets or gets the vertical alignment hint of an object's alignment.
552         /// </summary>
553         /// <since_tizen> preview </since_tizen>
554         [Obsolete("This has been deprecated in API12")]
555         public virtual double AlignmentY
556         {
557             get
558             {
559                 return Interop.Evas.GetAlignY(Handle);
560             }
561             set
562             {
563                 Interop.Evas.SetAlignY(Handle, value);
564             }
565         }
566
567         /// <summary>
568         /// Sets or gets the width hints for an object's minimum size.
569         /// </summary>
570         /// <since_tizen> preview </since_tizen>
571         [Obsolete("This has been deprecated in API12")]
572         public int MinimumWidth
573         {
574             get
575             {
576                 int w, h;
577                 Interop.Evas.evas_object_size_hint_min_get(RealHandle, out w, out h);
578                 return w;
579             }
580             set
581             {
582                 int h = MinimumHeight;
583                 Interop.Evas.evas_object_size_hint_min_set(RealHandle, value, h);
584             }
585         }
586
587         /// <summary>
588         /// Sets or gets the height hints for an object's minimum size.
589         /// </summary>
590         /// <since_tizen> preview </since_tizen>
591         [Obsolete("This has been deprecated in API12")]
592         public int MinimumHeight
593         {
594             get
595             {
596                 int w, h;
597                 Interop.Evas.evas_object_size_hint_min_get(RealHandle, out w, out h);
598                 return h;
599             }
600             set
601             {
602                 int w = MinimumWidth;
603                 Interop.Evas.evas_object_size_hint_min_set(RealHandle, w, value);
604             }
605         }
606
607         /// <summary>
608         /// Gets the visible state of the given Evas object.
609         /// </summary>
610         /// <since_tizen> preview </since_tizen>
611         [Obsolete("This has been deprecated in API12")]
612         public bool IsVisible
613         {
614             get
615             {
616                 return Interop.Evas.evas_object_visible_get(Handle);
617             }
618         }
619
620         /// <summary>
621         /// Sets or gets the position and (rectangular) size of the given Evas object.
622         /// </summary>
623         /// <since_tizen> preview </since_tizen>
624         [Obsolete("This has been deprecated in API12")]
625         public Rect Geometry
626         {
627             get
628             {
629                 int x, y, w, h;
630                 Interop.Evas.evas_object_geometry_get(Handle, out x, out y, out w, out h);
631                 Rect rect = new Rect(x, y, w, h);
632                 return rect;
633             }
634             set
635             {
636                 Interop.Evas.evas_object_geometry_set(Handle, value.X, value.Y, value.Width, value.Height);
637             }
638         }
639
640         /// <summary>
641         /// Sets or gets the general or main color of the given Evas object.
642         /// </summary>
643         /// <since_tizen> preview </since_tizen>
644         [Obsolete("This has been deprecated in API12")]
645         public virtual Color Color
646         {
647             get
648             {
649                 int r, g, b, a;
650                 Interop.Evas.evas_object_color_get(RealHandle, out r, out g, out b, out a);
651                 return Color.FromRgba(r, g, b, a);
652             }
653             set
654             {
655                 Interop.Evas.SetPremultipliedColor(RealHandle, value.R, value.G, value.B, value.A);
656             }
657         }
658
659         /// <summary>
660         /// Sets or gets the map enabled state.
661         /// </summary>
662         /// <since_tizen> preview </since_tizen>
663         [Obsolete("This has been deprecated in API12")]
664         public bool IsMapEnabled
665         {
666             get
667             {
668                 return Interop.Evas.evas_object_map_enable_get(Handle);
669             }
670             set
671             {
672                 Interop.Evas.evas_object_map_enable_set(Handle, value);
673             }
674         }
675
676         /// <summary>
677         /// Sets or gets the current object's transformation map.
678         /// </summary>
679         /// <since_tizen> preview </since_tizen>
680         [Obsolete("This has been deprecated in API12")]
681         public EvasMap EvasMap
682         {
683             get
684             {
685                 IntPtr evasMap = Interop.Evas.evas_object_map_get(Handle);
686                 return new EvasMap(evasMap);
687             }
688             set
689             {
690                 Interop.Evas.evas_object_map_set(Handle, value.Handle);
691             }
692         }
693
694         /// <summary>
695         /// Sets or gets whether an object is to repeat events.
696         /// </summary>
697         /// <since_tizen> preview </since_tizen>
698         [Obsolete("This has been deprecated in API12")]
699         public bool RepeatEvents
700         {
701             get
702             {
703                 var result = Interop.Evas.evas_object_repeat_events_get(Handle);
704                 Debug.Assert(Handle == RealHandle || result == Interop.Evas.evas_object_repeat_events_get(RealHandle));
705                 return result;
706             }
707             set
708             {
709                 if (Handle != RealHandle)
710                 {
711                     Interop.Evas.evas_object_repeat_events_set(RealHandle, value);
712                 }
713                 Interop.Evas.evas_object_repeat_events_set(Handle, value);
714             }
715         }
716
717         /// <summary>
718         /// Sets or gets whether events on a smart object's member should get propagated up to its parent.
719         /// </summary>
720         /// <since_tizen> preview </since_tizen>
721         [Obsolete("This has been deprecated in API12")]
722         public bool PropagateEvents
723         {
724             get
725             {
726                 var result = Interop.Evas.evas_object_propagate_events_get(Handle);
727                 Debug.Assert(Handle == RealHandle || result == Interop.Evas.evas_object_propagate_events_get(RealHandle));
728                 return result;
729             }
730             set
731             {
732                 if (Handle != RealHandle)
733                 {
734                     Interop.Evas.evas_object_propagate_events_set(RealHandle, value);
735                 }
736                 Interop.Evas.evas_object_propagate_events_set(Handle, value);
737             }
738         }
739
740         /// <summary>
741         /// Sets or gets whether an object is set to pass (ignore) events.
742         /// </summary>
743         /// <since_tizen> preview </since_tizen>
744         [Obsolete("This has been deprecated in API12")]
745         public bool PassEvents
746         {
747             get
748             {
749                 var result = Interop.Evas.evas_object_pass_events_get(Handle);
750                 Debug.Assert(Handle == RealHandle || result == Interop.Evas.evas_object_pass_events_get(RealHandle));
751                 return result;
752             }
753             set
754             {
755                 if (Handle != RealHandle)
756                 {
757                     Interop.Evas.evas_object_pass_events_set(RealHandle, value);
758                 }
759                 Interop.Evas.evas_object_pass_events_set(Handle, value);
760             }
761         }
762
763         /// <summary>
764         /// Sets or gets the style for this object tooltip.
765         /// </summary>
766         /// <since_tizen> preview </since_tizen>
767         [Obsolete("This has been deprecated in API12")]
768         public string TooltipStyle
769         {
770             get
771             {
772                 return Interop.Elementary.elm_object_tooltip_style_get(RealHandle);
773             }
774             set
775             {
776                 Interop.Elementary.elm_object_tooltip_style_set(RealHandle, value);
777             }
778         }
779
780         /// <summary>
781         /// Sets or gets the orientation of tooltip.
782         /// </summary>
783         /// <since_tizen> preview </since_tizen>
784         [Obsolete("This has been deprecated in API12")]
785         public TooltipOrientation TooltipOrientation
786         {
787             get
788             {
789                 return (TooltipOrientation)Interop.Elementary.elm_object_tooltip_orient_get(RealHandle);
790             }
791             set
792             {
793                 Interop.Elementary.elm_object_tooltip_orient_set(RealHandle, (int)value);
794             }
795         }
796
797         /// <summary>
798         /// Sets or gets size restriction state of an object's tooltip.
799         /// </summary>
800         /// <since_tizen> preview </since_tizen>
801         [Obsolete("This has been deprecated in API12")]
802         public bool TooltipWindowMode
803         {
804             get
805             {
806                 return Interop.Elementary.elm_object_tooltip_window_mode_get(RealHandle);
807             }
808             set
809             {
810                 Interop.Elementary.elm_object_tooltip_window_mode_set(RealHandle, value);
811             }
812         }
813
814         /// <summary>
815         /// Sets the content to be shown in the tooltip object.
816         /// </summary>
817         /// <since_tizen> preview </since_tizen>
818         [Obsolete("This has been deprecated in API12")]
819         public GetTooltipContentDelegate TooltipContentDelegate
820         {
821             get
822             {
823                 return _tooltipContentDelegate;
824             }
825             set
826             {
827                 _tooltipContentDelegate = value;
828                 if (value != null)
829                 {
830                     Interop.Elementary.elm_object_tooltip_content_cb_set(RealHandle, _tooltipContentCallback, IntPtr.Zero, null);
831                 }
832                 else
833                 {
834                     Interop.Elementary.elm_object_tooltip_content_cb_set(RealHandle, null, IntPtr.Zero, null);
835                 }
836             }
837         }
838
839         /// <summary>
840         /// Gets the movement freeze by 1.
841         /// This gets the movement freeze count by one.
842         /// </summary>
843         /// <since_tizen> preview </since_tizen>
844         [Obsolete("This has been deprecated in API12")]
845         public int TooltipMoveFreezeCount
846         {
847             get
848             {
849                 return Interop.Elementary.elm_object_tooltip_move_freeze_get(RealHandle);
850             }
851         }
852
853         /// <summary>
854         /// Sets or gets whether an Evas object is to freeze (discard) events.
855         /// </summary>
856         /// <since_tizen> preview </since_tizen>
857         [Obsolete("This has been deprecated in API12")]
858         public bool AllEventsFrozen
859         {
860             get
861             {
862                 var result = Interop.Evas.evas_object_freeze_events_get(Handle);
863                 Debug.Assert(Handle == RealHandle || result == Interop.Evas.evas_object_freeze_events_get(RealHandle));
864                 return result;
865             }
866             set
867             {
868                 if (Handle != RealHandle)
869                 {
870                     Interop.Evas.evas_object_freeze_events_set(RealHandle, value);
871                 }
872                 Interop.Evas.evas_object_freeze_events_set(Handle, value);
873             }
874         }
875
876         /// <summary>
877         /// Sets or gets the layer of its canvas that the given object will be part of.
878         /// </summary>
879         /// <since_tizen> preview </since_tizen>
880         [Obsolete("This has been deprecated in API12")]
881         public virtual int Layer
882         {
883             get
884             {
885                 return Interop.Evas.evas_object_layer_get(Handle);
886             }
887             set
888             {
889                 Interop.Evas.evas_object_layer_set(Handle, value);
890             }
891         }
892
893         /// <summary>
894         /// Sets or gets the render operation to be used for rendering the Evas object.
895         /// </summary>
896         /// <since_tizen> 5 </since_tizen>
897         [Obsolete("This has been deprecated in API12")]
898         public RenderOp RenderOperation
899         {
900             get
901             {
902                 return (RenderOp)Interop.Evas.evas_object_render_op_get(RealHandle);
903             }
904             set
905             {
906                 Interop.Evas.evas_object_render_op_set(RealHandle, (Interop.Evas.RenderOp)value);
907             }
908         }
909
910
911         /// <summary>
912         /// Clips one object to another.
913         /// </summary>
914         /// <param name="clip">The object to clip object by.</param>
915         /// <since_tizen> preview </since_tizen>
916         [Obsolete("This has been deprecated in API12")]
917         public void SetClip(EvasObject clip)
918         {
919             Interop.Evas.evas_object_clip_set(Handle, clip);
920         }
921
922         /// <summary>
923         /// Sets the hints for an object's alignment.
924         /// </summary>
925         /// <param name="x">The horizontal alignment hint as double value ranging from 0.0 to 1.0. The default alignment hint value is 0.5.</param>
926         /// <param name="y">The vertical alignment hint as double value ranging from 0.0 to 1.0. The default alignment hint value is 0.5.</param>
927         /// <since_tizen> preview </since_tizen>
928         [Obsolete("This has been deprecated in API12")]
929         public void SetAlignment(double x, double y)
930         {
931             Interop.Evas.evas_object_size_hint_align_set(Handle, x, y);
932         }
933
934         /// <summary>
935         /// Sets the hints for an object's weight.
936         /// </summary>
937         /// <param name="x">The non-negative double value to be used as horizontal weight hint.</param>
938         /// <param name="y">The non-negative double value to be used as vertical weight hint.</param>
939         /// <since_tizen> preview </since_tizen>
940         [Obsolete("This has been deprecated in API12")]
941         public void SetWeight(double x, double y)
942         {
943             Interop.Evas.evas_object_size_hint_weight_set(Handle, x, y);
944         }
945
946         /// <summary>
947         /// Sets the text for an object's tooltip.
948         /// </summary>
949         /// <param name="text">The text value to display inside the tooltip.</param>
950         /// <since_tizen> preview </since_tizen>
951         [Obsolete("This has been deprecated in API12")]
952         public void SetTooltipText(string text)
953         {
954             Interop.Elementary.elm_object_tooltip_text_set(RealHandle, text);
955         }
956
957         /// <summary>
958         /// Unsets an object's tooltip.
959         /// </summary>
960         /// <since_tizen> preview </since_tizen>
961         [Obsolete("This has been deprecated in API12")]
962         public void UnsetTooltip()
963         {
964             Interop.Elementary.elm_object_tooltip_unset(RealHandle);
965         }
966
967         /// <summary>
968         /// This increments the tooltip movement freeze count by one.
969         /// If the count is more than 0, the tooltip position will be fixed.
970         /// </summary>
971         /// <since_tizen> preview </since_tizen>
972         [Obsolete("This has been deprecated in API12")]
973         public void PushTooltipMoveFreeze()
974         {
975             Interop.Elementary.elm_object_tooltip_move_freeze_push(RealHandle);
976         }
977
978         /// <summary>
979         /// This decrements the tooltip freeze count by one.
980         /// </summary>
981         /// <since_tizen> preview </since_tizen>
982         [Obsolete("This has been deprecated in API12")]
983         public void PopTooltipMoveFreeze()
984         {
985             Interop.Elementary.elm_object_tooltip_move_freeze_pop(RealHandle);
986         }
987
988         /// <summary>
989         /// Force hide the tooltip of the object.
990         /// </summary>
991         /// <since_tizen> preview </since_tizen>
992         [Obsolete("This has been deprecated in API12")]
993         public void HideTooltip()
994         {
995             Interop.Elementary.elm_object_tooltip_hide(RealHandle);
996         }
997
998         /// <summary>
999         /// Force show the tooltip of the object.
1000         /// </summary>
1001         /// <since_tizen> preview </since_tizen>
1002         [Obsolete("This has been deprecated in API12")]
1003         public void ShowTooltip()
1004         {
1005             Interop.Elementary.elm_object_tooltip_show(RealHandle);
1006         }
1007
1008         /// <summary>
1009         /// Makes the current object visible.
1010         /// </summary>
1011         /// <since_tizen> preview </since_tizen>
1012         [Obsolete("This has been deprecated in API12")]
1013         public void Show()
1014         {
1015             Interop.Evas.evas_object_show(Handle);
1016         }
1017
1018         /// <summary>
1019         /// Makes the current object invisible.
1020         /// </summary>
1021         /// <since_tizen> preview </since_tizen>
1022         [Obsolete("This has been deprecated in API12")]
1023         public void Hide()
1024         {
1025             Interop.Evas.evas_object_hide(Handle);
1026         }
1027
1028         /// <summary>
1029         /// Changes the size of the current object.
1030         /// </summary>
1031         /// <param name="w">The new width.</param>
1032         /// <param name="h">The new height.</param>
1033         /// <since_tizen> preview </since_tizen>
1034         [Obsolete("This has been deprecated in API12")]
1035         public void Resize(int w, int h)
1036         {
1037             Interop.Evas.evas_object_resize(Handle, w, h);
1038         }
1039
1040         /// <summary>
1041         /// Moves the current object to the given location.
1042         /// </summary>
1043         /// <param name="x">The X position to move the object.</param>
1044         /// <param name="y">The Y position to move the object.</param>
1045         /// <since_tizen> preview </since_tizen>
1046         [Obsolete("This has been deprecated in API12")]
1047         public void Move(int x, int y)
1048         {
1049             Interop.Evas.evas_object_move(Handle, x, y);
1050         }
1051
1052         /// <summary>
1053         /// Lowers the object to the bottom of its layer.
1054         /// </summary>
1055         /// <since_tizen> preview </since_tizen>
1056         [Obsolete("This has been deprecated in API12")]
1057         public void Lower()
1058         {
1059             Interop.Evas.evas_object_lower(Handle);
1060         }
1061
1062         /// <summary>
1063         /// Define the IntPtr operator.
1064         /// </summary>
1065         /// <param name="obj">Parent object.</param>
1066         /// <since_tizen> preview </since_tizen>
1067         [Obsolete("This has been deprecated in API12")]
1068         public static implicit operator IntPtr(EvasObject obj)
1069         {
1070             if (obj == null)
1071                 return IntPtr.Zero;
1072             return obj.Handle;
1073         }
1074
1075         /// <summary>
1076         /// Define cast to EvasObject operator from IntPtr
1077         /// </summary>
1078         /// <param name="handle">Native handle to EvasObject</param>
1079         /// <since_tizen> preview </since_tizen>
1080         [Obsolete("This has been deprecated in API12")]
1081         public static explicit operator EvasObject(IntPtr handle) => EvasObject.s_handleTable.TryGetValue(handle, out EvasObject obj) ? obj : null;
1082
1083         /// <summary>
1084         /// Requests the keyname key events to be directed to the current object.
1085         /// </summary>
1086         /// <param name="keyname">The key to request events for.</param>
1087         /// <param name="exclusive">Set TRUE to request that the obj is the only object receiving the keyname events, otherwise set to FALSE.</param>
1088         /// <returns>If the call succeeds then true, otherwise false.</returns>
1089         /// <since_tizen> preview </since_tizen>
1090         [Obsolete("This has been deprecated in API12")]
1091         public bool KeyGrab(string keyname, bool exclusive)
1092         {
1093             return Interop.Evas.evas_object_key_grab(Handle, keyname, 0, 0, exclusive);
1094         }
1095
1096         /// <summary>
1097         /// Removes the grab on the keyname key events.
1098         /// </summary>
1099         /// <param name="keyname">The key the grab is set for.</param>
1100         /// <since_tizen> preview </since_tizen>
1101         [Obsolete("This has been deprecated in API12")]
1102         public void KeyUngrab(string keyname)
1103         {
1104             Interop.Evas.evas_object_key_ungrab(Handle, keyname, 0, 0);
1105         }
1106
1107         /// <summary>
1108         /// Marks the smart object as changed.
1109         /// </summary>
1110         /// <since_tizen> preview </since_tizen>
1111         [Obsolete("This has been deprecated in API12")]
1112         public void MarkChanged()
1113         {
1114             Interop.Evas.evas_object_smart_changed(RealHandle);
1115         }
1116
1117         /// <summary>
1118         /// Calls the calculate smart function immediately.
1119         /// This will force immediate calculations needed for renderization of this object.
1120         /// </summary>
1121         /// <since_tizen> preview </since_tizen>
1122         [Obsolete("This has been deprecated in API12")]
1123         public void Calculate()
1124         {
1125             Interop.Evas.evas_object_smart_calculate(RealHandle);
1126         }
1127
1128         /// <summary>
1129         /// Sets the hints for an object's aspect ratio.
1130         /// </summary>
1131         /// <param name="aspect">The policy or type of aspect ratio to apply to an object.</param>
1132         /// <param name="w">The integer to be used as aspect width ratio term.</param>
1133         /// <param name="h">The integer to be used as aspect height ratio term.</param>
1134         /// <since_tizen> preview </since_tizen>
1135         [Obsolete("This has been deprecated in API12")]
1136         public void SetSizeHintAspect(AspectControl aspect, int w, int h)
1137         {
1138             Interop.Evas.evas_object_size_hint_aspect_set(Handle, (int)aspect, w, h);
1139         }
1140
1141         /// <summary>
1142         /// Gets the hints for an object's aspect ratio.
1143         /// </summary>
1144         /// <param name="aspect">The policy or type of aspect ratio to apply to an object.</param>
1145         /// <param name="w">The integer to be used as aspect width ratio term.</param>
1146         /// <param name="h">The integer to be used as aspect height ratio term.</param>
1147         /// <since_tizen> preview </since_tizen>
1148         [Obsolete("This has been deprecated in API12")]
1149         public void GetSizeHintAspect(out AspectControl aspect, out int w, out int h)
1150         {
1151             int aspectRatio;
1152             Interop.Evas.evas_object_size_hint_aspect_get(Handle, out aspectRatio, out w, out h);
1153             aspect = (AspectControl)aspectRatio;
1154         }
1155
1156         /// <summary>
1157         /// Stacks immediately below anchor.
1158         /// </summary>
1159         /// <param name="anchor">The object below which to stack.</param>
1160         /// <since_tizen> preview </since_tizen>
1161         [Obsolete("This has been deprecated in API12")]
1162         public void StackBelow(EvasObject anchor)
1163         {
1164             Interop.Evas.evas_object_stack_below(Handle, anchor);
1165         }
1166
1167         /// <summary>
1168         /// Stacks immediately above anchor.
1169         /// </summary>
1170         /// <param name="anchor">The object above which to stack.</param>
1171         /// <since_tizen> preview </since_tizen>
1172         [Obsolete("This has been deprecated in API12")]
1173         public void StackAbove(EvasObject anchor)
1174         {
1175             Interop.Evas.evas_object_stack_above(Handle, anchor);
1176         }
1177
1178         /// <summary>
1179         /// Raises to the top of its layer.
1180         /// </summary>
1181         /// <since_tizen> preview </since_tizen>
1182         [Obsolete("This has been deprecated in API12")]
1183         public void RaiseTop()
1184         {
1185             Interop.Evas.evas_object_raise(Handle);
1186         }
1187
1188         /// <summary>
1189         /// Gets the geometry of a line number.
1190         /// </summary>
1191         /// <param name="lineNumber">The line number.</param>
1192         /// <param name="x">x coordinate of the line.</param>
1193         /// <param name="y">y coordinate of the line.</param>
1194         /// <param name="w">w coordinate of the line.</param>
1195         /// <param name="h">h coordinate of the line.</param>
1196         /// <returns>True on success, or False on error.</returns>
1197         /// <since_tizen> preview </since_tizen>
1198         [Obsolete("GetTextBlockGeometryByLineNumber is obsolete as of version 5.0.0.14299 and is no longer supported.")]
1199         public bool GetTextBlockGeometryByLineNumber(int lineNumber, out int x, out int y, out int w, out int h)
1200         {
1201             x = -1; y = -1; w = -1; h = -1;
1202
1203             IntPtr _edjeHandle = Interop.Elementary.elm_layout_edje_get(RealHandle);
1204             if (_edjeHandle == IntPtr.Zero)
1205             {
1206                 return false;
1207             }
1208
1209             IntPtr _textblock = Interop.Elementary.edje_object_part_object_get(_edjeHandle, "elm.text");
1210             if (_textblock == IntPtr.Zero)
1211             {
1212                 return false;
1213             }
1214
1215             return Interop.Evas.evas_object_textblock_line_number_geometry_get(_textblock, lineNumber, out x, out y, out w, out h);
1216         }
1217
1218         internal IntPtr GetData(string key)
1219         {
1220             return Interop.Evas.evas_object_data_get(RealHandle, key);
1221         }
1222
1223         internal void SetData(string key, IntPtr data)
1224         {
1225             Interop.Evas.evas_object_data_set(RealHandle, key, data);
1226         }
1227
1228         internal IntPtr DeleteData(string key)
1229         {
1230             return Interop.Evas.evas_object_data_del(RealHandle, key);
1231         }
1232
1233         /// <summary>
1234         /// The callback of the Invalidate Event.
1235         /// </summary>
1236         /// <since_tizen> preview </since_tizen>
1237         [Obsolete("This has been deprecated in API12")]
1238         protected virtual void OnInvalidate()
1239         {
1240         }
1241
1242         /// <summary>
1243         /// The callback of the Instantiated Event.
1244         /// </summary>
1245         /// <since_tizen> preview </since_tizen>
1246         [Obsolete("This has been deprecated in API12")]
1247         protected virtual void OnInstantiated()
1248         {
1249         }
1250
1251         /// <summary>
1252         /// The callback of the Realized Event.
1253         /// </summary>
1254         /// <since_tizen> preview </since_tizen>
1255         [Obsolete("This has been deprecated in API12")]
1256         protected virtual void OnRealized()
1257         {
1258         }
1259
1260         /// <summary>
1261         /// The callback of the Unrealize Event.
1262         /// </summary>
1263         /// <since_tizen> preview </since_tizen>
1264         [Obsolete("This has been deprecated in API12")]
1265         protected virtual void OnUnrealize()
1266         {
1267         }
1268
1269         /// <summary>
1270         /// Creates a widget handle.
1271         /// </summary>
1272         /// <param name="parent">Parent EvasObject.</param>
1273         /// <returns>Handle IntPtr.</returns>
1274         /// <since_tizen> preview </since_tizen>
1275         [Obsolete("This has been deprecated in API12")]
1276         protected abstract IntPtr CreateHandle(EvasObject parent);
1277
1278         /// <summary>
1279         /// For this object bind Parent object.Init handle and all kinds of EvasObjectEvent.
1280         /// </summary>
1281         /// <param name="parent">Parent object.</param>
1282         /// <since_tizen> preview </since_tizen>
1283         [Obsolete("This has been deprecated in API12")]
1284         public void Realize(EvasObject parent)
1285         {
1286             if (!IsRealized)
1287             {
1288                 Parent = parent;
1289                 Handle = CreateHandle(parent);
1290                 Debug.Assert(Handle != IntPtr.Zero);
1291
1292                 s_handleTable[Handle] = this;
1293
1294                 (parent as Window)?.AddChild(this);
1295
1296                 OnRealized();
1297                 _deleted = new EvasObjectEvent(this, EvasObjectCallbackType.Del);
1298                 _keydown = new EvasObjectEvent<EvasKeyEventArgs>(this, RealHandle, EvasObjectCallbackType.KeyDown, EvasKeyEventArgs.Create);
1299                 _keyup = new EvasObjectEvent<EvasKeyEventArgs>(this, RealHandle, EvasObjectCallbackType.KeyUp, EvasKeyEventArgs.Create);
1300                 _moved = new EvasObjectEvent(this, EvasObjectCallbackType.Move);
1301                 _resized = new EvasObjectEvent(this, EvasObjectCallbackType.Resize);
1302                 _shown = new EvasObjectEvent(this, EvasObjectCallbackType.Show);
1303                 _hidden = new EvasObjectEvent(this, EvasObjectCallbackType.Hide);
1304
1305                 _deleted.On += (s, e) => MakeInvalidate();
1306                 _shown.On += (s, e) => Elementary.SendEvasObjectRealized(this);
1307             }
1308         }
1309
1310         /// <summary>
1311         /// Removes the current object relationship with others.
1312         /// </summary>
1313         /// <since_tizen> preview </since_tizen>
1314         [Obsolete("This has been deprecated in API12")]
1315         public void Unrealize()
1316         {
1317             if (IsRealized)
1318             {
1319                 if (_renderPostCallback != null)
1320                 {
1321                     Interop.Evas.evas_event_callback_del(Interop.Evas.evas_object_evas_get(Handle), Interop.Evas.ObjectCallbackType.RenderPost, _renderPostCallback);
1322                     _renderPostCallback = null;
1323                 }
1324
1325                 OnUnrealize();
1326                 IntPtr toBeDeleted = Handle;
1327                 Handle = IntPtr.Zero;
1328
1329                 DisposeEvent();
1330
1331                 (Parent as Window)?.RemoveChild(this);
1332
1333                 Interop.Evas.evas_object_del(toBeDeleted);
1334                 Deleted?.Invoke(this, EventArgs.Empty);
1335                 Parent = null;
1336                 s_handleTable.Remove(toBeDeleted);
1337             }
1338         }
1339
1340         private void MakeInvalidate()
1341         {
1342             Deleted?.Invoke(this, EventArgs.Empty);
1343             OnInvalidate();
1344             IntPtr toBeDeleted = Handle;
1345             Handle = IntPtr.Zero;
1346
1347             MakeInvalidateEvent();
1348
1349             (Parent as Window)?.RemoveChild(this);
1350             Parent = null;
1351             _deleted = null;
1352
1353             s_handleTable.Remove(toBeDeleted);
1354         }
1355
1356         private void DisposeEvent()
1357         {
1358             var events = new List<IInvalidatable>(_eventStore);
1359             foreach (var evt in events)
1360             {
1361                 evt.Dispose();
1362             }
1363             _eventStore.Clear();
1364         }
1365
1366         private void MakeInvalidateEvent()
1367         {
1368             foreach (var evt in _eventStore)
1369             {
1370                 evt.MakeInvalidate();
1371             }
1372             _eventStore.Clear();
1373         }
1374
1375         internal void AddToEventLifeTracker(IInvalidatable item)
1376         {
1377             _eventStore.Add(item);
1378         }
1379
1380         internal void RemoveFromEventLifeTracker(IInvalidatable item)
1381         {
1382             _eventStore.Remove(item);
1383         }
1384     }
1385 }