fix some bugs wih org with strechblt.
[reactos.git] / reactos / subsys / win32k / dib / dib1bpp.c
index b92f5f2..8bec335 100644 (file)
@@ -518,8 +518,8 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
    int saveY;
    BOOLEAN DesIsBiggerY=FALSE;
 
-   SrcSizeY = SourceRect->bottom;
-    SrcSizeX = SourceRect->right;
+    SrcSizeY = SourceRect->bottom - SourceRect->top;
+    SrcSizeX = SourceRect->right - SourceRect->left;
   
     DesSizeY = DestRect->bottom;
     DesSizeX = DestRect->right;  
@@ -544,7 +544,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                     /* Draw one Hline on X - Led to the Des Zoom In*/
                     if (DesSizeX>SrcSizeX)
                         {
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -555,7 +555,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {                                               
                                                sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
                                                
@@ -576,7 +576,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                         {
                           /* Draw one Hline on X - Led to the Des Zoom Out*/
 
-               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -587,7 +587,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {
                                                sx = (int) ((ULONG) DesSizeX * (ULONG) DesX) / ((ULONG) SrcSizeX);                                                                  
                                        
@@ -611,7 +611,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                    if (DesSizeX>SrcSizeX)
                        {
                                /* Draw one pixel on X - Led to the Des Zoom In*/
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -622,7 +622,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {                                               
                                                sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
                                                
@@ -639,7 +639,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                        else
                        {
                                /* Draw one pixel on X - Led to the Des Zoom Out*/
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) DesSizeY * (ULONG) DesY) / ((ULONG) SrcSizeY); 
@@ -650,7 +650,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {
                                                sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);                                                                  
                                        
@@ -675,7 +675,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                     /* Draw one Hline on X - Led to the Des Zoom In*/
                     if (DesSizeX>SrcSizeX)
                         {
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -686,7 +686,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {                                               
                                                sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
                                                
@@ -704,7 +704,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                         {
                           /* Draw one Hline on X - Led to the Des Zoom Out*/
 
-               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -715,7 +715,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {
                                                sx = (int) ((ULONG) DesSizeX * (ULONG) DesX) / ((ULONG) SrcSizeX);                                                                  
                                        
@@ -737,7 +737,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                    if (DesSizeX>SrcSizeX)
                        {
                                /* Draw one pixel on X - Led to the Des Zoom In*/
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -748,7 +748,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {                                               
                                                sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
                                                
@@ -764,7 +764,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                        else
                        {
                                /* Draw one pixel on X - Led to the Des Zoom Out*/
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -775,7 +775,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {
                                                sx = (int) ((ULONG) DesSizeX * (ULONG) DesX) / ((ULONG) SrcSizeX);                                                                  
                                        
@@ -799,7 +799,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                     /* Draw one Hline on X - Led to the Des Zoom In*/
                     if (DesSizeX>SrcSizeX)
                         {
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -810,7 +810,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {                                               
                                                sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
                                                
@@ -828,7 +828,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                         {
                           /* Draw one Hline on X - Led to the Des Zoom Out*/
 
-               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -839,7 +839,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {
                                                sx = (int) ((ULONG) DesSizeX * (ULONG) DesX) / ((ULONG) SrcSizeX);                                                                  
                                        
@@ -861,7 +861,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                    if (DesSizeX>SrcSizeX)
                        {
                                /* Draw one pixel on X - Led to the Des Zoom In*/
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -872,7 +872,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {                                               
                                                sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
                                                
@@ -888,7 +888,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                        else
                        {
                                /* Draw one pixel on X - Led to the Des Zoom Out*/
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -899,7 +899,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {
                                                sx = (int) ((ULONG) DesSizeX * (ULONG) DesX) / ((ULONG) SrcSizeX);                                                                  
                                        
@@ -923,7 +923,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                     /* Draw one Hline on X - Led to the Des Zoom In*/
                     if (DesSizeX>SrcSizeX)
                         {
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -934,7 +934,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {                                               
                                                sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
                                                
@@ -952,7 +952,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                         {
                           /* Draw one Hline on X - Led to the Des Zoom Out*/
 
-               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -963,7 +963,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {
                                                sx = (int) ((ULONG) DesSizeX * (ULONG) DesX) / ((ULONG) SrcSizeX);                                                                  
                                        
@@ -985,7 +985,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                    if (DesSizeX>SrcSizeX)
                        {
                                /* Draw one pixel on X - Led to the Des Zoom In*/
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -996,7 +996,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {                                               
                                                sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
                                                
@@ -1012,7 +1012,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                        else
                        {
                                /* Draw one pixel on X - Led to the Des Zoom Out*/
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -1023,7 +1023,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {
                                                sx = (int) ((ULONG) DesSizeX * (ULONG) DesX) / ((ULONG) SrcSizeX);                                                                  
                                        
@@ -1047,7 +1047,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                     /* Draw one Hline on X - Led to the Des Zoom In*/
                     if (DesSizeX>SrcSizeX)
                         {
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -1058,7 +1058,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {                                               
                                                sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
                                                
@@ -1076,7 +1076,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                         {
                           /* Draw one Hline on X - Led to the Des Zoom Out*/
 
-               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -1087,7 +1087,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {
                                                sx = (int) ((ULONG) DesSizeX * (ULONG) DesX) / ((ULONG) SrcSizeX);                                                                  
                                        
@@ -1109,7 +1109,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                    if (DesSizeX>SrcSizeX)
                        {
                                /* Draw one pixel on X - Led to the Des Zoom In*/
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -1120,7 +1120,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {                                               
                                                sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
                                                
@@ -1136,7 +1136,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                        else
                        {
                                /* Draw one pixel on X - Led to the Des Zoom Out*/
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -1147,7 +1147,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {
                                                sx = (int) ((ULONG) DesSizeX * (ULONG) DesX) / ((ULONG) SrcSizeX);                                                                  
                                        
@@ -1171,7 +1171,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                     /* Draw one Hline on X - Led to the Des Zoom In*/
                     if (DesSizeX>SrcSizeX)
                         {
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -1182,7 +1182,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {                                               
                                                sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
                                                
@@ -1200,7 +1200,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                         {
                           /* Draw one Hline on X - Led to the Des Zoom Out*/
 
-               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -1211,7 +1211,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {
                                                sx = (int) ((ULONG) DesSizeX * (ULONG) DesX) / ((ULONG) SrcSizeX);                                                                  
                                        
@@ -1233,7 +1233,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                    if (DesSizeX>SrcSizeX)
                        {
                                /* Draw one pixel on X - Led to the Des Zoom In*/
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -1244,7 +1244,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {                                               
                                                sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
                                                
@@ -1260,7 +1260,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
                        else
                        {
                                /* Draw one pixel on X - Led to the Des Zoom Out*/
-                               for (DesY=DestRect->bottom-zoomY; DesY>=0; DesY-=zoomY)
+                               for (DesY=DestRect->bottom-zoomY; DesY>=DestRect->top; DesY-=zoomY)
                                {
                                        if (DesIsBiggerY)
                                                sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY);
@@ -1271,7 +1271,7 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
 
                                        saveY = DesY+zoomY;
 
-                                       for (DesX=DestRect->right-zoomX; DesX>=0; DesX-=zoomX)                          
+                                       for (DesX=DestRect->right-zoomX; DesX>=DestRect->left; DesX-=zoomX)                             
                                        {
                                                sx = (int) ((ULONG) DesSizeX * (ULONG) DesX) / ((ULONG) SrcSizeX);