#include #include #include #include "gc.h" static void *g_pDefaultFunction[gcMaxMethod] = { GCDrawPixelDirect, GCGetWidth, GCGetHeight, GCConvColorToBytes, GCConvBytesToColor, GCSetClipRect, GCOnOpen, GCOnClose, GCDrawBegin, GCDrawEnd, GCSetFGColor, GCGetFGColor, GCSetBGColor, GCGetBGColor, GCDrawPointCoord, GCDrawLineCoord, GCDrawRectCoord, GCFillRectCoord, }; static tGC *first = NULL; tGC *AllocGC(void) { tGC *pGC = kmalloc(sizeof(tGC),GFP_KERNEL); if( pGC ) { enum eGCMethod m; memset(pGC,0,sizeof(tGC)); for( m=gcDrawPixelDirect ; mpGDC->name ) ) act = act->next; if( act!=NULL ) { tRect screen; act->OnOpen(act,param); GGetScreenRect(act,&screen); GSetClipRect(act,&screen); } return act; } void CloseGC(tGC *gc ) { gc->OnClose(gc); } tGC *RegisterDeviceGC( tGDC *pGDC ) { tGC *pGC = AllocGC(); if( pGC ) { pGC->pGDC = pGDC; if( pGDC->OnRegister(pGC)==0 ) { if( first ) { pGC->next = first; } first = pGC; return pGC; } } return NULL; } int RegisterGCMethod( tGC *pGC, enum eGCMethod method, void *p ) { switch( method ) { case gcDrawPixelDirect : pGC->DrawPixelDirect = p; break; case gcGetWidth : pGC->GetWidth = p; break; case gcGetHeight : pGC->GetHeight = p; break; case gcConvColorToBytes : pGC->ConvColorToBytes = p; break; case gcConvBytesToColor : pGC->ConvBytesToColor = p; break; case gcSetClipRect : pGC->SetClipRect = p; break; case gcOnOpen : pGC->OnOpen = p; break; case gcOnClose : pGC->OnClose = p; break; case gcDrawBegin : pGC->DrawBegin = p; break; case gcDrawEnd : pGC->DrawEnd = p; break; case gcSetFGColor : pGC->SetFGColor = p; break; case gcGetFGColor : pGC->GetFGColor = p; break; case gcSetBGColor : pGC->SetBGColor = p; break; case gcGetBGColor : pGC->GetBGColor = p; break; case gcDrawPointCoord : pGC->DrawPointCoord = p; break; case gcDrawLineCoord : pGC->DrawLineCoord = p; break; case gcDrawRectCoord : pGC->DrawRectCoord = p; break; case gcFillRectCoord : pGC->FillRectCoord = p; break; default: //assert(0); return -1; } return 0; }