From 8a5c2586dc4f6854f8155331aad1c3fb2d54462f Mon Sep 17 00:00:00 2001 From: Takeshi Abe Date: Fri, 19 Aug 2016 17:51:13 +0900 Subject: starmath: Do SmCursor::MoveTo() more simply ... without unnecessary copy and re-calculation of squared distances. Change-Id: I2900f8ef690cae750be036dcb3c4270c82286a4c --- starmath/source/cursor.cxx | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'starmath/source/cursor.cxx') 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; -- cgit