private bool TryToValuePrivate(out SciterValue sciterValue, bool ignoreResult) { var result = GraphicsApi.ValueWrapPath(this.Handle, out var value) .IsOk(); sciterValue = (result || ignoreResult) ? SciterValue.Attach(value) : default; return(result); }
internal bool TryToValueInternal(out SciterValue sciterValue) { var result = GraphicsApi.ValueWrapText(this.Handle, out var value) .IsOk(); sciterValue = result ? SciterValue.Attach(value) : default; return(result); }
public bool TryToSciterValue(out SciterValue sciterValue) { var result = GraphicsApi.ValueWrapImage(this.Handle, out var value) .IsOk(); sciterValue = result ? SciterValue.Attach(value: value) : default; return(result); }
// EventProc private bool EventProcMethod(IntPtr tag, IntPtr he, uint evtg, IntPtr prms) { SciterElement sourceElement = null; if (!he.Equals(IntPtr.Zero)) { sourceElement = SciterElement.Attach(he); } switch ((SciterBehaviors.EVENT_GROUPS)evtg) { case SciterBehaviors.EVENT_GROUPS.SUBSCRIPTIONS_REQUEST: { var eventGroups = SubscriptionsRequest(sourceElement); Marshal.WriteInt32(prms, (int)eventGroups); return(true); } case SciterBehaviors.EVENT_GROUPS.HANDLE_INITIALIZATION: { var initializationParams = Marshal.PtrToStructure <SciterBehaviors.INITIALIZATION_PARAMS>(ptr: prms); switch (initializationParams.cmd) { case SciterBehaviors.INITIALIZATION_EVENTS.BEHAVIOR_ATTACH: #if DEBUG Debug.WriteLine($"Attach {this.Name}"); Debug.Assert(_isAttached == false); _isAttached = true; #endif this.Element = sourceElement; AttachedHandlers.Add(this); Attached(sourceElement); break; case SciterBehaviors.INITIALIZATION_EVENTS.BEHAVIOR_DETACH: #if DEBUG Debug.Assert(_isAttached == true); _isAttached = false; #endif Detached(sourceElement); AttachedHandlers.Remove(this); this.Element = null; break; default: return(false); } return(true); } case SciterBehaviors.EVENT_GROUPS.HANDLE_SOM: { //SOM_PARAMS *p = (SOM_PARAMS *)prms; SciterBehaviors.SOM_PARAMS p = Marshal.PtrToStructure <SciterBehaviors.SOM_PARAMS>(ptr: prms); if (p.cmd == SciterBehaviors.SOM_EVENTS.SOM_GET_PASSPORT) { // p->data.passport = pThis->asset_get_passport(); } else if (p.cmd == SciterBehaviors.SOM_EVENTS.SOM_GET_ASSET) { // p->data.asset = static_cast<som_asset_t*>(pThis); // note: no add_ref } return(false); } case SciterBehaviors.EVENT_GROUPS.HANDLE_MOUSE: { var args = Marshal.PtrToStructure <SciterBehaviors.MOUSE_PARAMS>(prms); return(OnMouse(element: sourceElement, args: args.ToEventArgs())); } case SciterBehaviors.EVENT_GROUPS.HANDLE_KEY: { var args = Marshal.PtrToStructure <SciterBehaviors.KEY_PARAMS>(prms).ToEventArgs(); return(OnKey(element: sourceElement, args: args)); } case SciterBehaviors.EVENT_GROUPS.HANDLE_FOCUS: { var args = Marshal.PtrToStructure <SciterBehaviors.FOCUS_PARAMS>(prms).ToEventArgs(); return(OnFocus(element: sourceElement, args: args)); } case SciterBehaviors.EVENT_GROUPS.HANDLE_DRAW: { var args = Marshal.PtrToStructure <SciterBehaviors.DRAW_PARAMS>(prms).ToEventArgs(); return(OnDraw(element: sourceElement, args: args)); } case SciterBehaviors.EVENT_GROUPS.HANDLE_TIMER: { var timerParams = Marshal.PtrToStructure <SciterBehaviors.TIMER_PARAMS>(prms); return(OnTimer(sourceElement, timerParams.timerId.Equals(IntPtr.Zero) ? (IntPtr?)null : timerParams.timerId)); } case SciterBehaviors.EVENT_GROUPS.HANDLE_BEHAVIOR_EVENT: { var eventParams = Marshal.PtrToStructure <SciterBehaviors.BEHAVIOR_EVENT_PARAMS>(prms); var targetElement = eventParams.he != IntPtr.Zero ? SciterElement.Attach(eventParams.he) : null; Element = eventParams.cmd switch { SciterBehaviors.BEHAVIOR_EVENTS.DOCUMENT_CREATED => targetElement, SciterBehaviors.BEHAVIOR_EVENTS.DOCUMENT_CLOSE => null, _ => Element }; return(OnEvent(sourceElement: sourceElement, targetElement: targetElement, eventType: (BehaviorEvents)(int)eventParams.cmd, reason: eventParams.reason, data: SciterValue.Attach(eventParams.data), eventName: eventParams.name)); } case SciterBehaviors.EVENT_GROUPS.HANDLE_METHOD_CALL: { var methodParams = Marshal.PtrToStructure <SciterXDom.METHOD_PARAMS>(prms); return(OnMethodCall(sourceElement, methodParams.methodID)); } case SciterBehaviors.EVENT_GROUPS.HANDLE_DATA_ARRIVED: { var arrivedParams = Marshal.PtrToStructure <SciterBehaviors.DATA_ARRIVED_PARAMS>(prms); return(OnDataArrived(sourceElement, arrivedParams)); } case SciterBehaviors.EVENT_GROUPS.HANDLE_SCROLL: { var eventArgs = Marshal.PtrToStructure <SciterBehaviors.SCROLL_PARAMS>(prms).ToEventArgs(); return(OnScroll(element: sourceElement, args: eventArgs)); } case SciterBehaviors.EVENT_GROUPS.HANDLE_SIZE: return(OnSize(sourceElement)); case SciterBehaviors.EVENT_GROUPS.HANDLE_SCRIPTING_METHOD_CALL: { var resultOffset = Marshal.OffsetOf(typeof(SciterBehaviors.SCRIPTING_METHOD_PARAMS), nameof(SciterBehaviors.SCRIPTING_METHOD_PARAMS.result)); #if OSX if (IntPtr.Size == 4) { Debug.Assert(resultOffset.ToInt32() == 12); } #else if (IntPtr.Size == 4) { Debug.Assert(resultOffset.ToInt32() == 16); // yep 16, strange but is what VS C++ compiler says } #endif else if (IntPtr.Size == 8) { Debug.Assert(resultOffset.ToInt32() == 24); } var methodParams = Marshal.PtrToStructure <SciterBehaviors.SCRIPTING_METHOD_PARAMS>(prms); var methodParamsWrapper = new SciterBehaviors.SCRIPTING_METHOD_PARAMS_WRAPPER(methodParams); var scriptResult = OnScriptCall(sourceElement, methodParamsWrapper.name, methodParamsWrapper.args); if (!scriptResult.IsSuccessful) { var methodInfos = GetType().GetMethods() .Where(w => w.GetCustomAttributes <SciterFunctionNameAttribute>() .Any(a => a.FunctionName.Equals(methodParamsWrapper.name)) || w.Name.Equals(methodParamsWrapper.name)) .ToArray(); if (methodInfos?.Any() != true) { return(false); } MethodInfo methodInfo; if (methodInfos.Length == 1) { methodInfo = methodInfos.First(); } else { methodInfo = methodInfos.Where(w => (w.GetParameters().Count(c => c.ParameterType == typeof(SciterValue)) == methodParamsWrapper.args.Length) || w.GetParameters().Any(a => a.ParameterType == typeof(SciterValue[])) ).OrderByDescending(ob => ob.GetParameters().Count(c => c.ParameterType == typeof(SciterValue)) == methodParamsWrapper.args.Length).FirstOrDefault(); } if (methodInfo == null) { return(false); } scriptResult = OnScriptCall(sourceElement, methodInfo, methodParamsWrapper.args); if (scriptResult.IsSuccessful) { //pw.result = scriptResult.Value; var resultValue = (scriptResult.Value ?? SciterValue.Null).ToVALUE(); var resultValuePtr = IntPtr.Add(prms, resultOffset.ToInt32()); Marshal.StructureToPtr(resultValue, resultValuePtr, false); } } return(scriptResult.IsSuccessful); } case SciterBehaviors.EVENT_GROUPS.HANDLE_EXCHANGE: { var eventArgs = Marshal.PtrToStructure <SciterBehaviors.EXCHANGE_PARAMS>(prms).ToEventArgs(); return(OnExchange(element: sourceElement, args: eventArgs)); } case SciterBehaviors.EVENT_GROUPS.HANDLE_GESTURE: { var eventArgs = Marshal.PtrToStructure <SciterBehaviors.GESTURE_PARAMS>(prms).ToEventArgs(); return(OnGesture(element: sourceElement, args: eventArgs)); } #pragma warning disable 618 case SciterBehaviors.EVENT_GROUPS.HANDLE_TISCRIPT_METHOD_CALL: //Obsolete return(false); #pragma warning restore 618 default: Debug.Assert(false); return(false); } }