@ -7,6 +7,7 @@
using System ;
using System ;
using System.Collections ;
using System.Collections ;
using System.Collections.Generic ;
using System.Drawing ;
using System.Drawing ;
using System.Drawing.Drawing2D ;
using System.Drawing.Drawing2D ;
@ -18,44 +19,47 @@ namespace ICSharpCode.TextEditor
/// </summary>
/// </summary>
public class BrushRegistry
public class BrushRegistry
{
{
static Hashtable brushes = new Hashtable ( ) ;
static Dictionary < Color , Brush > brushes = new Dictionary < Color , Brush > ( ) ;
static Hashtable pens = new Hashtable ( ) ;
static Dictionary < Color , Pen > pens = new Dictionary < Color , Pen > ( ) ;
static Hashtable dotPens = new Hashtable ( ) ;
static Dictionary < Color , Pen > dotPens = new Dictionary < Color , Pen > ( ) ;
public static Brush GetBrush ( Color color )
public static Brush GetBrush ( Color color )
{
{
if ( ! brushes . Contains ( color ) ) {
lock ( brushes ) {
Brush newBrush = new SolidBrush ( color ) ;
Brush brush ;
brushes . Add ( color , newBrush ) ;
if ( ! brushes . TryGetValue ( color , out brush ) ) {
return newBrush ;
brush = new SolidBrush ( color ) ;
brushes . Add ( color , brush ) ;
}
return brush ;
}
}
return brushes [ color ] as Brush ;
}
}
public static Pen GetPen ( Color color )
public static Pen GetPen ( Color color )
{
{
if ( ! pens . Contains ( color ) ) {
lock ( pens ) {
Pen newPen = new Pen ( color ) ;
Pen pen ;
pens . Add ( color , newPen ) ;
if ( ! pens . TryGetValue ( color , out pen ) ) {
return newPen ;
pen = new Pen ( color ) ;
pens . Add ( color , pen ) ;
}
return pen ;
}
}
return pens [ color ] as Pen ;
}
}
public static Pen GetDotPen ( Color bgColor , Color fgColor )
static readonly float [ ] dotPattern = { 1 , 1 , 1 , 1 } ;
public static Pen GetDotPen ( Color color )
{
{
bool containsBgColor = dotPens . Contains ( bgColor ) ;
lock ( dotPens ) {
if ( ! containsBgColor | | ! ( ( Hashtable ) dotPens [ bgColor ] ) . Contains ( fgColor ) ) {
Pen pen ;
if ( ! containsBgColor ) {
if ( ! dotPens . TryGetValue ( color , out pen ) ) {
dotPens [ bgColor ] = new Hashtable ( ) ;
pen = new Pen ( color ) ;
pen . DashPattern = dotPattern ;
dotPens . Add ( color , pen ) ;
}
}
return pen ;
HatchBrush hb = new HatchBrush ( HatchStyle . Percent50 , bgColor , fgColor ) ;
Pen newPen = new Pen ( hb ) ;
( ( Hashtable ) dotPens [ bgColor ] ) [ fgColor ] = newPen ;
return newPen ;
}
}
return ( ( Hashtable ) dotPens [ bgColor ] ) [ fgColor ] as Pen ;
}
}
}
}
}
}