Subversion Repositories Kolibri OS

Rev

Rev 9577 | Rev 9668 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
9174 akron1 1
(*
9577 akron1 2
    Copyright 2021, 2022 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
9659 akron1 23
	Graph, File, SYSTEM, KOSAPI;
8859 leency 24
 
25
CONST
9659 akron1 26
	fileName = "/sys/Icons16.png";
27
	SIZE* = 18;
8859 leency 28
 
29
VAR
9659 akron1 30
	source: INTEGER;
8859 leency 31
 
9659 akron1 32
(*
8859 leency 33
PROCEDURE copy (src, dst: INTEGER);
34
VAR
9659 akron1 35
	src_width, src_height,
36
	dst_width, dst_height,
37
	src_data, dst_data: INTEGER;
8859 leency 38
BEGIN
9659 akron1 39
	LibImg.GetInf(src, src_width, src_height, src_data);
40
	LibImg.GetInf(dst, dst_width, dst_height, dst_data);
41
	ASSERT(src_width = dst_width);
42
	ASSERT(src_height = dst_height);
43
	SYSTEM.MOVE(src_data, dst_data, src_width*src_height*4)
8859 leency 44
END copy;
9659 akron1 45
*)
8859 leency 46
 
9659 akron1 47
PROCEDURE [stdcall, "libimg.obj", ""] img_decode (data, size, options: INTEGER): INTEGER; END;
48
PROCEDURE [stdcall, "Libimg.obj", ""] img_convert (src, dst, dst_type, flags, param: INTEGER): INTEGER; END;
49
PROCEDURE [stdcall, "Libimg.obj", ""] img_destroy (img: INTEGER); END;
8859 leency 50
 
9659 akron1 51
PROCEDURE GetInf (img: INTEGER; VAR width, height, data: INTEGER);
52
BEGIN
53
	SYSTEM.GET(img +  4, width);
54
	SYSTEM.GET(img +  8, height);
55
	SYSTEM.GET(img + 24, data);
56
END GetInf;
57
 
58
 
59
PROCEDURE GetImg* (ptr, size: INTEGER): INTEGER;
60
VAR
61
	image_data, dst, x, type: INTEGER;
62
BEGIN
63
	image_data := img_decode(ptr, size, 0);
64
	IF image_data # 0 THEN
65
		SYSTEM.GET(image_data + 4, x);
66
		ASSERT(x = SIZE);
67
		SYSTEM.GET(image_data + 20, type);
68
		IF type # 3 THEN
69
			dst := img_convert(image_data, 0, 3, 0, 0);
70
			img_destroy(image_data);
71
			image_data := dst
72
		END
73
	END
74
	RETURN image_data
75
END GetImg;
76
 
77
 
8859 leency 78
PROCEDURE load (): INTEGER;
79
VAR
9659 akron1 80
	size, res, ptr: INTEGER;
8859 leency 81
BEGIN
9659 akron1 82
	res := 0;
83
	ptr := File.Load(fileName, size);
84
	IF ptr # 0 THEN
85
		res := GetImg(ptr, size);
86
		ptr := KOSAPI.free(ptr)
87
	END
88
	RETURN res
8859 leency 89
END load;
90
 
91
 
92
PROCEDURE draw* (icons, n, x, y: INTEGER);
93
VAR
9659 akron1 94
	width, height, data: INTEGER;
8859 leency 95
BEGIN
9659 akron1 96
	GetInf(icons, width, height, data);
97
	KOSAPI.sysfunc7(65, data + SIZE*SIZE*4*n, SIZE*65536 + SIZE, x*65536 + y, 32, 0, 0)
8859 leency 98
END draw;
99
 
100
 
9522 akron1 101
PROCEDURE iconsBackColor (icons: INTEGER; BackColor: INTEGER);
8859 leency 102
VAR
9659 akron1 103
	width, height, data, x, y, pix: INTEGER;
104
	b, g, r, gr: BYTE;
8859 leency 105
BEGIN
9659 akron1 106
	GetInf(icons, width, height, data);
107
	FOR y := 0 TO height - 1 DO
108
		FOR x := 0 TO width - 1 DO
109
			SYSTEM.GET32(data, pix);
110
			Graph.getRGB(pix, r, g, b);
111
			gr := (r + g + b) DIV 3;
112
			IF BackColor = -1 THEN
113
				pix := gr + 256*gr + 65536*gr
114
			ELSIF gr = 255 THEN
115
				pix := BackColor
116
			END;
117
			SYSTEM.PUT32(data, pix);
118
			INC(data, 4)
119
		END
120
	END
8859 leency 121
END iconsBackColor;
122
 
123
 
9522 akron1 124
PROCEDURE get* (VAR icons, grayIcons: INTEGER; BackColor: INTEGER);
8859 leency 125
BEGIN
9659 akron1 126
	IF source = 0 THEN
127
		source := load();
128
		icons := load();
129
		grayIcons := load();
130
		iconsBackColor(grayIcons, -1);
131
		iconsBackColor(grayIcons, BackColor);
132
		iconsBackColor(icons, BackColor)
133
	(*ELSE
134
		copy(source, icons);
135
		copy(source, grayIcons)*)
136
	END;
8859 leency 137
END get;
138
 
139
 
140
BEGIN
9659 akron1 141
	source := 0
8859 leency 142
END Icons.