aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Rendering/TextLayer.cs
blob: 3f4b8299be88d1135723c325c47e6dc8dbb723a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)

using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;

namespace Tango.Scripting.Editors.Rendering
{
	/// <summary>
	/// The control that contains the text.
	/// 
	/// This control is used to allow other UIElements to be placed inside the TextView but
	/// behind the text.
	/// The text rendering process (VisualLine creation) is controlled by the TextView, this
	/// class simply displays the created Visual Lines.
	/// </summary>
	/// <remarks>
	/// This class does not contain any input handling and is invisible to hit testing. Input
	/// is handled by the TextView.
	/// This allows UIElements that are displayed behind the text, but still can react to mouse input.
	/// </remarks>
	sealed class TextLayer : Layer
	{
		/// <summary>
		/// the index of the text layer in the layers collection
		/// </summary>
		internal int index;
		
		public TextLayer(TextView textView) : base(textView, KnownLayer.Text)
		{
		}
		
		List<VisualLineDrawingVisual> visuals = new List<VisualLineDrawingVisual>();
		
		internal void SetVisualLines(ICollection<VisualLine> visualLines)
		{
			foreach (VisualLineDrawingVisual v in visuals) {
				if (v.VisualLine.IsDisposed)
					RemoveVisualChild(v);
			}
			visuals.Clear();
			foreach (VisualLine newLine in visualLines) {
				VisualLineDrawingVisual v = newLine.Render();
				if (!v.IsAdded) {
					AddVisualChild(v);
					v.IsAdded = true;
				}
				visuals.Add(v);
			}
			InvalidateArrange();
		}
		
		protected override int VisualChildrenCount {
			get { return visuals.Count; }
		}
		
		protected override Visual GetVisualChild(int index)
		{
			return visuals[index];
		}
		
		protected override void ArrangeCore(Rect finalRect)
		{
			textView.ArrangeTextLayer(visuals);
		}
	}
}
class="w"> ++ii) { int i = IsLower ? ii : size-ii-1; int actual_k = (std::min)(k,ii); int actual_start = IsLower ? k-actual_k : 1; if(actual_k>0) other.coeffRef(i,col) -= cjLhs.row(i).segment(actual_start,actual_k).transpose() .cwiseProduct(other.col(col).segment(IsLower ? i-actual_k : i+1,actual_k)).sum(); if((Mode&UnitDiag)==0) other.coeffRef(i,col) /= cjLhs(i,IsLower ? k : 0); } } } }; template<typename Index, int Mode, typename LhsScalar, bool ConjLhs, typename RhsScalar> struct band_solve_triangular_selector<Index,Mode,LhsScalar,ConjLhs,RhsScalar,ColMajor> { typedef Map<const Matrix<LhsScalar,Dynamic,Dynamic,ColMajor>, 0, OuterStride<> > LhsMap; typedef Map<Matrix<RhsScalar,Dynamic,1> > RhsMap; enum { IsLower = (Mode&Lower) ? 1 : 0 }; static void run(Index size, Index k, const LhsScalar* _lhs, Index lhsStride, RhsScalar* _other) { const LhsMap lhs(_lhs,k+1,size,OuterStride<>(lhsStride)); RhsMap other(_other,size,1); typename internal::conditional< ConjLhs, const CwiseUnaryOp<typename internal::scalar_conjugate_op<LhsScalar>,LhsMap>, const LhsMap&> ::type cjLhs(lhs); for(int col=0 ; col<other.cols() ; ++col) { for(int ii=0; ii<size; ++ii) { int i = IsLower ? ii : size-ii-1; int actual_k = (std::min)(k,size-ii-1); int actual_start = IsLower ? 1 : k-actual_k; if((Mode&UnitDiag)==0) other.coeffRef(i,col) /= cjLhs(IsLower ? 0 : k, i); if(actual_k>0) other.col(col).segment(IsLower ? i+1 : i-actual_k, actual_k) -= other.coeff(i,col) * cjLhs.col(i).segment(actual_start,actual_k); } } } }; } // end namespace internal #endif // EIGEN_BAND_TRIANGULARSOLVER_H