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.
"""
self._rect = None
self._debug = 0
self._debug = True
self._right_margin = 64 # the amount of right indent
self._display_shadow_size_footer = 0
self._display_outline_size_footer = 0
@ -148,17 +148,22 @@ class Renderer(object):
def pre_render_text(self, text):
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
#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
ave_line_width = line_width / metrics.averageCharWidth()
#Maximum size of a character
max_char_width = metrics.maxWidth()
#Min size of a character
min_char_width = metrics.width(u'i')
char_per_line = line_width / min_char_width
#Max characters pre line based on min size of a character
char_per_line = line_width / metrics.width(u'i')
log.debug(u'Page Length area height %s , metrics %s , lines %s' %
(int(self._rect.height()), metrics.height(), page_length ))
split_pages = []
@ -221,6 +226,7 @@ class Renderer(object):
"""
self._rect = rect_main
self._rect_footer = rect_footer
print "render = ", self._rect
def generate_frame_from_lines(self, lines, footer_lines=None):
"""
@ -567,7 +573,7 @@ class Renderer(object):
x, y = tlcorner
metrics = QtGui.QFontMetrics(font)
w = metrics.width(line)
h = metrics.height() - 2
h = metrics.height()
if draw:
self.painter.drawText(x, y + metrics.ascent(), line)
if self._theme.display_slideTransition:

View File

@ -160,8 +160,8 @@ class RenderManager(object):
def build_text_rectangle(self, theme):
"""
Builds a text block using the settings in ``theme``.
One is needed per slide
Builds a text block using the settings in ``theme``
and the size of the display screen.height.
``theme``
The theme to build a text block for.
@ -170,14 +170,14 @@ class RenderManager(object):
main_rect = None
footer_rect = None
if not theme.font_main_override:
main_rect = QtCore.QRect(10, 0, self.width - 1,
self.footer_start - 20)
main_rect = QtCore.QRect(10, 0,
self.width - 1, self.footer_start)
else:
main_rect = QtCore.QRect(theme.font_main_x, theme.font_main_y,
theme.font_main_width - 1, theme.font_main_height - 1)
if not theme.font_footer_override:
footer_rect = QtCore.QRect(10, self.footer_start, self.width - 1,
self.height-self.footer_start)
footer_rect = QtCore.QRect(10, self.footer_start,
self.width - 1, self.height - self.footer_start)
else:
footer_rect = QtCore.QRect(theme.font_footer_x,
theme.font_footer_y, theme.font_footer_width - 1,
@ -192,7 +192,7 @@ class RenderManager(object):
The theme to generated a preview for.
"""
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.renderer.set_theme(themedata)
self.build_text_rectangle(themedata)

View File

@ -102,11 +102,13 @@ class ServiceItem(object):
formated = self.RenderManager.format_slide(slide[u'raw_slide'])
for format in formated:
lines = u''
title = u''
for line in format:
if title == u'':
title = line
lines += line + u'\n'
title = lines.split(u'\n')[0]
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))
elif self.service_item_type == ServiceItemType.Image:
for slide in self._raw_frames:

View File

@ -694,8 +694,14 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
if self.allowPreview:
#calculate main number of rows
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 = \
(self.FontMainHeightSpinBox.value() / metrics.height() - 2) - 1
((self.FontMainHeightSpinBox.value()) / line_height )
log.debug(u'Page Length area height %s, metrics %s, lines %s' %
(self.FontMainHeightSpinBox.value(), metrics.height(),
page_length))
@ -719,4 +725,4 @@ class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
if 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)
return metrics
return metrics

View File

@ -139,6 +139,7 @@ class MainDisplay(DisplayWidget):
@param (integer) screen This is the screen number.
"""
log.debug(u'Setup %s for %s ' %(self.screens, screenNumber))
print "all the screen ", self.screens
self.setVisible(False)
self.screen = self.screens[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
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'])
print "main geom after ", self.geometry()
print "display geom", self.display.geometry()
self.alertScreenPosition = self.screen[u'size'].height() * 0.9
self.alertHeight = self.screen[u'size'].height() - self.alertScreenPosition
self.alertDisplay.setGeometry(
@ -221,6 +227,7 @@ class MainDisplay(DisplayWidget):
elif not self.displayBlank:
if transition:
if self.hasTransition:
print len(self.frame[u'trans'])
if self.frame[u'trans'] is not None:
self.display.setPixmap(QtGui.QPixmap.fromImage(self.frame[u'trans']))
self.repaint()

View File

@ -614,6 +614,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
self.settingsForm.exec_()
updated_display = self.getMonitorNumber()
if updated_display != self.RenderManager.current_display:
print "main display screen changed to ", updated_display
self.RenderManager.update_display(updated_display)
self.mainDisplay.setup(updated_display)
self.activateWindow()
@ -704,4 +705,4 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def togglePreviewPanel(self):
previewBool = self.PreviewController.Panel.isVisible()
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.onSongBarHandler)
item.setText(frame[u'text'])
#print {u'x':frame[u'text']}
else:
label = QtGui.QLabel()
label.setMargin(4)