macOS版 背景画像表示機能追加
---- Graphic Background-image ←新規追加 ImageFilePath ←新規追加 'path/to/file' ←設定例 ----
ただし画像ファイルパス設定エディットボックスは、キーボードでの編集は不可とする。 Sandbox環境では、NSOpenPanelで選択されたファイル以外にアクセスできないため。
Sandbox環境では、NSOpenPanelで画像ファイルを選択した直後は、その画像ファイルにアクセス可能である。 しかしアプリが再起動した後は、同じファイルパスであっても画像ファイルへのアクセスが失敗する。 画像ファイルのパスを保存するだけでは、再起動後に参照できなくなるため、Scurity-Scoped Bookmark を利用する。利用手順は次の通り。
userDefaultsのScurity-Scoped Bookmark保存先のキーは次の通り。
SSBookmark/Background-image/ImageFileURL参考サイト
App Sandbox Design Guide https://developer.apple.com/library/content/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html#//apple_ref/doc/uid/TP40011183-CH3-SW16
背景画像描画クラスを新規作成。
Security-Scoped Bookmarkクラスを新規作成。
メニューID一覧に「Background Image」の識別子MenuBackgroundImageを追加。
「Background Image」のメニュー項目を返却する処理を追加。
新規追加メソッド。「Background Image」メニューが選択されたときに、 アプリケーションオブジェクトの表示効果設定メソッドOnMenuEnableEffectを呼び出す。
「Background Image」メニューが選択されたときに、背景画像表示フラグのON/OFFを切り替える。
シーン生成時にシーンオブジェクトに対して、景画像表示フラグのON/OFFを設定する。
「Background Image」メニューのスタイル更新処理を追加。
「Background Image」メニューのチェックマーク表示処理を追加。
シーンオブジェクトへの背景画像表示設定反映処理を追加。
画像ファイルパスと画像ファイルURLのメンバ変数初期化を追加。
画像ファイルパスと画像ファイルURLのメンバ変数解放処理を追加。
ファイル選択ボタン(...)が押された時、ファイル選択ダイアログを表示する。 ダイアログが閉じられた後、ファイルが選択された場合はエディットボックスに ファイルパスを反映する。 選択可能なファイルは"*.jpg *.png"とする。
ファイルクリアボタン(Clear)が押されたとき、エディットボックスを空にする。
ユーザ設定値読み込み処理loadConfFileの呼び出しを追加。 背景画像ファイルパス初期化処理initBackgroundImageFilePathの呼び出しを追加。
ユーザ設定情報のカテゴリとセクション設定を追加。
ユーザ設定から、背景画像ファイルパスを取得する処理を追加。
背景画像ファイルパスエディットボックスの初期化処理を新規追加。
背景画像ファイルパスの保存処理を追加。
ユーザ設定情報のカテゴリとセクション設定を追加。
背景画像設定保存処理を新規追加。 MTSecurityScopedBookmarkクラスを用いて、 Security-Scoped Bookmarkの作成と保存を行う。
エフェクト種別のenumに"EffectBackgroundImage"を追加。
背景画像ファイルパスの格納先の定義を追加。
メンバに背景画像描画オブジェクトを追加。 オブジェクト生成、描画、リリース、表示設定メソッドを修正。(Create,Draw,Release,SetEffect)
テクスチャ画像読み込み時の画像サイズチェックを変更した。 ユーザが背景画像ファイルを選択することで、2048x2048より大きい画像を選択される可能性が高いため。
Scurity-Scoped Bookmarkを有効にするため、entitlementsに次の設定を追加する。
com.apple.security.files.bookmarks.app-scope YES
Scurity-Scoped Bookmarkは、OS X 10.7.3(Lion)以降で利用可能であるため、 Deployment Targetを10.6から10.7に変更する。 これによりOS X 10.6(Snow Leopard)は、サポート対象外とする。
Targets / MIDITrail / General / Deployment Info / Deployment Target
NSOpenPanelで選択されたファイルのパスをScurity-Scoped Bookmarkとして保存したあと、 そのファイルを削除/移動/リネーム/差し替えを行った時に、Security-Scoped Bookmarkから NSURLに戻すとき(URLByResolvingBookmarkData)何が起きるかを確認した。
(1) ファイル削除 :URLByResolvingBookmarkData が失敗する (2) ファイル移動 :stale = YES URLは移動後のファイル名になっている (3) ファイルリネーム :stale = YES URLはリネーム後のファイル名になっている (4) ファイル削除+ファイル差し替え :stale = YES ファイル読み込みは成功する 差し替えられたファイルが開かれる (5) ファイル移動+ファイル差し替え :stale = YES ファイル読み込みは成功する 差し替えられたファイルが開かれる (6) ファイルリネーム+ファイル差し替え :stale = YES ファイル読み込みは成功する 差し替えられたファイルが開かれる
背景画像を表示する機能を追加する。 iOS版の機能を移植する。(#36984 iOS版 背景画像表示機能追加)