Skip to content

Commit

Permalink
Refactor RenderPost event using EvasEvent
Browse files Browse the repository at this point in the history
    - RenderPost event is implemented as EvasEvent, not EvasObjectEvent,
      due to the malfuntion under TCT execute envirenment
    - Update Version to Beta-018

Change-Id: Idaf0137f094674d016f1bdf248b8b8ff007a6660
  • Loading branch information
JoonghyunCho committed Mar 24, 2017
1 parent abcfe57 commit 4e2d5e5
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 5 deletions.
2 changes: 1 addition & 1 deletion packaging/elm-sharp.spec
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
%define DEV_VERSION beta-017
%define DEV_VERSION beta-018

Name: elm-sharp
Summary: C# Binding for Elementary
Expand Down
31 changes: 27 additions & 4 deletions src/ElmSharp/ElmSharp/EvasObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ internal IntPtr RealHandle
EvasObjectEvent<EvasKeyEventArgs> _keydown;
EvasObjectEvent _moved;
EvasObjectEvent _resized;
EvasObjectEvent _renderPost;
EventHandler _renderPost;
Interop.Evas.EvasCallback _renderPostCallback = null;

readonly HashSet<IInvalidatable> _eventStore = new HashSet<IInvalidatable>();

Expand Down Expand Up @@ -103,13 +104,30 @@ public event EventHandler Resized
add { _resized.On += value; }
remove { _resized.On -= value; }
}

/// <summary>
/// Current widget RenderPost Event Handler
/// </summary>
public event EventHandler RenderPost
{
add { _renderPost.On += value; }
remove { _renderPost.On -= value; }
add
{
_renderPost += value;
if (_renderPostCallback == null)
{
_renderPostCallback = new Interop.Evas.EvasCallback((o, e, d) => _renderPost?.Invoke(this, EventArgs.Empty));
Interop.Evas.evas_event_callback_add(Interop.Evas.evas_object_evas_get(Handle), Interop.Evas.ObjectCallbackType.RenderPost, _renderPostCallback, IntPtr.Zero);
}
}
remove
{
_renderPost -= value;
if (_renderPost?.GetInvocationList().Length == 0)
{
Interop.Evas.evas_event_callback_del(Interop.Evas.evas_object_evas_get(Handle), Interop.Evas.ObjectCallbackType.RenderPost, _renderPostCallback);
_renderPostCallback = null;
}
}
}

/// <summary>
Expand Down Expand Up @@ -510,7 +528,6 @@ public void Realize(EvasObject parent)
_keyup = new EvasObjectEvent<EvasKeyEventArgs>(this, EvasObjectCallbackType.KeyUp, EvasKeyEventArgs.Create);
_moved = new EvasObjectEvent(this, EvasObjectCallbackType.Move);
_resized = new EvasObjectEvent(this, EvasObjectCallbackType.Resize);
_renderPost = new EvasObjectEvent(this, Interop.Evas.evas_object_evas_get(Handle), EvasObjectCallbackType.RenderPost);

_deleted.On += (s, e) => MakeInvalidate();
_keydown.On += (s, e) => KeyDown?.Invoke(this, e);
Expand All @@ -525,6 +542,12 @@ public void Unrealize()
{
if (IsRealized)
{
if(_renderPostCallback != null)
{
Interop.Evas.evas_event_callback_del(Interop.Evas.evas_object_evas_get(Handle), Interop.Evas.ObjectCallbackType.RenderPost, _renderPostCallback);
_renderPostCallback = null;
}

OnUnrealize();
IntPtr toBeDeleted = Handle;
Handle = IntPtr.Zero;
Expand Down
8 changes: 8 additions & 0 deletions src/ElmSharp/Interop/Interop.Evas.cs
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,14 @@ public enum ObjectCallbackType
}
internal delegate void EventCallback(IntPtr data, IntPtr evas, IntPtr obj, IntPtr info);

internal delegate void EvasCallback(IntPtr data, IntPtr evas, IntPtr info);

[DllImport(Libraries.Evas)]
internal static extern void evas_event_callback_add(IntPtr obj, ObjectCallbackType type, EvasCallback func, IntPtr data);

[DllImport(Libraries.Evas)]
internal static extern void evas_event_callback_del(IntPtr obj, ObjectCallbackType type, EvasCallback func);

[DllImport(Libraries.Evas)]
internal static extern void evas_object_event_callback_add(IntPtr obj, ObjectCallbackType type, EventCallback func, IntPtr data);
[DllImport(Libraries.Evas)]
Expand Down

0 comments on commit 4e2d5e5

Please sign in to comment.