diff --git a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SpanNode.cs b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SpanNode.cs
index 50a338f793..0bfb0373a0 100644
--- a/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SpanNode.cs
+++ b/src/AddIns/Misc/HighlightingEditor/Project/Src/Nodes/SpanNode.cs
@@ -281,7 +281,7 @@ namespace ICSharpCode.SharpDevelop.AddIns.HighlightingEditor.Nodes
Properties properties = ((Properties)PropertyService.Get("ICSharpCode.TextEditor.Document.Document.DefaultDocumentAggregatorProperties", new Properties()));
////samBegin.Font = samEnd.Font = samCont.Font = ParseFont(properties.Get("DefaultFont", new Font("Courier New", 10).ToString()));
- samBegin.Font = samEnd.Font = samCont.Font = FontContainer.DefaultFont;
+ samBegin.Font = samEnd.Font = samCont.Font = ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.SharpDevelopTextEditorProperties.FontContainer.DefaultFont;
nameBox.Text = node.Name;
ruleBox.Text = node.Rule;
diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/DefaultTextEditorProperties.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/DefaultTextEditorProperties.cs
index 4fd6b4ea95..9dcc28a63c 100644
--- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/DefaultTextEditorProperties.cs
+++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/DefaultTextEditorProperties.cs
@@ -23,6 +23,16 @@ namespace ICSharpCode.TextEditor.Document
DocumentSelectionMode documentSelectionMode = DocumentSelectionMode.Normal;
Encoding encoding = System.Text.Encoding.UTF8;
BracketMatchingStyle bracketMatchingStyle = BracketMatchingStyle.After;
+ FontContainer fontContainer;
+ static Font DefaultFont;
+
+ public DefaultTextEditorProperties()
+ {
+ if (DefaultFont == null) {
+ DefaultFont = new Font("Courier New", 10);
+ }
+ this.fontContainer = new FontContainer(DefaultFont);
+ }
bool allowCaretBeyondEOL = false;
@@ -270,10 +280,16 @@ namespace ICSharpCode.TextEditor.Document
public Font Font {
get {
- return FontContainer.DefaultFont;
+ return fontContainer.DefaultFont;
}
set {
- FontContainer.DefaultFont = value;
+ fontContainer.DefaultFont = value;
+ }
+ }
+
+ public FontContainer FontContainer {
+ get {
+ return fontContainer;
}
}
@@ -293,6 +309,6 @@ namespace ICSharpCode.TextEditor.Document
set {
useCustomLine = value;
}
- }
+ }
}
}
diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/FontContainer.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/FontContainer.cs
index df544eb39d..960402d6c7 100644
--- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/FontContainer.cs
+++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/FontContainer.cs
@@ -23,77 +23,88 @@ namespace ICSharpCode.TextEditor.Document
///
public class FontContainer
{
- static Font defaultfont = null;
- static Font boldfont = null;
- static Font italicfont = null;
- static Font bolditalicfont = null;
+ Font defaultFont;
+ Font regularfont, boldfont, italicfont, bolditalicfont;
///
- /// The bold version of the base font
+ /// The scaled, bold version of the base font
///
- public static Font BoldFont {
+ public Font RegularFont {
+ get {
+ return regularfont;
+ }
+ }
+
+ ///
+ /// The scaled, bold version of the base font
+ ///
+ public Font BoldFont {
get {
- Debug.Assert(boldfont != null, "ICSharpCode.TextEditor.Document.FontContainer : boldfont == null");
return boldfont;
}
}
///
- /// The italic version of the base font
+ /// The scaled, italic version of the base font
///
- public static Font ItalicFont {
+ public Font ItalicFont {
get {
- Debug.Assert(italicfont != null, "ICSharpCode.TextEditor.Document.FontContainer : italicfont == null");
return italicfont;
}
}
///
- /// The bold/italic version of the base font
+ /// The scaled, bold/italic version of the base font
///
- public static Font BoldItalicFont {
+ public Font BoldItalicFont {
get {
- Debug.Assert(bolditalicfont != null, "ICSharpCode.TextEditor.Document.FontContainer : bolditalicfont == null");
return bolditalicfont;
}
}
+ static float twipsPerPixelY;
+
+ public static float TwipsPerPixelY {
+ get {
+ if (twipsPerPixelY == 0) {
+ using (Bitmap bmp = new Bitmap(1,1)) {
+ using (Graphics g = Graphics.FromImage(bmp)) {
+ twipsPerPixelY = 1440 / g.DpiY;
+ }
+ }
+ }
+ return twipsPerPixelY;
+ }
+ }
+
///
/// The base font
///
- public static Font DefaultFont {
+ public Font DefaultFont {
get {
- return defaultfont;
+ return defaultFont;
}
set {
-////// Alex: free resources properly
-// if (defaultfont!=null) defaultfont.Dispose();
- defaultfont = value;
-// if (boldfont!=null) boldfont.Dispose();
- boldfont = new Font(defaultfont, FontStyle.Bold);
-// if (italicfont!=null) italicfont.Dispose();
- italicfont = new Font(defaultfont, FontStyle.Italic);
-// if (bolditalicfont!=null) bolditalicfont.Dispose();
- bolditalicfont = new Font(defaultfont, FontStyle.Bold | FontStyle.Italic);
+ // 1440 twips is one inch
+ int pixelSize = (int)(value.SizeInPoints * 20 / TwipsPerPixelY);
+
+ defaultFont = value;
+ regularfont = new Font(value.FontFamily, pixelSize * TwipsPerPixelY / 20f, FontStyle.Regular);
+ boldfont = new Font(regularfont, FontStyle.Bold);
+ italicfont = new Font(regularfont, FontStyle.Italic);
+ bolditalicfont = new Font(regularfont, FontStyle.Bold | FontStyle.Italic);
}
}
-// static void CheckFontChange(object sender, PropertyEventArgs e)
-// {
-// if (e.Key == "DefaultFont") {
-// DefaultFont = ParseFont(e.NewValue.ToString());
-// }
-// }
-
public static Font ParseFont(string font)
{
string[] descr = font.Split(new char[]{',', '='});
return new Font(descr[1], Single.Parse(descr[3]));
}
- static FontContainer()
+ public FontContainer(Font defaultFont)
{
- DefaultFont = new Font("Courier New", 10);
+ this.DefaultFont = defaultFont;
}
}
}
diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/HighlightColor.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/HighlightColor.cs
index f464b7faf0..5b4ed7dc6b 100644
--- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/HighlightColor.cs
+++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/HighlightColor.cs
@@ -18,7 +18,7 @@ using System.Xml;
namespace ICSharpCode.TextEditor.Document
{
///
- /// A color used for highlighting
+ /// A color used for highlighting
///
public class HighlightColor
{
@@ -94,21 +94,20 @@ namespace ICSharpCode.TextEditor.Document
///
/// The font used
///
- public Font Font {
- get {
- if (Bold) {
- return Italic ? FontContainer.BoldItalicFont : FontContainer.BoldFont;
- }
- return Italic ? FontContainer.ItalicFont : FontContainer.DefaultFont;
+ public Font GetFont(FontContainer fontContainer)
+ {
+ if (Bold) {
+ return Italic ? fontContainer.BoldItalicFont : fontContainer.BoldFont;
}
+ return Italic ? fontContainer.ItalicFont : fontContainer.RegularFont;
}
Color ParseColorString(string colorName)
{
string[] cNames = colorName.Split('*');
- PropertyInfo myPropInfo = typeof(System.Drawing.SystemColors).GetProperty(cNames[0], BindingFlags.Public |
- BindingFlags.Instance |
- BindingFlags.Static);
+ PropertyInfo myPropInfo = typeof(System.Drawing.SystemColors).GetProperty(cNames[0], BindingFlags.Public |
+ BindingFlags.Instance |
+ BindingFlags.Static);
Color c = (Color)myPropInfo.GetValue(null, null);
if (cNames.Length == 2) {
@@ -247,7 +246,7 @@ namespace ICSharpCode.TextEditor.Document
this.systemColor = true;
systemColorName = systemColor;
-
+
systemBgColor = true;
systemBgColorName = systemBackgroundColor;
@@ -275,10 +274,10 @@ namespace ICSharpCode.TextEditor.Document
///
public override string ToString()
{
- return "[HighlightColor: Bold = " + Bold +
- ", Italic = " + Italic +
- ", Color = " + Color +
- ", BackgroundColor = " + BackgroundColor + "]";
+ return "[HighlightColor: Bold = " + Bold +
+ ", Italic = " + Italic +
+ ", Color = " + Color +
+ ", BackgroundColor = " + BackgroundColor + "]";
}
}
}
diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/TextWord.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/TextWord.cs
index 521be9f42e..77dbcd33b6 100644
--- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/TextWord.cs
+++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/TextWord.cs
@@ -43,10 +43,9 @@ namespace ICSharpCode.TextEditor.Document
base.SyntaxColor = color;
}
- public override Font Font {
- get {
- return null;
- }
+ public override Font GetFont(FontContainer fontContainer)
+ {
+ return null;
}
public override TextWordType Type {
@@ -73,10 +72,9 @@ namespace ICSharpCode.TextEditor.Document
base.SyntaxColor = color;
}
- public override Font Font {
- get {
- return null;
- }
+ public override Font GetFont(FontContainer fontContainer)
+ {
+ return null;
}
public override TextWordType Type {
@@ -160,10 +158,9 @@ namespace ICSharpCode.TextEditor.Document
}
}
- public virtual Font Font {
- get {
- return color.Font;
- }
+ public virtual Font GetFont(FontContainer fontContainer)
+ {
+ return color.GetFont(fontContainer);
}
public Color Color {
@@ -175,6 +172,24 @@ namespace ICSharpCode.TextEditor.Document
}
}
+ public bool Bold {
+ get {
+ if (color == null)
+ return false;
+ else
+ return color.Bold;
+ }
+ }
+
+ public bool Italic {
+ get {
+ if (color == null)
+ return false;
+ else
+ return color.Italic;
+ }
+ }
+
public HighlightColor SyntaxColor {
get {
return color;
@@ -215,7 +230,7 @@ namespace ICSharpCode.TextEditor.Document
///
public override string ToString()
{
- return "[TextWord: Word = " + Word + ", Font = " + Font + ", Color = " + Color + "]";
+ return "[TextWord: Word = " + Word + ", Color = " + Color + "]";
}
}
}
diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/ITextEditorProperties.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/ITextEditorProperties.cs
index 5da0871512..d98ffe9d4a 100644
--- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/ITextEditorProperties.cs
+++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/ITextEditorProperties.cs
@@ -148,6 +148,10 @@ namespace ICSharpCode.TextEditor.Document
set;
}
+ FontContainer FontContainer {
+ get;
+ }
+
BracketMatchingStyle BracketMatchingStyle { // is wrapped in text editor control
get;
set;
diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/DrawableLine.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/DrawableLine.cs
index 16dcf8745e..6d14585b96 100644
--- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/DrawableLine.cs
+++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/DrawableLine.cs
@@ -53,7 +53,7 @@ namespace ICSharpCode.TextEditor
} else if (word.Type == TextWordType.Tab) {
words.Add(SimpleTextWord.Tab);
} else {
- words.Add(new SimpleTextWord(TextWordType.Word, word.Word, word.Font.Bold, word.Color));
+ words.Add(new SimpleTextWord(TextWordType.Word, word.Word, word.Bold, word.Color));
}
}
} else {
diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/GutterMargin.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/GutterMargin.cs
index 9bd688d29e..8b52673cb7 100644
--- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/GutterMargin.cs
+++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/GutterMargin.cs
@@ -84,7 +84,7 @@ namespace ICSharpCode.TextEditor
if (curLine < textArea.Document.TotalNumberOfLines) {
g.DrawString((curLine + 1).ToString(),
- lineNumberPainterColor.Font,
+ lineNumberPainterColor.GetFont(TextEditorProperties.FontContainer),
drawBrush,
backgroundRectangle,
numberStringFormat);
diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControl.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControl.cs
index 21f90ef19d..e3f387140d 100644
--- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControl.cs
+++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControl.cs
@@ -312,6 +312,7 @@ namespace ICSharpCode.TextEditor
float fontHeight = Font.GetHeight(g);
// bool gotNonWhitespace = false;
curTabIndent = 0;
+ FontContainer fontContainer = TextEditorProperties.FontContainer;
foreach (TextWord word in line.Words) {
switch (word.Type) {
case TextWordType.Space:
@@ -331,7 +332,7 @@ namespace ICSharpCode.TextEditor
// gotNonWhitespace = true;
// curTabIndent += TabIndent * primaryTextArea.TextArea.TextView.GetWidth(' ');
// }
- SizeF drawingSize = g.MeasureString(word.Word, word.Font, new SizeF(maxWidth, fontHeight * 100), printingStringFormat);
+ SizeF drawingSize = g.MeasureString(word.Word, word.GetFont(fontContainer), new SizeF(maxWidth, fontHeight * 100), printingStringFormat);
Advance(ref xPos, ref yPos, maxWidth, drawingSize.Width, fontHeight);
break;
}
@@ -346,6 +347,7 @@ namespace ICSharpCode.TextEditor
// bool gotNonWhitespace = false;
curTabIndent = 0 ;
+ FontContainer fontContainer = TextEditorProperties.FontContainer;
foreach (TextWord word in line.Words) {
switch (word.Type) {
case TextWordType.Space:
@@ -365,8 +367,8 @@ namespace ICSharpCode.TextEditor
// gotNonWhitespace = true;
// curTabIndent += TabIndent * primaryTextArea.TextArea.TextView.GetWidth(' ');
// }
- g.DrawString(word.Word, word.Font, BrushRegistry.GetBrush(word.Color), xPos + margin.X, yPos);
- SizeF drawingSize = g.MeasureString(word.Word, word.Font, new SizeF(margin.Width, fontHeight * 100), printingStringFormat);
+ g.DrawString(word.Word, word.GetFont(fontContainer), BrushRegistry.GetBrush(word.Color), xPos + margin.X, yPos);
+ SizeF drawingSize = g.MeasureString(word.Word, word.GetFont(fontContainer), new SizeF(margin.Width, fontHeight * 100), printingStringFormat);
Advance(ref xPos, ref yPos, margin.Width, drawingSize.Width, fontHeight);
break;
}
diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextView.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextView.cs
index 8fe522b151..aadbbe8f05 100644
--- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextView.cs
+++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextView.cs
@@ -33,14 +33,14 @@ namespace ICSharpCode.TextEditor
{
int fontHeight;
//Hashtable charWitdh = new Hashtable();
- StringFormat measureStringFormat = (StringFormat)StringFormat.GenericTypographic.Clone();
+ //StringFormat measureStringFormat = (StringFormat)StringFormat.GenericTypographic.Clone();
Highlight highlight;
int physicalColumn = 0; // used for calculating physical column during paint
public void Dispose()
{
measureCache.Clear();
- measureStringFormat.Dispose();
+ //measureStringFormat.Dispose();
}
public Highlight Highlight {
@@ -101,11 +101,11 @@ namespace ICSharpCode.TextEditor
public TextView(TextArea textArea) : base(textArea)
{
- measureStringFormat.LineAlignment = StringAlignment.Near;
+ /*measureStringFormat.LineAlignment = StringAlignment.Near;
measureStringFormat.FormatFlags = StringFormatFlags.MeasureTrailingSpaces |
StringFormatFlags.FitBlackBox |
StringFormatFlags.NoWrap |
- StringFormatFlags.NoClip;
+ StringFormatFlags.NoClip;*/
base.Cursor = Cursors.IBeam;
OptionsChanged();
@@ -113,8 +113,9 @@ namespace ICSharpCode.TextEditor
static int GetFontHeight(Font font)
{
- int h = font.Height;
- return (h < 16) ? h + 1 : h;
+ int height1 = TextRenderer.MeasureText("_", font).Height;
+ int height2 = (int)Math.Ceiling(font.GetHeight());
+ return Math.Max(height1, height2) + 1;
}
float spaceWidth;
@@ -145,9 +146,9 @@ namespace ICSharpCode.TextEditor
public void OptionsChanged()
{
- this.lastFont = TextEditorProperties.Font;
+ this.lastFont = TextEditorProperties.FontContainer.RegularFont;
this.fontHeight = GetFontHeight(lastFont);
- // use mininum width - in some fonts, space has no width but kerning is used instead
+ // use minimum width - in some fonts, space has no width but kerning is used instead
// -> DivideByZeroException
this.spaceWidth = Math.Max(GetWidth(' ', lastFont), 1);
// tab should have the width of 4*'x'
@@ -162,7 +163,7 @@ namespace ICSharpCode.TextEditor
}
// Just to ensure that fontHeight and char widths are always correct...
- if (lastFont != TextEditorProperties.Font) {
+ if (lastFont != TextEditorProperties.FontContainer.RegularFont) {
OptionsChanged();
base.TextArea.BeginInvoke(new MethodInvoker(base.TextArea.Refresh));
}
@@ -307,11 +308,11 @@ namespace ICSharpCode.TextEditor
g.FillRectangle(backgroundBrush, rect);
physicalColumn += text.Length;
- g.DrawString(text,
- textArea.Font,
- BrushRegistry.GetBrush(drawSelected ? selectionColor.Color : Color.Gray),
- rect,
- measureStringFormat);
+ DrawString(g,
+ text,
+ textArea.Font,
+ drawSelected ? selectionColor.Color : Color.Gray,
+ rect.X, rect.Y);
g.DrawRectangle(BrushRegistry.GetPen(drawSelected ? Color.DarkGray : Color.Gray), rect.X, rect.Y, rect.Width, rect.Height);
// Bugfix for the problem - of overdrawn right rectangle lines.
@@ -411,6 +412,7 @@ namespace ICSharpCode.TextEditor
TextWord currentWord;
TextWord nextCurrentWord = null;
+ FontContainer fontContainer = TextEditorProperties.FontContainer;
for (int wordIdx = 0; wordIdx < currentLine.Words.Count; wordIdx++) {
currentWord = currentLine.Words[wordIdx];
if (currentWordOffset < startColumn) {
@@ -534,7 +536,7 @@ namespace ICSharpCode.TextEditor
float wordWidth = DrawDocumentWord(g,
currentWord.Word,
new Point((int)physicalXPos, lineRectangle.Y),
- currentWord.Font,
+ currentWord.GetFont(fontContainer),
wordForeColor,
wordBackBrush);
wordRectangle = new RectangleF(physicalXPos, lineRectangle.Y, wordWidth, lineRectangle.Height);
@@ -598,12 +600,12 @@ namespace ICSharpCode.TextEditor
g.FillRectangle(backBrush, //num == 0 ? Brushes.LightBlue : num == 1 ? Brushes.LightGreen : Brushes.Yellow,
new RectangleF(position.X, position.Y, (float)Math.Ceiling(wordWidth + 1), FontHeight));
- g.DrawString(word,
- font,
- BrushRegistry.GetBrush(foreColor),
- position.X,
- position.Y,
- measureStringFormat);
+ DrawString(g,
+ word,
+ font,
+ foreColor,
+ position.X,
+ position.Y);
return wordWidth;
}
@@ -625,15 +627,15 @@ namespace ICSharpCode.TextEditor
}
}
- Dictionary measureCache = new Dictionary();
+ Dictionary measureCache = new Dictionary();
// split words after 1000 characters. Fixes GDI+ crash on very longs words, for example
// a 100 KB Base64-file without any line breaks.
const int MaximumWordLength = 1000;
- float MeasureStringWidth(Graphics g, string word, Font font)
+ int MeasureStringWidth(Graphics g, string word, Font font)
{
- float width;
+ int width;
if (word == null || word.Length == 0)
return 0;
@@ -659,15 +661,12 @@ namespace ICSharpCode.TextEditor
// txt.GetPositionFromCharIndex(txt.SelectionStart)
// (Verdana 10, highlighting makes GetP... bold) -> note the space between 'x' and '('
// this also fixes "jumping" characters when selecting in non-monospace fonts
- Rectangle rect = new Rectangle(0, 0, 32768, 1000);
- CharacterRange[] ranges = { new CharacterRange(0, word.Length) };
- Region[] regions = new Region[1];
- measureStringFormat.SetMeasurableCharacterRanges (ranges);
- regions = g.MeasureCharacterRanges (word, font, rect, measureStringFormat);
- width = regions[0].GetBounds(g).Right;
+ width = TextRenderer.MeasureText(g, word, font, new Size(short.MaxValue, short.MaxValue), textFormatFlags).Width;
measureCache.Add(new WordFontPair(word, font), width);
return width;
}
+
+ const TextFormatFlags textFormatFlags = TextFormatFlags.NoPadding | TextFormatFlags.NoPrefix;
#endregion
#region Conversion Functions
@@ -803,7 +802,7 @@ namespace ICSharpCode.TextEditor
paintPos += (column - oldColumn) * spaceWidth;
break;
default:
- paintPos += GetWidth(ch, TextEditorProperties.Font);
+ paintPos += GetWidth(ch, TextEditorProperties.FontContainer.RegularFont);
++column;
break;
}
@@ -877,7 +876,7 @@ namespace ICSharpCode.TextEditor
paintPos += (column - oldColumn) * WideSpaceWidth;
break;
default:
- paintPos += GetWidth(ch, TextEditorProperties.Font);
+ paintPos += GetWidth(ch, TextEditorProperties.FontContainer.RegularFont);
++column;
break;
}
@@ -905,6 +904,7 @@ namespace ICSharpCode.TextEditor
if (words == null) return 0;
int wordCount = words.Count;
int wordOffset = 0;
+ FontContainer fontContainer = TextEditorProperties.FontContainer;
for (int i = 0; i < wordCount; i++) {
TextWord word = words[i];
if (wordOffset >= end)
@@ -924,7 +924,7 @@ namespace ICSharpCode.TextEditor
int wordStart = Math.Max(wordOffset, start);
int wordLength = Math.Min(wordOffset + word.Length, end) - wordStart;
string text = Document.GetText(currentLine.Offset + wordStart, wordLength);
- drawingPos += MeasureStringWidth(g, text, word.Font ?? TextEditorProperties.Font);
+ drawingPos += MeasureStringWidth(g, text, word.GetFont(fontContainer) ?? fontContainer.RegularFont);
break;
}
wordOffset += word.Length;
@@ -1023,7 +1023,7 @@ namespace ICSharpCode.TextEditor
drawingPos += CountColumns(ref column, foldEnd, f.StartColumn, f.StartLine, g);
foldEnd = f.EndColumn;
column += f.FoldText.Length;
- drawingPos += MeasureStringWidth(g, f.FoldText, TextEditorProperties.Font);
+ drawingPos += MeasureStringWidth(g, f.FoldText, TextEditorProperties.FontContainer.RegularFont);
}
drawingPos += CountColumns(ref column, foldEnd, logicalColumn, logicalLine, g);
g.Dispose();
@@ -1038,33 +1038,38 @@ namespace ICSharpCode.TextEditor
g.DrawRectangle(Pens.Blue, rect);
}
+ void DrawString(Graphics g, string text, Font font, Color color, float x, float y)
+ {
+ TextRenderer.DrawText(g, text, font, new Point((int)x, (int)y), color, textFormatFlags);
+ }
+
void DrawInvalidLineMarker(Graphics g, float x, float y)
{
HighlightColor invalidLinesColor = textArea.Document.HighlightingStrategy.GetColorFor("InvalidLines");
- g.DrawString("~", invalidLinesColor.Font, BrushRegistry.GetBrush(invalidLinesColor.Color), x, y, measureStringFormat);
+ DrawString(g, "~", invalidLinesColor.GetFont(TextEditorProperties.FontContainer), invalidLinesColor.Color, x, y);
}
void DrawSpaceMarker(Graphics g, Color color, float x, float y)
{
HighlightColor spaceMarkerColor = textArea.Document.HighlightingStrategy.GetColorFor("SpaceMarkers");
- g.DrawString("\u00B7", spaceMarkerColor.Font, BrushRegistry.GetBrush(color), x, y, measureStringFormat);
+ DrawString(g, "\u00B7", spaceMarkerColor.GetFont(TextEditorProperties.FontContainer), color, x, y);
}
void DrawTabMarker(Graphics g, Color color, float x, float y)
{
HighlightColor tabMarkerColor = textArea.Document.HighlightingStrategy.GetColorFor("TabMarkers");
- g.DrawString("\u00BB", tabMarkerColor.Font, BrushRegistry.GetBrush(color), x, y, measureStringFormat);
+ DrawString(g, "\u00BB", tabMarkerColor.GetFont(TextEditorProperties.FontContainer), color, x, y);
}
float DrawEOLMarker(Graphics g, Color color, Brush backBrush, float x, float y)
{
- float width = GetWidth('\u00B6', TextEditorProperties.Font);
+ HighlightColor eolMarkerColor = textArea.Document.HighlightingStrategy.GetColorFor("EOLMarkers");
+
+ float width = GetWidth('\u00B6', eolMarkerColor.GetFont(TextEditorProperties.FontContainer));
g.FillRectangle(backBrush,
new RectangleF(x, y, width, fontHeight));
- HighlightColor eolMarkerColor = textArea.Document.HighlightingStrategy.GetColorFor("EOLMarkers");
-
- g.DrawString("\u00B6", eolMarkerColor.Font, BrushRegistry.GetBrush(color), x, y, measureStringFormat);
+ DrawString(g, "\u00B6", eolMarkerColor.GetFont(TextEditorProperties.FontContainer), color, x, y);
return width;
}
diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Util/RtfWriter.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Util/RtfWriter.cs
index d639fae130..1ecbb79cd8 100644
--- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Util/RtfWriter.cs
+++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Util/RtfWriter.cs
@@ -51,7 +51,7 @@ namespace ICSharpCode.TextEditor.Util
static void BuildFontTable(IDocument doc, StringBuilder rtf)
{
rtf.Append(@"{\fonttbl");
- rtf.Append(@"{\f0\fmodern\fprq1\fcharset0 " + FontContainer.DefaultFont.Name + ";}");
+ rtf.Append(@"{\f0\fmodern\fprq1\fcharset0 " + doc.TextEditorProperties.Font.Name + ";}");
rtf.Append("}");
}
@@ -107,28 +107,28 @@ namespace ICSharpCode.TextEditor.Util
escapeSequence = true;
}
- if (oldItalic != word.Font.Italic) {
- if (word.Font.Italic) {
+ if (oldItalic != word.Italic) {
+ if (word.Italic) {
rtf.Append(@"\i");
} else {
rtf.Append(@"\i0");
}
- oldItalic = word.Font.Italic;
+ oldItalic = word.Italic;
escapeSequence = true;
}
- if (oldBold != word.Font.Bold) {
- if (word.Font.Bold) {
+ if (oldBold != word.Bold) {
+ if (word.Bold) {
rtf.Append(@"\b");
} else {
rtf.Append(@"\b0");
}
- oldBold = word.Font.Bold;
+ oldBold = word.Bold;
escapeSequence = true;
}
if (firstLine) {
- rtf.Append(@"\f0\fs" + (FontContainer.DefaultFont.Size * 2));
+ rtf.Append(@"\f0\fs" + (textArea.TextEditorProperties.Font.Size * 2));
firstLine = false;
}
if (escapeSequence) {
diff --git a/src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/Nodes/BookmarkNode.cs b/src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/Nodes/BookmarkNode.cs
index b4f211861a..13d5aa906e 100644
--- a/src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/Nodes/BookmarkNode.cs
+++ b/src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/Nodes/BookmarkNode.cs
@@ -133,7 +133,7 @@ namespace ICSharpCode.SharpDevelop.Bookmarks
xPos += DrawDocumentWord(g,
word.Word,
new PointF(xPos, yPos),
- word.Font.Style == FontStyle.Bold ? BoldMonospacedFont : MonospacedFont,
+ word.Bold ? BoldMonospacedFont : MonospacedFont,
GetTextColor(state, word.Color)
);
logicalX += word.Word.Length;
diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Dialogs/ExportProjectToHtmlDialog.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Dialogs/ExportProjectToHtmlDialog.cs
index 291bab08ac..21dacec15e 100644
--- a/src/Main/Base/Project/Src/TextEditor/Gui/Dialogs/ExportProjectToHtmlDialog.cs
+++ b/src/Main/Base/Project/Src/TextEditor/Gui/Dialogs/ExportProjectToHtmlDialog.cs
@@ -248,16 +248,16 @@ namespace ICSharpCode.SharpDevelop.Gui
Color c = word.Color;
string colorstr = c.R + ", " + c.G + ", " + c.B;
- if (word.Font.Italic) {
+ if (word.Italic) {
colorstr = "i" + colorstr;
}
- if (word.Font.Bold) {
+ if (word.Bold) {
colorstr = "b" + colorstr;
}
if (Spans[colorstr] == null) {
Spans[colorstr] = "span" + ++curSpanNumber;
}
- bool newColor = c != curColor || oldItalic != word.Font.Italic || oldBold != word.Font.Bold;
+ bool newColor = c != curColor || oldItalic != word.Italic || oldBold != word.Bold;
if (newColor) {
if (!firstSpan) {
curFileStream.Write("" );
@@ -271,8 +271,8 @@ namespace ICSharpCode.SharpDevelop.Gui
if (newColor) {
curColor = c;
- oldItalic = word.Font.Italic;
- oldBold = word.Font.Bold;
+ oldItalic = word.Italic;
+ oldBold = word.Bold;
}
break;
}
diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextEditorProperties.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextEditorProperties.cs
index c471c4fbb6..6cb43fd084 100644
--- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextEditorProperties.cs
+++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextEditorProperties.cs
@@ -17,20 +17,20 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
{
public class SharpDevelopTextEditorProperties : ITextEditorProperties
{
- static
- Properties properties;
+ static Properties properties;
+ static FontContainer fontContainer;
static SharpDevelopTextEditorProperties()
{
Properties properties2 = ((Properties)PropertyService.Get("ICSharpCode.TextEditor.Document.Document.DefaultDocumentAggregatorProperties", new Properties()));
- FontContainer.DefaultFont = FontContainer.ParseFont(properties2.Get("DefaultFont", ResourceService.DefaultMonospacedFont.ToString()));
+ fontContainer = new FontContainer(FontContainer.ParseFont(properties2.Get("DefaultFont", ResourceService.DefaultMonospacedFont.ToString())));
properties2.PropertyChanged += new PropertyChangedEventHandler(CheckFontChange);
}
static void CheckFontChange(object sender, PropertyChangedEventArgs e)
{
if (e.Key == "DefaultFont") {
- FontContainer.DefaultFont = FontContainer.ParseFont(e.NewValue.ToString());
+ fontContainer.DefaultFont = FontContainer.ParseFont(e.NewValue.ToString());
}
}
@@ -274,11 +274,21 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
public Font Font {
get {
- return FontContainer.DefaultFont;
+ return fontContainer.DefaultFont;
}
set {
properties.Set("DefaultFont", value.ToString());
- FontContainer.DefaultFont = value;
+ fontContainer.DefaultFont = value;
+ }
+ }
+ FontContainer ITextEditorProperties.FontContainer {
+ get {
+ return fontContainer;
+ }
+ }
+ public static FontContainer FontContainer {
+ get {
+ return fontContainer;
}
}