2021-11-13 21:56:53 +00:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
2020-06-29 19:27:59 +01:00
|
|
|
/*
|
2021-07-16 17:07:00 +01:00
|
|
|
* Theme engine for labwc
|
2020-06-29 19:27:59 +01:00
|
|
|
*
|
2021-07-16 17:07:00 +01:00
|
|
|
* Copyright Johan Malm 2020-2021
|
2020-06-29 19:27:59 +01:00
|
|
|
*/
|
|
|
|
|
|
2023-05-13 16:10:33 +03:00
|
|
|
#ifndef LABWC_THEME_H
|
|
|
|
|
#define LABWC_THEME_H
|
2020-06-11 21:20:43 +01:00
|
|
|
|
|
|
|
|
#include <stdio.h>
|
2020-06-29 19:27:59 +01:00
|
|
|
#include <wlr/render/wlr_renderer.h>
|
2024-10-04 15:27:25 +09:00
|
|
|
#include "ssd.h"
|
2020-06-11 21:20:43 +01:00
|
|
|
|
2024-11-28 19:21:18 +09:00
|
|
|
struct lab_img;
|
|
|
|
|
|
2021-10-17 19:12:06 +00:00
|
|
|
enum lab_justification {
|
|
|
|
|
LAB_JUSTIFY_LEFT,
|
|
|
|
|
LAB_JUSTIFY_CENTER,
|
|
|
|
|
LAB_JUSTIFY_RIGHT,
|
|
|
|
|
};
|
|
|
|
|
|
2024-04-21 02:30:31 +09:00
|
|
|
struct theme_snapping_overlay {
|
|
|
|
|
bool bg_enabled;
|
|
|
|
|
bool border_enabled;
|
|
|
|
|
float bg_color[4];
|
|
|
|
|
int border_width;
|
|
|
|
|
float border_color[3][4];
|
|
|
|
|
};
|
|
|
|
|
|
2024-10-04 15:27:25 +09:00
|
|
|
enum lab_button_state {
|
2025-01-14 00:04:15 +09:00
|
|
|
LAB_BS_DEFAULT = 0,
|
|
|
|
|
|
2024-10-04 15:27:25 +09:00
|
|
|
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,
|
|
|
|
|
};
|
|
|
|
|
|
2020-06-11 21:20:43 +01:00
|
|
|
struct theme {
|
2021-03-27 21:09:45 +00:00
|
|
|
int border_width;
|
2024-09-09 17:43:38 +02:00
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* the space between title bar border and
|
|
|
|
|
* buttons on the left/right/top
|
|
|
|
|
*/
|
2024-10-08 17:52:57 +01:00
|
|
|
int window_titlebar_padding_width;
|
|
|
|
|
int window_titlebar_padding_height;
|
2024-09-09 17:43:38 +02:00
|
|
|
|
2024-11-12 12:37:26 +09:00
|
|
|
int titlebar_height;
|
2021-03-27 21:09:45 +00:00
|
|
|
|
2023-03-05 10:35:56 +01:00
|
|
|
float window_toggled_keybinds_color[4];
|
2021-10-17 19:12:06 +00:00
|
|
|
enum lab_justification window_label_text_justify;
|
2021-10-15 21:35:41 +01:00
|
|
|
|
2024-09-20 20:59:01 +01:00
|
|
|
/* buttons */
|
2024-07-20 11:33:57 +03:00
|
|
|
int window_button_width;
|
2024-09-20 20:59:01 +01:00
|
|
|
int window_button_height;
|
2024-09-09 17:43:38 +02:00
|
|
|
int window_button_spacing;
|
2024-09-20 20:59:01 +01:00
|
|
|
|
2024-10-12 15:06:23 +09:00
|
|
|
/* the corner radius of the hover effect */
|
|
|
|
|
int window_button_hover_bg_corner_radius;
|
2024-07-20 11:33:57 +03:00
|
|
|
|
2024-11-12 10:54:59 +09:00
|
|
|
/*
|
|
|
|
|
* Themes/textures for each active/inactive window. Indexed by
|
|
|
|
|
* THEME_INACTIVE and THEME_ACTIVE.
|
|
|
|
|
*/
|
2024-11-12 09:17:04 +09:00
|
|
|
struct {
|
2024-11-12 10:54:59 +09:00
|
|
|
/* TODO: add toggled/hover/pressed/disabled colors for buttons */
|
|
|
|
|
float button_colors[LAB_SSD_BUTTON_LAST + 1][4];
|
|
|
|
|
|
|
|
|
|
float border_color[4];
|
|
|
|
|
float toggled_keybinds_color[4];
|
|
|
|
|
float title_bg_color[4];
|
|
|
|
|
float label_text_color[4];
|
|
|
|
|
|
|
|
|
|
/* window drop-shadows */
|
|
|
|
|
int shadow_size;
|
|
|
|
|
float shadow_color[4];
|
|
|
|
|
|
2024-11-12 09:17:04 +09:00
|
|
|
/*
|
|
|
|
|
* 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.
|
|
|
|
|
*/
|
2024-11-28 19:21:18 +09:00
|
|
|
struct lab_img *button_imgs
|
2024-11-12 09:17:04 +09:00
|
|
|
[LAB_SSD_BUTTON_LAST + 1][LAB_BS_ALL + 1];
|
|
|
|
|
|
2024-11-12 10:54:59 +09:00
|
|
|
struct lab_data_buffer *corner_top_left_normal;
|
|
|
|
|
struct lab_data_buffer *corner_top_right_normal;
|
2024-11-12 09:17:04 +09:00
|
|
|
|
2024-11-12 10:54:59 +09:00
|
|
|
struct lab_data_buffer *shadow_corner_top;
|
|
|
|
|
struct lab_data_buffer *shadow_corner_bottom;
|
|
|
|
|
struct lab_data_buffer *shadow_edge;
|
|
|
|
|
} window[2];
|
2024-11-12 09:17:04 +09:00
|
|
|
|
2024-11-12 10:54:59 +09:00
|
|
|
/* Derived from font sizes */
|
2024-11-12 09:17:04 +09:00
|
|
|
int menu_item_height;
|
2024-10-26 17:14:27 +03:00
|
|
|
int menu_header_height;
|
|
|
|
|
|
2024-11-12 09:17:04 +09:00
|
|
|
int menu_overlap_x;
|
|
|
|
|
int menu_overlap_y;
|
|
|
|
|
int menu_min_width;
|
|
|
|
|
int menu_max_width;
|
2024-11-24 14:40:40 +09:00
|
|
|
int menu_border_width;
|
|
|
|
|
float menu_border_color[4];
|
2024-11-12 09:17:04 +09:00
|
|
|
|
2024-11-12 12:36:21 +09:00
|
|
|
int menu_items_padding_x;
|
|
|
|
|
int menu_items_padding_y;
|
2021-02-16 20:43:20 +00:00
|
|
|
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];
|
|
|
|
|
|
2022-12-06 12:01:44 +01:00
|
|
|
int menu_separator_line_thickness;
|
2022-06-22 21:07:25 +01:00
|
|
|
int menu_separator_padding_width;
|
|
|
|
|
int menu_separator_padding_height;
|
|
|
|
|
float menu_separator_color[4];
|
|
|
|
|
|
2024-05-09 21:20:15 +01:00
|
|
|
float menu_title_bg_color[4];
|
2024-11-12 09:17:04 +09:00
|
|
|
enum lab_justification menu_title_text_justify;
|
2024-08-21 12:27:07 -05:00
|
|
|
float menu_title_text_color[4];
|
|
|
|
|
|
2022-05-31 19:14:58 +02:00
|
|
|
int osd_border_width;
|
2023-04-24 21:31:28 +01:00
|
|
|
|
2021-10-13 21:29:32 +01:00
|
|
|
float osd_bg_color[4];
|
2022-05-31 19:14:58 +02:00
|
|
|
float osd_border_color[4];
|
2021-10-13 21:29:32 +01:00
|
|
|
float osd_label_text_color[4];
|
|
|
|
|
|
2023-04-24 21:31:28 +01:00
|
|
|
int osd_window_switcher_width;
|
2023-06-29 21:29:43 +01:00
|
|
|
int osd_window_switcher_padding;
|
2023-04-24 21:31:28 +01:00
|
|
|
int osd_window_switcher_item_padding_x;
|
|
|
|
|
int osd_window_switcher_item_padding_y;
|
2023-07-01 14:56:13 +02:00
|
|
|
int osd_window_switcher_item_active_border_width;
|
2024-03-26 05:12:19 -05:00
|
|
|
bool osd_window_switcher_width_is_percent;
|
2024-04-15 20:22:44 +09:00
|
|
|
int osd_window_switcher_preview_border_width;
|
|
|
|
|
float osd_window_switcher_preview_border_color[3][4];
|
2023-04-24 21:31:28 +01:00
|
|
|
|
2023-12-11 12:41:33 +03:00
|
|
|
int osd_workspace_switcher_boxes_width;
|
|
|
|
|
int osd_workspace_switcher_boxes_height;
|
|
|
|
|
|
2024-04-21 02:30:31 +09:00
|
|
|
struct theme_snapping_overlay
|
|
|
|
|
snapping_overlay_region, snapping_overlay_edge;
|
2024-04-14 02:26:36 +09:00
|
|
|
|
2024-10-08 17:52:57 +01:00
|
|
|
/*
|
|
|
|
|
* Not set in rc.xml/themerc, but derived from the tallest titlebar
|
|
|
|
|
* object plus 2 * window_titlebar_padding_height
|
|
|
|
|
*/
|
2023-04-24 21:31:28 +01:00
|
|
|
int osd_window_switcher_item_height;
|
2024-05-15 23:07:23 +01:00
|
|
|
|
|
|
|
|
/* magnifier */
|
|
|
|
|
float mag_border_color[4];
|
|
|
|
|
int mag_border_width;
|
2020-06-11 21:20:43 +01:00
|
|
|
};
|
|
|
|
|
|
2024-10-04 15:27:25 +09:00
|
|
|
#define THEME_INACTIVE 0
|
|
|
|
|
#define THEME_ACTIVE 1
|
|
|
|
|
|
2024-04-21 02:30:31 +09:00
|
|
|
struct server;
|
|
|
|
|
|
2020-08-07 20:21:14 +01:00
|
|
|
/**
|
2021-02-21 21:54:40 +00:00
|
|
|
* theme_init - read openbox theme and generate button textures
|
2021-02-21 22:03:14 +00:00
|
|
|
* @theme: theme data
|
2024-04-21 02:30:31 +09:00
|
|
|
* @server: server
|
2025-01-02 20:40:41 +00:00
|
|
|
* @theme_name: theme-name in <theme-dir>/<theme-name>/labwc/themerc
|
2020-08-07 20:21:14 +01:00
|
|
|
* Note <theme-dir> is obtained in theme-dir.c
|
|
|
|
|
*/
|
2024-04-21 02:30:31 +09:00
|
|
|
void theme_init(struct theme *theme, struct server *server, const char *theme_name);
|
2020-06-11 21:20:43 +01:00
|
|
|
|
2021-02-21 22:03:14 +00:00
|
|
|
/**
|
|
|
|
|
* theme_finish - free button textures
|
|
|
|
|
* @theme: theme data
|
|
|
|
|
*/
|
|
|
|
|
void theme_finish(struct theme *theme);
|
|
|
|
|
|
2023-05-13 16:10:33 +03:00
|
|
|
#endif /* LABWC_THEME_H */
|