# --- ROCK-COPYRIGHT-NOTE-BEGIN --- # # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # Please add additional copyright information _after_ the line containing # the ROCK-COPYRIGHT-NOTE-END tag. Otherwise it might get removed by # the ./scripts/Create-CopyPatch script. Do not edit this copyright text! # # ROCK Linux: rock-src/package/jimmy/zgv/mousexy-fix.patch # ROCK Linux is Copyright (C) 1998 - 2003 Clifford Wolf # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. A copy of the GNU General Public # License can be found at Documentation/COPYING. # # Many people helped and are helping developing ROCK Linux. Please # have a look at http://www.rocklinux.org/ and the Documentation/TEAM # file for details. # # --- ROCK-COPYRIGHT-NOTE-END --- --- ./src/readnbkey.c.orig 2003-04-05 16:40:39.000000000 +0300 +++ ./src/readnbkey.c 2003-08-10 12:27:23.000000000 +0300 @@ -62,7 +62,7 @@ /* saved mx/my in in range 0..MPOS_SAVE_MAX. */ -#define MPOS_SAVE_MAX 16383 +#define MPOS_SAVE_MAX 16383.0 static int old_click_status=0,new_click_status=0; @@ -276,7 +276,8 @@ } -static int saved_mx=0,saved_my=0; +/* All save/restore calculations are done in float to avoid int truncating. */ +static float saved_mx=0.0,saved_my=0.0; /* save mouse pointer's current position. used when switching over * to the panning-follows-mouse model used by vgadisp.c, so that on @@ -288,7 +289,7 @@ */ void save_mouse_pos() { -int mx,my; +float mx,my; if(!has_mouse) return; @@ -297,13 +298,13 @@ */ if(vga_getcurrentmode()==TEXT) { - mx=MPOS_SAVE_MAX/2; - my=MPOS_SAVE_MAX/2; + mx=MPOS_SAVE_MAX/2.0; + my=MPOS_SAVE_MAX/2.0; } else { - mx=(mouse_getx()*MPOS_SAVE_MAX)/(vga_getxdim()-1); - my=(mouse_gety()*MPOS_SAVE_MAX)/(vga_getydim()-1); + mx=(mouse_getx()*MPOS_SAVE_MAX)/(vga_getxdim()-1.0); + my=(mouse_gety()*MPOS_SAVE_MAX)/(vga_getydim()-1.0); } /* just in case */ if(mx>MPOS_SAVE_MAX) mx=MPOS_SAVE_MAX; @@ -323,12 +324,13 @@ /* restore saved pos assuming given size screen */ void restore_mouse_pos_with_size(int width,int height) { -int mx,my; +extern float roundf(float x); /* may be missing from math.h, must be declared */ +float mx,my; if(!has_mouse) return; -mx=(saved_mx*(width-1))/MPOS_SAVE_MAX; -my=(saved_my*(height-1))/MPOS_SAVE_MAX; +mx=roundf((saved_mx*(width-1.0))/MPOS_SAVE_MAX); +my=roundf((saved_my*(height-1.0))/MPOS_SAVE_MAX); /* just in case */ if(mx>width-1) mx=width-1; if(my>height-1) my=height-1;