1 #pragma once
2 
3 #include <pixman.h>
4 
5 #include <fcft/fcft.h>
6 
7 #include "shm.h"
8 #include "match.h"
9 #include "tllist.h"
10 
11 struct rgba {double r; double g; double b; double a;};
12 struct pt_or_px {int px; float pt;};
13 
14 struct render_options {
15     unsigned lines;
16     unsigned chars;
17     unsigned border_size;
18     unsigned border_radius;
19     struct {
20         unsigned x;
21         unsigned y;
22         unsigned inner;
23     } pad;
24 
25     struct rgba background_color;
26     struct rgba border_color;
27     struct rgba text_color;
28     struct rgba match_color;
29     struct rgba selection_color;
30     struct rgba selection_text_color;
31 
32     struct pt_or_px line_height;
33     struct pt_or_px letter_spacing;
34 
35     /* Filled in by render, for now */
36     pixman_color_t pix_background_color;
37     pixman_color_t pix_border_color;
38     pixman_color_t pix_text_color;
39     pixman_color_t pix_match_color;
40     pixman_color_t pix_selection_color;
41     pixman_color_t pix_selection_text_color;
42 };
43 
44 struct render;
45 struct render *render_init(const struct render_options *options);
46 void render_destroy(struct render *render);
47 
48 void render_set_subpixel(struct render *render, enum fcft_subpixel subpixel);
49 bool render_set_font(struct render *render, struct fcft_font *font,
50                      int scale, float dpi, bool size_font_by_dpi,
51                      int *new_width, int *new_height);
52 
53 void render_background(const struct render *render, struct buffer *buf);
54 
55 void render_prompt(
56     const struct render *render, struct buffer *buf,
57     const struct prompt *prompt);
58 
59 void render_match_list(
60     const struct render *render, struct buffer *buf,
61     const struct prompt *prompt, const struct matches *matches);
62