Esempio n. 1
0
static void init_pixtemp(int id, int vp_id, int x, int y, int x1, int y1, int x2, int y2)
{
    HDC hdc, hdcPix;
    HBITMAP xpixOld;
    POINT pt;
    float xx1, yy1, xx2, yy2;

    tempx1 = x1;
    tempy1 = y1;
    temp_dx = x2 - x1 + 1;
    temp_dy = y2 - y1 + 1;
    tempx = x;
    tempy = y;
/* yy is upside down , so wap x1 and x2 (??) */
    if (INTERNAL_get_clampscrollbars(id, vp_id, &xx1, &yy1, &xx2, &yy2) == G_OK) {
        float tmp = xx1;
        xx1 = xx2;
        xx2 = tmp;
      clampx1 = -xx1 * temp_dx;
	clampy1 = -yy1 * temp_dy;
	clampx2 = xx2 * temp_dx;
	clampy2 = yy2 * temp_dy;
	pixclamp = TRUE;
    }
    else
	pixclamp = FALSE;

    hdc = GetDC(WI[id].child[C_DRAWAREA].hwnd);
    hdcPix = CreateCompatibleDC(hdc);
    pixtemp = CreateCompatibleBitmap(hdc,
				     temp_dx,
				     temp_dy);
    xpixOld = SelectObject(hdcPix, pixtemp);
    BitBlt(hdcPix,
	   0, 0,
	   temp_dx, temp_dy,
	   hdc,
	   tempx1, tempy1,
	   SRCCOPY);
    SelectObject(hdcPix, xpixOld);
    DeleteDC(hdcPix);
    ReleaseDC(WI[id].child[C_DRAWAREA].hwnd, hdc);

    WI[id].pixcopymode = TRUE;
    if (WI[id].usepix)
	WI[id].locked = TRUE;
    else
	WI[id].locked = FALSE;
}
Esempio n. 2
0
void init_pixtemp(int id, int vp_id,int x, int y, int x1, int y1, int x2, int y2)
{
    float xx1,yy1,xx2,yy2;

    tempx1 = x1;
    tempy1 = y1;
    temp_dx = x2 - x1 + 1;
    temp_dy = y2 - y1 + 1;
    tempx = x;
    tempy = y;
/* yy is upside down , so wap x1 and x2 (??) */
    if (INTERNAL_get_clampscrollbars(id,vp_id,&xx1,&yy1,&xx2,&yy2) == G_OK) {
        float tmp = xx1;
        xx1 = xx2;
        xx2 = tmp;
        clampx1 = -xx1 * temp_dx;
        clampy1 = -yy1 * temp_dy;
        clampx2 =  xx2 * temp_dx;
        clampy2 =  yy2 * temp_dy;
        pixclamp = TRUE;
/*
fprintf(stderr,"%d %d %d %d clamp\n",clampx1,clampx2,clampy1,clampy2);
*/
    }
    else
        pixclamp = FALSE;
    pixtemp = XCreatePixmap(INTERNAL_display, INTERNAL_rootwin, 
                              temp_dx, temp_dy, 
                              DefaultDepth(INTERNAL_display,INTERNAL_screen));
    XCopyArea(INTERNAL_display, xwini[id].xdraw, pixtemp, 
                  gc_pix, tempx1, tempy1, temp_dx, temp_dy, 0, 0);
    xwini[id].xlib_pixcopymode = TRUE;
    if (xwini[id].double_buffering) {
        tempbufflag = TRUE;
        xwini[id].xdraw = xwini[id].xwin;
        xwini[id].double_buffering = FALSE;
    }
    else
        tempbufflag = FALSE;
}