Browse Source

Added HitTestTextRange to FormattedText.

pull/10/head
Steven Kirk 12 years ago
parent
commit
43716ae100
  1. 6
      Perspex.SceneGraph/Media/FormattedText.cs
  2. 3
      Perspex.SceneGraph/Platform/IFormattedTextImpl.cs
  3. 17
      Windows/Perspex.Direct2D1/Media/FormattedTextImpl.cs

6
Perspex.SceneGraph/Media/FormattedText.cs

@ -7,6 +7,7 @@
namespace Perspex.Media
{
using System;
using System.Collections.Generic;
using Perspex.Platform;
using Splat;
@ -78,6 +79,11 @@ namespace Perspex.Media
return this.PlatformImpl.HitTestTextPosition(index);
}
public IEnumerable<Rect> HitTestTextRange(int index, int length, Point origin)
{
return this.PlatformImpl.HitTestTextRange(index, length, origin);
}
public Size Measure()
{
return this.PlatformImpl.Measure();

3
Perspex.SceneGraph/Platform/IFormattedTextImpl.cs

@ -7,6 +7,7 @@
namespace Perspex.Platform
{
using System;
using System.Collections.Generic;
using Perspex.Media;
public interface IFormattedTextImpl : IDisposable
@ -17,6 +18,8 @@ namespace Perspex.Platform
Rect HitTestTextPosition(int index);
IEnumerable<Rect> HitTestTextRange(int index, int length, Point origin);
Size Measure();
}
}

17
Windows/Perspex.Direct2D1/Media/FormattedTextImpl.cs

@ -7,6 +7,8 @@
namespace Perspex.Direct2D1.Media
{
using System;
using System.Collections.Generic;
using System.Linq;
using Perspex.Media;
using Perspex.Platform;
using Splat;
@ -60,7 +62,7 @@ namespace Perspex.Direct2D1.Media
SharpDX.Bool isTrailingHit;
SharpDX.Bool isInside;
DWrite.HitTestMetrics result = this.TextLayout.HitTestPoint(
var result = this.TextLayout.HitTestPoint(
(float)point.X,
(float)point.Y,
out isTrailingHit,
@ -78,7 +80,7 @@ namespace Perspex.Direct2D1.Media
float x;
float y;
DWrite.HitTestMetrics result = this.TextLayout.HitTestTextPosition(
var result = this.TextLayout.HitTestTextPosition(
index,
false,
out x,
@ -87,6 +89,17 @@ namespace Perspex.Direct2D1.Media
return new Rect(result.Left, result.Top, result.Width, result.Height);
}
public IEnumerable<Rect> HitTestTextRange(int index, int length, Point origin)
{
var result = this.TextLayout.HitTestTextRange(
index,
length,
(float)origin.X,
(float)origin.Y);
return result.Select(x => new Rect(x.Left, x.Top, x.Width, x.Height));
}
public Size Measure()
{
return new Size(

Loading…
Cancel
Save