feat: add round titlebars (#26)

This commit is contained in:
William McKinnon 2022-11-11 01:19:02 -05:00 committed by GitHub
parent 9ee7fa61af
commit 1930bd0d71
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 291 additions and 67 deletions

View file

@ -4,7 +4,7 @@
#include <GLES2/gl2.h>
#include <stdbool.h>
enum corner_location {NONE, TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT};
enum corner_location { NONE, TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT };
struct gles2_tex_shader {
GLuint program;
@ -16,6 +16,17 @@ struct gles2_tex_shader {
GLint size;
GLint position;
GLint radius;
GLint has_titlebar;
};
struct rounded_quad_shader {
GLuint program;
GLint proj;
GLint color;
GLint pos_attrib;
GLint size;
GLint position;
GLint radius;
};
struct fx_renderer {
@ -31,6 +42,10 @@ struct fx_renderer {
GLint color;
GLint pos_attrib;
} quad;
struct rounded_quad_shader rounded_tl_quad;
struct rounded_quad_shader rounded_tr_quad;
struct {
GLuint program;
GLint proj;
@ -45,6 +60,7 @@ struct fx_renderer {
GLint half_size;
GLint half_thickness;
} corner;
struct gles2_tex_shader tex_rgba;
struct gles2_tex_shader tex_rgbx;
struct gles2_tex_shader tex_ext;
@ -63,14 +79,19 @@ void fx_renderer_scissor(struct wlr_box *box);
bool fx_render_subtexture_with_matrix(struct fx_renderer *renderer, struct wlr_texture *wlr_texture,
const struct wlr_fbox *src_box, const struct wlr_box *dst_box, const float matrix[static 9],
float alpha, int radius);
float alpha, int radius, const bool has_titlebar);
bool fx_render_texture_with_matrix(struct fx_renderer *renderer, struct wlr_texture *wlr_texture,
const struct wlr_box *dst_box, const float matrix[static 9], float alpha, int radius);
const struct wlr_box *dst_box, const float matrix[static 9], float alpha, int radius,
const bool has_titlebar);
void fx_render_rect(struct fx_renderer *renderer, const struct wlr_box *box,
const float color[static 4], const float projection[static 9]);
void fx_render_rounded_rect(struct fx_renderer *renderer, const struct wlr_box *box,
const float color[static 4], const float projection[static 9],
int radius, enum corner_location corner_location);
void fx_render_border_corner(struct fx_renderer *renderer, const struct wlr_box *box,
const float color[static 4], const float projection[static 9],
enum corner_location corner_location, int radius, int border_thickness);