コード例 #1
0
ファイル: SciterHost.cs プロジェクト: bytey-xyz/SciterSharp
        // Notification handler
        private uint HandleNotification(IntPtr ptrNotification, IntPtr callbackParam)
        {
            SciterXDef.SCITER_CALLBACK_NOTIFICATION scn = (SciterXDef.SCITER_CALLBACK_NOTIFICATION)Marshal.PtrToStructure(ptrNotification, typeof(SciterXDef.SCITER_CALLBACK_NOTIFICATION));

            switch (scn.code)
            {
            case SciterXDef.SC_LOAD_DATA:
                SciterXDef.SCN_LOAD_DATA sld = (SciterXDef.SCN_LOAD_DATA)Marshal.PtrToStructure(ptrNotification, typeof(SciterXDef.SCN_LOAD_DATA));
                return((uint)OnLoadData(sld));

            case SciterXDef.SC_DATA_LOADED:
                SciterXDef.SCN_DATA_LOADED sdl = (SciterXDef.SCN_DATA_LOADED)Marshal.PtrToStructure(ptrNotification, typeof(SciterXDef.SCN_DATA_LOADED));
                OnDataLoaded(sdl);
                return(0);

            case SciterXDef.SC_ATTACH_BEHAVIOR:
                SciterXDef.SCN_ATTACH_BEHAVIOR sab = (SciterXDef.SCN_ATTACH_BEHAVIOR)Marshal.PtrToStructure(ptrNotification, typeof(SciterXDef.SCN_ATTACH_BEHAVIOR));
                SciterEventHandler             elementEvh;
                bool res = OnAttachBehavior(new SciterElement(sab.elem), Marshal.PtrToStringAnsi(sab.behaviorName), out elementEvh);
                if (res)
                {
                    SciterXBehaviors.FPTR_ElementEventProc proc = elementEvh._proc;
                    IntPtr ptrProc = Marshal.GetFunctionPointerForDelegate(proc);

                    IntPtr EVENTPROC_OFFSET  = Marshal.OffsetOf(typeof(SciterXDef.SCN_ATTACH_BEHAVIOR), "elementProc");
                    IntPtr EVENTPROC_OFFSET2 = Marshal.OffsetOf(typeof(SciterXDef.SCN_ATTACH_BEHAVIOR), "elementTag");
                    Marshal.WriteIntPtr(ptrNotification, EVENTPROC_OFFSET.ToInt32(), ptrProc);
                    Marshal.WriteInt32(ptrNotification, EVENTPROC_OFFSET2.ToInt32(), 1234);
                    return(1);
                }
                return(0);

            case SciterXDef.SC_ENGINE_DESTROYED:
                if (_window_evh != null)
                {
                    _api.SciterWindowDetachEventHandler(_hwnd, _window_evh._proc, IntPtr.Zero);
                    _window_evh = null;
                }

                OnEngineDestroyed();
                return(0);

            case SciterXDef.SC_POSTED_NOTIFICATION:
                SciterXDef.SCN_POSTED_NOTIFICATION spn = (SciterXDef.SCN_POSTED_NOTIFICATION)Marshal.PtrToStructure(ptrNotification, typeof(SciterXDef.SCN_POSTED_NOTIFICATION));
                IntPtr lreturn = IntPtr.Zero;
                if (spn.wparam.ToInt32() == INVOKE_NOTIFICATION)
                {
                    GCHandle handle = GCHandle.FromIntPtr(spn.lparam);
                    Action   cbk    = (Action)handle.Target;
                    cbk();
                    handle.Free();
                }
                else
                {
                    lreturn = OnPostedNotification(spn.wparam, spn.lparam);
                }

                IntPtr OFFSET_LRESULT = Marshal.OffsetOf(typeof(SciterXDef.SCN_POSTED_NOTIFICATION), "lreturn");
                Marshal.WriteIntPtr(ptrNotification, OFFSET_LRESULT.ToInt32(), lreturn);
                return(0);

            case SciterXDef.SC_GRAPHICS_CRITICAL_FAILURE:
                SciterXDef.SCN_GRAPHICS_CRITICAL_FAILURE cgf = (SciterXDef.SCN_GRAPHICS_CRITICAL_FAILURE)Marshal.PtrToStructure(ptrNotification, typeof(SciterXDef.SCN_GRAPHICS_CRITICAL_FAILURE));
                OnGraphicsCriticalFailure(cgf.hwnd);
                return(0);

            default:
                Debug.Assert(false);
                break;
            }
            return(0);
        }
コード例 #2
0
ファイル: SciterHost.cs プロジェクト: bytey-xyz/SciterSharp
 protected virtual void OnDataLoaded(SciterXDef.SCN_DATA_LOADED sdl)
 {
 }
コード例 #3
0
        protected override void OnDataLoaded(SciterXDef.SCN_DATA_LOADED sdl)
        {
            string url = sdl.uri;

            uint status = sdl.status;
            uint size   = sdl.dataSize;

            if (_loading_resources.ContainsKey(url))
            {
                ResourceLoad resource = _loading_resources[url];
                _loading_resources.Remove(url);
                resource.sw.Stop();

                SciterValue sv = new SciterValue();
                sv["url"]      = new SciterValue(url);
                sv["index"]    = new SciterValue(resource.index);
                sv["status"]   = new SciterValue(sdl.status);
                sv["size"]     = new SciterValue(sdl.dataSize);
                sv["dataType"] = new SciterValue((int)sdl.dataType);
                sv["loadTime"] = new SciterValue((int)resource.sw.ElapsedMilliseconds);

                if (sdl.dataSize != 0 &&
                    (sdl.dataType == SciterXRequest.SciterResourceType.RT_DATA_HTML ||
                     sdl.dataType == SciterXRequest.SciterResourceType.RT_DATA_STYLE ||
                     sdl.dataType == SciterXRequest.SciterResourceType.RT_DATA_SCRIPT ||
                     sdl.dataType == SciterXRequest.SciterResourceType.RT_DATA_RAW))
                {
                    byte[] buffer = new byte[sdl.dataSize];
                    Marshal.Copy(sdl.data, buffer, 0, buffer.Length);

                    string txt;
                    try
                    {
                        txt = Encoding.UTF8.GetString(buffer);
                    }
                    catch (Exception)
                    {
                        txt = "ERROR: file is not a correctly UTF-8 encoded";
                    }

                    sv["data"] = new SciterValue(txt);

                    DEBUGGER_RESTYPE type = DEBUGGER_RESTYPE.INVALID;
                    if (resource.is_internal)
                    {
                        type = DEBUGGER_RESTYPE.INTERNAL;
                    }
                    else if (sdl.dataType == SciterXRequest.SciterResourceType.RT_DATA_HTML)
                    {
                        type = DEBUGGER_RESTYPE.MARKUP;
                    }
                    else if (sdl.dataType == SciterXRequest.SciterResourceType.RT_DATA_SCRIPT)
                    {
                        type = DEBUGGER_RESTYPE.SCRIPT;
                    }

                    if (type != DEBUGGER_RESTYPE.INVALID && App.AppDebugger != null)
                    {
                        App.AppDebugger.CallFunction("Extern_LoadedResource", sv, new SciterValue((int)type));
                    }
                }

                if (!resource.is_internal)
                {
                    App.AppHost.CallFunction("Extern_NetworkLoadedResource", sv);
                }
            }
        }