📄 libmng_display.c
字号:
{ case mng_st_fast : { iWaitfor = (mng_uint32)(( 500 * iDelay) / iTicks); break; } case mng_st_slow : { iWaitfor = (mng_uint32)((3000 * iDelay) / iTicks); break; } case mng_st_slowest : { iWaitfor = (mng_uint32)((8000 * iDelay) / iTicks); break; } default : { iWaitfor = (mng_uint32)((1000 * iDelay) / iTicks); } } } return iWaitfor;}/* ************************************************************************** *//* * * *//* * Progressive display refresh - does the call to the refresh callback * *//* * and sets the timer to allow the app to perform the actual refresh to * *//* * the screen (eg. process its main message-loop) * *//* * * *//* ************************************************************************** */mng_retcode mng_display_progressive_refresh (mng_datap pData, mng_uint32 iInterval){ { /* let the app refresh first ? */ if ((pData->bRunning) && (!pData->bSkipping) && (pData->iUpdatetop < pData->iUpdatebottom) && (pData->iUpdateleft < pData->iUpdateright)) { if (!pData->fRefresh (((mng_handle)pData), pData->iUpdateleft, pData->iUpdatetop, pData->iUpdateright - pData->iUpdateleft, pData->iUpdatebottom - pData->iUpdatetop)) MNG_ERROR (pData, MNG_APPMISCERROR); pData->iUpdateleft = 0; /* reset update-region */ pData->iUpdateright = 0; pData->iUpdatetop = 0; pData->iUpdatebottom = 0; /* reset refreshneeded indicator */ pData->bNeedrefresh = MNG_FALSE; /* interval requested ? */ if ((!pData->bFreezing) && (iInterval)) { /* setup the timer */ mng_retcode iRetcode = set_delay (pData, iInterval); if (iRetcode) /* on error bail out */ return iRetcode; } } } return MNG_NOERROR;}/* ************************************************************************** *//* * * *//* * Generic display routines * *//* * * *//* ************************************************************************** */MNG_LOCAL mng_retcode interframe_delay (mng_datap pData){ mng_uint32 iWaitfor = 0; mng_uint32 iInterval; mng_uint32 iRuninterval; mng_retcode iRetcode;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INTERFRAME_DELAY, MNG_LC_START);#endif {#ifndef MNG_SKIPCHUNK_FRAM if (pData->iFramedelay > 0 || pData->bForcedelay) /* real delay ? */ { /* let the app refresh first ? */ pData->bForcedelay = MNG_FALSE; if ((pData->bRunning) && (!pData->bSkipping) && (pData->iUpdatetop < pData->iUpdatebottom) && (pData->iUpdateleft < pData->iUpdateright)) if (!pData->fRefresh (((mng_handle)pData), pData->iUpdateleft, pData->iUpdatetop, pData->iUpdateright - pData->iUpdateleft, pData->iUpdatebottom - pData->iUpdatetop)) MNG_ERROR (pData, MNG_APPMISCERROR); pData->iUpdateleft = 0; /* reset update-region */ pData->iUpdateright = 0; pData->iUpdatetop = 0; pData->iUpdatebottom = 0; /* reset refreshneeded indicator */ pData->bNeedrefresh = MNG_FALSE;#ifndef MNG_SKIPCHUNK_TERM if (pData->bOnlyfirstframe) /* only processing first frame after TERM ? */ { pData->iFramesafterTERM++; /* did we do a frame yet ? */ if (pData->iFramesafterTERM > 1) { /* then that's it; just stop right here ! */ pData->pCurraniobj = MNG_NULL; pData->bRunning = MNG_FALSE; return MNG_NOERROR; } }#endif if (pData->fGettickcount) { /* get current tickcount */ pData->iRuntime = pData->fGettickcount ((mng_handle)pData); /* calculate interval since last sync-point */ if (pData->iRuntime < pData->iSynctime) iRuninterval = pData->iRuntime + ~pData->iSynctime + 1; else iRuninterval = pData->iRuntime - pData->iSynctime; /* calculate actual run-time */ if (pData->iRuntime < pData->iStarttime) pData->iRuntime = pData->iRuntime + ~pData->iStarttime + 1; else pData->iRuntime = pData->iRuntime - pData->iStarttime; } else { iRuninterval = 0; } iWaitfor = calculate_delay (pData, pData->iFramedelay); if (iWaitfor > iRuninterval) /* delay necessary ? */ iInterval = iWaitfor - iRuninterval; else iInterval = 1; /* force app to process messageloop */ /* set the timer ? */ if (((pData->bRunning) || (pData->bSearching) || (pData->bReading)) && (!pData->bSkipping)) { iRetcode = set_delay (pData, iInterval); if (iRetcode) /* on error bail out */ return iRetcode; } } if (!pData->bSkipping) /* increase frametime in advance */ pData->iFrametime = pData->iFrametime + iWaitfor; /* setup for next delay */ pData->iFramedelay = pData->iNextdelay; pData->iAccumdelay += pData->iFramedelay;#endif }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_INTERFRAME_DELAY, MNG_LC_END);#endif return MNG_NOERROR;}/* ************************************************************************** */MNG_LOCAL void set_display_routine (mng_datap pData){ /* actively running ? */ if (((pData->bRunning) || (pData->bSearching)) && (!pData->bSkipping)) { switch (pData->iCanvasstyle) /* determine display routine */ {#ifndef MNG_SKIPCANVAS_RGB8 case MNG_CANVAS_RGB8 : { pData->fDisplayrow = (mng_fptr)mng_display_rgb8; break; }#endif#ifndef MNG_SKIPCANVAS_RGBA8 case MNG_CANVAS_RGBA8 : { pData->fDisplayrow = (mng_fptr)mng_display_rgba8; break; }#endif#ifndef MNG_SKIPCANVAS_RGBA8_PM case MNG_CANVAS_RGBA8_PM: { pData->fDisplayrow = (mng_fptr)mng_display_rgba8_pm; break; }#endif#ifndef MNG_SKIPCANVAS_ARGB8 case MNG_CANVAS_ARGB8 : { pData->fDisplayrow = (mng_fptr)mng_display_argb8; break; }#endif#ifndef MNG_SKIPCANVAS_ARGB8_PM case MNG_CANVAS_ARGB8_PM: { pData->fDisplayrow = (mng_fptr)mng_display_argb8_pm; break; }#endif#ifndef MNG_SKIPCANVAS_RGB8_A8 case MNG_CANVAS_RGB8_A8 : { pData->fDisplayrow = (mng_fptr)mng_display_rgb8_a8; break; }#endif#ifndef MNG_SKIPCANVAS_BGR8 case MNG_CANVAS_BGR8 : { pData->fDisplayrow = (mng_fptr)mng_display_bgr8; break; }#endif#ifndef MNG_SKIPCANVAS_BGRX8 case MNG_CANVAS_BGRX8 : { pData->fDisplayrow = (mng_fptr)mng_display_bgrx8; break; }#endif#ifndef MNG_SKIPCANVAS_BGRA8 case MNG_CANVAS_BGRA8 : { pData->fDisplayrow = (mng_fptr)mng_display_bgra8; break; }#endif#ifndef MNG_SKIPCANVAS_BGRA8_PM case MNG_CANVAS_BGRA8_PM: { pData->fDisplayrow = (mng_fptr)mng_display_bgra8_pm; break; }#endif#ifndef MNG_SKIPCANVAS_ABGR8 case MNG_CANVAS_ABGR8 : { pData->fDisplayrow = (mng_fptr)mng_display_abgr8; break; }#endif#ifndef MNG_SKIPCANVAS_ABGR8_PM case MNG_CANVAS_ABGR8_PM: { pData->fDisplayrow = (mng_fptr)mng_display_abgr8_pm; break; }#endif#ifndef MNG_SKIPCANVAS_RGB565 case MNG_CANVAS_RGB565 : { pData->fDisplayrow = (mng_fptr)mng_display_rgb565; break; }#endif#ifndef MNG_SKIPCANVAS_RGBA565 case MNG_CANVAS_RGBA565 : { pData->fDisplayrow = (mng_fptr)mng_display_rgba565; break; }#endif#ifndef MNG_SKIPCANVAS_BGR565 case MNG_CANVAS_BGR565 : { pData->fDisplayrow = (mng_fptr)mng_display_bgr565; break; }#endif#ifndef MNG_SKIPCANVAS_BGRA565 case MNG_CANVAS_BGRA565 : { pData->fDisplayrow = (mng_fptr)mng_display_bgra565; break; }#endif#ifndef MNG_SKIPCANVAS_BGR565_A8 case MNG_CANVAS_BGR565_A8 : { pData->fDisplayrow = (mng_fptr)mng_display_bgr565_a8; break; }#endif#ifndef MNG_NO_16BIT_SUPPORT/* case MNG_CANVAS_RGB16 : { pData->fDisplayrow = (mng_fptr)mng_display_rgb16; break; } *//* case MNG_CANVAS_RGBA16 : { pData->fDisplayrow = (mng_fptr)mng_display_rgba16; break; } *//* case MNG_CANVAS_ARGB16 : { pData->fDisplayrow = (mng_fptr)mng_display_argb16; break; } *//* case MNG_CANVAS_BGR16 : { pData->fDisplayrow = (mng_fptr)mng_display_bgr16; break; } *//* case MNG_CANVAS_BGRA16 : { pData->fDisplayrow = (mng_fptr)mng_display_bgra16; break; } *//* case MNG_CANVAS_ABGR16 : { pData->fDisplayrow = (mng_fptr)mng_display_abgr16; break; } */#endif/* case MNG_CANVAS_INDEX8 : { pData->fDisplayrow = (mng_fptr)mng_display_index8; break; } *//* case MNG_CANVAS_INDEXA8 : { pData->fDisplayrow = (mng_fptr)mng_display_indexa8; break; } *//* case MNG_CANVAS_AINDEX8 : { pData->fDisplayrow = (mng_fptr)mng_display_aindex8; break; } *//* case MNG_CANVAS_GRAY8 : { pData->fDisplayrow = (mng_fptr)mng_display_gray8; break; } *//* case MNG_CANVAS_AGRAY8 : { pData->fDisplayrow = (mng_fptr)mng_display_agray8; break; } *//* case MNG_CANVAS_GRAYA8 : { pData->fDisplayrow = (mng_fptr)mng_display_graya8; break; } */#ifndef MNG_NO_16BIT_SUPPORT/* case MNG_CANVAS_GRAY16 : { pData->fDisplayrow = (mng_fptr)mng_display_gray16; break; } *//* case MNG_CANVAS_GRAYA16 : { pData->fDisplayrow = (mng_fptr)mng_display_graya16; break; } *//* case MNG_CANVAS_AGRAY16 : { pData->fDisplayrow = (mng_fptr)mng_display_agray16; break; } */#endif/* case MNG_CANVAS_DX15 : { pData->fDisplayrow = (mng_fptr)mng_display_dx15; break; } *//* case MNG_CANVAS_DX16 : { pData->fDisplayrow = (mng_fptr)mng_display_dx16; break; } */ } } return;}/* ************************************************************************** */MNG_LOCAL mng_retcode load_bkgdlayer (mng_datap pData){#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_LOAD_BKGDLAYER, MNG_LC_START);#endif /* actively running ? */ if (((pData->bRunning) || (pData->bSearching)) && (!pData->bSkipping)) { mng_int32 iY; mng_retcode iRetcode; mng_bool bColorcorr = MNG_FALSE; /* save values */ mng_int32 iDestl = pData->iDestl; mng_int32 iDestr = pData->iDestr; mng_int32 iDestt = pData->iDestt; mng_int32 iDestb = pData->iDestb; mng_int32 iSourcel = pData->iSourcel; mng_int32 iSourcer = pData->iSourcer; mng_int32 iSourcet = pData->iSourcet; mng_int32 iSourceb = pData->iSourceb; mng_int8 iPass = pData->iPass; mng_int32 iRow = pData->iRow; mng_int32 iRowinc = pData->iRowinc; mng_int32 iCol = pData->iCol; mng_int32 iColinc = pData->iColinc; mng_int32 iRowsamples = pData->iRowsamples; mng_int32 iRowsize = pData->iRowsize; mng_uint8p pPrevrow = pData->pPrevrow; mng_uint8p pRGBArow = pData->pRGBArow; mng_bool bIsRGBA16 = pData->bIsRGBA16; mng_bool bIsOpaque = pData->bIsOpaque;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -