CuraSplashScreen.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. # Copyright (c) 2017 Ultimaker B.V.
  2. # Uranium is released under the terms of the LGPLv3 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. # Override the mousePressEvent so the splashscreen doesn't disappear when clicked
  32. def mousePressEvent(self, mouse_event):
  33. pass
  34. def drawContents(self, painter):
  35. if self._to_stop:
  36. return
  37. painter.save()
  38. painter.setPen(QColor(255, 255, 255, 255))
  39. painter.setRenderHint(QPainter.Antialiasing)
  40. painter.setRenderHint(QPainter.Antialiasing, True)
  41. version = Application.getInstance().getVersion().split("-")
  42. buildtype = Application.getInstance().getBuildType()
  43. if buildtype:
  44. version[0] += " (%s)" % buildtype
  45. # draw version text
  46. font = QFont() # Using system-default font here
  47. font.setPixelSize(37)
  48. painter.setFont(font)
  49. painter.drawText(220, 66, 330 * self._scale, 230 * self._scale, Qt.AlignLeft | Qt.AlignTop, version[0])
  50. if len(version) > 1:
  51. font.setPointSize(12)
  52. painter.setFont(font)
  53. painter.setPen(QColor(200, 200, 200, 255))
  54. painter.drawText(252, 105, 330 * self._scale, 255 * self._scale, Qt.AlignLeft | Qt.AlignTop, version[1])
  55. painter.setPen(QColor(255, 255, 255, 255))
  56. # draw the loading image
  57. pen = QPen()
  58. pen.setWidth(6 * self._scale)
  59. pen.setColor(QColor(32, 166, 219, 255))
  60. painter.setPen(pen)
  61. painter.drawArc(60, 150, 32 * self._scale, 32 * self._scale, self._loading_image_rotation_angle * 16, 300 * 16)
  62. # draw message text
  63. if self._current_message:
  64. font = QFont() # Using system-default font here
  65. font.setPixelSize(13)
  66. pen = QPen()
  67. pen.setColor(QColor(255, 255, 255, 255))
  68. painter.setPen(pen)
  69. painter.setFont(font)
  70. painter.drawText(100, 128, 170, 64,
  71. Qt.AlignLeft | Qt.AlignVCenter | Qt.TextWordWrap,
  72. self._current_message)
  73. painter.restore()
  74. super().drawContents(painter)
  75. def showMessage(self, message, *args, **kwargs):
  76. if self._to_stop:
  77. return
  78. self._current_message = message
  79. self.messageChanged.emit(message)
  80. QCoreApplication.flush()
  81. self.repaint()
  82. def close(self):
  83. # set stop flags
  84. self._to_stop = True
  85. self._change_timer.stop()
  86. super().close()