┌────┐ ┌────────┐ ┌──────────┐ ┌───────┐ ┌────┐
│User│ │Hardware│ │Controller│ │Widgets│ │Host│
└─┬──┘ └───┬────┘ └────┬─────┘ └───┬───┘ └─┬──┘
│ │ │ │ │
│ press a cell │ │ │ │
│──────────────>│ │ │ │
│ │ │ │ │
│ │ presser │ │ │
│ │─────────────────>│ │ │
│ │ │ │ │
│ │ │handle_presser(presser&)│ │
│ │ │───────────────────────>│ │
│ │ │ │ │
│ │ │ │on_press(presser&)│
│ │ │ │─────────────────>│
│ │ │ │ │
│ │ │ │ update() │
│ │ │ │<─────────────────│
│ │ │ │ │
│ │ │ repaint() │ │
│ │ │<───────────────────────│ │
│ │ │ │ │
│ │ │handle_painter(painter&)│ │
│ │ │───────────────────────>│ │
│ │ │ │ │
│ │set_grid(painter&)│ │ │
│ │<─────────────────│ │ │
│ │ │ │ │
│visual feedback│ │ │ │
│<──────────────│ │ │ │
┌─┴──┐ ┌───┴────┐ ┌────┴─────┐ ┌───┴───┐ ┌─┴──┐
│User│ │Hardware│ │Controller│ │Widgets│ │Host│
└────┘ └────────┘ └──────────┘ └───────┘ └────┘
made with diagon