← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~trb143/openlp/renderer into lp:openlp

 

Tim Bentley has proposed merging lp:~trb143/openlp/renderer into lp:openlp.

    Requested reviews:
    OpenLP Core (openlp-core)


2nd attempt to get the Gushie proof renderer changes in.
-- 
https://code.launchpad.net/~trb143/openlp/renderer/+merge/15122
Your team OpenLP Core is subscribed to branch lp:openlp.
=== modified file 'openlp/core/lib/renderer.py'
--- openlp/core/lib/renderer.py	2009-11-04 01:16:15 +0000
+++ openlp/core/lib/renderer.py	2009-11-21 15:40:25 +0000
@@ -168,35 +168,45 @@
         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
+        #Average number of characters in line
         ave_line_width = line_width / metrics.averageCharWidth()
-        ave_line_width = int(ave_line_width + (ave_line_width * 1))
+        #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
         log.debug(u'Page Length  area height %s , metrics %s , lines %s' %
                   (int(self._rect.height()), metrics.height(), page_length ))
         split_pages = []
         page = []
         split_lines = []
+        count = 0
         for line in text:
             #Must be a blank line so keep it.
             if len(line) == 0:
                 line = u' '
             while len(line) > 0:
-                if len(line) > ave_line_width:
-                    pos = line.find(u' ', ave_line_width)
-                    split_text = line[:pos]
-                else:
-                    pos = len(line)
-                    split_text = line
-                while metrics.width(split_text, -1) > line_width:
-                    #Find the next space to the left
-                    pos = line[:pos].rfind(u' ')
-                    #no more spaces found
-                    if pos == 0:
-                        split_text = line
+                pos = char_per_line
+                split_text = line[:pos]
+                #line needs splitting
+                if metrics.width(split_text, -1) > line_width:
+                    #We have no spaces
+                    if split_text.find(u' ') == -1:
+                        #Move back 1 char at a time till it fits
                         while metrics.width(split_text, -1) > line_width:
                             split_text = split_text[:-1]
-                        pos = len(split_text)
+                            pos = len(split_text)
                     else:
-                        split_text = line[:pos]
+                        #We have spaces so split at previous one
+                        while metrics.width(split_text, -1) > line_width:
+                            pos = split_text.rfind(u' ')
+                            #no more spaces and we are still too long
+                            if pos == -1:
+                                while metrics.width(split_text, -1) > line_width:
+                                    split_text = split_text[:-1]
+                                    pos = len(split_text)
+                            else:
+                                split_text = line[:pos]
                 split_lines.append(split_text)
                 line = line[pos:].lstrip()
                 #if we have more text add up to 10 spaces on the front.
@@ -450,32 +460,32 @@
                         draw=True, color = self._theme.display_shadow_color)
                 if self._theme.display_outline:
                     self._get_extent_and_render(line, footer,
-                        (x+self._outline_offset, y), draw=True,
-                        color = self._theme.display_outline_color)
-                    self._get_extent_and_render(line, footer,
-                        (x, y+self._outline_offset), draw=True,
-                        color = self._theme.display_outline_color)
-                    self._get_extent_and_render(line, footer,
-                        (x, y-self._outline_offset), draw=True,
-                        color = self._theme.display_outline_color)
-                    self._get_extent_and_render(line, footer,
-                        (x-self._outline_offset, y), draw=True,
+                        (x + self._outline_offset, y), draw=True,
+                        color = self._theme.display_outline_color)
+                    self._get_extent_and_render(line, footer,
+                        (x, y + self._outline_offset), draw=True,
+                        color = self._theme.display_outline_color)
+                    self._get_extent_and_render(line, footer,
+                        (x, y - self._outline_offset), draw=True,
+                        color = self._theme.display_outline_color)
+                    self._get_extent_and_render(line, footer,
+                        (x - self._outline_offset, y), draw=True,
                         color = self._theme.display_outline_color)
                     if self._outline_offset > 1:
                         self._get_extent_and_render(line, footer,
-                            (x+self._outline_offset, y+self._outline_offset),
-                            draw=True,
-                            color = self._theme.display_outline_color)
-                        self._get_extent_and_render(line, footer,
-                            (x-self._outline_offset, y+self._outline_offset),
-                            draw=True,
-                            color = self._theme.display_outline_color)
-                        self._get_extent_and_render(line, footer,
-                            (x+self._outline_offset, y-self._outline_offset),
-                            draw=True,
-                            color = self._theme.display_outline_color)
-                        self._get_extent_and_render(line, footer,
-                            (x-self._outline_offset, y-self._outline_offset),
+                            (x + self._outline_offset, y + self._outline_offset),
+                            draw=True,
+                            color = self._theme.display_outline_color)
+                        self._get_extent_and_render(line, footer,
+                            (x - self._outline_offset, y + self._outline_offset),
+                            draw=True,
+                            color = self._theme.display_outline_color)
+                        self._get_extent_and_render(line, footer,
+                            (x + self._outline_offset, y - self._outline_offset),
+                            draw=True,
+                            color = self._theme.display_outline_color)
+                        self._get_extent_and_render(line, footer,
+                            (x - self._outline_offset, y - self._outline_offset),
                             draw=True,
                             color = self._theme.display_outline_color)
                 self._get_extent_and_render(line, footer,tlcorner=(x, y),

=== modified file 'openlp/core/ui/amendthemeform.py'
--- openlp/core/ui/amendthemeform.py	2009-11-06 09:52:04 +0000
+++ openlp/core/ui/amendthemeform.py	2009-11-21 15:40:25 +0000
@@ -189,21 +189,21 @@
         self.allowPreview = False
         self.paintUi(self.theme)
         self.allowPreview = True
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onImageToolButtonClicked(self):
         filename = QtGui.QFileDialog.getOpenFileName(
-            self, self.trUtf8(u'Open file'))
+            self, self.trUtf8('Open file'))
         if filename:
             self.ImageLineEdit.setText(filename)
             self.theme.background_filename = filename
-            self.previewTheme(self.theme)
+            self.previewTheme()
     #
     #Main Font Tab
     #
     def onFontMainComboBoxSelected(self):
         self.theme.font_main_name = self.FontMainComboBox.currentFont().family()
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onFontMainWeightComboBoxSelected(self, value):
         if value == 0:
@@ -218,7 +218,7 @@
         else:
             self.theme.font_main_weight = u'Bold'
             self.theme.font_main_italics = True
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onFontMainColorPushButtonClicked(self):
         self.theme.font_main_color = QtGui.QColorDialog.getColor(
@@ -226,12 +226,12 @@
 
         self.FontMainColorPushButton.setStyleSheet(
             u'background-color: %s' % unicode(self.theme.font_main_color))
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onFontMainSizeSpinBoxChanged(self):
         if self.theme.font_main_proportion != self.FontMainSizeSpinBox.value():
             self.theme.font_main_proportion = self.FontMainSizeSpinBox.value()
-            self.previewTheme(self.theme)
+            self.previewTheme()
 
     def onFontMainDefaultCheckBoxChanged(self, value):
         if value == 2:  # checked
@@ -252,41 +252,41 @@
             self.FontMainLineSpacingSpinBox.setValue(
                 self.theme.font_main_indentation)
         self.stateChanging(self.theme)
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onFontMainXSpinBoxChanged(self):
         if self.theme.font_main_x != self.FontMainXSpinBox.value():
             self.theme.font_main_x = self.FontMainXSpinBox.value()
-            self.previewTheme(self.theme)
+            self.previewTheme()
 
     def onFontMainYSpinBoxChanged(self):
         if self.theme.font_main_y != self.FontMainYSpinBox.value():
             self.theme.font_main_y = self.FontMainYSpinBox.value()
-            self.previewTheme(self.theme)
+            self.previewTheme()
 
     def onFontMainWidthSpinBoxChanged(self):
         if self.theme.font_main_width != self.FontMainWidthSpinBox.value():
             self.theme.font_main_width = self.FontMainWidthSpinBox.value()
-            self.previewTheme(self.theme)
+            self.previewTheme()
 
     def onFontMainLineSpacingSpinBoxChanged(self):
         if self.theme.font_main_indentation != \
             self.FontMainLineSpacingSpinBox.value():
             self.theme.font_main_indentation = \
                 self.FontMainLineSpacingSpinBox.value()
-            self.previewTheme(self.theme)
+            self.previewTheme()
 
     def onFontMainHeightSpinBoxChanged(self):
         if self.theme.font_main_height != self.FontMainHeightSpinBox.value():
             self.theme.font_main_height = self.FontMainHeightSpinBox.value()
-            self.previewTheme(self.theme)
+            self.previewTheme()
     #
     #Footer Font Tab
     #
     def onFontFooterComboBoxSelected(self):
         self.theme.font_footer_name = \
             self.FontFooterComboBox.currentFont().family()
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onFontFooterWeightComboBoxSelected(self, value):
         if value == 0:
@@ -301,22 +301,21 @@
         else:
             self.theme.font_footer_weight = u'Bold'
             self.theme.font_footer_italics = True
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onFontFooterColorPushButtonClicked(self):
         self.theme.font_footer_color = QtGui.QColorDialog.getColor(
             QtGui.QColor(self.theme.font_footer_color), self).name()
-
         self.FontFooterColorPushButton.setStyleSheet(
             'background-color: %s' % unicode(self.theme.font_footer_color))
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onFontFooterSizeSpinBoxChanged(self):
         if self.theme.font_footer_proportion != \
             self.FontFooterSizeSpinBox.value():
             self.theme.font_footer_proportion = \
                 self.FontFooterSizeSpinBox.value()
-            self.previewTheme(self.theme)
+            self.previewTheme()
 
     def onFontFooterDefaultCheckBoxChanged(self, value):
         if value == 2:  # checked
@@ -336,29 +335,29 @@
             self.FontFooterHeightSpinBox.setValue(
                 self.theme.font_footer_height)
         self.stateChanging(self.theme)
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onFontFooterXSpinBoxChanged(self):
         if self.theme.font_footer_x != self.FontFooterXSpinBox.value():
             self.theme.font_footer_x = self.FontFooterXSpinBox.value()
-            self.previewTheme(self.theme)
+            self.previewTheme()
 
     def onFontFooterYSpinBoxChanged(self):
         if self.theme.font_footer_y != self.FontFooterYSpinBox.value():
             self.theme.font_footer_y = self.FontFooterYSpinBox.value()
-            self.previewTheme(self.theme)
+            self.previewTheme()
 
     def onFontFooterWidthSpinBoxChanged(self):
         if self.theme.font_footer_width != self.FontFooterWidthSpinBox.value():
             self.theme.font_footer_width = self.FontFooterWidthSpinBox.value()
-            self.previewTheme(self.theme)
+            self.previewTheme()
 
     def onFontFooterHeightSpinBoxChanged(self):
         if self.theme.font_footer_height != \
             self.FontFooterHeightSpinBox.value():
             self.theme.font_footer_height = \
                 self.FontFooterHeightSpinBox.value()
-            self.previewTheme(self.theme)
+            self.previewTheme()
     #
     #Background Tab
     #
@@ -372,7 +371,7 @@
         else:
             self.theme.background_mode = u'transparent'
         self.stateChanging(self.theme)
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onBackgroundTypeComboBoxSelected(self, currentIndex):
         self.setBackground(currentIndex, self.GradientComboBox.currentIndex())
@@ -397,7 +396,7 @@
         else:
             self.theme.background_type = u'image'
         self.stateChanging(self.theme)
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onColor1PushButtonClicked(self):
         if self.theme.background_type == u'solid':
@@ -412,14 +411,14 @@
                 u'background-color: %s' % \
                     unicode(self.theme.background_startColor))
 
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onColor2PushButtonClicked(self):
         self.theme.background_endColor = QtGui.QColorDialog.getColor(
             QtGui.QColor(self.theme.background_endColor), self).name()
         self.Color2PushButton.setStyleSheet(
             u'background-color: %s' % unicode(self.theme.background_endColor))
-        self.previewTheme(self.theme)
+        self.previewTheme()
     #
     #Other Tab
     #
@@ -429,14 +428,14 @@
         else:
             self.theme.display_outline = False
         self.stateChanging(self.theme)
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onOutlineColorPushButtonClicked(self):
         self.theme.display_outline_color = QtGui.QColorDialog.getColor(
             QtGui.QColor(self.theme.display_outline_color), self).name()
         self.OutlineColorPushButton.setStyleSheet(
             u'background-color: %s' % unicode(self.theme.display_outline_color))
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onShadowCheckBoxChanged(self, value):
         if value == 2:  # checked
@@ -444,24 +443,24 @@
         else:
             self.theme.display_shadow = False
         self.stateChanging(self.theme)
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onShadowColorPushButtonClicked(self):
         self.theme.display_shadow_color = QtGui.QColorDialog.getColor(
             QtGui.QColor(self.theme.display_shadow_color), self).name()
         self.ShadowColorPushButton.setStyleSheet(
             u'background-color: %s' % unicode(self.theme.display_shadow_color))
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onHorizontalComboBoxSelected(self, currentIndex):
         self.theme.display_horizontalAlign = currentIndex
         self.stateChanging(self.theme)
-        self.previewTheme(self.theme)
+        self.previewTheme()
 
     def onVerticalComboBoxSelected(self, currentIndex):
         self.theme.display_verticalAlign = currentIndex
         self.stateChanging(self.theme)
-        self.previewTheme(self.theme)
+        self.previewTheme()
     #
     #Local Methods
     #
@@ -654,18 +653,10 @@
         else:
             self.ShadowColorPushButton.setEnabled(False)
 
-    def previewTheme(self, theme):
+    def previewTheme(self):
         if self.allowPreview:
             #calculate main number of rows
-            main_weight = 50
-            if self.theme.font_main_weight == u'Bold':
-                main_weight = 75
-            mainFont = QtGui.QFont(self.theme.font_main_name,
-                         self.theme.font_main_proportion, # size
-                         main_weight, # weight
-                         self.theme.font_main_italics)# italic
-            mainFont.setPixelSize(self.theme.font_main_proportion)
-            metrics = QtGui.QFontMetrics(mainFont)
+            metrics = self._getThemeMetrics()
             page_length = \
                 (self.FontMainHeightSpinBox.value() / metrics.height() - 2) - 1
             log.debug(u'Page Length area height %s, metrics %s, lines %s' %
@@ -673,6 +664,22 @@
                 page_length))
             page_length_text = unicode(self.trUtf8(u'Slide Height is %s rows'))
             self.FontMainLinesPageLabel.setText(page_length_text % page_length)
-            frame = self.thememanager.generateImage(theme)
+            #a=c
+            frame = self.thememanager.generateImage(self.theme)
             self.ThemePreview.setPixmap(QtGui.QPixmap.fromImage(frame))
 
+    def _getThemeMetrics(self):
+        main_weight = 50
+        if self.theme.font_main_weight == u'Bold':
+            main_weight = 75
+        mainFont = QtGui.QFont(self.theme.font_main_name,
+                     self.theme.font_main_proportion, # size
+                     main_weight, # weight
+                     self.theme.font_main_italics)# italic
+        mainFont.setPixelSize(self.theme.font_main_proportion)
+        metrics = QtGui.QFontMetrics(mainFont)
+        #Validate that the screen width is big enough to display the text
+        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

=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py	2009-11-12 17:18:30 +0000
+++ openlp/core/ui/mainwindow.py	2009-11-21 15:40:25 +0000
@@ -584,7 +584,7 @@
                 self.trUtf8(u'The Main Display has been blanked out'),
                 QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Ok),
                 QtGui.QMessageBox.Ok)
-            self.LiveController.blackPushButton.setChecked(True)
+            #self.LiveController.blackPushButton.setChecked(True)
 
     def onHelpAboutItemClicked(self):
         """


Follow ups