📄 libmng_object_prc.c
字号:
else /* get the current object */ pCurrent = (mng_imagep)pData->pCurrentobj; if (!pCurrent) /* otherwise object 0 */ pCurrent = (mng_imagep)pData->pObjzero; /* now just clone the object !!! */ iRetcode = clone_imageobject (pData, 0, MNG_FALSE, pCurrent->bVisible, MNG_FALSE, MNG_FALSE, 0, 0, 0, pCurrent, &pImage); if (iRetcode) /* on error bail out */ return iRetcode; pImage->sHeader.fCleanup = free_ani_image; pImage->sHeader.fProcess = process_ani_image; add_ani_object (pData, (mng_object_headerp)pImage); }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_IMAGE, MNG_LC_END)#endif return MNG_NOERROR; /* okido */}/* ************************************************************************** */mng_retcode free_ani_image (mng_datap pData, mng_objectp pObject){ mng_ani_imagep pImage = (mng_ani_imagep)pObject; mng_imagedatap pImgbuf = pImage->pImgbuf; mng_retcode iRetcode;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_IMAGE, MNG_LC_START)#endif /* unlink the image-data buffer */ iRetcode = free_imagedataobject (pData, pImgbuf); /* drop it's own buffer */ MNG_FREEX (pData, pImage, sizeof (mng_ani_image))#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_IMAGE, MNG_LC_END)#endif return iRetcode;}/* ************************************************************************** */mng_retcode process_ani_image (mng_datap pData, mng_objectp pObject){ mng_retcode iRetcode = MNG_NOERROR; mng_ani_imagep pImage = (mng_imagep)pObject;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_IMAGE, MNG_LC_START)#endif if (pData->bHasDHDR) /* processing delta-image ? */ { mng_imagep pDelta = (mng_imagep)pData->pDeltaImage; if (!pData->iBreakpoint) /* only execute if not broken before */ { /* make sure to process pixels as well */ pData->bDeltaimmediate = MNG_FALSE; /* execute the delta process */ iRetcode = execute_delta_image (pData, pDelta, (mng_imagep)pObject); if (iRetcode) /* on error bail out */ return iRetcode; } /* now go and shoot it off (if required) */ if ((pDelta->bVisible) && (pDelta->bViewable)) iRetcode = display_image (pData, pDelta, MNG_FALSE); if (!pData->bTimerset) pData->bHasDHDR = MNG_FALSE; /* this image signifies IEND !! */ } else if (pData->pCurrentobj) /* active object ? */ { mng_imagep pCurrent = (mng_imagep)pData->pCurrentobj; mng_imagedatap pBuf = pCurrent->pImgbuf; if (!pData->iBreakpoint) /* don't copy it again ! */ { if (pBuf->iImgdatasize) /* buffer present in active object ? */ /* then drop it */ MNG_FREE (pData, pBuf->pImgdata, pBuf->iImgdatasize) if (pBuf->iProfilesize) /* iCCP profile present ? */ /* then drop it */ MNG_FREE (pData, pBuf->pProfile, pBuf->iProfilesize) /* now blatently copy the animation buffer */ MNG_COPY (pBuf, pImage->pImgbuf, sizeof (mng_imagedata)) /* copy viewability */ pCurrent->bViewable = pImage->bViewable; if (pBuf->iImgdatasize) /* sample buffer present ? */ { /* then make a copy */ MNG_ALLOC (pData, pBuf->pImgdata, pBuf->iImgdatasize) MNG_COPY (pBuf->pImgdata, pImage->pImgbuf->pImgdata, pBuf->iImgdatasize) } if (pBuf->iProfilesize) /* iCCP profile present ? */ { /* then make a copy */ MNG_ALLOC (pData, pBuf->pProfile, pBuf->iProfilesize) MNG_COPY (pBuf->pProfile, pImage->pImgbuf->pProfile, pBuf->iProfilesize) } } /* now go and shoot it off (if required) */ if ((pCurrent->bVisible) && (pCurrent->bViewable)) iRetcode = display_image (pData, pCurrent, MNG_FALSE); } else { mng_imagep pObjzero = (mng_imagep)pData->pObjzero; /* overlay with object 0 status */ pImage->bVisible = pObjzero->bVisible; pImage->bViewable = pObjzero->bViewable; pImage->iPosx = pObjzero->iPosx; pImage->iPosy = pObjzero->iPosy; pImage->bClipped = pObjzero->bClipped; pImage->iClipl = pObjzero->iClipl; pImage->iClipr = pObjzero->iClipr; pImage->iClipt = pObjzero->iClipt; pImage->iClipb = pObjzero->iClipb; /* now this should do the trick */ if ((pImage->bVisible) && (pImage->bViewable)) iRetcode = display_image (pData, pImage, MNG_FALSE); } if (!iRetcode) /* all's well ? */ { if (pData->bTimerset) /* timer break ? */ pData->iBreakpoint = 99; /* fictive number; no more processing needed! */ else pData->iBreakpoint = 0; /* else clear it */ }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_IMAGE, MNG_LC_END)#endif return iRetcode;}/* ************************************************************************** *//* ************************************************************************** */mng_retcode create_ani_plte (mng_datap pData, mng_uint32 iEntrycount, mng_palette8ep paEntries){ mng_ani_pltep pPLTE;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_PLTE, MNG_LC_START)#endif if (pData->bCacheplayback) /* caching playback info ? */ { MNG_ALLOC (pData, pPLTE, sizeof (mng_ani_plte)) pPLTE->sHeader.fCleanup = free_ani_plte; pPLTE->sHeader.fProcess = process_ani_plte; add_ani_object (pData, (mng_object_headerp)pPLTE); pPLTE->iEntrycount = iEntrycount; MNG_COPY (pPLTE->aEntries, paEntries, sizeof (pPLTE->aEntries)) }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_PLTE, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode free_ani_plte (mng_datap pData, mng_objectp pObject){#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_PLTE, MNG_LC_START)#endif MNG_FREEX (pData, pObject, sizeof (mng_ani_plte))#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_PLTE, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode process_ani_plte (mng_datap pData, mng_objectp pObject){ mng_ani_pltep pPLTE = (mng_ani_pltep)pObject;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PLTE, MNG_LC_START)#endif pData->bHasglobalPLTE = MNG_TRUE; pData->iGlobalPLTEcount = pPLTE->iEntrycount; MNG_COPY (pData->aGlobalPLTEentries, pPLTE->aEntries, sizeof (pPLTE->aEntries))#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_PLTE, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** *//* ************************************************************************** */mng_retcode create_ani_trns (mng_datap pData, mng_uint32 iRawlen, mng_uint8p pRawdata){ mng_ani_trnsp pTRNS;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_TRNS, MNG_LC_START)#endif if (pData->bCacheplayback) /* caching playback info ? */ { MNG_ALLOC (pData, pTRNS, sizeof (mng_ani_trns)) pTRNS->sHeader.fCleanup = free_ani_trns; pTRNS->sHeader.fProcess = process_ani_trns; add_ani_object (pData, (mng_object_headerp)pTRNS); pTRNS->iRawlen = iRawlen; MNG_COPY (pTRNS->aRawdata, pRawdata, sizeof (pTRNS->aRawdata)) }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_TRNS, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode free_ani_trns (mng_datap pData, mng_objectp pObject){#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_TRNS, MNG_LC_START)#endif MNG_FREEX (pData, pObject, sizeof (mng_ani_trns))#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_TRNS, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode process_ani_trns (mng_datap pData, mng_objectp pObject){ mng_ani_trnsp pTRNS = (mng_ani_trnsp)pObject;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_TRNS, MNG_LC_START)#endif pData->bHasglobalTRNS = MNG_TRUE; pData->iGlobalTRNSrawlen = pTRNS->iRawlen; MNG_COPY (pData->aGlobalTRNSrawdata, pTRNS->aRawdata, sizeof (pTRNS->aRawdata))#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_TRNS, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** *//* ************************************************************************** */mng_retcode create_ani_gama (mng_datap pData, mng_bool bEmpty, mng_uint32 iGamma){ mng_ani_gamap pGAMA;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_GAMA, MNG_LC_START)#endif if (pData->bCacheplayback) /* caching playback info ? */ { MNG_ALLOC (pData, pGAMA, sizeof (mng_ani_gama)) pGAMA->sHeader.fCleanup = free_ani_gama; pGAMA->sHeader.fProcess = process_ani_gama; add_ani_object (pData, (mng_object_headerp)pGAMA); pGAMA->bEmpty = bEmpty; pGAMA->iGamma = iGamma; }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_CREATE_ANI_GAMA, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode free_ani_gama (mng_datap pData, mng_objectp pObject){#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_GAMA, MNG_LC_START)#endif MNG_FREEX (pData, pObject, sizeof (mng_ani_gama))#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_FREE_ANI_GAMA, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode process_ani_gama (mng_datap pData, mng_objectp pObject){ mng_ani_gamap pGAMA = (mng_ani_gamap)pObject;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROCESS_ANI_GAMA, MNG_LC_START)#endif i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -