Trivial.qml 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import QtQuick 2.5
  2. import "../.."
  3. Item {
  4. id: root
  5. property var imageArray: []
  6. function animationStep() {
  7. var fullyLoaded = true
  8. for (var i = globalSettings.columnCount - 1; i >= 0; i--) {
  9. var col = d.imageArray[i]
  10. var tailItem = col[col.length-1]
  11. var headItem = col[0]
  12. var fullCanvas = !!tailItem && (tailItem.y <= -tailItem.height)
  13. var overloadedCanvas = fullCanvas && (tailItem.y < -headItem.height)
  14. if ((!d.initialized && !fullCanvas) || (i == 0) && !overloadedCanvas && (globalSettings.itemLimit < 0 || (globalUtil.itemCount < globalSettings.itemLimit))) {
  15. globalUtil.itemCount++
  16. tailItem = d.pictureDelegate.createObject(root)
  17. tailItem.columnIndex = i
  18. col.push(tailItem)
  19. }
  20. if (!d.initialized) {
  21. fullyLoaded = fullyLoaded && !fullCanvas
  22. continue
  23. }
  24. if (overloadedCanvas || d.animating[i]) {
  25. feedTimer.restart()
  26. d.animating[i] = true
  27. for (var j = 0; j < col.length; j++) {
  28. var item = col[j]
  29. if (item.y > root.height) {
  30. d.animating[i] = false
  31. item = d.imageArray[i].shift()
  32. if (globalSettings.columnCount - i > 1) {
  33. item.columnIndex = i + 1
  34. d.imageArray[i + 1].push(item)
  35. } else {
  36. item.destroy();
  37. globalUtil.itemCount--
  38. }
  39. } else {
  40. item.y += 1
  41. }
  42. }
  43. return;
  44. }
  45. }
  46. if (!d.initialized && fullyLoaded) {
  47. settleTimer.start()
  48. }
  49. }
  50. Timer {
  51. id: settleTimer
  52. interval: 5000
  53. onTriggered: {
  54. d.initialized = true
  55. }
  56. }
  57. Timer {
  58. id: feedTimer
  59. interval: globalSettings.interval*100
  60. running: d.initialized
  61. repeat: true
  62. onTriggered: {
  63. d.animating[0] = true
  64. }
  65. }
  66. QtObject {
  67. id: d
  68. property bool incoming: false
  69. property bool initialized: globalSettings.itemLimit > -1 ? true : false
  70. property real t: 0
  71. property real columnRatio: globalSettings.useGoldenRatio ? globalVars.goldenRatio : globalSettings.lessGoldenRatio
  72. property var imageArray: []
  73. property var colWidthArray: []
  74. property var xposArray: []
  75. property var animating: []
  76. property var pictureDelegate: Component {
  77. ArtImage {
  78. property int columnIndex: 0
  79. function considerY() {
  80. var col = d.imageArray[columnIndex]
  81. var originatingHeight = d.initialized ? -height : root.height - height
  82. y = !!col[col.length - 1] ? col[col.length - 1].y - height : originatingHeight
  83. }
  84. width: d.colWidthArray[columnIndex]
  85. x: d.xposArray[columnIndex]
  86. onHeightChanged: {
  87. considerY()
  88. }
  89. }
  90. }
  91. NumberAnimation on t { from: 0; to: 1; duration: 1000; loops: -1 }
  92. onTChanged: { root.animationStep(); }
  93. Component.onCompleted: {
  94. var baseUnit = root.width*globalUtil.columnWidthRatio(d.columnRatio, globalSettings.columnCount)
  95. for(var i = 0; i < globalSettings.columnCount; i++) {
  96. if (i == (globalSettings.columnCount-1)) {
  97. var finalColWidth = root.width - colWidthArray.reduce(function(a,b){ return a+b; }, 0)
  98. colWidthArray.push(finalColWidth)
  99. globalVars.imageWidthOverride = finalColWidth
  100. } else {
  101. colWidthArray.push(Math.round(baseUnit*Math.pow(d.columnRatio, i)))
  102. }
  103. xposArray.push(i === 0 ? 0 : xposArray[i-1] + colWidthArray[i-1])
  104. imageArray[i] = new Array;
  105. d.animating[i] = false
  106. }
  107. }
  108. }
  109. Connections {
  110. target: globalSettings
  111. onColumnCountChanged: console.log('Col count:' + globalSettings.columnCount)
  112. }
  113. }