minor tweeks to gtkprint
svn: r7870
This commit is contained in:
		@@ -1,3 +1,6 @@
 | 
			
		||||
2007-01-05 Richard Taylor  <rjt-gramps@thegrindstone.me.uk>
 | 
			
		||||
	* src/docgen/GtkPrint.py: minor tweeks
 | 
			
		||||
 | 
			
		||||
2007-01-05 Richard Taylor  <rjt-gramps@thegrindstone.me.uk>
 | 
			
		||||
	* src/docgen/GtkPrint.py: Add initial stab at GtkPrint.
 | 
			
		||||
	
 | 
			
		||||
 
 | 
			
		||||
@@ -80,10 +80,10 @@ class PreviewCanvas(gtk.DrawingArea):
 | 
			
		||||
        self._print_context = print_context
 | 
			
		||||
 | 
			
		||||
        self.connect("expose_event",self.expose)
 | 
			
		||||
        self.connect("realize",self.realize)
 | 
			
		||||
        
 | 
			
		||||
        self._page_no = 1 # always start on page 1
 | 
			
		||||
 | 
			
		||||
        self.set_size_request(200, 300)
 | 
			
		||||
 | 
			
		||||
    def set_page(self,page):
 | 
			
		||||
        """Change which page is displayed"""
 | 
			
		||||
@@ -91,7 +91,7 @@ class PreviewCanvas(gtk.DrawingArea):
 | 
			
		||||
            self._page_no = page
 | 
			
		||||
            self.queue_draw()
 | 
			
		||||
        
 | 
			
		||||
    def realize(self):
 | 
			
		||||
    def realize(self, dummy=None):
 | 
			
		||||
        """Generate the cairo context for this drawing area
 | 
			
		||||
        and pass it to the print context."""
 | 
			
		||||
        gtk.DrawingArea.realize(self)
 | 
			
		||||
@@ -103,6 +103,12 @@ class PreviewCanvas(gtk.DrawingArea):
 | 
			
		||||
        print "expose"
 | 
			
		||||
        self.window.clear()
 | 
			
		||||
        self._preview_operation.render_page(self._page_no)
 | 
			
		||||
 | 
			
		||||
        # need to calculate how large the widget now is and
 | 
			
		||||
        # set it so that the scrollbars are updated.
 | 
			
		||||
        # I can't work out how to do this.
 | 
			
		||||
        #self.set_size_request(200, 300)
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
class PreviewWindow(gtk.Window):
 | 
			
		||||
    """A dialog to show a print preview."""
 | 
			
		||||
@@ -153,11 +159,11 @@ class PreviewWindow(gtk.Window):
 | 
			
		||||
                           lambda spinbutton: self._canvas.set_page(spinbutton.get_value_as_int()))
 | 
			
		||||
        
 | 
			
		||||
        self._canvas.set_double_buffered(False)
 | 
			
		||||
        self._canvas.realize()
 | 
			
		||||
 | 
			
		||||
        self.show_all()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def change_n_pages(self, widget, event ):
 | 
			
		||||
        """Update the spin box to have the correct number of pages for the
 | 
			
		||||
        print operation"""
 | 
			
		||||
@@ -196,10 +202,39 @@ class PreviewWindow(gtk.Window):
 | 
			
		||||
# 
 | 
			
		||||
#
 | 
			
		||||
#------------------------------------------------------------------------
 | 
			
		||||
def paperstyle_to_pagesetup(paper_style):
 | 
			
		||||
    """convert a gramps paper_style instance into a gtk.PageSetup instance.
 | 
			
		||||
    """
 | 
			
		||||
    page_setup = gtk.PageSetup()
 | 
			
		||||
    if paper_style.get_orientation() == BaseDoc.PAPER_PORTRAIT:
 | 
			
		||||
        page_setup.set_orientation(gtk.PAGE_ORIENTATION_PORTRAIT)
 | 
			
		||||
    else:
 | 
			
		||||
        page_setup.set_orientation(gtk.PAGE_ORIENTATION_LANDSCAPE)
 | 
			
		||||
 | 
			
		||||
    # This causes my gtk to seg fault.
 | 
			
		||||
    #paper_size = gtk.PaperSize(paper_style.get_name())
 | 
			
		||||
    #if paper_size.is_custom():
 | 
			
		||||
    #    paper_size.set_size(paper_style.get_width()*10,
 | 
			
		||||
    #                        paper_style.get_height()*10,
 | 
			
		||||
    #                        gtk.UNIT_MM)
 | 
			
		||||
        
 | 
			
		||||
    # So we just to this instead.
 | 
			
		||||
    # This does not appear to work either, it reports an
 | 
			
		||||
    # GtkWarning: gtk_paper_size_set_size: assertion `size->is_custom' failed
 | 
			
		||||
    # But I don't know how to tell it that it is custom without it segfaulting.
 | 
			
		||||
    paper_size = gtk.PaperSize()
 | 
			
		||||
    paper_size.set_size(paper_style.get_width()*10,
 | 
			
		||||
                        paper_style.get_height()*10,
 | 
			
		||||
                        gtk.UNIT_MM)
 | 
			
		||||
 | 
			
		||||
    page_setup.set_paper_size(paper_size)
 | 
			
		||||
 | 
			
		||||
    return page_setup
 | 
			
		||||
    
 | 
			
		||||
class PrintFacade(gtk.PrintOperation):
 | 
			
		||||
    """Provides the main print operation functions."""
 | 
			
		||||
    
 | 
			
		||||
    def __init__(self, renderer):
 | 
			
		||||
    def __init__(self, renderer,page_setup):
 | 
			
		||||
        """
 | 
			
		||||
        render must be an object with the following interface:
 | 
			
		||||
           render: callable that takes (operation, context, page_nr)
 | 
			
		||||
@@ -212,6 +247,8 @@ class PrintFacade(gtk.PrintOperation):
 | 
			
		||||
 | 
			
		||||
        self._renderer = renderer
 | 
			
		||||
        
 | 
			
		||||
        self.set_default_page_setup(page_setup)
 | 
			
		||||
        
 | 
			
		||||
        self.connect("begin_print", self.begin_print)
 | 
			
		||||
        self.connect("draw_page", self.draw_page)
 | 
			
		||||
        self.connect("paginate", self.paginate)
 | 
			
		||||
@@ -271,6 +308,9 @@ class CairoJob(object):
 | 
			
		||||
    # interface required for PrintFacade
 | 
			
		||||
    #
 | 
			
		||||
    def render(self, operation, context, page_nr):
 | 
			
		||||
        """Renders the document on the cairo context.
 | 
			
		||||
        A useful reference is: http://www.tortall.net/mu/wiki/CairoTutorial
 | 
			
		||||
        """
 | 
			
		||||
        cr = context.get_cairo_context()
 | 
			
		||||
 | 
			
		||||
        y = 20
 | 
			
		||||
@@ -296,7 +336,7 @@ class CairoJob(object):
 | 
			
		||||
        return 3
 | 
			
		||||
    
 | 
			
		||||
    #
 | 
			
		||||
    # methods to add context to abstract document.
 | 
			
		||||
    # methods to add content to abstract document.
 | 
			
		||||
    #
 | 
			
		||||
 | 
			
		||||
    def write_text(self,text):
 | 
			
		||||
@@ -313,7 +353,8 @@ class GtkDoc(BaseDoc.BaseDoc):
 | 
			
		||||
        self._job = CairoJob()
 | 
			
		||||
    
 | 
			
		||||
    def close(self):
 | 
			
		||||
        PrintFacade(self._job).do_print()
 | 
			
		||||
        PrintFacade(self._job,
 | 
			
		||||
                    paperstyle_to_pagesetup(self.paper)).do_print()
 | 
			
		||||
        
 | 
			
		||||
    def page_break(self):
 | 
			
		||||
        pass
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user