⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fbpict.c

📁 超强的嵌入式GUI系统
💻 C
📖 第 1 页 / 共 4 页
字号:
    src16 = cvt8888to0565(src);    fbComposeGetStart (pDst, xDst, yDst, CARD16, dstStride, dstLine, 1);    fbComposeGetStart (pMask, xMask, yMask, CARD32, maskStride, maskLine, 1);    while (height--)    {	dst = dstLine;	dstLine += dstStride;	mask = maskLine;	maskLine += maskStride;	w = width;	while (w--)	{	    ma = *mask++;	    if (ma == 0xffffffff)	    {		if (srca == 0xff)		{		    *dst = src16;		}		else		{		    d = *dst;		    d = fbOver24 (src, cvt0565to0888(d));		    *dst = cvt8888to0565(d);		}	    }	    else if (ma)	    {		d = *dst;		d = cvt0565to0888(d);		FbInOverC (src, srca, ma, d, 0, m);		FbInOverC (src, srca, ma, d, 8, n);		FbInOverC (src, srca, ma, d, 16, o);		d = m|n|o;		*dst = cvt8888to0565(d);	    }	    dst++;	}    }}static voidfbCompositeSrc_8888x8888 (pixman_operator_t  op,			 PicturePtr pSrc,			 PicturePtr pMask,			 PicturePtr pDst,			 INT16      xSrc,			 INT16      ySrc,			 INT16      xMask,			 INT16      yMask,			 INT16      xDst,			 INT16      yDst,			 CARD16     width,			 CARD16     height){    CARD32	*dstLine, *dst, dstMask;    CARD32	*srcLine, *src, s;    FbStride	dstStride, srcStride;    CARD8	a;    CARD16	w;    fbComposeGetStart (pDst, xDst, yDst, CARD32, dstStride, dstLine, 1);    fbComposeGetStart (pSrc, xSrc, ySrc, CARD32, srcStride, srcLine, 1);    dstMask = FbFullMask (pDst->pDrawable->depth);    while (height--)    {	dst = dstLine;	dstLine += dstStride;	src = srcLine;	srcLine += srcStride;	w = width;	while (w--)	{	    s = *src++;	    a = s >> 24;	    if (a == 0xff)		*dst = s & dstMask;	    else if (a)		*dst = fbOver (s, *dst) & dstMask;	    dst++;	}    }}static voidfbCompositeSrc_8888x0888 (pixman_operator_t  op,			 PicturePtr pSrc,			 PicturePtr pMask,			 PicturePtr pDst,			 INT16      xSrc,			 INT16      ySrc,			 INT16      xMask,			 INT16      yMask,			 INT16      xDst,			 INT16      yDst,			 CARD16     width,			 CARD16     height){    CARD8	*dstLine, *dst;    CARD32	d;    CARD32	*srcLine, *src, s;    CARD8	a;    FbStride	dstStride, srcStride;    CARD16	w;    fbComposeGetStart (pDst, xDst, yDst, CARD8, dstStride, dstLine, 3);    fbComposeGetStart (pSrc, xSrc, ySrc, CARD32, srcStride, srcLine, 1);    while (height--)    {	dst = dstLine;	dstLine += dstStride;	src = srcLine;	srcLine += srcStride;	w = width;	while (w--)	{	    s = *src++;	    a = s >> 24;	    if (a)	    {		if (a == 0xff)		    d = s;		else		    d = fbOver24 (s, Fetch24(dst));		Store24(dst,d);	    }	    dst += 3;	}    }}static voidfbCompositeSrc_8888x0565 (pixman_operator_t  op,			 PicturePtr pSrc,			 PicturePtr pMask,			 PicturePtr pDst,			 INT16      xSrc,			 INT16      ySrc,			 INT16      xMask,			 INT16      yMask,			 INT16      xDst,			 INT16      yDst,			 CARD16     width,			 CARD16     height){    CARD16	*dstLine, *dst;    CARD32	d;    CARD32	*srcLine, *src, s;    CARD8	a;    FbStride	dstStride, srcStride;    CARD16	w;    fbComposeGetStart (pSrc, xSrc, ySrc, CARD32, srcStride, srcLine, 1);    fbComposeGetStart (pDst, xDst, yDst, CARD16, dstStride, dstLine, 1);    while (height--)    {	dst = dstLine;	dstLine += dstStride;	src = srcLine;	srcLine += srcStride;	w = width;	while (w--)	{	    s = *src++;	    a = s >> 24;	    if (a)	    {		if (a == 0xff)		    d = s;		else		{		    d = *dst;		    d = fbOver24 (s, cvt0565to0888(d));		}		*dst = cvt8888to0565(d);	    }	    dst++;	}    }}static voidfbCompositeSrcAdd_8000x8000 (pixman_operator_t	  op,			     PicturePtr pSrc,			     PicturePtr pMask,			     PicturePtr pDst,			     INT16      xSrc,			     INT16      ySrc,			     INT16      xMask,			     INT16      yMask,			     INT16      xDst,			     INT16      yDst,			     CARD16     width,			     CARD16     height){    CARD8	*dstLine, *dst;    CARD8	*srcLine, *src;    FbStride	dstStride, srcStride;    CARD16	w;    CARD8	s, d;    CARD16	t;    fbComposeGetStart (pSrc, xSrc, ySrc, CARD8, srcStride, srcLine, 1);    fbComposeGetStart (pDst, xDst, yDst, CARD8, dstStride, dstLine, 1);    while (height--)    {	dst = dstLine;	dstLine += dstStride;	src = srcLine;	srcLine += srcStride;	w = width;	while (w--)	{	    s = *src++;	    if (s)	    {		if (s != 0xff)		{		    d = *dst;		    t = d + s;		    s = t | (0 - (t >> 8));		}		*dst = s;	    }	    dst++;	}    }}static voidfbCompositeSrcAdd_8888x8888 (pixman_operator_t   op,			     PicturePtr pSrc,			     PicturePtr pMask,			     PicturePtr pDst,			     INT16      xSrc,			     INT16      ySrc,			     INT16      xMask,			     INT16      yMask,			     INT16      xDst,			     INT16      yDst,			     CARD16     width,			     CARD16     height){    CARD32	*dstLine, *dst;    CARD32	*srcLine, *src;    FbStride	dstStride, srcStride;    CARD16	w;    CARD32	s, d;    CARD16	t;    CARD32	m,n,o,p;    fbComposeGetStart (pSrc, xSrc, ySrc, CARD32, srcStride, srcLine, 1);    fbComposeGetStart (pDst, xDst, yDst, CARD32, dstStride, dstLine, 1);    while (height--)    {	dst = dstLine;	dstLine += dstStride;	src = srcLine;	srcLine += srcStride;	w = width;	while (w--)	{	    s = *src++;	    if (s)	    {		if (s != 0xffffffff)		{		    d = *dst;		    if (d)		    {			m = FbAdd(s,d,0,t);			n = FbAdd(s,d,8,t);			o = FbAdd(s,d,16,t);			p = FbAdd(s,d,24,t);			s = m|n|o|p;		    }		}		*dst = s;	    }	    dst++;	}    }}static voidfbCompositeSrcAdd_8888x8x8 (pixman_operator_t   op,			    PicturePtr pSrc,			    PicturePtr pMask,			    PicturePtr pDst,			    INT16      xSrc,			    INT16      ySrc,			    INT16      xMask,			    INT16      yMask,			    INT16      xDst,			    INT16      yDst,			    CARD16     width,			    CARD16     height){    CARD8	*dstLine, *dst;    CARD8	*maskLine, *mask;    FbStride	dstStride, maskStride;    CARD16	w;    CARD32	src;    CARD8	sa;    fbComposeGetStart (pDst, xDst, yDst, CARD8, dstStride, dstLine, 1);    fbComposeGetStart (pMask, xMask, yMask, CARD8, maskStride, maskLine, 1);    fbComposeGetSolid (pSrc, pDst, src);    sa = (src >> 24);    while (height--)    {	dst = dstLine;	dstLine += dstStride;	mask = maskLine;	maskLine += maskStride;	w = width;	while (w--)	{	    CARD16	tmp;	    CARD16	a;	    CARD32	m, d;	    CARD32	r;	    a = *mask++;	    d = *dst;	    m = FbInU (sa, 0, a, tmp);	    r = FbAdd (m, d, 0, tmp);	    *dst++ = r;	}    }}static voidfbCompositeSrcAdd_1000x1000 (pixman_operator_t   op,			     PicturePtr pSrc,			     PicturePtr pMask,			     PicturePtr pDst,			     INT16      xSrc,			     INT16      ySrc,			     INT16      xMask,			     INT16      yMask,			     INT16      xDst,			     INT16      yDst,			     CARD16     width,			     CARD16     height){    FbBits	*dstBits, *srcBits;    FbStride	dstStride, srcStride;    int		dstBpp, srcBpp;    int		dstXoff, dstYoff;    int		srcXoff, srcYoff;    fbGetDrawable(pSrc->pDrawable, srcBits, srcStride, srcBpp, srcXoff, srcYoff);    fbGetDrawable(pDst->pDrawable, dstBits, dstStride, dstBpp, dstXoff, dstYoff);    fbBlt (srcBits + srcStride * (ySrc + srcYoff),	   srcStride,	   xSrc + srcXoff,	   dstBits + dstStride * (yDst + dstYoff),	   dstStride,	   xDst + dstXoff,	   width,	   height,	   GXor,	   FB_ALLONES,	   srcBpp,	   FALSE,	   FALSE);}static voidfbCompositeSolidMask_nx1xn (pixman_operator_t   op,			    PicturePtr pSrc,			    PicturePtr pMask,			    PicturePtr pDst,			    INT16      xSrc,			    INT16      ySrc,			    INT16      xMask,			    INT16      yMask,			    INT16      xDst,			    INT16      yDst,			    CARD16     width,			    CARD16     height){    FbBits	*dstBits;    FbStip	*maskBits;    FbStride	dstStride, maskStride;    int		dstBpp, maskBpp;    int		dstXoff, dstYoff;    int		maskXoff, maskYoff;    FbBits	src;    fbComposeGetSolid(pSrc, pDst, src);    if ((src & 0xff000000) != 0xff000000)    {	pixman_compositeGeneral  (op, pSrc, pMask, pDst,			     xSrc, ySrc, xMask, yMask, xDst, yDst,			     width, height);	return;    }    FbGetStipPixels (pMask->pixels, maskBits, maskStride, maskBpp, maskXoff, maskYoff);    fbGetDrawable (pDst->pDrawable, dstBits, dstStride, dstBpp, dstXoff, dstYoff);    switch (dstBpp) {    case 32:	break;    case 24:	break;    case 16:	src = cvt8888to0565(src);	break;    }    src = fbReplicatePixel (src, dstBpp);    fbBltOne (maskBits + maskStride * (yMask + maskYoff),	      maskStride,	      xMask + maskXoff,	      dstBits + dstStride * (yDst + dstYoff),	      dstStride,	      (xDst + dstXoff) * dstBpp,	      dstBpp,	      width * dstBpp,	      height,	      0x0,	      src,	      FB_ALLONES,	      0x0);}/* prototype to help with merging */static voidfbCompositeSrcSrc_nxn  (pixman_operator_t	op,			PicturePtr pSrc,			PicturePtr pMask,			PicturePtr pDst,			INT16      xSrc,			INT16      ySrc,			INT16      xMask,			INT16      yMask,			INT16      xDst,			INT16      yDst,			CARD16     width,			CARD16     height);/* * Apply a constant alpha value in an over computation */static voidfbCompositeTrans_0565xnx0565(pixman_operator_t      op,			     PicturePtr pSrc,			     PicturePtr pMask,			     PicturePtr pDst,			     INT16      xSrc,			     INT16      ySrc,			     INT16      xMask,			     INT16      yMask,			     INT16      xDst,			     INT16      yDst,			     CARD16     width,			     CARD16     height){    CARD16	*dstLine, *dst;    CARD16	*srcLine, *src;    FbStride	dstStride, srcStride;    CARD16	w;    FbBits	mask;    CARD8	maskAlpha;    CARD16	s_16, d_16;    CARD32	s_32, d_32;    fbComposeGetSolid (pMask, pDst, mask);    maskAlpha = mask >> 27;    if (!maskAlpha)	return;    if (maskAlpha == 0xff)    {	fbCompositeSrcSrc_nxn (PIXMAN_OPERATOR_SRC, pSrc, pMask, pDst,			       xSrc, ySrc, xMask, yMask, xDst, yDst,			       width, height);	return;    }    fbComposeGetStart (pSrc, xSrc, ySrc, CARD16, srcStride, srcLine, 1);    fbComposeGetStart (pDst, xDst, yDst, CARD16, dstStride, dstLine, 1);    while (height--)	{		CARD32 *isrc, *idst;		dst = dstLine;		dstLine += dstStride;		src = srcLine;		srcLine += srcStride;		w = width;		if(((long)src&1)==1)		{			s_16 = *src++;			d_16 = *dst;			inOver0565(maskAlpha, s_16, d_16, *dst++);			w--;		}		isrc=(CARD32 *)src;		if(((long)dst&1)==0)		{			idst=(CARD32 *)dst;			while (w>1)			{				s_32 = *isrc++;				d_32 = *idst;				inOver2x0565(maskAlpha,s_32,d_32,*idst++);				w-=2;			}			dst=(CARD16 *)idst;		}		else		{		    while (w > 1)		    {			s_32 = *isrc++;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -