CuraSplashScreen.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. # Copyright (c) 2017 Ultimaker B.V.
  2. # Uranium is released under the terms of the AGPLv3 or higher.
  3. from threading import Thread, Event
  4. from PyQt5.QtCore import Qt, QCoreApplication, QTimer
  5. from PyQt5.QtGui import QPixmap, QColor, QFont, QPen, QPainter
  6. from PyQt5.QtWidgets import QSplashScreen
  7. from UM.Resources import Resources
  8. from UM.Application import Application
  9. class CuraSplashScreen(QSplashScreen):
  10. def __init__(self):
  11. super().__init__()
  12. self._scale = 0.7
  13. splash_image = QPixmap(Resources.getPath(Resources.Images, "cura.png"))
  14. self.setPixmap(splash_image)
  15. self._current_message = ""
  16. self._loading_image_rotation_angle = 0
  17. self._to_stop = False
  18. self._change_timer = QTimer()
  19. self._change_timer.setInterval(50)
  20. self._change_timer.setSingleShot(False)
  21. #self.timeoutSignal.connect(self._onTimeout)
  22. self._change_timer.timeout.connect(self.updateLoadingImage)
  23. def show(self):
  24. super().show()
  25. self._change_timer.start()
  26. def updateLoadingImage(self):
  27. if self._to_stop:
  28. return
  29. self._loading_image_rotation_angle -= 10
  30. self.repaint()
  31. def drawContents(self, painter):
  32. if self._to_stop:
  33. return
  34. painter.save()
  35. painter.setPen(QColor(255, 255, 255, 255))
  36. painter.setRenderHint(QPainter.Antialiasing)
  37. painter.setRenderHint(QPainter.Antialiasing, True)
  38. version = Application.getInstance().getVersion().split("-")
  39. buildtype = Application.getInstance().getBuildType()
  40. if buildtype:
  41. version[0] += " (%s)" % buildtype
  42. # draw version text
  43. font = QFont() # Using system-default font here
  44. font.setPointSize(28)
  45. painter.setFont(font)
  46. painter.drawText(220, 66, 330 * self._scale, 230 * self._scale, Qt.AlignLeft | Qt.AlignTop, version[0])
  47. if len(version) > 1:
  48. font.setPointSize(12)
  49. painter.setFont(font)
  50. painter.setPen(QColor(200, 200, 200, 255))
  51. painter.drawText(252, 105, 330 * self._scale, 255 * self._scale, Qt.AlignLeft | Qt.AlignTop, version[1])
  52. painter.setPen(QColor(255, 255, 255, 255))
  53. # draw the loading image
  54. pen = QPen()
  55. pen.setWidth(6 * self._scale)
  56. pen.setColor(QColor(32, 166, 219, 255))
  57. painter.setPen(pen)
  58. painter.drawArc(60, 150, 32 * self._scale, 32 * self._scale, self._loading_image_rotation_angle * 16, 300 * 16)
  59. # draw message text
  60. if self._current_message:
  61. font = QFont() # Using system-default font here
  62. font.setPointSize(10)
  63. pen = QPen()
  64. pen.setColor(QColor(255, 255, 255, 255))
  65. painter.setPen(pen)
  66. painter.setFont(font)
  67. painter.drawText(100, 128, 170, 64,
  68. Qt.AlignLeft | Qt.AlignVCenter | Qt.TextWordWrap,
  69. self._current_message)
  70. painter.restore()
  71. super().drawContents(painter)
  72. def showMessage(self, message, *args, **kwargs):
  73. if self._to_stop:
  74. return
  75. self._current_message = message
  76. self.messageChanged.emit(message)
  77. QCoreApplication.flush()
  78. self.repaint()
  79. def close(self):
  80. # set stop flags
  81. self._to_stop = True
  82. self._change_timer.stop()
  83. super().close()