public FREObject InitView(FREContext ctx, uint argc, FREObject[] argv) { _airWindow = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle; if (_airWindow == Hwnd.Zero) { var e = new Exception( "Cannot find AIR window to attach webView to. Ensure you init the ANE AFTER your main Sprite is initialised. " + "Please see https://forum.starling-framework.org/topic/webviewane-for-osx/page/7?replies=201#post-105524 for more details"); return(new FreException(e).RawValue); } try { var inFre1 = new FreRectangleSharp(argv[1]); //viewport var inFre2 = argv[2]; //settings var inFre4 = argv[4]; //backgroundColor var cefSettingsFre = inFre2.GetProp("cef"); var inFre6 = argv[6]; var googleApiKeyFre = cefSettingsFre.GetProp("GOOGLE_API_KEY"); var googleDefaultClientIdFre = cefSettingsFre.GetProp("GOOGLE_DEFAULT_CLIENT_ID"); var googleDefaultClientSecretFre = cefSettingsFre.GetProp("GOOGLE_DEFAULT_CLIENT_SECRET"); if (FreObjectTypeSharp.String == googleApiKeyFre.Type()) { Environment.SetEnvironmentVariable("GOOGLE_API_KEY", googleApiKeyFre.AsString()); } if (FreObjectTypeSharp.String == googleDefaultClientIdFre.Type()) { Environment.SetEnvironmentVariable("GOOGLE_DEFAULT_CLIENT_ID", googleDefaultClientIdFre.AsString()); } if (FreObjectTypeSharp.String == googleDefaultClientSecretFre.Type()) { Environment.SetEnvironmentVariable("GOOGLE_DEFAULT_CLIENT_SECRET", googleDefaultClientSecretFre.AsString()); } var clArr = new FREArray(cefSettingsFre.GetProp("commandLineArgs")); var argsDict = new Dictionary <string, string>(); uint i; for (i = 0; i < clArr.Length; ++i) { var argFre = clArr.At(i); var key = argFre.GetProp("key").AsString(); var val = argFre.GetProp("value").AsString(); if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(val)) { continue; } argsDict.Add(key, val); } var whiteList = inFre2.GetProp("urlWhiteList").ToArrayList(); var blackList = inFre2.GetProp("urlBlackList").ToArrayList(); var rgb = inFre4.AsUInt(); _backgroundColor = Color.FromRgb( Convert.ToByte((rgb >> 16) & 0xff), Convert.ToByte((rgb >> 8) & 0xff), Convert.ToByte((rgb >> 0) & 0xff)); var useHiDpi = inFre6.AsBool(); _scaleFactor = useHiDpi ? GetScaleFactor() : 1.0; var viewPort = inFre1.Value; _view = new CefView { InitialUrl = argv[0].AsString(), Background = new SolidColorBrush(_backgroundColor), X = Convert.ToInt32(viewPort.X * _scaleFactor), Y = Convert.ToInt32(viewPort.Y * _scaleFactor), ViewWidth = Convert.ToInt32(viewPort.Width * _scaleFactor), ViewHeight = Convert.ToInt32(viewPort.Height * _scaleFactor), RemoteDebuggingPort = cefSettingsFre.GetProp("remoteDebuggingPort").AsInt(), CachePath = cefSettingsFre.GetProp("cachePath").AsString(), CacheEnabled = inFre2.GetProp("cacheEnabled").AsBool(), LogLevel = cefSettingsFre.GetProp("logSeverity").AsInt(), BrowserSubprocessPath = cefSettingsFre.GetProp("browserSubprocessPath").AsString(), ContextMenuEnabled = cefSettingsFre.GetProp("contextMenu").GetProp("enabled").AsBool(), EnableDownloads = cefSettingsFre.GetProp("enableDownloads").AsBool(), UserAgent = inFre2.GetProp("userAgent").AsString(), CommandLineArgs = argsDict, WhiteList = whiteList, BlackList = blackList, PopupBehaviour = (PopupBehaviour)inFre2.GetProp("popup").GetProp("behaviour").AsInt(), PopupDimensions = new Tuple <int, int>( inFre2.GetProp("popup").GetProp("dimensions").GetProp("width").AsInt(), inFre2.GetProp("popup").GetProp("dimensions").GetProp("height").AsInt() ) }; _view.Init(); } catch (Exception e) { return(new FreException(e).RawValue); //return as3 error and throw in swc } var parameters = new HwndSourceParameters(); parameters.SetPosition(_view.X, _view.Y); parameters.SetSize(_view.ViewWidth, _view.ViewHeight); parameters.ParentWindow = _airWindow; parameters.WindowName = "Cef Window"; parameters.WindowStyle = (int)WindowStyles.WS_CHILD; parameters.AcquireHwndFocusInMenuMode = true; var source = new HwndSource(parameters) { RootVisual = _view }; _cefWindow = source.Handle; WinApi.RegisterTouchWindow(_cefWindow, TouchWindowFlags.TWF_WANTPALM); return(FREObject.Zero); }
public FREObject SetViewPort(FREContext ctx, uint argc, FREObject[] argv) { System.Windows.Rect viewPort; try { viewPort = new FreRectangleSharp(argv[0]).Value; } catch (Exception e) { return(new FreException(e).RawValue); } var tmpX = Convert.ToInt32(viewPort.X * _scaleFactor); var tmpY = Convert.ToInt32(viewPort.Y * _scaleFactor); var tmpWidth = Convert.ToInt32(viewPort.Width * _scaleFactor); var tmpHeight = Convert.ToInt32(viewPort.Height * _scaleFactor); var updateWidth = false; var updateHeight = false; var updateX = false; var updateY = false; if (tmpWidth != _view.ViewWidth) { _view.ViewWidth = tmpWidth; updateWidth = true; } if (tmpHeight != _view.ViewHeight) { _view.ViewHeight = tmpHeight; updateHeight = true; } if (tmpX != _view.X) { _view.X = tmpX; updateX = true; } if (tmpY != _view.Y) { _view.Y = tmpY; updateY = true; } if (!updateX && !updateY && !updateWidth && !updateHeight) { return(FREObject.Zero); } var flgs = (WindowPositionFlags)0; if (!updateWidth && !updateHeight) { flgs |= WindowPositionFlags.SWP_NOSIZE; } if (!updateX && !updateY) { flgs |= WindowPositionFlags.SWP_NOMOVE; } WinApi.SetWindowPos(_cefWindow, new Hwnd(0), _view.X, _view.Y, _view.ViewWidth, _view.ViewHeight, flgs); WinApi.UpdateWindow(_cefWindow); return(FREObject.Zero); }
/// <summary> /// /// </summary> /// <returns></returns> public ArrayList GetAsArrayList() { var al = new ArrayList(); var len = Length; if (len <= 0) { return(al); } for (uint i = 0; i < len; i++) { var itm = At(i); var type = itm.Type(); switch (type) { case FreObjectTypeSharp.String: al.Add(FreSharpHelper.GetAsString(itm)); break; case FreObjectTypeSharp.Bytearray: var ba = new FreByteArraySharp(itm); ba.Acquire(); var baTarget = new byte[ba.Length]; ba.Bytes.CopyTo(baTarget, 0); al.Add(baTarget); ba.Release(); break; case FreObjectTypeSharp.Array: case FreObjectTypeSharp.Vector: var arrFre = new FREArray(itm); al.Add(arrFre.GetAsArrayList()); break; case FreObjectTypeSharp.Bitmapdata: var bmdFre = new FreBitmapDataSharp(itm); al.Add(bmdFre.GetAsBitmap()); break; case FreObjectTypeSharp.Boolean: al.Add(FreSharpHelper.GetAsBool(itm)); break; case FreObjectTypeSharp.Null: break; case FreObjectTypeSharp.Int: al.Add(FreSharpHelper.GetAsInt(itm)); break; case FreObjectTypeSharp.Object: case FreObjectTypeSharp.Class: al.Add(FreSharpHelper.GetAsDictionary(itm)); break; case FreObjectTypeSharp.Number: al.Add(FreSharpHelper.GetAsDouble(itm)); break; case FreObjectTypeSharp.Rectangle: var rectFre = new FreRectangleSharp(itm); al.Add(rectFre.Value); break; default: throw new ArgumentOutOfRangeException(); } } return(al); }