Subversion Repositories Kolibri OS

Rev

Rev 9560 | Rev 9671 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9560 Rev 9668
Line 17... Line 17...
17
    along with CEdit. If not, see .
17
    along with CEdit. If not, see .
18
*)
18
*)
Line 19... Line 19...
19
 
19
 
Line 20... Line 20...
20
MODULE Graph;
20
MODULE Graph;
Line 21... Line 21...
21
 
21
 
Line 22... Line 22...
22
IMPORT SYSTEM, KOSAPI, Lines, Languages;
22
IMPORT SYSTEM, KOSAPI, Lines, Languages, E := Encodings;
23
 
23
 
Line 37... Line 37...
37
    tFont* = POINTER TO RECORD
37
    tFont* = POINTER TO RECORD
38
        handle*: INTEGER;
38
        handle*: INTEGER;
39
        height*: INTEGER;
39
        height*: INTEGER;
40
        width*:  INTEGER;
40
        width*:  INTEGER;
41
        size:    INTEGER;
41
        size:    INTEGER;
-
 
42
        flags:   INTEGER;
42
        name*:   ARRAY 256 OF WCHAR
43
        name*:   ARRAY 256 OF WCHAR
43
    END;
44
    END;
Line 44... Line 45...
44
 
45
 
45
    tCanvas* = POINTER TO RECORD
46
    tCanvas* = POINTER TO RECORD
Line 48... Line 49...
48
        color, backColor, textColor: INTEGER;
49
        color, backColor, textColor: INTEGER;
49
        font*: tFont;
50
        font*: tFont;
50
        mode: INTEGER
51
        mode: INTEGER
51
    END;
52
    END;
Line -... Line 53...
-
 
53
 
-
 
54
VAR
-
 
55
 
-
 
56
	font0*, font1*, font2*: tFont;
Line 52... Line 57...
52
 
57
 
53
 
58
 
54
PROCEDURE getRGB* (color: INTEGER; VAR r, g, b: BYTE);
59
PROCEDURE getRGB* (color: INTEGER; VAR r, g, b: BYTE);
55
BEGIN
60
BEGIN
Line 81... Line 86...
81
BEGIN
86
BEGIN
82
    canvas.backColor := color
87
    canvas.backColor := color
83
END SetBkColor;
88
END SetBkColor;
Line 84... Line 89...
84
 
89
 
85
 
90
 
86
PROCEDURE CreateFont* (height: INTEGER; name: ARRAY OF WCHAR; attr: SET): tFont;
91
PROCEDURE CreateFont (size: INTEGER; name: ARRAY OF WCHAR; attr: SET): tFont;
87
VAR
92
VAR
-
 
93
    font: tFont;
88
    font: tFont;
94
BEGIN
89
BEGIN
95
	ASSERT(size IN {0, 1, 2});
-
 
96
    NEW(font);
-
 
97
    font.size := size;
-
 
98
    IF size = 0 THEN
-
 
99
	    font.width := 6;
-
 
100
	    font.height := 9;
90
    NEW(font);
101
	    font.flags := 08000000H
91
    font.size := MAX(MIN(height, 8), 1);
102
    ELSE
-
 
103
	    font.width := size*8;
-
 
104
	    font.height := size*16;
92
    font.width := font.size*8;
105
	    IF size = 1 THEN
-
 
106
	    	font.flags := 28000000H
-
 
107
	    ELSIF size = 2 THEN
-
 
108
	    	font.flags := 29000000H
93
    font.height := font.size*16;
109
	    END
94
    DEC(font.size);
110
    END;
95
    font.name := name
111
    font.name := name
Line 254... Line 270...
254
 
270
 
255
PROCEDURE TextOut* (canvas: tCanvas; x, y: INTEGER; text: INTEGER; n: INTEGER; delimColor: INTEGER);
271
PROCEDURE TextOut* (canvas: tCanvas; x, y: INTEGER; text: INTEGER; n: INTEGER; delimColor: INTEGER);
256
CONST
272
CONST
257
    WCHAR_SIZE = 2;
273
    WCHAR_SIZE = 2;
258
VAR
274
VAR
-
 
275
    color, i, ch: INTEGER;
259
    color, i, font: INTEGER;
276
    font: tFont;
260
    c: WCHAR;
277
    c: WCHAR;
-
 
278
BEGIN
261
BEGIN
279
	font := canvas.font;
262
    IF (0 <= y) & (y <= canvas.height - canvas.font.height - 1) THEN
280
    IF (0 <= y) & (y <= canvas.height - font.height - 1) THEN
263
        IF x < 0 THEN
281
        IF x < 0 THEN
264
            i := -(x DIV canvas.font.width);
282
            i := -(x DIV font.width);
265
            INC(x, i*canvas.font.width);
283
            INC(x, i*font.width);
266
            DEC(n, i)
284
            DEC(n, i)
267
        ELSE
285
        ELSE
268
            i := 0
286
            i := 0
269
        END;
287
        END;
270
        IF n > 0 THEN
288
        IF n > 0 THEN
271
            n := MAX(MIN(n, (canvas.width - x) DIV canvas.font.width), 0);
289
            n := MAX(MIN(n, (canvas.width - x) DIV font.width), 0);
272
            color := canvas.color;
290
            color := canvas.color;
273
            canvas.color := canvas.backColor;
291
            canvas.color := canvas.backColor;
274
            FillRect(canvas, x, y, x + n*canvas.font.width, y + canvas.font.height);
292
            FillRect(canvas, x, y, x + n*font.width, y + font.height);
275
            canvas.color := color;
-
 
276
            font := LSL(28H + canvas.font.size, 24);
293
            canvas.color := color;
277
            WHILE n > 0 DO
294
            WHILE n > 0 DO
278
                SYSTEM.GET(text + i*WCHAR_SIZE, c);
295
                SYSTEM.GET(text + i*WCHAR_SIZE, c);
279
                IF ~Lines.isSpace(c) THEN
296
                IF ~Lines.isSpace(c) THEN
280
                	IF Languages.isDelim(c) THEN
297
                	IF Languages.isDelim(c) THEN
Line 283... Line 300...
283
                		color := canvas.textColor
300
                		color := canvas.textColor
284
                	END;
301
                	END;
285
					IF c = Lines.NUL THEN
302
					IF c = Lines.NUL THEN
286
                		c := 0X
303
                		c := 0X
287
					END;
304
					END;
-
 
305
					IF font = font0 THEN
288
                    KOSAPI.sysfunc6(4, x*65536 + y, font + color, SYSTEM.ADR(c), 1, canvas.bitmap - 8)
306
						ch := E.UNI[ORD(c), E.CP866];
-
 
307
						IF ch = E.UNDEF THEN
-
 
308
							c := "?"
-
 
309
						ELSE
-
 
310
							c := WCHR(ch)
-
 
311
						END
289
                END;
312
					END;
-
 
313
                    KOSAPI.sysfunc6(4, x*65536 + y, font.flags + color, SYSTEM.ADR(c), 1, canvas.bitmap - 8)
-
 
314
                END;
290
                INC(x, canvas.font.width);
315
                INC(x, font.width);
291
                INC(i);
316
                INC(i);
292
                DEC(n)
317
                DEC(n)
293
            END
318
            END
294
        END
319
        END
295
    END
320
    END
Line 320... Line 345...
320
 
345
 
321
 
346
 
322
PROCEDURE destroy* (VAR canvas: tCanvas);
347
PROCEDURE destroy* (VAR canvas: tCanvas);
323
BEGIN
348
BEGIN
324
    IF canvas # NIL THEN
349
    IF canvas # NIL THEN
325
        canvas.bitmap := KOSAPI.free(canvas.bitmap);
350
        canvas.bitmap := KOSAPI.free(canvas.bitmap - 8);
326
        DISPOSE(canvas)
351
        DISPOSE(canvas)
Line -... Line 352...
-
 
352
    END
-
 
353
END destroy;
-
 
354
 
-
 
355
 
327
    END
356
BEGIN
328
END destroy;
357
    font0 := CreateFont(0, "", {});