- added more enums to NSStringEncoding

- implemented cStringUsingEncoding:NSUnicodeStringEncoding
- removed NSNullTerminatedUnicodeFromString and replaced with cStringUsingEncoding:NSUnicodeStringEncoding
- switched KGPDFContext to use KGFont instead of KTFont, added KGFont method for advances and recoding
This commit is contained in:
Christopher Lloyd 2009-06-30 21:49:50 +00:00
parent d75354471e
commit 0c666b973e
23 changed files with 264 additions and 152 deletions

View File

@ -356,7 +356,6 @@
C889756F0EA0BF3100D0A0A2 /* NSColor_CGColor.h in Headers */ = {isa = PBXBuildFile; fileRef = FE08C3210DDF299800B3169A /* NSColor_CGColor.h */; settings = {ATTRIBUTES = (Private, ); }; };
C88975700EA0BF3100D0A0A2 /* KGSurface_DIBSection.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CAE70E133FF2003502ED /* KGSurface_DIBSection.h */; };
C88975710EA0BF3100D0A0A2 /* KGColorSpace+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CB780E13EB8E003502ED /* KGColorSpace+PDF.h */; };
C88975720EA0BF3100D0A0A2 /* KTFont+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CB970E13EB8E003502ED /* KTFont+PDF.h */; };
C88975730EA0BF3100D0A0A2 /* KGFunction+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CB990E13EB8E003502ED /* KGFunction+PDF.h */; };
C88975740EA0BF3100D0A0A2 /* KGImage+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CB9B0E13EB8E003502ED /* KGImage+PDF.h */; };
C88975750EA0BF3100D0A0A2 /* KGShading+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CB9D0E13EB8E003502ED /* KGShading+PDF.h */; };
@ -657,7 +656,6 @@
C88976CF0EA0BF3100D0A0A2 /* KGPaint_ramp.m in Sources */ = {isa = PBXBuildFile; fileRef = FEBF5A0C0DCD450700CE5A1C /* KGPaint_ramp.m */; };
C88976D00EA0BF3100D0A0A2 /* NSColor_CGColor.m in Sources */ = {isa = PBXBuildFile; fileRef = FE08C3220DDF299800B3169A /* NSColor_CGColor.m */; };
C88976D20EA0BF3100D0A0A2 /* KGColorSpace+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF9CB790E13EB8E003502ED /* KGColorSpace+PDF.m */; };
C88976D30EA0BF3100D0A0A2 /* KTFont+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF9CB980E13EB8E003502ED /* KTFont+PDF.m */; };
C88976D40EA0BF3100D0A0A2 /* KGFunction+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF9CB9A0E13EB8E003502ED /* KGFunction+PDF.m */; };
C88976D50EA0BF3100D0A0A2 /* KGImage+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF9CB9C0E13EB8E003502ED /* KGImage+PDF.m */; };
C88976D60EA0BF3100D0A0A2 /* KGShading+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF9CB9E0E13EB8E003502ED /* KGShading+PDF.m */; };
@ -1034,7 +1032,6 @@
C8A2E3F00F07EA1F0054397C /* NSColor_CGColor.h in Headers */ = {isa = PBXBuildFile; fileRef = FE08C3210DDF299800B3169A /* NSColor_CGColor.h */; settings = {ATTRIBUTES = (Private, ); }; };
C8A2E3F10F07EA1F0054397C /* KGSurface_DIBSection.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CAE70E133FF2003502ED /* KGSurface_DIBSection.h */; };
C8A2E3F20F07EA1F0054397C /* KGColorSpace+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CB780E13EB8E003502ED /* KGColorSpace+PDF.h */; };
C8A2E3F30F07EA1F0054397C /* KTFont+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CB970E13EB8E003502ED /* KTFont+PDF.h */; };
C8A2E3F40F07EA1F0054397C /* KGFunction+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CB990E13EB8E003502ED /* KGFunction+PDF.h */; };
C8A2E3F50F07EA1F0054397C /* KGImage+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CB9B0E13EB8E003502ED /* KGImage+PDF.h */; };
C8A2E3F60F07EA1F0054397C /* KGShading+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CB9D0E13EB8E003502ED /* KGShading+PDF.h */; };
@ -1341,7 +1338,6 @@
C8A2E52D0F07EA1F0054397C /* KGPaint_ramp.m in Sources */ = {isa = PBXBuildFile; fileRef = FEBF5A0C0DCD450700CE5A1C /* KGPaint_ramp.m */; };
C8A2E52E0F07EA1F0054397C /* NSColor_CGColor.m in Sources */ = {isa = PBXBuildFile; fileRef = FE08C3220DDF299800B3169A /* NSColor_CGColor.m */; };
C8A2E52F0F07EA1F0054397C /* KGColorSpace+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF9CB790E13EB8E003502ED /* KGColorSpace+PDF.m */; };
C8A2E5300F07EA1F0054397C /* KTFont+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF9CB980E13EB8E003502ED /* KTFont+PDF.m */; };
C8A2E5310F07EA1F0054397C /* KGFunction+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF9CB9A0E13EB8E003502ED /* KGFunction+PDF.m */; };
C8A2E5320F07EA1F0054397C /* KGImage+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF9CB9C0E13EB8E003502ED /* KGImage+PDF.m */; };
C8A2E5330F07EA1F0054397C /* KGShading+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF9CB9E0E13EB8E003502ED /* KGShading+PDF.m */; };
@ -2703,6 +2699,10 @@
FEAED7A50FD6C9820043F915 /* CGPDFContext.m in Sources */ = {isa = PBXBuildFile; fileRef = FEAED7A40FD6C9820043F915 /* CGPDFContext.m */; };
FEAED7A60FD6C9820043F915 /* CGPDFContext.m in Sources */ = {isa = PBXBuildFile; fileRef = FEAED7A40FD6C9820043F915 /* CGPDFContext.m */; };
FEAED7A70FD6C9820043F915 /* CGPDFContext.m in Sources */ = {isa = PBXBuildFile; fileRef = FEAED7A40FD6C9820043F915 /* CGPDFContext.m */; };
FEB07FA00FF9B37C00C27509 /* KGFont+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB07F9F0FF9B37C00C27509 /* KGFont+PDF.m */; };
FEB07FA10FF9B37C00C27509 /* KGFont+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB07F9F0FF9B37C00C27509 /* KGFont+PDF.m */; };
FEB07FA20FF9B37C00C27509 /* KGFont+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB07F9F0FF9B37C00C27509 /* KGFont+PDF.m */; };
FEB07FA30FF9B37C00C27509 /* KGFont+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB07F9F0FF9B37C00C27509 /* KGFont+PDF.m */; };
FEBF55E50DCA112900CE5A1C /* KGImageSource_JPEG.h in Headers */ = {isa = PBXBuildFile; fileRef = FEBF55E20DCA112900CE5A1C /* KGImageSource_JPEG.h */; };
FEBF55E60DCA112900CE5A1C /* KGPaint.h in Headers */ = {isa = PBXBuildFile; fileRef = FEBF55E30DCA112900CE5A1C /* KGPaint.h */; };
FEBF55E70DCA112900CE5A1C /* KGPaint.m in Sources */ = {isa = PBXBuildFile; fileRef = FEBF55E40DCA112900CE5A1C /* KGPaint.m */; };
@ -2736,8 +2736,6 @@
FEF9CAEA0E133FF2003502ED /* KGSurface_DIBSection.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF9CAE80E133FF2003502ED /* KGSurface_DIBSection.m */; };
FEF9CB9F0E13EB8E003502ED /* KGColorSpace+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CB780E13EB8E003502ED /* KGColorSpace+PDF.h */; };
FEF9CBA00E13EB8E003502ED /* KGColorSpace+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF9CB790E13EB8E003502ED /* KGColorSpace+PDF.m */; };
FEF9CBBE0E13EB8E003502ED /* KTFont+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CB970E13EB8E003502ED /* KTFont+PDF.h */; };
FEF9CBBF0E13EB8E003502ED /* KTFont+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF9CB980E13EB8E003502ED /* KTFont+PDF.m */; };
FEF9CBC00E13EB8E003502ED /* KGFunction+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CB990E13EB8E003502ED /* KGFunction+PDF.h */; };
FEF9CBC10E13EB8E003502ED /* KGFunction+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEF9CB9A0E13EB8E003502ED /* KGFunction+PDF.m */; };
FEF9CBC20E13EB8E003502ED /* KGImage+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF9CB9B0E13EB8E003502ED /* KGImage+PDF.h */; };
@ -3609,6 +3607,7 @@
FEAED79C0FD6C96E0043F915 /* KGDataConsumer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KGDataConsumer.h; sourceTree = "<group>"; };
FEAED79D0FD6C96E0043F915 /* KGDataConsumer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KGDataConsumer.m; sourceTree = "<group>"; };
FEAED7A40FD6C9820043F915 /* CGPDFContext.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CGPDFContext.m; sourceTree = "<group>"; };
FEB07F9F0FF9B37C00C27509 /* KGFont+PDF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KGFont+PDF.m"; sourceTree = "<group>"; };
FEBF55E20DCA112900CE5A1C /* KGImageSource_JPEG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KGImageSource_JPEG.h; sourceTree = "<group>"; };
FEBF55E30DCA112900CE5A1C /* KGPaint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KGPaint.h; sourceTree = "<group>"; };
FEBF55E40DCA112900CE5A1C /* KGPaint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KGPaint.m; sourceTree = "<group>"; };
@ -3653,8 +3652,6 @@
FEF9CAE80E133FF2003502ED /* KGSurface_DIBSection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KGSurface_DIBSection.m; sourceTree = "<group>"; };
FEF9CB780E13EB8E003502ED /* KGColorSpace+PDF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KGColorSpace+PDF.h"; sourceTree = "<group>"; };
FEF9CB790E13EB8E003502ED /* KGColorSpace+PDF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KGColorSpace+PDF.m"; sourceTree = "<group>"; };
FEF9CB970E13EB8E003502ED /* KTFont+PDF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KTFont+PDF.h"; sourceTree = "<group>"; };
FEF9CB980E13EB8E003502ED /* KTFont+PDF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KTFont+PDF.m"; sourceTree = "<group>"; };
FEF9CB990E13EB8E003502ED /* KGFunction+PDF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KGFunction+PDF.h"; sourceTree = "<group>"; };
FEF9CB9A0E13EB8E003502ED /* KGFunction+PDF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KGFunction+PDF.m"; sourceTree = "<group>"; };
FEF9CB9B0E13EB8E003502ED /* KGImage+PDF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KGImage+PDF.h"; sourceTree = "<group>"; };
@ -4184,6 +4181,7 @@
6E2B55B20976075300DA0954 /* CoreGraphics */ = {
isa = PBXGroup;
children = (
FEB07F9F0FF9B37C00C27509 /* KGFont+PDF.m */,
FEAED7A40FD6C9820043F915 /* CGPDFContext.m */,
FEAED79C0FD6C96E0043F915 /* KGDataConsumer.h */,
FEAED79D0FD6C96E0043F915 /* KGDataConsumer.m */,
@ -4193,8 +4191,6 @@
FE25FF610EE58712009C91B1 /* KGFont.m */,
FEF9CB780E13EB8E003502ED /* KGColorSpace+PDF.h */,
FEF9CB790E13EB8E003502ED /* KGColorSpace+PDF.m */,
FEF9CB970E13EB8E003502ED /* KTFont+PDF.h */,
FEF9CB980E13EB8E003502ED /* KTFont+PDF.m */,
FEF9CB990E13EB8E003502ED /* KGFunction+PDF.h */,
FEF9CB9A0E13EB8E003502ED /* KGFunction+PDF.m */,
FEF9CB9B0E13EB8E003502ED /* KGImage+PDF.h */,
@ -5129,7 +5125,6 @@
C889756F0EA0BF3100D0A0A2 /* NSColor_CGColor.h in Headers */,
C88975700EA0BF3100D0A0A2 /* KGSurface_DIBSection.h in Headers */,
C88975710EA0BF3100D0A0A2 /* KGColorSpace+PDF.h in Headers */,
C88975720EA0BF3100D0A0A2 /* KTFont+PDF.h in Headers */,
C88975730EA0BF3100D0A0A2 /* KGFunction+PDF.h in Headers */,
C88975740EA0BF3100D0A0A2 /* KGImage+PDF.h in Headers */,
C88975750EA0BF3100D0A0A2 /* KGShading+PDF.h in Headers */,
@ -5493,7 +5488,6 @@
C8A2E3F00F07EA1F0054397C /* NSColor_CGColor.h in Headers */,
C8A2E3F10F07EA1F0054397C /* KGSurface_DIBSection.h in Headers */,
C8A2E3F20F07EA1F0054397C /* KGColorSpace+PDF.h in Headers */,
C8A2E3F30F07EA1F0054397C /* KTFont+PDF.h in Headers */,
C8A2E3F40F07EA1F0054397C /* KGFunction+PDF.h in Headers */,
C8A2E3F50F07EA1F0054397C /* KGImage+PDF.h in Headers */,
C8A2E3F60F07EA1F0054397C /* KGShading+PDF.h in Headers */,
@ -5855,7 +5849,6 @@
FE08C3230DDF299800B3169A /* NSColor_CGColor.h in Headers */,
FEF9CAE90E133FF2003502ED /* KGSurface_DIBSection.h in Headers */,
FEF9CB9F0E13EB8E003502ED /* KGColorSpace+PDF.h in Headers */,
FEF9CBBE0E13EB8E003502ED /* KTFont+PDF.h in Headers */,
FEF9CBC00E13EB8E003502ED /* KGFunction+PDF.h in Headers */,
FEF9CBC20E13EB8E003502ED /* KGImage+PDF.h in Headers */,
FEF9CBC40E13EB8E003502ED /* KGShading+PDF.h in Headers */,
@ -6887,7 +6880,6 @@
C88976CF0EA0BF3100D0A0A2 /* KGPaint_ramp.m in Sources */,
C88976D00EA0BF3100D0A0A2 /* NSColor_CGColor.m in Sources */,
C88976D20EA0BF3100D0A0A2 /* KGColorSpace+PDF.m in Sources */,
C88976D30EA0BF3100D0A0A2 /* KTFont+PDF.m in Sources */,
C88976D40EA0BF3100D0A0A2 /* KGFunction+PDF.m in Sources */,
C88976D50EA0BF3100D0A0A2 /* KGImage+PDF.m in Sources */,
C88976D60EA0BF3100D0A0A2 /* KGShading+PDF.m in Sources */,
@ -6920,6 +6912,7 @@
FEAED79A0FD6C95D0043F915 /* CGDataConsumer.m in Sources */,
FEAED7A10FD6C96E0043F915 /* KGDataConsumer.m in Sources */,
FEAED7A60FD6C9820043F915 /* CGPDFContext.m in Sources */,
FEB07FA10FF9B37C00C27509 /* KGFont+PDF.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -7218,7 +7211,6 @@
C8A2E52D0F07EA1F0054397C /* KGPaint_ramp.m in Sources */,
C8A2E52E0F07EA1F0054397C /* NSColor_CGColor.m in Sources */,
C8A2E52F0F07EA1F0054397C /* KGColorSpace+PDF.m in Sources */,
C8A2E5300F07EA1F0054397C /* KTFont+PDF.m in Sources */,
C8A2E5310F07EA1F0054397C /* KGFunction+PDF.m in Sources */,
C8A2E5320F07EA1F0054397C /* KGImage+PDF.m in Sources */,
C8A2E5330F07EA1F0054397C /* KGShading+PDF.m in Sources */,
@ -7249,6 +7241,7 @@
FEAED7990FD6C95D0043F915 /* CGDataConsumer.m in Sources */,
FEAED79F0FD6C96E0043F915 /* KGDataConsumer.m in Sources */,
FEAED7A50FD6C9820043F915 /* CGPDFContext.m in Sources */,
FEB07FA20FF9B37C00C27509 /* KGFont+PDF.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -7589,7 +7582,6 @@
FE08C3240DDF299800B3169A /* NSColor_CGColor.m in Sources */,
FEF9CAEA0E133FF2003502ED /* KGSurface_DIBSection.m in Sources */,
FEF9CBA00E13EB8E003502ED /* KGColorSpace+PDF.m in Sources */,
FEF9CBBF0E13EB8E003502ED /* KTFont+PDF.m in Sources */,
FEF9CBC10E13EB8E003502ED /* KGFunction+PDF.m in Sources */,
FEF9CBC30E13EB8E003502ED /* KGImage+PDF.m in Sources */,
FEF9CBC50E13EB8E003502ED /* KGShading+PDF.m in Sources */,
@ -7612,6 +7604,7 @@
FEAED7A30FD6C96E0043F915 /* KGDataConsumer.m in Sources */,
FEAED7A70FD6C9820043F915 /* CGPDFContext.m in Sources */,
FEA661240FF5C6F300E2C03B /* KGFont_gdi.m in Sources */,
FEB07FA00FF9B37C00C27509 /* KGFont+PDF.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -7845,6 +7838,7 @@
FEA316190FD5667D00F480D4 /* NSToolbarItemGroup.m in Sources */,
FEA3161A0FD5667D00F480D4 /* NSControllerMarker.m in Sources */,
FEA3182C0FD5961100F480D4 /* NSRangeEntries.m in Sources */,
FEB07FA30FF9B37C00C27509 /* KGFont+PDF.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@ -1,5 +1,7 @@
#import <CoreGraphics/KGFont.h>
@interface KGFont_gdi : KGFont
@interface KGFont_gdi : KGFont {
unichar *_glyphsToCharacters;
}
@end

View File

@ -1,5 +1,8 @@
#import "KGFont_gdi.h"
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#import <windows.h>
#import <Foundation/NSString_win32.h>
@implementation KGFont(GDI)
@ -9,24 +12,53 @@
@end
@interface KGFont_gdi(forward)
-(void)fetchGlyphsToCharacters;
@end
@implementation KGFont_gdi
-initWithFontName:(NSString *)name {
HDC dc=GetDC(NULL);
HFONT dummy=CreateFont(0,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,[name cString]);
TEXTMETRIC gdiMetrics;
static HFONT Win32FontHandleWithName(NSString *name,int unitsPerEm){
const unichar *wideName=(const unichar *)[name cStringUsingEncoding:NSUnicodeStringEncoding];
return CreateFontW(-unitsPerEm,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,wideName);
}
-initWithFontName:(NSString *)name {
if(name==nil){
[self release];
return nil;
}
_name=[name copy];
SelectObject(dc,dummy);
HDC dc=GetDC(NULL);
if(dc==NULL){
[self release];
return nil;
}
// P. 931 "Windows Graphics Programming" by Feng Yuan, 1st Ed. A font with height of negative otmEMSquare will have precise metrics
// 2048 is a common TrueType em square, so we try that first, and if the font is not TrueType, maybe we'll get some decent metrics with a big size.
_unitsPerEm=2048;
HFONT font=Win32FontHandleWithName(name,_unitsPerEm);
TEXTMETRIC gdiMetrics;
if(font==NULL){
ReleaseDC(NULL,dc);
[self release];
return nil;
}
SelectObject(dc,font);
GetTextMetrics(dc,&gdiMetrics);
// default values if not truetype or truetype queries fail
_unitsPerEm=1;
_ascent=gdiMetrics.tmAscent;
_descent=-gdiMetrics.tmDescent;
_leading=0;
_capHeight=0;
_xHeight=0;
_leading=gdiMetrics.tmInternalLeading+gdiMetrics.tmExternalLeading;
_capHeight=gdiMetrics.tmHeight;
_xHeight=gdiMetrics.tmHeight;
_italicAngle=0;
_stemV=0;
_bbox.origin.x=0;
@ -35,30 +67,32 @@
_bbox.size.height=gdiMetrics.tmHeight;
if(gdiMetrics.tmPitchAndFamily&TMPF_TRUETYPE){
int size=GetOutlineTextMetricsA(dc,0,NULL);
OUTLINETEXTMETRICA *ttMetrics=__builtin_alloca(size);
int size=GetOutlineTextMetricsW(dc,0,NULL);
OUTLINETEXTMETRICW *ttMetrics=__builtin_alloca(size);
ttMetrics->otmSize=sizeof(OUTLINETEXTMETRICA);
if(GetOutlineTextMetricsA(dc,size,ttMetrics)){
LOGFONT logFont;
ttMetrics->otmSize=sizeof(OUTLINETEXTMETRICW);
if(size=GetOutlineTextMetricsW(dc,size,ttMetrics)){
/* P. 931 "Windows Graphics Programming" by Feng Yuan, 1st Ed.
A font with height of negative otmEMSquare will have precise metrics */
GetObject(dummy,sizeof(logFont),&logFont);
logFont.lfHeight=-ttMetrics->otmEMSquare;
logFont.lfWidth=0;
if(ttMetrics->otmEMSquare!=_unitsPerEm){
// if our first try didn't have the typical em square, recreate using the em square
LOGFONT logFont;
GetObject(font,sizeof(logFont),&logFont);
logFont.lfHeight=-ttMetrics->otmEMSquare;
logFont.lfWidth=0;
HFONT fontHandle=CreateFontIndirect(&logFont);
SelectObject(dc,fontHandle);
HFONT emSquareFont=CreateFontIndirect(&logFont);
SelectObject(dc,emSquareFont);
DeleteObject(font);
font=emSquareFont;
ttMetrics->otmSize=sizeof(OUTLINETEXTMETRICA);
size=GetOutlineTextMetricsA(dc,size,ttMetrics);
DeleteObject(dummy);
ReleaseDC(NULL,dc);
ttMetrics->otmSize=sizeof(OUTLINETEXTMETRICW);
size=GetOutlineTextMetricsW(dc,size,ttMetrics);
}
if(size!=0){
_unitsPerEm=ttMetrics->otmEMSquare;
if([name isEqualToString:@"Marlett"]){
_ascent=ttMetrics->otmAscent;
_descent=ttMetrics->otmDescent;
@ -69,7 +103,7 @@
_descent=ttMetrics->otmMacDescent;
_leading=ttMetrics->otmMacLineGap;
}
_capHeight=ttMetrics->otmsCapEmHeight;
_xHeight=ttMetrics->otmsXHeight;
_italicAngle=ttMetrics->otmItalicAngle;
@ -82,9 +116,18 @@
}
}
DeleteObject(font);
ReleaseDC(NULL,dc);
return self;
}
-(void)dealloc {
if(_glyphsToCharacters!=NULL)
NSZoneFree(NULL,_glyphsToCharacters);
[super dealloc];
}
-(CGGlyph)glyphWithGlyphName:(NSString *)name {
return 0;
}
@ -97,4 +140,111 @@
return nil;
}
-(void)fetchAdvances {
[self fetchGlyphsToCharacters];
HANDLE library=LoadLibrary("GDI32");
FARPROC getGlyphIndices=GetProcAddress(library,"GetGlyphIndicesW");
HDC dc=GetDC(NULL);
unichar characters[65536];
uint16_t glyphs[65536];
int i,max;
ABCFLOAT *abc;
for(i=0;i<65536;i++)
characters[i]=i;
HFONT font=Win32FontHandleWithName(_name,_unitsPerEm);
SelectObject(dc,font);
getGlyphIndices(dc,characters,65535,glyphs,0);
_advances=NSZoneMalloc(NULL,sizeof(int)*_numberOfGlyphs);
max=65535;
max=((max/128)+1)*128;
abc=__builtin_alloca(sizeof(ABCFLOAT)*max);
if(!GetCharABCWidthsFloatW(dc,0,max-1,abc))
NSLog(@"GetCharABCWidthsFloat failed");
else {
for(i=max;--i>=0;){
CGGlyph glyph=glyphs[i];
if(glyph<_numberOfGlyphs)
_advances[glyph]=abc[i].abcfA+abc[i].abcfB+abc[i].abcfC;
}
}
DeleteObject(font);
ReleaseDC(NULL,dc);
}
// These are only used for PDF generation until we get PS glyph names working
// They are both temporary and inaccurate
-(void)fetchGlyphsToCharacters {
HDC dc=GetDC(NULL);
unichar characters[65536];
uint16_t glyphs[65536];
int i,maxGlyph=0;
HANDLE library=LoadLibrary("GDI32");
FARPROC getGlyphIndices=GetProcAddress(library,"GetGlyphIndicesW");
for(i=0;i<65536;i++)
characters[i]=i;
HFONT font=Win32FontHandleWithName(_name,_unitsPerEm);
SelectObject(dc,font);
getGlyphIndices(dc,characters,65535,glyphs,0);
DeleteObject(font);
ReleaseDC(NULL,dc);
for(i=0;i<65536;i++)
maxGlyph=MAX(maxGlyph,glyphs[i]);
_numberOfGlyphs=maxGlyph+1;
_glyphsToCharacters=NSZoneMalloc(NULL,sizeof(unichar)*_numberOfGlyphs);
for(i=65536;--i>=0;){
if(glyphs[i]<_numberOfGlyphs)
_glyphsToCharacters[glyphs[i]]=characters[i];
}
}
-(void)getMacRomanBytes:(unsigned char *)bytes forGlyphs:(const CGGlyph *)glyphs length:(unsigned)length {
if(_glyphsToCharacters==NULL)
[self fetchGlyphsToCharacters];
int i;
for(i=0;i<length;i++){
if(glyphs[i]<_numberOfGlyphs){
unichar code=_glyphsToCharacters[glyphs[i]];
if(code<256)
bytes[i]=code;
else
bytes[i]=' ';
}
else
bytes[i]=' ';
}
}
-(void)getMacRomanEncoding:(CGGlyph[256])encoding {
HDC dc=GetDC(NULL);
unichar characters[256];
HANDLE library=LoadLibrary("GDI32");
FARPROC getGlyphIndices=GetProcAddress(library,"GetGlyphIndicesW");
int i;
for(i=0;i<256;i++)
characters[i]=i;
HFONT font=Win32FontHandleWithName(_name,_unitsPerEm);
SelectObject(dc,font);
getGlyphIndices(dc,characters,256,encoding,0);
DeleteObject(font);
ReleaseDC(NULL,dc);
}
@end

View File

@ -13,8 +13,6 @@ typedef struct CGFontMetrics {
float italicAngle;
float capHeight;
float xHeight;
float stemV;
float stemH;
float underlineThickness;
float underlinePosition;
} CGFontMetrics;

View File

@ -297,8 +297,6 @@ static inline CGGlyphMetrics *fetchGlyphAdvancementIfNeeded(KTFont_gdi *self,CGG
_metrics.capHeight=0;
_metrics.leading=0;
_metrics.xHeight=0;
_metrics.stemV=0;
_metrics.stemH=0;
_metrics.underlineThickness=_size/24.0;
if(_metrics.underlineThickness<0)
_metrics.underlineThickness=1;
@ -472,6 +470,7 @@ NSLog(@"name=%@,size=%f",[NSString stringWithCString:fontData. elfLogFont.lfFace
return result;
}
#if 1
-(float)ascender {
return _metrics.ascender/_metrics.emsquare*_metrics.scale;
}
@ -483,14 +482,7 @@ NSLog(@"name=%@,size=%f",[NSString stringWithCString:fontData. elfLogFont.lfFace
-(float)leading {
return _metrics.leading/_metrics.emsquare*_metrics.scale;
}
-(float)stemV {
return _metrics.stemV;
}
-(float)stemH {
return _metrics.stemH;
}
#endif
-(float)underlineThickness {
return _metrics.underlineThickness/_metrics.emsquare*_metrics.scale;
@ -500,18 +492,6 @@ NSLog(@"name=%@,size=%f",[NSString stringWithCString:fontData. elfLogFont.lfFace
return _metrics.underlinePosition/_metrics.emsquare*_metrics.scale;
}
-(float)italicAngle {
return _metrics.italicAngle;
}
-(float)xHeight {
return _metrics.xHeight/_metrics.emsquare*_metrics.scale;
}
-(float)capHeight {
return _metrics.capHeight/_metrics.emsquare*_metrics.scale;
}
-(unsigned)numberOfGlyphs {
return _glyphInfoSet->numberOfGlyphs;
}

View File

@ -45,7 +45,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
browseInfo.hwndOwner=[(Win32Window *)[[NSApp keyWindow] platformWindow] windowHandle];
browseInfo.pidlRoot=NULL;
browseInfo.pszDisplayName=displayName;
browseInfo.lpszTitle=NSNullTerminatedUnicodeFromString(_dialogTitle);
browseInfo.lpszTitle=(const unichar *)[_dialogTitle cStringUsingEncoding:NSUnicodeStringEncoding];
browseInfo.ulFlags=0;
browseInfo.lpfn=NULL;
browseInfo.lParam=0;
@ -204,7 +204,7 @@ static unsigned *openFileHook(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM lParam)
openFileName.lpstrFileTitle=NULL;
openFileName.nMaxFileTitle=0;
openFileName.lpstrInitialDir=[_directory fileSystemRepresentationW];
openFileName.lpstrTitle= NSNullTerminatedUnicodeFromString(_dialogTitle);
openFileName.lpstrTitle= (const unichar *)[_dialogTitle cStringUsingEncoding:NSUnicodeStringEncoding];
openFileName.Flags=
(_allowsMultipleSelection?OFN_ALLOWMULTISELECT:0)|
OFN_NOTESTFILECREATE|

View File

@ -91,7 +91,7 @@ static unsigned *saveFileHook(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM lParam)
openFileName.lpstrFileTitle=NULL;
openFileName.nMaxFileTitle=0;
openFileName.lpstrInitialDir=[_directory fileSystemRepresentationW];
openFileName.lpstrTitle=NSNullTerminatedUnicodeFromString(_dialogTitle);
openFileName.lpstrTitle=(const unichar *)[_dialogTitle cStringUsingEncoding:NSUnicodeStringEncoding];
openFileName.Flags=
OFN_CREATEPROMPT|
OFN_NOTESTFILECREATE|

View File

@ -257,7 +257,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
-(void)setTitle:(NSString *)title {
SetWindowTextW(_handle,NSNullTerminatedUnicodeFromString(title));
SetWindowTextW(_handle,(const unichar *)[title cStringUsingEncoding:NSUnicodeStringEncoding]);
}
-(void)setFrame:(NSRect)frame {

View File

@ -26,7 +26,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
@implementation Win32Workspace
-(BOOL)openURL:(NSURL *)url {
return ((int)ShellExecuteW(GetDesktopWindow(),L"open",NSNullTerminatedUnicodeFromString([url absoluteString]),NULL,NULL,SW_SHOWNORMAL)<=32)?NO:YES;
return ((int)ShellExecuteW(GetDesktopWindow(),L"open",(const unichar *)[[url absoluteString] cStringUsingEncoding:NSUnicodeStringEncoding],NULL,NULL,SW_SHOWNORMAL)<=32)?NO:YES;
}
-(BOOL)openFile:(NSString *)path {

View File

@ -44,7 +44,7 @@
isa = PBXContainerItemProxy;
containerPortal = FECAF5010DB7119B00BA2A8E /* Foundation.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 28D487A90FE04E7100DC03EF /* Foundation.framework */;
remoteGlobalIDString = 28D487A90FE04E7100DC03EF;
remoteInfo = "Foundation-Linux-ppc";
};
FE65207B0FBE3D6300464BFD /* PBXContainerItemProxy */ = {

View File

@ -91,7 +91,6 @@
FE6F7B4B0FD554A800C3244F /* KGShading.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11AD70FD4B4D600082282 /* KGShading.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE6F7B4C0FD554A800C3244F /* KGSurface.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11AD90FD4B4D600082282 /* KGSurface.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE6F7B4D0FD554A800C3244F /* KGzlib.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11ADB0FD4B4D600082282 /* KGzlib.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE6F7B4E0FD554A800C3244F /* KTFont+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11ADD0FD4B4D600082282 /* KTFont+PDF.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE6F7B4F0FD554A800C3244F /* KTFont.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11ADF0FD4B4D600082282 /* KTFont.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE6F7B500FD554A800C3244F /* NSTIFFImageFileDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11AE10FD4B4D600082282 /* NSTIFFImageFileDirectory.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE6F7B510FD554A800C3244F /* NSTIFFReader.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11AE30FD4B4D600082282 /* NSTIFFReader.h */; settings = {ATTRIBUTES = (Private, ); }; };
@ -180,7 +179,6 @@
FE6F7BA60FD554A800C3244F /* KGShading.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11AD80FD4B4D600082282 /* KGShading.m */; };
FE6F7BA70FD554A800C3244F /* KGSurface.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11ADA0FD4B4D600082282 /* KGSurface.m */; };
FE6F7BA80FD554A800C3244F /* KGzlib.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11ADC0FD4B4D600082282 /* KGzlib.m */; };
FE6F7BA90FD554A800C3244F /* KTFont+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11ADE0FD4B4D600082282 /* KTFont+PDF.m */; };
FE6F7BAA0FD554A800C3244F /* KTFont.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11AE00FD4B4D600082282 /* KTFont.m */; };
FE6F7BAB0FD554A800C3244F /* NSTIFFImageFileDirectory.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11AE20FD4B4D600082282 /* NSTIFFImageFileDirectory.m */; };
FE6F7BAC0FD554A800C3244F /* NSTIFFReader.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11AE40FD4B4D600082282 /* NSTIFFReader.m */; };
@ -270,7 +268,6 @@
FE6F7C300FD55FA300C3244F /* KGShading.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11AD70FD4B4D600082282 /* KGShading.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE6F7C310FD55FA300C3244F /* KGSurface.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11AD90FD4B4D600082282 /* KGSurface.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE6F7C320FD55FA300C3244F /* KGzlib.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11ADB0FD4B4D600082282 /* KGzlib.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE6F7C330FD55FA300C3244F /* KTFont+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11ADD0FD4B4D600082282 /* KTFont+PDF.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE6F7C340FD55FA300C3244F /* KTFont.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11ADF0FD4B4D600082282 /* KTFont.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE6F7C350FD55FA300C3244F /* NSTIFFImageFileDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11AE10FD4B4D600082282 /* NSTIFFImageFileDirectory.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE6F7C360FD55FA300C3244F /* NSTIFFReader.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11AE30FD4B4D600082282 /* NSTIFFReader.h */; settings = {ATTRIBUTES = (Private, ); }; };
@ -359,7 +356,6 @@
FE6F7C8B0FD55FA300C3244F /* KGShading.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11AD80FD4B4D600082282 /* KGShading.m */; };
FE6F7C8C0FD55FA300C3244F /* KGSurface.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11ADA0FD4B4D600082282 /* KGSurface.m */; };
FE6F7C8D0FD55FA300C3244F /* KGzlib.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11ADC0FD4B4D600082282 /* KGzlib.m */; };
FE6F7C8E0FD55FA300C3244F /* KTFont+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11ADE0FD4B4D600082282 /* KTFont+PDF.m */; };
FE6F7C8F0FD55FA300C3244F /* KTFont.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11AE00FD4B4D600082282 /* KTFont.m */; };
FE6F7C900FD55FA300C3244F /* NSTIFFImageFileDirectory.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11AE20FD4B4D600082282 /* NSTIFFImageFileDirectory.m */; };
FE6F7C910FD55FA300C3244F /* NSTIFFReader.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11AE40FD4B4D600082282 /* NSTIFFReader.m */; };
@ -548,8 +544,6 @@
FEC11B8A0FD4B4D600082282 /* KGSurface.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11ADA0FD4B4D600082282 /* KGSurface.m */; };
FEC11B8B0FD4B4D600082282 /* KGzlib.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11ADB0FD4B4D600082282 /* KGzlib.h */; settings = {ATTRIBUTES = (Private, ); }; };
FEC11B8C0FD4B4D600082282 /* KGzlib.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11ADC0FD4B4D600082282 /* KGzlib.m */; };
FEC11B8D0FD4B4D600082282 /* KTFont+PDF.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11ADD0FD4B4D600082282 /* KTFont+PDF.h */; settings = {ATTRIBUTES = (Private, ); }; };
FEC11B8E0FD4B4D600082282 /* KTFont+PDF.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11ADE0FD4B4D600082282 /* KTFont+PDF.m */; };
FEC11B8F0FD4B4D600082282 /* KTFont.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11ADF0FD4B4D600082282 /* KTFont.h */; settings = {ATTRIBUTES = (Private, ); }; };
FEC11B900FD4B4D600082282 /* KTFont.m in Sources */ = {isa = PBXBuildFile; fileRef = FEC11AE00FD4B4D600082282 /* KTFont.m */; };
FEC11B910FD4B4D600082282 /* NSTIFFImageFileDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = FEC11AE10FD4B4D600082282 /* NSTIFFImageFileDirectory.h */; settings = {ATTRIBUTES = (Private, ); }; };
@ -843,8 +837,6 @@
FEC11ADA0FD4B4D600082282 /* KGSurface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KGSurface.m; sourceTree = "<group>"; };
FEC11ADB0FD4B4D600082282 /* KGzlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KGzlib.h; sourceTree = "<group>"; };
FEC11ADC0FD4B4D600082282 /* KGzlib.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KGzlib.m; sourceTree = "<group>"; };
FEC11ADD0FD4B4D600082282 /* KTFont+PDF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KTFont+PDF.h"; sourceTree = "<group>"; };
FEC11ADE0FD4B4D600082282 /* KTFont+PDF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KTFont+PDF.m"; sourceTree = "<group>"; };
FEC11ADF0FD4B4D600082282 /* KTFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTFont.h; sourceTree = "<group>"; };
FEC11AE00FD4B4D600082282 /* KTFont.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KTFont.m; sourceTree = "<group>"; };
FEC11AE10FD4B4D600082282 /* NSTIFFImageFileDirectory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSTIFFImageFileDirectory.h; sourceTree = "<group>"; };
@ -1075,8 +1067,6 @@
FEC11ADA0FD4B4D600082282 /* KGSurface.m */,
FEC11ADB0FD4B4D600082282 /* KGzlib.h */,
FEC11ADC0FD4B4D600082282 /* KGzlib.m */,
FEC11ADD0FD4B4D600082282 /* KTFont+PDF.h */,
FEC11ADE0FD4B4D600082282 /* KTFont+PDF.m */,
FEC11ADF0FD4B4D600082282 /* KTFont.h */,
FEC11AE00FD4B4D600082282 /* KTFont.m */,
FEC11AE10FD4B4D600082282 /* NSTIFFImageFileDirectory.h */,
@ -1229,7 +1219,6 @@
FEC11B870FD4B4D600082282 /* KGShading.h in Headers */,
FEC11B890FD4B4D600082282 /* KGSurface.h in Headers */,
FEC11B8B0FD4B4D600082282 /* KGzlib.h in Headers */,
FEC11B8D0FD4B4D600082282 /* KTFont+PDF.h in Headers */,
FEC11B8F0FD4B4D600082282 /* KTFont.h in Headers */,
FEC11B910FD4B4D600082282 /* NSTIFFImageFileDirectory.h in Headers */,
FEC11B930FD4B4D600082282 /* NSTIFFReader.h in Headers */,
@ -1331,7 +1320,6 @@
FE6F7B4B0FD554A800C3244F /* KGShading.h in Headers */,
FE6F7B4C0FD554A800C3244F /* KGSurface.h in Headers */,
FE6F7B4D0FD554A800C3244F /* KGzlib.h in Headers */,
FE6F7B4E0FD554A800C3244F /* KTFont+PDF.h in Headers */,
FE6F7B4F0FD554A800C3244F /* KTFont.h in Headers */,
FE6F7B500FD554A800C3244F /* NSTIFFImageFileDirectory.h in Headers */,
FE6F7B510FD554A800C3244F /* NSTIFFReader.h in Headers */,
@ -1433,7 +1421,6 @@
FE6F7C300FD55FA300C3244F /* KGShading.h in Headers */,
FE6F7C310FD55FA300C3244F /* KGSurface.h in Headers */,
FE6F7C320FD55FA300C3244F /* KGzlib.h in Headers */,
FE6F7C330FD55FA300C3244F /* KTFont+PDF.h in Headers */,
FE6F7C340FD55FA300C3244F /* KTFont.h in Headers */,
FE6F7C350FD55FA300C3244F /* NSTIFFImageFileDirectory.h in Headers */,
FE6F7C360FD55FA300C3244F /* NSTIFFReader.h in Headers */,
@ -1701,7 +1688,6 @@
FEC11B880FD4B4D600082282 /* KGShading.m in Sources */,
FEC11B8A0FD4B4D600082282 /* KGSurface.m in Sources */,
FEC11B8C0FD4B4D600082282 /* KGzlib.m in Sources */,
FEC11B8E0FD4B4D600082282 /* KTFont+PDF.m in Sources */,
FEC11B900FD4B4D600082282 /* KTFont.m in Sources */,
FEC11B920FD4B4D600082282 /* NSTIFFImageFileDirectory.m in Sources */,
FEC11B940FD4B4D600082282 /* NSTIFFReader.m in Sources */,
@ -1797,7 +1783,6 @@
FE6F7BA60FD554A800C3244F /* KGShading.m in Sources */,
FE6F7BA70FD554A800C3244F /* KGSurface.m in Sources */,
FE6F7BA80FD554A800C3244F /* KGzlib.m in Sources */,
FE6F7BA90FD554A800C3244F /* KTFont+PDF.m in Sources */,
FE6F7BAA0FD554A800C3244F /* KTFont.m in Sources */,
FE6F7BAB0FD554A800C3244F /* NSTIFFImageFileDirectory.m in Sources */,
FE6F7BAC0FD554A800C3244F /* NSTIFFReader.m in Sources */,
@ -1893,7 +1878,6 @@
FE6F7C8B0FD55FA300C3244F /* KGShading.m in Sources */,
FE6F7C8C0FD55FA300C3244F /* KGSurface.m in Sources */,
FE6F7C8D0FD55FA300C3244F /* KGzlib.m in Sources */,
FE6F7C8E0FD55FA300C3244F /* KTFont+PDF.m in Sources */,
FE6F7C8F0FD55FA300C3244F /* KTFont.m in Sources */,
FE6F7C900FD55FA300C3244F /* NSTIFFImageFileDirectory.m in Sources */,
FE6F7C910FD55FA300C3244F /* NSTIFFReader.m in Sources */,

View File

@ -3,6 +3,6 @@
@class KGPDFObject,KGPDFContext;
@interface KGFont(PDF)
-(void)getBytes:(unsigned char *)bytes forGlyphs:(const CGGlyph *)glyphs length:(unsigned)length;
-(void)getMacRomanBytes:(unsigned char *)bytes forGlyphs:(const CGGlyph *)glyphs length:(unsigned)length;
-(KGPDFObject *)encodeReferenceWithContext:(KGPDFContext *)context size:(CGFloat)size;
@end

View File

@ -293,10 +293,11 @@ KGPDFArray *O2FontCreatePDFWidthsWithEncoding(O2FontRef self,CGGlyph encoding[25
[result addNumber:width];
}
return result;
return result;
}
-(void)getBytes:(unsigned char *)bytes forGlyphs:(const CGGlyph *)glyphs length:(unsigned)length {
// this is overriden for GDI
-(void)getMacRomanBytes:(unsigned char *)bytes forGlyphs:(const CGGlyph *)glyphs length:(unsigned)length {
int i;
for(i=0;i<length;i++){
@ -342,6 +343,14 @@ KGPDFArray *O2FontCreatePDFWidthsWithEncoding(O2FontRef self,CGGlyph encoding[25
return result;
}
// this is overriden for GDI
-(void)getMacRomanEncoding:(CGGlyph[256])encoding {
int i;
for(i=0;i<256;i++)
encoding[i]=O2FontGetGlyphWithGlyphName(self,MacRomanEncoding[i]);
}
-(KGPDFObject *)encodeReferenceWithContext:(KGPDFContext *)context size:(CGFloat)size {
KGPDFObject *reference=[context referenceForFontWithName:self->_name size:size];
@ -350,8 +359,8 @@ KGPDFArray *O2FontCreatePDFWidthsWithEncoding(O2FontRef self,CGGlyph encoding[25
CGGlyph encoding[256];
int i;
for(i=32;i<256;i++)
encoding[i]=O2FontGetGlyphWithGlyphName(self,MacRomanEncoding[i]);
[self getMacRomanEncoding:encoding];
[result setNameForKey:"Type" value:"Font"];
[result setNameForKey:"Subtype" value:"TrueType"];

View File

@ -34,6 +34,8 @@ typedef KGFont *O2FontRef;
-(CGGlyph)glyphWithGlyphName:(NSString *)name;
-(NSString *)copyGlyphNameForGlyph:(CGGlyph)glyph;
-(void)fetchAdvances;
O2FontRef O2FontCreateWithFontName(NSString *name);
O2FontRef O2FontRetain(O2FontRef self);
void O2FontRelease(O2FontRef self);

View File

@ -39,6 +39,10 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
return nil;
}
-(void)fetchAdvances {
KGInvalidAbstractInvocation();
}
O2FontRef O2FontCreateWithFontName(NSString *name) {
return [[KGFont alloc] initWithFontName:name];
}
@ -99,6 +103,9 @@ size_t O2FontGetNumberOfGlyphs(O2FontRef self) {
BOOL O2FontGetGlyphAdvances(O2FontRef self,const CGGlyph *glyphs,size_t count,int *advances) {
size_t i;
if(self->_advances==NULL)
[self fetchAdvances];
for(i=0;i<count;i++){
CGGlyph glyph=glyphs[i];

View File

@ -19,7 +19,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
#import "KGPDFString.h"
#import "KGShading+PDF.h"
#import "KGImage+PDF.h"
#import "KTFont+PDF.h"
#import "KGFont+PDF.h"
#import "KGMutablePath.h"
#import "KGColor.h"
#import "KGColorSpace+PDF.h"
@ -641,13 +641,17 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
}
-(void)showGlyphs:(const CGGlyph *)glyphs count:(unsigned)count {
unsigned char bytes[count];
unsigned char bytes[count];
[[[self currentState] font] getMacRomanBytes:bytes forGlyphs:glyphs length:count];
[self showText:bytes length:count];
}
-(void)showText:(const char *)text length:(unsigned)length {
[self contentWithString:@"BT "];
KGGraphicsState *state=[self currentState];
KTFont *fontState=[[KTFont alloc] initWithFont:[state font] size:[state pointSize]];
KGPDFObject *pdfObject=[fontState encodeReferenceWithContext:self];
KGPDFObject *pdfObject=[[state font] encodeReferenceWithContext:self size:[state pointSize]];
KGPDFObject *name=[self nameForResource:pdfObject inCategory:"Font"];
[self contentWithFormat:@"%@ %g Tf ",name,[[self currentState] pointSize]];
@ -655,28 +659,10 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
CGAffineTransform matrix=[self textMatrix];
[self contentWithFormat:@"%g %g %g %g %g %g Tm ",matrix.a,matrix.b,matrix.c,matrix.d,matrix.tx,matrix.ty];
[fontState getBytes:bytes forGlyphs:glyphs length:count];
[self contentPDFStringWithBytes:bytes length:count];
[self contentPDFStringWithBytes:text length:length];
[self contentWithString:@" Tj "];
[self contentWithString:@"ET "];
[fontState release];
}
-(void)showText:(const char *)text length:(unsigned)length {
KGGraphicsState *state=[self currentState];
KTFont *fontState=[[KTFont alloc] initWithFont:[state font] size:[state pointSize]];
unichar unicode[length];
CGGlyph glyphs[length];
int i;
// FIX, encoding
for(i=0;i<length;i++)
unicode[i]=text[i];
[fontState getGlyphs:glyphs forCharacters:unicode length:length];
[self showGlyphs:glyphs count:length];
[fontState release];
}
-(void)drawShading:(KGShading *)shading {

View File

@ -46,7 +46,6 @@ enum {
-(CGPoint)positionOfGlyph:(CGGlyph)current precededByGlyph:(CGGlyph)previous isNominal:(BOOL *)isNominalp;
-(void)getGlyphs:(CGGlyph *)glyphs forCharacters:(const unichar *)characters length:(unsigned)length;
-(void)getCharacters:(unichar *)characters forGlyphs:(const CGGlyph *)glyphs length:(unsigned)length;
-(void)getAdvancements:(CGSize *)advancements forGlyphs:(const CGGlyph *)glyphs count:(unsigned)count;

View File

@ -116,10 +116,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
}
}
-(void)getCharacters:(unichar *)characters forGlyphs:(const CGGlyph *)glyphs length:(unsigned)length {
KGInvalidAbstractInvocation();
}
-(void)getAdvancements:(CGSize *)advancements forGlyphs:(const CGGlyph *)glyphs count:(unsigned)count {
unsigned i;
int advances[count];

View File

@ -15,19 +15,29 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
typedef uint16_t unichar;
typedef enum {
NSUnicodeStringEncoding,
NSASCIIStringEncoding,
NSNEXTSTEPStringEncoding,
NSEUCStringEncoding,
NSUTFStringEncoding,
NSISOLatin1StringEncoding,
NSSymbolStringEncoding,
NSNonLossyASCIIStringEncoding,
NSShiftJISStringEncoding,
NSUTF8StringEncoding,
NSMacOSRomanStringEncoding,
NSUTF16BigEndianStringEncoding,
NSUTF16LittleEndianStringEncoding
NSASCIIStringEncoding=1,
NSNEXTSTEPStringEncoding=2,
NSJapaneseEUCStringEncoding=3,
NSUTF8StringEncoding=4,
NSISOLatin1StringEncoding=5,
NSSymbolStringEncoding=6,
NSNonLossyASCIIStringEncoding=7,
NSShiftJISStringEncoding=8,
NSISOLatin2StringEncoding=9,
NSUnicodeStringEncoding=10,
NSWindowsCP1251StringEncoding=11,
NSWindowsCP1252StringEncoding=12,
NSWindowsCP1253StringEncoding=13,
NSWindowsCP1254StringEncoding=14,
NSWindowsCP1250StringEncoding=15,
NSISO2022JPStringEncoding=21,
NSMacOSRomanStringEncoding=30,
NSProprietaryStringEncoding=0x00010000,
NSUTF16BigEndianStringEncoding=0x90000100,
NSUTF16LittleEndianStringEncoding=0x94000100,
NSUTF32StringEncoding=0x8c000100,
NSUTF32BigEndianStringEncoding=0x98000100,
NSUTF32LittleEndianStringEncoding=0x9c000100,
} NSStringEncoding;
enum {
@ -35,7 +45,7 @@ enum {
NSLiteralSearch=0x02,
NSBackwardsSearch=0x04,
NSAnchoredSearch=0x08,
NSNumericSearch = 0x40,
NSNumericSearch= 0x40,
};
typedef NSUInteger NSStringCompareOptions;
typedef NSUInteger NSStringEncodingConversionOptions;

View File

@ -1338,7 +1338,7 @@ U+2029 (Unicode paragraph separator), \r\n, in that order (also known as CRLF)
-(const char *)cStringUsingEncoding:(NSStringEncoding)encoding {
NSUInteger length=[self length];
unichar buffer[length];
unichar buffer[length+1];
switch(encoding){
@ -1350,6 +1350,12 @@ U+2029 (Unicode paragraph separator), \r\n, in that order (also known as CRLF)
return utf8;
}
break;
case NSUnicodeStringEncoding:
[self getCharacters:buffer];
buffer[length]=0x0000;
return [[NSData dataWithBytes:buffer length:(length+1)*sizeof(unichar)] bytes];
default:
NSUnimplementedMethod();

View File

@ -291,7 +291,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
path=[NSString stringWithCharacters:buffer length:length];
}
return NSNullTerminatedUnicodeFromString(path);
return (const unichar *)[path cStringUsingEncoding:NSUnicodeStringEncoding];
}
-(const char*)fileSystemRepresentationWithPath:(NSString *)path {

View File

@ -9,7 +9,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
#import <Foundation/NSString.h>
FOUNDATION_EXPORT NSString *NSStringFromNullTerminatedUnicode(const unichar *characters);
FOUNDATION_EXPORT const unichar *NSNullTerminatedUnicodeFromString(NSString *string);
FOUNDATION_EXPORT NSData *NSTaskArgumentDataFromString(NSString *string);
FOUNDATION_EXPORT NSData *NSTaskArgumentDataFromStringW(NSString *string);

View File

@ -17,16 +17,6 @@ NSString *NSStringFromNullTerminatedUnicode(const unichar *characters) {
return [NSString stringWithCharacters:characters length:length];
}
const unichar *NSNullTerminatedUnicodeFromString(NSString *string) {
NSUInteger length=[string length];
unichar buffer[length+1];
[string getCharacters:buffer];
buffer[length]=0x0000;
return [[NSData dataWithBytes:buffer length:(length+1)*sizeof(unichar)] bytes];
}
NSData *NSTaskArgumentDataFromString(NSString *string) {
NSUInteger i,length=[string length],resultLength=0;
unichar buffer[length];