reading available fonts on system
Posted:
Sat Sep 08, 2018 7:49 am
by plantenkennis
Hello,
Is it possible to check what fonts are available on a system. I want to put all fonts in an array, so the user can choose which font to use for printing some data.
I am looking for some function like "aFonts := ReadFonts()"
Re: reading available fonts on system
Posted:
Sat Sep 08, 2018 10:04 am
by Antonio Linares
Re: reading available fonts on system
Posted:
Sat Sep 08, 2018 10:08 am
by Enrico Maria Giordano
Ops, sorry. Wrong forum.
EMG
Re: reading available fonts on system
Posted:
Sun Sep 09, 2018 8:07 am
by Antonio Linares
This function ChooseFont() is working fine
I have implemented it as modal. Its easy to implement it as non modal too.
- Code: Select all Expand view
#include "FiveMac.ch"
function Main()
MsgInfo( ChooseFont() )
return nil
#pragma BEGINDUMP
#include <fivemac.h>
@interface FontPanelController : NSWindowController <NSWindowDelegate>
{
@public NSFont * font;
@public NSFont * newFont;
}
-( void ) changeFont: ( id ) sender;
-( void ) windowWillClose: ( id ) sender;
@end
@implementation FontPanelController
-( void ) changeFont: ( id ) sender
{
newFont = [ sender convertFont: font ];
}
- ( void ) windowWillClose: ( id ) sender
{
[ NSApp abortModal ];
hb_retc( [ [ ( newFont ? newFont: font ) displayName ] cStringUsingEncoding : NSWindowsCP1252StringEncoding ] );
}
@end
HB_FUNC( CHOOSEFONT )
{
NSFontManager * fontManager = [ NSFontManager sharedFontManager ];
NSFontPanel * fontPanel = [ fontManager fontPanel:YES ];
FontPanelController * fontPanelController = [ [ FontPanelController alloc ] init ];
[ fontPanel setDelegate: fontPanelController ];
fontPanelController->font = [ NSFont systemFontOfSize : 10 ];
[ fontPanel makeKeyAndOrderFront: fontPanel ];
[ NSApp runModalForWindow: fontPanel ];
}
#pragma ENDDUMP
Re: reading available fonts on system
Posted:
Sun Sep 09, 2018 8:16 am
by Antonio Linares
René,
I have added this new function ChooseFont() to FiveMac:
https://bitbucket.org/fivetech/fivemac/commits/b2fecc39e050a61cebc991ff8ecfc3d9d06858f3So simply download the new FiveMac libs and try this example:
https://bitbucket.org/fivetech/fivemac/src/master/lib/libfive.ahttps://bitbucket.org/fivetech/fivemac/src/master/lib/libfivec.a- Code: Select all Expand view
#include "FiveMac.ch"
function Main()
MsgInfo( ChooseFont() )
return nil
Will users ever notice that we are giving FiveMac for free... ?
Re: reading available fonts on system
Posted:
Sun Sep 09, 2018 8:27 am
by Enrico Maria Giordano
So my suggestion was right, after all.
EMG
Re: reading available fonts on system
Posted:
Tue Sep 11, 2018 7:56 pm
by plantenkennis
Hello Antonio,
Thank you very much for this implementation, it looks very nice and easy to use.
But what I mean is a function that only puts the names of the fonts in an array. Than I can use that array in a COMBOBOX and use the name of the font in a print routine. Simular as in Word where the user can choose the font from a combobox and than the fontsize from another combobox.
Always thankful for all the help you give. If you need some financial support, please let me know.
Re: reading available fonts on system
Posted:
Wed Sep 12, 2018 6:55 am
by Antonio Linares
René,
This is function FM_AvailableFonts() that returns an array with all available fonts names:
- Code: Select all Expand view
HB_FUNC( FM_AVAILABLEFONTS )
{
NSArray * aFonts = [ [ NSFontManager sharedFontManager ] availableFonts ];
int i;
hb_reta( [ aFonts count ] );
for( i = 0; i < [ aFonts count ]; i++ )
hb_storvc( [ ( NSString * ) [ aFonts objectAtIndex: i ] cStringUsingEncoding : NSWindowsCP1252StringEncoding ], -1, i + 1 );
}
This is an example of use:
- Code: Select all Expand view
#include "FiveMac.ch"
function Main()
local oDlg, cVar
local aFonts := FM_availableFonts()
DEFINE DIALOG oDlg TITLE "Available fonts" SIZE 300, 300
@ 200, 50 COMBOBOX cVar ITEMS aFonts SIZE 200, 20 OF oDlg
ACTIVATE DIALOG oDlg CENTERED
return nil
Changes already commited to the FiveMac repository:
https://bitbucket.org/fivetech/fivemac/commits/18a9c6d00359e72c8215121b8660769b0c0b51d1FiveMac modified C library already available from here:
https://bitbucket.org/fivetech/fivemac/src/master/lib/libfivec.a
Re: reading available fonts on system
Posted:
Fri Sep 21, 2018 6:02 am
by plantenkennis
Hello Antonio,
Sorry for the late response, I had a small vacation (needed it)
Thank you very much, this is just what I was looking for.