📄 cfbpntwin.c
字号:
case 3: *pdst++ = ((*pdst) & 0xFF) | (piQxelArray[2] & 0xFFFFFF00); break; } while(nmiddle--){ *pdst++ = piQxelArray[0]; *pdst++ = piQxelArray[1]; *pdst++ = piQxelArray[2]; } switch(rightIndex){ case 0: break; case 1: *pdst = ((*pdst) & 0xFF000000) | (piQxelArray[0] & 0xFFFFFF); break; case 2: *pdst++ = piQxelArray[0]; *pdst = ((*pdst) & 0xFFFF0000) | (piQxelArray[1] & 0xFFFF); break; case 3: *pdst++ = piQxelArray[0]; *pdst++ = piQxelArray[1]; *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelArray[2] & 0xFF); break; } pdstULC += widthDst; } } }#else pdst += (pBox->x1 >> PWSH); if ((pBox->x1 & PIM) + w <= PPW) { maskpartialbits(pBox->x1, w, leftMask); while (h--) { *pdst = (*pdst & ~leftMask) | (rrop_xor & leftMask); pdst += widthDst; } } else { maskbits (pBox->x1, w, leftMask, rightMask, nmiddle); if (leftMask) { if (rightMask) { Expand (RROP_SOLID_MASK (pdst, leftMask); pdst++; , RROP_SOLID_MASK (pdst, rightMask); , 1) } else { Expand (RROP_SOLID_MASK (pdst, leftMask); pdst++;, ;, 1) } } else { if (rightMask) { Expand (;, RROP_SOLID_MASK (pdst, rightMask);, 0) } else { Expand (;, ;, 0) } } }#endif#if PSZ == 8 }#endif }}voidcfbFillBoxTile32 (pDrawable, nBox, pBox, tile) DrawablePtr pDrawable; int nBox; /* number of boxes to fill */ BoxPtr pBox; /* pointer to list of boxes to fill */ PixmapPtr tile; /* rotated, expanded tile */{ register unsigned long rrop_xor; register unsigned long *pdst; register int m; unsigned long *psrc; int tileHeight; int widthDst; int w; int h; register unsigned long leftMask; register unsigned long rightMask; int nmiddle; int y; int srcy; unsigned long *pdstBase;#if PSZ == 24 int leftIndex, rightIndex; unsigned long piQxelArray[3], xOffset, *pdstULC;#endif tileHeight = tile->drawable.height; psrc = (unsigned long *)tile->devPrivate.ptr; cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase); while (nBox--) {#if PSZ == 24 w = pBox->x2 - pBox->x1; h = pBox->y2 - pBox->y1; y = pBox->y1; leftIndex = pBox->x1 & 3;/* rightIndex = ((leftIndex+w)<5)?0:pBox->x2 &3;*/ rightIndex = pBox->x2 &3; nmiddle = w - rightIndex; if(leftIndex){ nmiddle -= (4 - leftIndex); } nmiddle >>= 2; if(nmiddle < 0) nmiddle = 0; pdst = pdstBase + ((pBox->x1 *3)>> 2) + pBox->y1 * widthDst; srcy = y % tileHeight;#define StepTile piQxelArray[0] = (psrc[srcy] & 0xFFFFFF) | ((psrc[srcy] & 0xFF)<<24); \ piQxelArray[1] = (psrc[srcy] & 0xFFFF00) | ((psrc[srcy] & 0xFFFF)<<16); \ piQxelArray[2] = ((psrc[srcy] & 0xFF0000)>>16) | \ ((psrc[srcy] & 0xFFFFFF)<<8); \ /*rrop_xor = psrc[srcy];*/ \ ++srcy; \ if (srcy == tileHeight) \ srcy = 0; switch(leftIndex+w){ case 4: switch(leftIndex){ case 0: while(h--){ StepTile *pdst++ = piQxelArray[0]; *pdst++ = piQxelArray[1]; *pdst = piQxelArray[2]; pdst-=2; pdst += widthDst; } break; case 1: while(h--){ StepTile *pdst++ = ((*pdst) & 0xFFFFFF) | (piQxelArray[0] & 0xFF000000); *pdst++ = piQxelArray[1]; *pdst = piQxelArray[2]; pdst-=2; pdst += widthDst; } break; case 2: while(h--){ StepTile *pdst++ = ((*pdst) & 0xFFFF) | (piQxelArray[1] & 0xFFFF0000); *pdst-- = piQxelArray[2]; pdst += widthDst; } break; case 3: while(h--){ StepTile *pdst = ((*pdst) & 0xFF) | (piQxelArray[2] & 0xFFFFFF00); pdst += widthDst; } break; } break; case 3: switch(leftIndex){ case 0: while(h--){ StepTile *pdst++ = piQxelArray[0]; *pdst++ = piQxelArray[1]; *pdst-- = ((*pdst) & 0xFFFFFF00) | (piQxelArray[2] & 0xFF); pdst--; pdst += widthDst; } break; case 1: while(h--){ StepTile *pdst++ = ((*pdst) & 0xFFFFFF) | (piQxelArray[0] & 0xFF000000); *pdst++ = piQxelArray[1]; *pdst-- = ((*pdst) & 0xFFFFFF00) | (piQxelArray[2] & 0xFF); pdst--; pdst += widthDst; } break; case 2: while(h--){ StepTile *pdst++ = ((*pdst) & 0xFFFF) | (piQxelArray[1] & 0xFFFF0000); *pdst-- = ((*pdst) & 0xFFFFFF00) | (piQxelArray[2] & 0xFF); pdst += widthDst; } break; } break; case 2: while(h--){ StepTile if(leftIndex){ *pdst++ = ((*pdst) & 0xFFFFFF) | (piQxelArray[0] & 0xFF000000); } else{ *pdst++ = piQxelArray[0]; } *pdst-- = ((*pdst) & 0xFFFF0000) | (piQxelArray[1] & 0xFFFF); pdst += widthDst; } break; case 1: /*only if leftIndex = 0 and w = 1*/ while(h--){ StepTile *pdst = ((*pdst) & 0xFF000000) | (piQxelArray[0] & 0xFFFFFF); pdst += widthDst; } break; case 0: /*never*/ break; default: { w = nmiddle; pdstULC = pdst; while(h--){ StepTile nmiddle = w; pdst = pdstULC; switch(leftIndex){ case 0: break; case 1: *pdst++ = ((*pdst) & 0xFFFFFF) | (piQxelArray[0] & 0xFF000000); *pdst++ = piQxelArray[1]; *pdst++ = piQxelArray[2]; break; case 2: *pdst++ = ((*pdst) & 0xFFFF) | (piQxelArray[1] & 0xFFFF0000); *pdst++ = piQxelArray[2]; break; case 3: *pdst++ = ((*pdst) & 0xFF) | (piQxelArray[2] & 0xFFFFFF00); break; } while(nmiddle--){ *pdst++ = piQxelArray[0]; *pdst++ = piQxelArray[1]; *pdst++ = piQxelArray[2]; } switch(rightIndex){ case 0: break; case 1: *pdst = ((*pdst) & 0xFF000000) | (piQxelArray[0] & 0xFFFFFF); break; case 2: *pdst++ = piQxelArray[0]; *pdst = ((*pdst) & 0xFFFF0000) | (piQxelArray[1] & 0xFFFF); break; case 3: *pdst++ = piQxelArray[0]; *pdst++ = piQxelArray[1]; *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelArray[2] & 0xFF); break; } pdstULC += widthDst; } } }#else w = pBox->x2 - pBox->x1; h = pBox->y2 - pBox->y1; y = pBox->y1; pdst = pdstBase + (pBox->y1 * widthDst) + (pBox->x1 >> PWSH); srcy = y % tileHeight;#define StepTile rrop_xor = psrc[srcy]; \ ++srcy; \ if (srcy == tileHeight) \ srcy = 0; if ( ((pBox->x1 & PIM) + w) < PPW) { maskpartialbits(pBox->x1, w, leftMask); rightMask = ~leftMask; while (h--) { StepTile *pdst = (*pdst & rightMask) | (rrop_xor & leftMask); pdst += widthDst; } } else { maskbits(pBox->x1, w, leftMask, rightMask, nmiddle); if (leftMask) { if (rightMask) { Expand (StepTile RROP_SOLID_MASK(pdst, leftMask); pdst++;, RROP_SOLID_MASK(pdst, rightMask);, 1) } else { Expand (StepTile RROP_SOLID_MASK(pdst, leftMask); pdst++;, ;, 1) } } else { if (rightMask) { Expand (StepTile , RROP_SOLID_MASK(pdst, rightMask);, 0) } else { Expand (StepTile , ;, 0) } } }#endif pBox++; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -