入手方法と動作環境Q:MLTE APIはどこで入手できますか?また、アップルはTextEditに代えてMLTEを利用するエディットテキストコントロールを作成するためのAPIについて言及していました。 A:MLTE APIはMac OS X v10.0以降、Mac OS 8.6以降に対応したCarbonLibの全バージョン、およびMac OS 9.0以降に含まれています。 UnicodeエディットテキストコントロールはMac OS X v10.0以降に含まれています。UnicodeエディットテキストコントロールはCarbonLibには含まれていません。 ビューレクタングルとデスティネーションレクタングルの管理Q:MLTEオブジェクトでビューレクタングルとデスティネーションレクタングルを設定、変更する方法は? A:オブジェクトの作成時に、 a)iFrameがNULLの場合(ウインドウの場合)オブジェクトの作成時に
b)iFrameが有効なレクタングルへのポインタの場合(ペインの場合)
では、MLTEクライアントでビューレクタングルとデスティネーションレクタングルの調節ができるようにするAPIについて説明しましょう。 ビューレクタングルだけを設定し、デスティネーションレクタングルは変更せずそのままにしておくというのが、
今のところ、MLTEには現在のデスティネーションレクタングルを設定したり取得したりする関数はありません。しかし、ビューレクタングルやデスティネーションレクタングルを別の値に設定する必要がある場合は、 では、 MLTEでQuartzを利用するにはQ:システムの他の部分と同じように、Mac OS Xでアンチエイリアス化されたテキストをMLTEにレンダリングさせたいと思います。MLTEはこの機能をサポートしていますか? A:MLTEはMac OS X v10.0以降でQuartzのアンチエイリアス化されたテキストをサポートしています。これを行うには、クライアント側でCGコンテキストを作成し、 リスト1:Quartzレンダリングの有効化
TXNControlTag controlTags[] = { kATSUCGContextTag };
TXNControlData controlData[1];
CGContextRef cgContext;
if ( CreateCGContextForPort( aGrafPort, &cgContext ) == noErr )
{
controlData[0].uValue = (UInt32) cgContext;
status = TXNSetTXNObjectControls(
theMLTEObject,
false,
sizeof( controlTags ) / sizeof( TXNControlTag ),
controlTags,
controlData );
}
カーソルの表示についてQ:MLTEオブジェクトにフォーカスが当たっていない場合は A:Mac OS X v10.0以降、およびCarbonLib 1.2以降のMLTEには、オブジェクトにフォーカスが当たっていない場合のカーソルやテキスト選択の外観を柔軟に変更できるフレームオプションがいくつか用意されました。このフレームオプションは、 フレームオプション MLTEオブジェクトの作成時にこれらのオプションを設定すると、オブジェクトにフォーカスが当たっていないときにカーソルは表示されません。 また、制御タグ テキストスタイル属性の設定Q:現在のセレクト範囲の色、大きさ、スタイルを設定するには? A: リスト2:テキストスタイル属性の設定
// タイプ属性データ構造体を作成
RGBColor fontColor = { 0xFFFF, 0, 0 };
UInt32 fontSize = 36 << 16; // needs to be in Fixed format
TXNTypeAttributes attributes[] = {
{ kTXNQDFontStyleAttribute, kTXNQDFontStyleAttributeSize, bold },
{ kTXNQDFontColorAttribute, kTXNQDFontColorAttributeSize, &fontColor },
{ kTXNQDFontSizeAttribute, kTXNQDFontSizeAttributeSize, fontSize }
};
// TXNSetTypeAttributesの呼び出し
status = TXNSetTypeAttributes( myMLTEObject, 3, attributes,
kTXNUseCurrentSelection,
kTXNUseCurrentSelection );
ここでは フォントの設定Q:現在のセレクト範囲のフォントを設定するには? A:まず、使いたいフォントの リスト3:フォントの設定
//ATSUIフォントIDの取得
Str255 fontName = "\pApple Chancery";
ATSUFontID fontID;
status = ATSUFindFontFromName(
(Ptr) fontName+1,
(long) fontName[0],
kFontFullName,
kFontNoPlatform,
kFontNoScript,
kFontNoLanguage,
&fontID );
//TXNSetTypeAttributes関数を利用してATSUIフォントIDをMLTEへ渡す
TXNTypeAttributes attributes[] =
{kATSUFontTag, sizeof(ATSUFontID), {0}};
attributes.data.dataValue = fontID;
status = TXNSetTypeAttributes( myMLTEObject, 1, attributes,
kTXNUseCurrentSelection, kTXNUseCurrentSelection );
ATSUI APIに関する他の資料は、Apple Developer WebサイトのATSUI Referenceで入手できます。 フォントの取得Q:MLTEで、任意のスタイルランで使われているフォントを知るには? A:スタイルランで使われているATSUIフォントIDを知るには、 リスト4:フォントの取得
ATSUFontID fontID;
TXNContinuousFlags continuousFlags;
TXNTypeAttributes attributes[] =
{kATSUFontTag, sizeof(ATSUFontID), {0}};
TXNGetContinuousTypeAttributes( myMLTEObject,
&continuousFlags, 1, attributes);
fontID = attributes[0].data.dataValue;
スクロールバーのレンダリングQ:現在、MLTEオブジェクトを作成しています(オブジェクトの初期のレクタングルが指定された状態です)。しかし、 A:ご質問の問題を解決するには、 ペインオブジェクトで CarbonアプリケーションQ:MLTEを使うアプリケーションをCarbonに対応させようとしています。APIの呼び出しに違いはありますか? A:Carbonアプリケーションでは、 Mac OS X v10.0とCarbonLib 1.3では、MLTEのCarbonイベントハンドラをサポートするために、 CarbonイベントQ:MLTEでCarbonイベントのサポートを有効にするには? A:デフォルトでは、MLTEはテキストの入力にApple Event Managerを利用します。しかし、
テキスト入力イベント向けにMLTECarbonイベントハンドラを有効にするサンプルコードを以下に示します。 リスト5:MLTE Carbonイベントハンドラの有効化
// 変数の宣言
TXNControlTag controlTags[] = { kTXNUseCarbonEvents };
TXNControlData controlData[1];
TXNCarbonEventInfo carbonEventInfo;
CFStringRef keys[] = { kTXNTextInputHandlerKey };
EventTargetRef values[] =
{ GetWindowEventTarget( myWindowRef ) };
// Carbonのテキスト入力イベントを処理するための
// TXNCarbonEventInfoデータ構造体を初期化
carbonEventInfo.useCarbonEvents = true;
carbonEventInfo.filler = 0;
carbonEventInfo.flags = kTXNNoAppleEventHandlersMask;
carbonEventInfo.fDictionary =
CFDictionaryCreate( kCFAllocatorDefault,
(const void **) &keys,
(const void **) &values,
1,
&kCFCopyStringDictionaryKeyCallBacks,
NULL );
controlData[0].uValue = (UInt32) &carbonEventInfo;
// CarbonハンドラをインストールするようMLTEへ通知
status = TXNSetTXNObjectControls(
theMLTEObject,
false,
sizeof( controlTags ) / sizeof( TXNControlTag ),
controlTags,
controlData );
// 辞書のリリース
CFRelease( carbonEventInfo.fDictionary );
パフォーマンスに関するヒントQ: A:MLTEオブジェクトの内容をクリアするには、 Q: A:
ドキュメント改訂履歴
掲載日: 2005-09-12 | ||||||||||||
|