Author: mkrueger
Date: 2008-02-13 10:38:19 -0500 (Wed, 13 Feb 2008)
New Revision: 95584

Modified:
   trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog
   
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextViewMargin.cs
Log:
* Mono.TextEditor/TextViewMargin.cs: Fixed Bug 361473 - Incorrect
  placement of the cursor with mouse click.

Modified: trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog
===================================================================
--- trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog 2008-02-13 
15:20:21 UTC (rev 95583)
+++ trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog 2008-02-13 
15:38:19 UTC (rev 95584)
@@ -1,5 +1,10 @@
 2008-02-13  Mike Krüger <[EMAIL PROTECTED]> 
 
+       * Mono.TextEditor/TextViewMargin.cs: Fixed Bug 361473 - Incorrect 
placement
+         of the cursor with mouse click.
+
+2008-02-13  Mike Krüger <[EMAIL PROTECTED]> 
+
        * Mono.TextEditor/TextViewMargin.cs, Mono.TextEditor/TextMarker.cs,
          Mono.TextEditor/TextEditor.cs: Optimized drawing.
 

Modified: 
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextViewMargin.cs
===================================================================
--- 
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextViewMargin.cs
 2008-02-13 15:20:21 UTC (rev 95583)
+++ 
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextViewMargin.cs
 2008-02-13 15:38:19 UTC (rev 95584)
@@ -634,20 +634,30 @@
                {
                        int lineNumber = Document.VisualToLogicalLine 
(System.Math.Min ((int)(y + TextEditorData.VAdjustment.Value) / LineHeight, 
Document.Splitter.LineCount - 1));
                        LineSegment line = Document.Splitter.Get (lineNumber);
-                       int lineXPos = 0;
+                       int lineXPos  = 0;
                        int column;
+                       int visualXPos = x;
                        for (column = 0; column < line.EditableLength; 
column++) {
+                               int delta;
                                if (this.Document.Buffer.GetCharAt (line.Offset 
+ column) == '\t') {
-                                       lineXPos += 
TextEditorOptions.Options.TabSize * this.charWidth;
+                                       delta = 
TextEditorOptions.Options.TabSize * this.charWidth;
                                } else {
-                                       lineXPos += this.charWidth;
+                                       delta = this.charWidth;
                                }
-                               if (lineXPos >= x + 
TextEditorData.HAdjustment.Value) {
+                               int nextXPosition = lineXPos + delta;
+                               if (nextXPosition >= visualXPos) {
+                                       if (!IsNearX1 (visualXPos, lineXPos, 
nextXPosition))
+                                               column++;
                                        break;
                                }
+                               lineXPos = nextXPosition;
                        }
                        return new DocumentLocation (lineNumber, column);
                }
                
+               static bool IsNearX1 (int pos, int x1, int x2)
+               {
+                       return System.Math.Abs (x1 - pos) < System.Math.Abs (x2 
- pos);
+               }
        }
 }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to