Subversion Repositories Kolibri OS

Rev

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;