lib/glimmer/swt/custom/shape.rb in glimmer-dsl-swt-4.18.7.7 vs lib/glimmer/swt/custom/shape.rb in glimmer-dsl-swt-4.19.0.0

- old
+ new

@@ -570,11 +570,11 @@ def foreground_pattern_args pattern_args(type: 'foreground') end def dispose(dispose_images: true, dispose_patterns: true, redraw: true) - shapes.each { |shape| shape.is_a?(Shape::Path) && shape.dispose } + shapes.each { |shape| shape.is_a?(Shape::Path) && shape.dispose } # TODO look into why I'm only disposing paths if dispose_patterns @background_pattern&.dispose @background_pattern = nil @foreground_pattern&.dispose @foreground_pattern = nil @@ -583,9 +583,23 @@ @image&.dispose @image = nil end @parent.shapes.delete(self) drawable.redraw if redraw && !drawable.is_a?(ImageProxy) + end + + # clear all shapes + # indicate whether to dispose images, dispose patterns, and redraw after clearing shapes. + # redraw can be `:all` or `true` to mean redraw after all shapes are disposed, `:each` to mean redraw after each shape is disposed, or `false` to avoid redraw altogether + def clear_shapes(dispose_images: true, dispose_patterns: true, redraw: :all) + if redraw == true || redraw == :all + shapes.dup.each {|shape| shape.dispose(dispose_images: dispose_images, dispose_patterns: dispose_patterns, redraw: false) } + drawable.redraw if redraw && !drawable.is_a?(ImageProxy) + elsif redraw == :each + shapes.dup.each {|shape| shape.dispose(dispose_images: dispose_images, dispose_patterns: dispose_patterns, redraw: true) } + else + shapes.dup.each {|shape| shape.dispose(dispose_images: dispose_images, dispose_patterns: dispose_patterns, redraw: false) } + end end # Indicate if this is a container shape (meaning a shape bag that is just there to contain nested shapes, but doesn't render anything of its own) def container? @name == 'shape'