Mercurial > projects > dstep
view dstep/appkit/NSSimpleHorizontalTypesetter.d @ 16:19885b43130e
Huge update, the bridge actually works now
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Sun, 03 Jan 2010 22:06:11 +0100 |
parents | |
children | f8a3b67adfcb |
line wrap: on
line source
/** * Copyright: Copyright (c) 2009 Jacob Carlborg. * Authors: Jacob Carlborg * Version: Initial created: Sep 24, 2009 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) */ module dstep.appkit.NSSimpleHorizontalTypesetter; import dstep.appkit.NSFont; import dstep.appkit.NSLayoutManager; import dstep.appkit.NSParagraphStyle; import dstep.appkit.NSTextContainer; import dstep.appkit.NSTextStorage; import dstep.appkit.NSTypesetter; import dstep.internal.Version; import dstep.foundation.NSGeometry; import dstep.foundation.NSObjCRuntime; import dstep.foundation.NSRange; import dstep.objc.bridge.Bridge; import dstep.objc.objc; version (D_LP64) { pragma(msg, "warning: NSSimpleHorizontalTypesetter is deprecated starting from Mac OS X 10.4 Tiger."); pragma(msg, "warning: Developers are recommended to adopt NSATSTypesetter, the default concrete subclass from Mac OS X 10.3 Panther."); } else: typedef int NSLayoutStatus; enum { NSLayoutNotDone = 0, NSLayoutDone, NSLayoutCantFit, NSLayoutOutOfGlyphs } typedef int NSGlyphLayoutMode; enum { NSGlyphLayoutAtAPoint = 0, NSGlyphLayoutAgainstAPoint, NSGlyphLayoutWithPrevious } typedef int NSLayoutDirection; enum { NSLayoutLeftToRight = 0, NSLayoutRightToLeft } const NSBaselineNotSet = -1.0; const NumGlyphsToGetEachTime = 20; alias extern (C) NSPoint function (id obj, SEL sel, NSGlyph cur, NSGlyph prev, bool isNominal) _NSPositionOfGlyphMethod; struct NSTypesetterGlyphInfo { NSPoint curLocation; float extent; float belowBaseline; float aboveBaseline; uint glyphCharacterIndex; id font; NSSize attachmentSize; struct { uint defaultPositioning; //:1 uint dontShow; //:1 uint isAttachment; //:1 } } const TNSTypesetterSubclassExtensions = ` void typesetterLaidOneGlyph (NSTypesetterGlyphInfo* gl) { return invokeObjcSelf!(void, "typesetterLaidOneGlyph:", NSTypesetterGlyphInfo*)(gl); } void willSetLineFragmentRect (NSRect* aRect, NSRange aRange, NSRect* bRect) { return invokeObjcSelf!(void, "willSetLineFragmentRect:forGlyphRange:usedRect:", NSRect*, NSRange, NSRect*)(aRect, aRange, bRect); } `; class NSSimpleHorizontalTypesetter : NSTypesetter { mixin (ObjcWrap); static NSSimpleHorizontalTypesetter sharedInstance () { return invokeObjcSelfClass!(NSSimpleHorizontalTypesetter, "sharedInstance"); } NSLayoutManager currentLayoutManager () { return invokeObjcSelf!(NSLayoutManager, "currentLayoutManager"); } NSTextContainer currentContainer () { return invokeObjcSelf!(NSTextContainer, "currentContainer"); } NSParagraphStyle currentParagraphStyle () { return invokeObjcSelf!(NSParagraphStyle, "currentParagraphStyle"); } NSTextStorage currentTextStorage () { return invokeObjcSelf!(NSTextStorage, "currentTextStorage"); } NSTypesetterGlyphInfo baseOfTypesetterGlyphInfo () { return invokeObjcSelf!(NSTypesetterGlyphInfo, "baseOfTypesetterGlyphInfo"); } NSUInteger sizeOfTypesetterGlyphInfo () { return invokeObjcSelf!(NSUInteger, "sizeOfTypesetterGlyphInfo"); } NSUInteger capacityOfTypesetterGlyphInfo () { return invokeObjcSelf!(NSUInteger, "capacityOfTypesetterGlyphInfo"); } NSUInteger firstGlyphIndexOfCurrentLineFragment () { return invokeObjcSelf!(NSUInteger, "firstGlyphIndexOfCurrentLineFragment"); } void layoutGlyphsInLayoutManager (NSLayoutManager layoutManager, NSUInteger startGlyphIndex, NSUInteger maxNumLines, out NSUInteger nextGlyphIndex) { return invokeObjcSelf!(void, "layoutGlyphsInLayoutManager:startingAtGlyphIndex:maxNumberOfLineFragments:nextGlyphIndex:", NSLayoutManager, NSUInteger, NSUInteger, NSUInteger*)(layoutManager, startGlyphIndex, maxNumLines, &nextGlyphIndex); } NSLayoutStatus layoutGlyphsInHorizontalLineFragment (NSRect* lineFragmentRect, float* baseline) { return invokeObjcSelf!(NSLayoutStatus, "layoutGlyphsInHorizontalLineFragment:baseline:", NSRect*, float*)(lineFragmentRect, baseline); } void clearGlyphCache () { return invokeObjcSelf!(void, "clearGlyphCache"); } void fillAttributesCache () { return invokeObjcSelf!(void, "fillAttributesCache"); } void clearAttributesCache () { return invokeObjcSelf!(void, "clearAttributesCache"); } NSUInteger growGlyphCaches (NSUInteger desiredCapacity, bool fillGlyphInfo) { return invokeObjcSelf!(NSUInteger, "growGlyphCaches:fillGlyphInfo:", NSUInteger, bool)(desiredCapacity, fillGlyphInfo); } void updateCurGlyphOffset () { return invokeObjcSelf!(void, "updateCurGlyphOffset"); } void insertGlyph (NSGlyph glyph, NSUInteger glyphIndex, NSUInteger charIndex) { return invokeObjcSelf!(void, "insertGlyph:atGlyphIndex:characterIndex:", NSGlyph, NSUInteger, NSUInteger)(glyph, glyphIndex, charIndex); } NSLayoutStatus layoutControlGlyphForLineFragment (NSRect lineFrag) { return invokeObjcSelf!(NSLayoutStatus, "layoutControlGlyphForLineFragment:", NSRect)(lineFrag); } void layoutTab () { return invokeObjcSelf!(void, "layoutTab"); } void breakLineAtIndex (NSUInteger location) { return invokeObjcSelf!(void, "breakLineAtIndex:", NSUInteger)(location); } NSUInteger glyphIndexToBreakLineByHyphenatingWordAtIndex (NSUInteger charIndex) { return invokeObjcSelf!(NSUInteger, "glyphIndexToBreakLineByHyphenatingWordAtIndex:", NSUInteger)(charIndex); } NSUInteger glyphIndexToBreakLineByWordWrappingAtIndex (NSUInteger charIndex) { return invokeObjcSelf!(NSUInteger, "glyphIndexToBreakLineByWordWrappingAtIndex:", NSUInteger)(charIndex); } NSLayoutStatus layoutControlGlyphForLineFragment (NSRect lineFrag) { return invokeObjcSelf!(NSLayoutStatus, "layoutControlGlyphForLineFragment:", NSRect)(lineFrag); } void fullJustifyLineAtGlyphIndex (NSUInteger glyphIndexForLineBreak) { return invokeObjcSelf!(void, "fullJustifyLineAtGlyphIndex:", NSUInteger)(glyphIndexForLineBreak); } // NSTypesetterSubclassExtensions void typesetterLaidOneGlyph (NSTypesetterGlyphInfo* gl) { return invokeObjcSelf!(void, "typesetterLaidOneGlyph:", NSTypesetterGlyphInfo*)(gl); } void willSetLineFragmentRect (NSRect* aRect, NSRange aRange, NSRect* bRect) { return invokeObjcSelf!(void, "willSetLineFragmentRect:forGlyphRange:usedRect:", NSRect*, NSRange, NSRect*)(aRect, aRange, bRect); } }