星期二, 3月 28, 2006

nanox - DrawImageFromFile - II where is the psd ?

void
GrDrawImageFromFile(GR_DRAW_ID id, GR_GC_ID gc, GR_COORD x, GR_COORD y,
GR_SIZE width, GR_SIZE height, char* path, int flags)
{
GR_DRAWABLE *dp;

SERVER_LOCK();

switch (GsPrepareDrawing(id, gc, &dp)) {
case GR_DRAW_TYPE_WINDOW:
case GR_DRAW_TYPE_PIXMAP:
GdDrawImageFromFile(dp->psd, dp->x + x, dp->y + y,
width, height, path, flags);
break;
}

SERVER_UNLOCK();
}
. GdDrawImageFromFile的psd由dp提供,dp是由GsPrepareDrawing從id和gc產生。
GR_DRAW_TYPE
GsPrepareDrawing(GR_DRAW_ID id, GR_GC_ID gcid, GR_DRAWABLE **retdp)
{
GR_WINDOW *wp; /* found window */
GR_PIXMAP *pp; /* found pixmap */
...
wp = GsFindWindow(id);
if (wp == NULL) {
pp = GsFindPixmap(id);
....
*retdp = wp? (GR_DRAWABLE *)wp: (GR_DRAWABLE *)pp;
...
可以知道,retdp就是id所代表的windowsid/bitmap id。
這個bitmapid是由
    g_pixmap = GrNewPixmap(16, 16, 0);
GrDrawImageFromFile(g_pixmap, gc, 0, 0, -1, -1, "bin/nxroach.pgm", 0);
在DrawImageFromFile( )這個function中,是bitmap id.

GrNewPixmap會用rootwp的psd作psd。這個應該就是fblin32alpha.c的function table。
所以直接會畫到screen上。

奇怪的是,DrawLine用的psd-drawpixel和DrawImage的psd-drawpixel使用的screen base address竟然不一樣。

難怪DrawImageFromFile會畫不出來。
--%gt;問題還是在psd上。
.

對照DrawArc, DrawLine和DrawImageFromFile,就是在WINID不一樣。
DrawArc/Line的id都是windows id。
DrawImage的id是pixelmap。

沒有留言:

張貼留言