hikari/include/hikari/split.h

83 lines
1.6 KiB
C

#if !defined(HIKARI_SPLIT_H)
#define HIKARI_SPLIT_H
#include <wlr/types/wlr_box.h>
struct hikari_render_data;
struct hikari_sheet;
struct hikari_view;
typedef struct hikari_view *(*layout_func_t)(
struct hikari_sheet *, struct hikari_view *, struct wlr_box *, int);
enum hikari_split_type {
HIKARI_SPLIT_TYPE_VERTICAL,
HIKARI_SPLIT_TYPE_HORIZONTAL,
HIKARI_SPLIT_TYPE_CONTAINER
};
struct hikari_split {
enum hikari_split_type type;
};
struct hikari_vertical_split {
struct hikari_split split;
float factor;
struct hikari_split *left;
struct hikari_split *right;
};
struct hikari_horizontal_split {
struct hikari_split split;
float factor;
struct hikari_split *top;
struct hikari_split *bottom;
};
struct hikari_container {
struct hikari_split split;
struct wlr_box geometry;
int max;
layout_func_t layout;
};
void
hikari_split_apply(struct hikari_split *split,
struct wlr_box *geometry,
struct hikari_view *first);
void
hikari_container_init(
struct hikari_container *container, int nr_of_views, layout_func_t layout);
void
hikari_split_fini(struct hikari_split *split);
void
hikari_vertical_split_init(struct hikari_vertical_split *vertical_split,
float factor,
struct hikari_split *left,
struct hikari_split *right);
void
hikari_horizontal_split_init(struct hikari_horizontal_split *horizontal_split,
float factor,
struct hikari_split *left,
struct hikari_split *right);
void
hikari_split_render(
struct hikari_split *split, struct hikari_render_data *render_data);
void
hikari_container_render(
struct hikari_container *container, struct hikari_render_data *render_data);
#endif