Basic.qml 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. import QtQuick 2.5
  2. import Box2D 2.0
  3. import Qt.labs.settings 1.0
  4. import ".."
  5. Item {
  6. id: root
  7. signal togglePause
  8. signal next
  9. property var pictureDelegate: Component {
  10. ArtImage {}
  11. }
  12. property var effectDelegate: Component {
  13. VisualEffect {}
  14. }
  15. anchors.fill: parent
  16. Settings {
  17. id: basicSettings
  18. category: "Basic"
  19. property int animationDuration: 2000
  20. property int easingType: Easing.Linear
  21. }
  22. QtObject {
  23. id: d
  24. property var columnArray: []
  25. function reset() {
  26. columnArray = []
  27. }
  28. }
  29. Component {
  30. id: columnComponent
  31. Item {
  32. id: column
  33. x: width * index
  34. height: parent.height
  35. width: parent.width/generalSettings.columnCount
  36. Item {
  37. id: artworkStack
  38. property var headElement
  39. property var pictureArray: []
  40. property int artworkHeight: 0
  41. property int compoundArtworkHeight: 0
  42. property bool full: artworkHeight > root.height
  43. property bool initialized: false
  44. Component.onCompleted: {
  45. d.columnArray.push(this)
  46. }
  47. onFullChanged: {
  48. if (!initialized) {
  49. initialized = true
  50. globalVars.registerColumnPrimed()
  51. }
  52. }
  53. height: childrenRect.height
  54. width: parent.width
  55. function addImage() {
  56. var image = pictureDelegate.createObject(artworkStack)
  57. if (generalSettings.effect !== "" && Effects.validate(generalSettings.effect)) {
  58. image.effect = effectDelegate.createObject(artworkStack, { target: image, effect: generalSettings.effect })
  59. }
  60. artworkHeight += image.height
  61. compoundArtworkHeight += image.height
  62. image.y = root.height - compoundArtworkHeight
  63. pictureArray.push(image)
  64. globalVars.itemCount++
  65. }
  66. function removeImage(image) {
  67. if (image.effect) {
  68. image.effect.destroy()
  69. }
  70. image.destroy()
  71. globalVars.itemCount--
  72. }
  73. function shift() {
  74. if (headElement) {
  75. removeImage(headElement)
  76. }
  77. headElement = pictureArray.shift()
  78. artworkHeight -= headElement.height
  79. while (!full) {
  80. addImage()
  81. }
  82. artworkStack.y += headElement.height
  83. }
  84. Timer {
  85. id: populateTimer
  86. running: !artworkStack.initialized
  87. repeat: true
  88. interval: 100
  89. onTriggered: artworkStack.addImage()
  90. }
  91. Timer {
  92. id: deathTimer
  93. running: !generalSettings.commonFeed && artworkStack.initialized
  94. repeat: true
  95. interval: globalVars.adjustedInterval
  96. onTriggered: artworkStack.shift()
  97. }
  98. Behavior on y {
  99. enabled: artworkStack.initialized
  100. NumberAnimation {
  101. duration: Math.min(globalVars.adjustedInterval, basicSettings.animationDuration)
  102. easing.type: basicSettings.easingType
  103. }
  104. }
  105. }
  106. Connections {
  107. target: root
  108. onTogglePause: deathTimer.running = !deathTimer.running
  109. onNext: deathTimer.triggered()
  110. }
  111. }
  112. }
  113. Timer {
  114. id: globalDeathTimer
  115. running: generalSettings.commonFeed && globalVars.primed
  116. repeat: true
  117. interval: globalVars.adjustedInterval
  118. onTriggered: d.columnArray[globalVars.columnSelection()].shift()
  119. }
  120. Repeater {
  121. model: globalVars.columnCount
  122. delegate: columnComponent
  123. onModelChanged: d.reset()
  124. }
  125. Keys.onUpPressed: generalSettings.interval++
  126. Keys.onDownPressed: generalSettings.interval = Math.max(0, generalSettings.interval - 1)
  127. }