summaryrefslogtreecommitdiff
path: root/starmath/source/cursor.cxx
diff options
context:
space:
mode:
authorTakeshi Abe <tabe@fixedpoint.jp>2016-08-19 17:51:13 +0900
committerTakeshi Abe <tabe@fixedpoint.jp>2016-08-22 11:14:43 +0900
commit8a5c2586dc4f6854f8155331aad1c3fb2d54462f (patch)
treedfafafd8345b7ec6b87f81e295ed09d90f2f0dd6 /starmath/source/cursor.cxx
parent264466bd604d7613aa0a5e4b34c149ad66414580 (diff)
starmath: Do SmCursor::MoveTo() more simply
... without unnecessary copy and re-calculation of squared distances. Change-Id: I2900f8ef690cae750be036dcb3c4270c82286a4c
Diffstat (limited to 'starmath/source/cursor.cxx')
-rw-r--r--starmath/source/cursor.cxx14
1 files changed, 6 insertions, 8 deletions
diff --git a/starmath/source/cursor.cxx b/starmath/source/cursor.cxx
index 35a06b700cda..a5a933edab9f 100644
--- a/starmath/source/cursor.cxx
+++ b/starmath/source/cursor.cxx
@@ -77,9 +77,8 @@ void SmCursor::Move(OutputDevice* pDev, SmMovementDirection direction, bool bMov
}
}
-void SmCursor::MoveTo(OutputDevice* pDev, Point pos, bool bMoveAnchor){
- SmCaretLine best_line, //Best line found so far, when iterating
- curr_line; //Current line, when iterating
+void SmCursor::MoveTo(OutputDevice* pDev, const Point& pos, bool bMoveAnchor)
+{
SmCaretPosGraphEntry* NewPos = nullptr;
long dp_sq = 0, //Distance to current line squared
dbp_sq = 1; //Distance to best line squared
@@ -87,19 +86,18 @@ void SmCursor::MoveTo(OutputDevice* pDev, Point pos, bool bMoveAnchor){
{
OSL_ENSURE(pEntry->CaretPos.IsValid(), "The caret position graph may not have invalid positions!");
//Compute current line
- curr_line = SmCaretPos2LineVisitor(pDev, pEntry->CaretPos).GetResult();
+ SmCaretLine curr_line = SmCaretPos2LineVisitor(pDev, pEntry->CaretPos).GetResult();
+ //Compute squared distance to current line
+ dp_sq = curr_line.SquaredDistanceX(pos) + curr_line.SquaredDistanceY(pos);
//If we have a position compare to it
if(NewPos){
- //Compute squared distance to current line
- dp_sq = curr_line.SquaredDistanceX(pos) + curr_line.SquaredDistanceY(pos);
//If best line is closer, reject current line
if(dbp_sq <= dp_sq) continue;
}
//Accept current position as the best
- best_line = curr_line;
NewPos = pEntry.get();
//Update distance to best line
- dbp_sq = best_line.SquaredDistanceX(pos) + best_line.SquaredDistanceY(pos);
+ dbp_sq = dp_sq;
}
if(NewPos){
mpPosition = NewPos;