From edb7374cefbe7c67629b587361d2d95ca79153fa Mon Sep 17 00:00:00 2001 From: cxl Date: Mon, 11 Oct 2010 08:14:50 +0000 Subject: [PATCH] *EditField: Password fixes (thanks Shire) git-svn-id: svn://ultimatepp.org/upp/trunk@2767 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/CtrlLib/EditField.cpp | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/uppsrc/CtrlLib/EditField.cpp b/uppsrc/CtrlLib/EditField.cpp index 22e55352b..f90bcc99e 100644 --- a/uppsrc/CtrlLib/EditField.cpp +++ b/uppsrc/CtrlLib/EditField.cpp @@ -224,20 +224,25 @@ Size EditField::GetMinSize() const int EditField::GetCursor(int posx) { - FontInfo fi = font.Info(); - const wchar *s = text; posx -= 2; + if(posx <= 0) return 0; + + FontInfo fi = font.Info(); + int count = text.GetLength(); + if(password) + return min((posx + fi['*'] / 2) / fi['*'], count); + int x = 0; - int x0 = 0; + const wchar *s = text; int i = 0; - for(i = 0; i < text.GetLength(); i++) { - x0 = x; - x += fi[*s]; - if(posx < (x + x0) / 2) - return i; - s++; + while(i < count) { + int witdh = fi[*s]; + if(posx < x + witdh / 2) + break; + x += witdh; + s++; i++; } - return posx > (x + x0) / 2 ? i : max(i - 1, 0); + return i; } Image EditField::CursorImage(Point, dword) @@ -688,6 +693,8 @@ void EditField::DragLeave() void EditField::LeftDrag(Point p, dword flags) { + if(password) + return; int c = GetCursor(p.x + sc); Size ssz = StdSampleSize(); int sell, selh;