|
半年时间,写了一个函数:put_pixel,刚写完,还没有调试,调试要到下个月才行。
下月把djyos移植到2416上,在该平台上调试。
透透气,接下来写画细直线(单像素宽)的函数。
函数代码如下,这是预览版,没贴出其他支持代码,待djygui完成后,将完整开源。
//----画点---------------------------------------------------------------------
//功能: 在窗口内画一个像素点。
//参数: gkwin,目标窗口指针
// x,y,画图坐标
// color,颜色,
// r2_mode,二元光栅操作码
//返回: 无
//-----------------------------------------------------------------------------
void gk_put_pixel(struct gkwin_rsc *gkwin,s32 x,s32 y,u32 color,u32 r2_code)
{
struct st_rect limit;
struct clip_rect *clip;
struct gkwin_rsc *fbwin;
struct st_rect_bitmap *bitmap;
u32 pf_color;
s32 offsetx,offsety;
if((r2_code == cn_r2_nop) || (r2_code > cn_r2_last)) //不执行任何操作
return;
if(gkwin->area.bm_bits != NULL) //说明有win buffer
{ //处理方法:在win buffer中绘图,标志change_msk,
bitmap = gkwin->area;
if(bitmap->pf_type == cn_private_pf)
{
gkwin->draw->pixel(bitmap,x,y,color,r2_code);
}else
{
pf_color = __gk_convert_color_to_pf(bitmap->pf_type,color);
__gk_put_pixel_bm(bitmap,x,y,pf_color,r2_code);
}
}else
{
clip = gkwin->visible_clip;
if(clip == NULL)
return ;
fbwin = gkwin->disp->root_gkwin;
if(fbwin->area.bm_bits != NULL) //有frame buffer
{ //处理方法:在root_gkwin中绘图,但只绘gkwin中的可视区域
offsetx = gkwin->absx0 +x;
offsety = gkwin->absy0 +y;
bitmap = gkwin->area;
do{
if(!((offsetx<clip->rect.left) || (offsetx>=clip->rect.right)
|| (offsety<clip->rect.top) ||(offsety>=clip->rect.bottom)))
{
if(bitmap->pf_type == cn_private_pf)
{
fbwin->draw->pixel(bitmap,offsetx,offsety,color,r2_code);
}else
{
pf_color = __gk_convert_color_to_pf(bitmap->pf_type,color);
__gk_put_pixel_bm(bitmap,offsetx,offsety,pf_color,r2_code);
}
__gk_Shading_pixel(fbwin,offsetx,offsety);
break; //像素已经绘制,退出循环
}else
clip = clip->next;
}while(clip != gkwin->visible_clip);
}else //无win buffer,也无frame buffer,直接画在screen上
{
offsetx = gkwin->absx0 - fbwin->absx0 +x;
offsety = gkwin->absy0 - fbwin->absy0 +y;
do{
if(!((offsetx<clip->rect.left) || (offsetx>=clip->rect.right)
|| (offsety<clip->rect.top) ||(offsety>=clip->rect.bottom)))
{
gkwin->disp->direct_draw->pixel(offsetx,offsety,color,r2_code);
break; //像素已经绘制,退出循环
}else
clip = clip->next;
}while(clip != gkwin->visible_clip);
}
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)
|