From 0fa784572f2324fe246158d8eec9492fac604483 Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Mon, 1 Apr 2002 22:14:42 +0000 Subject: [PATCH] Separated wxImage::FloodFill from image.cpp git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14897 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- distrib/msw/tmake/filelist.txt | 1 + src/common/image.cpp | 242 --------------------------------- src/gtk/files.lst | 2 + src/gtk1/files.lst | 2 + src/mac/carbon/files.lst | 2 + src/mac/files.lst | 2 + src/mgl/files.lst | 2 + src/microwin/files.lst | 2 + src/motif/files.lst | 2 + src/msw/files.lst | 2 + src/msw/makefile.b32 | 3 + src/msw/makefile.bcc | 3 + src/msw/makefile.dos | 6 + src/msw/makefile.g95 | 1 + src/msw/makefile.sc | 1 + src/msw/makefile.vc | 1 + src/msw/makefile.wat | 4 + src/os2/files.lst | 2 + src/wxUniv.dsp | 4 + src/wxWindows.dsp | 4 + src/x11/files.lst | 2 + 21 files changed, 48 insertions(+), 242 deletions(-) diff --git a/distrib/msw/tmake/filelist.txt b/distrib/msw/tmake/filelist.txt index ad36c67b93..9f182dd531 100644 --- a/distrib/msw/tmake/filelist.txt +++ b/distrib/msw/tmake/filelist.txt @@ -180,6 +180,7 @@ iconbndl.cpp Common imagall.cpp Common imagbmp.cpp Common image.cpp Common +imagfill.cpp Common imaggif.cpp Common imagiff.cpp Common imagjpeg.cpp Common Win32Only diff --git a/src/common/image.cpp b/src/common/image.cpp index f98926b073..d4f9ddac8c 100644 --- a/src/common/image.cpp +++ b/src/common/image.cpp @@ -820,248 +820,6 @@ bool wxImage::SetMaskFromImage(const wxImage& mask, return TRUE; } - -// DoFloodFill -// Fills with the colour extracted from fillBrush, starting at x,y until either -// a color different from the start pixel is reached (wxFLOOD_SURFACE) -// or fill color is reached (wxFLOOD_BORDER) - -bool wxImage::MatchPixel(int x, int y, int w, int h, const wxColour & c) -{ - if ((x<0)||(x>=w)||(y<0)||(y>=h)) return false; - - unsigned char r = GetRed(x,y); - unsigned char g = GetGreen(x,y); - unsigned char b = GetBlue(x,y); - return c.Red() == r && c.Green() == g && c.Blue() == b ; -} - -bool wxImage::MatchBoundaryPixel(int x, int y, int w, int h, const wxColour & fill, const wxColour & bound) -{ - if ((x<0)||(x>=w)||(y<0)||(y>=h)) return TRUE; - - unsigned char r = GetRed(x,y); - unsigned char g = GetGreen(x,y); - unsigned char b = GetBlue(x,y); - if ( fill.Red() == r && fill.Green() == g && fill.Blue() == b ) return TRUE; - if ( bound.Red() == r && bound.Green() == g && bound.Blue() == b ) return TRUE; - return FALSE ; -} - - -void wxImage::DoFloodFill (wxCoord x, wxCoord y, const wxBrush & fillBrush, - const wxColour& testColour, int style /*=wxFLOOD_SURFACE */, - int LogicalFunction /*= wxCOPY, currently unused */) -{ - /* A diamond flood-fill using a circular queue system. - Each pixel surrounding the current pixel is added to - the queue if it meets the criteria, then is retrieved in - its turn. Code originally based on http://www.drawit.co.nz/Developers.htm */ - - int width = GetWidth(); - int height = GetHeight(); - - //Draw using a pen made from the current brush colour - //Potentially allows us to use patterned flood fills in future code - wxColour fillColour = fillBrush.GetColour(); - unsigned char r = fillColour.Red(); - unsigned char g = fillColour.Green(); - unsigned char b = fillColour.Blue(); - - //initial test : - if (style == wxFLOOD_SURFACE) - { - //if wxFLOOD_SURFACE, if fill colour is same as required, we don't do anything - if ( GetRed(x,y) != r - || GetGreen(x,y) != g - || GetBlue (x,y) != b ) - { - //prepare memory for queue - //queue save, start, read - size_t *qs, *qst, *qr; - - //queue size (physical) - long qSz= height * width * 2; - qst = new size_t [qSz]; - - //temporary x and y locations - int xt, yt; - - for (int i=0; i < qSz; i++) - qst[i] = 0; - - // start queue - qs=qr=qst; - *qs=xt=x; - qs++; - *qs=yt=y; - qs++; - - SetRGB(xt,yt,r,g,b); - - //Main queue loop - while(qr!=qs) - { - //Add new members to queue - //Above current pixel - if(MatchPixel(xt,yt-1,width,height,testColour)) - { - *qs=xt; - qs++; - *qs=yt-1; - qs++; - SetRGB(xt,yt-1,r,g,b); - - //Loop back to beginning of queue - if(qs>=(qst+qSz)) qs=qst; - } - - //Below current pixel - if(MatchPixel(xt,yt+1,width,height,testColour)) - { - *qs=xt; - qs++; - *qs=yt+1; - qs++; - SetRGB(xt,yt+1,r,g,b); - if(qs>=(qst+qSz)) qs=qst; - } - - //Left of current pixel - if(MatchPixel(xt-1,yt,width,height,testColour)) - { - *qs=xt-1; - qs++; - *qs=yt; - qs++; - SetRGB(xt-1,yt,r,g,b); - if(qs>=(qst+qSz)) qs=qst; - } - - //Right of current pixel - if(MatchPixel(xt+1,yt,width,height,testColour)) - { - *qs=xt+1; - qs++; - *qs=yt; - qs++; - SetRGB(xt+1,yt,r,g,b); - if(qs>=(qst+qSz)) qs=qst; - } - - //Retrieve current queue member - qr+=2; - - //Loop back to the beginning - if(qr>=(qst+qSz)) qr=qst; - xt=*qr; - yt=*(qr+1); - - //Go Back to beginning of loop - } - - delete [] qst ; - } - } - else - { - //style is wxFLOOD_BORDER - // fill up to testColor border - if already testColour don't do anything - if ( GetRed(x,y) != testColour.Red() - || GetGreen(x,y) != testColour.Green() - || GetBlue(x,y) != testColour.Blue() ) - { - //prepare memory for queue - //queue save, start, read - size_t *qs, *qst, *qr; - - //queue size (physical) - long qSz= height * width * 2; - qst = new size_t [qSz]; - - //temporary x and y locations - int xt, yt; - - for (int i=0; i < qSz; i++) - qst[i] = 0; - - // start queue - qs=qr=qst; - *qs=xt=x; - qs++; - *qs=yt=y; - qs++; - - SetRGB(xt,yt,r,g,b); - - //Main queue loop - while(qr!=qs) - { - //Add new members to queue - //Above current pixel - if(!MatchBoundaryPixel(xt,yt-1,width,height,fillColour,testColour)) - { - *qs=xt; - qs++; - *qs=yt-1; - qs++; - SetRGB(xt,yt-1,r,g,b); - - //Loop back to beginning of queue - if(qs>=(qst+qSz)) qs=qst; - } - - //Below current pixel - if(!MatchBoundaryPixel(xt,yt+1,width,height,fillColour,testColour)) - { - *qs=xt; - qs++; - *qs=yt+1; - qs++; - SetRGB(xt,yt+1,r,g,b); - if(qs>=(qst+qSz)) qs=qst; - } - - //Left of current pixel - if(!MatchBoundaryPixel(xt-1,yt,width,height,fillColour,testColour)) - { - *qs=xt-1; - qs++; - *qs=yt; - qs++; - SetRGB(xt-1,yt,r,g,b); - if(qs>=(qst+qSz)) qs=qst; - } - - //Right of current pixel - if(!MatchBoundaryPixel(xt+1,yt,width,height,fillColour,testColour)) - { - *qs=xt+1; - qs++; - *qs=yt; - qs++; - SetRGB(xt+1,yt,r,g,b); - if(qs>=(qst+qSz)) qs=qst; - } - - //Retrieve current queue member - qr+=2; - - //Loop back to the beginning - if(qr>=(qst+qSz)) qr=qst; - xt=*qr; - yt=*(qr+1); - - //Go Back to beginning of loop - } - - delete [] qst ; - } - } - //all done, -} - - #if wxUSE_PALETTE // Palette functions diff --git a/src/gtk/files.lst b/src/gtk/files.lst index 991ca2f413..955714a70f 100644 --- a/src/gtk/files.lst +++ b/src/gtk/files.lst @@ -108,6 +108,7 @@ ALL_SOURCES = \ common/imagall.cpp \ common/imagbmp.cpp \ common/image.cpp \ + common/imagfill.cpp \ common/imaggif.cpp \ common/imagiff.cpp \ common/imagjpeg.cpp \ @@ -688,6 +689,7 @@ COMMONOBJS = \ imagall.o \ imagbmp.o \ image.o \ + imagfill.o \ imaggif.o \ imagiff.o \ imagjpeg.o \ diff --git a/src/gtk1/files.lst b/src/gtk1/files.lst index 991ca2f413..955714a70f 100644 --- a/src/gtk1/files.lst +++ b/src/gtk1/files.lst @@ -108,6 +108,7 @@ ALL_SOURCES = \ common/imagall.cpp \ common/imagbmp.cpp \ common/image.cpp \ + common/imagfill.cpp \ common/imaggif.cpp \ common/imagiff.cpp \ common/imagjpeg.cpp \ @@ -688,6 +689,7 @@ COMMONOBJS = \ imagall.o \ imagbmp.o \ image.o \ + imagfill.o \ imaggif.o \ imagiff.o \ imagjpeg.o \ diff --git a/src/mac/carbon/files.lst b/src/mac/carbon/files.lst index d02a542c82..33ddee3faf 100644 --- a/src/mac/carbon/files.lst +++ b/src/mac/carbon/files.lst @@ -105,6 +105,7 @@ ALL_SOURCES = \ common/imagall.cpp \ common/imagbmp.cpp \ common/image.cpp \ + common/imagfill.cpp \ common/imaggif.cpp \ common/imagiff.cpp \ common/imagjpeg.cpp \ @@ -714,6 +715,7 @@ COMMONOBJS = \ imagall.o \ imagbmp.o \ image.o \ + imagfill.o \ imaggif.o \ imagiff.o \ imagjpeg.o \ diff --git a/src/mac/files.lst b/src/mac/files.lst index d02a542c82..33ddee3faf 100644 --- a/src/mac/files.lst +++ b/src/mac/files.lst @@ -105,6 +105,7 @@ ALL_SOURCES = \ common/imagall.cpp \ common/imagbmp.cpp \ common/image.cpp \ + common/imagfill.cpp \ common/imaggif.cpp \ common/imagiff.cpp \ common/imagjpeg.cpp \ @@ -714,6 +715,7 @@ COMMONOBJS = \ imagall.o \ imagbmp.o \ image.o \ + imagfill.o \ imaggif.o \ imagiff.o \ imagjpeg.o \ diff --git a/src/mgl/files.lst b/src/mgl/files.lst index 6cbdd7545c..9574b76fc3 100644 --- a/src/mgl/files.lst +++ b/src/mgl/files.lst @@ -108,6 +108,7 @@ ALL_SOURCES = \ common/imagall.cpp \ common/imagbmp.cpp \ common/image.cpp \ + common/imagfill.cpp \ common/imaggif.cpp \ common/imagiff.cpp \ common/imagjpeg.cpp \ @@ -588,6 +589,7 @@ COMMONOBJS = \ imagall.o \ imagbmp.o \ image.o \ + imagfill.o \ imaggif.o \ imagiff.o \ imagjpeg.o \ diff --git a/src/microwin/files.lst b/src/microwin/files.lst index bc64109b37..878c570941 100644 --- a/src/microwin/files.lst +++ b/src/microwin/files.lst @@ -105,6 +105,7 @@ ALL_SOURCES = \ common/imagall.cpp \ common/imagbmp.cpp \ common/image.cpp \ + common/imagfill.cpp \ common/imaggif.cpp \ common/imagiff.cpp \ common/imagjpeg.cpp \ @@ -681,6 +682,7 @@ COMMONOBJS = \ imagall.o \ imagbmp.o \ image.o \ + imagfill.o \ imaggif.o \ imagiff.o \ imagjpeg.o \ diff --git a/src/motif/files.lst b/src/motif/files.lst index f704083c0d..53e7dce060 100644 --- a/src/motif/files.lst +++ b/src/motif/files.lst @@ -107,6 +107,7 @@ ALL_SOURCES = \ common/imagall.cpp \ common/imagbmp.cpp \ common/image.cpp \ + common/imagfill.cpp \ common/imaggif.cpp \ common/imagiff.cpp \ common/imagjpeg.cpp \ @@ -676,6 +677,7 @@ COMMONOBJS = \ imagall.o \ imagbmp.o \ image.o \ + imagfill.o \ imaggif.o \ imagiff.o \ imagjpeg.o \ diff --git a/src/msw/files.lst b/src/msw/files.lst index 721ee5869b..56c834bf03 100644 --- a/src/msw/files.lst +++ b/src/msw/files.lst @@ -92,6 +92,7 @@ ALL_SOURCES = \ common/imagall.cpp \ common/imagbmp.cpp \ common/image.cpp \ + common/imagfill.cpp \ common/imaggif.cpp \ common/imagiff.cpp \ common/imagjpeg.cpp \ @@ -749,6 +750,7 @@ COMMONOBJS = \ imagall.o \ imagbmp.o \ image.o \ + imagfill.o \ imaggif.o \ imagiff.o \ imagjpeg.o \ diff --git a/src/msw/makefile.b32 b/src/msw/makefile.b32 index 8f28aa1b84..094457d0f7 100644 --- a/src/msw/makefile.b32 +++ b/src/msw/makefile.b32 @@ -175,6 +175,7 @@ COMMONOBJS = \ $(MSWDIR)\imagall.obj \ $(MSWDIR)\imagbmp.obj \ $(MSWDIR)\image.obj \ + $(MSWDIR)\imagfill.obj \ $(MSWDIR)\imaggif.obj \ $(MSWDIR)\imagiff.obj \ $(MSWDIR)\imagjpeg.obj \ @@ -772,6 +773,8 @@ $(MSWDIR)\imagbmp.obj: $(COMMDIR)\imagbmp.$(SRCSUFF) $(MSWDIR)\image.obj: $(COMMDIR)\image.$(SRCSUFF) +$(MSWDIR)\imagfill.obj: $(COMMDIR)\imagfill.$(SRCSUFF) + $(MSWDIR)\imaggif.obj: $(COMMDIR)\imaggif.$(SRCSUFF) $(MSWDIR)\imagiff.obj: $(COMMDIR)\imagiff.$(SRCSUFF) diff --git a/src/msw/makefile.bcc b/src/msw/makefile.bcc index fbe678ad42..12afb46787 100644 --- a/src/msw/makefile.bcc +++ b/src/msw/makefile.bcc @@ -161,6 +161,7 @@ COMMONOBJS = \ $(MSWDIR)\imagall.obj \ $(MSWDIR)\imagbmp.obj \ $(MSWDIR)\image.obj \ + $(MSWDIR)\imagfill.obj \ $(MSWDIR)\imaggif.obj \ $(MSWDIR)\imagiff.obj \ $(MSWDIR)\imagxpm.obj \ @@ -624,6 +625,8 @@ $(MSWDIR)\imagbmp.obj: $(COMMDIR)\imagbmp.$(SRCSUFF) $(MSWDIR)\image.obj: $(COMMDIR)\image.$(SRCSUFF) +$(MSWDIR)\imagfill.obj: $(COMMDIR)\imagfill.$(SRCSUFF) + $(MSWDIR)\imaggif.obj: $(COMMDIR)\imaggif.$(SRCSUFF) $(MSWDIR)\imagiff.obj: $(COMMDIR)\imagiff.$(SRCSUFF) diff --git a/src/msw/makefile.dos b/src/msw/makefile.dos index c318f46e54..b4a85ff637 100644 --- a/src/msw/makefile.dos +++ b/src/msw/makefile.dos @@ -146,6 +146,7 @@ COMMONOBJS1 = \ $(COMMDIR)\imagall.obj \ $(COMMDIR)\imagbmp.obj \ $(COMMDIR)\image.obj \ + $(COMMDIR)\imagfill.obj \ $(COMMDIR)\imaggif.obj \ $(COMMDIR)\imagiff.obj \ $(COMMDIR)\imagxpm.obj \ @@ -1078,6 +1079,11 @@ $(COMMDIR)/image.obj: $*.$(SRCSUFF) $(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF) << +$(COMMDIR)/imagfill.obj: $*.$(SRCSUFF) + cl @<< +$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF) +<< + $(COMMDIR)/imaggif.obj: $*.$(SRCSUFF) cl @<< $(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF) diff --git a/src/msw/makefile.g95 b/src/msw/makefile.g95 index a8b7b186b6..141ee90192 100644 --- a/src/msw/makefile.g95 +++ b/src/msw/makefile.g95 @@ -214,6 +214,7 @@ COMMONOBJS = \ $(COMMDIR)/imagall.$(OBJSUFF) \ $(COMMDIR)/imagbmp.$(OBJSUFF) \ $(COMMDIR)/image.$(OBJSUFF) \ + $(COMMDIR)/imagfill.$(OBJSUFF) \ $(COMMDIR)/imaggif.$(OBJSUFF) \ $(COMMDIR)/imagiff.$(OBJSUFF) \ $(COMMDIR)/imagjpeg.$(OBJSUFF) \ diff --git a/src/msw/makefile.sc b/src/msw/makefile.sc index a8580feab3..c3a6362057 100644 --- a/src/msw/makefile.sc +++ b/src/msw/makefile.sc @@ -119,6 +119,7 @@ COMMONOBJS = \ $(COMMDIR)\imagall.obj \ $(COMMDIR)\imagbmp.obj \ $(COMMDIR)\image.obj \ + $(COMMDIR)\imagfill.obj \ $(COMMDIR)\imaggif.obj \ $(COMMDIR)\imagiff.obj \ $(COMMDIR)\imagjpeg.obj \ diff --git a/src/msw/makefile.vc b/src/msw/makefile.vc index 1fcb1fffc4..ab809e04a9 100644 --- a/src/msw/makefile.vc +++ b/src/msw/makefile.vc @@ -195,6 +195,7 @@ COMMONOBJS = \ $(COMMDIR)\$D\imagall.obj \ $(COMMDIR)\$D\imagbmp.obj \ $(COMMDIR)\$D\image.obj \ + $(COMMDIR)\$D\imagfill.obj \ $(COMMDIR)\$D\imaggif.obj \ $(COMMDIR)\$D\imagiff.obj \ $(COMMDIR)\$D\imagjpeg.obj \ diff --git a/src/msw/makefile.wat b/src/msw/makefile.wat index 555b216041..87d43e0b6e 100644 --- a/src/msw/makefile.wat +++ b/src/msw/makefile.wat @@ -157,6 +157,7 @@ COMMONOBJS = & imagall.obj & imagbmp.obj & image.obj & + imagfill.obj & imaggif.obj & imagiff.obj & imagjpeg.obj & @@ -916,6 +917,9 @@ imagbmp.obj: $(COMMDIR)\imagbmp.cpp image.obj: $(COMMDIR)\image.cpp *$(CCC) $(CPPFLAGS) $(IFLAGS) $< +imagfill.obj: $(COMMDIR)\imagfill.cpp + *$(CCC) $(CPPFLAGS) $(IFLAGS) $< + imaggif.obj: $(COMMDIR)\imaggif.cpp *$(CCC) $(CPPFLAGS) $(IFLAGS) $< diff --git a/src/os2/files.lst b/src/os2/files.lst index b7acd13bcb..e1d738c8f0 100644 --- a/src/os2/files.lst +++ b/src/os2/files.lst @@ -101,6 +101,7 @@ ALL_SOURCES = \ common/imagall.cpp \ common/imagbmp.cpp \ common/image.cpp \ + common/imagfill.cpp \ common/imaggif.cpp \ common/imagiff.cpp \ common/imagjpeg.cpp \ @@ -694,6 +695,7 @@ COMMONOBJS = \ imagall.o \ imagbmp.o \ image.o \ + imagfill.o \ imaggif.o \ imagiff.o \ imagjpeg.o \ diff --git a/src/wxUniv.dsp b/src/wxUniv.dsp index 8f59a5bfe8..9a4b05a9ba 100644 --- a/src/wxUniv.dsp +++ b/src/wxUniv.dsp @@ -325,6 +325,10 @@ SOURCE=.\common\image.cpp # End Source File # Begin Source File +SOURCE=.\common\imagfill.cpp +# End Source File +# Begin Source File + SOURCE=.\common\imaggif.cpp # End Source File # Begin Source File diff --git a/src/wxWindows.dsp b/src/wxWindows.dsp index 81c44dbce9..3064a53fea 100644 --- a/src/wxWindows.dsp +++ b/src/wxWindows.dsp @@ -484,6 +484,10 @@ SOURCE=.\common\image.cpp # End Source File # Begin Source File +SOURCE=.\common\imagfill.cpp +# End Source File +# Begin Source File + SOURCE=.\common\imaggif.cpp # End Source File # Begin Source File diff --git a/src/x11/files.lst b/src/x11/files.lst index 32a2c70087..52fdd69030 100644 --- a/src/x11/files.lst +++ b/src/x11/files.lst @@ -139,6 +139,7 @@ ALL_SOURCES = \ common/imagall.cpp \ common/imagbmp.cpp \ common/image.cpp \ + common/imagfill.cpp \ common/imaggif.cpp \ common/imagiff.cpp \ common/imagjpeg.cpp \ @@ -702,6 +703,7 @@ COMMONOBJS = \ imagall.o \ imagbmp.o \ image.o \ + imagfill.o \ imaggif.o \ imagiff.o \ imagjpeg.o \ -- 2.45.2