document.write('<link rel="stylesheet" href="http://gist.github.com/stylesheets/gist/embed.css"/>')





document.write('<div id=\"gist-214001\" class=\"gist\">\n  \n  \n    \n            \n\n      <div class=\"gist-file\">\n        <div class=\"gist-data gist-syntax\">\n          \n          \n          \n            <div class=\"gist-highlight\"><pre><div class=\"line\" id=\"LC1\"><span class=\"cm\">/* TripleClickMouseProcessor.cs<\/span><\/div><div class=\"line\" id=\"LC2\"><span class=\"cm\"> * Copyright Noah Richards, licensed under the Ms-PL.<\/span><\/div><div class=\"line\" id=\"LC3\"><span class=\"cm\"> * Check out blogs.msdn.com/noahric for more information about the Visual Studio 2010 editor!<\/span><\/div><div class=\"line\" id=\"LC4\"><span class=\"cm\"> */<\/span><\/div><div class=\"line\" id=\"LC5\"><span class=\"k\">using<\/span> <span class=\"nn\">System.ComponentModel.Composition<\/span><span class=\"p\">;<\/span><\/div><div class=\"line\" id=\"LC6\"><span class=\"k\">using<\/span> <span class=\"nn\">System.Windows<\/span><span class=\"p\">;<\/span><\/div><div class=\"line\" id=\"LC7\"><span class=\"k\">using<\/span> <span class=\"nn\">System.Windows.Input<\/span><span class=\"p\">;<\/span><\/div><div class=\"line\" id=\"LC8\"><span class=\"k\">using<\/span> <span class=\"nn\">Microsoft.VisualStudio.Text<\/span><span class=\"p\">;<\/span><\/div><div class=\"line\" id=\"LC9\"><span class=\"k\">using<\/span> <span class=\"nn\">Microsoft.VisualStudio.Text.Editor<\/span><span class=\"p\">;<\/span><\/div><div class=\"line\" id=\"LC10\"><span class=\"k\">using<\/span> <span class=\"nn\">Microsoft.VisualStudio.Utilities<\/span><span class=\"p\">;<\/span><\/div><div class=\"line\" id=\"LC11\">&nbsp;<\/div><div class=\"line\" id=\"LC12\"><span class=\"k\">namespace<\/span> <span class=\"nn\">TripleClick<\/span><\/div><div class=\"line\" id=\"LC13\"><span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC14\"><span class=\"na\">    [Export(typeof(IMouseProcessorProvider))]<\/span><\/div><div class=\"line\" id=\"LC15\"><span class=\"na\">    [Name(&quot;TripleClick&quot;)]<\/span><\/div><div class=\"line\" id=\"LC16\"><span class=\"na\">    [Order(Before = &quot;DragDrop&quot;)]<\/span><\/div><div class=\"line\" id=\"LC17\"><span class=\"na\">    [ContentType(&quot;text&quot;)]<\/span><\/div><div class=\"line\" id=\"LC18\"><span class=\"na\">    [TextViewRole(PredefinedTextViewRoles.Interactive)]<\/span><\/div><div class=\"line\" id=\"LC19\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">internal<\/span> <span class=\"k\">sealed<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">TripleClickMouseProcessorProvider<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IMouseProcessorProvider<\/span><\/div><div class=\"line\" id=\"LC20\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC21\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">public<\/span> <span class=\"n\">IMouseProcessor<\/span> <span class=\"nf\">GetAssociatedProcessor<\/span><span class=\"p\">(<\/span><span class=\"n\">IWpfTextView<\/span> <span class=\"n\">wpfTextView<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC22\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC23\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">TripleClickMouseProcessor<\/span><span class=\"p\">(<\/span><span class=\"n\">wpfTextView<\/span><span class=\"p\">);<\/span><\/div><div class=\"line\" id=\"LC24\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC25\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC26\">&nbsp;<\/div><div class=\"line\" id=\"LC27\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">internal<\/span> <span class=\"k\">sealed<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">TripleClickMouseProcessor<\/span> <span class=\"p\">:<\/span> <span class=\"n\">MouseProcessorBase<\/span><\/div><div class=\"line\" id=\"LC28\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC29\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">private<\/span> <span class=\"n\">IWpfTextView<\/span> <span class=\"n\">_view<\/span><span class=\"p\">;<\/span><\/div><div class=\"line\" id=\"LC30\">&nbsp;<\/div><div class=\"line\" id=\"LC31\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">public<\/span> <span class=\"nf\">TripleClickMouseProcessor<\/span><span class=\"p\">(<\/span><span class=\"n\">IWpfTextView<\/span> <span class=\"n\">view<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC32\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC33\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">_view<\/span> <span class=\"p\">=<\/span> <span class=\"n\">view<\/span><span class=\"p\">;<\/span><\/div><div class=\"line\" id=\"LC34\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC35\">&nbsp;<\/div><div class=\"line\" id=\"LC36\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">public<\/span> <span class=\"k\">override<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">PreprocessMouseLeftButtonDown<\/span><span class=\"p\">(<\/span><span class=\"n\">MouseButtonEventArgs<\/span> <span class=\"n\">e<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC37\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC38\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">ClickCount<\/span> <span class=\"p\">!=<\/span> <span class=\"m\">3<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC39\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">return<\/span><span class=\"p\">;<\/span><\/div><div class=\"line\" id=\"LC40\">&nbsp;<\/div><div class=\"line\" id=\"LC41\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">Point<\/span> <span class=\"n\">viewPoint<\/span> <span class=\"p\">=<\/span> <span class=\"n\">RelativeToView<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">GetPosition<\/span><span class=\"p\">(<\/span><span class=\"n\">_view<\/span><span class=\"p\">.<\/span><span class=\"n\">VisualElement<\/span><span class=\"p\">));<\/span><\/div><div class=\"line\" id=\"LC42\">&nbsp;<\/div><div class=\"line\" id=\"LC43\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">var<\/span> <span class=\"n\">line<\/span> <span class=\"p\">=<\/span> <span class=\"n\">_view<\/span><span class=\"p\">.<\/span><span class=\"n\">TextViewLines<\/span><span class=\"p\">.<\/span><span class=\"n\">GetTextViewLineContainingYCoordinate<\/span><span class=\"p\">(<\/span><span class=\"n\">viewPoint<\/span><span class=\"p\">.<\/span><span class=\"n\">Y<\/span><span class=\"p\">);<\/span><\/div><div class=\"line\" id=\"LC44\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">line<\/span> <span class=\"p\">==<\/span> <span class=\"k\">null<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC45\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">return<\/span><span class=\"p\">;<\/span><\/div><div class=\"line\" id=\"LC46\">&nbsp;<\/div><div class=\"line\" id=\"LC47\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">var<\/span> <span class=\"n\">extent<\/span> <span class=\"p\">=<\/span> <span class=\"n\">line<\/span><span class=\"p\">.<\/span><span class=\"n\">Extent<\/span><span class=\"p\">;<\/span><\/div><div class=\"line\" id=\"LC48\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">if<\/span> <span class=\"p\">(!<\/span><span class=\"n\">extent<\/span><span class=\"p\">.<\/span><span class=\"n\">IsEmpty<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC49\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC50\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">_view<\/span><span class=\"p\">.<\/span><span class=\"n\">Selection<\/span><span class=\"p\">.<\/span><span class=\"n\">Select<\/span><span class=\"p\">(<\/span><span class=\"n\">extent<\/span><span class=\"p\">,<\/span> <span class=\"k\">false<\/span><span class=\"p\">);<\/span><\/div><div class=\"line\" id=\"LC51\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">_view<\/span><span class=\"p\">.<\/span><span class=\"n\">Caret<\/span><span class=\"p\">.<\/span><span class=\"n\">MoveTo<\/span><span class=\"p\">(<\/span><span class=\"n\">_view<\/span><span class=\"p\">.<\/span><span class=\"n\">Selection<\/span><span class=\"p\">.<\/span><span class=\"n\">ActivePoint<\/span><span class=\"p\">);<\/span><\/div><div class=\"line\" id=\"LC52\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC53\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">else<\/span><\/div><div class=\"line\" id=\"LC54\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC55\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">_view<\/span><span class=\"p\">.<\/span><span class=\"n\">Selection<\/span><span class=\"p\">.<\/span><span class=\"n\">Clear<\/span><span class=\"p\">();<\/span><\/div><div class=\"line\" id=\"LC56\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">_view<\/span><span class=\"p\">.<\/span><span class=\"n\">Caret<\/span><span class=\"p\">.<\/span><span class=\"n\">MoveTo<\/span><span class=\"p\">(<\/span><span class=\"n\">extent<\/span><span class=\"p\">.<\/span><span class=\"n\">Start<\/span><span class=\"p\">.<\/span><span class=\"n\">TranslateTo<\/span><span class=\"p\">(<\/span><span class=\"n\">_view<\/span><span class=\"p\">.<\/span><span class=\"n\">TextSnapshot<\/span><span class=\"p\">,<\/span> <span class=\"n\">PointTrackingMode<\/span><span class=\"p\">.<\/span><span class=\"n\">Negative<\/span><span class=\"p\">));<\/span><\/div><div class=\"line\" id=\"LC57\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC58\">&nbsp;<\/div><div class=\"line\" id=\"LC59\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">Handled<\/span> <span class=\"p\">=<\/span> <span class=\"k\">true<\/span><span class=\"p\">;<\/span><\/div><div class=\"line\" id=\"LC60\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC61\">&nbsp;<\/div><div class=\"line\" id=\"LC62\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">Point<\/span> <span class=\"nf\">RelativeToView<\/span><span class=\"p\">(<\/span><span class=\"n\">Point<\/span> <span class=\"n\">position<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC63\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC64\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Point<\/span><span class=\"p\">(<\/span><span class=\"n\">position<\/span><span class=\"p\">.<\/span><span class=\"n\">X<\/span> <span class=\"p\">-<\/span> <span class=\"n\">_view<\/span><span class=\"p\">.<\/span><span class=\"n\">ViewportLeft<\/span><span class=\"p\">,<\/span> <span class=\"n\">position<\/span><span class=\"p\">.<\/span><span class=\"n\">Y<\/span> <span class=\"p\">-<\/span> <span class=\"n\">_view<\/span><span class=\"p\">.<\/span><span class=\"n\">ViewportTop<\/span><span class=\"p\">);<\/span><\/div><div class=\"line\" id=\"LC65\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC66\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC67\"><span class=\"p\">}<\/span><\/div><\/pre><\/div>\n          \n        <\/div>\n\n        <div class=\"gist-meta\">\n          <a href=\"http://gist.github.com/raw/214001/f2288395ac8d020a51e89000eb70c97212bd0aad/TripleClickMouseProcessor.cs\" style=\"float:right;\">view raw<\/a>\n          <a href=\"http://gist.github.com/214001#file_triple_click_mouse_processor.cs\" style=\"float:right;margin-right:10px;color:#666\">TripleClickMouseProcessor.cs<\/a>\n          <a href=\"http://gist.github.com/214001\">This Gist<\/a> brought to you by <a href=\"http://github.com\">GitHub<\/a>.\n        <\/div>\n      <\/div>\n    \n  \n<\/div>\n')
