@@ -611,7 +611,7 @@ ConfigureScale(
611611 TCL_GLOBAL_ONLY );
612612 if ((valuePtr != NULL ) &&
613613 (Tcl_GetDoubleFromObj (NULL , valuePtr , & value ) == TCL_OK )) {
614- scalePtr -> value = TkRoundToResolution (scalePtr , value );
614+ scalePtr -> value = TkRoundValueToResolution (scalePtr , value );
615615 }
616616 }
617617
@@ -620,10 +620,10 @@ ConfigureScale(
620620 * orientation and creating GCs.
621621 */
622622
623- scalePtr -> fromValue = TkRoundToResolution (scalePtr ,
623+ scalePtr -> fromValue = TkRoundValueToResolution (scalePtr ,
624624 scalePtr -> fromValue );
625- scalePtr -> toValue = TkRoundToResolution (scalePtr , scalePtr -> toValue );
626- scalePtr -> tickInterval = TkRoundToResolution (scalePtr ,
625+ scalePtr -> toValue = TkRoundValueToResolution (scalePtr , scalePtr -> toValue );
626+ scalePtr -> tickInterval = TkRoundIntervalToResolution (scalePtr ,
627627 scalePtr -> tickInterval );
628628
629629 /*
@@ -1119,10 +1119,14 @@ TkEventuallyRedrawScale(
11191119/*
11201120 *--------------------------------------------------------------
11211121 *
1122- * TkRoundToResolution --
1122+ * TkRoundValueToResolution, TkRoundIntervalToResolution --
11231123 *
11241124 * Round a given floating-point value to the nearest multiple of the
11251125 * scale's resolution.
1126+ * TkRoundValueToResolution rounds an absolute value based on the from
1127+ * value as a reference.
1128+ * TkRoundIntervalToResolution rounds a relative value without
1129+ * reference, i.e. it rounds an interval.
11261130 *
11271131 * Results:
11281132 * The return value is the rounded result.
@@ -1134,7 +1138,16 @@ TkEventuallyRedrawScale(
11341138 */
11351139
11361140double
1137- TkRoundToResolution (
1141+ TkRoundValueToResolution (
1142+ TkScale * scalePtr , /* Information about scale widget. */
1143+ double value ) /* Value to round. */
1144+ {
1145+ return TkRoundIntervalToResolution (scalePtr , value - scalePtr -> fromValue )
1146+ + scalePtr -> fromValue ;
1147+ }
1148+
1149+ double
1150+ TkRoundIntervalToResolution (
11381151 TkScale * scalePtr , /* Information about scale widget. */
11391152 double value ) /* Value to round. */
11401153{
@@ -1147,13 +1160,13 @@ TkRoundToResolution(
11471160 rounded = scalePtr -> resolution * tick ;
11481161 rem = value - rounded ;
11491162 if (rem < 0 ) {
1150- if (rem <= - scalePtr -> resolution /2 ) {
1151- rounded = (tick - 1.0 ) * scalePtr -> resolution ;
1152- }
1163+ if (rem <= - scalePtr -> resolution /2 ) {
1164+ rounded = (tick - 1.0 ) * scalePtr -> resolution ;
1165+ }
11531166 } else {
1154- if (rem >= scalePtr -> resolution /2 ) {
1155- rounded = (tick + 1.0 ) * scalePtr -> resolution ;
1156- }
1167+ if (rem >= scalePtr -> resolution /2 ) {
1168+ rounded = (tick + 1.0 ) * scalePtr -> resolution ;
1169+ }
11571170 }
11581171 return rounded ;
11591172}
@@ -1238,7 +1251,7 @@ ScaleVarProc(
12381251 resultStr = "can't assign non-numeric value to scale variable" ;
12391252 ScaleSetVariable (scalePtr );
12401253 } else {
1241- scalePtr -> value = TkRoundToResolution (scalePtr , value );
1254+ scalePtr -> value = TkRoundValueToResolution (scalePtr , value );
12421255
12431256 /*
12441257 * This code is a bit tricky because it sets the scale's value before
@@ -1282,7 +1295,7 @@ TkScaleSetValue(
12821295 int invokeCommand ) /* Non-zero means invoked -command option to
12831296 * notify of new value, 0 means don't. */
12841297{
1285- value = TkRoundToResolution (scalePtr , value );
1298+ value = TkRoundValueToResolution (scalePtr , value );
12861299 if ((value < scalePtr -> fromValue )
12871300 ^ (scalePtr -> toValue < scalePtr -> fromValue )) {
12881301 value = scalePtr -> fromValue ;
@@ -1402,7 +1415,7 @@ TkScalePixelToValue(
14021415 }
14031416 value = scalePtr -> fromValue +
14041417 value * (scalePtr -> toValue - scalePtr -> fromValue );
1405- return TkRoundToResolution (scalePtr , value );
1418+ return TkRoundValueToResolution (scalePtr , value );
14061419}
14071420
14081421/*
0 commit comments