This commit is contained in:
parent
21e2f2d599
commit
212d00ea13
3 changed files with 23 additions and 8 deletions
|
|
@ -49,11 +49,10 @@ static int ft2_MwDrawText(MwWidget handle, MwFLFont ttf, MwPoint* point, const c
|
||||||
FT_Bitmap* bmp;
|
FT_Bitmap* bmp;
|
||||||
int cy, cx;
|
int cy, cx;
|
||||||
int c, c2;
|
int c, c2;
|
||||||
int l = MwUTF8ToUTF32(text, &c);
|
|
||||||
FT_Vector vec;
|
FT_Vector vec;
|
||||||
const char* old_text;
|
const char* old_text;
|
||||||
if(l <= 0) break;
|
|
||||||
text += l;
|
text += MwUTF8ToUTF32(text, &c);
|
||||||
|
|
||||||
ft_table.FT_Load_Char(ttf->face, c, FT_LOAD_RENDER);
|
ft_table.FT_Load_Char(ttf->face, c, FT_LOAD_RENDER);
|
||||||
bmp = &ttf->face->glyph->bitmap;
|
bmp = &ttf->face->glyph->bitmap;
|
||||||
|
|
@ -124,6 +123,7 @@ static int ft2_MwTextWidth(MwFLFont ttf, const char* text) {
|
||||||
text = old_text;
|
text = old_text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tw -= ttf->face->glyph->advance.x >> 6;
|
||||||
tw += ttf->face->glyph->bitmap_left + ttf->face->glyph->bitmap.width;
|
tw += ttf->face->glyph->bitmap_left + ttf->face->glyph->bitmap.width;
|
||||||
|
|
||||||
return tw + 1;
|
return tw + 1;
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,6 @@ void MwDrawText(MwWidget handle, MwFLFont ttf, MwPoint* point, const char* text,
|
||||||
char* last = input;
|
char* last = input;
|
||||||
int cp;
|
int cp;
|
||||||
|
|
||||||
if(strlen(text) == 0) return;
|
|
||||||
#ifdef TTF
|
#ifdef TTF
|
||||||
if(ttf <= MwFLBuildFont(0xff)) ttf = assume_ttf(handle, ttf);
|
if(ttf <= MwFLBuildFont(0xff)) ttf = assume_ttf(handle, ttf);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -95,6 +94,14 @@ void MwDrawText(MwWidget handle, MwFLFont ttf, MwPoint* point, const char* text,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(strlen(line) == 0) {
|
||||||
|
free(line);
|
||||||
|
|
||||||
|
last = input;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
p.x = point->x;
|
p.x = point->x;
|
||||||
if(align == MwALIGNMENT_CENTER) {
|
if(align == MwALIGNMENT_CENTER) {
|
||||||
p.x -= MwTextWidth(handle, ttf, line) / 2;
|
p.x -= MwTextWidth(handle, ttf, line) / 2;
|
||||||
|
|
|
||||||
|
|
@ -199,16 +199,24 @@ static void frame_draw(MwWidget handle) {
|
||||||
|
|
||||||
str = MwStringDuplicate(t);
|
str = MwStringDuplicate(t);
|
||||||
if(MwUTF8Length(str) > (get_col_width(lb, j) - l) / MwTextWidth(handle, Font, "M")) {
|
if(MwUTF8Length(str) > (get_col_width(lb, j) - l) / MwTextWidth(handle, Font, "M")) {
|
||||||
int ind = (get_col_width(lb, j) - l) / MwTextWidth(handle, Font, "M") - 3;
|
int ind = (get_col_width(lb, j) - l) / MwTextWidth(handle, Font, "M") - 3;
|
||||||
int seek = 0;
|
int seek = 0;
|
||||||
int l = 0;
|
int l = 0;
|
||||||
|
char* old = str;
|
||||||
|
|
||||||
|
if(ind < 0) ind = 0;
|
||||||
|
|
||||||
|
str = malloc(strlen(old) + 5);
|
||||||
|
strcpy(str, old);
|
||||||
|
free(old);
|
||||||
|
|
||||||
while(str[seek] != 0) {
|
while(str[seek] != 0) {
|
||||||
int cp;
|
int cp;
|
||||||
|
if(l == ind) break;
|
||||||
|
|
||||||
seek += MwUTF8ToUTF32(str + seek, &cp);
|
seek += MwUTF8ToUTF32(str + seek, &cp);
|
||||||
|
|
||||||
l++;
|
l++;
|
||||||
if(l == ind) break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(str + seek, '.', 3);
|
memset(str + seek, '.', 3);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue