Skip to content

Commit 20f331e

Browse files
committed
THelpTopic::getCrossRef: measure text width properly
See #46.
1 parent 4cc0709 commit 20f331e

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

source/tvision/helpbase.cpp

+15-10
Original file line numberDiff line numberDiff line change
@@ -207,34 +207,39 @@ void THelpTopic::addParagraph( TParagraph *p )
207207
void THelpTopic::getCrossRef( int i, TPoint& loc, uchar& length,
208208
int& ref )
209209
{
210-
int oldOffset, curOffset, offset, paraOffset;
210+
int curOffset, offset, paraOffset;
211211
TParagraph *p;
212212
int line;
213213
TCrossRef *crossRefPtr;
214214

215215
paraOffset = 0;
216216
curOffset = 0;
217-
oldOffset = 0;
218217
line = 0;
219218
crossRefPtr = crossRefs + i;
220219
offset = crossRefPtr->offset;
221220
p = paragraphs;
222-
while (paraOffset + curOffset < offset)
223-
{
224-
oldOffset = paraOffset + curOffset;
221+
do {
222+
int lineOffset = curOffset;
225223
wrapText(p->text, p->size, curOffset, p->wrap);
226224
++line;
225+
if (offset <= paraOffset + curOffset)
226+
{
227+
int refOffset = offset - (paraOffset + lineOffset) - 1;
228+
TStringView textBefore(&p->text[lineOffset], refOffset);
229+
TStringView refText(&p->text[lineOffset + refOffset], crossRefPtr->length);
230+
loc.x = strwidth(textBefore);
231+
loc.y = line;
232+
length = strwidth(refText);
233+
ref = crossRefPtr->ref;
234+
return;
235+
}
227236
if (curOffset >= p->size)
228237
{
229238
paraOffset += p->size;
230239
p = p->next;
231240
curOffset = 0;
232241
}
233-
}
234-
loc.x = offset - oldOffset - 1;
235-
loc.y = line;
236-
length = crossRefPtr->length;
237-
ref = crossRefPtr->ref;
242+
} while (True);
238243
}
239244

240245
TStringView THelpTopic::getLine( int line )

0 commit comments

Comments
 (0)