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

📄 tkwingdi.c

📁 linux系统下的音频通信
💻 C
📖 第 1 页 / 共 5 页
字号:
{  UINT result=SetPaletteEntries(hPal,iStart,cEntries,lppe);  if(result){    InvalidateSelectedPalette(hPal);  }#ifdef CKGRAPH_DEBUG  else {    dprintf("CkRealizePalette failed in %s %d\n",file,line);  }  tkWinGdi_SetPaletteEntries++;  GTRACE(("%d:SetPaletteEntries(0x%x,%d,%d,..) return 0x%x in %s %d\n",tkWinGdi_SetPaletteEntries,hPal,iStart,cEntries,result,file,line);)#endif  return result;}#ifdef CKGRAPH_DEBUGUINT CkGraph_ResizePalette(HPALETTE hPal,UINT nEntries,char* file,int line)#elseUINT CkGraph_ResizePalette(HPALETTE hPal,UINT nEntries)#endif /*CKGRAPH_DEBUG*/{  BOOL result=ResizePalette(hPal,nEntries);  if(result){    InvalidateSelectedPalette(hPal);  }#ifdef CKGRAPH_DEBUG  else {    dprintf("CkResizePalette failed in %s %d\n",file,line);  }  tkWinGdi_ResizePalette++;  GTRACE(("%d:ResizePalette(0x%x,%d) return 0x%x in %s %d\n",tkWinGdi_ResizePalette,hPal,nEntries,result,file,line);)#endif  return result;}#ifdef CKGRAPH_DEBUGint CkGraph_SetROP2(HDC hdc,int fnDrawMode,char* file,int line)#elseint CkGraph_SetROP2(HDC hdc,int fnDrawMode)#endif /*CKGRAPH_DEBUG*/{   GdiContext *devPtr=FINDCONTEXT(hdc);   int ropout;   //if already selected,make a simple return   if(devPtr && devPtr->rop==fnDrawMode){#ifdef CKGRAPH_DEBUG     //check if nobody behind us changed the ROP...     if((ropout=GetROP2(hdc))!=fnDrawMode){       dprintf("rop is %d,should be %d in %s %d\n",ropout,fnDrawMode,file,line);       fnDrawMode=SetROP2(hdc,fnDrawMode);     }#endif     return fnDrawMode;   }   ropout=SetROP2(hdc,fnDrawMode);   if(ropout && devPtr){     devPtr->rop=fnDrawMode;   }#ifdef CKGRAPH_DEBUG   tkWinGdi_SetROP2++;   if(!ropout)     dprintf("CkSetROP2 failed in %s %d\n",file,line);  GTRACE(("%d:SetROP2(0x%x,%d) return 0x%x in %s %d\n",tkWinGdi_SetROP2,hdc,fnDrawMode,ropout,file,line);)#endif  return ropout;}#ifdef CKGRAPH_DEBUGint CkGraph_SetBkMode(HDC hdc,int iBkMode,char* file,int line)#elseint CkGraph_SetBkMode(HDC hdc,int iBkMode)#endif /*CKGRAPH_DEBUG*/{   GdiContext *devPtr=FINDCONTEXT(hdc);   int bkout;   //if already selected,make a simple return   if(devPtr && devPtr->bkmode==iBkMode){#ifdef CKGRAPH_DEBUG     //check if nobody behind us changed the bkmode...     if((bkout=GetBkMode(hdc))!=iBkMode){       dprintf("bkmode is %d, should be %d in %s %d\n",bkout,iBkMode,file,line);       SetBkMode(hdc,iBkMode);     }#endif     return iBkMode;   }   bkout=SetBkMode(hdc,iBkMode);   if(bkout && devPtr){     devPtr->bkmode=iBkMode;   }#ifdef CKGRAPH_DEBUG   tkWinGdi_SetBkMode++;   if(!bkout)     dprintf("CkSetBkMode failed in %s %d\n",file,line);  GTRACE(("%d:SetBkMode(0x%x,%d) return 0x%x in %s %d\n",tkWinGdi_SetBkMode,hdc,iBkMode,bkout,file,line);)#endif  return bkout;}#ifdef CKGRAPH_DEBUGCOLORREF CkGraph_SetColor(HDC hdc,COLORREF color,int bk,char* file,int line)#elseCOLORREF CkGraph_SetColor(HDC hdc,COLORREF color,int bk)#endif /*CKGRAPH_DEBUG*/{   GdiContext *devPtr=FINDCONTEXT(hdc);   COLORREF colorout;   COLORREF* colorPtr;   //if already selected,make a simple return   if(devPtr) {      if( *(colorPtr=(bk?&devPtr->bkcolor:&devPtr->textcolor))==color)#ifdef CKGRAPH_DEBUG     //is it REALLY selected?     //check if nobody behind us changed the colors...     {       COLORREF realbk;       if((realbk=bk?GetBkColor(hdc):GetTextColor(hdc))!=color){         dprintf("%s is 0x%x,should be 0x%x in %s %d\n",bk?"bkcolor":"txtcolor",realbk,color,file,line);         return bk?SetBkColor(hdc,color):SetTextColor(hdc,color);       }       return color;            }#else       return color;#endif   }   colorout=bk?SetBkColor(hdc,color):SetTextColor(hdc,color);   if(colorout!=CLR_INVALID && devPtr){     *colorPtr=color;   }#ifdef CKGRAPH_DEBUG   if(bk) tkWinGdi_SetBkColor++; else tkWinGdi_SetTextColor++;   if(colorout==CLR_INVALID)     dprintf("%s failed in %s %d\n",bk?"CkSetBkColor":"CkSetTextColor",file,line);  GTRACE(("%d:%s(0x%x,0x%x) return 0x%x in %s %d\n",bk?tkWinGdi_SetBkColor:tkWinGdi_SetTextColor,bk?"SetBkColor":"SetTextColor",hdc,color,colorout,file,line);)#endif  return colorout;}#ifdef CKGRAPH_DEBUGint CkGraph_SetPolyFillMode(HDC hdc, int iMode,char* file,int line)#elseint CkGraph_SetPolyFillMode(HDC hdc, int iMode)#endif /*CKGRAPH_DEBUG*/{   GdiContext *devPtr=FINDCONTEXT(hdc);   int fillout;   //if already selected,make a simple return   if(devPtr && devPtr->fillmode==iMode){#ifdef CKGRAPH_DEBUG     //check if nobody behind us changed the fillmode...     if((fillout=GetPolyFillMode(hdc))!=iMode){       dprintf("fillmode is %d,should be %d in %s %d\n",fillout,iMode,file,line);       iMode=SetPolyFillMode(hdc,iMode);     }#endif     return iMode;   }   fillout=SetPolyFillMode(hdc,iMode);   if(fillout && devPtr){     devPtr->fillmode=iMode;   }#ifdef CKGRAPH_DEBUG   tkWinGdi_SetPolyFillMode++;   if(!fillout)     dprintf("CkSetPolyFillMode failed in %s %d\n",file,line);  GTRACE(("%d:SetPolyFillMode(0x%x,%d) return 0x%x in %s %d\n",tkWinGdi_SetPolyFillMode,hdc,iMode,fillout,file,line);)#endif  return fillout;}#ifdef CKGRAPH_DEBUGHFONT CkGraph_SelectFont(HDC hdc,HFONT hfont,char* file,int line)#elseHFONT CkGraph_SelectFont(HDC hdc,HFONT hfont)#endif /*CKGRAPH_DEBUG*/{   GdiContext *devPtr=FINDCONTEXT(hdc);   HFONT hout;   //if already selected,make a simple return   if(devPtr && devPtr->hobjs[CKOBJ_FONT]==(HGDIOBJ)hfont){#ifdef CKGRAPH_DEBUG     hout=(HFONT)SelectObject(hdc,(HGDIOBJ)stock_SYSTEM_FONT);     if(hout!=hfont){       dprintf("font is 0x%x,should be 0x%x in %s %d\n",hout,hfont,file,line);     }     hfont=(HFONT)SelectObject(hdc,(HGDIOBJ)hfont);#endif     return hfont;   }   hout=(HFONT)SelectObject(hdc,(HGDIOBJ)hfont);   if(hout && devPtr){     devPtr->hobjs[CKOBJ_FONT]=(HGDIOBJ)hfont;   }#ifdef CKGRAPH_DEBUG   tkWinGdi_SelectFont++;   if(!hout)     dprintf("CkSelectFont failed in %s %d\n",file,line);   GTRACE(("%d:SelectFont(0x%x,0x%x) return 0x%x in %s %d\n",tkWinGdi_SelectFont,hdc,hfont,hout,file,line);)#endif  return hout;}//DeleteObject functions#ifdef CKGRAPH_DEBUG#define CHECKSEL(x) if(!(x)){dprintf("%s failed in %s,line %d\n",##x,__FILE__,__LINE__);}#define DODELETEOBJECT(type,hobj,file,line) DoDeleteObject(type,hobj,file,line)static int DoDeleteObject(int type,HGDIOBJ hobj,char* file,int line)#else#define CHECKSEL(x) x#define DODELETEOBJECT(type,hobj,file,line) DoDeleteObject(type,hobj)static int DoDeleteObject(int type,HGDIOBJ hobj)#endif{  int success=1;  GdiContext* objPtr;#ifdef CKGRAPH_DEBUG  if(is_stockobject(type,hobj)){    dprintf("fatal try to delete the stockobject 0x%x in %s %d\n",hobj,file,line);    return 0;  }#endif  //walk through the list of dc's and look if the object is still selected in a dc  for (objPtr = devHead ;objPtr;objPtr=objPtr->next){    if(objPtr->hobjs[type]==hobj){    //yupp ,it does#ifdef CKGRAPH_DEBUG      if (tkWinGdi_verbose>1){        GdiObj* hdcobj=CkGraphFindObject(objPtr->type,                                             (ClientData)objPtr->hdc);        dprintf(            "CkDeleteObject:%s 0x%x from %s %d still selected in 0x%x %s %d\n",                        obj_type(type),(int)hobj,file,line,               (int)objPtr->hdc,hdcobj?hdcobj->file:"??",hdcobj?hdcobj->line:0);      }#endif      //repair with deselecting the object      switch(type){        case CKOBJ_PEN:CHECKSEL(SelectObject(objPtr->hdc,objPtr->hobjs[type]=stock_NULL_PEN));break;        case CKOBJ_BRUSH:CHECKSEL(SelectObject(objPtr->hdc,objPtr->hobjs[type]=stock_NULL_BRUSH));break;        case CKOBJ_FONT:CHECKSEL(SelectObject(objPtr->hdc,objPtr->hobjs[type]=stock_SYSTEM_FONT));break;        case CKOBJ_REGION:CHECKSEL(SelectClipRgn(objPtr->hdc,objPtr->hobjs[type]=(HGDIOBJ)NULL));break;        case CKOBJ_PAL:CHECKSEL(SelectPalette(objPtr->hdc,objPtr->hobjs[type]=stock_DEFAULT_PALETTE,TRUE));break;        case CKOBJ_BITMAP:CHECKSEL(SelectObject(objPtr->hdc,objPtr->hobjs[type]=objPtr->defaultbitmap));break;        default:          dprintf("have no success select for 0x%x\n");          success=0;      }    }  }  return success;}#ifdef CKGRAPH_DEBUGstatic int DoRealDelete(int type,HGDIOBJ hobj,char* file,int line){  int result=DeleteObject(hobj);  if(!result)    dprintf("CkDeleteObject 0x%x failed in %s %d\n",(int)hobj,file,line);  CkGraphDeleteObject(type,(ClientData)hobj,file,line);  return result;}#else#define DoRealDelete(type,hobj,file,line) DeleteObject(hobj)#endif#ifdef CKGRAPH_DEBUGint CkGraph_DeleteObject(HGDIOBJ hobj,char* file,int line)#elseint CkGraph_DeleteObject(HGDIOBJ hobj)#endif{  int success=1;  int type;  //GetObjectType only runs well under NT and Win95 not Win32s  //use the CkGraph_Deletexx functions instead  if(Wtk_test_win32s()){    dprintf("CkDeleteObject called under win32s"#ifdef CKGRAPH_DEBUG            " in %s %d\n",file,line#endif           );  }  type=convert_gdiobjtype(GetObjectType(hobj));  if(type>=0 && type <MAXGDIOBJ){    success=DODELETEOBJECT(type,hobj,file,line);  }#ifdef CKGRAPH_DEBUG  tkWinGdi_DeleteObject++;   GTRACE(("%d:DeleteObject(0x%x) return %d in %s %d\n",tkWinGdi_DeleteObject,hobj,success,file,line);)#endif  return success?DoRealDelete(type,hobj,file,line):FALSE;}#ifdef CKGRAPH_DEBUGint CkGraph_DeleteBrush(HBRUSH hobj,char* file,int line)#elseint CkGraph_DeleteBrush(HBRUSH hobj)#endif{  int success=DODELETEOBJECT(CKOBJ_BRUSH,hobj,file,line);#ifdef CKGRAPH_DEBUG  tkWinGdi_DeleteBrush++;  GTRACE(("%d:DeleteBrush(0x%x) return %d in %s %d\n",tkWinGdi_DeleteBrush,hobj,success,file,line);)#endif  return success?DoRealDelete(CKOBJ_BRUSH,hobj,file,line):FALSE;}#ifdef CKGRAPH_DEBUGint CkGraph_DeletePen(HPEN hobj,char* file,int line)#elseint CkGraph_DeletePen(HPEN hobj)#endif{  int success=DODELETEOBJECT(CKOBJ_PEN,hobj,file,line);#ifdef CKGRAPH_DEBUG  tkWinGdi_DeletePen++;  GTRACE(("%d:DeletePen(0x%x) return %d in %s %d\n",tkWinGdi_DeletePen,hobj,success,file,line);)#endif  return success?DoRealDelete(CKOBJ_PEN,hobj,file,line):FALSE;}#ifdef CKGRAPH_DEBUGint CkGraph_DeleteFont(HFONT hobj,char* file,int line)#elseint CkGraph_DeleteFont(HFONT hobj)#endif{  int success=DODELETEOBJECT(CKOBJ_FONT,hobj,file,line);#ifdef CKGRAPH_DEBUG  tkWinGdi_DeleteFont++;  GTRACE(("%d:DeleteFont(0x%x) return %d in %s %d\n",tkWinGdi_DeleteFont,hobj,success,file,line);)#endif  return success?DoRealDelete(CKOBJ_FONT,hobj,file,line):FALSE;}#ifdef CKGRAPH_DEBUGint CkGraph_DeleteBitmap(HBITMAP hobj,char* file,int line)#elseint CkGraph_DeleteBitmap(HBITMAP hobj)#endif{  int success=DODELETEOBJECT(CKOBJ_BITMAP,hobj,file,line);#ifdef CKGRAPH_DEBUG  tkWinGdi_DeleteBitmap++;  GTRACE(("%d:DeleteBitmap(0x%x) return %d in %s %d\n",tkWinGdi_DeleteBitmap,hobj,success,file,line);)#endif  return success?DoRealDelete(CKOBJ_BITMAP,hobj,file,line):FALSE;}#ifdef CKGRAPH_DEBUGint CkGraph_DeletePalette(HPALETTE hobj,char* file,int line)#elseint CkGraph_DeletePalette(HPALETTE hobj)#endif{  int success=DODELETEOBJECT(CKOBJ_PAL,hobj,file,line);  /*now it's a good point to try freeing the freePals if there were previous*/  if(freePals) {    TryFreePalettes(&freePals);  }#ifdef CKGRAPH_DEBUG  tkWinGdi_DeletePalette++;  GTRACE(("%d:DeletePalette(0x%x) return %d in %s %d\n",tkWinGdi_DeletePalette,hobj,success,file,line);)#endif  if(DoRealDelete(CKOBJ_PAL,hobj,file,line)==FALSE) {    /*Oops, the deletion failed , so try it later*/#ifdef CKGRAPH_DEBUG    CkGraphCreateObject(CKOBJ_PAL,(ClientData)hobj,file,line);#endif    /*promise the caller it were ok*/    success=TRUE;    AddPalObj(&freePals,(HPALETTE)hobj);  }  RemovePalObj(&allocPals,(HPALETTE)hobj);  return success;}/*  this bloody function tries to free all objects allocated here  it walks trough the list of DC's and tries to wipe out all  objects, afterwards all DC's are freed*/void CkGraph_FreeObjects(void){  GdiContext *devPtr,*objPtr2,*nextPtr;  int  i;  int gdiobjs[5]={CKOBJ_BRUSH,CKOBJ_PEN,CKOBJ_FONT,CKOBJ_BITMAP,CKOBJ_PAL};  currdc=(GdiContext*)0;  for (devPtr = devHead ;devPtr;){    nextPtr = devPtr->next;    /*look for all selected objects in gdiobjs*/    for (i=0;i<sizeof(gdiobjs)/sizeof(gdiobjs[0]);i++){      int objtype=gdiobjs[i];      HGDIOBJ hgdiobj=devPtr->hobjs[objtype];      /*don't delete StockObjects */      if (hgdiobj!=0 && !is_stockobject(objtype,hgdiobj)){        for(objPtr2=devPtr;objPtr2;objPtr2=objPtr2->next)          DODELETEOBJECT(objtype,hgdiobj,__FILE__,__LINE__);        DoRealDelete(objtype,hgdiobj,__FILE__,__LINE__);      }    }    /*now deleting this dc*/    if (devPtr->type==CKOBJ_MEMDC){      DeleteDC(devPtr->hdc);    }#ifdef CKGRAPH_DEBUG    CkGraphDeleteObject(devPtr->type,(ClientData)devPtr->hdc,__FILE__,__LINE__);#endif    ckfree((char *)devPtr);    devPtr=nextPtr;    devHead=nextPtr;  }  devHead=(GdiContext*)0;  /*now last try to remove the palettes*/  TryFreePalettes(&freePals);  TryFreePalettes(&allocPals);}#endif /*CKGRAPH_IMP*/#ifdef PROFILE_INFO/*the following funcs are only called if PROFILE_INFO is on,  it's stron

⌨️ 快捷键说明

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