diff options
Diffstat (limited to 'Lib/defconQt/metricsWindow.py')
| -rw-r--r-- | Lib/defconQt/metricsWindow.py | 54 | 
1 files changed, 38 insertions, 16 deletions
| diff --git a/Lib/defconQt/metricsWindow.py b/Lib/defconQt/metricsWindow.py index 04ebfbb..9314916 100644 --- a/Lib/defconQt/metricsWindow.py +++ b/Lib/defconQt/metricsWindow.py @@ -371,6 +371,7 @@ class GlyphsCanvas(QWidget):      def setShowKerning(self, showKerning):          self._showKerning = showKerning +        self.adjustSize()          self.update()      def setShowMetrics(self, showMetrics): @@ -383,19 +384,19 @@ class GlyphsCanvas(QWidget):      def setLineHeight(self, lineHeight):          self._lineHeight = lineHeight +        self.adjustSize()          self.update()      def setWrapLines(self, wrapLines):          if self._wrapLines == wrapLines:              return          self._wrapLines = wrapLines +        self.adjustSize()          if self._wrapLines: -            self.resize(self._scrollArea.viewport().width(), self.height())              self._scrollArea.setHorizontalScrollBarPolicy(                  Qt.ScrollBarAlwaysOff)              self._scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)          else: -            self.resize(self.width(), self._scrollArea.viewport().height())              self._scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)              self._scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)          self.update() @@ -414,11 +415,13 @@ class GlyphsCanvas(QWidget):      def setGlyphs(self, newGlyphs):          self.glyphs = newGlyphs          self._selected = None +        self.adjustSize()          self.update()      def setPointSize(self, pointSize):          self.ptSize = int(pointSize)          self.calculateScale() +        self.adjustSize()          self.update()      def setSelected(self, selected): @@ -440,6 +443,39 @@ class GlyphsCanvas(QWidget):                      .5 * self.ptSize * self._lineHeight + 20)          self.update() +    def _calcPaintWidthHeight(self): +        cur_width = 0 +        lines = 1 +        self._positions = [[]] +        for index, glyph in enumerate(self.glyphs): +            # line wrapping +            gWidth = glyph.width * self.scale +            doKern = index > 0 and self._showKerning and cur_width > 0 +            if doKern: +                kern = self.lookupKerningValue( +                    self.glyphs[index - 1].name, glyph.name) * self.scale +            else: +                kern = 0 +            if (self._wrapLines and cur_width + gWidth + kern + +                    2 * self.padding > self.width()) or glyph.unicode == 2029: +                self._positions.append([(0, gWidth)]) +                cur_width = gWidth +                lines += 1 +            else: +                self._positions[-1].append((cur_width, gWidth)) +                cur_width += gWidth + kern + +        return (cur_width + self.padding * 2, +                lines * self.ptSize * self._lineHeight + 2 * self.padding) + +    def sizeHint(self): +        innerWidth = self._scrollArea.viewport().width() +        innerHeight = self._scrollArea.viewport().height() +        paintWidth, paintHeight = self._calcPaintWidthHeight() +        return QSize( +            max(innerWidth, paintWidth), +            max(innerHeight, paintHeight)) +      def resizeEvent(self, event):          if self._wrapLines:              self.resize(self._scrollArea.viewport().width(), self.height()) @@ -614,8 +650,6 @@ class GlyphsCanvas(QWidget):          # TODO: scale painter here to avoid g*scale everywhere below          cur_width = 0 -        lines = 1 -        self._positions = [[]]          if self._showMetrics:              paintLineMarks(painter)          for index, glyph in enumerate(self.glyphs): @@ -632,13 +666,10 @@ class GlyphsCanvas(QWidget):                  painter.translate(-cur_width, self.ptSize * self._lineHeight)                  if self._showMetrics:                      paintLineMarks(painter) -                self._positions.append([(0, gWidth)])                  cur_width = gWidth -                lines += 1              else:                  if doKern:                      painter.translate(kern, 0) -                self._positions[-1].append((cur_width, gWidth))                  cur_width += gWidth + kern              glyphPath = glyph.getRepresentation("defconQt.QPainterPath")              painter.save() @@ -654,15 +685,6 @@ class GlyphsCanvas(QWidget):              painter.restore()              painter.translate(gWidth, 0) -        innerHeight = self._scrollArea.viewport().height() -        if not self._wrapLines: -            innerWidth = self._scrollArea.viewport().width() -            width = max(innerWidth, cur_width + self.padding * 2) -        else: -            width = self.width() -        self.resize(width, max(innerHeight, lines * self.ptSize * -                               self._lineHeight + 2 * self.padding)) -  class SpaceTableWidgetItem(QTableWidgetItem): | 
