def initialize(self, editor): SideBarWidgetAddon.initialize(self, editor) self.background = self.editor.colours['gutter'] if 'gutter' in self.editor.colours else self.editor.colours['background'] self.foreground = self.editor.colours["foreground"] self.normalFont = QtGui.QFont(self.editor.font) self.boldFont = QtGui.QFont(self.editor.font) self.boldFont.setBold(True) self.normalMetrics = QtGui.QFontMetrics(self.normalFont) self.boldMetrics = QtGui.QFontMetrics(self.boldFont) self.setFixedWidth(self.boldMetrics.width("#") + self.MARGIN * 2) self.editor.blockCountChanged.connect(self.updateWidth) self.editor.themeChanged.connect(self.updateColours)
def paintEvent(self, event): font_metrics = QtGui.QFontMetrics(self.editor.font) page_bottom = self.editor.viewport().height() lineHeight = font_metrics.height() scrollBar = self.editor.verticalScrollBar() if scrollBar.isVisible(): rectRelation = float(scrollBar.height()) / float(self.editor.document().blockCount()) else: rectRelation = lineHeight rectHeight = round(rectRelation) if rectRelation >= 1 else 1 painter = QtGui.QPainter(self) painter.fillRect(self.rect(), self.background) viewport_offset = self.editor.contentOffset() for extra in self.editor.searchExtraSelections("selection"): y = round(extra.cursor.block().blockNumber() * rectRelation) if rectRelation == lineHeight: y += viewport_offset.y() painter.fillRect(0, y, 10, rectHeight, self.editor.colours['selection']) painter.end() QtGui.QWidget.paintEvent(self, event)
def paintEvent(self, event): font_metrics = QtGui.QFontMetrics(self.editor.font) page_bottom = self.editor.viewport().height() painter = QtGui.QPainter(self) painter.fillRect(self.rect(), self.background) block = self.editor.firstVisibleBlock() viewport_offset = self.editor.contentOffset() while block.isValid(): # The top left position of the block in the document position = self.editor.blockBoundingGeometry(block).topLeft() + viewport_offset # Check if the position of the block is out side of the visible area if position.y() > page_bottom: break # Draw the line number right justified at the y position of the line. if block.isVisible() and block in self.editor.bookmarkListModel: painter.drawPixmap(0, round(position.y()) + font_metrics.ascent() + font_metrics.descent() - self.bookmarkflagImage.height(), self.bookmarkflagImage) block = block.next() painter.end() QtGui.QWidget.paintEvent(self, event)
def translatePosition(self, position): font_metrics = QtGui.QFontMetrics(self.editor.font) fh = font_metrics.lineSpacing() ys = position.y() block = self.editor.firstVisibleBlock() offset = self.editor.contentOffset() page_bottom = self.editor.viewport().height() while block.isValid(): blockPosition = self.editor.blockBoundingGeometry(block).topLeft() + offset if blockPosition.y() > page_bottom: break if blockPosition.y() < ys and (blockPosition.y() + fh) > ys: break block = block.next() return block
def paintEvent(self, event): font_metrics = QtGui.QFontMetrics(self.editor.font) page_bottom = self.editor.viewport().height() painter = QtGui.QPainter(self) painter.fillRect(self.rect(), self.background) block = self.editor.firstVisibleBlock() viewport_offset = self.editor.contentOffset() while block.isValid(): # The top left position of the block in the document position = self.editor.blockBoundingGeometry(block).topLeft() + viewport_offset # Check if the position of the block is out side of the visible area if position.y() > page_bottom: break # Draw the line number right justified at the y position of the line. if block.isVisible(): userData = block.userData() mark = self.editor.folding.getFoldingMark(block) if self.editor.folding.isStart(mark): if userData.folded: painter.drawPixmap(0, round(position.y()) + font_metrics.ascent() + font_metrics.descent() - self.foldingcollapsedImage.height(), self.foldingcollapsedImage) else: painter.drawPixmap(0, round(position.y()) + font_metrics.ascent() + font_metrics.descent() - self.foldingtopImage.height(), self.foldingtopImage) elif self.editor.folding.isStop(mark): painter.drawPixmap(0, round(position.y()) + font_metrics.ascent() + font_metrics.descent() - self.foldingbottomImage.height(), self.foldingbottomImage) block = block.next() painter.end() QtGui.QWidget.paintEvent(self, event)
def update_position(self): font_size = QtGui.QFontMetrics(self._parent.font()).height() height = self._parent.lines_count * font_size self.setFixedHeight(height) self.setFixedWidth(self._parent.width()) self.__scroll_margins = (height, self._parent.height() - height)