Ejemplo n.º 1
0
        public void writeText(FreeImageBitmap bitmap, string p, int fontSize)
        {
            p = p.Replace("\n", "<br/>");

            int width  = Math.Min(bitmap.Width, 2048);
            int height = Math.Min(bitmap.Height, 256);

            ImageBox     imageBox     = (ImageBox)Gui.Instance.createWidgetT("ImageBox", "ImageBox", 0, 0, width, height, Align.Default, "Overlapped", "TempImageBox");
            RocketWidget rocketWidget = null;

            try
            {
                imageBox.Visible = false;
                rocketWidget     = new RocketWidget(imageBox, true);

                var cornerColor = Engine.Color.FromARGB(bitmap.GetPixel(0, 0).ToArgb());
                rocketWidget.resized();
                StringBuilder sb = new StringBuilder();
                sb.AppendFormat(DocumentStart, cornerColor.ToHexString(), fontSize);
                sb.AppendFormat("<p>{0}</p>", p);
                sb.Append(DocumentEnd);

                var resourceLoader = new RocketAssemblyResourceLoader(this.GetType().Assembly);
                RocketInterface.Instance.FileInterface.addExtension(resourceLoader);

                var document = rocketWidget.Context.LoadDocumentFromMemory(sb.ToString());
                if (document != null)
                {
                    document.Show(ElementDocument.FocusFlags.NONE);
                }

                RocketInterface.Instance.FileInterface.removeExtension(resourceLoader);

                using (FreeImageBitmap copyrightBitmap = new FreeImageBitmap(imageBox.Width, imageBox.Height, PixelFormat.Format32bppArgb))
                {
                    rocketWidget.writeToGraphics(copyrightBitmap, new Rectangle(0, 0, copyrightBitmap.Width, copyrightBitmap.Height));
                    using (FreeImageBitmap background = bitmap.Copy(0, 0, Math.Min(copyrightBitmap.Width, bitmap.Width), Math.Min(copyrightBitmap.Height, bitmap.Height)))
                    {
                        background.ConvertColorDepth(FREE_IMAGE_COLOR_DEPTH.FICD_24_BPP);
                        copyrightBitmap.Composite(false, null, background);
                        bitmap.Paste(copyrightBitmap, 0, 0, int.MaxValue);
                    }
                }
            }
            finally
            {
                //Using block does not work (wtf?), dispose manually
                if (rocketWidget != null)
                {
                    rocketWidget.Dispose();
                }
                Gui.Instance.destroyWidget(imageBox);
            }
        }
Ejemplo n.º 2
0
        public SceneErrorWindow(GUIManager guiManager)
            : base("Medical.GUI.SceneErrorWindow.SceneErrorWindow.layout")
        {
            rmlImage     = (ImageBox)window.findWidget("RmlImage");
            rocketWidget = new RocketWidget(rmlImage, false);

            window.WindowChangedCoord += window_WindowChangedCoord;
            this.guiManager            = guiManager;
            guiManager.addManagedDialog(this);
            guiManager.autoDisposeDialog(this);

            rocketWidget.Context.UnloadAllDocuments();

            StringBuilder htmlString = new StringBuilder();

            htmlString.Append(DocumentStart);

            foreach (var error in SimObjectErrorManager.Errors)
            {
                htmlString.AppendFormat(ErrorLine, error.Subsystem, error.SimObject, error.Type, error.ElementName, error.Message);
            }

            htmlString.Append(DocumentEnd);

            var resourceLoader = new RocketAssemblyResourceLoader(this.GetType().Assembly);

            RocketInterface.Instance.FileInterface.addExtension(resourceLoader);
            using (ElementDocument document = rocketWidget.Context.LoadDocumentFromMemory(htmlString.ToString()))
            {
                if (document != null)
                {
                    document.Show();
                    rocketWidget.removeFocus();
                    rocketWidget.renderOnNextFrame();
                }
            }
            RocketInterface.Instance.FileInterface.removeExtension(resourceLoader);
        }