| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- //
- // System.Drawing.Text.XrImpl.FontCollection.cs
- //
- // Author:
- // Alexandre Pigolkine ([email protected])
- //
- //
- using System;
- using System.Text;
- using System.Runtime.InteropServices;
- using System.Collections;
- // FIXME: this factory is in the System.Drawing namespace to keep code in System.Drawing/Factories.cs as it is.
- // May be the following changes are needed:
- // - implement a new Factories in the System.Drawing.Text or
- // - modify code in existing Factories.cs to operate not only on System.Drawing namespace
- //
- namespace System.Drawing {
- namespace XrImpl {
- internal class FontCollectionFactory : System.Drawing.Text.IFontCollectionFactory {
- System.Drawing.Text.IFontCollection System.Drawing.Text.IFontCollectionFactory.InstalledFontCollection(){
- return new System.Drawing.Text.XrImpl.InstalledFontCollection();
- }
- System.Drawing.Text.IFontCollection System.Drawing.Text.IFontCollectionFactory.PrivateFontCollection() {
- return new System.Drawing.Text.XrImpl.PrivateFontCollection();
- }
- }
- }
- }
- namespace System.Drawing.Text {
- namespace XrImpl {
- internal sealed class InstalledFontCollection : IFontCollection
- {
- ArrayList families;
-
- public void Dispose () {
- }
- public InstalledFontCollection(){
- families = new ArrayList();
- IntPtr fontSetPtr = Xft.XftListFontFamilies(IntPtr.Zero, 0, 0, Fontconfig.FC_FAMILY_PTR, 0);
- if( fontSetPtr != IntPtr.Zero) {
- FcFontSet fontSet = (FcFontSet)Marshal.PtrToStructure( fontSetPtr, typeof(FcFontSet));
- if( fontSet.nfont > 0) {
- int[] fontFamilyNamePtrs = new int[fontSet.nfont];
- Marshal.Copy( fontSet.fonts, fontFamilyNamePtrs, 0, fontFamilyNamePtrs.Length);
- IntPtr namePtr = IntPtr.Zero;
- for( int i = 0; i < fontFamilyNamePtrs.Length; i++) {
- int res = Fontconfig.FcPatternGetString(fontFamilyNamePtrs[i], Fontconfig.FC_FAMILY_PTR, 0, ref namePtr);
- string name = Marshal.PtrToStringAnsi(namePtr);
- //Console.WriteLine("InstalledFont : " + name);
- families.Add( new FontFamily(name));
- }
- }
- }
- }
-
- public FontFamily[] Families {
- get { return (FontFamily[])families.ToArray(typeof(FontFamily)); }
- }
- }
-
- internal sealed class PrivateFontCollection : IFontCollection
- {
- public void Dispose () {
- }
- public PrivateFontCollection(){
- }
-
- public FontFamily[] Families {
- get { throw new NotImplementedException(); }
- }
- }
- }
- }
|