From adf33f1524dbdff42ae91c0d7ee7eb72713c177a Mon Sep 17 00:00:00 2001 From: cxl Date: Sat, 6 Sep 2014 17:11:13 +0000 Subject: [PATCH] RichTextView: Fixed issue with links #848 git-svn-id: svn://ultimatepp.org/upp/trunk@7644 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/CtrlLib/RichText.h | 1 + uppsrc/CtrlLib/RichTextView.cpp | 21 ++++++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/uppsrc/CtrlLib/RichText.h b/uppsrc/CtrlLib/RichText.h index 40d8cf09a..349f60aba 100644 --- a/uppsrc/CtrlLib/RichText.h +++ b/uppsrc/CtrlLib/RichText.h @@ -36,6 +36,7 @@ private: void SetSb(); void Scroll(); int GetPageCx(bool reduced = false) const; + Point GetTextPoint(Point p) const; int GetPointPos(Point p) const; String GetLink(int pos, Point p) const; void RefreshSel(); diff --git a/uppsrc/CtrlLib/RichTextView.cpp b/uppsrc/CtrlLib/RichTextView.cpp index 7cb3a0417..c19107239 100644 --- a/uppsrc/CtrlLib/RichTextView.cpp +++ b/uppsrc/CtrlLib/RichTextView.cpp @@ -128,15 +128,21 @@ void RichTextView::RightDown(Point p, dword keyflags) b.Execute(); } +Point RichTextView::GetTextPoint(Point p) const +{ + p -= margin.TopLeft(); + Zoom zoom = GetZoom(); + p.y += sb * zoom; + return Point(p.x / zoom, p.y / zoom); +} + int RichTextView::GetPointPos(Point p) const { Size sz = GetSize(); sz.cx -= margin.left + margin.right; sz.cy -= margin.top + margin.bottom; - p -= margin.TopLeft(); - Zoom zoom = GetZoom(); - p.y += sb * zoom; - return text.GetPos(p.x / zoom, PageY(0, p.y / zoom), GetPage()); + p = GetTextPoint(p); + return text.GetPos(p.x, PageY(0, p.y), GetPage()); } String RichTextView::GetLink(int pos, Point p) const @@ -145,12 +151,17 @@ String RichTextView::GetLink(int pos, Point p) const RichObject object = text.GetRichPos(pos).object; if(object) { Rect rc = text.GetCaret(pos, GetPage()); + //TODO: Perhaps use GetTextPoint here? link = object.GetLink(p - rc.TopLeft(), rc.Size()); } if(IsNull(link)) { RichPos richpos = text.GetRichPos(pos); - if(richpos.chr != '\n') + Rect rc = text.GetCaret(pos, GetPage()); + DDUMP(rc); + DDUMP(p); + DDUMP(GetTextPoint(p)); + if(richpos.chr != '\n' && rc.Contains(GetTextPoint(p))) link = Nvl(richpos.fieldformat.link, richpos.format.link); } return link;