/*****************************************************************************/
/*                                                                           */
/*   linienweises Fuellen einer durch Vordergrundfarbe umrandeten Flaeche    */
/*                                                                           */
/*****************************************************************************/

void fillRowByRow(int x, int y,void (*setPixel)(int,int),int (*isPixel)(int,int)) 
{
    int lg;                                      // nicht gesetzte Pixel ganz
    int rg;                                      // links/rechts in dieser Z.
    Punkt hilf;                                  // Hilfpunkt
    int px = x;                                  // lokale Kopie

    while(!isPixelSet(x, y)) 
    {                   // Solange Pixel ungesetzt
      setPixelInBuf(x, y);                       // Pixel merken und setzen
      hilf = new Punkt(x, y);
      hilf.paint(g);
      x--;                                       // naechstes Pixel links
    }
    lg = x+1;                                    // 1 zu weit gelaufen

    x = px + 1;                                  // da (px,y) schon gesetzt

    while(!isPixelSet(x, y)) 
    {                   			// Solange Pixel ungesetzt
      setPixelInBuf(x, y);                       // Pixel merken und setzen
      hilf = new Punkt(x, y);
      hilf.paint(g);
      x++;                                       // naechstes Pixel rechts
    }
    rg = x-1;                                    // 1 zu weit gelaufen

    for(int pos = rg; pos >= lg; pos--) 
    {        // von rechts nach links
      if(!isPixelSet(pos, y - 1)) 
      {              				// falls Pixel in Reihe ueber 
                                                 // dieser nicht gesetzt:
        fillRowByRow(pos,y-1, g);                // Repraesentant! neuer Aufruf
      }
      if(!isPixelSet(pos, y + 1)) 
      {              // falls Pixel in Reihe unter 
                                                 // dieser nicht gesetzt:
        fillRowByRow(pos,y+1, g);                // Repraesentant! neuer Aufruf
      }
    }
    return;
  }