mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	osd: add osd.window-switcher.item.icon.size
This allows users to make the icon in window switcher bigger (or smaller) than the font size, which enables more Openbox-like appearance. Example configuration: osd.window-switcher.item.icon.size: 50 This commit also makes the icon smaller than the font size if the width allocated with <windowSwitcher><fields><field width=""> is smaller than that.
This commit is contained in:
		
							parent
							
								
									d8bd8c5a3e
								
							
						
					
					
						commit
						6a04c5f0dd
					
				
					 5 changed files with 28 additions and 4 deletions
				
			
		
							
								
								
									
										10
									
								
								src/osd.c
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/osd.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -6,6 +6,7 @@
 | 
			
		|||
#include "common/array.h"
 | 
			
		||||
#include "common/buf.h"
 | 
			
		||||
#include "common/font.h"
 | 
			
		||||
#include "common/macros.h"
 | 
			
		||||
#include "common/scaled-font-buffer.h"
 | 
			
		||||
#include "common/scaled-icon-buffer.h"
 | 
			
		||||
#include "common/scaled-rect-buffer.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -352,15 +353,18 @@ create_osd_scene(struct output *output, struct wl_array *views)
 | 
			
		|||
				* theme->osd_window_switcher_item_padding_x)
 | 
			
		||||
				* field->width / 100.0;
 | 
			
		||||
			struct wlr_scene_node *node = NULL;
 | 
			
		||||
			int height = -1;
 | 
			
		||||
 | 
			
		||||
			if (field->content == LAB_FIELD_ICON) {
 | 
			
		||||
				int icon_size = font_height(&rc.font_osd);
 | 
			
		||||
				int icon_size = MIN(field_width,
 | 
			
		||||
					theme->osd_window_switcher_item_icon_size);
 | 
			
		||||
				struct scaled_icon_buffer *icon_buffer =
 | 
			
		||||
					scaled_icon_buffer_create(item_root,
 | 
			
		||||
						server, icon_size, icon_size);
 | 
			
		||||
				scaled_icon_buffer_set_app_id(icon_buffer,
 | 
			
		||||
					view_get_string_prop(*view, "app_id"));
 | 
			
		||||
				node = &icon_buffer->scene_buffer->node;
 | 
			
		||||
				height = icon_size;
 | 
			
		||||
			} else {
 | 
			
		||||
				buf_clear(&buf);
 | 
			
		||||
				osd_field_get_content(field, &buf, *view);
 | 
			
		||||
| 
						 | 
				
			
			@ -370,11 +374,11 @@ create_osd_scene(struct output *output, struct wl_array *views)
 | 
			
		|||
				scaled_font_buffer_update(font_buffer, buf.data, field_width,
 | 
			
		||||
					&rc.font_osd, text_color, bg_color);
 | 
			
		||||
				node = &font_buffer->scene_buffer->node;
 | 
			
		||||
				height = font_height(&rc.font_osd);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			wlr_scene_node_set_position(node, x,
 | 
			
		||||
				y + theme->osd_window_switcher_item_padding_y
 | 
			
		||||
					+ theme->osd_window_switcher_item_active_border_width);
 | 
			
		||||
				y + (theme->osd_window_switcher_item_height - height) / 2);
 | 
			
		||||
			x += field_width + theme->osd_window_switcher_item_padding_x;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								src/theme.c
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								src/theme.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -542,6 +542,7 @@ theme_builtin(struct theme *theme, struct server *server)
 | 
			
		|||
	theme->osd_window_switcher_item_padding_x = 10;
 | 
			
		||||
	theme->osd_window_switcher_item_padding_y = 1;
 | 
			
		||||
	theme->osd_window_switcher_item_active_border_width = 2;
 | 
			
		||||
	theme->osd_window_switcher_item_icon_size = -1;
 | 
			
		||||
 | 
			
		||||
	/* inherit settings in post_processing() if not set elsewhere */
 | 
			
		||||
	theme->osd_window_switcher_preview_border_width = INT_MIN;
 | 
			
		||||
| 
						 | 
				
			
			@ -879,6 +880,11 @@ entry(struct theme *theme, const char *key, const char *value)
 | 
			
		|||
			get_int_if_positive(
 | 
			
		||||
				value, "osd.window-switcher.item.active.border.width");
 | 
			
		||||
	}
 | 
			
		||||
	if (match_glob(key, "osd.window-switcher.item.icon.size")) {
 | 
			
		||||
		theme->osd_window_switcher_item_icon_size =
 | 
			
		||||
			get_int_if_positive(
 | 
			
		||||
				value, "osd.window-switcher.item.icon.size");
 | 
			
		||||
	}
 | 
			
		||||
	if (match_glob(key, "osd.window-switcher.preview.border.width")) {
 | 
			
		||||
		theme->osd_window_switcher_preview_border_width =
 | 
			
		||||
			get_int_if_positive(
 | 
			
		||||
| 
						 | 
				
			
			@ -1380,7 +1386,13 @@ post_processing(struct theme *theme)
 | 
			
		|||
	theme->menu_header_height = font_height(&rc.font_menuheader)
 | 
			
		||||
		+ 2 * theme->menu_items_padding_y;
 | 
			
		||||
 | 
			
		||||
	theme->osd_window_switcher_item_height = font_height(&rc.font_osd)
 | 
			
		||||
	int osd_font_height = font_height(&rc.font_osd);
 | 
			
		||||
	if (theme->osd_window_switcher_item_icon_size <= 0) {
 | 
			
		||||
		theme->osd_window_switcher_item_icon_size = osd_font_height;
 | 
			
		||||
	}
 | 
			
		||||
	int osd_field_height =
 | 
			
		||||
		MAX(osd_font_height, theme->osd_window_switcher_item_icon_size);
 | 
			
		||||
	theme->osd_window_switcher_item_height = osd_field_height
 | 
			
		||||
		+ 2 * theme->osd_window_switcher_item_padding_y
 | 
			
		||||
		+ 2 * theme->osd_window_switcher_item_active_border_width;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue