private void RenderSong(RenderOption option, object o = null) { try { AppSettings appSettings = null; PageSetup pageSetup = new PageSetup(); if (_workingSettings != null) { appSettings = _workingSettings; } else { appSettings = _appSettings; } DrawingArea area = new DrawingArea(); pageSetup.SetLeftMargin(0.5, Unit.Inch); pageSetup.SetTopMargin(0.5, Unit.Inch); pageSetup.SetRightMargin(0.5, Unit.Inch); pageSetup.SetBottomMargin(0, Unit.Inch); if (option == RenderOption.ScreenView) { area = (DrawingArea)o; } else { PageSetup defaultPageSetup = new PageSetup(); // Alter our set dimensions by the printer default so that it lines up in the actual // print out like it does on the screen. pageSetup.SetLeftMargin(pageSetup.GetLeftMargin(Unit.Inch) - defaultPageSetup.GetLeftMargin(Unit.Inch), Unit.Inch); pageSetup.SetTopMargin(pageSetup.GetTopMargin(Unit.Inch) - defaultPageSetup.GetTopMargin(Unit.Inch), Unit.Inch); pageSetup.SetRightMargin(pageSetup.GetRightMargin(Unit.Inch) + defaultPageSetup.GetRightMargin(Unit.Inch), Unit.Inch); pageSetup.SetBottomMargin(pageSetup.GetBottomMargin(Unit.Inch) + defaultPageSetup.GetBottomMargin(Unit.Inch), Unit.Inch); //pageSetup.SetLeftMargin(0.25, Unit.Inch); //pageSetup.SetTopMargin(0.25, Unit.Inch); //pageSetup.SetRightMargin(0.75, Unit.Inch); //pageSetup.SetBottomMargin(0.75, Unit.Inch); area = null; } //CSGen.Operations.IPageRenderer renderer = new CSGen.PageRenderer (_currentSong, forDisplay: option == RenderOption.ScreenView); CSGen.Operations.IPageRenderer renderer = new CSGen.Operations.RenderEngine(_currentSong, appSettings, pageSetup, option); // if (option == RenderOption.ScreenView) // { // area = (DrawingArea)o; // pageSetup = renderer.PageSetup; // } // else // { // pageSetup = new PageSetup(); // } // TODO: Remove when new render engine is complete. // Load configuration options. // if (_workingFonts != null) // renderer.Fonts = _workingFonts; // else // renderer.Fonts = _fonts; // renderer.AppSettings = appSettings; // // pageSetup.SetLeftMargin(0.5, Unit.Inch); // pageSetup.SetTopMargin(0.5, Unit.Inch); // pageSetup.SetBottomMargin(0.5, Unit.Inch); // pageSetup.SetRightMargin(0.5, Unit.Inch); // end TODO if (option == RenderOption.ScreenView) { Cairo.Context cr = Gdk.CairoHelper.Create(area.GdkWindow); renderer.CalculatePages(cr); area.WidthRequest = renderer.DisplayWidthExtent; area.HeightRequest = renderer.DisplayHeightExtent; int offset = 0; for (int i = 0; i < renderer.Pages; i++) { renderer.DrawPage(i, offset); offset += renderer.DisplayPaperHeight; } ((IDisposable)cr.GetTarget()).Dispose(); ((IDisposable)cr).Dispose(); } else { PrintSettings printSettings = new PrintSettings(); printSettings.PaperSize = pageSetup.PaperSize; using (PrintOperation print = new PrintOperation()) { print.DefaultPageSetup = pageSetup; print.PrintSettings = printSettings; print.BeginPrint += (object obj, BeginPrintArgs args) => { renderer.CalculatePages(args.Context.CairoContext); print.NPages = renderer.Pages; }; print.DrawPage += (object obj, DrawPageArgs args) => { renderer.DrawPage(args.PageNr); }; if (option == RenderOption.Print) { print.Run(PrintOperationAction.PrintDialog, null); } else { print.Run(PrintOperationAction.Preview, null); } } } } catch (Exception ex) { MessageDialog dialog = new MessageDialog( this, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Ok, "Message: {0}\n\n Stacktrace: {1}", ex.Message, ex.StackTrace); dialog.Run(); dialog.Destroy(); } }