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

📄 libmng_display.c

📁 Linux下的基于X11的图形开发环境。
💻 C
📖 第 1 页 / 共 5 页
字号:
            {              iWaitfor = (mng_uint32)((1000 * pData->iFramedelay) / pData->iTicks);            }        }      }      else      {        if (pData->eImagetype == mng_it_mng)          iWaitfor = 1000;        else          iWaitfor = 1;      }      if (iWaitfor > iRuninterval)     /* delay necessary ? */        iInterval = iWaitfor - iRuninterval;      else        iInterval = 1;                 /* force app to process messageloop */      if (pData->bRunning)             /* set the timer ? */      {        iRetcode = set_delay (pData, iInterval);        if (iRetcode)                  /* on error bail out */          return iRetcode;      }    }    if (pData->bRunning)               /* increase frametime in advance */      pData->iFrametime = pData->iFrametime + iWaitfor;                                       /* setup for next delay */    pData->iFramedelay = pData->iNextdelay;  }#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_INTERFRAME_DELAY, MNG_LC_END)#endif  return MNG_NOERROR;}/* ************************************************************************** */void set_display_routine (mng_datap pData){                                        /* actively running ? */  if ((pData->bRunning) && (!pData->bFreezing))  {    switch (pData->iCanvasstyle)         /* determine display routine */    {      case MNG_CANVAS_RGB8    : { pData->fDisplayrow = (mng_fptr)display_rgb8;     break; }      case MNG_CANVAS_RGBA8   : { pData->fDisplayrow = (mng_fptr)display_rgba8;    break; }      case MNG_CANVAS_ARGB8   : { pData->fDisplayrow = (mng_fptr)display_argb8;    break; }      case MNG_CANVAS_RGB8_A8 : { pData->fDisplayrow = (mng_fptr)display_rgb8_a8;  break; }      case MNG_CANVAS_BGR8    : { pData->fDisplayrow = (mng_fptr)display_bgr8;     break; }      case MNG_CANVAS_BGRA8   : { pData->fDisplayrow = (mng_fptr)display_bgra8;    break; }      case MNG_CANVAS_BGRA8PM : { pData->fDisplayrow = (mng_fptr)display_bgra8_pm; break; }      case MNG_CANVAS_ABGR8   : { pData->fDisplayrow = (mng_fptr)display_abgr8;    break; }/*      case MNG_CANVAS_RGB16   : { pData->fDisplayrow = (mng_fptr)display_rgb16;    break; } *//*      case MNG_CANVAS_RGBA16  : { pData->fDisplayrow = (mng_fptr)display_rgba16;   break; } *//*      case MNG_CANVAS_ARGB16  : { pData->fDisplayrow = (mng_fptr)display_argb16;   break; } *//*      case MNG_CANVAS_BGR16   : { pData->fDisplayrow = (mng_fptr)display_bgr16;    break; } *//*      case MNG_CANVAS_BGRA16  : { pData->fDisplayrow = (mng_fptr)display_bgra16;   break; } *//*      case MNG_CANVAS_ABGR16  : { pData->fDisplayrow = (mng_fptr)display_abgr16;   break; } *//*      case MNG_CANVAS_INDEX8  : { pData->fDisplayrow = (mng_fptr)display_index8;   break; } *//*      case MNG_CANVAS_INDEXA8 : { pData->fDisplayrow = (mng_fptr)display_indexa8;  break; } *//*      case MNG_CANVAS_AINDEX8 : { pData->fDisplayrow = (mng_fptr)display_aindex8;  break; } *//*      case MNG_CANVAS_GRAY8   : { pData->fDisplayrow = (mng_fptr)display_gray8;    break; } *//*      case MNG_CANVAS_GRAY16  : { pData->fDisplayrow = (mng_fptr)display_gray16;   break; } *//*      case MNG_CANVAS_GRAYA8  : { pData->fDisplayrow = (mng_fptr)display_graya8;   break; } *//*      case MNG_CANVAS_GRAYA16 : { pData->fDisplayrow = (mng_fptr)display_graya16;  break; } *//*      case MNG_CANVAS_AGRAY8  : { pData->fDisplayrow = (mng_fptr)display_agray8;   break; } *//*      case MNG_CANVAS_AGRAY16 : { pData->fDisplayrow = (mng_fptr)display_agray16;  break; } *//*      case MNG_CANVAS_DX15    : { pData->fDisplayrow = (mng_fptr)display_dx15;     break; } *//*      case MNG_CANVAS_DX16    : { pData->fDisplayrow = (mng_fptr)display_dx16;     break; } */    }  }  return;}/* ************************************************************************** */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->bFreezing))  {    mng_int32   iY;    mng_retcode iRetcode;              /* 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_bool    bIsRGBA16   = pData->bIsRGBA16;    mng_bool    bIsOpaque   = pData->bIsOpaque;    mng_fptr    fCorrectrow = pData->fCorrectrow;    pData->iDestl   = 0;               /* determine clipping region */    pData->iDestt   = 0;    pData->iDestr   = pData->iWidth;    pData->iDestb   = pData->iHeight;    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);    }                                       /* anything to clear ? */    if ((pData->iDestr >= pData->iDestl) && (pData->iDestb >= pData->iDestt))    {      pData->iPass       = -1;         /* these are the object's dimensions now */      pData->iRow        = 0;      pData->iRowinc     = 1;      pData->iCol        = 0;      pData->iColinc     = 1;      pData->iRowsamples = pData->iWidth;      pData->iRowsize    = pData->iRowsamples << 2;      pData->bIsRGBA16   = MNG_FALSE;    /* let's keep it simple ! */      pData->bIsOpaque   = MNG_TRUE;      pData->iSourcel    = 0;          /* source relative to destination */      pData->iSourcer    = pData->iDestr - pData->iDestl;      pData->iSourcet    = 0;      pData->iSourceb    = pData->iDestb - pData->iDestt;      set_display_routine (pData);     /* determine display routine */                                       /* default restore using preset BG color */      pData->fRestbkgdrow = (mng_fptr)restore_bkgd_bgcolor;      if (((pData->eImagetype == mng_it_png) || (pData->eImagetype == mng_it_jng)) &&          (pData->bUseBKGD))      {                                /* prefer bKGD in PNG/JNG */        mng_imagep pImage = (mng_imagep)pData->pCurrentobj;        if (!pImage)          pImage = (mng_imagep)pData->pObjzero;        if (pImage->pImgbuf->bHasBKGD)          pData->fRestbkgdrow = (mng_fptr)restore_bkgd_bkgd;      }      if (pData->fGetbkgdline)         /* background-canvas-access callback set ? */      {        switch (pData->iBkgdstyle)        {          case MNG_CANVAS_RGB8    : { pData->fRestbkgdrow = (mng_fptr)restore_bkgd_rgb8;    break; }          case MNG_CANVAS_BGR8    : { pData->fRestbkgdrow = (mng_fptr)restore_bkgd_bgr8;    break; }  /*        case MNG_CANVAS_RGB16   : { pData->fRestbkgdrow = (mng_fptr)restore_bkgd_rgb16;   break; } */  /*        case MNG_CANVAS_BGR16   : { pData->fRestbkgdrow = (mng_fptr)restore_bkgd_bgr16;   break; } */  /*        case MNG_CANVAS_INDEX8  : { pData->fRestbkgdrow = (mng_fptr)restore_bkgd_index8;  break; } */  /*        case MNG_CANVAS_GRAY8   : { pData->fRestbkgdrow = (mng_fptr)restore_bkgd_gray8;   break; } */  /*        case MNG_CANVAS_GRAY16  : { pData->fRestbkgdrow = (mng_fptr)restore_bkgd_gray16;  break; } */  /*        case MNG_CANVAS_DX15    : { pData->fRestbkgdrow = (mng_fptr)restore_bkgd_dx15;    break; } */  /*        case MNG_CANVAS_DX16    : { pData->fRestbkgdrow = (mng_fptr)restore_bkgd_dx16;    break; } */        }      }      if (pData->bHasBACK)      {                                /* background image ? */        if ((pData->iBACKmandatory & 0x02) && (pData->iBACKimageid))          pData->fRestbkgdrow = (mng_fptr)restore_bkgd_backimage;        else                           /* background color ? */        if (pData->iBACKmandatory & 0x01)          pData->fRestbkgdrow = (mng_fptr)restore_bkgd_backcolor;      }      pData->fCorrectrow = MNG_NULL;   /* default no color-correction */      /* TODO: determine color correction; this is tricky;         the BACK color is treated differently as the image;         it probably requires a rewrite of the logic here... */                                       /* get a temporary row-buffer */      MNG_ALLOC (pData, pData->pRGBArow, pData->iRowsize)      iY       = pData->iDestt;        /* this is where we start */      iRetcode = MNG_NOERROR;          /* so far, so good */      while ((!iRetcode) && (iY < pData->iDestb))      {                                /* restore a background row */        iRetcode = ((mng_restbkgdrow)pData->fRestbkgdrow) (pData);                                       /* color correction ? */        if ((!iRetcode) && (pData->fCorrectrow))          iRetcode = ((mng_correctrow)pData->fCorrectrow) (pData);        if (!iRetcode)                 /* so... display it */          iRetcode = ((mng_displayrow)pData->fDisplayrow) (pData);        if (!iRetcode)          iRetcode = next_row (pData); /* adjust variables for next row */        iY++;                          /* and next line */      }                                       /* drop the temporary row-buffer */      MNG_FREE (pData, pData->pRGBArow, pData->iRowsize)      if (iRetcode)                    /* on error bail out */        return iRetcode;    }    pData->iDestl      = iDestl;       /* restore values */    pData->iDestr      = iDestr;    pData->iDestt      = iDestt;    pData->iDestb      = iDestb;    pData->iSourcel    = iSourcel;    pData->iSourcer    = iSourcer;    pData->iSourcet    = iSourcet;    pData->iSourceb    = iSourceb;    pData->iPass       = iPass;    pData->iRow        = iRow;    pData->iRowinc     = iRowinc;    pData->iCol        = iCol;    pData->iColinc     = iColinc;    pData->iRowsamples = iRowsamples;    pData->iRowsize    = iRowsize;    pData->bIsRGBA16   = bIsRGBA16;    pData->bIsOpaque   = bIsOpaque;    pData->fCorrectrow = fCorrectrow;  }#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_LOAD_BKGDLAYER, MNG_LC_END)#endif  return MNG_NOERROR;}/* ************************************************************************** */mng_retcode clear_canvas (mng_datap pData){  mng_int32   iY;  mng_retcode iRetcode;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_CLEAR_CANVAS, MNG_LC_START)#endif  pData->iDestl      = 0;              /* clipping region is full canvas! */  pData->iDestt      = 0;  pData->iDestr      = pData->iWidth;  pData->iDestb      = pData->iHeight;  pData->iSourcel    = 0;              /* source is same as destination */  pData->iSourcer    = pData->iWidth;  pData->iSourcet    = 0;  pData->iSourceb    = pData->iHeight;  pData->iPass       = -1;             /* these are the object's dimensions now */  pData->iRow        = 0;  pData->iRowinc     = 1;  pData->iCol        = 0;  pData->iColinc     = 1;  pData->iRowsamples = pData->iWidth;  pData->iRowsize    = pData->iRowsamples << 2;  pData->bIsRGBA16   = MNG_FALSE;      /* let's keep it simple ! */  pData->bIsOpaque   = MNG_TRUE;  set_display_routine (pData);         /* determine display routine */                                       /* get a temporary row-buffer */                                       /* it's transparent black by default!! */  MNG_ALLOC (pData, pData->pRGBArow, pData->iRowsize)  iY       = pData->iDestt;            /* this is where we start */  iRetcode = MNG_NOERROR;              /* so far, so good */  while ((!iRetcode) && (iY < pData->iDestb))  {                                    /* clear a row then */    iRetcode = ((mng_displayrow)pData->fDisplayrow) (pData);    if (!iRetcode)      iRetcode = next_row (pData);     /* adjust variables for next row */    iY++;                              /* and next line */  }                                       /* drop the temporary row-buffer */  MNG_FREE (pData, pData->pRGBArow, pData->iRowsize)

⌨️ 快捷键说明

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