fix screen lines calcs so they are correct.

Prints added for rendering size diagnostics.
This commit is contained in:
Tim Bentley 2010-01-10 11:49:04 +00:00
parent 6ef3f6aadc
commit ee8a92b77f
7 changed files with 42 additions and 19 deletions

View File

@ -42,7 +42,7 @@ class Renderer(object):
Initialise the renderer. Initialise the renderer.
""" """
self._rect = None self._rect = None
self._debug = 0 self._debug = True
self._right_margin = 64 # the amount of right indent self._right_margin = 64 # the amount of right indent
self._display_shadow_size_footer = 0 self._display_shadow_size_footer = 0
self._display_outline_size_footer = 0 self._display_outline_size_footer = 0
@ -148,17 +148,22 @@ class Renderer(object):
def pre_render_text(self, text): def pre_render_text(self, text):
metrics = QtGui.QFontMetrics(self.mainFont) metrics = QtGui.QFontMetrics(self.mainFont)
#take the width work out approx how many characters and add 50% #work out line width
line_width = self._rect.width() - self._right_margin line_width = self._rect.width() - self._right_margin
#number of lines on a page - adjust for rounding up. #number of lines on a page - adjust for rounding up.
page_length = int(self._rect.height() / metrics.height() - 2 ) - 1 line_height = metrics.height()
if self._theme.display_shadow:
line_height += int(self._theme.display_shadow_size)
if self._theme.display_outline:
# pixels top/bottom
line_height += 2 * int(self._theme.display_outline_size)
page_length = int(self._rect.height() / line_height )
#Average number of characters in line #Average number of characters in line
ave_line_width = line_width / metrics.averageCharWidth() ave_line_width = line_width / metrics.averageCharWidth()
#Maximum size of a character #Maximum size of a character
max_char_width = metrics.maxWidth() max_char_width = metrics.maxWidth()
#Min size of a character #Max characters pre line based on min size of a character
min_char_width = metrics.width(u'i') char_per_line = line_width / metrics.width(u'i')
char_per_line = line_width / min_char_width
log.debug(u'Page Length area height %s , metrics %s , lines %s' % log.debug(u'Page Length area height %s , metrics %s , lines %s' %
(int(self._rect.height()), metrics.height(), page_length )) (int(self._rect.height()), metrics.height(), page_length ))
split_pages = [] split_pages = []
@ -221,6 +226,7 @@ class Renderer(object):
""" """
self._rect = rect_main self._rect = rect_main
self._rect_footer = rect_footer self._rect_footer = rect_footer
print "render = ", self._rect
def generate_frame_from_lines(self, lines, footer_lines=None): def generate_frame_from_lines(self, lines, footer_lines=None):
""" """
@ -567,7 +573,7 @@ class Renderer(object):
x, y = tlcorner x, y = tlcorner
metrics = QtGui.QFontMetrics(font) metrics = QtGui.QFontMetrics(font)
w = metrics.width(line) w = metrics.width(line)
h = metrics.height() - 2 h = metrics.height()
if draw: if draw:
self.painter.drawText(x, y + metrics.ascent(), line) self.painter.drawText(x, y + metrics.ascent(), line)
if self._theme.display_slideTransition: if self._theme.display_slideTransition:

View File

@ -160,8 +160,8 @@ class RenderManager(object):
def build_text_rectangle(self, theme): def build_text_rectangle(self, theme):
""" """
Builds a text block using the settings in ``theme``. Builds a text block using the settings in ``theme``
One is needed per slide and the size of the display screen.height.
``theme`` ``theme``
The theme to build a text block for. The theme to build a text block for.
@ -170,14 +170,14 @@ class RenderManager(object):
main_rect = None main_rect = None
footer_rect = None footer_rect = None
if not theme.font_main_override: if not theme.font_main_override:
main_rect = QtCore.QRect(10, 0, self.width - 1, main_rect = QtCore.QRect(10, 0,
self.footer_start - 20) self.width - 1, self.footer_start)
else: else:
main_rect = QtCore.QRect(theme.font_main_x, theme.font_main_y, main_rect = QtCore.QRect(theme.font_main_x, theme.font_main_y,
theme.font_main_width - 1, theme.font_main_height - 1) theme.font_main_width - 1, theme.font_main_height - 1)
if not theme.font_footer_override: if not theme.font_footer_override:
footer_rect = QtCore.QRect(10, self.footer_start, self.width - 1, footer_rect = QtCore.QRect(10, self.footer_start,
self.height-self.footer_start) self.width - 1, self.height - self.footer_start)
else: else:
footer_rect = QtCore.QRect(theme.font_footer_x, footer_rect = QtCore.QRect(theme.font_footer_x,
theme.font_footer_y, theme.font_footer_width - 1, theme.font_footer_y, theme.font_footer_width - 1,
@ -192,7 +192,7 @@ class RenderManager(object):
The theme to generated a preview for. The theme to generated a preview for.
""" """
log.debug(u'generate preview') log.debug(u'generate preview')
#set the defaukt image size for previews #set the default image size for previews
self.calculate_default(QtCore.QSize(1024, 768)) self.calculate_default(QtCore.QSize(1024, 768))
self.renderer.set_theme(themedata) self.renderer.set_theme(themedata)
self.build_text_rectangle(themedata) self.build_text_rectangle(themedata)

View File

@ -102,11 +102,13 @@ class ServiceItem(object):
formated = self.RenderManager.format_slide(slide[u'raw_slide']) formated = self.RenderManager.format_slide(slide[u'raw_slide'])
for format in formated: for format in formated:
lines = u'' lines = u''
title = u''
for line in format: for line in format:
if title == u'':
title = line
lines += line + u'\n' lines += line + u'\n'
title = lines.split(u'\n')[0]
self._display_frames.append({u'title': title, \ self._display_frames.append({u'title': title, \
u'text': lines, u'verseTag': slide[u'verseTag'] }) u'text': lines.rstrip(), u'verseTag': slide[u'verseTag'] })
log.log(15, u'Formatting took %4s' % (time.time() - before)) log.log(15, u'Formatting took %4s' % (time.time() - before))
elif self.service_item_type == ServiceItemType.Image: elif self.service_item_type == ServiceItemType.Image:
for slide in self._raw_frames: for slide in self._raw_frames:

View File

@ -694,8 +694,14 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
if self.allowPreview: if self.allowPreview:
#calculate main number of rows #calculate main number of rows
metrics = self._getThemeMetrics() metrics = self._getThemeMetrics()
line_height = metrics.height()
if self.theme.display_shadow:
line_height += int(self.theme.display_shadow_size)
if self.theme.display_outline:
# pixels top/bottom
line_height += 2 * int(self.theme.display_outline_size)
page_length = \ page_length = \
(self.FontMainHeightSpinBox.value() / metrics.height() - 2) - 1 ((self.FontMainHeightSpinBox.value()) / line_height )
log.debug(u'Page Length area height %s, metrics %s, lines %s' % log.debug(u'Page Length area height %s, metrics %s, lines %s' %
(self.FontMainHeightSpinBox.value(), metrics.height(), (self.FontMainHeightSpinBox.value(), metrics.height(),
page_length)) page_length))
@ -719,4 +725,4 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
if self.theme.font_main_width < metrics.maxWidth() * 2 + 64: if self.theme.font_main_width < metrics.maxWidth() * 2 + 64:
self.theme.font_main_width = metrics.maxWidth() * 2 + 64 self.theme.font_main_width = metrics.maxWidth() * 2 + 64
self.FontMainWidthSpinBox.setValue(self.theme.font_main_width) self.FontMainWidthSpinBox.setValue(self.theme.font_main_width)
return metrics return metrics

View File

@ -139,6 +139,7 @@ class MainDisplay(DisplayWidget):
@param (integer) screen This is the screen number. @param (integer) screen This is the screen number.
""" """
log.debug(u'Setup %s for %s ' %(self.screens, screenNumber)) log.debug(u'Setup %s for %s ' %(self.screens, screenNumber))
print "all the screen ", self.screens
self.setVisible(False) self.setVisible(False)
self.screen = self.screens[screenNumber] self.screen = self.screens[screenNumber]
if self.screen[u'number'] != screenNumber: if self.screen[u'number'] != screenNumber:
@ -190,7 +191,12 @@ class MainDisplay(DisplayWidget):
The alert displays are set to 10% of the screen as the video display The alert displays are set to 10% of the screen as the video display
is unable to handle transparent pixmaps. This is a problem with QT. is unable to handle transparent pixmaps. This is a problem with QT.
""" """
print "--------- Set screen geom ------------"
print "display ", self.screen[u'size']
print "main geom before ", self.geometry()
self.setGeometry(self.screen[u'size']) self.setGeometry(self.screen[u'size'])
print "main geom after ", self.geometry()
print "display geom", self.display.geometry()
self.alertScreenPosition = self.screen[u'size'].height() * 0.9 self.alertScreenPosition = self.screen[u'size'].height() * 0.9
self.alertHeight = self.screen[u'size'].height() - self.alertScreenPosition self.alertHeight = self.screen[u'size'].height() - self.alertScreenPosition
self.alertDisplay.setGeometry( self.alertDisplay.setGeometry(
@ -221,6 +227,7 @@ class MainDisplay(DisplayWidget):
elif not self.displayBlank: elif not self.displayBlank:
if transition: if transition:
if self.hasTransition: if self.hasTransition:
print len(self.frame[u'trans'])
if self.frame[u'trans'] is not None: if self.frame[u'trans'] is not None:
self.display.setPixmap(QtGui.QPixmap.fromImage(self.frame[u'trans'])) self.display.setPixmap(QtGui.QPixmap.fromImage(self.frame[u'trans']))
self.repaint() self.repaint()

View File

@ -614,6 +614,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
self.settingsForm.exec_() self.settingsForm.exec_()
updated_display = self.getMonitorNumber() updated_display = self.getMonitorNumber()
if updated_display != self.RenderManager.current_display: if updated_display != self.RenderManager.current_display:
print "main display screen changed to ", updated_display
self.RenderManager.update_display(updated_display) self.RenderManager.update_display(updated_display)
self.mainDisplay.setup(updated_display) self.mainDisplay.setup(updated_display)
self.activateWindow() self.activateWindow()
@ -704,4 +705,4 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def togglePreviewPanel(self): def togglePreviewPanel(self):
previewBool = self.PreviewController.Panel.isVisible() previewBool = self.PreviewController.Panel.isVisible()
self.PreviewController.Panel.setVisible(not previewBool) self.PreviewController.Panel.setVisible(not previewBool)
self.settingsmanager.togglePreviewPanel(not previewBool) self.settingsmanager.togglePreviewPanel(not previewBool)

View File

@ -441,6 +441,7 @@ class SlideController(QtGui.QWidget):
self.SongMenu.menu().addAction(self.trUtf8(u'%s'%tag), self.SongMenu.menu().addAction(self.trUtf8(u'%s'%tag),
self.onSongBarHandler) self.onSongBarHandler)
item.setText(frame[u'text']) item.setText(frame[u'text'])
#print {u'x':frame[u'text']}
else: else:
label = QtGui.QLabel() label = QtGui.QLabel()
label.setMargin(4) label.setMargin(4)