2025-03-01 16:12:18 -07:00
|
|
|
class_name DrawController extends Control
|
|
|
|
|
2025-03-02 13:16:40 -07:00
|
|
|
## Emitted the frame after at least one paint operation was done.
|
|
|
|
signal painted
|
|
|
|
|
2025-03-01 16:12:18 -07:00
|
|
|
var _draw_queue: Array[Callable] = []
|
|
|
|
|
2025-03-02 13:16:40 -07:00
|
|
|
var _dirty := false
|
2025-03-01 16:12:18 -07:00
|
|
|
|
|
|
|
|
2025-03-08 18:58:15 -07:00
|
|
|
func clear(color: Color) -> void:
|
|
|
|
queue_draw(func() -> void: draw_rect(Rect2(0, 0, size.x, size.y), color, true))
|
|
|
|
|
|
|
|
|
2025-03-01 16:12:18 -07:00
|
|
|
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
|
2025-03-02 13:16:40 -07:00
|
|
|
painted.emit()
|