\r
public abstract class TextStoreBase\r
{\r
- public delegate double GetDpiHandeler();\r
- public event GetDpiHandeler GetDpi;\r
-\r
public delegate bool IsReadOnlyHandler();\r
public event IsReadOnlyHandler IsReadOnly;\r
\r
var pointBotttomRight = new POINT();\r
GetStringExtent(i_startIndex, i_endIndex, out pointTopLeft, out pointBotttomRight);\r
\r
- if(this.GetDpi == null)\r
- throw new NotImplementedException();\r
-\r
- double dpi = this.GetDpi();\r
-\r
- o_rect.left = (int)(pointTopLeft.x * dpi / 96.0);\r
- o_rect.top = (int)(pointTopLeft.y * dpi / 96.0);\r
- o_rect.bottom = (int)(pointBotttomRight.y * dpi / 96.0);\r
- o_rect.right = (int)(pointBotttomRight.x * dpi / 96.0);\r
+ o_rect.left = (int)(pointTopLeft.x);\r
+ o_rect.top = (int)(pointTopLeft.y);\r
+ o_rect.bottom = (int)(pointBotttomRight.y);\r
+ o_rect.right = (int)(pointBotttomRight.x);\r
o_isClipped = false;\r
#if TSF_DEBUG_OUTPUT\r
DebugOut.Print("rect left:{0} top:{1} bottom:{2} right:{3}", o_rect.left, o_rect.top, o_rect.bottom, o_rect.right);\r
\r
GetScreenExtent(out pointTopLeft, out pointBottomRight);\r
\r
- if (this.GetDpi == null)\r
- throw new NotImplementedException();\r
-\r
- double dpi = this.GetDpi();\r
-\r
- o_rect.left = (int)(pointTopLeft.x * dpi / 96.0);\r
- o_rect.top = (int)(pointTopLeft.y * dpi / 96.0);\r
- o_rect.bottom = (int)(pointBottomRight.y * dpi / 96.0);\r
- o_rect.right = (int)(pointBottomRight.x * dpi / 96.0);\r
+ o_rect.left = (int)(pointTopLeft.x);\r
+ o_rect.top = (int)(pointTopLeft.y);\r
+ o_rect.bottom = (int)(pointBottomRight.y);\r
+ o_rect.right = (int)(pointBottomRight.x);\r
#if TSF_DEBUG_OUTPUT\r
DebugOut.Print("rect left:{0} top:{1} bottom:{2} right:{3}", o_rect.left, o_rect.top, o_rect.bottom, o_rect.right);\r
#endif\r
result ^= this.Y.GetHashCode();\r
return result;\r
}\r
+\r
+ public Point Scale(double scale)\r
+ {\r
+ this.X *= scale;\r
+ this.Y *= scale;\r
+ return this;\r
+ }\r
#if WINFORM\r
public static implicit operator Point(System.Drawing.Point p)\r
{\r
this.textStore = new TextStore2();\r
this.textStore.IsLoading += textStore_IsLoading;\r
this.textStore.IsReadOnly += textStore_IsReadOnly;\r
- this.textStore.GetDpi += textStore_GetDpi;\r
this.textStore.GetStringLength += () => this.Document.Length;\r
this.textStore.GetString += _textStore_GetString;\r
this.textStore.GetSelectionIndex += _textStore_GetSelectionIndex;\r
this.Refresh();\r
}\r
\r
- double textStore_GetDpi()\r
- {\r
- float dpi;\r
- this.Render.GetDpi(out dpi, out dpi);\r
- return dpi;\r
- }\r
-\r
bool textStore_IsReadOnly()\r
{\r
return false;\r
Point startPos, endPos;\r
TextStoreHelper.GetStringExtent(this.Document, this.View, i_startIndex, i_endIndex, out startPos, out endPos);\r
\r
+ float dpi;\r
+ this.Render.GetDpi(out dpi, out dpi);\r
+ double scale = dpi / 96.0;\r
+\r
var gt = this.TransformToVisual(Window.Current.Content);\r
- startPos = gt.TransformPoint(startPos);\r
- endPos = gt.TransformPoint(endPos);\r
+ startPos = gt.TransformPoint(startPos.Scale(scale));\r
+ endPos = gt.TransformPoint(endPos.Scale(scale));\r
\r
o_topLeft = new POINT((int)startPos.X, (int)startPos.Y);\r
o_bottomRight = new POINT((int)endPos.X, (int)endPos.Y);\r
this.textStore = new TextStore();\r
this.textStore.IsLoading += textStore_IsLoading;\r
this.textStore.IsReadOnly += textStore_IsReadOnly;\r
- this.textStore.GetDpi += textStore_GetDpi;\r
this.textStore.GetStringLength += () => this.Document.Length;\r
this.textStore.GetString += _textStore_GetString;\r
this.textStore.GetSelectionIndex += _textStore_GetSelectionIndex;\r
get { return this.textStore; }\r
}\r
\r
- double textStore_GetDpi()\r
- {\r
- float dpi;\r
- this.Render.GetDpi(out dpi, out dpi);\r
- return dpi;\r
- }\r
-\r
bool textStore_IsReadOnly()\r
{\r
return false;\r
Point startPos, endPos;\r
TextStoreHelper.GetStringExtent(this.Document, this.View, i_startIndex, i_endIndex, out startPos, out endPos);\r
\r
- startPos = PointToScreen(this.TranslatePoint(startPos, this));\r
- endPos = PointToScreen(this.TranslatePoint(endPos, this));\r
+ float dpi;\r
+ this.Render.GetDpi(out dpi, out dpi);\r
+ double scale = dpi / 96.0;\r
+ \r
+ startPos = PointToScreen(this.TranslatePoint(startPos.Scale(scale), this));\r
+ endPos = PointToScreen(this.TranslatePoint(endPos.Scale(scale), this));\r
\r
o_topLeft = new POINT((int)startPos.X, (int)startPos.Y);\r
o_bottomRight = new POINT((int)endPos.X, (int)endPos.Y);\r