class:: Font
summary:: A font object
categories:: GUI>Accessories

description::
This is the object you pass to other gui objects to set their font name or size.


classmethods::

private::key

method:: new


argument:: name
An instance of link::Classes/String::. Must coincide with the name of a font on the system. See link::#*availableFonts::.

argument:: size
An instance of link::Classes/Float::.

argument:: bold
A Boolean.

argument:: italic
A Boolean.

argument:: usePointSize
A Boolean. Whether to regard the strong::size:: argument as point-size - adapting to the screen resolution.

discussion::
Example:
code::
g = Font("Helvetica", 12);
::

method:: availableFonts
returns::
link::Classes/Array:: of the available fonts.

method:: antiAliasing
argument:: flag
An instance of link::Classes/Boolean::. Default value is code::false::.

method:: smoothing
argument:: flag
An instance of link::Classes/Boolean::. Default value is code::false::.

method:: defaultSansFace
returns::
The default sans serif face Font.

method:: defaultSerifFace
returns::
The default serif face Font.

method:: defaultMonoFace
returns::
The default monospace face Font.

method:: default
The global default Font.

Setting this property is equivalent to code::Font.setDefault(font)::. See link::#*setDefault:: for details.

method:: setDefault
Sets the global default font. Properties of the code::font:: argument will be combined with properties of the default system font, and those of individual views.

Optionally, a class can be given, so only views of that class will be affected.

Note that this will immediately affect any existing views.

argument:: font
An instance of Font.

argument:: class
A Class (either View or one of its subclasses), or code::nil::.

method:: sansSerif
Create a new sans serif face Font.

method:: monospace
Create a new monospace face Font.

method:: serif
Create a new serif face Font.

instancemethods::

method:: name
Gets/sets the name of the font.
argument:: value
An instance of link::Classes/String::.

method:: size
Gets/sets the size of the font.
Setting this variable is always considered as setting the link::#-pixelSize::, while getting it will return any size set. See link::#-hasPointSize:: for distinction.

argument:: pixelSize
A Float.

method:: hasPointSize
A Boolean variable indicating whether the link::#-size:: is regarded as pixel-size (precise amount of pixels), or point-size (adapting to screen resolution).
To change this, you need to set the size via link::#-pixelSize:: or link::#-pointSize::.

method:: pixelSize
Gets or sets the pixel-size of the font. When getting, returns nil if the font has point-size instead. See link::#-hasPointSize:: for distinction.
Argument::
	Any number, but note that floats will be rounded to integer values when setting pixel-size.


method:: pointSize
Gets or sets the point-size of the font. When getting, returns nil if the font has pixel-size instead. See link::#-hasPointSize:: for distinction.
Argument::
	A Float.

method:: setDefault
Makes this instance of Font the default.

This is equivalent to calling link::#*setDefault:: with this Font and the given class as arguments.


method:: storeArgs
(?)
Returns:: an link::Classes/Array::, code:: [ name, size ] ::.

method:: boldVariant

note:: On the Cocoa GUI it appends teletype::"-Bold":: to the name. This is only useful for fonts that have bold
variants.
::
returns::
Bold variant of the Font.


examples::

code::
(
w = Window.new.front;
t = StaticText(w, w.view.bounds).align_(\center);
t.string=" SUPERCOLLIDER";
)
t.font = Font("Monaco", 24);


(
var updateFont;
w = Window("Fonts", Rect(150, Window.screenBounds.height - 500, 400, 400)).front;
w.view.decorator = FlowLayout(w.view.bounds);
StaticText.new(w, Rect(5, 0, 30, 20)).string_("Font").align_(\right);
m = PopUpMenu(w, Rect(40, 0, 250, 20));
m.items = Font.availableFonts;

StaticText.new(w, Rect(290, 0, 28, 20)).string_("Size").align_(\right);
y = PopUpMenu(w, Rect(322, 0, 50, 20));
y.items = ["6","7","8","9","10","12","13","14","18","24","36","48","60","72","96"];

t = TextView(w, Rect(10, 40, 380, 150));
t.string = "\nThe quick drowned fox jumped over the lazy blog. \n\n 0 1 2 3 4 5 6 7 8 9 ";

a = StaticText(w, 200@20).string_("The quick drowned fox").background_(Color.rand).align_(\center);
b = Button(w, 200@20).states_([["The quick drowned fox"]]).background_(Color.rand);
c = PopUpMenu(w, 200@20).items_(["The quick drowned fox"]).background_(Color.rand);

y.action = {
	var font;
	font = Font(m.items[m.value],y.items[y.value].asInteger);
	a.font_(font).refresh;
	b.font_(font).refresh;
	c.font_(font).refresh;
	t.font_(font).refresh;
};

m.action = y.action;

m.valueAction = 3;
y.valueAction = 5;
)


(
var w, f;

w = Window("Fonts", Rect(128, 64, 340, 360));
w.view.decorator = f = FlowLayout(w.view.bounds,Point(4, 4),Point(4, 2));

[
"Helvetica-Bold",
"Helvetica",
"Monaco",
"Arial",
"Gadget",
"MarkerFelt-Thin"
].do({ arg name;
	var v, s, n, spec, p, height = 16;

		v = StaticText(w, Rect(0, 0, 110, height + 20));
		v.font = Font(name, 13);
		v.string = name;

		s = Button(w, Rect(0, 0, 140, height + 20));
		s.font = Font(name, 13);
		s.states = [[name]];

		n = NumberBox(w, Rect(0, 0, 56, height + 20));
		n.font = Font(name, 13);
		n.object = pi;

	f.nextLine;
});

w.front;
)


(
var w, f, i = 0;

w = Window("Fonts", Rect(128, 64, 1024, 768));
b = ScrollView(w, w.view.bounds);

b.decorator = f = FlowLayout(b.bounds, Point(4,4), Point(4,2));

Font.availableFonts.do({ arg name;
	var v, s, n, spec, p, height = 16, font;
	font = Font(name,13);

		v = StaticText(b, Rect(0, 0, 120, height + 20));
		v.font = font;
		v.string = name;

		s = Button(b, Rect(0, 0, 140, height + 20));
		s.font = font;
		s.states = [[name]];
		s.action = { font.asCompileString.postln; };

		n = NumberBox(b, Rect(0, 0, 56, height + 20));
		n.font = font;
		n.object = pi;
	if( (i = i + 1) % 3 == 0,{
		f.nextLine;
	});
});

w.front;
)
::
