/src/NUnit/UiException/Controls/CodeRenderingContext.cs

# · C# · 226 lines · 176 code · 43 blank · 7 comment · 0 complexity · 0f866da46f9d85d8bdf4d86024da52c7 MD5 · raw file

  1. // ****************************************************************
  2. // This is free software licensed under the NUnit license. You may
  3. // obtain a copy of the license at http://nunit.org
  4. // ****************************************************************
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Text;
  8. using System.Drawing;
  9. using NUnit.UiException.CodeFormatters;
  10. namespace NUnit.UiException.Controls
  11. {
  12. /// <summary>
  13. /// Encapsulates basic colors settings to format a text according a language.
  14. /// </summary>
  15. public class CodeRenderingContext
  16. {
  17. private static readonly int INDEX_CODE = 0;
  18. private static readonly int INDEX_KEYWORD = 1;
  19. private static readonly int INDEX_COMMENT = 2;
  20. private static readonly int INDEX_STRING = 3;
  21. private static readonly int INDEX_BACKGROUND = 4;
  22. private static readonly int INDEX_CURRBACK = 5;
  23. private static readonly int INDEX_CURRFORE = 6;
  24. private Graphics _graphics;
  25. private Font _font;
  26. private int _currentLine;
  27. private ColorMaterial[] _colors;
  28. public CodeRenderingContext()
  29. {
  30. _colors = new ColorMaterial[]
  31. {
  32. new ColorMaterial(Color.Black), // code color
  33. new ColorMaterial(Color.Blue), // keyword color
  34. new ColorMaterial(Color.Green), // comment color
  35. new ColorMaterial(Color.Red), // string color
  36. new ColorMaterial(Color.White), // background
  37. new ColorMaterial(Color.Red), // current line back color
  38. new ColorMaterial(Color.White), // current line fore color
  39. };
  40. return;
  41. }
  42. public Graphics Graphics {
  43. get { return (_graphics); }
  44. set { _graphics = value; }
  45. }
  46. public Font Font {
  47. get { return (_font); }
  48. set { _font = value; }
  49. }
  50. public int CurrentLine {
  51. get { return (_currentLine); }
  52. set { _currentLine = value; }
  53. }
  54. public Color BackgroundColor {
  55. get { return (_colors[INDEX_BACKGROUND].Color); }
  56. set
  57. {
  58. _colors[INDEX_BACKGROUND].Dispose();
  59. _colors[INDEX_BACKGROUND] = new ColorMaterial(value);
  60. }
  61. }
  62. public Color CurrentLineBackColor {
  63. get { return (_colors[INDEX_CURRBACK].Color); }
  64. set {
  65. _colors[INDEX_CURRBACK].Dispose();
  66. _colors[INDEX_CURRBACK] = new ColorMaterial(value);
  67. }
  68. }
  69. public Color CurrentLineForeColor {
  70. get { return (_colors[INDEX_CURRFORE].Color); }
  71. set {
  72. _colors[INDEX_CURRFORE].Dispose();
  73. _colors[INDEX_CURRFORE] = new ColorMaterial(value);
  74. }
  75. }
  76. public Color KeywordColor {
  77. get { return (_colors[INDEX_KEYWORD].Color); }
  78. set {
  79. _colors[INDEX_KEYWORD].Dispose();
  80. _colors[INDEX_KEYWORD] = new ColorMaterial(value);
  81. }
  82. }
  83. public Color CommentColor {
  84. get { return (_colors[INDEX_COMMENT].Color); }
  85. set {
  86. _colors[INDEX_COMMENT].Dispose();
  87. _colors[INDEX_COMMENT] = new ColorMaterial(value);
  88. }
  89. }
  90. public Color CodeColor {
  91. get { return (_colors[INDEX_CODE].Color); }
  92. set {
  93. _colors[INDEX_CODE].Dispose();
  94. _colors[INDEX_CODE] = new ColorMaterial(value);
  95. }
  96. }
  97. public Color StringColor {
  98. get { return (_colors[INDEX_STRING].Color); }
  99. set {
  100. _colors[INDEX_STRING].Dispose();
  101. _colors[INDEX_STRING] = new ColorMaterial(value);
  102. }
  103. }
  104. public Color this[ClassificationTag tag]
  105. {
  106. get
  107. {
  108. int idx = (int)tag;
  109. return (_colors[idx].Color);
  110. }
  111. }
  112. public Brush GetBrush(ClassificationTag tag) {
  113. return (_colors[(int)tag].Brush);
  114. }
  115. public Pen GetPen(ClassificationTag tag) {
  116. return (_colors[(int)tag].Pen);
  117. }
  118. #region Brushes
  119. public Brush BackgroundBrush {
  120. get { return (_colors[INDEX_BACKGROUND].Brush); }
  121. }
  122. public Brush CurrentLineBackBrush {
  123. get { return (_colors[INDEX_CURRBACK].Brush); }
  124. }
  125. public Brush CurrentLineForeBrush {
  126. get { return (_colors[INDEX_CURRFORE].Brush); }
  127. }
  128. public Brush KeywordBrush {
  129. get { return (_colors[INDEX_KEYWORD].Brush); }
  130. }
  131. public Brush CommentBrush {
  132. get { return (_colors[INDEX_COMMENT].Brush); }
  133. }
  134. public Brush CodeBrush {
  135. get { return (_colors[INDEX_CODE].Brush); }
  136. }
  137. public Brush StringBrush {
  138. get { return (_colors[INDEX_STRING].Brush); }
  139. }
  140. #endregion
  141. #region Pens
  142. public Pen BackgroundPen {
  143. get { return (_colors[INDEX_BACKGROUND].Pen); }
  144. }
  145. public Pen CurrentLineBackPen {
  146. get { return (_colors[INDEX_CURRBACK].Pen); }
  147. }
  148. public Pen CurrentLineForePen {
  149. get { return (_colors[INDEX_CURRFORE].Pen); }
  150. }
  151. public Pen KeywordPen {
  152. get { return (_colors[INDEX_KEYWORD].Pen); }
  153. }
  154. public Pen CommentPen {
  155. get { return (_colors[INDEX_COMMENT].Pen); }
  156. }
  157. public Pen CodePen {
  158. get { return (_colors[INDEX_CODE].Pen); }
  159. }
  160. public Pen StringPen {
  161. get { return (_colors[INDEX_STRING].Pen); }
  162. }
  163. #endregion
  164. class ColorMaterial
  165. {
  166. public Color Color;
  167. public Brush Brush;
  168. public Pen Pen;
  169. public ColorMaterial(Color color)
  170. {
  171. this.Color = color;
  172. this.Brush = new SolidBrush(color);
  173. this.Pen = new Pen(color);
  174. return;
  175. }
  176. public void Dispose()
  177. {
  178. this.Brush.Dispose();
  179. this.Pen.Dispose();
  180. }
  181. }
  182. }
  183. }