diff options
-rw-r--r-- | include/Platform.h | 12 | ||||
-rw-r--r-- | src/Editor.cxx | 20 | ||||
-rw-r--r-- | src/ScintillaBase.cxx | 8 | ||||
-rw-r--r-- | win32/PlatWin.cxx | 4 | ||||
-rw-r--r-- | win32/ScintillaWin.cxx | 7 |
5 files changed, 27 insertions, 24 deletions
diff --git a/include/Platform.h b/include/Platform.h index c1924eda5..7a621c65e 100644 --- a/include/Platform.h +++ b/include/Platform.h @@ -108,6 +108,18 @@ public: return Point(static_cast<XYPOSITION>(x_), static_cast<XYPOSITION>(y_)); } + bool operator!=(Point other) const noexcept { + return (x != other.x) || (y != other.y); + } + + Point operator+(Point other) const noexcept { + return Point(x + other.x, y + other.y); + } + + Point operator-(Point other) const noexcept { + return Point(x - other.x, y - other.y); + } + // Other automatically defined methods (assignment, copy constructor, destructor) are fine }; diff --git a/src/Editor.cxx b/src/Editor.cxx index 953cae81a..639f3a242 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -1150,13 +1150,9 @@ slop | strict | jumps | even | Caret can go to the margin | When Editor::XYScrollPosition Editor::XYScrollToMakeVisible(const SelectionRange &range, const XYScrollOptions options) { const PRectangle rcClient = GetTextRectangle(); - Point pt = LocationFromPosition(range.caret); - Point ptAnchor = LocationFromPosition(range.anchor); const Point ptOrigin = GetVisibleOriginInMain(); - pt.x += ptOrigin.x; - pt.y += ptOrigin.y; - ptAnchor.x += ptOrigin.x; - ptAnchor.y += ptOrigin.y; + const Point pt = LocationFromPosition(range.caret) + ptOrigin; + const Point ptAnchor = LocationFromPosition(range.anchor) + ptOrigin; const Point ptBottomCaret(pt.x, pt.y + vs.lineHeight - 1); XYScrollPosition newXY(xOffset, topLine); @@ -4174,9 +4170,10 @@ void Editor::GoToLine(Sci::Line lineNo) { } static bool Close(Point pt1, Point pt2, Point threshold) noexcept { - if (std::abs(pt1.x - pt2.x) > threshold.x) + const Point ptDifference = pt2 - pt1; + if (std::abs(ptDifference.x) > threshold.x) return false; - if (std::abs(pt1.y - pt2.y) > threshold.y) + if (std::abs(ptDifference.y) > threshold.y) return false; return true; } @@ -4266,9 +4263,8 @@ void Editor::DisplayCursor(Window::Cursor c) { } bool Editor::DragThreshold(Point ptStart, Point ptNow) { - const XYPOSITION xMove = ptStart.x - ptNow.x; - const XYPOSITION yMove = ptStart.y - ptNow.y; - const XYPOSITION distanceSquared = xMove * xMove + yMove * yMove; + const Point ptDiff = ptStart - ptNow; + const XYPOSITION distanceSquared = ptDiff.x * ptDiff.x + ptDiff.y * ptDiff.y; return distanceSquared > 16.0f; } @@ -4748,7 +4744,7 @@ Range Editor::GetHotSpotRange() const noexcept { } void Editor::ButtonMoveWithModifiers(Point pt, unsigned int, int modifiers) { - if ((ptMouseLast.x != pt.x) || (ptMouseLast.y != pt.y)) { + if (ptMouseLast != pt) { DwellEnd(true); } diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx index 68cdd7f2b..3fab6b767 100644 --- a/src/ScintillaBase.cxx +++ b/src/ScintillaBase.cxx @@ -276,9 +276,7 @@ void ScintillaBase::AutoCompleteStart(Sci::Position lenEntered, const char *list pt = PointMainCaret(); } if (wMargin.Created()) { - const Point ptOrigin = GetVisibleOriginInMain(); - pt.x += ptOrigin.x; - pt.y += ptOrigin.y; + pt = pt + GetVisibleOriginInMain(); } PRectangle rcac; rcac.left = pt.x - ac.lb->CaretFromEdge(); @@ -463,9 +461,7 @@ void ScintillaBase::CallTipShow(Point pt, const char *defn) { ct.SetForeBack(vs.styles[STYLE_CALLTIP].fore, vs.styles[STYLE_CALLTIP].back); } if (wMargin.Created()) { - const Point ptOrigin = GetVisibleOriginInMain(); - pt.x += ptOrigin.x; - pt.y += ptOrigin.y; + pt = pt + GetVisibleOriginInMain(); } PRectangle rc = ct.CallTipStart(sel.MainCaret(), pt, vs.lineHeight, diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx index 093dd0950..e407bd630 100644 --- a/win32/PlatWin.cxx +++ b/win32/PlatWin.cxx @@ -2797,9 +2797,7 @@ void ListBoxX::ResizeToCursor() { PRectangle rc = GetPosition(); POINT ptw; ::GetCursorPos(&ptw); - Point pt = Point::FromInts(ptw.x, ptw.y); - pt.x += dragOffset.x; - pt.y += dragOffset.y; + const Point pt = Point::FromInts(ptw.x, ptw.y) + dragOffset; switch (resizeHit) { case HTLEFT: diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index 0ea2362e1..6008fd51b 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -627,8 +627,9 @@ HWND ScintillaWin::MainHWND() const noexcept { } bool ScintillaWin::DragThreshold(Point ptStart, Point ptNow) { - const int xMove = static_cast<int>(std::abs(ptStart.x - ptNow.x)); - const int yMove = static_cast<int>(std::abs(ptStart.y - ptNow.y)); + const Point ptDifference = ptStart - ptNow; + const XYPOSITION xMove = std::trunc(std::abs(ptDifference.x)); + const XYPOSITION yMove = std::trunc(std::abs(ptDifference.y)); return (xMove > ::GetSystemMetrics(SM_CXDRAG)) || (yMove > ::GetSystemMetrics(SM_CYDRAG)); } @@ -1434,7 +1435,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam // Windows might send WM_MOUSEMOVE even though the mouse has not been moved: // http://blogs.msdn.com/b/oldnewthing/archive/2003/10/01/55108.aspx - if (ptMouseLast.x != pt.x || ptMouseLast.y != pt.y) { + if (ptMouseLast != pt) { SetTrackMouseLeaveEvent(true); ButtonMoveWithModifiers(pt, ::GetMessageTime(), MouseModifiers(wParam)); } |