mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	ssd: move top border above titlebar
This commit is contained in:
		
							parent
							
								
									e4f1f9a975
								
							
						
					
					
						commit
						e086f6f5e0
					
				
					 6 changed files with 37 additions and 34 deletions
				
			
		| 
						 | 
					@ -18,7 +18,7 @@ ssd_thickness(struct view *view)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct theme *theme = view->server->theme;
 | 
						struct theme *theme = view->server->theme;
 | 
				
			||||||
	struct border border = {
 | 
						struct border border = {
 | 
				
			||||||
		.top = theme->title_height,
 | 
							.top = theme->title_height + theme->border_width,
 | 
				
			||||||
		.bottom = theme->border_width,
 | 
							.bottom = theme->border_width,
 | 
				
			||||||
		.left = theme->border_width,
 | 
							.left = theme->border_width,
 | 
				
			||||||
		.right = theme->border_width,
 | 
							.right = theme->border_width,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,11 +38,11 @@ ssd_border_create(struct view *view)
 | 
				
			||||||
			theme->border_width, height,
 | 
								theme->border_width, height,
 | 
				
			||||||
			theme->border_width + width, 0, color);
 | 
								theme->border_width + width, 0, color);
 | 
				
			||||||
		add_scene_rect(&subtree->parts, LAB_SSD_PART_BOTTOM, parent,
 | 
							add_scene_rect(&subtree->parts, LAB_SSD_PART_BOTTOM, parent,
 | 
				
			||||||
			full_width, theme->border_width,
 | 
								full_width, theme->border_width, 0, height, color);
 | 
				
			||||||
			0, height, color);
 | 
					 | 
				
			||||||
		add_scene_rect(&subtree->parts, LAB_SSD_PART_TOP, parent,
 | 
							add_scene_rect(&subtree->parts, LAB_SSD_PART_TOP, parent,
 | 
				
			||||||
			full_width - 2 * BUTTON_WIDTH, theme->border_width,
 | 
								width - 2 * BUTTON_WIDTH, theme->border_width,
 | 
				
			||||||
			BUTTON_WIDTH, -theme->title_height, color);
 | 
								theme->border_width + BUTTON_WIDTH,
 | 
				
			||||||
 | 
								-(theme->title_height + theme->border_width), color);
 | 
				
			||||||
	} FOR_EACH_END
 | 
						} FOR_EACH_END
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -76,10 +76,7 @@ ssd_border_update(struct view *view)
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
			case LAB_SSD_PART_TOP:
 | 
								case LAB_SSD_PART_TOP:
 | 
				
			||||||
				wlr_scene_rect_set_size(rect,
 | 
									wlr_scene_rect_set_size(rect,
 | 
				
			||||||
					full_width - 2 * BUTTON_WIDTH,
 | 
										width - 2 * BUTTON_WIDTH, theme->border_width);
 | 
				
			||||||
					theme->border_width);
 | 
					 | 
				
			||||||
				wlr_scene_node_set_position(part->node,
 | 
					 | 
				
			||||||
					BUTTON_WIDTH, -theme->title_height);
 | 
					 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
			default:
 | 
								default:
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,8 +13,8 @@ ssd_extents_create(struct view *view)
 | 
				
			||||||
	struct wl_list *part_list = &view->ssd.extents.parts;
 | 
						struct wl_list *part_list = &view->ssd.extents.parts;
 | 
				
			||||||
	int width = view->w;
 | 
						int width = view->w;
 | 
				
			||||||
	int height = view->h;
 | 
						int height = view->h;
 | 
				
			||||||
	int full_height = height + theme->border_width + theme->title_height;
 | 
						int full_height = height + theme->border_width * 2 + theme->title_height;
 | 
				
			||||||
	int full_width = width + 2 * theme->border_width;
 | 
						int full_width = width + theme->border_width * 2;
 | 
				
			||||||
	int extended_area = EXTENDED_AREA;
 | 
						int extended_area = EXTENDED_AREA;
 | 
				
			||||||
	int corner_size = extended_area + theme->border_width + BUTTON_WIDTH / 2;
 | 
						int corner_size = extended_area + theme->border_width + BUTTON_WIDTH / 2;
 | 
				
			||||||
	int side_width = full_width + extended_area * 2 - corner_size * 2;
 | 
						int side_width = full_width + extended_area * 2 - corner_size * 2;
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ ssd_extents_create(struct view *view)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	wl_list_init(&view->ssd.extents.parts);
 | 
						wl_list_init(&view->ssd.extents.parts);
 | 
				
			||||||
	wlr_scene_node_set_position(parent, -(theme->border_width + extended_area),
 | 
						wlr_scene_node_set_position(parent, -(theme->border_width + extended_area),
 | 
				
			||||||
		-(theme->title_height + extended_area));
 | 
							-(theme->title_height + theme->border_width + extended_area));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Top */
 | 
						/* Top */
 | 
				
			||||||
	add_scene_rect(part_list, LAB_SSD_PART_CORNER_TOP_LEFT, parent,
 | 
						add_scene_rect(part_list, LAB_SSD_PART_CORNER_TOP_LEFT, parent,
 | 
				
			||||||
| 
						 | 
					@ -54,7 +54,7 @@ ssd_extents_create(struct view *view)
 | 
				
			||||||
		0, corner_size + side_height, invisible);
 | 
							0, corner_size + side_height, invisible);
 | 
				
			||||||
	add_scene_rect(part_list, LAB_SSD_PART_BOTTOM, parent,
 | 
						add_scene_rect(part_list, LAB_SSD_PART_BOTTOM, parent,
 | 
				
			||||||
		side_width, extended_area,
 | 
							side_width, extended_area,
 | 
				
			||||||
		extended_area, extended_area + full_height, invisible);
 | 
							corner_size, extended_area + full_height, invisible);
 | 
				
			||||||
	add_scene_rect(part_list, LAB_SSD_PART_CORNER_BOTTOM_RIGHT, parent,
 | 
						add_scene_rect(part_list, LAB_SSD_PART_CORNER_BOTTOM_RIGHT, parent,
 | 
				
			||||||
		corner_size, corner_size,
 | 
							corner_size, corner_size,
 | 
				
			||||||
		corner_size + side_width, corner_size + side_height, invisible);
 | 
							corner_size + side_width, corner_size + side_height, invisible);
 | 
				
			||||||
| 
						 | 
					@ -75,7 +75,7 @@ ssd_extents_update(struct view *view)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int width = view->w;
 | 
						int width = view->w;
 | 
				
			||||||
	int height = view->h;
 | 
						int height = view->h;
 | 
				
			||||||
	int full_height = height + theme->border_width + theme->title_height;
 | 
						int full_height = height + theme->border_width * 2 + theme->title_height;
 | 
				
			||||||
	int full_width = width + 2 * theme->border_width;
 | 
						int full_width = width + 2 * theme->border_width;
 | 
				
			||||||
	int extended_area = EXTENDED_AREA;
 | 
						int extended_area = EXTENDED_AREA;
 | 
				
			||||||
	int corner_size = extended_area + theme->border_width + BUTTON_WIDTH / 2;
 | 
						int corner_size = extended_area + theme->border_width + BUTTON_WIDTH / 2;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -52,14 +52,22 @@ finish_scene_button(struct wl_list *part_list, enum ssd_part_type type,
 | 
				
			||||||
	float hover_bg[4] = {0.15f, 0.15f, 0.15f, 0.3f};
 | 
						float hover_bg[4] = {0.15f, 0.15f, 0.15f, 0.3f};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Icon */
 | 
						/* Icon */
 | 
				
			||||||
 | 
						int offset_y = 0;
 | 
				
			||||||
 | 
						int offset_x = 0;
 | 
				
			||||||
 | 
						if (type == LAB_SSD_BUTTON_WINDOW_MENU) {
 | 
				
			||||||
 | 
							offset_y = rc.theme->border_width;
 | 
				
			||||||
 | 
							offset_x = rc.theme->border_width;
 | 
				
			||||||
 | 
						} else if (type == LAB_SSD_BUTTON_CLOSE) {
 | 
				
			||||||
 | 
							offset_y = rc.theme->border_width;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	add_scene_buffer(part_list, type, parent, icon_buffer,
 | 
						add_scene_buffer(part_list, type, parent, icon_buffer,
 | 
				
			||||||
		(BUTTON_WIDTH - icon_buffer->width) / 2,
 | 
							offset_x + (BUTTON_WIDTH - icon_buffer->width) / 2,
 | 
				
			||||||
		(rc.theme->title_height - icon_buffer->height) / 2);
 | 
							offset_y + (rc.theme->title_height - icon_buffer->height) / 2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Hover overlay */
 | 
						/* Hover overlay */
 | 
				
			||||||
	struct ssd_part *hover_part;
 | 
						struct ssd_part *hover_part;
 | 
				
			||||||
	hover_part = add_scene_rect(part_list, type, parent,
 | 
						hover_part = add_scene_rect(part_list, type, parent,
 | 
				
			||||||
		BUTTON_WIDTH, rc.theme->title_height, 0, 0, hover_bg);
 | 
							BUTTON_WIDTH, rc.theme->title_height, offset_x, offset_y, hover_bg);
 | 
				
			||||||
	wlr_scene_node_set_enabled(hover_part->node, false);
 | 
						wlr_scene_node_set_enabled(hover_part->node, false);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,8 +77,9 @@ add_scene_button_corner(struct wl_list *part_list, enum ssd_part_type type,
 | 
				
			||||||
	struct wlr_buffer *icon_buffer, int x)
 | 
						struct wlr_buffer *icon_buffer, int x)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct ssd_part *part;
 | 
						struct ssd_part *part;
 | 
				
			||||||
	/* Background */
 | 
						/* Background, y adjusted for border_width */
 | 
				
			||||||
	part = add_scene_buffer(part_list, type, parent, corner_buffer, x, 0);
 | 
						part = add_scene_buffer(part_list, type, parent, corner_buffer,
 | 
				
			||||||
 | 
							x, -rc.theme->border_width);
 | 
				
			||||||
	finish_scene_button(part_list, type, part->node, icon_buffer);
 | 
						finish_scene_button(part_list, type, part->node, icon_buffer);
 | 
				
			||||||
	return part;
 | 
						return part;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,6 @@ ssd_titlebar_create(struct view *view)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct theme *theme = view->server->theme;
 | 
						struct theme *theme = view->server->theme;
 | 
				
			||||||
	int width = view->w;
 | 
						int width = view->w;
 | 
				
			||||||
	int full_width = width + 2 * theme->border_width;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	float *color;
 | 
						float *color;
 | 
				
			||||||
	struct wlr_scene_node *parent;
 | 
						struct wlr_scene_node *parent;
 | 
				
			||||||
| 
						 | 
					@ -29,8 +28,7 @@ ssd_titlebar_create(struct view *view)
 | 
				
			||||||
	FOR_EACH_STATE(view, subtree) {
 | 
						FOR_EACH_STATE(view, subtree) {
 | 
				
			||||||
		subtree->tree = wlr_scene_tree_create(&view->ssd.tree->node);
 | 
							subtree->tree = wlr_scene_tree_create(&view->ssd.tree->node);
 | 
				
			||||||
		parent = &subtree->tree->node;
 | 
							parent = &subtree->tree->node;
 | 
				
			||||||
		wlr_scene_node_set_position(parent,
 | 
							wlr_scene_node_set_position(parent, 0, -theme->title_height);
 | 
				
			||||||
			-theme->border_width, -theme->title_height);
 | 
					 | 
				
			||||||
		if (subtree == &view->ssd.titlebar.active) {
 | 
							if (subtree == &view->ssd.titlebar.active) {
 | 
				
			||||||
			color = theme->window_active_title_bg_color;
 | 
								color = theme->window_active_title_bg_color;
 | 
				
			||||||
			corner_top_left = &theme->corner_top_left_active_normal->base;
 | 
								corner_top_left = &theme->corner_top_left_active_normal->base;
 | 
				
			||||||
| 
						 | 
					@ -45,21 +43,21 @@ ssd_titlebar_create(struct view *view)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Title */
 | 
							/* Title */
 | 
				
			||||||
		add_scene_rect(&subtree->parts, LAB_SSD_PART_TITLEBAR, parent,
 | 
							add_scene_rect(&subtree->parts, LAB_SSD_PART_TITLEBAR, parent,
 | 
				
			||||||
			full_width - BUTTON_WIDTH * BUTTON_COUNT, theme->title_height,
 | 
								width - BUTTON_WIDTH * BUTTON_COUNT, theme->title_height,
 | 
				
			||||||
			BUTTON_WIDTH, 0, color);
 | 
								BUTTON_WIDTH, 0, color);
 | 
				
			||||||
		/* Buttons */
 | 
							/* Buttons */
 | 
				
			||||||
		add_scene_button_corner(&subtree->parts, LAB_SSD_BUTTON_WINDOW_MENU,
 | 
							add_scene_button_corner(&subtree->parts, LAB_SSD_BUTTON_WINDOW_MENU,
 | 
				
			||||||
			parent,	corner_top_left,
 | 
								parent,	corner_top_left,
 | 
				
			||||||
			&theme->xbm_menu_active_unpressed->base, 0);
 | 
								&theme->xbm_menu_active_unpressed->base, -theme->border_width);
 | 
				
			||||||
		add_scene_button(&subtree->parts, LAB_SSD_BUTTON_ICONIFY, parent,
 | 
							add_scene_button(&subtree->parts, LAB_SSD_BUTTON_ICONIFY, parent,
 | 
				
			||||||
			color, &theme->xbm_iconify_active_unpressed->base,
 | 
								color, &theme->xbm_iconify_active_unpressed->base,
 | 
				
			||||||
			full_width - BUTTON_WIDTH * 3);
 | 
								width - BUTTON_WIDTH * 3);
 | 
				
			||||||
		add_scene_button(&subtree->parts, LAB_SSD_BUTTON_MAXIMIZE, parent,
 | 
							add_scene_button(&subtree->parts, LAB_SSD_BUTTON_MAXIMIZE, parent,
 | 
				
			||||||
			color, &theme->xbm_maximize_active_unpressed->base,
 | 
								color, &theme->xbm_maximize_active_unpressed->base,
 | 
				
			||||||
			full_width - BUTTON_WIDTH * 2);
 | 
								width - BUTTON_WIDTH * 2);
 | 
				
			||||||
		add_scene_button_corner(&subtree->parts, LAB_SSD_BUTTON_CLOSE, parent,
 | 
							add_scene_button_corner(&subtree->parts, LAB_SSD_BUTTON_CLOSE, parent,
 | 
				
			||||||
			corner_top_right, &theme->xbm_close_active_unpressed->base,
 | 
								corner_top_right, &theme->xbm_close_active_unpressed->base,
 | 
				
			||||||
			full_width - BUTTON_WIDTH * 1);
 | 
								width - BUTTON_WIDTH * 1);
 | 
				
			||||||
	} FOR_EACH_END
 | 
						} FOR_EACH_END
 | 
				
			||||||
	ssd_update_title(view);
 | 
						ssd_update_title(view);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -78,7 +76,6 @@ ssd_titlebar_update(struct view *view)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	struct theme *theme = view->server->theme;
 | 
						struct theme *theme = view->server->theme;
 | 
				
			||||||
	int full_width = width + 2 * theme->border_width;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct ssd_part *part;
 | 
						struct ssd_part *part;
 | 
				
			||||||
	struct ssd_sub_tree *subtree;
 | 
						struct ssd_sub_tree *subtree;
 | 
				
			||||||
| 
						 | 
					@ -87,25 +84,25 @@ ssd_titlebar_update(struct view *view)
 | 
				
			||||||
			switch (part->type) {
 | 
								switch (part->type) {
 | 
				
			||||||
			case LAB_SSD_PART_TITLEBAR:
 | 
								case LAB_SSD_PART_TITLEBAR:
 | 
				
			||||||
				wlr_scene_rect_set_size(lab_wlr_scene_get_rect(part->node),
 | 
									wlr_scene_rect_set_size(lab_wlr_scene_get_rect(part->node),
 | 
				
			||||||
					full_width - BUTTON_WIDTH * BUTTON_COUNT,
 | 
										width - BUTTON_WIDTH * BUTTON_COUNT,
 | 
				
			||||||
					theme->title_height);
 | 
										theme->title_height);
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
			case LAB_SSD_BUTTON_ICONIFY:
 | 
								case LAB_SSD_BUTTON_ICONIFY:
 | 
				
			||||||
				if (is_direct_child(part->node, subtree)) {
 | 
									if (is_direct_child(part->node, subtree)) {
 | 
				
			||||||
					wlr_scene_node_set_position(part->node,
 | 
										wlr_scene_node_set_position(part->node,
 | 
				
			||||||
						full_width - BUTTON_WIDTH * 3, 0);
 | 
											width - BUTTON_WIDTH * 3, 0);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
			case  LAB_SSD_BUTTON_MAXIMIZE:
 | 
								case  LAB_SSD_BUTTON_MAXIMIZE:
 | 
				
			||||||
				if (is_direct_child(part->node, subtree)) {
 | 
									if (is_direct_child(part->node, subtree)) {
 | 
				
			||||||
					wlr_scene_node_set_position(part->node,
 | 
										wlr_scene_node_set_position(part->node,
 | 
				
			||||||
						full_width - BUTTON_WIDTH * 2, 0);
 | 
											width - BUTTON_WIDTH * 2, 0);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
			case LAB_SSD_BUTTON_CLOSE:
 | 
								case LAB_SSD_BUTTON_CLOSE:
 | 
				
			||||||
				if (is_direct_child(part->node, subtree)) {
 | 
									if (is_direct_child(part->node, subtree)) {
 | 
				
			||||||
					wlr_scene_node_set_position(part->node,
 | 
										wlr_scene_node_set_position(part->node,
 | 
				
			||||||
						full_width - BUTTON_WIDTH * 1, 0);
 | 
											width - BUTTON_WIDTH * 1, -theme->border_width);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
			default:
 | 
								default:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -421,8 +421,8 @@ create_corners(struct theme *theme)
 | 
				
			||||||
	struct wlr_box box = {
 | 
						struct wlr_box box = {
 | 
				
			||||||
		.x = 0,
 | 
							.x = 0,
 | 
				
			||||||
		.y = 0,
 | 
							.y = 0,
 | 
				
			||||||
		.width = BUTTON_WIDTH,
 | 
							.width = BUTTON_WIDTH + theme->border_width,
 | 
				
			||||||
		.height = theme->title_height,
 | 
							.height = theme->title_height + theme->border_width,
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct rounded_corner_ctx ctx = {
 | 
						struct rounded_corner_ctx ctx = {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue