| 1219 | * Given a pixel within a interval window, return the interval |
| 1220 | * reading corresponding to that pixel. |
| 1221 | * |
| 1222 | * Results: |
| 1223 | * An integer interval reading. |
| 1224 | * |
| 1225 | * Side effects: |
| 1226 | * None. |
| 1227 | * |
| 1228 | *---------------------------------------------------------------------- |
| 1229 | */ |
| 1230 | |
| 1231 | static int |
| 1232 | PixelToValue(intervalPtr, x, y) |
| 1233 | register Interval *intervalPtr; /* Information about widget. */ |
| 1234 | int x, y; /* Coordinates of point within |
| 1235 | * window. */ |
| 1236 | { |
| 1237 | int value, pixelRange; |
| 1238 | |
| 1239 | if (intervalPtr->vertical) { |
| 1240 | pixelRange = Tk_Height(intervalPtr->tkwin) |
| 1241 | - 2*intervalPtr->offset - 4*intervalPtr->borderWidth; |
| 1242 | value = y; |
| 1243 | } else { |
| 1244 | pixelRange = Tk_Width(intervalPtr->tkwin) |
| 1245 | - 2*intervalPtr->offset - 4*intervalPtr->borderWidth; |
| 1246 | value = x; |
| 1247 | } |
| 1248 | |
| 1249 | if (pixelRange <= 0) { |
| 1250 | /* |
| 1251 | * Not enough room for the slider to actually slide: just return |
| 1252 | * a constant. |
| 1253 | */ |
| 1254 | |
| 1255 | return (0); |
| 1256 | } |
| 1257 | value -= intervalPtr->offset + intervalPtr->borderWidth; |
| 1258 | #if 0 |
| 1259 | if (value < 0) { |
| 1260 | value = 0; |
| 1261 | } |
| 1262 | if (value > pixelRange) { |
| 1263 | value = pixelRange; |
| 1264 | } |
| 1265 | #endif |
| 1266 | if (intervalPtr->toValue > intervalPtr->fromValue) { |
| 1267 | value = intervalPtr->fromValue + |
| 1268 | ((value * (intervalPtr->toValue - intervalPtr->fromValue)) |
| 1269 | + pixelRange/2)/pixelRange; |
| 1270 | } else { |