int effect_move_r(screen_area_t* src,screen_area_t* dst) {
	int xstep,show_width;
	int i,j;
	screen_area_t src_scr=*src;
	screen_area_t dst_scr=*dst;
	screen_area_t fill_rect;
	if(init_ge2d()==-1) return -1;

	xstep=src->width/effect_step;
	show_width=xstep;

	src_scr.y=src->y;
	src_scr.height=src->height;
	dst_scr.y=dst->y;
	dst_scr.height=dst->height;
	for(i=xstep;i<dst->width;i+=xstep)
	{
		for(j=dst->width-xstep;j>=i-xstep;j-=xstep) {
			src_scr.width=xstep;
			src_scr.x=dst->x-xstep+j;
			dst_scr.width=src_scr.width;
			dst_scr.x=dst->x+j;
			fb_bitbld(&src_scr,&dst_scr);
		}
		src_scr.width=i+xstep;
		src_scr.x=src->x+src->width-src_scr.width;
		dst_scr.width=src_scr.width;
		dst_scr.x=dst->x;
		fb_bitbld(&src_scr,&dst_scr);
		usleep(effect_delay);
    } /* loop end. */

	uninit_ge2d();
	return 0;
}
static Bool maliPrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap, int xdir, int ydir, int alu, Pixel planemask)
{
	PrivPixmap *srcPrivPixmap = (PrivPixmap *)exaGetPixmapDriverPrivate(pSrcPixmap);
	PrivPixmap *dstPrivPixmap = (PrivPixmap *)exaGetPixmapDriverPrivate(pDstPixmap);

	IGNORE(pSrcPixmap);
	IGNORE(pDstPixmap);
	IGNORE(xdir);
	IGNORE(ydir);
	IGNORE(alu);
	IGNORE(planemask);

	if (srcPrivPixmap->isFrameBuffer &&
		dstPrivPixmap->isFrameBuffer)
	{
		//if (srcPrivPixmap->frameBufferNumber != 0 ||
		//	srcPrivPixmap->frameBufferNumber != 0)
		//{
		//	ERROR_STR("%s: pSrcPixmap=%p (buffer# %d) pDstPixmap=%p (buffer# %d) xdir=%d ydir=%d alu=%x\n",
		//		__FUNCTION__, pSrcPixmap, srcPrivPixmap->frameBufferNumber, pDstPixmap, dstPrivPixmap->frameBufferNumber, xdir, ydir, alu);
		//}

		SrcPixmap = pSrcPixmap;

		if (ge2d_fd < 0)
		{
			init_ge2d();
		}


		return TRUE;
	}

	//if (srcPrivPixmap->mem_info &&
	//	dstPrivPixmap->mem_info)
	//{
	//	//if (srcPrivPixmap->mem_info->handle != UMP_INVALID_SECURE_ID &&
	//	//	dstPrivPixmap->mem_info->handle != UMP_INVALID_SECURE_ID)
	//	{
	//		SrcPixmap = pSrcPixmap;

	//		if (ge2d_fd < 0)
	//		{
	//			init_ge2d();
	//		}

	//		return TRUE;
	//	}
	//}

	return FALSE;
}
static int effect_wave_l2r(screen_area_t* src,screen_area_t* dst) {
	int i, w, wd, dir;
    int wave = 0;
	screen_area_t src_scr=*src;
	screen_area_t dst_scr=*dst;
	screen_area_t fill_rect;
	if(init_ge2d()==-1) return -1;

	/* effect begine. */

    for (i = 0; i < src->width; i+=64) {

		dst_scr.x=dst->x+i;
		dst_scr.y=dst->y+0;
		dst_scr.height=dst->height;
		dst_scr.width=64;
		src_scr.x =src->x+i;
		src_scr.y=src->y+0;
		src_scr.width = 64;
		src_scr.height=src->height;
		fb_bitbld(&src_scr,&dst_scr);

        src_scr.width = 16;
        dst_scr.width = 16;

        dir = 1;
        w = wd = i + 64;
        wave = 0;
		while (w < src->width) {
			dst_scr.x =dst->x+wd;
			dst_scr.y =dst->y+(wave/2);
			dst_scr.height = dst->height - wave;
    
            src_scr.x =src->x+w;
            fb_bitbld(&src_scr,&dst_scr);

            if (wave > 0) {
				fill_rect.x=dst->x+w;
				fill_rect.y=0;
				fill_rect.width=16;
				fill_rect.height=wave/2;
                fb_fillrect(&fill_rect,0);
				fill_rect.x=dst->x+w;
				fill_rect.y=dst->height - wave/2;
				fill_rect.width=16;
				fill_rect.height=wave/2;
                fb_fillrect(&fill_rect,0);
            }

            wd += dst_scr.width;
            w  += src_scr.width;

            if (dir == 0) {
                wave -= 2;
                dst_scr.width = 16;
                
                if (wave <= 0) {
                    dir = 1;
                }
            } else {
                wave += 2;
                dst_scr.width = 14;

                if (wave >= 20) {
                    dir = 0;
                }
            }
        }
		usleep(effect_delay);
    }

	uninit_ge2d();
	return 0;
}