mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	theme: allow to set window button size (#1965)
This commit introduces new option "window.button.width". Despite the name it currently affects both width and height.
This commit is contained in:
		
							parent
							
								
									46ec513630
								
							
						
					
					
						commit
						e4afa10fe4
					
				
					 14 changed files with 59 additions and 33 deletions
				
			
		| 
						 | 
				
			
			@ -90,21 +90,21 @@ ssd_titlebar_create(struct ssd *ssd)
 | 
			
		|||
 | 
			
		||||
		/* Title */
 | 
			
		||||
		add_scene_rect(&subtree->parts, LAB_SSD_PART_TITLEBAR, parent,
 | 
			
		||||
			width - SSD_BUTTON_WIDTH * SSD_BUTTON_COUNT, theme->title_height,
 | 
			
		||||
			SSD_BUTTON_WIDTH, 0, color);
 | 
			
		||||
			width - theme->window_button_width * SSD_BUTTON_COUNT,
 | 
			
		||||
			theme->title_height, theme->window_button_width, 0, color);
 | 
			
		||||
		/* Buttons */
 | 
			
		||||
		add_scene_button_corner(&subtree->parts,
 | 
			
		||||
			LAB_SSD_BUTTON_WINDOW_MENU, LAB_SSD_PART_CORNER_TOP_LEFT, parent,
 | 
			
		||||
			corner_top_left, menu_button_unpressed, menu_button_hover, 0, view);
 | 
			
		||||
		add_scene_button(&subtree->parts, LAB_SSD_BUTTON_ICONIFY, parent,
 | 
			
		||||
			color, iconify_button_unpressed, iconify_button_hover,
 | 
			
		||||
			width - SSD_BUTTON_WIDTH * 3, view);
 | 
			
		||||
			width - theme->window_button_width * 3, view);
 | 
			
		||||
 | 
			
		||||
		/* Maximize button has an alternate state when maximized */
 | 
			
		||||
		struct ssd_part *btn_max_root = add_scene_button(
 | 
			
		||||
			&subtree->parts, LAB_SSD_BUTTON_MAXIMIZE, parent,
 | 
			
		||||
			color, maximize_button_unpressed, maximize_button_hover,
 | 
			
		||||
			width - SSD_BUTTON_WIDTH * 2, view);
 | 
			
		||||
			width - theme->window_button_width * 2, view);
 | 
			
		||||
		struct ssd_button *btn_max = node_ssd_button_from_node(btn_max_root->node);
 | 
			
		||||
		add_toggled_icon(btn_max, &subtree->parts, LAB_SSD_BUTTON_MAXIMIZE,
 | 
			
		||||
			restore_button_unpressed, restore_button_hover);
 | 
			
		||||
| 
						 | 
				
			
			@ -112,7 +112,7 @@ ssd_titlebar_create(struct ssd *ssd)
 | 
			
		|||
		add_scene_button_corner(&subtree->parts,
 | 
			
		||||
			LAB_SSD_BUTTON_CLOSE, LAB_SSD_PART_CORNER_TOP_RIGHT, parent,
 | 
			
		||||
			corner_top_right, close_button_unpressed, close_button_hover,
 | 
			
		||||
			width - SSD_BUTTON_WIDTH * 1, view);
 | 
			
		||||
			width - theme->window_button_width * 1, view);
 | 
			
		||||
	} FOR_EACH_END
 | 
			
		||||
 | 
			
		||||
	ssd_update_title(ssd);
 | 
			
		||||
| 
						 | 
				
			
			@ -218,25 +218,25 @@ ssd_titlebar_update(struct ssd *ssd)
 | 
			
		|||
			case LAB_SSD_PART_TITLEBAR:
 | 
			
		||||
				wlr_scene_rect_set_size(
 | 
			
		||||
					wlr_scene_rect_from_node(part->node),
 | 
			
		||||
					width - SSD_BUTTON_WIDTH * SSD_BUTTON_COUNT,
 | 
			
		||||
					width - theme->window_button_width * SSD_BUTTON_COUNT,
 | 
			
		||||
					theme->title_height);
 | 
			
		||||
				continue;
 | 
			
		||||
			case LAB_SSD_BUTTON_ICONIFY:
 | 
			
		||||
				if (is_direct_child(part->node, subtree)) {
 | 
			
		||||
					wlr_scene_node_set_position(part->node,
 | 
			
		||||
						width - SSD_BUTTON_WIDTH * 3, 0);
 | 
			
		||||
						width - theme->window_button_width * 3, 0);
 | 
			
		||||
				}
 | 
			
		||||
				continue;
 | 
			
		||||
			case LAB_SSD_BUTTON_MAXIMIZE:
 | 
			
		||||
				if (is_direct_child(part->node, subtree)) {
 | 
			
		||||
					wlr_scene_node_set_position(part->node,
 | 
			
		||||
						width - SSD_BUTTON_WIDTH * 2, 0);
 | 
			
		||||
						width - theme->window_button_width * 2, 0);
 | 
			
		||||
				}
 | 
			
		||||
				continue;
 | 
			
		||||
			case LAB_SSD_PART_CORNER_TOP_RIGHT:
 | 
			
		||||
				if (is_direct_child(part->node, subtree)) {
 | 
			
		||||
					wlr_scene_node_set_position(part->node,
 | 
			
		||||
						width - SSD_BUTTON_WIDTH * 1, 0);
 | 
			
		||||
						width - theme->window_button_width * 1, 0);
 | 
			
		||||
				}
 | 
			
		||||
				continue;
 | 
			
		||||
			default:
 | 
			
		||||
| 
						 | 
				
			
			@ -288,7 +288,7 @@ ssd_update_title_positions(struct ssd *ssd)
 | 
			
		|||
	struct view *view = ssd->view;
 | 
			
		||||
	struct theme *theme = view->server->theme;
 | 
			
		||||
	int width = view->current.width;
 | 
			
		||||
	int title_bg_width = width - SSD_BUTTON_WIDTH * SSD_BUTTON_COUNT;
 | 
			
		||||
	int title_bg_width = width - theme->window_button_width * SSD_BUTTON_COUNT;
 | 
			
		||||
 | 
			
		||||
	int x, y;
 | 
			
		||||
	int buffer_height, buffer_width;
 | 
			
		||||
| 
						 | 
				
			
			@ -304,7 +304,7 @@ ssd_update_title_positions(struct ssd *ssd)
 | 
			
		|||
 | 
			
		||||
		buffer_width = part->buffer ? part->buffer->width : 0;
 | 
			
		||||
		buffer_height = part->buffer ? part->buffer->height : 0;
 | 
			
		||||
		x = SSD_BUTTON_WIDTH;
 | 
			
		||||
		x = theme->window_button_width;
 | 
			
		||||
		y = (theme->title_height - buffer_height) / 2;
 | 
			
		||||
 | 
			
		||||
		if (title_bg_width <= 0) {
 | 
			
		||||
| 
						 | 
				
			
			@ -314,7 +314,7 @@ ssd_update_title_positions(struct ssd *ssd)
 | 
			
		|||
		wlr_scene_node_set_enabled(part->node, true);
 | 
			
		||||
 | 
			
		||||
		if (theme->window_label_text_justify == LAB_JUSTIFY_CENTER) {
 | 
			
		||||
			if (buffer_width + SSD_BUTTON_WIDTH * 2 <= title_bg_width) {
 | 
			
		||||
			if (buffer_width + theme->window_button_width * 2 <= title_bg_width) {
 | 
			
		||||
				/* Center based on the full width */
 | 
			
		||||
				x = (width - buffer_width) / 2;
 | 
			
		||||
			} else {
 | 
			
		||||
| 
						 | 
				
			
			@ -358,7 +358,7 @@ ssd_update_title(struct ssd *ssd)
 | 
			
		|||
	struct ssd_sub_tree *subtree;
 | 
			
		||||
	struct ssd_state_title_width *dstate;
 | 
			
		||||
	int title_bg_width = view->current.width
 | 
			
		||||
		- SSD_BUTTON_WIDTH * SSD_BUTTON_COUNT;
 | 
			
		||||
		- theme->window_button_width * SSD_BUTTON_COUNT;
 | 
			
		||||
 | 
			
		||||
	FOR_EACH_STATE(ssd, subtree) {
 | 
			
		||||
		if (subtree == &ssd->titlebar.active) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue