From abc4b5ebfc16ca2bc2fdf9efb86e50543e45d6c0 Mon Sep 17 00:00:00 2001 From: Dmitri Bogomolov <4glitch@gmail.com> Date: Wed, 3 Mar 2021 18:15:00 +0200 Subject: [PATCH] Prepare qidenticon module for using qtpy --- src/qidenticon.py | 55 ++++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/src/qidenticon.py b/src/qidenticon.py index 6eab09cd..158199a3 100644 --- a/src/qidenticon.py +++ b/src/qidenticon.py @@ -10,9 +10,7 @@ Return a PIL Image class instance which have generated identicon image. ``size`` specifies `patch size`. Generated image size is 3 * ``size``. """ -from PyQt4 import QtGui -from PyQt4.QtCore import QPointF, QSize, Qt -from PyQt4.QtGui import QPainter, QPixmap, QPolygonF +from qtpy import QtCore, QtGui class IdenticonRendererBase(object): @@ -37,10 +35,12 @@ class IdenticonRendererBase(object): """ # decode the code - middle, corner, side, foreColor, secondColor, swap_cross = self.decode(self.code, twoColor) + middle, corner, side, foreColor, secondColor, swap_cross = \ + self.decode(self.code, twoColor) # make image - image = QPixmap(QSize(size * 3 + penwidth, size * 3 + penwidth)) + image = QtGui.QPixmap( + QtCore.QSize(size * 3 + penwidth, size * 3 + penwidth)) # fill background backColor = QtGui.QColor(255, 255, 255, opacity) @@ -54,7 +54,8 @@ class IdenticonRendererBase(object): 'backColor': backColor} # middle patch - image = self.drawPatchQt((1, 1), middle[2], middle[1], middle[0], **kwds) + image = self.drawPatchQt( + (1, 1), middle[2], middle[1], middle[0], **kwds) # side patch kwds['foreColor'] = foreColor @@ -72,8 +73,9 @@ class IdenticonRendererBase(object): return image - def drawPatchQt(self, pos, turn, invert, patch_type, image, size, foreColor, - backColor, penwidth): # pylint: disable=unused-argument + def drawPatchQt( + self, pos, turn, invert, patch_type, image, size, foreColor, + backColor, penwidth): # pylint: disable=unused-argument """ :param size: patch size """ @@ -83,47 +85,50 @@ class IdenticonRendererBase(object): invert = not invert path = [(0., 0.), (1., 0.), (1., 1.), (0., 1.), (0., 0.)] - polygon = QPolygonF([QPointF(x * size, y * size) for x, y in path]) + polygon = QtGui.QPolygonF([ + QtCore.QPointF(x * size, y * size) for x, y in path]) rot = turn % 4 - rect = [QPointF(0., 0.), QPointF(size, 0.), QPointF(size, size), QPointF(0., size)] + rect = [ + QtCore.QPointF(0., 0.), QtCore.QPointF(size, 0.), + QtCore.QPointF(size, size), QtCore.QPointF(0., size)] rotation = [0, 90, 180, 270] - nopen = QtGui.QPen(foreColor, Qt.NoPen) - foreBrush = QtGui.QBrush(foreColor, Qt.SolidPattern) + nopen = QtGui.QPen(foreColor, QtCore.Qt.NoPen) + foreBrush = QtGui.QBrush(foreColor, QtCore.Qt.SolidPattern) if penwidth > 0: pen_color = QtGui.QColor(255, 255, 255) - pen = QtGui.QPen(pen_color, Qt.SolidPattern) + pen = QtGui.QPen(pen_color, QtCore.Qt.SolidPattern) pen.setWidth(penwidth) - painter = QPainter() + painter = QtGui.QPainter() painter.begin(image) painter.setPen(nopen) - painter.translate(pos[0] * size + penwidth / 2, pos[1] * size + penwidth / 2) + painter.translate( + pos[0] * size + penwidth / 2, pos[1] * size + penwidth / 2) painter.translate(rect[rot]) painter.rotate(rotation[rot]) if invert: # subtract the actual polygon from a rectangle to invert it - poly_rect = QPolygonF(rect) + poly_rect = QtGui.QPolygonF(rect) polygon = poly_rect.subtracted(polygon) painter.setBrush(foreBrush) if penwidth > 0: # draw the borders painter.setPen(pen) - painter.drawPolygon(polygon, Qt.WindingFill) + painter.drawPolygon(polygon, QtCore.Qt.WindingFill) # draw the fill painter.setPen(nopen) - painter.drawPolygon(polygon, Qt.WindingFill) + painter.drawPolygon(polygon, QtCore.Qt.WindingFill) painter.end() return image - def decode(self, code, twoColor): + def decode(self, code): """virtual functions""" - raise NotImplementedError @@ -166,7 +171,8 @@ class DonRenderer(IdenticonRendererBase): [(0, 0), (2, 0), (0, 2)], # [15] empty: []] - # get the [0] full square, [4] square standing on diagonale, [8] small centered square, or [15] empty tile: + # get the [0] full square, [4] square standing on diagonale, + # [8] small centered square, or [15] empty tile: MIDDLE_PATCH_SET = [0, 4, 8, 15] # modify path set @@ -215,7 +221,8 @@ class DonRenderer(IdenticonRendererBase): foreColor = QtGui.QColor(*foreColor) if twoColor: - secondColor = (second_blue << 3, second_green << 3, second_red << 3) + secondColor = ( + second_blue << 3, second_green << 3, second_red << 3) secondColor = QtGui.QColor(*secondColor) else: secondColor = foreColor @@ -226,9 +233,9 @@ class DonRenderer(IdenticonRendererBase): foreColor, secondColor, swap_cross -def render_identicon(code, size, twoColor=False, opacity=255, penwidth=0, renderer=None): +def render_identicon( + code, size, twoColor=False, opacity=255, penwidth=0, renderer=None): """Render an image""" - if not renderer: renderer = DonRenderer return renderer(code).render(size, twoColor, opacity, penwidth)