Browse Source

Debugger tooltips:

- fixed tooltip position on non-default DPI
 - tooltip is aligned to line bottom

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4732 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Martin Koníček 16 years ago
parent
commit
5a9eb62f09
  1. 19
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
  2. 12
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/ExtensionMethods.cs
  3. 3
      src/Main/Base/Project/Src/Services/Debugger/Tooltips/DebuggerTooltipControl.xaml.cs
  4. 39
      src/Main/Base/Project/Src/Util/ExtensionMethods.cs

19
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs

@ -375,18 +375,25 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -375,18 +375,25 @@ namespace ICSharpCode.AvalonEdit.AddIn
popup.VerticalOffset = popupPosition.Y;
}
/// <summary> Returns Popup position based on mouse position, in device independent units </summary>
Point getPopupPosition(TextEditor textEditor, MouseEventArgs mouseArgs)
{
Point mousePos = mouseArgs.GetPosition(textEditor);
return textEditor.PointToScreen(mousePos + new Vector(-4, 6));
// attempt to align Popup with line bottom
/*TextViewPosition? logicalPos = textEditor.GetPositionFromPoint(mousePos);
Point positionInPixels;
// align Popup with line bottom
TextViewPosition? logicalPos = textEditor.GetPositionFromPoint(mousePos);
if (logicalPos.HasValue) {
return textEditor.TextArea.TextView.GetVisualPosition(logicalPos.Value, VisualYPosition.LineBottom);
var textView = textEditor.TextArea.TextView;
positionInPixels =
textView.PointToScreen(
textView.GetVisualPosition(logicalPos.Value, VisualYPosition.LineBottom) - textView.ScrollOffset);
positionInPixels.X -= 4;
}
else {
return popupPos;
}*/
positionInPixels = textEditor.PointToScreen(mousePos + new Vector(-4, 6));
}
/ use device independent units, because Popup Left/Top are in independent units
return positionInPixels.TransformFromDevice(textEditor);
}
Popup createPopup()

12
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/ExtensionMethods.cs

@ -156,6 +156,18 @@ namespace ICSharpCode.AvalonEdit.Utils @@ -156,6 +156,18 @@ namespace ICSharpCode.AvalonEdit.Utils
Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformFromDevice;
return new Size(size.Width * matrix.M11, size.Height * matrix.M22);
}
public static Point TransformToDevice(this Point point, Visual visual)
{
Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformToDevice;
return new Point(point.X * matrix.M11, point.Y * matrix.M22);
}
public static Point TransformFromDevice(this Point point, Visual visual)
{
Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformFromDevice;
return new Point(point.X * matrix.M11, point.Y * matrix.M22);
}
#endregion
#region System.Drawing <-> WPF conversions

3
src/Main/Base/Project/Src/Services/Debugger/Tooltips/DebuggerTooltipControl.xaml.cs

@ -165,7 +165,8 @@ namespace ICSharpCode.SharpDevelop.Debugging @@ -165,7 +165,8 @@ namespace ICSharpCode.SharpDevelop.Debugging
{
var clickedButton = (ToggleButton)e.OriginalSource;
var clickedNode = (ITreeNode)clickedButton.DataContext;
Point buttonPos = clickedButton.PointToScreen(new Point(0, 0));
// use device independent units, because child popup Left/Top are in independent units
Point buttonPos = clickedButton.PointToScreen(new Point(0, 0)).TransformFromDevice(clickedButton);
if (clickedButton.IsChecked.GetValueOrDefault(false))
{

39
src/Main/Base/Project/Src/Util/ExtensionMethods.cs

@ -14,6 +14,7 @@ using System.Text; @@ -14,6 +14,7 @@ using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Documents;
using System.Windows.Forms;
@ -252,6 +253,44 @@ namespace ICSharpCode.SharpDevelop @@ -252,6 +253,44 @@ namespace ICSharpCode.SharpDevelop
}
#endregion
#region DPI independence
public static Rect TransformToDevice(this Rect rect, Visual visual)
{
Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformToDevice;
return Rect.Transform(rect, matrix);
}
public static Rect TransformFromDevice(this Rect rect, Visual visual)
{
Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformFromDevice;
return Rect.Transform(rect, matrix);
}
public static Size TransformToDevice(this Size size, Visual visual)
{
Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformToDevice;
return new Size(size.Width * matrix.M11, size.Height * matrix.M22);
}
public static Size TransformFromDevice(this Size size, Visual visual)
{
Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformFromDevice;
return new Size(size.Width * matrix.M11, size.Height * matrix.M22);
}
public static Point TransformToDevice(this Point point, Visual visual)
{
Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformToDevice;
return new Point(point.X * matrix.M11, point.Y * matrix.M22);
}
public static Point TransformFromDevice(this Point point, Visual visual)
{
Matrix matrix = PresentationSource.FromVisual(visual).CompositionTarget.TransformFromDevice;
return new Point(point.X * matrix.M11, point.Y * matrix.M22);
}
#endregion
public static string Replace(this string original, string pattern, string replacement, StringComparison comparisonType)
{
if (original == null)

Loading…
Cancel
Save