Subversion Repositories Kolibri OS

Rev

Rev 9902 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
9174 akron1 1
(*
9893 akron1 2
    Copyright 2021-2023 Anton Krotov
8859 leency 3
 
4
    This file is part of CEdit.
5
 
6
    CEdit is free software: you can redistribute it and/or modify
7
    it under the terms of the GNU General Public License as published by
8
    the Free Software Foundation, either version 3 of the License, or
9
    (at your option) any later version.
10
 
11
    CEdit is distributed in the hope that it will be useful,
12
    but WITHOUT ANY WARRANTY; without even the implied warranty of
13
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
    GNU General Public License for more details.
15
 
16
    You should have received a copy of the GNU General Public License
17
    along with CEdit. If not, see .
18
*)
19
 
20
MODULE Icons;
21
 
22
IMPORT
9902 akron1 23
	Graph, File, SYSTEM, KOSAPI;
8859 leency 24
 
25
CONST
9902 akron1 26
	fileName = "/sys/Icons16.png";
9913 akron1 27
	libName = "libimg.obj";
28
 
9902 akron1 29
	SIZE* = 18;
8859 leency 30
 
9902 akron1 31
	icoNew    *=  0;
32
	icoOpen   *=  1;
33
	icoSave   *=  2;
34
	icoSearch *=  3;
35
	icoUndo   *=  4;
36
	icoRedo   *=  5;
37
	icoBuild  *=  6;
38
	icoRun    *=  7;
8859 leency 39
 
9902 akron1 40
	NumberOfIcons = 8;
8859 leency 41
 
9902 akron1 42
 
9913 akron1 43
PROCEDURE [stdcall, libName, ""] img_decode (data, size, options: INTEGER): INTEGER; END;
44
PROCEDURE [stdcall, libName, ""] img_convert (src, dst, dst_type, flags, param: INTEGER): INTEGER; END;
45
PROCEDURE [stdcall, libName, ""] img_destroy (img: INTEGER); END;
8859 leency 46
 
9659 akron1 47
 
9668 akron1 48
PROCEDURE GetImg (ptr, size: INTEGER): INTEGER;
9659 akron1 49
VAR
9902 akron1 50
	image_data, dst, x, Type: INTEGER;
9659 akron1 51
BEGIN
9902 akron1 52
	image_data := img_decode(ptr, size, 0);
53
	IF image_data # 0 THEN
54
		SYSTEM.GET(image_data + 4, x);
55
		ASSERT(x = SIZE);
56
		SYSTEM.GET(image_data + 20, Type);
57
		IF Type # 3 THEN
58
			dst := img_convert(image_data, 0, 3, 0, 0);
59
			img_destroy(image_data);
60
			image_data := dst
61
		END
62
	END
63
	RETURN image_data
9659 akron1 64
END GetImg;
65
 
66
 
8859 leency 67
PROCEDURE load (): INTEGER;
68
VAR
9902 akron1 69
	size, res, ptr: INTEGER;
8859 leency 70
BEGIN
9902 akron1 71
	res := 0;
72
	ptr := File.Load(fileName, size);
73
	IF ptr # 0 THEN
74
		res := GetImg(ptr, size);
75
		ptr := KOSAPI.free(ptr)
76
	END
77
	RETURN res
8859 leency 78
END load;
79
 
80
 
81
PROCEDURE draw* (icons, n, x, y: INTEGER);
82
BEGIN
9902 akron1 83
	KOSAPI.sysfunc7(65, icons + SIZE*SIZE*4*n, SIZE*65536 + SIZE, x*65536 + y, 32, 0, 0)
8859 leency 84
END draw;
85
 
86
 
9902 akron1 87
PROCEDURE copy (img: INTEGER; n: INTEGER; dst: INTEGER; m: INTEGER);
88
VAR
89
	data: INTEGER;
90
BEGIN
91
	SYSTEM.GET(img + 24, data);
92
	SYSTEM.MOVE(data + SIZE*SIZE*4*n, dst + SIZE*SIZE*4*m, SIZE*SIZE*4)
93
END copy;
94
 
95
 
9522 akron1 96
PROCEDURE iconsBackColor (icons: INTEGER; BackColor: INTEGER);
8859 leency 97
VAR
9902 akron1 98
	data, x, y, pix: INTEGER;
99
	b, g, r, gr: BYTE;
8859 leency 100
BEGIN
9902 akron1 101
	data := icons;
102
	FOR y := 0 TO SIZE*NumberOfIcons - 1 DO
103
		FOR x := 0 TO SIZE - 1 DO
104
			SYSTEM.GET32(data, pix);
105
			Graph.getRGB(pix, r, g, b);
106
			gr := (r + g + b) DIV 3;
107
			IF BackColor = -1 THEN
108
				pix := gr + 256*gr + 65536*gr
109
			ELSIF gr = 255 THEN
110
				pix := BackColor
111
			END;
112
			SYSTEM.PUT32(data, pix);
113
			INC(data, 4)
114
		END
115
	END
8859 leency 116
END iconsBackColor;
117
 
118
 
9522 akron1 119
PROCEDURE get* (VAR icons, grayIcons: INTEGER; BackColor: INTEGER);
9902 akron1 120
VAR
121
	source: INTEGER;
8859 leency 122
BEGIN
9902 akron1 123
	source := load();
124
	IF source # 0 THEN
125
		icons := KOSAPI.malloc(SIZE*SIZE*4*NumberOfIcons*2);
126
		grayIcons := icons + SIZE*SIZE*4*NumberOfIcons;
127
 
128
		copy(source,  2, icons, icoNew);
129
		copy(source,  0, icons, icoOpen);
130
		copy(source,  5, icons, icoSave);
131
		copy(source, 49, icons, icoSearch);
132
		copy(source, 37, icons, icoUndo);
133
		copy(source, 36, icons, icoRedo);
134
		copy(source, 54, icons, icoBuild);
135
		copy(source, 53, icons, icoRun);
136
		img_destroy(source);
137
		source := 0;
138
		SYSTEM.MOVE(icons, grayIcons, SIZE*SIZE*4*NumberOfIcons);
139
 
140
		iconsBackColor(grayIcons, -1);
141
		iconsBackColor(grayIcons, BackColor);
142
		iconsBackColor(icons, BackColor)
143
	END
8859 leency 144
END get;
145
 
146
END Icons.