Bom, o código fonte é fechado, ou seja, não é possível ver como foi feita a implementação.
Estarei exibindo uma (suposta implementação) que seria uma forma de criar a mesma funcionalidade.
Vamos supor que você criou um quadrado na tela com a própria ferramenta do Paint, algo assim:
___________
| |
| |
| |
|___________|
Se você observar bem, quando você passa o mouse em qualquer da parte desenhavel do Paint, verá que será exibido as coordenadas X e Y da tela na parte inferior direita, Ex:
76, 82px
O sistema de Eixo X, Y segue o seguinte modelo:
O início do X é na parte superior esquerda, começando por 0 e incrementado 1 a cada posição para a direita (horizontal).
O início do Y é na parte superior esquerda (também), começando por 0 e incrementando 1 a cada posição para baixo (vertical).
Você pode ver esse comportamento colocando o cursor do mouse no extremo superior direito e ir movendo o mouse em linha reta para a direita ou para baixo.
Conhecendo o conceito de eixos, podemos criar a funcionalidade de preenchimento do balde.
Se você desenhar um quadrado igual o meu e colocar o ponteiro do mouse na parte interna no canto extremo superior esquerdo (igual fizemos com a parte desenhável X: 0, Y: 0), você verá que as coordenadas são diferentes, pois o nosso quadrado está praticamente no centro da tela.
No meu caso, a coordenada extrema superior esquerda interna do meu quadrado é X: 133, Y: 43, marquei essa posição com um "X":
___________
|X |
| |
| |
|___________|
Ok, temos a posição extrema interna do nosso quadrado, agora vamos descobrir a posição oposta (extrema superior direita), também marquei com um "X" abaixo:
___________
| X|
| |
| |
|____________|
No meu caso, a posição extrema superior direita é: X: 303, Y: 43.
Podemos seguir o modelo anterior para descobrir as posições inferiores: extrema esquerda inferior e extrema esquerda inferior
No meu caso seria:
X: 133, Y: 145 (extrema inferior esquerda).
X: 303, Y: 145 (extrema inferior direita).
___________
| |
| |
| |
|X_________X|
Sabendo disso podemos afirmar que ao preencher o quadrado com uma cor usando o balde, o Paint saberá essas informações de extremas e irá pintas apenas a parte de dentro.
O balde vai pintar das coordenadas X: 133 até Y: 303 (da extrema esquerda até a extrema direita):
___________
|XXXXXXXXXXX|
| |
| |
|___________|
Após isso, ele irá verificar se a coordenada pintada final direita é (X: 303, Y: 145)
No caso acima, a coordenada foi (X: 133 até Y: 303)
No caso o eixo X da coordenada Y: 303 foi totalmente preenchido, porém a meta é chegar no eixo Y: 145.
Para chegar no eixo Y: 145, ele terá q pintar incrementar a coordenada Y (descer):
___________
|XXXXXXXXXXX|
|XXXXXXXXXXX|
| |
|___________|
Ok, vamos imaginar que foi pintada a coordenada Y incrementada (Y + 1): 146
Y: 146 ainda não é igual a Y: 303, então vamos incrementar mais (descer):
(Y + 1): Y 147
___________
|XXXXXXXXXXX|
|XXXXXXXXXXX|
|XXXXXXXXXXX|
|___________|
E assim consecutivamente, começando de X e Descendo por Y como se estivesse escrevendo em um caderno:
- Da esquerda para a direita.
- De cima para baixo.