def _draw_heartbeat(self, painter): """ Draws the heartbeat of the progress reporter so it doesn't look like the UI has frozen when progress is not updated in a while. :param painter: Painter object that will be used to render. """ # The heartbeat beats one per second. At the halfway point it is at it's # max amplitude. half_update = self._UPDATES_PER_SECOND / 2.0 amplitude = (math.fabs(self._heartbeat - half_update) / half_update) * 6 # Progress reporting starts at -90, which is (0, 1) in Cartesian coordinates. angle = self._spin_angle - 90 y = math.sin(math.radians(angle)) x = math.cos(math.radians(angle)) pen = QtGui.QPen(QtGui.QColor("#424141")) brush = QtGui.QBrush(QtGui.QColor("#424141")) pen.setWidth(1) painter.setPen(pen) painter.setBrush(brush) # Draws the ellipse around the head of the arc. painter.drawEllipse( QtCore.QRectF( x * 40 + 40 - amplitude / 2, y * 40 + 40 - amplitude / 2, amplitude, amplitude, ))
def paintEvent(self, event): """ Render the UI. """ if self._mode == self.MODE_OFF: return painter = QtGui.QPainter() painter.begin(self) try: # set up semi transparent backdrop overlay_color = QtGui.QColor("#1B1B1B") painter.setBrush(QtGui.QBrush(overlay_color)) painter.setPen(QtGui.QPen(overlay_color)) painter.drawRect(0, 0, painter.device().width(), painter.device().height()) if self._mode == self.MODE_INFO_TEXT: # show text in the middle pen = QtGui.QPen(QtGui.QColor("#888888")) painter.setPen(pen) text_rect = QtCore.QRect(0, 0, painter.device().width(), painter.device().height()) text_flags = QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter | QtCore.Qt.TextWordWrap painter.drawText(text_rect, text_flags, self._message) elif self._mode == self.MODE_ERROR: # show error text in the center pen = QtGui.QPen(QtGui.QColor("#C8534A")) painter.setPen(pen) text_rect = QtCore.QRect(0, 0, painter.device().width(), painter.device().height()) text_flags = QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter | QtCore.Qt.TextWordWrap painter.drawText(text_rect, text_flags, self._message) elif self._mode == self.MODE_INFO_PIXMAP: # draw image painter.translate((painter.device().width() / 2) - (self._message_pixmap.width() / 2), (painter.device().height() / 2) - (self._message_pixmap.height() / 2)) painter.drawPixmap(QtCore.QPoint(0, 0), self._message_pixmap) finally: painter.end() return super(ShotgunOverlayWidget, self).paintEvent(event)
def paintEvent(self, event): """ Render the UI. """ if self._mode == self.MODE_OFF: return painter = QtGui.QPainter() painter.begin(self) try: # set up semi transparent backdrop painter.setRenderHint(QtGui.QPainter.Antialiasing) overlay_color = QtGui.QColor("#1B1B1B") painter.setBrush(QtGui.QBrush(overlay_color)) painter.setPen(QtGui.QPen(overlay_color)) painter.drawRect(0, 0, painter.device().width(), painter.device().height()) # now draw different things depending on mode if self._mode == self.MODE_SPIN: # show the spinner painter.translate((painter.device().width() / 2) - 40, (painter.device().height() / 2) - 40) pen = QtGui.QPen(QtGui.QColor("#424141")) pen.setWidth(3) painter.setPen(pen) painter.drawPixmap(QtCore.QPoint(8, 24), self._sg_icon) r = QtCore.QRectF(0.0, 0.0, 80.0, 80.0) start_angle = (0 + self._spin_angle) * 4 * 16 span_angle = 340 * 16 painter.drawArc(r, start_angle, span_angle) elif self._mode == self.MODE_INFO_TEXT: # show text in the middle pen = QtGui.QPen(QtGui.QColor("#888888")) painter.setPen(pen) text_rect = QtCore.QRect(0, 0, painter.device().width(), painter.device().height()) text_flags = QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter | QtCore.Qt.TextWordWrap painter.drawText(text_rect, text_flags, self._message) elif self._mode == self.MODE_ERROR: # show error text in the center pen = QtGui.QPen(QtGui.QColor("#C8534A")) painter.setPen(pen) text_rect = QtCore.QRect(0, 0, painter.device().width(), painter.device().height()) text_flags = QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter | QtCore.Qt.TextWordWrap painter.drawText(text_rect, text_flags, self._message) elif self._mode == self.MODE_INFO_PIXMAP: # draw image painter.translate((painter.device().width() / 2) - (self._message_pixmap.width() / 2), (painter.device().height() / 2) - (self._message_pixmap.height() / 2)) painter.drawPixmap(QtCore.QPoint(0, 0), self._message_pixmap) finally: painter.end()