ref: f397463f79e2b99db0b7a29d6c61396b88433717
parent: f929a0437dcb977136c0318ca851bfb49a254a51
author: sirjofri <sirjofri@sirjofri.de>
date: Thu Jul 4 11:05:52 EDT 2024
adds some styling and grid
--- a/spread.c
+++ b/spread.c
@@ -18,14 +18,16 @@
Image *bg;
Image *err;
Image *head;
+ Image *lines;
};
void
initcolors(Colors *c)
{
- c->bg = allocimage(display, Rect(0, 0, 1, 1), screen->chan, 1, DWhite);
+ c->bg = allocimagemix(display, DPaleyellow, DWhite);
c->err = allocimage(display, Rect(0, 0, 1, 1), screen->chan, 1, DRed);
c->head = allocimage(display, Rect(0, 0, 1, 1), screen->chan, 1, DBlue);
+ c->lines = allocimage(display, Rect(0, 0, 1, 1), screen->chan, 1, DDarkyellow);
}
typedef struct Drawstate Drawstate;
@@ -33,6 +35,8 @@
P firstcell;
int dcolwidth;
Rectangle r;
+ int leftpad;
+ int toppad;
};
void
@@ -41,6 +45,8 @@
d->firstcell.x = d->firstcell.y = 1;
d->dcolwidth = 100;
d->r = screen->r;
+ d->leftpad = 2;
+ d->toppad = 2;
}
P
@@ -80,7 +86,9 @@
P first;
P cell;
int x, y;
+ int dx, dy;
Point p;
+ Point q;
Cell *c;
Response r;
char buf[10];
@@ -88,6 +96,8 @@
dstate.r = insetrect(screen->r, 4);
dstate.r.min.y += font->height;
dstate.r.min.x += stringwidth(font, "88888888");
+ dx = Dx(dstate.r);
+ dy = Dy(dstate.r);
first = dstate.firstcell;
@@ -97,10 +107,16 @@
for (x = first.x; x < first.x + dim.x; x++) {
cell.x = x;
cell.y = first.y - 1;
- p = getcellpos(cell, &dstate);
+ p = addpt(getcellpos(cell, &dstate), dstate.r.min);
/* for some reason, drawing ntoa(x) directly doesn't work */
snprint(buf, sizeof(buf), "%s", ntoa(x));
- string(screen, addpt(p, dstate.r.min), colors.head, ZP, font, buf);
+
+ q = p;
+ q.y += dy + font->height;
+ line(screen, p, q, Endsquare, Endsquare, 0, colors.lines, ZP);
+ p.x += dstate.leftpad;
+ p.y += dstate.toppad;
+ string(screen, p, colors.head, ZP, font, buf);
}
for (y = first.y; y < first.y + dim.y; y++) {
@@ -107,9 +123,15 @@
cell.x = first.x;
cell.y = y;
snprint(buf, sizeof(buf), "%d", y);
- p = getcellpos(cell, &dstate);
- p.x -= stringwidth(font, buf);
- string(screen, addpt(p, dstate.r.min), colors.head, ZP, font, buf);
+ p = addpt(getcellpos(cell, &dstate), dstate.r.min);
+ p.x -= stringwidth(font, buf) + 5;
+
+ q = p;
+ q.x += dx;
+ line(screen, p, q, Endsquare, Endsquare, 0, colors.lines, ZP);
+ p.x += dstate.leftpad;
+ p.y += dstate.toppad;
+ string(screen, p, colors.head, ZP, font, buf);
}
first = dstate.firstcell;
@@ -121,7 +143,10 @@
if (c) {
r = getvalue(cell);
- string(screen, addpt(getcellpos(cell, &dstate), dstate.r.min),
+ p = addpt(getcellpos(cell, &dstate), dstate.r.min);
+ p.x += dstate.leftpad;
+ p.y += dstate.toppad;
+ string(screen, p,
r.error ? colors.err : display->black,
ZP, font, r.msg);
freeresponse(&r);