今日一番ショックだったこと

JellyBeans を久しぶりにメンテナンスしようと思って、ターゲットSDKMac OS X 10.5 にセットしてからビルドしてみたら、「Deprecated な関数を使ってますよ〜」と警告された。おやおや、どこのどいつだい?と思って、見てみたら…
Appearance Manager Reference より:

TruncateThemeText
Truncates text to fit within the width you specify. (Deprecated in Mac OS X v10.5. There is no replacement function; use HIThemeGetTextDimensions or HIThemeDrawTextBox instead.)

Deprecated Appearance Manager Functions
OSStatus TruncateThemeText (
   CFMutableStringRef inString,
   ThemeFontID inFontID,
   ThemeDrawState inState,
   SInt16 inPixelWidthLimit,
   TruncCode inTruncWhere,
   Boolean *outTruncated
);

JellyBeans の Dock メニューや履歴メニューで、長過ぎるタイトルを適当な幅に切り詰めるために愛用している TruncateThemeText() が Deprecated になっていたのですよ。もちろん、10.5 ではまだ使用できるから気にするなと言われれば気にしなくていいのだけれど、個人的に非推奨になった関数からはなるべく早めに脱却したい。精神衛生的によろしくないのだ。
ただ、今回は「There is no replacement function」なのが痛いなぁ… 基本的に Cocoa only で、ときどき CoreFoundation、どうしてもっていうところにちょこッとSisterCarbon、な私には、HIThemeうんちゃらで代用せよと言われてもワケワカラン…


考えられる対応策は以下の4つ:

  • 今はまだ TruncateThemeText() が動作するのだから、ビルド警告は気にせず放っておく。
  • がんばって HIThemeDrawTextBox とかを勉強して、実装し直す。
  • 文字列を「一定の幅に」切り詰めるのを諦め、「一定の文字数に」切り詰めることで妥協する(この方が自分で実装するにはやりやすい)。
  • 文字列を切り詰めるのは一切止めて、長かろうが何だろうがそのままメニュータイトルに垂れ流す(それはイヤだ)。

ふむ。どうしたものかね。