* src/docgen/LPRDoc.py: Set and maintain self.brand_new_page.

Use constant factor for line spacing for given font size.


svn: r2989
This commit is contained in:
Alex Roitman
2004-03-10 02:10:34 +00:00
parent 3620f5a7bf
commit 5a4a69b83c
2 changed files with 105 additions and 83 deletions

View File

@@ -1,3 +1,7 @@
2004-03-09 Alex Roitman <shura@alex.neuro.umn.edu>
* src/docgen/LPRDoc.py: Set and maintain self.brand_new_page.
Use constant factor for line spacing for given font size.
2004-03-08 Don Allingham <dallingham@users.sourceforge.net> 2004-03-08 Don Allingham <dallingham@users.sourceforge.net>
* src/EditPerson.py: TreeView enhancements * src/EditPerson.py: TreeView enhancements
* src/PeopleModel.py: TreeView enhancements * src/PeopleModel.py: TreeView enhancements

View File

@@ -64,8 +64,9 @@ if gnomeprint.Context.__dict__.has_key('grestore'):
else: else:
support_photos = 0 support_photos = 0
print "LPRDoc: Photos and rotated text (used in TimeChart)" print "LPRDoc: Photos and rotated text (used in TimeChart)"
print "are not supported for direct priting." print " are not supported for direct priting."
print "Get gnome-python from CVS or wait for the next gnome-python release." print " Get gnome-python from CVS"
print " or wait for the next gnome-python release."
### end FIXME ### ### end FIXME ###
#------------------------------------------------------------------------ #------------------------------------------------------------------------
@@ -92,45 +93,24 @@ _SUPER_ELEVATION_FRACTION = 0.3
# Number of points to subtract to get the superscrip size # Number of points to subtract to get the superscrip size
_SUPER_SIZE_REDUCTION = 2 _SUPER_SIZE_REDUCTION = 2
# Factor which multiplies the font size to get line spacing for the font
_EXTRA_SPACING_FACTOR = 1.1
# Font constants -- specific for gnome-print # Font constants -- specific for gnome-print
_TTF_FREEFONT = ( ( 'FreeSerif Medium', _TTF_FREEFONT = (
'FreeSerif Bold', ('FreeSerif Medium','FreeSerif Bold','FreeSerif Italic','FreeSerif BoldItalic' ),
'FreeSerif Italic', ('FreeSans Medium','FreeSans Bold','FreeSans Oblique','FreeSans BoldOblique'),
'FreeSerif BoldItalic' ), ('FreeMono Medium','FreeMono Bold','FreeMono Oblique','FreeMono BoldOblique')
( 'FreeSans Medium',
'FreeSans Bold',
'FreeSans Oblique',
'FreeSans BoldOblique'),
( 'FreeMono Medium',
'FreeMono Bold',
'FreeMono Oblique',
'FreeMono BoldOblique')
) )
_MS_TTFONT = ( ( 'Times New Roman Regular', _MS_TTFONT = (
'Times New Roman Bold', ('Times New Roman Regular','Times New Roman Bold','Times New Roman Italic','Times New Roman Bold Italic' ),
'Times New Roman Italic', ('Arial Regular','Arial Bold','Arial Italic','Arial Bold Italic'),
'Times New Roman Bold Italic' ), ('Courier New Regular','Courier New Bold','Courier New Italic','Courier New Bold Italic')
( 'Arial Regular',
'Arial Bold',
'Arial Italic',
'Arial Bold Italic'),
( 'Courier New Regular',
'Courier New Bold',
'Courier New Italic',
'Courier New Bold Italic')
) )
_GNOME_FONT = ( ( 'Serif Regular', _GNOME_FONT = (
'Serif Bold', ('Serif Regular','Serif Bold','Serif Italic','Serif Bold Italic' ),
'Serif Italic', ('Sans Regular','Sans Bold','Sans Italic','Sans Bold Italic'),
'Serif Bold Italic' ), ('Monospace Regular','Monospace New Bold','Monospace New Italic','Monospace New Bold Italic')
( 'Sans Regular',
'Sans Bold',
'Sans Italic',
'Sans Bold Italic'),
( 'Monospace Regular',
'Monospace New Bold',
'Monospace New Italic',
'Monospace New Bold Italic')
) )
# Search for ttf-freefont first # Search for ttf-freefont first
@@ -142,7 +122,7 @@ for family in _TTF_FREEFONT:
break break
if ttf_not_found: if ttf_not_found:
print "Free true type fonts not found." print "LPRDoc: Free true type fonts not found."
# Search for MS ttfs # Search for MS ttfs
ms_not_found = 0 ms_not_found = 0
for family in _MS_TTFONT: for family in _MS_TTFONT:
@@ -151,16 +131,18 @@ if ttf_not_found:
ms_not_found = 1 ms_not_found = 1
break break
if ms_not_found: if ms_not_found:
print "Microsoft true type fonts not found." print " Microsoft true type fonts not found."
print "Using Gnome standard fonts." print " Using Gnome standard fonts."
print "Non-ascii characters will appear garbled in the output." print " Non-ascii characters will appear garbled in the output."
print "INSTALL Free true type fonts from http://www.nongnu.org/freefont/" print " INSTALL Free true type fonts"
print " from http://www.nongnu.org/freefont/"
_FONT_SET = _GNOME_FONT _FONT_SET = _GNOME_FONT
else: else:
print "Found Microsoft true type fonts. Will use them for now." print " Found Microsoft true type fonts. Will use them for now."
print "These fonts are not free. " print " These fonts are not free. "
print "We would advise you to switch to Free true type fonts" print " You are advised to switch to Free true type fonts"
print "INSTALL Free true type fonts from http://www.nongnu.org/freefont/" print " INSTALL Free true type fonts"
print " from http://www.nongnu.org/freefont/"
_FONT_SET = _MS_TTFONT _FONT_SET = _MS_TTFONT
else: else:
_FONT_SET = _TTF_FREEFONT _FONT_SET = _TTF_FREEFONT
@@ -178,7 +160,7 @@ _MONO = "Mono"
#------------------------------------------------------------------------ #------------------------------------------------------------------------
def cm2u(cm): def cm2u(cm):
""" """
Convert cm to gnome-print units Convert cm to gnome-print units.
""" """
return cm * 72.0 / 2.54 return cm * 72.0 / 2.54
@@ -293,19 +275,19 @@ class GnomePrintParagraph:
def get_fontstyle(self): def get_fontstyle(self):
""" """
Return fontstyle for the paragraph Return fontstyle for the paragraph.
""" """
return self.fontstyle return self.fontstyle
def get_alignment(self): def get_alignment(self):
""" """
Return requested alignment of the paragraph Return requested alignment of the paragraph.
""" """
return self.style.get_alignment() return self.style.get_alignment()
def get_min_width(self): def get_min_width(self):
""" """
Determine the minimal width of the paragraph (longest word) Determine the minimal width of the paragraph (longest word).
""" """
max_word_size = 0 max_word_size = 0
@@ -412,12 +394,13 @@ class GnomePrintParagraph:
end_word = len(textlist) end_word = len(textlist)
self.lines.append((start_piece,start_word,end_piece,end_word,avail_width)) self.lines.append((start_piece,start_word,end_piece,end_word,avail_width))
self.height = nlines * self.fontstyle.get_size() \ self.height = nlines * self.fontstyle.get_size() * _EXTRA_SPACING_FACTOR \
+ 2 * cm2u(self.style.get_padding()) + 2 * cm2u(self.style.get_padding())
def get_lines(self): def get_lines(self):
""" """
Return a list of assemlbed lines for the paragraph. Return a list of assemlbed lines for the paragraph.
Each element is a tuple corresponding to the line's contents: Each element is a tuple corresponding to the line's contents:
(start_piece,start_word,end_piece,end_word,avail_width) (start_piece,start_word,end_piece,end_word,avail_width)
""" """
@@ -501,7 +484,7 @@ class GnomePrintPhoto:
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
class LPRDoc(BaseDoc.BaseDoc): class LPRDoc(BaseDoc.BaseDoc):
"""Gnome-print document interface class. Derived from BaseDoc""" """Gnome-print document interface class. Derived from BaseDoc."""
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
@@ -509,13 +492,13 @@ class LPRDoc(BaseDoc.BaseDoc):
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
def open(self,filename): def open(self,filename):
"""Sets up initialization""" """Sets up initialization."""
#set up variables needed to keep track of which state we are in #set up variables needed to keep track of which state we are in
self.__in_table = 0 self.__in_table = 0
self.__in_cell = 0 self.__in_cell = 0
self.__page_count = 0 self.__page_count = 0
self.__page_open = 0 self.__page_open = 0
self.brand_new_page = 0
self.paragraph = None self.paragraph = None
self.__cell_data = [] self.__cell_data = []
self.__table_data = [] self.__table_data = []
@@ -536,7 +519,7 @@ class LPRDoc(BaseDoc.BaseDoc):
def close(self): def close(self):
"""Clean up and close the document""" """Clean up and close the document."""
#gracefully end page before we close the doc if a page is open #gracefully end page before we close the doc if a page is open
if self.__page_open: if self.__page_open:
self.end_page() self.end_page()
@@ -545,7 +528,10 @@ class LPRDoc(BaseDoc.BaseDoc):
self.__show_print_dialog() self.__show_print_dialog()
def start_page(self,orientation=None): def start_page(self,orientation=None):
"""Create a new page""" """Create a new page."""
# Don't start new page if it is just started
if self.brand_new_page:
return
#reset variables dealing with opening a page #reset variables dealing with opening a page
if (self.__page_open): if (self.__page_open):
self.end_page() self.end_page()
@@ -557,18 +543,19 @@ class LPRDoc(BaseDoc.BaseDoc):
self.__pc.beginpage(str(self.__page_count)) self.__pc.beginpage(str(self.__page_count))
self.__pc.moveto(self.__x, self.__y) self.__pc.moveto(self.__x, self.__y)
self.brand_new_page = 1
def end_page(self): def end_page(self):
"""Close the current page""" """Close the current page."""
if (self.__page_open): if (self.__page_open):
self.__page_open = 0 self.__page_open = 0
self.__pc.showpage() self.__pc.showpage()
self.__y -= self.top_margin + _LINE_SPACING self.brand_new_page = 0
def page_break(self): def page_break(self):
"Forces a page break, creating a new page" "Forces a page break, creating a new page."
# If we're already at the very top, relax and do nothing # If we're already at the very top, relax and do nothing
if self.__y != self.top_margin: if not self.brand_new_page:
self.end_page() self.end_page()
self.start_page() self.start_page()
@@ -579,13 +566,14 @@ class LPRDoc(BaseDoc.BaseDoc):
#------------------------------------------------------------------------ #------------------------------------------------------------------------
def line_break(self): def line_break(self):
"Forces a line break within a paragraph" "Forces a line break within a paragraph."
# Add previously held text to the paragraph, # Add previously held text to the paragraph,
# then add line break directive, # then add line break directive,
# then start accumulating further text # then start accumulating further text
append_to_paragraph(self.paragraph,self.__paragraph_directive,self.__paragraph_text) append_to_paragraph(self.paragraph,self.__paragraph_directive,self.__paragraph_text)
self.paragraph.add_piece(_LINE_BREAK,"") self.paragraph.add_piece(_LINE_BREAK,"")
self.__paragraph_text = "" self.__paragraph_text = ""
self.brand_new_page = 0
def start_paragraph(self,style_name,leader=None): def start_paragraph(self,style_name,leader=None):
"""Paragraphs handling - A Gramps paragraph is any """Paragraphs handling - A Gramps paragraph is any
@@ -597,9 +585,10 @@ class LPRDoc(BaseDoc.BaseDoc):
self.__paragraph_text = "" self.__paragraph_text = ""
if leader: if leader:
self.__paragraph_text += leader + " " self.__paragraph_text += leader + " "
self.brand_new_page = 0
def end_paragraph(self): def end_paragraph(self):
"""End the current paragraph""" """End the current paragraph."""
# Add current text/directive to paragraoh, # Add current text/directive to paragraoh,
# then either add paragrah to the list of cell's paragraphs # then either add paragrah to the list of cell's paragraphs
# or print it right away if not in cell # or print it right away if not in cell
@@ -613,31 +602,36 @@ class LPRDoc(BaseDoc.BaseDoc):
self.__x, self.__y, self.__x, self.__y,
self.right_margin - self.left_margin) self.right_margin - self.left_margin)
self.paragraph = None self.paragraph = None
self.brand_new_page = 0
def start_bold(self): def start_bold(self):
"""Bold face""" """Bold face."""
append_to_paragraph(self.paragraph,self.__paragraph_directive,self.__paragraph_text) append_to_paragraph(self.paragraph,self.__paragraph_directive,self.__paragraph_text)
self.__paragraph_directive = _BOLD self.__paragraph_directive = _BOLD
self.__paragraph_text = "" self.__paragraph_text = ""
self.brand_new_page = 0
def end_bold(self): def end_bold(self):
"""End bold face""" """End bold face."""
append_to_paragraph(self.paragraph,self.__paragraph_directive,self.__paragraph_text) append_to_paragraph(self.paragraph,self.__paragraph_directive,self.__paragraph_text)
self.__paragraph_directive = "" self.__paragraph_directive = ""
self.__paragraph_text = "" self.__paragraph_text = ""
self.brand_new_page = 0
def start_superscript(self): def start_superscript(self):
append_to_paragraph(self.paragraph,self.__paragraph_directive,self.__paragraph_text) append_to_paragraph(self.paragraph,self.__paragraph_directive,self.__paragraph_text)
self.__paragraph_directive = _SUPER self.__paragraph_directive = _SUPER
self.__paragraph_text = "" self.__paragraph_text = ""
self.brand_new_page = 0
def end_superscript(self): def end_superscript(self):
append_to_paragraph(self.paragraph,self.__paragraph_directive,self.__paragraph_text) append_to_paragraph(self.paragraph,self.__paragraph_directive,self.__paragraph_text)
self.__paragraph_directive = "" self.__paragraph_directive = ""
self.__paragraph_text = "" self.__paragraph_text = ""
self.brand_new_page = 0
def start_table(self,name,style_name): def start_table(self,name,style_name):
"""Begin new table""" """Begin new table."""
# initialize table, compute its width, find number of columns # initialize table, compute its width, find number of columns
self.__table_data = [] self.__table_data = []
self.__in_table = 1 self.__in_table = 1
@@ -648,16 +642,18 @@ class LPRDoc(BaseDoc.BaseDoc):
self.__tbl_style.get_width() / 100.0 self.__tbl_style.get_width() / 100.0
self.__cell_widths = [] self.__cell_widths = []
self.__cell_styles = [] self.__cell_styles = []
self.brand_new_page = 0
def end_table(self): def end_table(self):
"""Close the table environment""" """Close the table environment."""
# output table contents # output table contents
self.__output_table() self.__output_table()
self.__in_table = 0 self.__in_table = 0
self.__y = self.__advance_line(self.__y) self.__y = self.__advance_line(self.__y)
self.brand_new_page = 0
def start_row(self): def start_row(self):
"""Begin a new row""" """Begin a new row."""
# Initialize row, compute cell widths # Initialize row, compute cell widths
self.__row_data = [] self.__row_data = []
self.rownum = self.rownum + 1 self.rownum = self.rownum + 1
@@ -668,15 +664,18 @@ class LPRDoc(BaseDoc.BaseDoc):
for cell in range(self.__ncols): for cell in range(self.__ncols):
self.__cell_widths[self.rownum][cell] = self.__table_width * \ self.__cell_widths[self.rownum][cell] = self.__table_width * \
self.__tbl_style.get_column_width(cell) / 100.0 self.__tbl_style.get_column_width(cell) / 100.0
self.brand_new_page = 0
def end_row(self): def end_row(self):
"""End the row (new line)""" """End the row (new line)."""
# add row data to the data we have for the current table # add row data to the data we have for the current table
self.__table_data.append(self.__row_data) self.__table_data.append(self.__row_data)
self.brand_new_page = 0
def start_cell(self,style_name,span=1): def start_cell(self,style_name,span=1):
"""Add an entry to the table.""" """Add an entry to the table."""
# Initialize a cell, take care of span>1 cases # Initialize a cell, take care of span>1 cases
self.brand_new_page = 0
self.__in_cell = 1 self.__in_cell = 1
self.__cell_data = [] self.__cell_data = []
self.cellnum = self.cellnum + self.__span self.cellnum = self.cellnum + self.__span
@@ -689,13 +688,14 @@ class LPRDoc(BaseDoc.BaseDoc):
self.__cell_widths[self.rownum][self.cellnum + __extra_cell] = 0 self.__cell_widths[self.rownum][self.cellnum + __extra_cell] = 0
def end_cell(self): def end_cell(self):
"""Prepares for next cell""" """Prepares for next cell."""
# append the cell text to the row data # append the cell text to the row data
self.__in_cell = 0 self.__in_cell = 0
self.__row_data.append(self.__cell_data) self.__row_data.append(self.__cell_data)
self.brand_new_page = 0
def add_photo(self,name,pos,x,y): def add_photo(self,name,pos,x,y):
"""Add photo to report""" """Add photo to report."""
photo = GnomePrintPhoto(name,pos,x,y) photo = GnomePrintPhoto(name,pos,x,y)
if self.__in_cell: if self.__in_cell:
@@ -706,6 +706,7 @@ class LPRDoc(BaseDoc.BaseDoc):
self.__x, self.__y = self.write_photo(photo, self.__x, self.__y = self.write_photo(photo,
self.__x, self.__y, self.__x, self.__y,
self.right_margin - self.left_margin) self.right_margin - self.left_margin)
self.brand_new_page = 0
def write_photo(self,photo,x,y,width): def write_photo(self,photo,x,y,width):
""" """
@@ -716,6 +717,7 @@ class LPRDoc(BaseDoc.BaseDoc):
width - allocated width width - allocated width
""" """
self.brand_new_page = 0
# FIXME -- remove when gnome-python is released and hits every distro # FIXME -- remove when gnome-python is released and hits every distro
if not support_photos: if not support_photos:
return (x,y) return (x,y)
@@ -751,6 +753,7 @@ class LPRDoc(BaseDoc.BaseDoc):
def write_text(self,text): def write_text(self,text):
"""Add the text to the paragraph""" """Add the text to the paragraph"""
self.brand_new_page = 0
# Take care of superscript tags # Take care of superscript tags
super_count = text.count('<super>') super_count = text.count('<super>')
for num in range(super_count): for num in range(super_count):
@@ -769,6 +772,7 @@ class LPRDoc(BaseDoc.BaseDoc):
self.__paragraph_text = self.__paragraph_text + text self.__paragraph_text = self.__paragraph_text + text
def write_note(self,text,format,style_name): def write_note(self,text,format,style_name):
self.brand_new_page = 0
if format == 1: if format == 1:
for line in text.split('\n'): for line in text.split('\n'):
self.start_paragraph(style_name) self.start_paragraph(style_name)
@@ -785,8 +789,9 @@ class LPRDoc(BaseDoc.BaseDoc):
#function to help us advance a line #function to help us advance a line
def __advance_line(self,y,paragraph=None): def __advance_line(self,y,paragraph=None):
self.brand_new_page = 0
if paragraph: if paragraph:
spacing = paragraph.fontstyle.get_size() spacing = paragraph.fontstyle.get_size() * _EXTRA_SPACING_FACTOR
else: else:
spacing = _LINE_SPACING spacing = _LINE_SPACING
new_y = y - spacing new_y = y - spacing
@@ -807,6 +812,7 @@ class LPRDoc(BaseDoc.BaseDoc):
width - allocated width width - allocated width
""" """
self.brand_new_page = 0
if not paragraph.get_piece_list(): if not paragraph.get_piece_list():
return (x,y) return (x,y)
@@ -821,7 +827,7 @@ class LPRDoc(BaseDoc.BaseDoc):
no_space = 0 no_space = 0
first = 1 first = 1
if y - paragraph.fontstyle.get_size() < self.bottom_margin: if y - paragraph.fontstyle.get_size() * _EXTRA_SPACING_FACTOR < self.bottom_margin:
self.end_page() self.end_page()
self.start_page() self.start_page()
x = left_margin x = left_margin
@@ -841,13 +847,13 @@ class LPRDoc(BaseDoc.BaseDoc):
elif paragraph.get_alignment() == BaseDoc.PARA_ALIGN_LEFT: elif paragraph.get_alignment() == BaseDoc.PARA_ALIGN_LEFT:
pass pass
elif paragraph.get_alignment() == BaseDoc.PARA_ALIGN_JUSTIFY: elif paragraph.get_alignment() == BaseDoc.PARA_ALIGN_JUSTIFY:
print "Paragraph justification not supported." print "LPRDoc: Paragraph justification not supported."
print "Falling back to left-justified mode." print " Falling back to left-justified mode."
if first: if first:
first = 0 first = 0
x = x + cm2u(paragraph.style.get_first_indent()) x = x + cm2u(paragraph.style.get_first_indent())
y = y - paragraph.fontstyle.get_size() y = y - paragraph.fontstyle.get_size() * _EXTRA_SPACING_FACTOR
# Loop over pieces that constitute the line # Loop over pieces that constitute the line
for piece_num in range(start_piece,end_piece+1): for piece_num in range(start_piece,end_piece+1):
@@ -903,7 +909,8 @@ class LPRDoc(BaseDoc.BaseDoc):
return (x,y) return (x,y)
def __output_table(self): def __output_table(self):
"""do calcs on data in table and output data in a formatted way""" """Do calcs on data in table and output data in a formatted way."""
self.brand_new_page = 0
__min_col_size = [0] * self.__ncols __min_col_size = [0] * self.__ncols
__max_vspace = [0] * len(self.__table_data) __max_vspace = [0] * len(self.__table_data)
@@ -933,7 +940,7 @@ class LPRDoc(BaseDoc.BaseDoc):
__min_table_width = __min_table_width + __size __min_table_width = __min_table_width + __size
if __min_table_width > (self.right_margin - self.left_margin): if __min_table_width > (self.right_margin - self.left_margin):
print "Table does not fit onto the page.\n" print "LPRDoc: Table does not fit onto the page."
#for now we will assume left justification of tables #for now we will assume left justification of tables
#output data in table #output data in table
@@ -971,10 +978,12 @@ class LPRDoc(BaseDoc.BaseDoc):
#------------------------------------------------------------------------ #------------------------------------------------------------------------
def horizontal_line(self): def horizontal_line(self):
self.brand_new_page = 0
self.__pc.moveto(self.left_margin, self.__y) self.__pc.moveto(self.left_margin, self.__y)
self.__pc.lineto(self.right_margin, self.__y) self.__pc.lineto(self.right_margin, self.__y)
def draw_path(self,style,path): def draw_path(self,style,path):
self.brand_new_page = 0
stype = self.draw_styles[style] stype = self.draw_styles[style]
color = [ val/255.0 for val in stype.get_fill_color()] color = [ val/255.0 for val in stype.get_fill_color()]
@@ -1008,6 +1017,7 @@ class LPRDoc(BaseDoc.BaseDoc):
def draw_box(self,style,text,x,y): def draw_box(self,style,text,x,y):
#assuming that we start drawing box from current position #assuming that we start drawing box from current position
self.brand_new_page = 0
x = self.left_margin + cm2u(x) x = self.left_margin + cm2u(x)
y = self.top_margin - cm2u(y) y = self.top_margin - cm2u(y)
@@ -1023,16 +1033,17 @@ class LPRDoc(BaseDoc.BaseDoc):
if text: if text:
lines = text.split('\n') lines = text.split('\n')
start_x = x + 0.5 * fontstyle.get_size() start_x = x + 0.5 * fontstyle.get_size()
start_y = y - fontstyle.get_size() start_y = y - fontstyle.get_size() * _EXTRA_SPACING_FACTOR
for line in lines: for line in lines:
if not line.split(): if not line.split():
continue continue
self.__pc.setfont(find_font_from_fontstyle(fontstyle)) self.__pc.setfont(find_font_from_fontstyle(fontstyle))
self.__pc.moveto(start_x,start_y) self.__pc.moveto(start_x,start_y)
self.__pc.show(line) self.__pc.show(line)
start_y -= fontstyle.get_size() start_y -= fontstyle.get_size() * _EXTRA_SPACING_FACTOR
def write_at (self, style, text, x, y): def write_at (self, style, text, x, y):
self.brand_new_page = 0
para_style = self.style_list[style] para_style = self.style_list[style]
fontstyle = para_style.get_font() fontstyle = para_style.get_font()
@@ -1041,23 +1052,26 @@ class LPRDoc(BaseDoc.BaseDoc):
self.__pc.show(text) self.__pc.show(text)
def draw_bar(self, style, x1, y1, x2, y2): def draw_bar(self, style, x1, y1, x2, y2):
self.brand_new_page = 0
self.__pc.moveto(x1, y1) self.__pc.moveto(x1, y1)
self.__pc.lineto(x2, y2) self.__pc.lineto(x2, y2)
def draw_text(self,style,text,x,y): def draw_text(self,style,text,x,y):
self.brand_new_page = 0
box_style = self.draw_styles[style] box_style = self.draw_styles[style]
para_name = box_style.get_paragraph_style() para_name = box_style.get_paragraph_style()
para_style = self.style_list[para_name] para_style = self.style_list[para_name]
fontstyle = para_style.get_font() fontstyle = para_style.get_font()
start_x = self.left_margin + cm2u(x) start_x = self.left_margin + cm2u(x)
start_y = self.top_margin - cm2u(y) - fontstyle.get_size() start_y = self.top_margin - cm2u(y) - fontstyle.get_size() * _EXTRA_SPACING_FACTOR
self.__pc.setfont(find_font_from_fontstyle(fontstyle)) self.__pc.setfont(find_font_from_fontstyle(fontstyle))
self.__pc.moveto(start_x,start_y) self.__pc.moveto(start_x,start_y)
self.__pc.show(text) self.__pc.show(text)
def center_text(self,style,text,x,y): def center_text(self,style,text,x,y):
self.brand_new_page = 0
box_style = self.draw_styles[style] box_style = self.draw_styles[style]
para_name = box_style.get_paragraph_style() para_name = box_style.get_paragraph_style()
para_style = self.style_list[para_name] para_style = self.style_list[para_name]
@@ -1065,11 +1079,14 @@ class LPRDoc(BaseDoc.BaseDoc):
width = get_text_width(text,fontstyle) width = get_text_width(text,fontstyle)
start_x = self.left_margin + cm2u(x) - 0.5 * width start_x = self.left_margin + cm2u(x) - 0.5 * width
start_y = self.top_margin - cm2u(y) \
- fontstyle.get_size() * _EXTRA_SPACING_FACTOR
self.__pc.setfont(find_font_from_fontstyle(fontstyle)) self.__pc.setfont(find_font_from_fontstyle(fontstyle))
self.__pc.moveto(start_x, self.top_margin - cm2u(y) - fontstyle.get_size()) self.__pc.moveto(start_x, start_y)
self.__pc.show(text) self.__pc.show(text)
def rotate_text(self,style,text,x,y,angle): def rotate_text(self,style,text,x,y,angle):
self.brand_new_page = 0
# FIXME - remove when new gnome-python is in all distros # FIXME - remove when new gnome-python is in all distros
if not support_photos: if not support_photos:
return return
@@ -1096,11 +1113,12 @@ class LPRDoc(BaseDoc.BaseDoc):
self.__pc.setfont(find_font_from_fontstyle(fontstyle)) self.__pc.setfont(find_font_from_fontstyle(fontstyle))
self.__pc.moveto(this_x,this_y) self.__pc.moveto(this_x,this_y)
self.__pc.show(line) self.__pc.show(line)
this_y -= size this_y -= size * _EXTRA_SPACING_FACTOR
self.__pc.grestore() self.__pc.grestore()
def draw_line(self,style,x1,y1,x2,y2): def draw_line(self,style,x1,y1,x2,y2):
self.brand_new_page = 0
x1 = cm2u(x1) + self.left_margin x1 = cm2u(x1) + self.left_margin
x2 = cm2u(x2) + self.left_margin x2 = cm2u(x2) + self.left_margin
y1 = self.top_margin - cm2u(y1) y1 = self.top_margin - cm2u(y1)