def paintEvent(base_button, event): painter = QStylePainter(base_button) painter.setRenderHint(QPainter.Antialiasing) option = QStyleOption() option.initFrom(base_button) x = option.rect.x() y = option.rect.y() height = option.rect.height() - 1 width = option.rect.width() - 1 radius = base_button._radius gradient = BaseButtonStyle._gradient[NORMAL] offset = 0 if base_button.isCheckable(): if base_button.isChecked(): gradient = BaseButtonStyle._gradient[DOWN] offset = 1 else: if base_button.isDown(): gradient = BaseButtonStyle._gradient[DOWN] offset = 1 elif not base_button.isEnabled(): gradient = BaseButtonStyle._gradient[DISABLED] painter.setBrush(base_button._brush_border) painter.setPen(base_button._pens_border) painter.drawRoundedRect(QRect(x + 1, y + 1, width - 1, height - 1), radius, radius) if base_button.isCheckable(): if base_button.isChecked(): painter.setPen(base_button._pens_clear) painter.setBrush(gradient[OUTER]) painter.drawRoundedRect( QRect(x + 1, y + 1, width - 1, height - 1), radius, radius) else: painter.setPen(base_button._pens_clear) painter.setBrush(gradient[OUTER]) painter.drawRoundedRect( QRect(x + 2, y + 2, width - 2, height - 2), radius, radius) else: if base_button.isDown(): painter.setPen(base_button._pens_clear) painter.setBrush(gradient[OUTER]) painter.drawRoundedRect( QRect(x + 1, y + 1, width - 1, height - 1), radius, radius) else: painter.setPen(base_button._pens_clear) painter.setBrush(gradient[OUTER]) painter.drawRoundedRect( QRect(x + 2, y + 2, width - 2, height - 2), radius, radius) painter.setBrush(gradient[INNER]) painter.drawRoundedRect(QRect(x + 3, y + 3, width - 3, height - 3), radius - 1, radius - 1) painter.setBrush(base_button._brush_clear) text = base_button.text() font = base_button.font() text_width = base_button._font_metrics.width(text) text_height = font.pointSize() text_path = QPainterPath() text_path.addText((width - text_width) / 2, height - ((height - text_height) / 2) - 1 + offset, font, text) glow_index = base_button._glow_index glow_pens = base_button._glow_pens alignment = (Qt.AlignHCenter | Qt.AlignVCenter) if base_button.isEnabled(): painter.setPen(base_button._pens_shadow) painter.drawPath(text_path) painter.setPen(base_button._pens_text) painter.drawText(x, y + offset, width, height, alignment, text) if glow_index > 0: for index in range(3): painter.setPen(glow_pens[glow_index][index]) painter.drawPath(text_path) painter.setPen(glow_pens[glow_index][3]) painter.drawText(x, y + offset, width, height, alignment, text) else: painter.setPen(base_button._pens_shadow_disabled) painter.drawPath(text_path) painter.setPen(base_button._pens_text_disabled) painter.drawText(x, y + offset, width, height, alignment, text)
def paintEvent(base_button, event): painter = QStylePainter(base_button) painter.setRenderHint(QPainter.Antialiasing) option = QStyleOption() option.initFrom(base_button) x = option.rect.x() y = option.rect.y() height = option.rect.height() - 1 width = option.rect.width() - 1 radius = base_button._radius gradient = BaseButtonStyle._gradient[NORMAL] offset = 0 icon_offset = 3 # TODO: maybe we want set this as a property of the base button if base_button.isCheckable(): if base_button.isChecked(): gradient = BaseButtonStyle._gradient[DOWN] offset = 1 else: if base_button.isDown(): gradient = BaseButtonStyle._gradient[DOWN] offset = 1 elif not base_button.isEnabled(): gradient = BaseButtonStyle._gradient[DISABLED] painter.setBrush(base_button._brush_border) painter.setPen(base_button._pens_border) painter.drawRoundedRect(QRect(x + 1, y + 1, width - 1, height - 1), radius, radius) painter.setPen(base_button._pens_clear) painter.setBrush(gradient[OUTER]) painter.drawRoundedRect(QRect(x + 1, y + 1, width - 1, height - 1), radius, radius) painter.setBrush(gradient[INNER]) painter.drawRoundedRect(QRect(x + 2, y + 2, width - 2, height - 2), radius - 1, radius - 1) painter.setBrush(base_button._brush_clear) text = base_button.text() font = base_button.font() text_width = base_button._font_metrics.width(text) text_height = font.pointSize() text_path = QPainterPath() has_icon = base_button.icon() if has_icon: if base_button.text() == '' or base_button.text() is None: icon_size = max( min(height, width) - 2 * base_button._pad, base_button._min_size) painter.drawPixmap((width - icon_size) / 2, (height - icon_size) / 2, base_button.icon().pixmap(icon_size)) else: icon_size = max( min(height, width) - 2 * base_button._pad, base_button._min_size) painter.drawPixmap((width - icon_size - text_width) / 2, (height - icon_size) / 2, base_button.icon().pixmap(icon_size)) if has_icon: text_path.addText( (width - text_width + icon_size + icon_offset) / 2, height - ((height - text_height) / 2) - 1 + offset, font, text) else: text_path.addText( (width - text_width) / 2, height - ((height - text_height) / 2) - 1 + offset, font, text) glow_index = base_button._glow_index glow_pens = base_button._glow_pens alignment = (Qt.AlignHCenter | Qt.AlignVCenter) if base_button.isEnabled(): painter.setPen(base_button._pens_shadow) painter.drawPath(text_path) painter.setPen(base_button._pens_text) if has_icon: painter.drawText(x + ((icon_size + icon_offset) * 0.5), y + offset, width, height, alignment, text) else: painter.drawText(x, y + offset, width, height, alignment, text) if glow_index > 0: for index in range(3): painter.setPen(glow_pens[glow_index][index]) painter.drawPath(text_path) painter.setPen(glow_pens[glow_index][3]) if has_icon: painter.drawText(x + ((icon_size + icon_offset) * 0.5), y + offset, width, height, alignment, text) else: painter.drawText(x, y + offset, width, height, alignment, text) else: painter.setPen(base_button._pens_shadow_disabled) painter.drawPath(text_path) painter.setPen(base_button._pens_text_disabled) if has_icon: painter.drawText(x + ((icon_size + icon_offset) * 0.5), y + offset, width, height, alignment, text) else: painter.drawText(x, y + offset, width, height, alignment, text)