class_name DrawController extends Control ## Emitted the frame after at least one paint operation was done. signal painted var _draw_queue: Array[Callable] = [] var _dirty := false func clear(color: Color) -> void: queue_draw(func() -> void: draw_rect(Rect2(0, 0, size.x, size.y), color, true)) func queue_draw(op: Callable) -> void: _draw_queue.push_back(op) _dirty = true func _draw() -> void: while _draw_queue: var op: Callable = _draw_queue.pop_front() op.call() func _process(_delta: float) -> void: if _dirty: queue_redraw() _dirty = false painted.emit()