📄 zgfx.cpp
字号:
{
m_psurf->Unlock(0);
break;
}
}
return GfxOK;
}
//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxDrawPixel(int x, int y, unsigned short color)
{
BYTE *ptr;
if(x>=m_screenbufwidth || y>=m_screenbufheight || x<0 || y<0)
{
return GfxParameterError;
}
ptr=(BYTE *)m_screenbuf;
*(WORD *)(ptr + (x * BUFFER_XPITCH) + (y * BUFFER_YPITCH))=color;
return GfxOK;
}
//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetPixelColor(int x, int y, unsigned short *pdest)
{
BYTE *ptr;
if(x>=m_screenbufwidth || y>=m_screenbufheight || x<0 || y<0)
{
*pdest=0;
return GfxParameterError;
}
ptr=(BYTE *)m_screenbuf;
*pdest=*(WORD *)(ptr + (x * BUFFER_XPITCH) + (y * BUFFER_YPITCH));
return GfxOK;
}
//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxFillRect(GfxRect rect, unsigned short color)
{
register WORD x,y,w,h;
w=rect.w;
h=rect.h;
for(x=0;x<w;x++)
{
for(y=0;y<h;y++)
{
GfxDrawPixel(x+rect.x,y+rect.y,color);
}
}
return GfxOK;
}
//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxClearScreen(bool update)
{
memset((void *)m_screenbuf, 0, m_screenbufsize);
if(update)
{
GfxUpdateScreen();
}
return GfxOK;
}
//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxFillHWBuffer(unsigned short color)
{
register int x,y,maxx,maxy,xp,yp;
register BYTE *dest;
//pre-blit pointer init
switch(m_usedsubsys)
{
case gfxGAPI:
{
m_framebuf=m_GXBeginDraw();
if(!m_framebuf)
{
return GfxBegindrawFailed;
}
break;
}
case gfxDirectDraw:
{
m_ddsd.dwSize = sizeof(m_ddsd);
if(DD_OK!=m_psurf->Lock(0, &m_ddsd, DDLOCK_WAITNOTBUSY, 0))
{
return GfxSurfaceLockFailed;
}
m_framebuf=m_ddsd.lpSurface;
break;
}
}
dest=(BYTE *)m_framebuf;
maxx=m_framebufwidth;
maxy=m_framebufheight;
xp=m_xpitch;
yp=m_ypitch;
for(y=0;y<maxy;y++)
{
for(x=0;x<maxx;x++)
{
*(WORD *)dest=color;
dest+=xp;
}
dest-=maxx*xp;
dest+=yp;
}
//post-blit stuff
switch(m_usedsubsys)
{
case gfxGAPI:
{
m_GXEndDraw();
break;
}
case gfxDirectDraw:
{
m_psurf->Unlock(0);
break;
}
}
return GfxOK;
}
//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxClearHWBuffer()
{
register int x,y,maxx,maxy,xp,yp;
register BYTE *dest;
//pre-blit pointer init
switch(m_usedsubsys)
{
case gfxGAPI:
{
m_framebuf=m_GXBeginDraw();
if(!m_framebuf)
{
return GfxBegindrawFailed;
}
break;
}
case gfxDirectDraw:
{
m_ddsd.dwSize = sizeof(m_ddsd);
if(DD_OK!=m_psurf->Lock(0, &m_ddsd, DDLOCK_WAITNOTBUSY, 0))
{
return GfxSurfaceLockFailed;
}
m_framebuf=m_ddsd.lpSurface;
break;
}
}
dest=(BYTE *)m_framebuf;
//quick erase
if(m_xpitch==2 && m_ypitch==2*m_framebufwidth)
{
memset((void *)dest, 0, m_framebufsize);
}
else
{
maxx=m_framebufwidth;
maxy=m_framebufheight;
xp=m_xpitch;
yp=m_ypitch;
for(y=0;y<maxy;y++)
{
for(x=0;x<maxx;x++)
{
*(WORD *)dest=0;
dest+=xp;
}
dest-=maxx*xp;
dest+=yp;
}
}
//post-blit stuff
switch(m_usedsubsys)
{
case gfxGAPI:
{
m_GXEndDraw();
break;
}
case gfxDirectDraw:
{
m_psurf->Unlock(0);
break;
}
}
return GfxOK;
}
//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxDrawLine(int sx, int sy, int dx, int dy, unsigned short color)
{
bool steep;
register int deltax, deltay, error, x, y, ystep;
int temp;
deltax=dx-sx;
deltay=abs(dy-sy);
steep=abs(dy-sy)>abs(dx-sx);
if(steep)
{
temp=sx;
sx=sy;
sy=temp;
temp=dx;
dx=dy;
dy=temp;
}
if(sx>dx)
{
temp=dx;
dx=sx;
sx=temp;
temp=dy;
dy=sy;
sy=temp;
}
if(sy!=dy)
{
if(sy<dy)
{
ystep=1;
}else
{
ystep=-1;
}
}
else
{
ystep=0;
}
y=sy;
error=0;
for(x=sx; x<dx; x++)
{
if(steep)
{
GfxDrawPixel(y,x,color);
}
else
{
GfxDrawPixel(x,y,color);
}
error+=deltax;
if(error>deltay)
{
y+=ystep;
error-=deltay;
}
}
return GfxOK;
}
//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetWidth(int *pdest)
{
if(m_gfxinited)
{
*pdest=m_screenbufwidth;
return GfxOK;
}
else
{
return GfxNoSurface;
}
}
//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetHeight(int *pdest)
{
if(m_gfxinited)
{
*pdest=m_screenbufheight;
return GfxOK;
}
else
{
return GfxNoSurface;
}
}
//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetPixelAddress(int x, int y, unsigned short **ppdest)
{
BYTE *ptr;
if(x>=m_screenbufwidth || y>=m_screenbufheight || x<0 || y<0)
{
*ppdest=0;
return GfxParameterError;
}
ptr=(BYTE *)m_screenbuf;
*ppdest=(unsigned short *)(ptr + (x * BUFFER_XPITCH) + (y * BUFFER_YPITCH));
return GfxOK;
}
//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetBufferYPitch(int *pdest)
{
if(m_gfxinited)
{
*pdest=BUFFER_YPITCH;
return GfxOK;
}
else
{
return GfxNoSurface;
}
}
//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetXCenter(int *pdest)
{
if(m_gfxinited)
{
*pdest=m_xcenter;
return GfxOK;
}
else
{
return GfxNoSurface;
}
}
//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetYCenter(int *pdest)
{
if(m_gfxinited)
{
*pdest=m_ycenter;
return GfxOK;
}
else
{
return GfxNoSurface;
}
}
//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetKeys(GfxOrientation ori, GfxKeys *pdest)
{
int param;
GXKeyList gxkeys;
param=GX_NORMALKEYS;
switch(ori)
{
case gfxPortrait:
{
param=GX_NORMALKEYS;
break;
}
case gfxLandscape:
{
param=GX_LANDSCAPEKEYS;
break;
}
}
if(m_GXGetDefaultKeys)
{
gxkeys=m_GXGetDefaultKeys(param);
pdest->Left=gxkeys.vkLeft;
pdest->Right=gxkeys.vkRight;
pdest->Up=gxkeys.vkUp;
pdest->Down=gxkeys.vkDown;
pdest->A=gxkeys.vkA;
pdest->B=gxkeys.vkB;
pdest->C=gxkeys.vkC;
pdest->S=gxkeys.vkStart;
return GfxOK;
}
else
{
return GfxError;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -