labwc/include/theme.h
Johan Malm 0aa4cfe32d theme: add window.button.height
window.button.{height,width} determine the space allocated for buttons.
Buttons can be smaller than this size and will then just be center aligned
within the allocated space. However, buttons will be clamped at this size
to prevent them from going outside of the allocated space.
2024-10-08 20:04:05 +01:00

187 lines
4.5 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Theme engine for labwc
*
* Copyright Johan Malm 2020-2021
*/
#ifndef LABWC_THEME_H
#define LABWC_THEME_H
#include <stdio.h>
#include <wlr/render/wlr_renderer.h>
#include "ssd.h"
enum lab_justification {
LAB_JUSTIFY_LEFT,
LAB_JUSTIFY_CENTER,
LAB_JUSTIFY_RIGHT,
};
enum lab_shape {
LAB_RECTANGLE,
LAB_CIRCLE,
};
struct theme_snapping_overlay {
bool bg_enabled;
bool border_enabled;
float bg_color[4];
int border_width;
float border_color[3][4];
};
enum lab_button_state {
LAB_BS_HOVERD = 1 << 0,
LAB_BS_TOGGLED = 1 << 1,
LAB_BS_ROUNDED = 1 << 2,
LAB_BS_ALL = LAB_BS_HOVERD | LAB_BS_TOGGLED | LAB_BS_ROUNDED,
};
struct theme {
int border_width;
/*
* the space between title bar border and
* buttons on the left/right/top
*/
int padding_width;
int padding_height;
int title_height;
int menu_overlap_x;
int menu_overlap_y;
/* colors */
float window_active_border_color[4];
float window_inactive_border_color[4];
float window_toggled_keybinds_color[4];
float window_active_title_bg_color[4];
float window_inactive_title_bg_color[4];
float window_active_label_text_color[4];
float window_inactive_label_text_color[4];
enum lab_justification window_label_text_justify;
enum lab_justification menu_title_text_justify;
/* buttons */
int window_button_width;
int window_button_height;
int window_button_spacing;
/* the shape of the hover effect */
enum lab_shape window_button_hover_bg_shape;
int menu_item_padding_x;
int menu_item_padding_y;
int menu_item_height;
float menu_items_bg_color[4];
float menu_items_text_color[4];
float menu_items_active_bg_color[4];
float menu_items_active_text_color[4];
int menu_min_width;
int menu_max_width;
int menu_separator_line_thickness;
int menu_separator_padding_width;
int menu_separator_padding_height;
float menu_separator_color[4];
float menu_title_bg_color[4];
float menu_title_text_color[4];
int osd_border_width;
float osd_bg_color[4];
float osd_border_color[4];
float osd_label_text_color[4];
int osd_window_switcher_width;
int osd_window_switcher_padding;
int osd_window_switcher_item_padding_x;
int osd_window_switcher_item_padding_y;
int osd_window_switcher_item_active_border_width;
bool osd_window_switcher_width_is_percent;
int osd_window_switcher_preview_border_width;
float osd_window_switcher_preview_border_color[3][4];
int osd_workspace_switcher_boxes_width;
int osd_workspace_switcher_boxes_height;
struct theme_snapping_overlay
snapping_overlay_region, snapping_overlay_edge;
/* window drop-shadows */
int window_active_shadow_size;
int window_inactive_shadow_size;
float window_active_shadow_color[4];
float window_inactive_shadow_color[4];
struct {
/*
* The texture of a window buttons for each hover/toggled/rounded
* state. This can be accessed like:
*
* buttons[LAB_SSD_BUTTON_ICONIFY][LAB_BS_HOVERD | LAB_BS_TOGGLED]
*
* Elements in buttons[0] are all NULL since LAB_SSD_BUTTON_FIRST is 1.
*/
struct lab_data_buffer *buttons
[LAB_SSD_BUTTON_LAST + 1][LAB_BS_ALL + 1];
/* TODO: add toggled/hover/pressed/disabled colors for buttons */
float button_colors[LAB_SSD_BUTTON_LAST + 1][4];
/* TODO: move other window.(in)active.* entries to here */
} window[2]; /* indexed by THEME_INACTIVE and THEME_ACTIVE */
/* textures */
struct lab_data_buffer *corner_top_left_active_normal;
struct lab_data_buffer *corner_top_right_active_normal;
struct lab_data_buffer *corner_top_left_inactive_normal;
struct lab_data_buffer *corner_top_right_inactive_normal;
struct lab_data_buffer *shadow_corner_top_active;
struct lab_data_buffer *shadow_corner_bottom_active;
struct lab_data_buffer *shadow_edge_active;
struct lab_data_buffer *shadow_corner_top_inactive;
struct lab_data_buffer *shadow_corner_bottom_inactive;
struct lab_data_buffer *shadow_edge_inactive;
/* not set in rc.xml/themerc, but derived from font & padding_height */
int osd_window_switcher_item_height;
/* magnifier */
float mag_border_color[4];
int mag_border_width;
};
#define THEME_INACTIVE 0
#define THEME_ACTIVE 1
struct server;
/**
* theme_init - read openbox theme and generate button textures
* @theme: theme data
* @server: server
* @theme_name: theme-name in <theme-dir>/<theme-name>/openbox-3/themerc
* Note <theme-dir> is obtained in theme-dir.c
*/
void theme_init(struct theme *theme, struct server *server, const char *theme_name);
/**
* theme_finish - free button textures
* @theme: theme data
*/
void theme_finish(struct theme *theme);
#endif /* LABWC_THEME_H */