hikari/include/hikari/split.h

117 lines
2.5 KiB
C

#if !defined(HIKARI_SPLIT_H)
#define HIKARI_SPLIT_H
#include <wlr/util/box.h>
struct hikari_renderer;
struct hikari_sheet;
struct hikari_view;
typedef struct hikari_view *(*hikari_layout_func)(
struct hikari_sheet *, struct hikari_view *, struct wlr_box *, int, bool *);
enum hikari_split_type {
HIKARI_SPLIT_TYPE_VERTICAL,
HIKARI_SPLIT_TYPE_HORIZONTAL,
HIKARI_SPLIT_TYPE_CONTAINER
};
enum hikari_split_vertical_orientation {
HIKARI_VERTICAL_SPLIT_ORIENTATION_LEFT,
HIKARI_VERTICAL_SPLIT_ORIENTATION_RIGHT
};
enum hikari_split_horizontal_orientation {
HIKARI_HORIZONTAL_SPLIT_ORIENTATION_TOP,
HIKARI_HORIZONTAL_SPLIT_ORIENTATION_BOTTOM
};
enum hikari_split_scale_type {
HIKARI_SPLIT_SCALE_TYPE_FIXED,
HIKARI_SPLIT_SCALE_TYPE_DYNAMIC,
};
struct hikari_split_scale_dynamic {
double min;
double max;
};
struct hikari_split_scale {
enum hikari_split_scale_type type;
union {
double fixed;
struct hikari_split_scale_dynamic dynamic;
} scale;
};
extern const double hikari_split_scale_min;
extern const double hikari_split_scale_max;
extern const double hikari_split_scale_default;
struct hikari_split {
enum hikari_split_type type;
};
struct hikari_split_vertical {
struct hikari_split split;
enum hikari_split_vertical_orientation orientation;
struct hikari_split_scale scale;
struct hikari_split *left;
struct hikari_split *right;
};
struct hikari_split_horizontal {
struct hikari_split split;
enum hikari_split_horizontal_orientation orientation;
struct hikari_split_scale scale;
struct hikari_split *top;
struct hikari_split *bottom;
};
struct hikari_split_container {
struct hikari_split split;
struct wlr_box geometry;
int max;
hikari_layout_func layout;
};
void
hikari_split_apply(struct hikari_split *split,
struct wlr_box *geometry,
struct hikari_view *first);
void
hikari_split_container_init(struct hikari_split_container *container,
int nr_of_views,
hikari_layout_func layout);
void
hikari_split_free(struct hikari_split *split);
struct hikari_split *
hikari_split_copy(struct hikari_split *split);
void
hikari_split_vertical_init(struct hikari_split_vertical *split_vertical,
struct hikari_split_scale *scale,
enum hikari_split_vertical_orientation orientation,
struct hikari_split *left,
struct hikari_split *right);
void
hikari_split_horizontal_init(struct hikari_split_horizontal *split_horizontal,
struct hikari_split_scale *scale,
enum hikari_split_horizontal_orientation orientation,
struct hikari_split *left,
struct hikari_split *right);
#endif