Ejemplo n.º 1
0
        /// <summary>
        /// Returns scripting information assosiated with VM
        /// </summary>
        private static ScriptingClasses GetScriptingClasses(SciterView view, IntPtr hvm)
        {
            var scripting = default(ScriptingClasses);

            lock (_syncRoot)
            {
                if (!_registrations.TryGetValue(hvm, out scripting))
                {
                    scripting.ClassDefs = new List <SciterClassDef>();
                    scripting.Instances = new Dictionary <IntPtr, object>();

                    _registrations.Add(hvm, scripting);
                    view.Hook.HandleDestroyed += (s, e) =>
                    {
                        lock (_syncRoot)
                        {
                            Debug.Assert(_registrations[hvm].Instances.Count == 0, "all scripting instances should be freed at this point");
                            _registrations.Remove(hvm);
                        }
                    };
                }
            }

            return(scripting);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Registers scripting class
        /// </summary>
        public static bool RegisterClass <TType>(SciterView view)
        {
            Debug.Assert(view != null && view.HandleInternal != IntPtr.Zero, "View cannot be null");

            var result = false;
            var hvm    = SciterHostApi.SciterGetVM(view.HandleInternal);

            if (hvm != IntPtr.Zero)
            {
                var scripting = GetScriptingClasses(view, hvm);

                var sciterClassDef = GetClassDef(typeof(TType));
                if (!scripting.IsExists(sciterClassDef))
                {
                    var nativeClass = sciterClassDef.ToNative();
                    try
                    {
                        result = SciterHostApi.SciterNativeDefineClass(hvm, nativeClass);
                        scripting.ClassDefs.Add(sciterClassDef);
                    }
                    finally { SciterClassDef.FreeNative(nativeClass); }
                }
                else
                {
                    throw new ArgumentException("Class already registered", "TType");
                }
            }

            return(result);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Registers scripting class
 /// </summary>
 public static void RegisterClass <TType>(SciterView view)
 {
 }