{render,config}: allow specifying wallpaper anchor position

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Iee73e9d149e85d2c00eaba4be25d42bd6a6a6964
This commit is contained in:
raf 2026-04-13 14:25:47 +03:00
commit a82b986ac6
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
4 changed files with 189 additions and 29 deletions

19
include/chroma.h vendored
View file

@ -44,6 +44,19 @@ typedef enum {
CHROMA_SCALE_CENTER = 3 // center image at original size
} chroma_scale_mode_t;
// Anchor positions for wallpaper placement
typedef enum {
CHROMA_ANCHOR_CENTER = 0, // center of the output (default)
CHROMA_ANCHOR_TOP = 1, // top edge, centered horizontally
CHROMA_ANCHOR_BOTTOM = 2, // bottom edge, centered horizontally
CHROMA_ANCHOR_LEFT = 3, // left edge, centered vertically
CHROMA_ANCHOR_RIGHT = 4, // right edge, centered vertically
CHROMA_ANCHOR_TOP_LEFT = 5, // top-left corner
CHROMA_ANCHOR_TOP_RIGHT = 6, // top-right corner
CHROMA_ANCHOR_BOTTOM_LEFT = 7, // bottom-left corner
CHROMA_ANCHOR_BOTTOM_RIGHT = 8 // bottom-right corner
} chroma_anchor_t;
// Image filtering quality settings
typedef enum {
CHROMA_FILTER_NEAREST = 0, // nearest neighbor filtering (pixelated)
@ -90,6 +103,7 @@ typedef struct {
// Configuration for this output
chroma_scale_mode_t scale_mode;
chroma_filter_quality_t filter_quality;
chroma_anchor_t anchor;
bool config_loaded;
// OpenGL resource cache
@ -108,6 +122,7 @@ typedef struct {
char image_path[MAX_PATH_LEN];
chroma_scale_mode_t scale_mode;
chroma_filter_quality_t filter_quality;
chroma_anchor_t anchor;
} chroma_config_mapping_t;
// Application configuration
@ -120,6 +135,7 @@ typedef struct {
// Global scaling and filtering settings (used as defaults)
chroma_scale_mode_t default_scale_mode;
chroma_filter_quality_t default_filter_quality;
chroma_anchor_t default_anchor;
// Image downsampling settings
bool enable_downsampling; // enable automatic downsampling
@ -231,7 +247,8 @@ const char *chroma_config_get_image_for_output(chroma_config_t *config,
const char *output_name);
int chroma_config_get_mapping_for_output(
chroma_config_t *config, const char *output_name,
chroma_scale_mode_t *scale_mode, chroma_filter_quality_t *filter_quality);
chroma_scale_mode_t *scale_mode, chroma_filter_quality_t *filter_quality,
chroma_anchor_t *anchor);
void chroma_config_print(const chroma_config_t *config);