Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        /// <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);
        }