Subversion Repositories HelenOS

Rev

Rev 2292 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2292 Rev 2307
Line 831... Line 831...
831
 
831
 
832
static void
832
static void
833
copy_vp_to_pixmap(viewport_t *vport, pixmap_t *pmap)
833
copy_vp_to_pixmap(viewport_t *vport, pixmap_t *pmap)
834
{
834
{
835
    int y;
835
    int y;
836
    int rowsize;
836
    int tmp, srcrowsize;
837
    int tmp;
837
    int realwidth, realheight, realrowsize;
838
    int width = vport->width;
838
    int width = vport->width;
839
    int height = vport->height;
839
    int height = vport->height;
840
 
840
 
841
    if (width + vport->x > screen.xres)
841
    if (width + vport->x > screen.xres)
842
        width = screen.xres - vport->x;
842
        width = screen.xres - vport->x;
843
    if (height + vport->y  > screen.yres)
843
    if (height + vport->y > screen.yres)
844
        height = screen.yres - vport->y;
844
        height = screen.yres - vport->y;
-
 
845
   
-
 
846
    realwidth = pmap->width <= width ? pmap->width : width;
-
 
847
    realheight = pmap->height <= height ? pmap->height : height;
845
 
848
 
-
 
849
    srcrowsize = vport->width * screen.pixelbytes;
846
    rowsize = width * screen.pixelbytes;
850
    realrowsize = realwidth * screen.pixelbytes;
847
 
851
   
848
    for (y = 0; y < height; y++) {
852
    for (y = 0; y < realheight; y++) {
849
        tmp = (vport->y + y) * screen.scanline +
853
        tmp = (vport->y + y) * screen.scanline +
850
            vport->x * screen.pixelbytes;
854
            vport->x * screen.pixelbytes;
851
        memcpy(pmap->data + rowsize * y, screen.fbaddress + tmp,
855
        memcpy(pmap->data + srcrowsize * y, screen.fbaddress + tmp,
852
            rowsize);
856
            realrowsize);
853
    }
857
    }
854
}
858
}
855
 
859
 
856
/** Save viewport to pixmap */
860
/** Save viewport to pixmap */
857
static int
861
static int