Пример #1
0
        internal static GeckoCanvasElement CreateCanvasOfImageElement(IGeckoWebBrowser browser, GeckoHtmlElement element, float xOffset,
                                                           float yOffset, float width, float height)
        {
            if (width == 0)
                throw new ArgumentException("width");

            if (height == 0)
                throw new ArgumentException("height");

            // Some opertations fail without a proper JSContext.
            using(var jsContext = new AutoJSContext(GlobalJSContextHolder.BackstageJSContext))
            {
                GeckoCanvasElement canvas = (GeckoCanvasElement)browser.Document.CreateElement("canvas");
                canvas.Width = (uint)width;
                canvas.Height = (uint)height;

                nsIDOMHTMLCanvasElement canvasPtr = (nsIDOMHTMLCanvasElement)canvas.DomObject;
                nsIDOMCanvasRenderingContext2D context;
                using (var str = new nsAString("2d"))
                {
                    context = (nsIDOMCanvasRenderingContext2D)canvasPtr.MozGetIPCContext(str);
                }

                context.DrawImage((nsIDOMElement)element.DomObject, xOffset, yOffset, width, height, xOffset, yOffset,
                                  width, height, 6);

                return canvas;
            }
        }
Пример #2
0
        private static string CopyImageElementToDataImageString(IGeckoWebBrowser browser, GeckoHtmlElement element,
                                                                string imageFormat, float xOffset, float yOffset, float width, float height)
        {
            if (width == 0)
            {
                throw new ArgumentException("width");
            }

            if (height == 0)
            {
                throw new ArgumentException("height");
            }

            string data;

            using (var context = new AutoJSContext())
            {
                context.EvaluateScript(string.Format(@"(function(element, canvas, ctx)
						{{
							canvas = element.ownerDocument.createElement('canvas');
							canvas.width = {2};
							canvas.height = {3};
							ctx = canvas.getContext('2d');
							ctx.drawImage(element, -{0}, -{1});
							return canvas.toDataURL('{4}');
						}}
						)(this)"                        , xOffset, yOffset, width, height, imageFormat), (nsISupports)(nsIDOMElement)element.DomObject, out data);
            }
            return(data);
        }
Пример #3
0
        /// <summary>
        /// Need the GeckoWebBrowser , ImageElement , X-OffSet , Y-Offset (put 0.0F if you want offset), Width , height) 
        /// Return the png image in data bytes[] 
        /// </summary>
        public static byte[] ConvertGeckoImageElementToPng(IGeckoWebBrowser browser, GeckoHtmlElement element, float xOffset,
                                                           float yOffset, float width, float height)
        {
            GeckoCanvasElement canvas = CreateCanvasOfImageElement(browser, element, xOffset, yOffset, width, height);

            string data = canvas.toDataURL("image/png");
            byte[] bytes = Convert.FromBase64String(data.Substring("data:image/png;base64,".Length));
            return bytes;
        }
Пример #4
0
        public ImageCreator(IGeckoWebBrowser browser)
        {
            if (Xpcom.IsLinux)
            {
                throw new NotImplementedException();
            }

            m_browser = browser;
        }
 private void DoCallbacks(IGeckoWebBrowser browser)
 {
     browser.ExecuteJQuery(@"
     $('a.repo-link').each(function(){
         var content = $(this).text();
         var event = new MessageEvent('callback', { 'view' : window, 'bubbles' : true, 'cancelable' : false, 'data' : content});
         document.dispatchEvent (event);
     });");
 }
Пример #6
0
        /// <summary>
        /// Need the GeckoWebBrowser , ImageElement , X-OffSet , Y-Offset (put 0.0F if you want offset), Width , height)
        /// Return true if the image was copied in the ClipBoard
        /// </summary>
        public bool CopyGeckoImageElementToPng(IGeckoWebBrowser browser, GeckoHtmlElement element, float xOffset,
                                                      float yOffset, float width, float height)
        {
            GeckoCanvasElement canvas = CreateCanvasOfImageElement(browser, element, xOffset, yOffset, width, height);

            string data = canvas.toDataURL("image/png");
            byte[] bytes = Convert.FromBase64String(data.Substring("data:image/png;base64,".Length));
            Clipboard.SetImage(System.Drawing.Image.FromStream(new System.IO.MemoryStream(bytes)));
            return Clipboard.ContainsImage();
        }
Пример #7
0
        /// <summary>
        /// Need the GeckoWebBrowser , ImageElement , X-OffSet , Y-Offset (put 0.0F if you want offset), Width , height)
        /// Return true if the image was copied in the ClipBoard
        /// </summary>
		public bool CopyGeckoImageElementToPng(IGeckoWebBrowser browser, GeckoHtmlElement element, float xOffset,
                                                      float yOffset, float width, float height)
        {
			string data = CopyImageElementToDataImageString(element, "image/png", xOffset, yOffset, width, height);
			if (data == null || !data.StartsWith("data:image/png;base64,"))	return false;

            byte[] bytes = Convert.FromBase64String(data.Substring("data:image/png;base64,".Length));
            Clipboard.SetImage(System.Drawing.Image.FromStream(new System.IO.MemoryStream(bytes)));
            return Clipboard.ContainsImage();
        }
Пример #8
0
        /// <summary>
        /// Need the GeckoWebBrowser , ImageElement , X-OffSet , Y-Offset (put 0.0F if you want offset), Width , height) 
        /// Return the png image in data bytes[] 
        /// </summary>
		public static byte[] ConvertGeckoImageElementToPng(IGeckoWebBrowser browser, GeckoHtmlElement element, float xOffset,
                                                           float yOffset, float width, float height)
        {

			string data = CopyImageElementToDataImageString(element, "image/png", xOffset, yOffset, width, height);
			if (data == null || !data.StartsWith("data:image/png;base64,"))
				throw new InvalidOperationException();

            byte[] bytes = Convert.FromBase64String(data.Substring("data:image/png;base64,".Length));
            return bytes;
        }
Пример #9
0
        /// <summary>
        /// Need the GeckoWebBrowser , ImageElement , X-OffSet , Y-Offset (put 0.0F if you want offset), Width , height)
        /// Return the png image in data bytes[]
        /// </summary>
        public static byte[] ConvertGeckoImageElementToPng(IGeckoWebBrowser browser, GeckoHtmlElement element, float xOffset,
                                                           float yOffset, float width, float height)
        {
            string data = CopyImageElementToDataImageString(element, "image/png", xOffset, yOffset, width, height);

            if (data == null || !data.StartsWith("data:image/png;base64,"))
            {
                throw new InvalidOperationException();
            }

            byte[] bytes = Convert.FromBase64String(data.Substring("data:image/png;base64,".Length));
            return(bytes);
        }
Пример #10
0
        public static async Task WaitUntilNavigatinFinished(this IGeckoWebBrowser browser)
        {
            var done = false;

            browser.DocumentCompleted += (sender, e) => done = true;
            browser.NavigationError   += (sender, e) => done = true;
            browser.Retargeted        += (sender, e) => done = true;

            while (!done)
            {
                await Task.Delay(50);
            }
        }
Пример #11
0
        /// <summary>
        /// Need the GeckoWebBrowser , ImageElement , X-OffSet , Y-Offset (put 0.0F if you want offset), Width , height)
        /// Return true if the image was copied in the ClipBoard
        /// </summary>
        public bool CopyGeckoImageElementToPng(IGeckoWebBrowser browser, GeckoHtmlElement element, float xOffset,
                                               float yOffset, float width, float height)
        {
            string data = CopyImageElementToDataImageString(element, "image/png", xOffset, yOffset, width, height);

            if (data == null || !data.StartsWith("data:image/png;base64,"))
            {
                return(false);
            }

            byte[] bytes = Convert.FromBase64String(data.Substring("data:image/png;base64,".Length));
            Clipboard.SetImage(System.Drawing.Image.FromStream(new System.IO.MemoryStream(bytes)));
            return(Clipboard.ContainsImage());
        }
Пример #12
0
        /// <summary>
        /// Get byte array with png image of the current browsers Window.
        /// Wpf methods on windows platform don't use a Bitmap :-/
        /// Not captures plugin (Flash,etc...) windows
        /// </summary>
        /// <param name="xOffset"></param>
        /// <param name="yOffset"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <returns></returns>
        public static byte[] CanvasGetPngImage(IGeckoWebBrowser browser, uint xOffset, uint yOffset, uint width, uint height)
        {
            if (width == 0)
                throw new ArgumentException("width");

            if (height == 0)
                throw new ArgumentException("height");

            // Use of the canvas technique was inspired by: the abduction! firefox plugin by Rowan Lewis
            // https://addons.mozilla.org/en-US/firefox/addon/abduction/

            // Some opertations fail without a proper JSContext.
            using (AutoJSContext jsContext = new AutoJSContext(GlobalJSContextHolder.BackstageJSContext))
            {
                GeckoCanvasElement canvas = (GeckoCanvasElement)browser.Document.CreateElement("canvas");
                canvas.Width = width;
                canvas.Height = height;

                nsIDOMHTMLCanvasElement canvasPtr = (nsIDOMHTMLCanvasElement)canvas.DomObject;
                nsIDOMCanvasRenderingContext2D context;
                using (nsAString str = new nsAString("2d"))
                {
                    context = (nsIDOMCanvasRenderingContext2D)canvasPtr.MozGetIPCContext(str);
                }

                // the bitmap image needs to conform to the (Full)Zoom being applied, otherwise it will render wrongly
                var zoom = browser.GetMarkupDocumentViewer().GetFullZoomAttribute();
                context.Scale(zoom, zoom);

                using (nsAString color = new nsAString("rgb(255,255,255)"))
                {
                    context.DrawWindow((nsIDOMWindow)browser.Window.DomWindow, xOffset, yOffset, width, height, color,
                                        (uint)(nsIDOMCanvasRenderingContext2DConsts.DRAWWINDOW_DO_NOT_FLUSH |
                                                   nsIDOMCanvasRenderingContext2DConsts.DRAWWINDOW_DRAW_VIEW |
                                                   nsIDOMCanvasRenderingContext2DConsts.DRAWWINDOW_ASYNC_DECODE_IMAGES |
                                                   nsIDOMCanvasRenderingContext2DConsts.DRAWWINDOW_USE_WIDGET_LAYERS));
                    ;
                }

                string data = canvas.toDataURL("image/png");
                byte[] bytes = Convert.FromBase64String(data.Substring("data:image/png;base64,".Length));
                return bytes;
            }
        }
 public NavigateFinishedNotifier(IGeckoWebBrowser browser)
 {
     m_browser = browser;
 }
        private static async Task <IEnumerable <string> > RetrieveBitbucketRepositoryLinks(IGeckoWebBrowser browser, string pageLink)
        {
            await browser.NavigateAndWait(pageLink);

            return(browser.GetElementsByJQuery(@"$(""a.repo-link"")").OfType <GeckoAnchorElement>().Select(element => element.Href).ToList());
        }
Пример #15
0
        public static JsVal ExecuteJQuery(IGeckoWebBrowser browser, string jQuery)
        {
            var jquery = new JQueryExecutor(browser.Window);

            return(jquery.ExecuteJQuery(jQuery));
        }
Пример #16
0
        public static IEnumerable <GeckoElement> GetElementsByJQuery(IGeckoWebBrowser browser, string jQuery)
        {
            var jquery = new JQueryExecutor(browser.Window);

            return(jquery.GetElementsByJQuery(jQuery));
        }
Пример #17
0
 public ImageCreator(IGeckoWebBrowser browser)
 {
     m_browser = browser;
 }
        public static GeckoElement GetElementByJQuery(this IGeckoWebBrowser browser, string jQuery)
        {
            var jquery = new JQueryExecutor(browser.Window);

            return(jquery.GetElementByJQuery(jQuery));
        }
Пример #19
0
 public static byte[] CanvasGetPngImage(IGeckoWebBrowser browser,uint width, uint height)
 {
     return CanvasGetPngImage(browser,0, 0, width, height);
 }
Пример #20
0
 public NavigateFinishedNotifier(IGeckoWebBrowser browser)
 {
     m_browser = browser;
 }
Пример #21
0
 public static async Task NavigateAndWait(this IGeckoWebBrowser browser, string url)
 {
     browser.Navigate(url);
     await browser.WaitUntilNavigatinFinished();
 }
Пример #22
0
		public ImageCreator(IGeckoWebBrowser browser)
		{
			m_browser = browser;
		}