def test_piece_hover_enter(pixmap_differ: PixmapDiffer): size = 240 with pixmap_differ.create_painters( size, size, 'tictactoe_piece_hover_enter') as (actual, expected): draw_square_grid(expected) expected.setBrush(TicTacToeDisplay.player1_colour) expected.drawEllipse(10, 10, 60, 60) colour = QColor(TicTacToeDisplay.player2_colour) expected.setBrush(colour) colour.setAlpha(127) expected.setBrush(colour) colour.setRgb(0, 0, 0, 127) pen = QPen(colour) expected.setPen(pen) expected.drawEllipse(90, 10, 60, 60) display = TicTacToeDisplay() board = TicTacToeState('''\ X.. ... ... ''') display.resize(324, 264) display.ui.game_display.grab() display.update_board(board) display.on_hover_enter(display.spaces[0][1]) render_display(display, actual)
def test_clicked(pixmap_differ: PixmapDiffer): actual: QPainter expected: QPainter with pixmap_differ.create_painters(280, 240, 'connect4_clicked') as (actual, expected): draw_grid(expected) expected.setBrush(Connect4Display.player1_colour) expected.drawEllipse(5, 205, 30, 30) colour = QColor(Connect4Display.player2_colour) colour.setAlpha(127) expected.setBrush(colour) colour.setRgb(0, 0, 0, 127) pen = QPen(colour) expected.setPen(pen) expected.drawEllipse(5, 45, 30, 30) display = Connect4Display() display.resize(372, 264) display.grab() # Force layout to recalculate. space = display.spaces[1][0] display.on_click(space) render_display(display, actual)
def paintEvent(self, pe) -> None: mainradius, fontsizefactor, center_x, center_y_pp, width = self.computeCenter( ) painter = QPainter(self) # So that we can use the background color painter.setBackgroundMode(Qt.OpaqueMode) # Smooth out the circle painter.setRenderHint(QPainter.Antialiasing) # Use background color textBgColor = QColor(painter.background().color()) # print("bgcolor = ", bgColor) bgColor = QColor("transparent") pointColor = QColor(painter.pen().color()) self.pointColor = pointColor self.bgColor = textBgColor alpha = 150 if self.parent().displayPp == 'all' or self.parent( ).displayPp == self.io: pointColor.setAlpha(255) else: pointColor.setAlpha(alpha) # draw text if not self._hasFixedFontSize: fontsize = mainradius * fontsizefactor else: fontsize = self._fixedFontSize self.fontsize = fontsize textRect_ = QtCore.QRectF(0, center_y_pp - mainradius - 2 * fontsize, width, 2 * fontsize) f = painter.font() f.setPointSizeF(fontsize) # self._io = 'in' if self.io == 'out': fm = QFontMetrics(f).boundingRect(self._text) # print("fm = ", fm) painter.setBrush(pointColor) painter.setPen(QPen(pointColor)) painter.drawRect( QtCore.QRectF(center_x - fm.width() / 2, center_y_pp - mainradius - 2 * fontsize, fm.width(), fm.height())) painter.setPen(QPen(textBgColor)) painter.setFont(f) painter.setBackgroundMode(Qt.TransparentMode) painter.drawText(textRect_, Qt.AlignHCenter | Qt.AlignTop, self._text) # draw hexagon painter.setBrush(bgColor) painter.setPen(pointColor) painter.drawPolygon( self.createPoly(6, mainradius, center_x, center_y_pp)) # draw outer circle radius_outer = mainradius * .8 if self.title not in implementedPatchPoints: painter.setBrush(QtGui.QBrush(QtGui.QColor(int("0x999999", 0)))) painter.drawEllipse(QtCore.QPointF(center_x, center_y_pp), radius_outer, radius_outer) # draw inner circle radius_inner = mainradius * .5 # painter.setBrush(QBrush(pointColor)) painter.setBrush(QColor(self._ppColor)) painter.drawEllipse(QtCore.QPointF(center_x, center_y_pp), radius_inner, radius_inner)