Is there a way in SWT to get a monospaced font simply, that works across various operating systems?
For example. this works on Linux, but not Windows:
Font mono = new Font(parent.getDisplay(), "Mono", 10, SWT.NONE);
or do I need to have a method that tries loading varying fonts (Consolas, Terminal, Monaco, Mono) until one isn't null? Alternatively I could specify it in a properties file on startup.
I tried getting the system font from Display, but that wasn't monospaced.
Basically, for a font to be considered monospace, every glyph has to be the same width, right down to the exact same number of units. This includes even glyphs that should normally be zero width, or a certain width (such as em spaces, em dashes, etc).
Summary. The only monospaced TrueType fonts shipped by Microsoft are Courier New, which shipped with Windows 3.1, and Lucida Sans Typewriter, which was included in the TrueType Font Pack.
The system fonts Courier, Menlo, and Consolas are examples of monospaced fonts , so named because every character is the same width. When the characters vary in width, the font is called proportional .
I spent a while bashing my head against this one until I realised that obviously eclipse must have access to a monospace font for use in its text fields, console etc. A little digging turned up:
Font terminalFont = JFaceResources.getFont(JFaceResources.TEXT_FONT);
Which works if all you're interested in is getting hold of some monospace font.
Edit: Or based on @ctron's comment:
Font font = JFaceResources.getTextFont();
Edit: Caveat (based on @Lii's comment): this will get you the configured Text Font, which can be overriden by the user and may not be a monospace font. However, it will be consistent with, e.g., the font used in the editor and console which is probably what you want.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With