Rev 9648 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 9648 | Rev 9659 | ||
---|---|---|---|
Line 183... | Line 183... | ||
183 | END resize; |
183 | END resize; |
Line 184... | Line 184... | ||
184 | 184 | ||
185 | 185 | ||
186 | PROCEDURE setValue* (VAR scroll: tScroll; value: INTEGER); |
186 | PROCEDURE setValue* (VAR scroll: tScroll; value: INTEGER); |
187 | VAR |
187 | VAR |
- | 188 | pos, maxPos, maxVal, n, m: INTEGER; |
|
188 | pos, maxPos, n, m: INTEGER; |
189 | BEGIN |
189 | BEGIN |
190 | maxVal := scroll.maxVal; |
190 | IF scroll.vertical THEN |
191 | IF scroll.vertical THEN |
191 | maxPos := scroll.height |
192 | maxPos := scroll.height |
192 | ELSE |
193 | ELSE |
193 | maxPos := scroll.width |
194 | maxPos := scroll.width |
194 | END; |
195 | END; |
195 | maxPos := maxPos - scroll.btnSize*2 - scroll.sliderSize + 1; |
196 | maxPos := maxPos - scroll.btnSize*2 - scroll.sliderSize + 1; |
196 | IF (value < 0) OR (scroll.maxVal <= 0) THEN |
197 | IF (value < 0) OR (maxVal <= 0) THEN |
197 | value := 0; |
198 | value := 0; |
198 | pos := 0 |
199 | pos := 0 |
199 | ELSIF value > scroll.maxVal THEN |
200 | ELSIF value > maxVal THEN |
200 | value := scroll.maxVal; |
201 | value := maxVal; |
201 | pos := maxPos |
202 | pos := maxPos |
202 | ELSE |
203 | ELSE |
203 | IF (maxPos + 1) >= scroll.maxVal THEN |
204 | IF (maxPos + 1) >= maxVal THEN |
204 | n := (maxPos + 1) DIV scroll.maxVal; |
205 | n := (maxPos + 1) DIV maxVal; |
205 | m := (maxPos + 1) MOD scroll.maxVal; |
206 | m := (maxPos + 1) MOD maxVal; |
206 | pos := value*n + MIN(value, m) |
207 | pos := value*n + MIN(value, m) |
207 | ELSE |
208 | ELSE |
208 | pos := FLOOR(FLT(value)*FLT(maxPos + 1)/FLT(scroll.maxVal)) |
209 | pos := FLOOR(FLT(value)*FLT(maxPos + 1)/FLT(maxVal)) |
209 | END; |
210 | END; |
210 | IF pos > maxPos THEN |
211 | IF pos > maxPos THEN |
211 | pos := maxPos; |
212 | pos := maxPos; |
212 | value := scroll.maxVal |
213 | value := maxVal |
213 | END |
214 | END |
214 | END; |
215 | END; |
215 | scroll.pos := pos; |
216 | scroll.pos := pos; |
Line 222... | Line 223... | ||
222 | END ceil; |
223 | END ceil; |
Line 223... | Line 224... | ||
223 | 224 | ||
224 | 225 | ||
225 | PROCEDURE setPos (VAR scroll: tScroll; pos: INTEGER); |
226 | PROCEDURE setPos (VAR scroll: tScroll; pos: INTEGER); |
226 | VAR |
227 | VAR |
- | 228 | maxPos, value, maxVal, n, m, x, x0, q: INTEGER; |
|
227 | maxPos, value, n, m, x, x0, q: INTEGER; |
229 | BEGIN |
228 | BEGIN |
230 | maxVal := scroll.maxVal; |
229 | IF scroll.maxVal > 0 THEN |
231 | IF maxVal > 0 THEN |
230 | IF scroll.vertical THEN |
232 | IF scroll.vertical THEN |
231 | maxPos := scroll.height |
233 | maxPos := scroll.height |
232 | ELSE |
234 | ELSE |
Line 236... | Line 238... | ||
236 | IF pos <= 0 THEN |
238 | IF pos <= 0 THEN |
237 | pos := 0; |
239 | pos := 0; |
238 | value := 0 |
240 | value := 0 |
239 | ELSIF pos >= maxPos THEN |
241 | ELSIF pos >= maxPos THEN |
240 | pos := maxPos; |
242 | pos := maxPos; |
241 | value := scroll.maxVal |
243 | value := maxVal |
242 | ELSE |
244 | ELSE |
243 | IF scroll.maxVal <= maxPos + 1 THEN |
245 | IF maxVal <= maxPos + 1 THEN |
244 | n := (maxPos + 1) DIV scroll.maxVal; |
246 | n := (maxPos + 1) DIV maxVal; |
245 | m := (maxPos + 1) MOD scroll.maxVal; |
247 | m := (maxPos + 1) MOD maxVal; |
Line 246... | Line 248... | ||
246 | 248 | ||
247 | q := m*(n + 1); |
249 | q := m*(n + 1); |
248 | IF q < pos THEN |
250 | IF q < pos THEN |
249 | value := ceil(pos - m, n) |
251 | value := ceil(pos - m, n) |
Line 261... | Line 263... | ||
261 | DEC(value) |
263 | DEC(value) |
262 | ELSE |
264 | ELSE |
263 | pos := x; |
265 | pos := x; |
264 | IF pos > maxPos THEN |
266 | IF pos > maxPos THEN |
265 | pos := maxPos; |
267 | pos := maxPos; |
266 | value := scroll.maxVal |
268 | value := maxVal |
267 | END |
269 | END |
268 | END |
270 | END |
269 | ELSE |
271 | ELSE |
270 | value := FLOOR(FLT(scroll.maxVal)*FLT(pos)/FLT(maxPos + 1)) |
272 | value := FLOOR(FLT(maxVal)*FLT(pos)/FLT(maxPos + 1)) |
271 | END |
273 | END |
272 | END |
274 | END |
273 | ELSE |
275 | ELSE |
274 | pos := 0; |
276 | pos := 0; |
275 | scroll.value := 0 |
277 | value := 0 |
276 | END; |
278 | END; |
277 | scroll.pos := pos; |
279 | scroll.pos := pos; |
278 | scroll.value := value |
280 | scroll.value := value |
279 | END setPos; |
281 | END setPos; |