|  |  |  | @ -310,6 +310,13 @@ damage_finish: | 
			
		
	
		
			
				
					|  |  |  |  | 	pixman_region32_fini(&damage); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | static void premultiply_alpha(float color[4], float opacity) { | 
			
		
	
		
			
				
					|  |  |  |  | 	color[3] *= opacity; | 
			
		
	
		
			
				
					|  |  |  |  | 	color[0] *= color[3]; | 
			
		
	
		
			
				
					|  |  |  |  | 	color[1] *= color[3]; | 
			
		
	
		
			
				
					|  |  |  |  | 	color[2] *= color[3]; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | /**
 | 
			
		
	
		
			
				
					|  |  |  |  |  * Render decorations for a view with "border normal". | 
			
		
	
		
			
				
					|  |  |  |  |  * | 
			
		
	
	
		
			
				
					|  |  |  | @ -328,7 +335,7 @@ static void render_container_simple_border_normal(struct sway_output *output, | 
			
		
	
		
			
				
					|  |  |  |  | 	if (view->border_left) { | 
			
		
	
		
			
				
					|  |  |  |  | 		// Child border - left edge
 | 
			
		
	
		
			
				
					|  |  |  |  | 		memcpy(&color, colors->child_border, sizeof(float) * 4); | 
			
		
	
		
			
				
					|  |  |  |  | 		color[3] *= con->alpha; | 
			
		
	
		
			
				
					|  |  |  |  | 		premultiply_alpha(color, con->alpha); | 
			
		
	
		
			
				
					|  |  |  |  | 		box.x = con->x; | 
			
		
	
		
			
				
					|  |  |  |  | 		box.y = con->y + 1; | 
			
		
	
		
			
				
					|  |  |  |  | 		box.width = view->border_thickness; | 
			
		
	
	
		
			
				
					|  |  |  | @ -346,7 +353,7 @@ static void render_container_simple_border_normal(struct sway_output *output, | 
			
		
	
		
			
				
					|  |  |  |  | 		} else { | 
			
		
	
		
			
				
					|  |  |  |  | 			memcpy(&color, colors->child_border, sizeof(float) * 4); | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		color[3] *= con->alpha; | 
			
		
	
		
			
				
					|  |  |  |  | 		premultiply_alpha(color, con->alpha); | 
			
		
	
		
			
				
					|  |  |  |  | 		box.x = con->x + con->width - view->border_thickness; | 
			
		
	
		
			
				
					|  |  |  |  | 		box.y = con->y + 1; | 
			
		
	
		
			
				
					|  |  |  |  | 		box.width = view->border_thickness; | 
			
		
	
	
		
			
				
					|  |  |  | @ -364,7 +371,7 @@ static void render_container_simple_border_normal(struct sway_output *output, | 
			
		
	
		
			
				
					|  |  |  |  | 		} else { | 
			
		
	
		
			
				
					|  |  |  |  | 			memcpy(&color, colors->child_border, sizeof(float) * 4); | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		color[3] *= con->alpha; | 
			
		
	
		
			
				
					|  |  |  |  | 		premultiply_alpha(color, con->alpha); | 
			
		
	
		
			
				
					|  |  |  |  | 		box.x = con->x; | 
			
		
	
		
			
				
					|  |  |  |  | 		box.y = con->y + con->height - view->border_thickness; | 
			
		
	
		
			
				
					|  |  |  |  | 		box.width = con->width; | 
			
		
	
	
		
			
				
					|  |  |  | @ -375,7 +382,7 @@ static void render_container_simple_border_normal(struct sway_output *output, | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	// Single pixel bar above title
 | 
			
		
	
		
			
				
					|  |  |  |  | 	memcpy(&color, colors->border, sizeof(float) * 4); | 
			
		
	
		
			
				
					|  |  |  |  | 	color[3] *= con->alpha; | 
			
		
	
		
			
				
					|  |  |  |  | 	premultiply_alpha(color, con->alpha); | 
			
		
	
		
			
				
					|  |  |  |  | 	box.x = con->x; | 
			
		
	
		
			
				
					|  |  |  |  | 	box.y = con->y; | 
			
		
	
		
			
				
					|  |  |  |  | 	box.width = con->width; | 
			
		
	
	
		
			
				
					|  |  |  | @ -390,7 +397,7 @@ static void render_container_simple_border_normal(struct sway_output *output, | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	// Single pixel bar below title
 | 
			
		
	
		
			
				
					|  |  |  |  | 	memcpy(&color, colors->border, sizeof(float) * 4); | 
			
		
	
		
			
				
					|  |  |  |  | 	color[3] *= con->alpha; | 
			
		
	
		
			
				
					|  |  |  |  | 	premultiply_alpha(color, con->alpha); | 
			
		
	
		
			
				
					|  |  |  |  | 	box.x = inner_x; | 
			
		
	
		
			
				
					|  |  |  |  | 	box.y = view->y - 1; | 
			
		
	
		
			
				
					|  |  |  |  | 	box.width = inner_width; | 
			
		
	
	
		
			
				
					|  |  |  | @ -441,7 +448,7 @@ static void render_container_simple_border_normal(struct sway_output *output, | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	// Title background - above the text
 | 
			
		
	
		
			
				
					|  |  |  |  | 	memcpy(&color, colors->background, sizeof(float) * 4); | 
			
		
	
		
			
				
					|  |  |  |  | 	color[3] *= con->alpha; | 
			
		
	
		
			
				
					|  |  |  |  | 	premultiply_alpha(color, con->alpha); | 
			
		
	
		
			
				
					|  |  |  |  | 	box.x = inner_x; | 
			
		
	
		
			
				
					|  |  |  |  | 	box.y = con->y + 1; | 
			
		
	
		
			
				
					|  |  |  |  | 	box.width = inner_width; | 
			
		
	
	
		
			
				
					|  |  |  | @ -481,7 +488,7 @@ static void render_container_simple_border_pixel(struct sway_output *output, | 
			
		
	
		
			
				
					|  |  |  |  | 	if (view->border_left) { | 
			
		
	
		
			
				
					|  |  |  |  | 		// Child border - left edge
 | 
			
		
	
		
			
				
					|  |  |  |  | 		memcpy(&color, colors->child_border, sizeof(float) * 4); | 
			
		
	
		
			
				
					|  |  |  |  | 		color[3] *= con->alpha; | 
			
		
	
		
			
				
					|  |  |  |  | 		premultiply_alpha(color, con->alpha); | 
			
		
	
		
			
				
					|  |  |  |  | 		box.x = con->x; | 
			
		
	
		
			
				
					|  |  |  |  | 		box.y = con->y + view->border_thickness * view->border_top; | 
			
		
	
		
			
				
					|  |  |  |  | 		box.width = view->border_thickness; | 
			
		
	
	
		
			
				
					|  |  |  | @ -499,7 +506,7 @@ static void render_container_simple_border_pixel(struct sway_output *output, | 
			
		
	
		
			
				
					|  |  |  |  | 		} else { | 
			
		
	
		
			
				
					|  |  |  |  | 			memcpy(&color, colors->child_border, sizeof(float) * 4); | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		color[3] *= con->alpha; | 
			
		
	
		
			
				
					|  |  |  |  | 		premultiply_alpha(color, con->alpha); | 
			
		
	
		
			
				
					|  |  |  |  | 		box.x = con->x + con->width - view->border_thickness; | 
			
		
	
		
			
				
					|  |  |  |  | 		box.y = con->y + view->border_thickness * view->border_top; | 
			
		
	
		
			
				
					|  |  |  |  | 		box.width = view->border_thickness; | 
			
		
	
	
		
			
				
					|  |  |  | @ -512,7 +519,7 @@ static void render_container_simple_border_pixel(struct sway_output *output, | 
			
		
	
		
			
				
					|  |  |  |  | 	if (view->border_top) { | 
			
		
	
		
			
				
					|  |  |  |  | 		// Child border - top edge
 | 
			
		
	
		
			
				
					|  |  |  |  | 		memcpy(&color, colors->child_border, sizeof(float) * 4); | 
			
		
	
		
			
				
					|  |  |  |  | 		color[3] *= con->alpha; | 
			
		
	
		
			
				
					|  |  |  |  | 		premultiply_alpha(color, con->alpha); | 
			
		
	
		
			
				
					|  |  |  |  | 		box.x = con->x; | 
			
		
	
		
			
				
					|  |  |  |  | 		box.y = con->y; | 
			
		
	
		
			
				
					|  |  |  |  | 		box.width = con->width; | 
			
		
	
	
		
			
				
					|  |  |  | @ -529,7 +536,7 @@ static void render_container_simple_border_pixel(struct sway_output *output, | 
			
		
	
		
			
				
					|  |  |  |  | 		} else { | 
			
		
	
		
			
				
					|  |  |  |  | 			memcpy(&color, colors->child_border, sizeof(float) * 4); | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		color[3] *= con->alpha; | 
			
		
	
		
			
				
					|  |  |  |  | 		premultiply_alpha(color, con->alpha); | 
			
		
	
		
			
				
					|  |  |  |  | 		box.x = con->x; | 
			
		
	
		
			
				
					|  |  |  |  | 		box.y = con->y + con->height - view->border_thickness; | 
			
		
	
		
			
				
					|  |  |  |  | 		box.width = con->width; | 
			
		
	
	
		
			
				
					|  |  |  | 
 |