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

📄 libmng_display.c

📁 Linux下的基于X11的图形开发环境。
💻 C
📖 第 1 页 / 共 5 页
字号:
  if (iRetcode)                        /* on error bail out */    return iRetcode;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_CLEAR_CANVAS, MNG_LC_END)#endif  return MNG_NOERROR;}/* ************************************************************************** */mng_retcode next_frame (mng_datap  pData,                        mng_uint8  iFramemode,                        mng_uint8  iChangedelay,                        mng_uint32 iDelay,                        mng_uint8  iChangetimeout,                        mng_uint32 iTimeout,                        mng_uint8  iChangeclipping,                        mng_uint8  iCliptype,                        mng_int32  iClipl,                        mng_int32  iClipr,                        mng_int32  iClipt,                        mng_int32  iClipb){  mng_retcode iRetcode = MNG_NOERROR;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_NEXT_FRAME, MNG_LC_START)#endif  if (!pData->iBreakpoint)             /* no previous break here ? */  {    mng_uint8 iOldmode = pData->iFramemode;                                       /* interframe delay required ? */    if ((iOldmode == 2) || (iOldmode == 4))    {/* changed here because FRAM 1/3 will delay themselves before each image */      if ((pData->iFrameseq) && (iFramemode != 1) && (iFramemode != 3))        iRetcode = interframe_delay (pData);      else        pData->iFramedelay = pData->iNextdelay;    }    else    {                                  /* delay before inserting background layer? */      if ((pData->bFramedone) && (iFramemode == 4))        iRetcode = interframe_delay (pData);    }    if (iRetcode)                      /* on error bail out */      return iRetcode;                                       /* now we'll assume we're in the next frame! */    if (iFramemode)                    /* save the new framing mode ? */    {      pData->iFRAMmode  = iFramemode;      pData->iFramemode = iFramemode;    }    else                               /* reload default */      pData->iFramemode = pData->iFRAMmode;    if (iChangedelay)                  /* delay changed ? */    {      pData->iNextdelay = iDelay;      /* for *after* next subframe */      if ((iOldmode == 2) || (iOldmode == 4))/*        pData->iFramedelay = iDelay; */        pData->iFramedelay = pData->iFRAMdelay;      if (iChangedelay == 2)           /* also overall ? */        pData->iFRAMdelay = iDelay;    }    else    {                                  /* reload default */      pData->iNextdelay = pData->iFRAMdelay;/*      if ((iOldmode == 2) || (iOldmode == 4))        pData->iFramedelay = pData->iNextdelay; */    }    if (iChangetimeout)                /* timeout changed ? */    {                                  /* for next subframe */      pData->iFrametimeout = iTimeout;      if ((iChangetimeout == 2) ||     /* also overall ? */          (iChangetimeout == 4) ||          (iChangetimeout == 6) ||          (iChangetimeout == 8))        pData->iFRAMtimeout = iTimeout;    }    else                               /* reload default */      pData->iFrametimeout = pData->iFRAMtimeout;    if (iChangeclipping)               /* clipping changed ? */    {      pData->bFrameclipping = MNG_TRUE;      if (!iCliptype)                  /* absolute ? */      {        pData->iFrameclipl = iClipl;        pData->iFrameclipr = iClipr;        pData->iFrameclipt = iClipt;        pData->iFrameclipb = iClipb;      }      else                             /* relative */      {        pData->iFrameclipl = pData->iFrameclipl + iClipl;        pData->iFrameclipr = pData->iFrameclipr + iClipr;        pData->iFrameclipt = pData->iFrameclipt + iClipt;        pData->iFrameclipb = pData->iFrameclipb + iClipb;      }      if (iChangeclipping == 2)        /* also overall ? */      {        pData->bFRAMclipping = MNG_TRUE;        if (!iCliptype)                /* absolute ? */        {          pData->iFRAMclipl = iClipl;          pData->iFRAMclipr = iClipr;          pData->iFRAMclipt = iClipt;          pData->iFRAMclipb = iClipb;        }        else                           /* relative */        {          pData->iFRAMclipl = pData->iFRAMclipl + iClipl;          pData->iFRAMclipr = pData->iFRAMclipr + iClipr;          pData->iFRAMclipt = pData->iFRAMclipt + iClipt;          pData->iFRAMclipb = pData->iFRAMclipb + iClipb;        }      }    }    else    {                                  /* reload defaults */      pData->bFrameclipping = pData->bFRAMclipping;      pData->iFrameclipl    = pData->iFRAMclipl;      pData->iFrameclipr    = pData->iFRAMclipr;      pData->iFrameclipt    = pData->iFRAMclipt;      pData->iFrameclipb    = pData->iFRAMclipb;    }  }  if (!pData->bTimerset)               /* timer still off ? */  {    if ((pData->iFramemode == 4) ||    /* insert background layer after a new frame */        (!pData->iLayerseq))           /* and certainly before the very first layer */      iRetcode = load_bkgdlayer (pData);    if (iRetcode)                      /* on error bail out */      return iRetcode;    if ((pData->bDisplaying) && (pData->bRunning))    {      pData->iFrameseq++;              /* count the frame ! */      pData->bFramedone = MNG_TRUE;    /* and indicate we've done one */    }  }#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_NEXT_FRAME, MNG_LC_END)#endif  return MNG_NOERROR;}/* ************************************************************************** */mng_retcode next_layer (mng_datap pData){  mng_imagep  pImage;  mng_retcode iRetcode = MNG_NOERROR;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_NEXT_LAYER, MNG_LC_START)#endif  if (!pData->iBreakpoint)             /* no previous break here ? */  {                                    /* interframe delay required ? */    if ((pData->eImagetype == mng_it_mng) && (pData->iLayerseq) &&        ((pData->iFramemode == 1) || (pData->iFramemode == 3)))      iRetcode = interframe_delay (pData);    else      pData->iFramedelay = pData->iNextdelay;    if (iRetcode)                      /* on error bail out */      return iRetcode;  }  if (!pData->bTimerset)               /* timer still off ? */  {    if (!pData->iLayerseq)             /* restore background for the very first layer ? */    {                                  /* wait till IDAT/JDAT for PNGs & JNGs !!! */      if ((pData->eImagetype == mng_it_png) || (pData->eImagetype == mng_it_jng))        pData->bRestorebkgd = MNG_TRUE;      else      {                                /* for MNG we do it right away */        iRetcode = load_bkgdlayer (pData);        if (pData->bRunning)          pData->iLayerseq++;          /* and it counts as a layer then ! */      }    }    else    if (pData->iFramemode == 3)        /* restore background for each layer ? */      iRetcode = load_bkgdlayer (pData);    if (iRetcode)                      /* on error bail out */      return iRetcode;    if (pData->bHasDHDR)               /* processing a delta-image ? */      pImage = (mng_imagep)pData->pDeltaImage;    else      pImage = (mng_imagep)pData->pCurrentobj;    if (!pImage)                       /* not an active object ? */      pImage = (mng_imagep)pData->pObjzero;                                       /* determine display rectangle */    pData->iDestl   = MAX_COORD ((mng_int32)0,   pImage->iPosx);    pData->iDestt   = MAX_COORD ((mng_int32)0,   pImage->iPosy);                                       /* is it a valid buffer ? */    if ((pImage->pImgbuf->iWidth) && (pImage->pImgbuf->iHeight))    {      pData->iDestr = MIN_COORD ((mng_int32)pData->iWidth,                                 pImage->iPosx + (mng_int32)pImage->pImgbuf->iWidth );      pData->iDestb = MIN_COORD ((mng_int32)pData->iHeight,                                 pImage->iPosy + (mng_int32)pImage->pImgbuf->iHeight);    }    else                               /* it's a single image ! */    {      pData->iDestr = MIN_COORD ((mng_int32)pData->iWidth,                                 (mng_int32)pData->iDatawidth );      pData->iDestb = MIN_COORD ((mng_int32)pData->iHeight,                                 (mng_int32)pData->iDataheight);    }    if (pData->bFrameclipping)         /* frame clipping specified ? */    {      pData->iDestl = MAX_COORD (pData->iDestl,  pData->iFrameclipl);      pData->iDestt = MAX_COORD (pData->iDestt,  pData->iFrameclipt);      pData->iDestr = MIN_COORD (pData->iDestr,  pData->iFrameclipr);      pData->iDestb = MIN_COORD (pData->iDestb,  pData->iFrameclipb);    }    if (pImage->bClipped)              /* is the image clipped itself ? */    {      pData->iDestl = MAX_COORD (pData->iDestl,  pImage->iClipl);      pData->iDestt = MAX_COORD (pData->iDestt,  pImage->iClipt);      pData->iDestr = MIN_COORD (pData->iDestr,  pImage->iClipr);      pData->iDestb = MIN_COORD (pData->iDestb,  pImage->iClipb);    }                                       /* determine source starting point */    pData->iSourcel = MAX_COORD ((mng_int32)0,   pData->iDestl - pImage->iPosx);    pData->iSourcet = MAX_COORD ((mng_int32)0,   pData->iDestt - pImage->iPosy);    if ((pImage->pImgbuf->iWidth) && (pImage->pImgbuf->iHeight))    {                                  /* and maximum size  */      pData->iSourcer = MIN_COORD ((mng_int32)pImage->pImgbuf->iWidth,                                   pData->iSourcel + pData->iDestr - pData->iDestl);      pData->iSourceb = MIN_COORD ((mng_int32)pImage->pImgbuf->iHeight,                                   pData->iSourcet + pData->iDestb - pData->iDestt);    }    else                               /* it's a single image ! */    {      pData->iSourcer = pData->iSourcel + pData->iDestr - pData->iDestl;      pData->iSourceb = pData->iSourcet + pData->iDestb - pData->iDestt;    }    if (pData->bRunning)      pData->iLayerseq++;              /* count the layer ! */  }#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_NEXT_LAYER, MNG_LC_END)#endif  return MNG_NOERROR;}/* ************************************************************************** */mng_retcode display_image (mng_datap  pData,                           mng_imagep pImage,                           mng_bool   bLayeradvanced){  mng_retcode iRetcode;  #ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_DISPLAY_IMAGE, MNG_LC_START)#endif                                       /* actively running ? */  if ((pData->bRunning) && (!pData->bFreezing))  {    if ( (!pData->iBreakpoint) &&      /* needs magnification ? */         ( (pImage->iMAGN_MethodX) || (pImage->iMAGN_MethodY) ) )    {      iRetcode = magnify_imageobject (pData, pImage);      if (iRetcode)                    /* on error bail out */

⌨️ 快捷键说明

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