refactor draw_win
move filling of notificaiton buffer into own function and other minor cleanup
This commit is contained in:
		
							parent
							
								
									9eda03513e
								
							
						
					
					
						commit
						ca8b61d8ab
					
				
							
								
								
									
										145
									
								
								dunst.c
									
									
									
									
									
								
							
							
						
						
									
										145
									
								
								dunst.c
									
									
									
									
									
								
							| @ -379,6 +379,57 @@ int next_split(char *source, int max_width) { | ||||
|         return -1; | ||||
| } | ||||
| 
 | ||||
| void fill_notification_buffer(notification * n, notification_buffer * buf) | ||||
| { | ||||
|         memset(buf->txt, '\0', BUFSIZ); | ||||
|         buf->n = n; | ||||
| 
 | ||||
|         char *end = buf->txt; | ||||
|         int size = BUFSIZ; | ||||
| 
 | ||||
|         /* print duplication count */ | ||||
|         if (n->dup_count > 0) { | ||||
|                 size -= snprintf(end, size, "(%d)", n->dup_count); | ||||
|         } | ||||
|         if (size <= 0) | ||||
|                 return; | ||||
| 
 | ||||
|         end = buf->txt + strlen(buf->txt); | ||||
| 
 | ||||
|         /* print message */ | ||||
|         size -= snprintf(end, size, " %s", n->msg); | ||||
|         if (size <= 0) | ||||
|                 return; | ||||
| 
 | ||||
|         end = buf->txt + strlen(buf->txt); | ||||
| 
 | ||||
|         /* print age */ | ||||
|         time_t t_delta; | ||||
|         int hours, minutes, seconds; | ||||
| 
 | ||||
|         t_delta = now - n->timestamp; | ||||
| 
 | ||||
|         if (show_age_threshold >= 0 && t_delta >= show_age_threshold) { | ||||
|                 hours = t_delta / 3600; | ||||
|                 minutes = t_delta / 60 % 60; | ||||
|                 seconds = t_delta % 60; | ||||
| 
 | ||||
|                 if (hours > 0) { | ||||
|                         size -= | ||||
|                             snprintf(end, size, " (%dh %dm %ds old)", | ||||
|                                      hours, minutes, seconds); | ||||
|                 } else if (minutes > 0) { | ||||
|                         size -= snprintf(end, size, " (%dm %ds old)", | ||||
|                                          minutes, seconds); | ||||
|                 } else { | ||||
|                         size -= | ||||
|                             snprintf(end, size, " (%ds old)", seconds); | ||||
|                 } | ||||
|         } | ||||
|         if (size <= 0) | ||||
|                 return; | ||||
| } | ||||
| 
 | ||||
| void draw_win(void) | ||||
| { | ||||
|         int width, x, y, height; | ||||
| @ -409,59 +460,15 @@ void draw_win(void) | ||||
|         l_node *iter; | ||||
|         int i; | ||||
|         for (i = 0, iter = displayed_notifications->head; i < height; i++) { | ||||
|                 memset(n_buf[i].txt, '\0', BUFSIZ); | ||||
|                 n_buf[i].x_offset = 0; | ||||
|                 if (iter) { | ||||
|                         n_buf[i].n = (notification *) iter->data; | ||||
|                         if (n_buf[i].n->dup_count > 0) { | ||||
|                                 snprintf(n_buf[i].txt, BUFSIZ, "(%d) %s", | ||||
|                                          n_buf[i].n->dup_count, | ||||
|                                          n_buf[i].n->msg); | ||||
|                         } else { | ||||
|                                 strncpy(n_buf[i].txt, n_buf[i].n->msg, BUFSIZ); | ||||
|                         } | ||||
|                         notification *n = (notification *) iter->data; | ||||
|                         fill_notification_buffer(n, &n_buf[i]); | ||||
|                         iter = iter->next; | ||||
|                 } else { | ||||
|                         n_buf[i].n = NULL; | ||||
|                 } | ||||
|         } | ||||
| 
 | ||||
|         /* add message age to text */ | ||||
|         if (show_age_threshold >= 0) { | ||||
|                 for (i = 0; i < height; i++) { | ||||
| 
 | ||||
|                         time_t t_delta; | ||||
|                         int hours, minutes, seconds; | ||||
|                         char *end; | ||||
| 
 | ||||
|                         if (strlen(n_buf[i].txt) < 1) | ||||
|                                 continue; | ||||
| 
 | ||||
|                         t_delta = now - n_buf[i].n->timestamp; | ||||
| 
 | ||||
|                         if (t_delta < show_age_threshold) | ||||
|                                 continue; | ||||
| 
 | ||||
|                         hours = t_delta / 3600; | ||||
|                         minutes = t_delta / 60 % 60; | ||||
|                         seconds = t_delta % 60; | ||||
| 
 | ||||
|                         for (end = n_buf[i].txt; *end != '\0'; end++) ; | ||||
|                         if (hours > 0) { | ||||
|                                 snprintf(end, BUFSIZ - strlen(n_buf[i].txt), | ||||
|                                          " (%dh %dm %ds old)", | ||||
|                                          hours, minutes, seconds); | ||||
|                         } else if (minutes > 0) { | ||||
|                                 snprintf(end, BUFSIZ - strlen(n_buf[i].txt), | ||||
|                                          " (%dm %ds old)", minutes, seconds); | ||||
|                         } else { | ||||
|                                 snprintf(end, BUFSIZ - strlen(n_buf[i].txt), | ||||
|                                          " (%ds old)", seconds); | ||||
|                         } | ||||
| 
 | ||||
|                 } | ||||
|         } | ||||
| 
 | ||||
|         /* add "(x more)" */ | ||||
|         if (indicate_hidden && geometry.h != 1 | ||||
|             && !l_is_empty(notification_queue)) { | ||||
| @ -496,21 +503,6 @@ void draw_win(void) | ||||
|                 width = scr.dim.w; | ||||
|         } | ||||
| 
 | ||||
|         /* resize window and draw background */ | ||||
|         if (width == 0) { | ||||
|                 printf("Warning: width == 0\n"); | ||||
|                 goto draw_win_cleanup; | ||||
|         } | ||||
| 
 | ||||
|         if (height == 0) { | ||||
|                 printf("Warning: height == 0\n"); | ||||
|                 goto draw_win_cleanup; | ||||
|         } | ||||
| 
 | ||||
|         if (font_h == 0) { | ||||
|                 printf("Warning: font_h == 0\n"); | ||||
|                 goto draw_win_cleanup; | ||||
|         } | ||||
| 
 | ||||
|         /* calculate dc_height */ | ||||
|         if (word_wrap) { | ||||
| @ -532,6 +524,21 @@ void draw_win(void) | ||||
|                 dc_height = height; | ||||
|         } | ||||
| 
 | ||||
|         /* */ | ||||
|         if (width <= 0) { | ||||
|                 printf("Warning: width == 0\n"); | ||||
|                 goto draw_win_cleanup; | ||||
|         } | ||||
| 
 | ||||
|         if (dc_height <= 0) { | ||||
|                 printf("Warning: dc_height == 0\n"); | ||||
|                 goto draw_win_cleanup; | ||||
|         } | ||||
| 
 | ||||
|         if (font_h <= 0) { | ||||
|                 printf("Warning: font_h == 0\n"); | ||||
|                 goto draw_win_cleanup; | ||||
|         } | ||||
|         resizedc(dc, width, dc_height * font_h); | ||||
| 
 | ||||
|         /* draw buffers */ | ||||
| @ -557,14 +564,17 @@ void draw_win(void) | ||||
|                                 } | ||||
| 
 | ||||
|                                 dc->x = 0; | ||||
|                                 drawrect(dc, 0, 0, width, font_h, True, n->colors->BG); | ||||
|                                 drawrect(dc, 0, 0, width, font_h, True, | ||||
|                                          n->colors->BG); | ||||
| 
 | ||||
|                                 /* calculate offset */ | ||||
|                                if (align == right) { | ||||
|                                        dc->x = width - textnw(dc, txt, txtlen); | ||||
|                                } else if (align == center) { | ||||
|                                        dc->x = (width - textnw(dc, txt, txtlen)) / 2; | ||||
|                                } | ||||
|                                 if (align == right) { | ||||
|                                         dc->x = width - textnw(dc, txt, txtlen); | ||||
|                                 } else if (align == center) { | ||||
|                                         dc->x = | ||||
|                                             (width - | ||||
|                                              textnw(dc, txt, txtlen)) / 2; | ||||
|                                 } | ||||
| 
 | ||||
|                                 drawtextn(dc, txt, txtlen, n->colors); | ||||
|                                 dc->y += font_h; | ||||
| @ -597,7 +607,6 @@ void draw_win(void) | ||||
|         free(n_buf); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| char | ||||
| *fix_markup(char *str) | ||||
| { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Sascha Kruse
						Sascha Kruse