mirror of
https://github.com/Llewellynvdm/conky.git
synced 2024-12-27 04:32:55 +00:00
fix wrong alignments when font changes (sf.net #3461442)
This commit is contained in:
parent
59f79105bd
commit
6cce8e8e11
27
src/conky.cc
27
src/conky.cc
@ -994,6 +994,33 @@ static int get_string_width_special(char *s, int special_index)
|
||||
|| current->type == BAR) {
|
||||
width += current->width;
|
||||
}
|
||||
if (current->type == FONT) {
|
||||
//put all following text until the next fontchange/stringend in influenced_by_font but do not include specials
|
||||
char *influenced_by_font=strdup(p);
|
||||
special_t *current_after_font=current;
|
||||
for(i=0; influenced_by_font[i]!=0; i++) {
|
||||
if(influenced_by_font[i] == SPECIAL_CHAR) {
|
||||
//remove specials and stop at fontchange
|
||||
current_after_font=current_after_font->next;
|
||||
if(current_after_font->type == FONT) {
|
||||
influenced_by_font[i]=0;
|
||||
break;
|
||||
} else strcpy(&influenced_by_font[i], &influenced_by_font[i+1]);
|
||||
}
|
||||
}
|
||||
//add the length of influenced_by_font in the new font to width
|
||||
int orig_font = selected_font;
|
||||
selected_font=current->font_added;
|
||||
width += calc_text_width(influenced_by_font);
|
||||
selected_font = orig_font;
|
||||
free(influenced_by_font);
|
||||
//make sure there chars counted in the new font are not again counted in the old font
|
||||
int specials_skipped=0;
|
||||
while(i>0) {
|
||||
if(p[specials_skipped]!=1) strcpy(&p[specials_skipped], &p[specials_skipped+1]); else specials_skipped++;
|
||||
i--;
|
||||
}
|
||||
}
|
||||
idx++;
|
||||
current = current->next;
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user