summaryrefslogtreecommitdiff
path: root/src/payslip.c
diff options
context:
space:
mode:
authorAnders Betts <anders.betts@gmail.com>2026-09-22 09:04:27 +0200
committerAnders Betts <anders.betts@gmail.com>2026-09-22 09:04:27 +0200
commit227d0422da0062410c85529bc999d7e509d9de78 (patch)
tree23102d1fb049b610ec154e7c136e3d92d941bd6d /src/payslip.c
parent8ceb1340a9030bb1030be61003dc65b444732b9e (diff)
downloadbokf-0.1.63.tar.gz
bokf-0.1.63.zip
documents: org name in the invoice and payslip headers, document_header_colorv0.1.63
Diffstat (limited to 'src/payslip.c')
-rw-r--r--src/payslip.c62
1 files changed, 10 insertions, 52 deletions
diff --git a/src/payslip.c b/src/payslip.c
index 81ebded..ee8e008 100644
--- a/src/payslip.c
+++ b/src/payslip.c
@@ -6,7 +6,6 @@
#include "pdf.h"
#include "util.h"
-#include "wordmark.h"
#define INK "#314c59"
#define WHITE "#ffffff"
@@ -52,9 +51,12 @@
#define FOOT_PAGE_Y 819.7954
#define FOOT_PAGE_RIGHT 567.4275
-#define WORDMARK_X 21.742
+#define HEADER_NAME_X 21.742
#define TITLE_RIGHT 574.892
#define TITLE_BASE_Y 69.1358
+#define HEADER_NAME_SIZE 16.0
+#define HEADER_NAME_MIN_SIZE 8.0
+#define HEADER_NAME_MAX_W 460.0
static void text_at(struct pdf *p, double x, double base, const char *font,
double size, const char *rgb, const char *s)
@@ -72,54 +74,6 @@ static void text_right(struct pdf *p, double right, double base,
rgb, s);
}
-/* pdf_path consumes SVG-style y-down paths; wordmark.h stores y-up outline
- coordinates, so negate the y of every point before drawing. */
-static void draw_wordmark(struct pdf *p, const char *path, double x, double y)
-{
- size_t n = strlen(path);
- char *flipped = xmalloc(2 * n + 2);
- char op = 0;
- int num = 0, in_num = 0, y_coord = 0;
- size_t o = 0;
-
- for (size_t i = 0; i < n; i++) {
- char c = path[i];
-
- if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
- if (c == 'M' || c == 'L' || c == 'C') {
- op = c;
- num = 0;
- } else if (c == 'Z') {
- op = 0;
- }
- flipped[o++] = c;
- in_num = 0;
- continue;
- }
- if (!in_num && (c == '-' || c == '+' || c == '.' ||
- (c >= '0' && c <= '9'))) {
- in_num = 1;
- y_coord = op && (num % 2 == 1);
- num++;
- if (y_coord) {
- if (c == '-') {
- i++;
- c = path[i];
- } else {
- flipped[o++] = '-';
- }
- }
- } else if (!(c == '-' || c == '+' || c == '.' ||
- (c >= '0' && c <= '9'))) {
- in_num = 0;
- }
- flipped[o++] = c;
- }
- flipped[o] = '\0';
- pdf_path(p, flipped, x, y, WHITE);
- free(flipped);
-}
-
static void group_digits(char *out, size_t n, uint64_t v)
{
char digits[24];
@@ -284,8 +238,12 @@ int payslip_render(const struct payslip_data *d, unsigned char **out,
p = pdf_new();
pdf_page(p);
pdf_fill_rect(p, PAGE_LEFT, BAR_HEADER_Y, PAGE_RIGHT_X - PAGE_LEFT,
- BAR_HEADER_H, INK);
- draw_wordmark(p, WORDMARK_MAKANDRA, WORDMARK_X, TITLE_BASE_Y);
+ BAR_HEADER_H,
+ util_hex_color_valid(d->header_color) ? d->header_color
+ : INK);
+ pdf_text_fit(p, HEADER_NAME_X, TITLE_BASE_Y, "HB", HEADER_NAME_SIZE,
+ HEADER_NAME_MIN_SIZE, HEADER_NAME_MAX_W, WHITE,
+ d->employer.name);
text_right(p, TITLE_RIGHT, TITLE_BASE_Y, "HB", SIZE_TITLE, WHITE,
"LÖNEBESKED");
pdf_line(p, PAGE_LEFT, RULE_HEADER_Y, PAGE_RIGHT_X, RULE_HEADER_Y, RULE_W,