Improve fill aligned text hit testing.
This commit is contained in:
parent
784f869f0f
commit
cc4d6eb7f6
|
@ -1038,31 +1038,36 @@ int TextServer::shaped_text_hit_test_position(RID p_shaped, float p_coords) cons
|
||||||
|
|
||||||
float off = 0.0f;
|
float off = 0.0f;
|
||||||
for (int i = 0; i < v_size; i++) {
|
for (int i = 0; i < v_size; i++) {
|
||||||
for (int k = 0; k < glyphs[i].repeat; k++) {
|
if (glyphs[i].count > 0) {
|
||||||
if (glyphs[i].count > 0) {
|
float advance = 0.f;
|
||||||
float advance = 0.f;
|
for (int j = 0; j < glyphs[i].count; j++) {
|
||||||
for (int j = 0; j < glyphs[i].count; j++) {
|
advance += glyphs[i + j].advance * glyphs[i + j].repeat;
|
||||||
advance += glyphs[i + j].advance;
|
}
|
||||||
}
|
if (((glyphs[i].flags & GRAPHEME_IS_VIRTUAL) == GRAPHEME_IS_VIRTUAL) && (p_coords >= off && p_coords < off + advance)) {
|
||||||
// Place caret to the left of clicked grapheme.
|
if ((glyphs[i].flags & GRAPHEME_IS_RTL) == GRAPHEME_IS_RTL) {
|
||||||
if (p_coords >= off && p_coords < off + advance / 2) {
|
return glyphs[i].end;
|
||||||
if ((glyphs[i].flags & GRAPHEME_IS_RTL) == GRAPHEME_IS_RTL) {
|
} else {
|
||||||
return glyphs[i].end;
|
return glyphs[i].start;
|
||||||
} else {
|
}
|
||||||
return glyphs[i].start;
|
}
|
||||||
}
|
// Place caret to the left of clicked grapheme.
|
||||||
}
|
if (p_coords >= off && p_coords < off + advance / 2) {
|
||||||
// Place caret to the right of clicked grapheme.
|
if ((glyphs[i].flags & GRAPHEME_IS_RTL) == GRAPHEME_IS_RTL) {
|
||||||
if (p_coords >= off + advance / 2 && p_coords < off + advance) {
|
return glyphs[i].end;
|
||||||
if ((glyphs[i].flags & GRAPHEME_IS_RTL) == GRAPHEME_IS_RTL) {
|
} else {
|
||||||
return glyphs[i].start;
|
return glyphs[i].start;
|
||||||
} else {
|
}
|
||||||
return glyphs[i].end;
|
}
|
||||||
}
|
// Place caret to the right of clicked grapheme.
|
||||||
|
if (p_coords >= off + advance / 2 && p_coords < off + advance) {
|
||||||
|
if ((glyphs[i].flags & GRAPHEME_IS_RTL) == GRAPHEME_IS_RTL) {
|
||||||
|
return glyphs[i].start;
|
||||||
|
} else {
|
||||||
|
return glyphs[i].end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
off += glyphs[i].advance;
|
|
||||||
}
|
}
|
||||||
|
off += glyphs[i].advance * glyphs[i].repeat;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue