Index: xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c =================================================================== RCS file: /cvs/xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c,v retrieving revision 1.2 diff -u -r1.2 trident_video.c --- xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c 2000/12/14 19:29:44 1.2 +++ xc/programs/Xserver/hw/xfree86/drivers/trident/trident_video.c 2001/02/17 13:30:40 @@ -668,6 +668,7 @@ /* Crude way to deal with off the left edge - FIXME - doesn't work well */ tx1 -= (x1 >> 16); + tx1 -= 10; OUTW(vgaIOBase + 4, (tx1 & 0xff) <<8 | 0x86); OUTW(vgaIOBase + 4, (tx1 & 0xff00) | 0x87); @@ -690,16 +691,15 @@ OUTW(vgaIOBase + 4, 0x0081); } else if (drw_w > src_w) { - zoomx1 = ((float)src_w/(float)drw_w); - zoomx2 = ( ((float)src_w/(float)drw_w) - (int)zoomx1 ) * 1024; + zoomx1 = (int)((float)drw_w/(float)src_w)-1; + zoomx2 = ((float)(drw_w-(src_w*zoomx1))/(float)src_w) * 1024; OUTW(vgaIOBase + 4, (zoomx2&0xff)<<8 | 0x80); - OUTW(vgaIOBase + 4, (zoomx1&0x0f)<<10 | (zoomx2&0x0300) | 0x81); + OUTW(vgaIOBase + 4, (zoomx2&0x0300) | (zoomx1&7)<<10 | 0x81); } else { - zoomx1 = ((float)drw_w/(float)src_w); - zoomx2 = ( ((float)drw_w/(float)src_w) - (int)zoomx1 ) * 1024; - OUTW(vgaIOBase + 4, (zoomx2&0xff)<<8 | 0x80); - OUTW(vgaIOBase + 4, (zoomx2&0x0300)| - (((int)((float)src_w/(float)drw_w)-1)&7)<<10 | 0x8081); + zoomx1 = (int)((float)src_w/(float)drw_w)-1; + zoomx2 = (((float)drw_w/(float)src_w)) * 1024; + OUTW(vgaIOBase + 4, (zoomx2&0xff)<<8 | 0x80); + OUTW(vgaIOBase + 4, (zoomx2&0x0300) | (zoomx1&7)<<10 | 0x8081); } /* Vertical Zoom */ @@ -708,16 +708,15 @@ OUTW(vgaIOBase + 4, 0x0083); } else if (drw_h > src_h) { - zoomy1 = ((float)src_h/(float)drw_h); - zoomy2 = ( ((float)src_h/(float)drw_h) - (int)zoomy1 ) * 1024; + zoomy1 = (int)((float)drw_h/(float)src_h)-1; + zoomy2 = ((float)(drw_h-(src_h*zoomy1))/(float)src_h) * 1024; OUTW(vgaIOBase + 4, (zoomy2&0xff)<<8 | 0x82); - OUTW(vgaIOBase + 4, (zoomy1&0x0f)<<10 | (zoomy2&0x0300) | 0x83); + OUTW(vgaIOBase + 4, (zoomy2&0x0300) | (zoomy1&7)<<10 | 0x83); } else { - zoomy1 = ((float)drw_h/(float)src_h); - zoomy2 = ( ((float)drw_h/(float)src_h) - (int)zoomy1 ) * 1024; + zoomy1 = (int)((float)src_h/(float)drw_h)-1; + zoomy2 = (((float)drw_h/(float)src_h)) * 1024; OUTW(vgaIOBase + 4, (zoomy2&0xff)<<8 | 0x82); - OUTW(vgaIOBase + 4, (zoomy2&0x0300)| - (((int)((float)src_h/(float)drw_h)-1)&7)<<10 | 0x8083); + OUTW(vgaIOBase + 4, (zoomy2&0x0300) | (zoomy1&7)<<10 | 0x8083); } OUTW(vgaIOBase + 4, 0x0895);