示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="freObjectSharp"></param>
        /// <param name="id"></param>
        /// <param name="ctx"></param>
        public FreNativeButton(FreObjectSharp freObjectSharp, string id, ref FREContext ctx)
        {
            _ctx     = ctx;
            _upState = BitmapUtils.BitmapToSource(
                new FreBitmapDataSharp(freObjectSharp.GetProperty("upStateData").RawValue).GetAsBitmap());
            _overState =
                BitmapUtils.BitmapToSource(new FreBitmapDataSharp(freObjectSharp.GetProperty("overStateData").RawValue)
                                           .GetAsBitmap());
            _downState =
                BitmapUtils.BitmapToSource(new FreBitmapDataSharp(freObjectSharp.GetProperty("downStateData").RawValue)
                                           .GetAsBitmap());
            _id = id;

            Width  = _upState.Width;
            Height = _upState.Height;
            HorizontalAlignment = HorizontalAlignment.Left;
            VerticalAlignment   = VerticalAlignment.Top;
            Source      = _upState;
            MouseEnter += Button_MouseEnter;
            MouseLeave += Button_MouseLeave;
            MouseDown  += Button_MouseDown;
            MouseUp    += Button_MouseUp;

            X          = Convert.ToDouble(freObjectSharp.GetProperty("x").Value);
            Y          = Convert.ToDouble(freObjectSharp.GetProperty("y").Value);
            Visibility = Convert.ToBoolean(freObjectSharp.GetProperty("visible").Value)
                ? Visibility.Visible
                : Visibility.Hidden;
            RenderTransform = new TranslateTransform(X, Y);
            Opacity         = Convert.ToDouble(freObjectSharp.GetProperty("alpha").Value);
        }
示例#2
0
        public FREObject SetPositionAndSize(FREContext ctx, uint argc, FREObject[] argv)
        {
            var tmpX      = new FreObjectSharp(argv[0]).GetAsInt();
            var tmpY      = new FreObjectSharp(argv[1]).GetAsInt();
            var tmpWidth  = new FreObjectSharp(argv[2]).GetAsInt();
            var tmpHeight = new FreObjectSharp(argv[3]).GetAsInt();

            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 IntPtr(0), _view.X, _view.Y, _view.ViewWidth, _view.ViewHeight, flgs);
            WinApi.UpdateWindow(_cefWindow);
            return(FREObject.Zero);
        }
示例#3
0
        public FreNativeSprite(FreObjectSharp freObjectSharp)
        {
            HorizontalAlignment = HorizontalAlignment.Left;
            VerticalAlignment   = VerticalAlignment.Top;

            X          = Convert.ToDouble(freObjectSharp.GetProperty("x").Value);
            Y          = Convert.ToDouble(freObjectSharp.GetProperty("y").Value);
            Visibility = Convert.ToBoolean(freObjectSharp.GetProperty("visible").Value)
                ? Visibility.Visible
                : Visibility.Hidden;
            RenderTransform = new TranslateTransform(X, Y);
            Opacity         = Convert.ToDouble(freObjectSharp.GetProperty("alpha").Value);
        }
示例#4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="argc"></param>
        /// <param name="argv"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentOutOfRangeException"></exception>
        public static FREObject AddChild(FREContext ctx, uint argc, FREObject[] argv)
        {
            var inFre0 = argv[0];

            if (inFre0 == FREObject.Zero)
            {
                return(FREObject.Zero);
            }

            var inFre1 = argv[1];

            if (inFre1 == FREObject.Zero)
            {
                return(FREObject.Zero);
            }

            var parentId = new FreObjectSharp(inFre0).Value as string;
            var child    = new FreObjectSharp(inFre1);
            var id       = Convert.ToString(child.GetProperty("id").Value);
            var type     = (FreStageSharp.FreNativeType)Convert.ToInt32(child.GetProperty("type").Value);

            switch (type)
            {
            case FreStageSharp.FreNativeType.Image:
                var nativeImage = new FreNativeImage(child);
                AddToParent(parentId, nativeImage);
                Children.Add(id, new Tuple <string, object>(parentId, nativeImage));
                break;

            case FreStageSharp.FreNativeType.Button:
                var nativeButton = new FreNativeButton(child, id, ref ctx);
                AddToParent(parentId, nativeButton);
                Children.Add(id, new Tuple <string, object>(parentId, nativeButton));
                break;

            case FreStageSharp.FreNativeType.Sprite:
                var nativeSprite = new FreNativeSprite(child);
                AddToParent(parentId, nativeSprite);
                Children.Add(id, new Tuple <string, object>(parentId, nativeSprite));
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }


            return(FREObject.Zero);
        }
示例#5
0
        public FREObject EvaluateJavaScript(FREContext ctx, uint argc, FREObject[] argv)
        {
            var js          = new FreObjectSharp(argv[0]).GetAsString();
            var callbackFre = new FreObjectSharp(argv[1]);

            if (FreObjectTypeSharp.Null == callbackFre.GetType())
            {
                EvaluateJavaScript(js);
            }
            else
            {
                var callback = callbackFre.GetAsString();
                EvaluateJavaScript(js, callback);
            }
            return(FREObject.Zero);
        }
示例#6
0
        public FREObject CallJavascriptFunction(FREContext ctx, uint argc, FREObject[] argv)
        {
            var js          = Convert.ToString(new FreObjectSharp(argv[0]).Value);
            var callbackFre = new FreObjectSharp(argv[1]);

            if (FreObjectTypeSharp.Null == callbackFre.GetType())
            {
                CallJavascriptFunction(js);
            }
            else
            {
                var callback = Convert.ToString(callbackFre.Value);
                CallJavascriptFunction(js, callback);
            }
            return(FREObject.Zero);
        }
示例#7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="freObjectSharp"></param>
        public FreNativeImage(FreObjectSharp freObjectSharp)
        {
            var bitmap = new FreBitmapDataSharp(freObjectSharp.GetProperty("bitmapData").RawValue).GetAsBitmap();

            Width  = bitmap.Width;
            Height = bitmap.Height;
            HorizontalAlignment = HorizontalAlignment.Left;
            VerticalAlignment   = VerticalAlignment.Top;
            Source = BitmapUtils.BitmapToSource(bitmap);

            X          = Convert.ToDouble(freObjectSharp.GetProperty("x").Value);
            Y          = Convert.ToDouble(freObjectSharp.GetProperty("y").Value);
            Visibility = Convert.ToBoolean(freObjectSharp.GetProperty("visible").Value)
                ? Visibility.Visible
                : Visibility.Hidden;
            RenderTransform = new TranslateTransform(X, Y);
            Opacity         = Convert.ToDouble(freObjectSharp.GetProperty("alpha").Value);
        }
示例#8
0
        public FREObject InjectScript(FREContext ctx, uint argc, FREObject[] argv)
        {
            var injectCodeFre      = new FreObjectSharp(argv[0]);
            var injectScriptUrlFre = new FreObjectSharp(argv[1]);
            var injectStartLineFre = new FreObjectSharp(argv[2]);

            if (FreObjectTypeSharp.String == injectCodeFre.GetType())
            {
                _view.InjectCode = Convert.ToString(injectCodeFre.Value);
            }
            if (FreObjectTypeSharp.String == injectScriptUrlFre.GetType())
            {
                _view.InjectScriptUrl = Convert.ToString(injectScriptUrlFre.Value);
            }
            _view.InjectStartLine = Convert.ToInt32(injectStartLineFre.Value);

            return(FREObject.Zero);
        }
示例#9
0
        public FREObject EvaluateJavaScript(FREContext ctx, uint argc, FREObject[] argv)
        {
            try {
                var js          = Convert.ToString(new FreObjectSharp(argv[0]).Value);
                var callbackFre = new FreObjectSharp(argv[1]);

                if (FreObjectTypeSharp.Null == callbackFre.GetType())
                {
                    EvaluateJavaScript(js);
                }
                else
                {
                    var callback = Convert.ToString(callbackFre.Value);
                    EvaluateJavaScript(js, callback);
                }
            }
            catch (Exception e) {
                return(new FreException(e).RawValue);
            }
            return(FREObject.Zero);
        }
示例#10
0
        private FREObject Capture(FREContext ctx, uint argc, FREObject[] argv)
        {
            var rect = new WinApi.Rect();

            WinApi.GetWindowRect(_cefWindow, ref rect);

            var freX = new FreObjectSharp(argv[0]).GetAsInt();
            var freY = new FreObjectSharp(argv[1]).GetAsInt();
            var freW = new FreObjectSharp(argv[2]).GetAsInt();
            var freH = new FreObjectSharp(argv[3]).GetAsInt();

            var width  = freW > 0 ? freW : rect.right - rect.left;
            var height = freH > 0 ? freW : rect.bottom - rect.top;

            var bmp      = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            var graphics = Graphics.FromImage(bmp);

            graphics.CopyFromScreen(rect.left + freX, rect.top + freY, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy);
            var ret = new FreBitmapDataSharp(bmp);

            return(ret.Get());
        }
示例#11
0
        public FREObject GetTabDetails(FREContext ctx, uint argc, FREObject[] argv)
        {
            var tabDetails = _view.TabDetails;

            try {
                var tmp           = new FreObjectSharp("Vector.<com.tuarua.webview.TabDetails>", null);
                var vecTabDetails = new FreArraySharp(tmp.RawValue);
                for (var index = 0; index < tabDetails.Count; index++)
                {
                    var tabDetail = tabDetails[index] as TabDetails;
                    if (tabDetail == null)
                    {
                        continue;
                    }
                    var currentTabFre = new FreObjectSharp("com.tuarua.webview.TabDetails", index, tabDetail.Address,
                                                           tabDetail.Title, tabDetail.IsLoading, tabDetail.CanGoBack, tabDetail.CanGoForward, 1.0);
                    vecTabDetails.SetObjectAt(currentTabFre, (uint)index);
                }
                return(vecTabDetails.RawValue);
            }
            catch (Exception e) {
                return(new FreException(e).RawValue);
            }
        }
示例#12
0
        private FREObject GetDisplayDevices(FREContext ctx, uint argc, FREObject[] argv)
        {
            var vecDisplayDevices = new FREArray("com.tuarua.DisplayDevice");

            var dd = new DisplayDevice();

            dd.cb = Marshal.SizeOf(dd);

            _displayDeviceMap.Clear();

            try {
                uint index = 0;
                while (WinApi.EnumDisplayDevices(null, index++, ref dd, 0))
                {
                    dynamic displayDevice  = new FreObjectSharp("com.tuarua.DisplayDevice");
                    dynamic displayMonitor = new FreObjectSharp("com.tuarua.Monitor");

                    displayDevice.isPrimary       = dd.StateFlags.HasFlag(DisplayDeviceStateFlags.PrimaryDevice);
                    displayDevice.isActive        = dd.StateFlags.HasFlag(DisplayDeviceStateFlags.AttachedToDesktop);
                    displayDevice.isRemovable     = dd.StateFlags.HasFlag(DisplayDeviceStateFlags.Removable);
                    displayDevice.isVgaCampatible = dd.StateFlags.HasFlag(DisplayDeviceStateFlags.VgaCompatible);

                    var monitor = new DisplayDevice();
                    monitor.cb = Marshal.SizeOf(monitor);

                    if (!WinApi.EnumDisplayDevices(dd.DeviceName, index - 1, ref monitor, 0))
                    {
                        continue;
                    }

                    var dm = new Devmode();
                    dm.dmSize = (short)Marshal.SizeOf(dm);
                    if (WinApi.EnumDisplaySettings(dd.DeviceName, WinApi.EnumCurrentSettings, ref dm) == 0)
                    {
                        continue;
                    }

                    var availdm = new Devmode();
                    availdm.dmSize = (short)Marshal.SizeOf(availdm);
                    IList <DisplaySettings> availableDisplaySettings = new List <DisplaySettings>();

                    var freAvailableDisplaySettings = displayDevice.availableDisplaySettings;
                    for (var iModeNum = 0;
                         WinApi.EnumDisplaySettings(dd.DeviceName, iModeNum, ref availdm) != 0;
                         iModeNum++)
                    {
                        var settings = new DisplaySettings {
                            Width       = availdm.dmPelsWidth,
                            Height      = availdm.dmPelsHeight,
                            BitDepth    = Convert.ToInt32(availdm.dmBitsPerPel),
                            RefreshRate = availdm.dmDisplayFrequency
                        };

                        if (HasDisplaySetting(availableDisplaySettings, settings))
                        {
                            continue;
                        }
                        availableDisplaySettings.Add(settings);

                        dynamic displaySettings = new FreObjectSharp("com.tuarua.DisplaySettings");
                        displaySettings.width       = availdm.dmPelsWidth;
                        displaySettings.height      = availdm.dmPelsHeight;
                        displaySettings.refreshRate = availdm.dmDisplayFrequency;
                        displaySettings.bitDepth    = Convert.ToInt32(availdm.dmBitsPerPel);
                        freAvailableDisplaySettings.Push(displaySettings);
                    }

                    displayMonitor.friendlyName = monitor.DeviceString;
                    displayMonitor.name         = monitor.DeviceName;
                    displayMonitor.id           = monitor.DeviceID;
                    displayMonitor.key          = monitor.DeviceKey;

                    displayDevice.friendlyName = dd.DeviceString;
                    displayDevice.name         = dd.DeviceName;
                    displayDevice.id           = dd.DeviceID;
                    displayDevice.key          = dd.DeviceKey;

                    dynamic currentDisplaySettings = new FreObjectSharp("com.tuarua.DisplaySettings");
                    currentDisplaySettings.width       = dm.dmPelsWidth;
                    currentDisplaySettings.height      = dm.dmPelsHeight;
                    currentDisplaySettings.refreshRate = dm.dmDisplayFrequency;
                    currentDisplaySettings.bitDepth    = Convert.ToInt32(dm.dmBitsPerPel);

                    displayDevice.currentDisplaySettings = currentDisplaySettings;
                    displayDevice.monitor = displayMonitor;
                    vecDisplayDevices.Push(displayDevice);

                    _displayDeviceMap.Add(dd.DeviceKey, dd);
                }
            }
            catch (Exception e) {
                Trace(e.Message);
                Trace(e.Source);
                Trace(e.StackTrace);
            }

            return(vecDisplayDevices.RawValue);
        }
示例#13
0
        public FREObject InitView(FREContext ctx, uint argc, FREObject[] argv)
        {
            _airWindow = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
            var inFre5         = new FreObjectSharp(argv[5]); //settings
            var cefSettingsFre = inFre5.GetProperty("cef");

            //Trace("initing view and here is a trace");

            var googleApiKeyFre              = cefSettingsFre.GetProperty("GOOGLE_API_KEY");
            var googleDefaultClientIdFre     = cefSettingsFre.GetProperty("GOOGLE_DEFAULT_CLIENT_ID");
            var googleDefaultClientSecretFre = cefSettingsFre.GetProperty("GOOGLE_DEFAULT_CLIENT_SECRET");


            if (FreObjectTypeSharp.String == googleApiKeyFre.GetType())
            {
                Environment.SetEnvironmentVariable("GOOGLE_API_KEY", Convert.ToString(googleApiKeyFre.Value));
            }
            if (FreObjectTypeSharp.String == googleDefaultClientIdFre.GetType())
            {
                Environment.SetEnvironmentVariable("GOOGLE_DEFAULT_CLIENT_ID", Convert.ToString(googleDefaultClientIdFre.Value));
            }
            if (FreObjectTypeSharp.String == googleDefaultClientSecretFre.GetType())
            {
                Environment.SetEnvironmentVariable("GOOGLE_DEFAULT_CLIENT_SECRET", Convert.ToString(googleDefaultClientSecretFre.Value));
            }

            var clArr    = new FreArraySharp(cefSettingsFre.GetProperty("commandLineArgs").RawValue);
            var argsDict = new Dictionary <string, string>();

            uint i;

            for (i = 0; i < clArr.Length; ++i)
            {
                var argFre = clArr.GetObjectAt(i);
                var key    = Convert.ToString(argFre.GetProperty("key").Value);
                var val    = Convert.ToString(argFre.GetProperty("value").Value);
                if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(val))
                {
                    continue;
                }
                argsDict.Add(key, val);
            }

            var whiteList = new FreArraySharp(inFre5.GetProperty("urlWhiteList").RawValue).GetAsArrayList();

            _view = new CefView {
                InitialUrl            = Convert.ToString(new FreObjectSharp(argv[0]).Value),
                Background            = _backgroundColorBrush,
                X                     = Convert.ToInt32(new FreObjectSharp(argv[1]).Value),
                Y                     = Convert.ToInt32(new FreObjectSharp(argv[2]).Value),
                ViewWidth             = Convert.ToInt32(new FreObjectSharp(argv[3]).Value),
                ViewHeight            = Convert.ToInt32(new FreObjectSharp(argv[4]).Value),
                RemoteDebuggingPort   = Convert.ToInt32(cefSettingsFre.GetProperty("remoteDebuggingPort").Value),
                CachePath             = Convert.ToString(cefSettingsFre.GetProperty("cachePath").Value),
                LogLevel              = Convert.ToInt32(cefSettingsFre.GetProperty("logSeverity").Value),
                BrowserSubprocessPath = Convert.ToString(cefSettingsFre.GetProperty("browserSubprocessPath").Value),
                EnableDownloads       = Convert.ToBoolean(cefSettingsFre.GetProperty("enableDownloads").Value),
                UserAgent             = Convert.ToString(inFre5.GetProperty("userAgent").Value),
                CommandLineArgs       = argsDict,
                WhiteList             = whiteList,
                PopupBehaviour        = (PopupBehaviour)inFre5.GetProperty("popup").GetProperty("behaviour").Value,
                PopupDimensions       = new Tuple <int, int>(
                    Convert.ToInt32(inFre5.GetProperty("popup").GetProperty("dimensions").GetProperty("width").Value),
                    Convert.ToInt32(inFre5.GetProperty("popup").GetProperty("dimensions").GetProperty("height").Value)
                    )
            };



            _view.Init();

            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);
        }
示例#14
0
 /// <summary>
 /// Creates a C# FREObject from a C FREObject
 /// </summary>
 /// <param name="freObject"></param>
 public FreRectangleSharp(FreObjectSharp freObject)
 {
     RawValue = freObject.RawValue;
 }
示例#15
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         = new FreObjectSharp(argv[2]);    //settings
                var inFre4         = new FreObjectSharp(argv[4]);    //backgroundColor
                var cefSettingsFre = inFre2.GetProperty("cef");

                var googleApiKeyFre              = cefSettingsFre.GetProperty("GOOGLE_API_KEY");
                var googleDefaultClientIdFre     = cefSettingsFre.GetProperty("GOOGLE_DEFAULT_CLIENT_ID");
                var googleDefaultClientSecretFre = cefSettingsFre.GetProperty("GOOGLE_DEFAULT_CLIENT_SECRET");

                if (FreObjectTypeSharp.String == googleApiKeyFre.GetType())
                {
                    Environment.SetEnvironmentVariable("GOOGLE_API_KEY", Convert.ToString(googleApiKeyFre.Value));
                }
                if (FreObjectTypeSharp.String == googleDefaultClientIdFre.GetType())
                {
                    Environment.SetEnvironmentVariable("GOOGLE_DEFAULT_CLIENT_ID",
                                                       Convert.ToString(googleDefaultClientIdFre.Value));
                }
                if (FreObjectTypeSharp.String == googleDefaultClientSecretFre.GetType())
                {
                    Environment.SetEnvironmentVariable("GOOGLE_DEFAULT_CLIENT_SECRET",
                                                       Convert.ToString(googleDefaultClientSecretFre.Value));
                }

                var clArr    = new FreArraySharp(cefSettingsFre.GetProperty("commandLineArgs").RawValue);
                var argsDict = new Dictionary <string, string>();

                uint i;
                for (i = 0; i < clArr.Length; ++i)
                {
                    var argFre = clArr.GetObjectAt(i);
                    var key    = Convert.ToString(argFre.GetProperty("key").Value);
                    var val    = Convert.ToString(argFre.GetProperty("value").Value);
                    if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(val))
                    {
                        continue;
                    }
                    argsDict.Add(key, val);
                }

                var whiteList = new FreArraySharp(inFre2.GetProperty("urlWhiteList").RawValue).GetAsArrayList();
                var blackList = new FreArraySharp(inFre2.GetProperty("urlBlackList").RawValue).GetAsArrayList();

                var rgb = FreSharpHelper.GetAsUInt(inFre4.RawValue);
                _backgroundColor = Color.FromRgb(
                    Convert.ToByte((rgb >> 16) & 0xff),
                    Convert.ToByte((rgb >> 8) & 0xff),
                    Convert.ToByte((rgb >> 0) & 0xff));

                var viewPort = inFre1.Value;
                _view = new CefView {
                    InitialUrl            = Convert.ToString(new FreObjectSharp(argv[0]).Value),
                    Background            = new SolidColorBrush(_backgroundColor),
                    X                     = Convert.ToInt32(viewPort.X),
                    Y                     = Convert.ToInt32(viewPort.Y),
                    ViewWidth             = Convert.ToInt32(viewPort.Width),
                    ViewHeight            = Convert.ToInt32(viewPort.Height),
                    RemoteDebuggingPort   = Convert.ToInt32(cefSettingsFre.GetProperty("remoteDebuggingPort").Value),
                    CachePath             = Convert.ToString(cefSettingsFre.GetProperty("cachePath").Value),
                    CacheEnabled          = Convert.ToBoolean(inFre2.GetProperty("cacheEnabled").Value),
                    LogLevel              = Convert.ToInt32(cefSettingsFre.GetProperty("logSeverity").Value),
                    BrowserSubprocessPath = Convert.ToString(cefSettingsFre.GetProperty("browserSubprocessPath").Value),
                    ContextMenuEnabled    = Convert.ToBoolean(cefSettingsFre.GetProperty("contextMenu")
                                                              .GetProperty("enabled")
                                                              .Value),
                    EnableDownloads = Convert.ToBoolean(cefSettingsFre.GetProperty("enableDownloads").Value),
                    UserAgent       = Convert.ToString(inFre2.GetProperty("userAgent").Value),
                    CommandLineArgs = argsDict,
                    WhiteList       = whiteList,
                    BlackList       = blackList,
                    PopupBehaviour  = (PopupBehaviour)inFre2.GetProperty("popup").GetProperty("behaviour").Value,
                    PopupDimensions = new Tuple <int, int>(
                        Convert.ToInt32(
                            inFre2.GetProperty("popup").GetProperty("dimensions").GetProperty("width").Value),
                        Convert.ToInt32(inFre2.GetProperty("popup").GetProperty("dimensions").GetProperty("height")
                                        .Value)
                        )
                };

                _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);
        }
示例#16
0
        /// <summary>
        /// Converts a FREObject to a C# Point
        /// </summary>
        /// <param name="freObject"></param>
        /// <returns>Point</returns>
        public static Point AsPoint(this FREObject freObject)
        {
            dynamic fre = new FreObjectSharp(freObject);

            return(new Point(fre.x, fre.y));
        }
示例#17
0
        /// <summary>
        /// Converts a FREObject to a C# Rect.
        /// </summary>
        /// <param name="freObject"></param>
        /// <returns></returns>
        public static Rect AsRect(this FREObject freObject)
        {
            dynamic fre = new FreObjectSharp(freObject);

            return(new Rect(fre.x, fre.y, fre.width, fre.height));
        }
示例#18
0
        private FREObject InitView(FREContext ctx, uint argc, FREObject[] argv)
        {
            FreSharpLogger.GetInstance().Context = Context;
            _airWindow = Process.GetCurrentProcess().MainWindowHandle;
            if (_airWindow == Hwnd.Zero)
            {
                return(new FreException(
                           "Cannot find AIR window to attach webView to. Ensure you init the ANE AFTER your main Sprite is initialized. " +
                           "Please see https://forum.starling-framework.org/topic/webviewane-for-osx/page/7?replies=201#post-105524 for more details")
                       .RawValue);
            }

            bool useTransparentBackground;

            try {
                dynamic settings = new FreObjectSharp(argv[2]);
                _useEdge = settings.engine == 1;

                UrlRequestHeaderManager.GetInstance().PersistRequestHeaders = settings.persistRequestHeaders;
                dynamic    cefSettings = new FreObjectSharp(settings.cef);
                var        freUrl      = argv[0];
                UrlRequest initialUrl  = null;
                if (FreObjectTypeSharp.Null != freUrl.Type())
                {
                    initialUrl = new UrlRequest(freUrl, _useEdge);
                    UrlRequestHeaderManager.GetInstance().Add(initialUrl);
                }

                var viewPort = argv[1].AsRect();

                useTransparentBackground = settings.useTransparentBackground;
                FREArray clArr = cefSettings.commandLineArgs;

                var argsDict = new Dictionary <string, string>();
                foreach (var argFre in clArr)
                {
                    var key = argFre.GetProp("key").AsString();
                    var val = argFre.GetProp("value").AsString();
                    if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(val))
                    {
                        continue;
                    }
                    argsDict.Add(key, val);
                }

                ArrayList whiteList = settings.urlWhiteList.AsArrayList();
                ArrayList blackList = settings.urlBlackList.AsArrayList();

                _backgroundColor = argv[4].AsColor();
                var backgroundMediaColor = new System.Windows.Media.Color {
                    A = _backgroundColor.A,
                    R = _backgroundColor.R,
                    G = _backgroundColor.G,
                    B = _backgroundColor.B
                };

                _useHiDpi = settings.useHiDPI;

                if (Environment.OSVersion.Version.Major > 7)
                {
                    _scaleFactor = _useHiDpi ? WinApi.GetScaleFactor(_airWindow) : 1.0;
                }
                else
                {
                    _scaleFactor = _useHiDpi ? WinApi.GetScaleFactor() : 1.0;
                }

                if (_useEdge)
                {
                    EdgeView.Context = Context;
                    _view            = new EdgeView {
                        Background = new SolidColorBrush(backgroundMediaColor)
                    };
                }
                else
                {
                    CefView.Context = Context;
                    dynamic contextMenu = new FreObjectSharp(settings.contextMenu);
                    dynamic popup       = new FreObjectSharp(settings.popup);
                    dynamic dimensions  = new FreObjectSharp(popup.dimensions);

                    _view = new CefView {
                        Background          = new SolidColorBrush(backgroundMediaColor),
                        RemoteDebuggingPort = cefSettings.remoteDebuggingPort,
                        EnablePrintPreview  = cefSettings.enablePrintPreview,
                        CachePath           = cefSettings.cachePath,
                        DownloadPath        = settings.downloadPath,
                        EnableDownloads     = settings.enableDownloads,
                        CacheEnabled        = settings.cacheEnabled,
                        LogLevel            = cefSettings.logSeverity,
                        AcceptLanguageList  = cefSettings.acceptLanguageList,
                        Locale             = cefSettings.locale,
                        ContextMenuEnabled = contextMenu.enabled,
                        UserAgent          = settings.userAgent,
                        UserDataPath       = cefSettings.userDataPath,
                        CommandLineArgs    = argsDict,
                        PopupBehaviour     = (PopupBehaviour)popup.behaviour,
                        PopupDimensions    = new Tuple <int, int>(dimensions.width, dimensions.height),
                        ScaleFactor        = _scaleFactor
                    };
                }

                _view.InitialUrl = initialUrl;
                _view.WhiteList  = whiteList;
                _view.BlackList  = blackList;
                _view.X          = Convert.ToInt32(viewPort.X * _scaleFactor);
                _view.Y          = Convert.ToInt32(viewPort.Y * _scaleFactor);
                _view.ViewWidth  = Convert.ToInt32(viewPort.Width * _scaleFactor);
                _view.ViewHeight = Convert.ToInt32(viewPort.Height * _scaleFactor);
                _view.Init();
            }
            catch (Exception e) {
                return(new FreException(e).RawValue);
            }

            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;

            if (useTransparentBackground && Environment.OSVersion.Version.Major > 7)
            {
                parameters.ExtendedWindowStyle      = (int)WindowExStyles.WS_EX_LAYERED;
                parameters.UsesPerPixelTransparency = true;
            }

            var source = _useEdge
                ? new HwndSource(parameters)
            {
                RootVisual = (EdgeView)_view
            }
                : new HwndSource(parameters)
            {
                RootVisual = (CefView)_view
            };

            if (useTransparentBackground && source.CompositionTarget != null)
            {
                source.CompositionTarget.BackgroundColor = Colors.Transparent;
            }

            _webViewWindow = source.Handle;

            MessageTouchDevice.RegisterTouchWindow(_webViewWindow);

            return(FREObject.Zero);
        }
示例#19
0
        private FREObject RunObjectTests(FREContext ctx, uint argc, FREObject[] argv)
        {
            Trace("***********Start Object test***********");
            var person = argv[0];

            if (person == FREObject.Zero)
            {
                return(FREObject.Zero);
            }

            var newPerson = new FREObject().Init("com.tuarua.Person");

            Trace("New Person.ToString()", newPerson.toString());

            Trace("New Person has property name:",
                  newPerson.hasOwnProperty("name"), newPerson.hasOwnProperty("name") ? "✅" : "❌");
            Trace("New Person is of type CLASS:",
                  newPerson.Type(), newPerson.Type().Equals(FreObjectTypeSharp.Class) ? "✅" : "❌");

            Trace("New Person className is com.tuarua::Person",
                  newPerson.ClassName() == "com.tuarua::Person" ? "✅" : "❌");

            dynamic sharpPerson = new FreObjectSharp("com.tuarua.Person", "Ben McBobster", 80);

            Trace("sharpPerson.RawValue.toString()",
                  ((FREObject)sharpPerson.RawValue()).toString()); //case sensitive, calls as3 toString NOT c# ToString()

            var oldAge = person.GetProp("age").AsInt();

            Trace("Get property as Int :", oldAge, oldAge.Equals(21) ? "✅" : "❌");
            var newAge = oldAge + 10;

            person.SetProp("age", newAge);
            Trace("Set property to Int :", person.GetProp("age").AsInt(),
                  person.GetProp("age").AsInt().Equals(31) ? "✅" : "❌");

            var addition = person.Call("add", 100, 33);

            Trace("Call add :", 131, addition.AsInt().Equals(133) ? "✅" : "❌");

            try {
                var dictionary = person.AsDictionary();
                if (dictionary == null)
                {
                    return(person);
                }
                var city = (Dictionary <string, object>)dictionary["city"];
                if (city == null)
                {
                    return(person);
                }
                var name = city["name"];
                Trace("Get property from Dict :", name, name.Equals("Portland") ? "✅" : "❌");

                var sharpPersonType = sharpPerson.Type();
                Trace("Dynamic Person is of type CLASS:",
                      sharpPersonType, sharpPersonType.Equals(FreObjectTypeSharp.Class) ? "✅" : "❌");
                Trace("Dynamic Person has property name:",
                      sharpPerson.hasOwnProperty("name"), sharpPerson.hasOwnProperty("name") ? "✅" : "❌");

                dynamic            sharpCity     = new FreObjectSharp("com.tuarua.City");
                FreObjectTypeSharp sharpCityType = sharpCity.Type();

                Trace("Dynamic City is of type CLASS:",
                      sharpCityType, sharpCityType.Equals(FreObjectTypeSharp.Class) ? "✅" : "❌");

                sharpCity.name = "San Francisco";

                int    sharpAge      = sharpPerson.age;
                string sharpName     = sharpPerson.name;
                string sharpOptional = sharpPerson.opt;
                double sharpHeight   = sharpPerson.height;
                bool   sharpIsMan    = sharpPerson.isMan;

                Trace("Dynamic age as int:", sharpAge, sharpAge.Equals(80) ? "✅" : "❌");
                Trace("Dynamic name as string:", sharpName, sharpName.Equals("Ben McBobster") ? "✅" : "❌");
                Trace("Dynamic Optional string:", sharpOptional == null,
                      (sharpOptional == null).Equals(true) ? "✅" : "❌");
                Trace("Dynamic height as double:", sharpHeight, sharpHeight.Equals(1.8) ? "✅" : "❌");
                Trace("Dynamic isMan as bool:", sharpIsMan, sharpIsMan.Equals(false) ? "✅" : "❌");

                sharpPerson.age    = 999;
                sharpPerson.height = 1.88;
                sharpPerson.isMan  = true;
                sharpPerson.city   = sharpCity;

                Trace("Dynamic age as int:", (int)sharpPerson.age,
                      ((int)sharpPerson.age).Equals(999) ? "✅" : "❌");
                Trace("Dynamic height as double:", (double)sharpPerson.height,
                      ((double)sharpPerson.height).Equals(1.88) ? "✅" : "❌");
                Trace("Dynamic isMan as bool:", (bool)sharpPerson.isMan,
                      ((bool)sharpPerson.isMan).Equals(true) ? "✅" : "❌");

                sharpPerson.age    = 111.ToFREObject();
                sharpPerson.height = 2;

                Trace("Dynamic age as int:", (int)sharpPerson.age,
                      ((int)sharpPerson.age).Equals(111) ? "✅" : "❌");
                Trace("Dynamic height as double:", (double)sharpPerson.height,
                      ((double)sharpPerson.height).Equals(2) ? "✅" : "❌");
            }
            catch (Exception e) {
                Trace(e.GetType());
                Trace(e.Message);
                Trace(e.Source);
                Trace(e.StackTrace);
            }

            return(sharpPerson.RawValue());
        }