MCPcopy Create free account
hub / github.com/OpenOrienteering/mapper / getIndex

Method getIndex

src/core/objects/text_object.cpp:41–77  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

39// ### TextObjectPartInfo ###
40
41int TextObjectPartInfo::getIndex(double pos_x) const
42{
43 int left = 0;
44 int right = part_text.length();
45 while (right != left)
46 {
47 int middle = (left + right) / 2;
48 double x = part_x + metrics.width(part_text.left(middle));
49 if (pos_x >= x)
50 {
51 if (middle >= right)
52 return right;
53 double next = part_x + metrics.width(part_text.left(middle + 1));
54 if (pos_x < next)
55 if (pos_x < (x + next) / 2)
56 return middle;
57 else
58 return middle + 1;
59 else
60 left = middle + 1;
61 }
62 else // if (point.x() < x)
63 {
64 if (middle <= 0)
65 return 0;
66 double prev = part_x + metrics.width(part_text.left(middle - 1));
67 if (pos_x > prev)
68 if (pos_x > (x + prev) / 2)
69 return middle;
70 else
71 return middle - 1;
72 else
73 right = middle - 1;
74 }
75 }
76 return right;
77}
78
79
80

Callers 1

calcTextPositionAtMethod · 0.80

Calls 5

backMethod · 0.80
atMethod · 0.60
lengthMethod · 0.45
widthMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected