mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			210 lines
		
	
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			210 lines
		
	
	
	
		
			6.6 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>
 | 
						|
 | 
						|
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];
 | 
						|
};
 | 
						|
 | 
						|
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;
 | 
						|
 | 
						|
	/* button width */
 | 
						|
	int window_button_width;
 | 
						|
	/* the space between buttons */
 | 
						|
	int window_button_spacing;
 | 
						|
	/* the shape of the hover effect */
 | 
						|
	enum lab_shape window_button_hover_bg_shape;
 | 
						|
 | 
						|
	/* button colors */
 | 
						|
	float window_active_button_menu_unpressed_image_color[4];
 | 
						|
	float window_active_button_iconify_unpressed_image_color[4];
 | 
						|
	float window_active_button_max_unpressed_image_color[4];
 | 
						|
	float window_active_button_close_unpressed_image_color[4];
 | 
						|
	float window_active_button_shade_unpressed_image_color[4];
 | 
						|
	float window_active_button_omnipresent_unpressed_image_color[4];
 | 
						|
	float window_inactive_button_menu_unpressed_image_color[4];
 | 
						|
	float window_inactive_button_iconify_unpressed_image_color[4];
 | 
						|
	float window_inactive_button_max_unpressed_image_color[4];
 | 
						|
	float window_inactive_button_close_unpressed_image_color[4];
 | 
						|
	float window_inactive_button_shade_unpressed_image_color[4];
 | 
						|
	float window_inactive_button_omnipresent_unpressed_image_color[4];
 | 
						|
	/* TODO: add pressed and hover colors for buttons */
 | 
						|
 | 
						|
	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];
 | 
						|
 | 
						|
	/* textures */
 | 
						|
	struct lab_data_buffer *button_close_active_unpressed;
 | 
						|
	struct lab_data_buffer *button_maximize_active_unpressed;
 | 
						|
	struct lab_data_buffer *button_restore_active_unpressed;
 | 
						|
	struct lab_data_buffer *button_iconify_active_unpressed;
 | 
						|
	struct lab_data_buffer *button_menu_active_unpressed;
 | 
						|
	struct lab_data_buffer *button_shade_active_unpressed;
 | 
						|
	struct lab_data_buffer *button_unshade_active_unpressed;
 | 
						|
	struct lab_data_buffer *button_omnipresent_active_unpressed;
 | 
						|
	struct lab_data_buffer *button_exclusive_active_unpressed;
 | 
						|
 | 
						|
	struct lab_data_buffer *button_close_inactive_unpressed;
 | 
						|
	struct lab_data_buffer *button_maximize_inactive_unpressed;
 | 
						|
	struct lab_data_buffer *button_restore_inactive_unpressed;
 | 
						|
	struct lab_data_buffer *button_iconify_inactive_unpressed;
 | 
						|
	struct lab_data_buffer *button_menu_inactive_unpressed;
 | 
						|
	struct lab_data_buffer *button_shade_inactive_unpressed;
 | 
						|
	struct lab_data_buffer *button_unshade_inactive_unpressed;
 | 
						|
	struct lab_data_buffer *button_omnipresent_inactive_unpressed;
 | 
						|
	struct lab_data_buffer *button_exclusive_inactive_unpressed;
 | 
						|
 | 
						|
	/* hover variants are optional and may be NULL */
 | 
						|
	struct lab_data_buffer *button_close_active_hover;
 | 
						|
	struct lab_data_buffer *button_maximize_active_hover;
 | 
						|
	struct lab_data_buffer *button_restore_active_hover;
 | 
						|
	struct lab_data_buffer *button_iconify_active_hover;
 | 
						|
	struct lab_data_buffer *button_menu_active_hover;
 | 
						|
	struct lab_data_buffer *button_shade_active_hover;
 | 
						|
	struct lab_data_buffer *button_unshade_active_hover;
 | 
						|
	struct lab_data_buffer *button_omnipresent_active_hover;
 | 
						|
	struct lab_data_buffer *button_exclusive_active_hover;
 | 
						|
 | 
						|
	struct lab_data_buffer *button_close_inactive_hover;
 | 
						|
	struct lab_data_buffer *button_maximize_inactive_hover;
 | 
						|
	struct lab_data_buffer *button_restore_inactive_hover;
 | 
						|
	struct lab_data_buffer *button_iconify_inactive_hover;
 | 
						|
	struct lab_data_buffer *button_menu_inactive_hover;
 | 
						|
	struct lab_data_buffer *button_shade_inactive_hover;
 | 
						|
	struct lab_data_buffer *button_unshade_inactive_hover;
 | 
						|
	struct lab_data_buffer *button_omnipresent_inactive_hover;
 | 
						|
	struct lab_data_buffer *button_exclusive_inactive_hover;
 | 
						|
 | 
						|
	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;
 | 
						|
};
 | 
						|
 | 
						|
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 */
 |