blob: f80c6734c2e38853c37def9c90b4146e02269b44 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#include <lib/gui/eservicegrid.h>
eServiceGrid::eServiceGrid(eWidget *parent): eWidget(parent)
{
para=0;
grid=0;
elemsize=eSize(16, 16);
}
void eServiceGrid::createGrid(eSize gs)
{
gridsize=gs;
if (grid)
delete[] grid;
if (!(gridsize.x() && gridsize.y()))
return;
grid=new (eService*)[gridsize.x()*gridsize.y()];
}
eService **eServiceGrid::allocateGrid(eSize size)
{
for (int y=0; y<gridsize.height(); y++)
for (int x=0; x<gridsize.width(); x++)
{
int ok=1;
for (int cy=0; ok && cy<size.height(); cy++)
for (int cx=0; ok && cx<size.width(); cx++)
if (grid[gridsize.width()*(y+cy)+x+cx])
{
ok=0;
break;
}
if (ok)
return grid+gridsize.width()*(y+cy)+x+cx;
}
return 0;
}
void eServiceGrid::setGridSize(int gx, int gy)
{
createGrid(eSize(gx, gy));
}
void eServiceGrid::addService(eService *service)
{
eTextPara temp;
temp.setFont(font);
temp.renderText(service->service_name);
eSize size=temp.getExtends();
eSize gsize=eSize((size.width()+elemsize.width()-1)/elemsize.width(), (size.height()+elemsize.height()-1)/elemsize.height());
eService **sp=allocateGrid(gsize);
if (!sp)
return;
for (int cy=0; ok && cy<gsize.height(); cy++)
for (int cx=0; ok && cx<gsize.width(); cx++)
sp[cy*gridsize.width()+cx]=service;
}
void eServiceGrid::validate()
{
eService **gp=grid;
for (int y=0; y<gridsize.height(); y++)
for (int x=0; x<gridsize.width(); x++)
{
if (*gp)
{
para->setCursor(x*elemsize.width(), y*elemsize.height());
para->renderString((*gp)->service_name);
}
*gp++;
}
}
|