2006-08-10 Mikkel Kruse Johnsen <mikkel@linet.dk>

* sample/GtkDemo/DemoPrinting.cs : new Gtk.Print sample.
	* sample/GtkDemo/Makefile.am : build new source.

svn path=/trunk/gtk-sharp/; revision=63610
This commit is contained in:
Mike Kestner 2006-08-10 17:32:11 +00:00
parent 3879146bd0
commit 6a6cc0ce8b
3 changed files with 144 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2006-08-10 Mikkel Kruse Johnsen <mikkel@linet.dk>
* sample/GtkDemo/DemoPrinting.cs : new Gtk.Print sample.
* sample/GtkDemo/Makefile.am : build new source.
2006-08-10 Mike Kestner <mkestner@novell.com>
* pango/Pango.metadata : add library attr to pango_cairo methods.

View File

@ -0,0 +1,136 @@
/* Printing
*
* GtkPrintOperation offers a simple API to support printing in a cross-platform way.
*/
using System;
using System.IO;
using System.Reflection;
using Gtk;
using Cairo;
namespace GtkDemo
{
[Demo ("Printing", "DemoPrinting.cs")]
public class DemoPrinting
{
private static double headerHeight = (10*72/25.4);
private static double headerGap = (3*72/25.4);
private static int pangoScale = 1024;
private PrintOperation print;
private string fileName = "DemoPrinting.cs";
private double fontSize = 12.0;
private int linesPerPage;
private string[] lines;
private int numLines;
private int numPages;
public DemoPrinting ()
{
print = new PrintOperation ();
print.BeginPrint += OnBeginPrint;
print.DrawPage += OnDrawPage;
print.EndPrint += OnEndPrint;
print.Run (PrintOperationAction.PrintDialog, null);
}
private void OnBeginPrint (object obj, Gtk.BeginPrintArgs args)
{
string contents;
double height;
PrintContext context = args.Context;
height = context.Height;
linesPerPage = (int)Math.Floor(height / fontSize);
contents = LoadFile("DemoPrinting.cs");
lines = contents.Split('\n');
numLines = lines.Length;
numPages = (numLines - 1) / linesPerPage + 1;
print.NPages = numPages;
}
private string LoadFile (string filename)
{
Stream file = Assembly.GetExecutingAssembly ().GetManifestResourceStream
(filename);
if (file == null && File.Exists (filename)) {
file = File.OpenRead (filename);
}
if (file == null) {
return "File not found";
}
StreamReader sr = new StreamReader (file);
return sr.ReadToEnd ();
}
private void OnDrawPage (object obj, Gtk.DrawPageArgs args)
{
PrintContext context = args.Context;
Cairo.Context cr = context.CairoContext;
double width = context.Width;
cr.Rectangle (0, 0, width, headerHeight);
cr.SetSourceRGB (0.8, 0.8, 0.8);
cr.FillPreserve ();
cr.SetSourceRGB (0, 0, 0);
cr.LineWidth = 1;
cr.Stroke();
Pango.Layout layout = context.CreatePangoLayout ();
Pango.FontDescription desc = Pango.FontDescription.FromString ("sans 14");
layout.FontDescription = desc;
layout.SetText (fileName);
layout.Width = (int)width;
layout.Alignment = Pango.Alignment.Center;
int layoutWidth, layoutHeight;
layout.GetSize (out layoutWidth, out layoutHeight);
double textHeight = (double)layoutHeight / (double)pangoScale;
cr.MoveTo (width/2, (headerHeight - textHeight) / 2);
Pango.CairoHelper.ShowLayout (cr, layout);
string pageStr = String.Format ("{0}/{1}", args.PageNr + 1, numPages);
layout.SetText (pageStr);
layout.Alignment = Pango.Alignment.Right;
cr.MoveTo (width - 2, (headerHeight - textHeight) / 2);
Pango.CairoHelper.ShowLayout (cr, layout);
layout = null;
layout = context.CreatePangoLayout ();
desc = Pango.FontDescription.FromString ("mono");
desc.Size = (int)(fontSize * pangoScale);
layout.FontDescription = desc;
cr.MoveTo (0, headerHeight + headerGap);
int line = args.PageNr * linesPerPage;
for (int i=0; i < linesPerPage && line < numLines; i++)
{
layout.SetText (lines[line]);
Pango.CairoHelper.ShowLayout (cr, layout);
cr.RelMoveTo (0, fontSize);
line++;
}
layout = null;
}
private void OnEndPrint (object obj, Gtk.EndPrintArgs args)
{
}
}
}

View File

@ -1,5 +1,5 @@
assemblies = ../../glib/glib-sharp.dll ../../pango/pango-sharp.dll ../../atk/atk-sharp.dll ../../gdk/gdk-sharp.dll ../../gtk/gtk-sharp.dll
references = $(addprefix /r:, $(assemblies))
references = $(addprefix /r:, $(assemblies)) -r:Mono.Cairo
TARGETS = GtkDemo.exe
DEBUGS = $(addsuffix .mdb, $(TARGETS))
CLEANFILES = $(TARGETS) $(DEBUGS)
@ -31,7 +31,8 @@ sources = \
DemoStockBrowser.cs \
DemoTextView.cs \
DemoTreeStore.cs \
DemoUIManager.cs
DemoUIManager.cs \
DemoPrinting.cs
images = \
images/gnome-foot.png,gnome-foot.png \