Implementation of CPFont -ascender, -descender and -defaultLineHeightForFont, supporting method +metricsOfFont in CPStringDrawing and CPPlatformString, and Font Metrics Explorer test app.

This commit is contained in:
Aparajita Fishman authored and Alexander Ljungberg committed 2010-08-27 14:32:03 -04:00
1 parent 431c6522a6
commit 4f2914a123
11 files changed
+1435 -9

No files matched your search

+67 -8
View File
@@ -28,7 +28,7 @@ var _CPFonts = {},
#define _CPCreateCSSString(aName, aSize, isBold) (isBold ? @"bold " : @"") + ROUND(aSize) + @"px " + ((aName === _CPFontSystemFontFace) ? aName : (@"\"" + aName.replace(_CPWrapRegExp, '", "') + @"\", " + _CPFontSystemFontFace))
#define _CPCachedFont(aName, aSize, isBold) _CPFonts[_CPCreateCSSString(aName, aSize, isBold)]
/*!
/*!
@ingroup appkit
@class CPFont
@@ -38,11 +38,22 @@ var _CPFonts = {},
{
CPString _name;
float _size;
float _ascender;
float _descender;
float _lineHeight;
BOOL _isBold;
CPString _cssString;
}
+ (void)initialize
{
var systemFont = [[CPBundle bundleForClass:[CPView class]] objectForInfoDictionaryKey:"CPSystemFontFace"];
if (systemFont)
_CPFontSystemFontFace = systemFont;
}
/*!
Returns a font with the specified name and size.
@param aName the name of the font
@@ -89,25 +100,64 @@ var _CPFonts = {},
@ignore
*/
- (id)_initWithName:(CPString)aName size:(float)aSize bold:(BOOL)isBold
{
{
self = [super init];
if (self)
{
_name = aName;
_size = aSize;
_ascender = 0;
_descender = 0;
_lineHeight = 0;
_isBold = isBold;
_cssString = _CPCreateCSSString(_name, _size, _isBold);
_CPFonts[_cssString] = self;
}
return self;
}
/*!
Returns the font size (in points)
Returns the distance of the longest ascender's top y-coordinate from the baseline (in CSS px)
*/
- (float)ascender
{
if (!_ascender)
[self _getMetrics];
return _ascender;
}
/*!
Returns the bottom y coordinate (in CSS px), offset from the baseline, of the receiver's longest descender.
Thus, if the longest descender extends 2 points below the baseline, descender will return –2.
*/
- (float)descender
{
if (!_descender)
[self _getMetrics];
return _descender;
}
/*!
Returns the default line height.
NOTE: This was moved from NSFont to NSLayoutManager in Cocoa, but since there is no CPLayoutManager, it has been kept here.
*/
- (float)defaultLineHeightForFont
{
if (!_lineHeight)
[self _getMetrics];
return _lineHeight;
}
/*!
Returns the font size (in CSS px)
*/
- (float)size
{
@@ -140,6 +190,15 @@ var _CPFonts = {},
return [CPString stringWithFormat:@"%@ %@ %f pt.", [super description], [self familyName], [self size]];
}
- (void)_getMetrics
{
var metrics = [CPString metricsOfFont:self];
_ascender = [metrics objectForKey:@"ascender"];
_descender = [metrics objectForKey:@"descender"];
_lineHeight = [metrics objectForKey:@"lineHeight"];
}
@end
var CPFontNameKey = @"CPFontNameKey",
+8
View File
@@ -27,6 +27,14 @@
@implementation CPString (CPStringDrawing)
/*!
Returns a dictionary with the items "ascender", "descender", "lineHeight"
*/
+ (CPDictionary)metricsOfFont:(CPFont)aFont
{
return [CPPlatformString metricsOfFont:aFont];
}
/*!
Returns the string
*/
+69 -1
View File
@@ -24,7 +24,11 @@
var DOMFixedWidthSpanElement = nil,
DOMFlexibleWidthSpanElement = nil,
DOMMetricsDivElement = nil,
DOMMetricsTextSpanElement = nil,
DOMMetricsImgElement = nil,
DOMIFrameElement = nil,
DOMIFrameDocument = nil,
DefaultFont = nil;
@implementation CPPlatformString : CPBasePlatformString
@@ -59,7 +63,7 @@ var DOMFixedWidthSpanElement = nil,
bodyElement.appendChild(DOMIFrameElement);
var DOMIFrameDocument = (DOMIFrameElement.contentDocument || DOMIFrameElement.contentWindow.document);
DOMIFrameDocument = (DOMIFrameElement.contentDocument || DOMIFrameElement.contentWindow.document);
DOMIFrameDocument.write('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'+
'<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head></head><body></body></html>');
DOMIFrameDocument.close();
@@ -88,6 +92,7 @@ var DOMFixedWidthSpanElement = nil,
style.margin = "0px";
style.width = "1px";
style.wordWrap = "break-word";
try
{
style.whiteSpace = "pre";
@@ -106,6 +111,46 @@ var DOMFixedWidthSpanElement = nil,
DOMDivElement.appendChild(DOMFixedWidthSpanElement);
}
+ (void)createDOMMetricsElements
{
if (!DOMIFrameElement)
[self createDOMElements];
var style;
DOMMetricsDivElement = DOMIFrameDocument.createElement("div");
DOMMetricsDivElement.style.position = "absolute";
DOMMetricsDivElement.style.width = "100000px";
DOMIFrameDocument.body.appendChild(DOMMetricsDivElement);
DOMMetricsTextSpanElement = DOMIFrameDocument.createElement("span");
DOMMetricsTextSpanElement.innerHTML = "x";
style = DOMMetricsTextSpanElement.style;
style.position = "absolute";
style.visibility = "visible";
style.padding = "0px";
style.margin = "0px";
style.whiteSpace = "pre";
var imgPath = [[CPBundle bundleForClass:[CPView class]] pathForResource:@"empty.png"];
DOMMetricsImgElement = DOMIFrameDocument.createElement("img");
DOMMetricsImgElement.setAttribute("src", imgPath);
DOMMetricsImgElement.setAttribute("width", "1");
DOMMetricsImgElement.setAttribute("height", "1");
DOMMetricsImgElement.setAttribute("alt", "");
style = DOMMetricsImgElement.style;
style.visibility = "visible";
style.padding = "0px";
style.margin = "0px";
style.border = "none";
style.verticalAlign = "baseline";
DOMMetricsDivElement.appendChild(DOMMetricsTextSpanElement);
DOMMetricsDivElement.appendChild(DOMMetricsImgElement);
}
+ (CGSize)sizeOfString:(CPString)aString withFont:(CPFont)aFont forWidth:(float)aWidth
{
if (!aFont)
@@ -120,6 +165,7 @@ var DOMFixedWidthSpanElement = nil,
[self createDOMElements];
var span;
if (!aWidth)
span = DOMFlexibleWidthSpanElement;
else
@@ -138,4 +184,26 @@ var DOMFixedWidthSpanElement = nil,
return _CGSizeMake(span.clientWidth, span.clientHeight);
}
+ (CPDictionary)metricsOfFont:(CPFont)aFont
{
if (!aFont)
{
if (!DefaultFont)
DefaultFont = [CPFont systemFontOfSize:12.0];
aFont = DefaultFont;
}
if (!DOMMetricsDivElement)
[self createDOMMetricsElements];
DOMMetricsDivElement.style.font = [aFont cssString];
var baseline = DOMMetricsImgElement.offsetTop - DOMMetricsTextSpanElement.offsetTop + DOMMetricsImgElement.offsetHeight,
descender = baseline - DOMMetricsTextSpanElement.offsetHeight,
lineHeight = DOMMetricsTextSpanElement.offsetHeight;
return [CPDictionary dictionaryWithObjectsAndKeys:baseline, @"ascender", descender, @"descender", lineHeight, @"lineHeight"];
}
@end
@@ -0,0 +1,221 @@
/*
* AppController.j
* CPFontMetricsExplorer
*
* Created by Aparajita Fishman on August 23, 2010.
*/
@import <Foundation/CPObject.j>
CPLogRegister(CPLogConsole);
var Ascender = 0,
Descender = 0,
LineHeight = 0;
var GridSize = 9.0;
var SharedAppController = nil;
@implementation AppController : CPObject
{
CPWindow theWindow;
@outlet CPPopUpButton fontMenu;
@outlet CPSlider sizeSlider;
@outlet CPTextField sizeText;
@outlet CPTextField ascenderText;
@outlet CPTextField descenderText;
@outlet CPTextField lineHeightText;
@outlet MetricsView metricsView;
@outlet BaselineView baselineView @accessors(readonly);
}
- (void)awakeFromCib
{
SharedAppController = self;
var fonts = [[CPFontManager sharedFontManager] availableFonts],
systemFont = [CPFont systemFontOfSize:12],
family = [systemFont familyName],
names = family.split(/,\s*/),
index = CPNotFound;
for (var i = 0; i < names.length; ++i)
{
index = [fonts indexOfObjectPassingTest:function(elem, index, context) { return elem === context; } context:names[i]];
if (index !== CPNotFound)
break;
}
[fontMenu removeAllItems];
[fontMenu addItemsWithTitles:fonts];
[fontMenu selectItemAtIndex:index !== CPNotFound ? index : 0];
[sizeText takeIntegerValueFrom:sizeSlider];
[self update];
}
- (void)applicationDidFinishLaunching:(CPNotification)aNotification
{
}
- (void)setFontFamily:(id)sender
{
[self update];
}
- (void)setFontSize:(id)sender
{
[self update];
}
- (void)update
{
var font = [CPFont fontWithName:[fontMenu titleOfSelectedItem] size:[sizeSlider integerValue]];
Ascender = [font ascender],
Descender = [font descender],
LineHeight = [font defaultLineHeightForFont];
[sizeText takeIntegerValueFrom:sizeSlider];
[ascenderText setIntegerValue:Ascender];
[descenderText setIntegerValue:Descender];
[lineHeightText setIntegerValue:LineHeight];
[metricsView updateWithFont:font];
}
@end
@implementation MetricsView : CPView
{
@outlet CPTextField sampleText;
CPColor gridColor;
}
- (id)initWithFrame:(CGRect)aRect
{
var self = [super initWithFrame:aRect];
if (self)
gridColor = [CPColor colorWithHexString:@"e4f4ff"];
return self;
}
- (void)awakeFromCib
{
[self setBackgroundColor:[CPColor whiteColor]];
}
- (void)drawRect:(CGRect)dirtyRect
{
var context = [[CPGraphicsContext currentContext] graphicsPort],
bounds = [self bounds],
maxX = CGRectGetMaxX(bounds),
maxY = CGRectGetMaxY(bounds);
CGContextSetLineWidth(context, 1.0);
CGContextSetStrokeColor(context, gridColor);
CGContextBeginPath(context);
for (var y = 0.5; y <= maxY; y += GridSize)
{
CGContextMoveToPoint(context, 0.0, y);
CGContextAddLineToPoint(context, maxX, y);
}
for (var x = 0.5; x <= maxX; x += GridSize)
{
CGContextMoveToPoint(context, x, 0.0);
CGContextAddLineToPoint(context, x, maxY);
}
CGContextStrokePath(context);
}
- (void)updateWithFont:(CPFont)aFont
{
var frame = [sampleText frame],
ascender = [aFont ascender],
descender = [aFont descender],
lineHeight = [aFont defaultLineHeightForFont],
insets = [sampleText currentValueForThemeAttribute:@"content-inset"],
frameSize = CGSizeMake(CGRectGetWidth(frame), insets.top + lineHeight + insets.bottom),
// Place the label so that the baseline is at the 7th line (y == 63)
textTop = 63.0 - ascender - insets.top;
[sampleText setFont:aFont];
[sampleText setFrame:CGRectMake(CGRectGetMinX(frame), textTop, frameSize.width, frameSize.height)];
[[SharedAppController baselineView] updateWithText:sampleText ascender:ascender descender:descender];
}
@end
@implementation BaselineView : CPView
{
float textTop;
float ascender;
float descender;
}
- (id)initWithFrame:(CGRect)frame
{
var self = [super initWithFrame:frame];
if (self)
{
textTop = 0;
ascender = 0;
lineHeight = 0;
}
return self;
}
- (void)updateWithText:(CPTextField)aTextField ascender:(float)ascenderHeight descender:(float)descenderHeight
{
textTop = CGRectGetMinY([aTextField frame]) + [aTextField currentValueForThemeAttribute:@"content-inset"].top;
ascender = ascenderHeight;
descender = descenderHeight;
[self setNeedsDisplay:YES];
}
- (void)drawRect:(CGRect)dirtyRect
{
if (ascender === 0)
return;
var context = [[CPGraphicsContext currentContext] graphicsPort];
bounds = [self bounds],
minX = CGRectGetMinX(bounds),
maxX = CGRectGetMaxX(bounds);
CGContextSetLineWidth(context, 1.0);
CGContextSetStrokeColor(context, [CPColor redColor]);
CGContextBeginPath(context);
var y = [textTop, textTop + ascender, textTop + ascender - descender],
count = y.length;
while (count--)
{
CGContextMoveToPoint(context, minX, y[count] + 0.5);
CGContextAddLineToPoint(context, maxX, y[count] + 0.5);
}
CGContextStrokePath(context);
}
@end
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Main cib file base name</key>
<string>MainMenu.cib</string>
<key>CPBundleName</key>
<string>FontMetricsExplorer</string>
<key>CPPrincipalClass</key>
<string>CPApplication</string>
</dict>
</plist>
@@ -0,0 +1 @@
280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;4E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;6E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;7E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;8E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;1;9E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;10E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;11E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;12E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;13E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;16E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;18E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;1;0E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;55E;D;K;6;CP$UIDd;2;56E;D;K;6;CP$UIDd;2;57E;D;K;6;CP$UIDd;2;58E;D;K;6;CP$UIDd;2;59E;D;K;6;CP$UIDd;2;60E;D;K;6;CP$UIDd;2;61E;D;K;6;CP$UIDd;2;62E;D;K;6;CP$UIDd;2;63E;D;K;6;CP$UIDd;2;64E;D;K;6;CP$UIDd;2;65E;D;K;6;CP$UIDd;2;66E;D;K;6;CP$UIDd;2;67E;D;K;6;CP$UIDd;2;68E;D;K;6;CP$UIDd;2;69E;D;K;6;CP$UIDd;2;70E;D;K;6;CP$UIDd;2;71E;D;K;6;CP$UIDd;2;72E;D;K;6;CP$UIDd;2;73E;D;K;6;CP$UIDd;2;74E;D;K;6;CP$UIDd;2;75E;D;K;6;CP$UIDd;2;76E;D;K;6;CP$UIDd;2;77E;D;K;6;CP$UIDd;2;78E;D;K;6;CP$UIDd;2;79E;D;K;6;CP$UIDd;2;80E;D;K;6;CP$UIDd;2;81E;D;K;6;CP$UIDd;2;82E;D;K;6;CP$UIDd;2;83E;D;K;6;CP$UIDd;2;84E;D;K;6;CP$UIDd;2;85E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;87E;D;K;6;CP$UIDd;2;88E;D;K;6;CP$UIDd;2;89E;D;K;6;CP$UIDd;2;90E;D;K;6;CP$UIDd;2;91E;D;K;6;CP$UIDd;2;92E;D;K;6;CP$UIDd;2;93E;D;K;6;CP$UIDd;2;94E;D;K;6;CP$UIDd;2;95E;D;K;6;CP$UIDd;2;96E;D;K;6;CP$UIDd;2;97E;D;K;6;CP$UIDd;2;99E;D;K;6;CP$UIDd;3;100E;E;E;S;16;IBCocoaFrameworkD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;1;0E;D;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;38E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;48E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;45E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;37E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;16E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;20E;D;K;6;CP$UIDd;2;42E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;15E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;3;101E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;17E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;3;102E;E;DLine truncated
@@ -0,0 +1,902 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1060</int>
<string key="IBDocument.SystemVersion">10F569</string>
<string key="IBDocument.InterfaceBuilderVersion">788</string>
<string key="IBDocument.AppKitVersion">1038.29</string>
<string key="IBDocument.HIToolboxVersion">461.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">788</string>
</object>
<array class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<integer value="372"/>
</array>
<array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</array>
<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
<object class="NSCustomObject" id="1021">
<string key="NSClassName">NSApplication</string>
</object>
<object class="NSCustomObject" id="1014">
<string key="NSClassName">FirstResponder</string>
</object>
<object class="NSCustomObject" id="1050">
<string key="NSClassName">NSApplication</string>
</object>
<object class="NSWindowTemplate" id="972006081">
<int key="NSWindowStyleMask">7</int>
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{408, 675}, {332, 290}}</string>
<int key="NSWTFlags">1946157056</int>
<string key="NSWindowTitle">Font Metrics Explorer</string>
<string key="NSWindowClass">NSWindow</string>
<nil key="NSViewClass"/>
<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
<object class="NSView" key="NSWindowView" id="439893737">
<reference key="NSNextResponder"/>
<int key="NSvFlags">274</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSPopUpButton" id="999404096">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{54, 206}, {243, 26}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="443809738">
<int key="NSCellFlags">-2076049856</int>
<int key="NSCellFlags2">2048</int>
<object class="NSFont" key="NSSupport" id="138691916">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">13</double>
<int key="NSfFlags">1044</int>
</object>
<reference key="NSControlView" ref="999404096"/>
<int key="NSButtonFlags">109199615</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
<object class="NSMenuItem" key="NSMenuItem" id="41041145">
<reference key="NSMenu" ref="28429271"/>
<string key="NSTitle">Item 1</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<int key="NSState">1</int>
<object class="NSCustomResource" key="NSOnImage">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuCheckmark</string>
</object>
<object class="NSCustomResource" key="NSMixedImage">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuMixedState</string>
</object>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="443809738"/>
</object>
<bool key="NSMenuItemRespectAlignment">YES</bool>
<object class="NSMenu" key="NSMenu" id="28429271">
<string key="NSTitle">OtherViews</string>
<array class="NSMutableArray" key="NSMenuItems">
<reference ref="41041145"/>
</array>
<reference key="NSMenuFont" ref="138691916"/>
</object>
<int key="NSPreferredEdge">1</int>
<bool key="NSUsesItemFromMenu">YES</bool>
<bool key="NSAltersState">YES</bool>
<int key="NSArrowPosition">2</int>
</object>
</object>
<object class="NSTextField" id="1039897555">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{19, 210}, {38, 17}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="239508957">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents">Font:</string>
<reference key="NSSupport" ref="138691916"/>
<reference key="NSControlView" ref="1039897555"/>
<object class="NSColor" key="NSBackgroundColor" id="44883150">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">controlColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
</object>
</object>
<object class="NSColor" key="NSTextColor" id="618459948">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">controlTextColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MAA</bytes>
</object>
</object>
</object>
</object>
<object class="NSTextField" id="246524262">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{19, 80}, {67, 17}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="994899642">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents">Ascender:</string>
<reference key="NSSupport" ref="138691916"/>
<reference key="NSControlView" ref="246524262"/>
<reference key="NSBackgroundColor" ref="44883150"/>
<reference key="NSTextColor" ref="618459948"/>
</object>
</object>
<object class="NSTextField" id="725348302">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{99, 80}, {35, 17}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="364967556">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags2">4195328</int>
<string key="NSContents">0</string>
<reference key="NSSupport" ref="138691916"/>
<reference key="NSControlView" ref="725348302"/>
<reference key="NSBackgroundColor" ref="44883150"/>
<reference key="NSTextColor" ref="618459948"/>
</object>
</object>
<object class="NSTextField" id="730682452">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{99, 55}, {35, 17}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="264413839">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags2">4195328</int>
<string key="NSContents">0</string>
<reference key="NSSupport" ref="138691916"/>
<reference key="NSControlView" ref="730682452"/>
<reference key="NSBackgroundColor" ref="44883150"/>
<reference key="NSTextColor" ref="618459948"/>
</object>
</object>
<object class="NSTextField" id="380300553">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{99, 30}, {35, 17}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="755927601">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags2">4195328</int>
<string key="NSContents">0</string>
<reference key="NSSupport" ref="138691916"/>
<reference key="NSControlView" ref="380300553"/>
<reference key="NSBackgroundColor" ref="44883150"/>
<reference key="NSTextColor" ref="618459948"/>
</object>
</object>
<object class="NSTextField" id="823167139">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{19, 55}, {75, 17}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="223373694">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents">Descender:</string>
<reference key="NSSupport" ref="138691916"/>
<reference key="NSControlView" ref="823167139"/>
<reference key="NSBackgroundColor" ref="44883150"/>
<reference key="NSTextColor" ref="618459948"/>
</object>
</object>
<object class="NSTextField" id="417280360">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{19, 30}, {80, 17}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="617236685">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents">Line Height:</string>
<reference key="NSSupport" ref="138691916"/>
<reference key="NSControlView" ref="417280360"/>
<reference key="NSBackgroundColor" ref="44883150"/>
<reference key="NSTextColor" ref="618459948"/>
</object>
</object>
<object class="NSTextField" id="138531732">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 250}, {72, 22}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="297713421">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents">Font</string>
<object class="NSFont" key="NSSupport" id="123242968">
<string key="NSName">LucidaGrande-Bold</string>
<double key="NSSize">18</double>
<int key="NSfFlags">16</int>
</object>
<reference key="NSControlView" ref="138531732"/>
<reference key="NSBackgroundColor" ref="44883150"/>
<reference key="NSTextColor" ref="618459948"/>
</object>
</object>
<object class="NSTextField" id="411217540">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 115}, {72, 22}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="588810411">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents">Metrics</string>
<reference key="NSSupport" ref="123242968"/>
<reference key="NSControlView" ref="411217540"/>
<reference key="NSBackgroundColor" ref="44883150"/>
<reference key="NSTextColor" ref="618459948"/>
</object>
</object>
<object class="NSTextField" id="908680470">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{19, 173}, {38, 17}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="938349708">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents">Size:</string>
<reference key="NSSupport" ref="138691916"/>
<reference key="NSControlView" ref="908680470"/>
<reference key="NSBackgroundColor" ref="44883150"/>
<reference key="NSTextColor" ref="618459948"/>
</object>
</object>
<object class="NSTextField" id="803856037">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{282, 173}, {31, 17}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="1067054775">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents">12</string>
<reference key="NSSupport" ref="138691916"/>
<reference key="NSControlView" ref="803856037"/>
<reference key="NSBackgroundColor" ref="44883150"/>
<reference key="NSTextColor" ref="618459948"/>
</object>
</object>
<object class="NSSlider" id="42125743">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{57, 174}, {214, 21}}</string>
<reference key="NSSuperview" ref="439893737"/>
<bool key="NSEnabled">YES</bool>
<object class="NSSliderCell" key="NSCell" id="275925957">
<int key="NSCellFlags">-2080244224</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents"/>
<reference key="NSControlView" ref="42125743"/>
<double key="NSMaxValue">48</double>
<double key="NSMinValue">8</double>
<double key="NSValue">12</double>
<double key="NSAltIncValue">0.0</double>
<int key="NSNumberOfTickMarks">0</int>
<int key="NSTickMarkPosition">1</int>
<bool key="NSAllowsTickMarkValuesOnly">NO</bool>
<bool key="NSVertical">NO</bool>
</object>
</object>
<object class="NSCustomView" id="605512847">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSTextField" id="654402926">
<reference key="NSNextResponder" ref="605512847"/>
<int key="NSvFlags">298</int>
<string key="NSFrame">{{-3, 40}, {169, 18}}</string>
<reference key="NSSuperview" ref="605512847"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="331121288">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags2">138413056</int>
<string key="NSContents">log</string>
<object class="NSFont" key="NSSupport">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">14</double>
<int key="NSfFlags">16</int>
</object>
<reference key="NSControlView" ref="654402926"/>
<reference key="NSBackgroundColor" ref="44883150"/>
<reference key="NSTextColor" ref="618459948"/>
</object>
</object>
</array>
<string key="NSFrame">{{149, 20}, {163, 100}}</string>
<reference key="NSSuperview" ref="439893737"/>
<string key="NSClassName">MetricsView</string>
</object>
<object class="NSCustomView" id="1067943843">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{149, 20}, {163, 100}}</string>
<reference key="NSSuperview" ref="439893737"/>
<string key="NSClassName">BaselineView</string>
</object>
</array>
<string key="NSFrameSize">{332, 290}</string>
<reference key="NSSuperview"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
</object>
<object class="NSCustomObject" id="635946545">
<string key="NSClassName">AppController</string>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="1021"/>
<reference key="destination" ref="635946545"/>
</object>
<int key="connectionID">451</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">fontMenu</string>
<reference key="source" ref="635946545"/>
<reference key="destination" ref="999404096"/>
</object>
<int key="connectionID">1056</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">sizeSlider</string>
<reference key="source" ref="635946545"/>
<reference key="destination" ref="42125743"/>
</object>
<int key="connectionID">1063</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">lineHeightText</string>
<reference key="source" ref="635946545"/>
<reference key="destination" ref="380300553"/>
</object>
<int key="connectionID">1085</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">descenderText</string>
<reference key="source" ref="635946545"/>
<reference key="destination" ref="730682452"/>
</object>
<int key="connectionID">1086</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">ascenderText</string>
<reference key="source" ref="635946545"/>
<reference key="destination" ref="725348302"/>
</object>
<int key="connectionID">1087</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">sizeText</string>
<reference key="source" ref="635946545"/>
<reference key="destination" ref="803856037"/>
</object>
<int key="connectionID">1089</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">theWindow</string>
<reference key="source" ref="635946545"/>
<reference key="destination" ref="972006081"/>
</object>
<int key="connectionID">1090</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">setFontFamily:</string>
<reference key="source" ref="635946545"/>
<reference key="destination" ref="999404096"/>
</object>
<int key="connectionID">1092</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">setFontSize:</string>
<reference key="source" ref="635946545"/>
<reference key="destination" ref="42125743"/>
</object>
<int key="connectionID">1095</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">sampleText</string>
<reference key="source" ref="605512847"/>
<reference key="destination" ref="654402926"/>
</object>
<int key="connectionID">1103</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">metricsView</string>
<reference key="source" ref="635946545"/>
<reference key="destination" ref="605512847"/>
</object>
<int key="connectionID">1104</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">baselineView</string>
<reference key="source" ref="635946545"/>
<reference key="destination" ref="1067943843"/>
</object>
<int key="connectionID">1109</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
<object class="IBObjectRecord">
<int key="objectID">0</int>
<array key="object" id="0"/>
<reference key="children" ref="1048"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="1021"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="1014"/>
<reference key="parent" ref="0"/>
<string key="objectName">First Responder</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-3</int>
<reference key="object" ref="1050"/>
<reference key="parent" ref="0"/>
<string key="objectName">Application</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">371</int>
<reference key="object" ref="972006081"/>
<array class="NSMutableArray" key="children">
<reference ref="439893737"/>
</array>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">372</int>
<reference key="object" ref="439893737"/>
<array class="NSMutableArray" key="children">
<reference ref="803856037"/>
<reference ref="999404096"/>
<reference ref="1039897555"/>
<reference ref="246524262"/>
<reference ref="725348302"/>
<reference ref="730682452"/>
<reference ref="380300553"/>
<reference ref="823167139"/>
<reference ref="417280360"/>
<reference ref="138531732"/>
<reference ref="411217540"/>
<reference ref="908680470"/>
<reference ref="42125743"/>
<reference ref="1067943843"/>
<reference ref="605512847"/>
</array>
<reference key="parent" ref="972006081"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">450</int>
<reference key="object" ref="635946545"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1046</int>
<reference key="object" ref="999404096"/>
<array class="NSMutableArray" key="children">
<reference ref="443809738"/>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1047</int>
<reference key="object" ref="443809738"/>
<array class="NSMutableArray" key="children">
<reference ref="28429271"/>
</array>
<reference key="parent" ref="999404096"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1048</int>
<reference key="object" ref="28429271"/>
<array class="NSMutableArray" key="children">
<reference ref="41041145"/>
</array>
<reference key="parent" ref="443809738"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1049</int>
<reference key="object" ref="41041145"/>
<reference key="parent" ref="28429271"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1052</int>
<reference key="object" ref="1039897555"/>
<array class="NSMutableArray" key="children">
<reference ref="239508957"/>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1053</int>
<reference key="object" ref="239508957"/>
<reference key="parent" ref="1039897555"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1057</int>
<reference key="object" ref="908680470"/>
<array class="NSMutableArray" key="children">
<reference ref="938349708"/>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1058</int>
<reference key="object" ref="938349708"/>
<reference key="parent" ref="908680470"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1059</int>
<reference key="object" ref="42125743"/>
<array class="NSMutableArray" key="children">
<reference ref="275925957"/>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1060</int>
<reference key="object" ref="275925957"/>
<reference key="parent" ref="42125743"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1061</int>
<reference key="object" ref="803856037"/>
<array class="NSMutableArray" key="children">
<reference ref="1067054775"/>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1062</int>
<reference key="object" ref="1067054775"/>
<reference key="parent" ref="803856037"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1069</int>
<reference key="object" ref="138531732"/>
<array class="NSMutableArray" key="children">
<reference ref="297713421"/>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1070</int>
<reference key="object" ref="297713421"/>
<reference key="parent" ref="138531732"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1071</int>
<reference key="object" ref="411217540"/>
<array class="NSMutableArray" key="children">
<reference ref="588810411"/>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1072</int>
<reference key="object" ref="588810411"/>
<reference key="parent" ref="411217540"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1073</int>
<reference key="object" ref="246524262"/>
<array class="NSMutableArray" key="children">
<reference ref="994899642"/>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1074</int>
<reference key="object" ref="994899642"/>
<reference key="parent" ref="246524262"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1075</int>
<reference key="object" ref="823167139"/>
<array class="NSMutableArray" key="children">
<reference ref="223373694"/>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1076</int>
<reference key="object" ref="223373694"/>
<reference key="parent" ref="823167139"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1077</int>
<reference key="object" ref="417280360"/>
<array class="NSMutableArray" key="children">
<reference ref="617236685"/>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1078</int>
<reference key="object" ref="617236685"/>
<reference key="parent" ref="417280360"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1079</int>
<reference key="object" ref="725348302"/>
<array class="NSMutableArray" key="children">
<reference ref="364967556"/>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1080</int>
<reference key="object" ref="364967556"/>
<reference key="parent" ref="725348302"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1081</int>
<reference key="object" ref="730682452"/>
<array class="NSMutableArray" key="children">
<reference ref="264413839"/>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1082</int>
<reference key="object" ref="264413839"/>
<reference key="parent" ref="730682452"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1083</int>
<reference key="object" ref="380300553"/>
<array class="NSMutableArray" key="children">
<reference ref="755927601"/>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1084</int>
<reference key="object" ref="755927601"/>
<reference key="parent" ref="380300553"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1088</int>
<reference key="object" ref="605512847"/>
<array class="NSMutableArray" key="children">
<reference ref="654402926"/>
</array>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1098</int>
<reference key="object" ref="654402926"/>
<array class="NSMutableArray" key="children">
<reference ref="331121288"/>
</array>
<reference key="parent" ref="605512847"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1099</int>
<reference key="object" ref="331121288"/>
<reference key="parent" ref="654402926"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1106</int>
<reference key="object" ref="1067943843"/>
<reference key="parent" ref="439893737"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1046.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1047.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1048.IBEditorWindowLastContentRect">{{451, 847}, {110, 23}}</string>
<string key="1048.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1049.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1052.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1053.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1057.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1058.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1059.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1060.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1061.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1062.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1069.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1070.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1071.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1072.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1073.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1074.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1075.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1076.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1077.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1078.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1079.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1080.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1081.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1082.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1083.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1084.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1088.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1098.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1099.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1106.IBEditorWindowLastContentRect">{{329, 888}, {163, 96}}</string>
<string key="1106.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="371.IBEditorWindowLastContentRect">{{884, 511}, {332, 290}}</string>
<string key="371.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="371.IBWindowTemplateEditedContentRect">{{884, 511}, {332, 290}}</string>
<integer value="1" key="371.NSWindowTemplate.visibleAtLaunch"/>
<string key="371.editorWindowContentRectSynchronizationRect">{{33, 99}, {480, 360}}</string>
<string key="372.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">1109</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">AppController</string>
<string key="superclassName">NSObject</string>
<dictionary class="NSMutableDictionary" key="actions">
<string key="setFontFamily:">id</string>
<string key="setFontSize:">id</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="actionInfosByName">
<object class="IBActionInfo" key="setFontFamily:">
<string key="name">setFontFamily:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="setFontSize:">
<string key="name">setFontSize:</string>
<string key="candidateClassName">id</string>
</object>
</dictionary>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="ascenderText">NSTextField</string>
<string key="baselineView">BaselineView</string>
<string key="descenderText">NSTextField</string>
<string key="fontMenu">NSPopUpButton</string>
<string key="lineHeightText">NSTextField</string>
<string key="metricsView">MetricsView</string>
<string key="sizeSlider">NSSlider</string>
<string key="sizeText">NSTextField</string>
<string key="theWindow">NSWindow</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="ascenderText">
<string key="name">ascenderText</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="baselineView">
<string key="name">baselineView</string>
<string key="candidateClassName">BaselineView</string>
</object>
<object class="IBToOneOutletInfo" key="descenderText">
<string key="name">descenderText</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="fontMenu">
<string key="name">fontMenu</string>
<string key="candidateClassName">NSPopUpButton</string>
</object>
<object class="IBToOneOutletInfo" key="lineHeightText">
<string key="name">lineHeightText</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="metricsView">
<string key="name">metricsView</string>
<string key="candidateClassName">MetricsView</string>
</object>
<object class="IBToOneOutletInfo" key="sizeSlider">
<string key="name">sizeSlider</string>
<string key="candidateClassName">NSSlider</string>
</object>
<object class="IBToOneOutletInfo" key="sizeText">
<string key="name">sizeText</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="theWindow">
<string key="name">theWindow</string>
<string key="candidateClassName">NSWindow</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBUserSource</string>
<string key="minorKey"/>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">BaselineView</string>
<string key="superclassName">NSView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBUserSource</string>
<string key="minorKey"/>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MetricsView</string>
<string key="superclassName">NSView</string>
<object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">sampleText</string>
<string key="NS.object.0">NSTextField</string>
</object>
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
<string key="NS.key.0">sampleText</string>
<object class="IBToOneOutletInfo" key="NS.object.0">
<string key="name">sampleText</string>
<string key="candidateClassName">NSTextField</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBUserSource</string>
<string key="minorKey"/>
</object>
</object>
</array>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<string key="IBDocument.LastKnownRelativeProjectPath">../registration.xcodeproj</string>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<dictionary class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
<string key="NSMenuCheckmark">{9, 8}</string>
<string key="NSMenuMixedState">{7, 2}</string>
</dictionary>
</data>
</archive>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" lang = "en">
<!--
index-debug.html
TableCibTest
Created by Francisco Tolmasky on July 5, 2009.
Copyright 2009, 280 North, Inc. All rights reserved.
-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<title>Font Metrics Explorer</title>
<script type = "text/javascript">
OBJJ_MAIN_FILE = "main.j";
OBJJ_INCLUDE_PATHS = ["Frameworks/Debug", "Frameworks", "SomethingElse"];
</script>
<script src = "Frameworks/Debug/Objective-J/Objective-J.js" type = "text/javascript"></script>
<style type = "text/css">
body{margin:0; padding:0;}
#container {position: absolute; top:50%; left:50%;}
#content {width:800px; text-align:center; margin-left: -400px; height:50px; margin-top:-25px; line-height: 50px;}
#content {font-family: "Helvetica", "Arial", sans-serif; font-size: 18px; color: black; text-shadow: 0px 1px 0px white; }
#loadgraphic {margin-right: 0.2em; margin-bottom:-2px;}
</style>
<!--[if lt IE 7]>
<STYLE type="text/css">
#container { position: relative; top: 50%; }
#content { position: relative;}
</STYLE>
<![endif]-->
</head>
<body style="">
<div id="loadingcontainer" style=" background-color: #eeeeee; overflow:hidden; width:100%; height:100%; position: absolute; top: 0; left: 0;">
<script type = "text/javascript">
document.write("<div id='container'><p id='content'>" +
"<img id='loadgraphic' width='16' height='16' src='Resources/spinner.gif' /> " +
"Loading Font Metrics Explorer...</p></div>");
</script>
<noscript>
<div id="container">
<div style="width: 440px; padding: 10px 25px 20px 25px; font-family: sans-serif; background-color: #ffffff; position: relative; left: -245px; top: -120px; text-align: center; -moz-border-radius: 20px; -webkit-border-radius: 20px; color: #555555">
<p style="line-height: 1.4em;">JavaScript is required for this site to work correctly but is either disabled or not supported by your browser.</p>
<p style="font-size:120%; padding:10px;"><a href="http://cappuccino.org/noscript">Show me how to enable JavaScript</a></p>
<p style="font-size:80%;">You may want to upgrade to a newer browser while you're at it:</p>
<ul style="margin:0;padding:0; text-align: center; font-size:80%;" >
<li style="display: inline;"><a href="http://www.apple.com/safari/download/">Safari</a></li>
<li style="display: inline;"><a href="http://www.mozilla.com/en-US/firefox/">Firefox</a></li>
<li style="display: inline;"><a href="http://www.google.com/chrome/">Chrome</a></li>
<li style="display: inline;"><a href="http://www.opera.com/download/">Opera</a></li>
<li style="display: inline;"><a href="http://www.microsoft.com/windows/downloads/ie/getitnow.mspx">Internet Explorer</a></li>
</ul>
</div>
</div>
</noscript>
</div>
</body>
</html>
@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" lang = "en">
<!--
index.html
TableCibTest
Created by Francisco Tolmasky on July 5, 2009.
Copyright 2009, 280 North, Inc. All rights reserved.
-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<title>Font Metrics Explorer</title>
<script type = "text/javascript">
OBJJ_MAIN_FILE = "main.j";
</script>
<script src = "Frameworks/Objective-J/Objective-J.js" type = "text/javascript"></script>
<style type = "text/css">
body{margin:0; padding:0;}
#container {position: absolute; top:50%; left:50%;}
#content {width:800px; text-align:center; margin-left: -400px; height:50px; margin-top:-25px; line-height: 50px;}
#content {font-family: "Helvetica", "Arial", sans-serif; font-size: 18px; color: black; text-shadow: 0px 1px 0px white; }
#loadgraphic {margin-right: 0.2em; margin-bottom:-2px;}
</style>
<!--[if lt IE 7]>
<STYLE type="text/css">
#container { position: relative; top: 50%; }
#content { position: relative;}
</STYLE>
<![endif]-->
</head>
<body style="">
<div id="loadingcontainer" style=" background-color: #eeeeee; overflow:hidden; width:100%; height:100%; position: absolute; top: 0; left: 0;">
<script type = "text/javascript">
document.write("<div id='container'><p id='content'>" +
"<img id='loadgraphic' width='16' height='16' src='Resources/spinner.gif' /> " +
"Loading Font Metrics Explorer...</p></div>");
</script>
<noscript>
<div id="container">
<div style="width: 440px; padding: 10px 25px 20px 25px; font-family: sans-serif; background-color: #ffffff; position: relative; left: -245px; top: -120px; text-align: center; -moz-border-radius: 20px; -webkit-border-radius: 20px; color: #555555">
<p style="line-height: 1.4em;">JavaScript is required for this site to work correctly but is either disabled or not supported by your browser.</p>
<p style="font-size:120%; padding:10px;"><a href="http://cappuccino.org/noscript">Show me how to enable JavaScript</a></p>
<p style="font-size:80%;">You may want to upgrade to a newer browser while you're at it:</p>
<ul style="margin:0;padding:0; text-align: center; font-size:80%;" >
<li style="display: inline;"><a href="http://www.apple.com/safari/download/">Safari</a></li>
<li style="display: inline;"><a href="http://www.mozilla.com/en-US/firefox/">Firefox</a></li>
<li style="display: inline;"><a href="http://www.google.com/chrome/">Chrome</a></li>
<li style="display: inline;"><a href="http://www.opera.com/download/">Opera</a></li>
<li style="display: inline;"><a href="http://www.microsoft.com/windows/downloads/ie/getitnow.mspx">Internet Explorer</a></li>
</ul>
</div>
</div>
</noscript>
</div>
</body>
</html>
+18
View File
@@ -0,0 +1,18 @@
/*
* AppController.j
* TableCibTest
*
* Created by Francisco Tolmasky on July 5, 2009.
* Copyright 2009, 280 North, Inc. All rights reserved.
*/
@import <Foundation/Foundation.j>
@import <AppKit/AppKit.j>
@import "AppController.j"
function main(args, namedArgs)
{
CPApplicationMain(args, namedArgs);
}