@@ -111,12 +111,18 @@ Item {
111111 */
112112 property string design: " diamonds"
113113
114+ /* !
115+ \qmlproperty rect BatteryParticles::clipBounds
116+ The bounding rectangle (x, y, width, height) for clipping. Particles are destroyed if they move outside this area.
117+ */
118+ property rect clipBounds: Qt .rect (0 , 0 , 0 , 0 )
119+
114120 // Define design-specific properties
115121 property var designProperties: {
116- " diamonds" : { initialSize: 0.4 , maxSize: 1.0 , initialOpacity: 0 , maxOpacity: 0.4 },
117- " bubbles" : { initialSize: 0.4 , maxSize: 1.0 , initialOpacity: 0 , maxOpacity: 0.4 },
118- " logos" : { initialSize: 0.5 , maxSize: 1.2 , initialOpacity: 0 , maxOpacity: 0.6 },
119- " flashes" : { initialSize: 0.6 , maxSize: 1.4 , initialOpacity: 0 , maxOpacity: 0.7 }
122+ " diamonds" : { initialSize: 0.3 , maxSize: 0.9 , initialOpacity: 0 , maxOpacity: 0.6 },
123+ " bubbles" : { initialSize: 0.3 , maxSize: 0.9 , initialOpacity: 0 , maxOpacity: 0.6 },
124+ " logos" : { initialSize: 0.4 , maxSize: 1.2 , initialOpacity: 0 , maxOpacity: 0.6 },
125+ " flashes" : { initialSize: 0.6 , maxSize: 1.4 , initialOpacity: 0 , maxOpacity: 0.6 }
120126 }
121127
122128 // Get design properties with fallback
@@ -126,6 +132,15 @@ Item {
126132 : designProperties[" diamonds" ][propName];
127133 }
128134
135+ // Check if particle is outside clipBounds and destroy if so
136+ onXChanged: {
137+ if (clipBounds .width > 0 && clipBounds .height > 0 ) {
138+ if (x < clipBounds .x - maxSize || x > clipBounds .x + clipBounds .width ) {
139+ particleRoot .destroy ();
140+ }
141+ }
142+ }
143+
129144 // Destroy timer to handle particle cleanup
130145 Timer {
131146 id: destroyTimer
0 commit comments