private void ProcessMouseMoveForSelectTextTool(int page_index, int character_index) { if (_mousePressed) { if (character_index >= 0) { _selectInfo = new SelectInfo() { StartPage = _selectInfo.StartPage, EndPage = page_index, EndIndex = character_index, StartIndex = _selectInfo.StartIndex }; _isShowSelection = true; } InvalidateVisual(); } }
private void ProcessMouseDoubleClickForSelectTextTool(Point page_point, int page_index) { var page = Document.Pages[page_index]; int si, ei; int ci = page.Text.GetCharIndexAtPos((float)page_point.X, (float)page_point.Y, 10.0f, 10.0f); if (GetWord(page.Text, ci, out si, out ei)) { _selectInfo = new SelectInfo() { StartPage = page_index, EndPage = page_index, StartIndex = si, EndIndex = ei }; _isShowSelection = true; if (_selectInfo.StartPage >= 0) GenerateSelectedTextProperty(); InvalidateVisual(); } }
private void ProcessMouseDownForSelectTextTool(Point page_point, int page_index) { _selectInfo = new SelectInfo() { StartPage = page_index, EndPage = page_index, StartIndex = Document.Pages[page_index].Text.GetCharIndexAtPos((float)page_point.X, (float)page_point.Y, 10.0f, 10.0f), EndIndex = -1// Document.Pages[page_index].Text.GetCharIndexAtPos((float)page_point.X, (float)page_point.Y, 10.0f, 10.0f) }; _isShowSelection = false; if (_selectInfo.StartPage >= 0) GenerateSelectedTextProperty(); }
private SelectInfo NormalizeSelectionInfo() { var selTmp = _selectInfo; if (selTmp.StartPage >= 0 && selTmp.EndPage >= 0) { if (selTmp.StartPage > selTmp.EndPage) { selTmp = new SelectInfo() { StartPage = selTmp.EndPage, EndPage = selTmp.StartPage, StartIndex = selTmp.EndIndex, EndIndex = selTmp.StartIndex }; } else if ((selTmp.StartPage == selTmp.EndPage) && (selTmp.StartIndex > selTmp.EndIndex)) { selTmp = new SelectInfo() { StartPage = selTmp.StartPage, EndPage = selTmp.EndPage, StartIndex = selTmp.EndIndex, EndIndex = selTmp.StartIndex }; } } return selTmp; }
/// <summary> /// Draws text selection /// </summary> /// <param name="drawingContext">The drawing instructions for a specific element. This context is provided to the layout system.</param> /// <param name="selInfo">Selection info</param> /// <param name="pageIndex">Page index to be drawn</param> /// <remarks> /// Full page rendering is performed in the following order: /// <list type="bullet"> /// <item><see cref="DrawPageBackColor"/></item> /// <item><see cref="DrawPage"/> / <see cref="DrawLoadingIcon"/></item> /// <item><see cref="DrawFillForms"/></item> /// <item><see cref="DrawPageBorder"/></item> /// <item><see cref="DrawFillFormsSelection"/></item> /// <item><see cref="DrawTextHighlight"/></item> /// <item><see cref="DrawTextSelection"/></item> /// <item><see cref="DrawCurrentPageHighlight"/></item> /// <item><see cref="DrawPageSeparators"/></item> /// </list> /// </remarks> protected virtual void DrawTextSelection(DrawingContext drawingContext, SelectInfo selInfo, int pageIndex) { if (selInfo.StartPage < 0 || !_isShowSelection) return; if (pageIndex >= selInfo.StartPage && pageIndex <= selInfo.EndPage) { int s = 0; if (pageIndex == selInfo.StartPage) s = selInfo.StartIndex; int len = Document.Pages[pageIndex].Text.CountChars; if (pageIndex == selInfo.EndPage) len = (selInfo.EndIndex + 1) - s; var ti = Document.Pages[pageIndex].Text.GetTextInfo(s, len); foreach (var rc in ti.Rects) { var pt1 = PageToDevice(rc.left, rc.top, pageIndex); var pt2 = PageToDevice(rc.right, rc.bottom, pageIndex); double x = pt1.X < pt2.X ? pt1.X : pt2.X; double y = pt1.Y < pt2.Y ? pt1.Y : pt2.Y; double w = pt1.X > pt2.X ? pt1.X - pt2.X : pt2.X - pt1.X; double h = pt1.Y > pt2.Y ? pt1.Y - pt2.Y : pt2.Y - pt1.Y; Helpers.FillRectangle(drawingContext, _selectColorBrush, Helpers.CreateRect(x, y, w, h)); } } }
/// <summary> /// Clear text selection /// </summary> public void DeselectText() { _selectInfo = new SelectInfo() { StartPage = -1, }; InvalidateVisual(); GenerateSelectedTextProperty(); }
/// <summary> /// Selects the text contained in specified pages. /// </summary> /// <param name="startPage">Zero-based index of a starting page.</param> /// <param name="startIndex">Zero-based char index on a startPage.</param> /// <param name="endPage">Zero-based index of a ending page.</param> /// <param name="endIndex">Zero-based char index on a endPage.</param> public void SelectText(int startPage, int startIndex, int endPage, int endIndex) { if (Document == null) return; if (startPage > Document.Pages.Count - 1) startPage = Document.Pages.Count - 1; if (startPage < 0) startPage = 0; if (endPage > Document.Pages.Count - 1) endPage = Document.Pages.Count - 1; if (endPage < 0) endPage = 0; int startCnt = Document.Pages[startPage].Text.CountChars; int endCnt = Document.Pages[endPage].Text.CountChars; if (startIndex > startCnt - 1) startIndex = startCnt - 1; if (startIndex < 0) startIndex = 0; if (endIndex > endCnt - 1) endIndex = endCnt - 1; if (endIndex < 0) endIndex = 0; _selectInfo = new SelectInfo() { StartPage = startPage, StartIndex = startIndex, EndPage = endPage, EndIndex = endIndex }; _isShowSelection = true; InvalidateVisual(); GenerateSelectedTextProperty(); }
/// <summary> /// Selects the text contained in specified pages. /// </summary> /// <param name="SelInfo"><see cref="SelectInfo"/> structure that describe text selection parameters.</param> public void SelectText(SelectInfo SelInfo) { SelectText(SelInfo.StartPage, SelInfo.StartIndex, SelInfo.EndPage, SelInfo.EndIndex); }