public FREObject GetTabDetails(FREContext ctx, uint argc, FREObject[] argv) { var tabDetails = _view.TabDetails; try { var tmp = new FREObject().Init("Vector.<com.tuarua.webview.TabDetails>", null); var vecTabDetails = new FREArray(tmp); for (var index = 0; index < tabDetails.Count; index++) { var tabDetail = tabDetails[index] as TabDetails; if (tabDetail == null) { continue; } var currentTabFre = new FREObject().Init("com.tuarua.webview.TabDetails", index, string.IsNullOrEmpty(tabDetail.Address) ? "" : tabDetail.Address, string.IsNullOrEmpty(tabDetail.Title) ? "" : tabDetail.Title, tabDetail.IsLoading, tabDetail.CanGoBack, tabDetail.CanGoForward, 1.0); vecTabDetails.Set((uint)index, new FreObjectSharp(currentTabFre)); //TODO update FreSharp to allow FREObjects to be passed } return(vecTabDetails.RawValue); } catch (Exception e) { return(new FreException(e).RawValue); } }
private FREObject GetTabDetails(FREContext ctx, uint argc, FREObject[] argv) { var tabDetails = _view.TabDetails; try { var vecTabDetails = new FREArray("com.tuarua.webview.TabDetails", tabDetails.Count, true); for (var index = 0; index < tabDetails.Count; index++) { if (!(tabDetails[index] is TabDetails tabDetail)) { continue; } var currentTabFre = new FREObject().Init("com.tuarua.webview.TabDetails", index, string.IsNullOrEmpty(tabDetail.Address) ? "" : tabDetail.Address, string.IsNullOrEmpty(tabDetail.Title) ? "" : tabDetail.Title, tabDetail.IsLoading, tabDetail.CanGoBack, tabDetail.CanGoForward, 1.0); vecTabDetails.Set((uint)index, currentTabFre); } return(vecTabDetails.RawValue); } catch (Exception e) { return(new FreException(e).RawValue); } }
private FREObject RunArrayTests(FREContext ctx, uint argc, FREObject[] argv) { Trace("***********Start Array test***********"); if (argc < 4) { return(new FreException("Not enough args").RawValue); } var airArray = new FREArray(argv[0]); var inFre1 = new FREArray(argv[1]); var inFre2 = new FREArray(argv[2]); var inFre3 = new FREArray(argv[3]); var airArrayList = airArray.AsArrayList(); Trace("Convert FREArray to ArrayList :", airArrayList.Count, airArray.Length.Equals(6) ? "✅" : "❌"); airArray.Push(77.ToFREObject(), 88); Trace("Get FREArray length after 2 appends:", airArray.Length, airArray.Length.Equals(8) ? "✅" : "❌"); airArray[0] = 123.ToFREObject(); foreach (var fre in airArray) { Trace("iterate over FREArray", fre.AsInt()); } var airVectorString = inFre1.AsStringArray(); var airVectorNumber = inFre2.AsDoubleArray(); var airVectorBoolean = inFre3.AsBoolArray(); Trace("Vector.<String> passed from AIR :", string.Join(",", airVectorString.ToArray()), string.Join(",", airVectorString.ToArray()).Equals("a,b,c,d") ? "✅" : "❌"); Trace("Vector.<Number> passed from AIR :", string.Join(",", airVectorNumber.ToArray()), string.Join(",", airVectorNumber.ToArray()).Equals("1,0.5,2,3.3") ? "✅" : "❌"); Trace("Vector.<Boolean> passed from AIR :", string.Join(",", airVectorBoolean.ToArray()), string.Join(",", airVectorBoolean.ToArray()).Equals("True,True,False,True") ? "✅" : "❌"); var newFreArray = new FREArray("Object", 5, true); Trace("New FREArray of fixed length :", newFreArray.Length, newFreArray.Length.Equals(5) ? "✅" : "❌"); airArray.Set(0, 56); var itemZero = airArray[0].AsInt(); Trace("Set item 0 of FREArray:", itemZero, itemZero.Equals(56) ? "✅" : "❌"); var marks = new[] { 99, 98, 92, 97, 95 }; return(marks.ToFREObject()); }
private FREObject RunArrayTests(FREContext ctx, uint argc, FREObject[] argv) { Trace("***********Start Array test***********"); if (argc < 4) { return(new FreException("Not enough args").RawValue); } var inFre0 = new FREArray(argv[0]); var inFre1 = new FREArray(argv[1]); var inFre2 = new FREArray(argv[2]); var inFre3 = new FREArray(argv[3]); var airArray = inFre0.ToArrayList(); var airArrayLen = inFre0.Length; inFre0[1] = 123.ToFREObject(); foreach (var fre in inFre0) { Trace("iterate over FREArray", fre.AsInt()); } var airVectorString = inFre1.AsStringArray(); var airVectorNumber = inFre2.AsDoubleArray(); var airVectorBoolean = inFre3.AsBoolArray(); Trace("Array passed from AIR:", string.Join(",", airArray.ToArray())); Trace("AIR Array length:", airArrayLen); Trace("Vector.<String> passed from AIR:", string.Join(",", airVectorString.ToArray())); Trace("Vector.<Number> passed from AIR:", string.Join(",", airVectorNumber.ToArray())); Trace("Vector.<Boolean> passed from AIR:", string.Join(",", airVectorBoolean.ToArray())); var newFreArray = new FREArray("Object", 5, true); Trace("New Array of Objects should be 5?", newFreArray.Length); var itemZero = inFre0[0]; var itemZeroVal = itemZero.AsInt(); Trace("AIR Array item 0 before change:", itemZeroVal); inFre0.Set(0, 56); var marks = new[] { 99, 98, 92, 97, 95 }; return(marks.ToFREObject()); }
private FREObject RunArrayTests(FREContext ctx, uint argc, FREObject[] argv) { Trace("***********Start Array test***********"); var inFre = new FREArray(argv[0]); var airArray = argv[0].ToArrayList(); var airArrayLen = inFre.Length; Trace("Array passed from AIR:", airArray); Trace("AIR Array length:", airArrayLen); var itemZero = inFre.At(0); var itemZeroVal = itemZero.AsInt(); Trace("AIR Array item 0 before change:", itemZeroVal); inFre.Set(0, 56); return(inFre.RawValue); }
public UrlRequest(FREObject freObject, bool usingEdge) { RequestHeaders = new List <KeyValuePair <string, string> >(); if (freObject.Type() == FreObjectTypeSharp.Null) { return; } Url = freObject.GetProp("url").AsString(); var requestHeadersFre = new FREArray(freObject.GetProp("requestHeaders")); foreach (var requestHeader in requestHeadersFre) { var rh = new UrlRequestHeader(requestHeader); if (usingEdge && !_acceptedHeaders.Contains(rh.Name.ToLower())) { continue; } RequestHeaders.Add(new KeyValuePair <string, string>(rh.Name, rh.Value)); } }
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); }
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 viewPort = argv[1].AsRect(); //viewPort var inFre2 = argv[2]; //settings var inFre4 = argv[4]; //backgroundColor var cefSettingsFre = inFre2.GetProp("cef"); var useHiDpi = argv[5].AsBool(); 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(); _backgroundColor = inFre4.AsColor(true); _scaleFactor = useHiDpi ? WinApi.GetScaleFactor() : 1.0; CefView.Context = Context; _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); }
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); }
public FREObject ResizeImage(FREContext ctx, uint argc, FREObject[] argv) { // Read from file try { var newW = Convert.ToInt32(new FreObjectSharp(argv[1]).Value); var newH = Convert.ToInt32(new FreObjectSharp(argv[2]).Value); var array = new FREArray(new FreObjectSharp(argv[0]).RawValue); var list = array.ToArrayList(); using (MagickImageCollection collection = new MagickImageCollection()) { string outputDir = ""; int i = 0; foreach (String inputPath in list) { FileInfo input = new FileInfo(inputPath); outputDir = input.Directory.CreateSubdirectory("small").FullName; FileInfo output = new FileInfo(outputDir + @"\" + input.Name); try { using (MagickImage image = new MagickImage(input)) { MagickGeometry size = new MagickGeometry(newW, newH); //image.Resize(size); genera un ciclo infinito en v84 image.AdaptiveResize(size); // Save the result image.Write(output.FullName); collection.Add(output.FullName); collection[i].AnimationDelay = 200; } } // Catch any MagickException catch (MagickException exception) { // Write excepion raised when reading the invalid jpg to the console Trace("ERROR: " + exception); return(new FreException(exception).RawValue); } i++; } // Optionally reduce colors QuantizeSettings settings = new QuantizeSettings(); settings.Colors = 256; collection.Quantize(settings); // Optionally optimize the images (images should have the same size). collection.Optimize(); // Save gif collection.Write(outputDir + @"\output.gif"); return(new FreObjectSharp(outputDir + @"\output.gif").RawValue); } } catch (Exception e) { Trace("Exception " + e); } return(FREObject.Zero); }
public FREObject GetDisplayDevices(FREContext ctx, uint argc, FREObject[] argv) { var tmp = new FREObject().Init("Vector.<com.tuarua.DisplayDevice>", null); var vecDisplayDevices = new FREArray(tmp); var dd = new DisplayDevice(); dd.cb = Marshal.SizeOf(dd); _displayDeviceMap.Clear(); try { uint index = 0; uint cnt = 0; while (WinApi.EnumDisplayDevices(null, index++, ref dd, 0)) { var displayDevice = new FREObject().Init("com.tuarua.DisplayDevice", null); var displayMonitor = new FREObject().Init("com.tuarua.Monitor", null); displayDevice.SetProp("isPrimary", dd.StateFlags.HasFlag(DisplayDeviceStateFlags.PrimaryDevice)); displayDevice.SetProp("isActive", dd.StateFlags.HasFlag(DisplayDeviceStateFlags.AttachedToDesktop)); displayDevice.SetProp("isRemovable", dd.StateFlags.HasFlag(DisplayDeviceStateFlags.Removable)); displayDevice.SetProp("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 = new FREArray(displayDevice.GetProp("availableDisplaySettings")); uint cntAvailableSettings = 0; 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); var displaySettings = new FREObject().Init("com.tuarua.DisplaySettings", null); displaySettings.SetProp("width", availdm.dmPelsWidth); displaySettings.SetProp("height", availdm.dmPelsHeight); displaySettings.SetProp("refreshRate", availdm.dmDisplayFrequency); displaySettings.SetProp("bitDepth", Convert.ToInt32(availdm.dmBitsPerPel)); freAvailableDisplaySettings.Set(cntAvailableSettings, displaySettings); cntAvailableSettings++; } displayMonitor.SetProp("friendlyName", monitor.DeviceString); displayMonitor.SetProp("name", monitor.DeviceName); displayMonitor.SetProp("id", monitor.DeviceID); displayMonitor.SetProp("key", monitor.DeviceKey); displayDevice.SetProp("friendlyName", dd.DeviceString); displayDevice.SetProp("name", dd.DeviceName); displayDevice.SetProp("id", dd.DeviceID); displayDevice.SetProp("key", dd.DeviceKey); var currentDisplaySettings = new FREObject().Init("com.tuarua.DisplaySettings", null); currentDisplaySettings.SetProp("width", dm.dmPelsWidth); currentDisplaySettings.SetProp("height", dm.dmPelsHeight); currentDisplaySettings.SetProp("refreshRate", dm.dmDisplayFrequency); currentDisplaySettings.SetProp("bitDepth", Convert.ToInt32(dm.dmBitsPerPel)); displayDevice.SetProp("currentDisplaySettings", currentDisplaySettings); displayDevice.SetProp("monitor", displayMonitor); vecDisplayDevices.Set(cnt, displayDevice); _displayDeviceMap.Add(dd.DeviceKey, dd); cnt++; } } catch (Exception e) { Trace("ERROR: " + e); } return(vecDisplayDevices.RawValue); }