ダウンロード: ソースコード
このドキュメントは日本語で書かれています。
This document is written in Japanese.
Dieses Dokument ist in Japanisch geschrieben.
Ce document est écrit en japonais.
Dit document is in het Japans geschreven.
Questo documento è scritto in giapponese.
Este documento está escrito en japonés.
Detta dokument är skrivet på japanska.
以下の部分は、プログラムソースを理解する為の文章ですのでアプリケーションを利用する際に読む必要はありません。
Sketchと主要な部分は同じにしてある。SKTDrawDocument,SKTGraphicView,SKTGraphicの働きは全く変えていない。
各クラスの働きについては、Sketchソースの中にあるReadme.rtfが参考になる。
Sketchのソース内にはReadme.rtf, ToDo.txtなどの参考文献がある。
SKTAppDelegateがNSApplicationのデレゲートになっている。
ドキュメントはSKTDocument
ドキュメントごとのviewはSKTGraphicView
view内の各オブジェクトはSKTGraphic
-[SKTDocument readFromData:]から+[SKTGraphic graphicsWithProperties:]から-[SKTGraphicのサブクラス initWithProperties:]でSKTDocumentのNSMutableArrayのgraphics変数に各描画オブジェクトが格納される。
OS10.5での変更点
_gFlags構造体が無くなった。_gFlags.drawsFill--_isDrawingFill, _lineWidth--_strokeWidth, _gFlags.drawsStroke--_isDrawingStroke, へ変わってしまった。
_gFlags構造体が無くなったことによる変更。_gFlags.windingRule--_windingRule, _gFlags.linejoin--_lineJoin, _gFlags.linecap--_lineCap, _gFlags.formEntry--_formEntry, _gFlags.localizeFormEntry--_localizeFormEntry, _gFlags.locked--_locked, _gFlags.shading--_shading,_shadowBlurRadius--shadowBlurRadiusValue,
loadPropertyListRepresentation が - (id)initWithProperties:(NSDictionary *)propertiesに変わった。
- (NSMutableDictionary *)propertyListRepresentation が - (NSMutableDictionary *)properties に変わった。
以前の_gFlags.arrowAtStartsと_gFlags.arrowAtEndとをまとめて、_arrowStateとした。
KVC,KVO でやるには、変数名の頭文字が小文字でないとかなり使いにくい。それに合わせてファイルのkeyも小文字に変更したのが複数ある。
bind: でmaindow.windowController.graphicController.・・・をModel Key Pathとしたとき、windowControllerにNSWindowがあってgraphicController以降の仕様が満たされていないときハングアップもしくは暴走する。これを防ぐにはwindowControllerのwindowをNSPanelにしなければならない。PreferencesControllerは此の方法を使っている。
SKTGraphic のundo の使い方は、属性値が変更されたときのアップデートと兼ねた方法でやらせる。+ (void)initializeの中の[self setKeys:triggerChangeNotificationForDependentKey:]に定義されているSKTGraphicDrawingBoundsKey, SKTGraphicDrawingContentsKey の値を変更すれば良い。setKeys:の引数は- (NSSet *)keysForValuesAffectingDrawingBounds と - (NSSet *)keysForValuesAffectingDrawingContents とで定義する。この2つのどちらかの配列に、アップデートさせる変数のkeyを追加定義する。undo させる変数のkey 追加は -(NSSet *)keysForValuesToObservForUndo で追加定義する。undoのlocalized文字列は - (NSString *)presentablePropertyNameForKey:で追加定義する。SKTGraphicからundoされる文字列には Change of (の変更)という文字がprefix される。
SKTGraphicView からのundoにはChange of がprefixされない。
- (NSBezierPath *)bezierPath が -(NSBezierPath *)bezierPathForDrawing に変わった。
- (void)drawInView:(SKTGraphicView *)view isSelected:(BOOL)flag
が- (void)drawContentsInView:(NSView *)view isBeingCreateOrEdited:(BOOL)isBeingCreatedOrEditingに変わった。bezierPathForDrawingで作ったNSBezierPathをdrawInView::でfillとstrokeをしているだけなので複雑な描画をするときは両方ともオーバーライドしなければならない。
shading(グラデーション)のundoについては、かなり不完全である。ASShadingModelの定数を変更させているので、undoをうまく動作させることができなかった。
64ビットの実行環境では、copy:(id)senderによるペーストボードへの書き込みがOS10.5 64ビットのバグにより不完全である。SKTextのNSPostscriptPboardTypeとNSPDFPboardTypeへの書き込みができない。SKTsvgについてはNSPostscriptPboardTypeへの書き込みができない。SKTsvgはtextエレメントが含まれているとハングアップするバグがあるので書き込みしないようにしている。総てSKTRenderingView.mの中で処理しているので、バグが解消されたら修正すると使いやすくなる。
64ビットの実行環境で、SKTTextに漢字が含まれている場合に、プリントするとハングアップする。OS10.5のバグである。
以下はSketchの旧バージョンに関する解説です。旧バージョンとはMac OS X 10.4までに附属していたSketchです。
SKTDrawAppDelegateがNSApplicationのデレゲートになっている。
ドキュメントはSKTDrawDocument
ドキュメントごとのviewはSKTGraphicView
view内の各オブジェクトはSKTGraphic
SKTGraphicの各オブジェクトに変更があったときは、SKTGraphicのdidChange:により[[NSNotificationCenter defaultCenter] postNotificationName:SKTGraphicDidChangeNotification object:self]がpostされる。