aviutl2_sys/plugin2.rs
1#![allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
2
3use crate::common::LPCWSTR;
4use crate::{
5 filter2::FILTER_PLUGIN_TABLE, input2::INPUT_PLUGIN_TABLE, module2::SCRIPT_MODULE_TABLE,
6 output2::OUTPUT_PLUGIN_TABLE,
7};
8use std::ffi::c_void;
9use std::os::raw::c_char;
10
11pub use windows_sys::Win32::Foundation::{HINSTANCE, HWND};
12
13pub type LPCSTR = *const c_char;
14
15/// オブジェクトハンドル
16pub type OBJECT_HANDLE = *mut c_void;
17
18/// レイヤー・フレーム情報構造体
19/// フレーム番号、レイヤー番号が0からの番号になります ※UI表示と異なります
20#[repr(C)]
21pub struct OBJECT_LAYER_FRAME {
22 /// レイヤー番号
23 pub layer: i32,
24 /// 開始フレーム番号
25 pub start: i32,
26 /// 終了フレーム番号
27 pub end: i32,
28}
29
30/// メディア情報構造体
31#[repr(C)]
32pub struct MEDIA_INFO {
33 /// Videoトラック数 ※0ならVideo無し
34 pub video_track_num: i32,
35 /// Audioトラック数 ※0ならAudio無し
36 pub audio_track_num: i32,
37 /// 総時間 ※静止画の場合は0
38 pub total_time: f64,
39 /// 解像度
40 pub width: i32,
41 /// 解像度
42 pub height: i32,
43}
44
45/// モジュール情報構造体
46#[repr(C)]
47pub struct MODULE_INFO {
48 pub r#type: i32,
49 pub name: LPCWSTR,
50 pub information: LPCWSTR,
51}
52
53impl MODULE_INFO {
54 /// フィルタスクリプト
55 pub const TYPE_SCRIPT_FILTER: i32 = 1;
56 /// オブジェクトスクリプト
57 pub const TYPE_SCRIPT_OBJECT: i32 = 2;
58 /// カメラスクリプト
59 pub const TYPE_SCRIPT_CAMERA: i32 = 3;
60 /// トラックバースクリプト
61 pub const TYPE_SCRIPT_TRACK: i32 = 4;
62 /// スクリプトモジュール
63 pub const TYPE_SCRIPT_MODULE: i32 = 5;
64 /// 入力プラグイン
65 pub const TYPE_PLUGIN_INPUT: i32 = 6;
66 /// 出力プラグイン
67 pub const TYPE_PLUGIN_OUTPUT: i32 = 7;
68 /// フィルタプラグイン
69 pub const TYPE_PLUGIN_FILTER: i32 = 8;
70 /// 汎用プラグイン
71 pub const TYPE_PLUGIN_COMMON: i32 = 9;
72}
73
74/// 編集情報構造体
75/// フレーム番号、レイヤー番号が0からの番号になります ※UI表示と異なります
76#[repr(C)]
77pub struct EDIT_INFO {
78 /// シーンの解像度
79 pub width: i32,
80 /// シーンの解像度
81 pub height: i32,
82 /// シーンのフレームレート
83 pub rate: i32,
84 /// シーンのフレームレート
85 pub scale: i32,
86 /// シーンのサンプリングレート
87 pub sample_rate: i32,
88 /// 現在のカーソルのフレーム番号
89 pub frame: i32,
90 /// 現在の選択レイヤー番号
91 pub layer: i32,
92 /// オブジェクトが存在する最大のフレーム番号
93 pub frame_max: i32,
94 /// オブジェクトが存在する最大のレイヤー番号
95 pub layer_max: i32,
96 /// レイヤー編集で表示されているフレームの開始番号
97 pub display_frame_start: i32,
98 /// レイヤー編集で表示されているレイヤーの開始番号
99 pub display_layer_start: i32,
100 /// レイヤー編集で表示されているフレーム数 ※厳密ではないです
101 pub display_frame_num: i32,
102 /// レイヤー編集で表示されているレイヤー数 ※厳密ではないです
103 pub display_layer_num: i32,
104 /// フレーム範囲選択の開始フレーム番号 ※未選択の場合は-1
105 pub select_range_start: i32,
106 /// フレーム範囲選択の終了フレーム番号 ※未選択の場合は-1
107 pub select_range_end: i32,
108 /// グリッド(BPM)のテンポ
109 pub grid_bpm_tempo: f32,
110 /// グリッド(BPM)の拍子
111 pub grid_bpm_beat: i32,
112 /// グリッド(BPM)の基準時間
113 pub grid_bpm_offset: f32,
114 /// シーンのID
115 pub scene_id: i32,
116}
117
118/// 編集セクション構造体
119/// メニュー選択やプロジェクト編集のコールバック関数内で利用出来ます
120/// フレーム番号、レイヤー番号が0からの番号になります ※UI表示と異なります
121#[repr(C)]
122pub struct EDIT_SECTION {
123 /// 編集情報
124 pub info: *mut EDIT_INFO,
125
126 /// 指定の位置にオブジェクトエイリアスを作成します
127 /// alias : オブジェクトエイリアスデータ(UTF-8)へのポインタ
128 /// オブジェクトエイリアスファイルと同じフォーマットになります
129 /// layer : 作成するレイヤー番号
130 /// frame : 作成するフレーム番号
131 /// length : オブジェクトのフレーム数 ※エイリアスデータにフレーム情報がある場合はフレーム情報から長さが設定されます
132 /// フレーム数に0を指定した場合は長さや追加位置が自動調整されます
133 /// 戻り値 : 作成したオブジェクトのハンドル (失敗した場合はnullptrを返却)
134 /// 既に存在するオブジェクトに重なったり、エイリアスデータが不正な場合に失敗します
135 /// 複数オブジェクトのエイリアスデータの場合は先頭のオブジェクトのハンドルが返却されます ※オブジェクトは全て作成されます
136 pub create_object_from_alias:
137 unsafe extern "C" fn(alias: LPCSTR, layer: i32, frame: i32, length: i32) -> OBJECT_HANDLE,
138
139 /// 指定のフレーム番号以降にあるオブジェクトを検索します
140 /// layer : 検索対象のレイヤー番号
141 /// frame : 検索を開始するフレーム番号
142 /// 戻り値 : 検索したオブジェクトのハンドル (見つからない場合はnullptrを返却)
143 pub find_object: unsafe extern "C" fn(layer: i32, frame: i32) -> OBJECT_HANDLE,
144
145 /// オブジェクトに対象エフェクトが何個存在するかを取得します
146 /// object : オブジェクトのハンドル
147 /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
148 /// 戻り値 : 対象エフェクトの数 ※存在しない場合は0
149 pub count_object_effect: unsafe extern "C" fn(object: OBJECT_HANDLE, effect: LPCWSTR) -> i32,
150
151 /// オブジェクトのレイヤー・フレーム情報を取得します
152 /// object : オブジェクトのハンドル
153 /// 戻り値 : オブジェクトのレイヤー・フレーム情報
154 pub get_object_layer_frame: unsafe extern "C" fn(object: OBJECT_HANDLE) -> OBJECT_LAYER_FRAME,
155
156 /// オブジェクトのエイリアスデータを取得します
157 /// object : オブジェクトのハンドル
158 /// 戻り値 : オブジェクトエイリアスデータ(UTF-8)へのポインタ (取得出来ない場合はnullptrを返却)
159 /// オブジェクトエイリアスファイルと同じフォーマットになります
160 /// ※次に文字列返却の関数を使うかコールバック処理の終了まで有効
161 pub get_object_alias: unsafe extern "C" fn(object: OBJECT_HANDLE) -> LPCSTR,
162
163 /// オブジェクトの設定項目の値を文字列で取得します
164 /// object : オブジェクトのハンドル
165 /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
166 /// 同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
167 /// get_object_item_value(object, L"ぼかし:1", L"範囲"); // 2個目のぼかしを対象とする
168 /// item : 対象の設定項目の名称 (エイリアスファイルのキーの名称)
169 /// 戻り値 : 取得した設定値(UTF8)へのポインタ (取得出来ない場合はnullptrを返却)
170 /// エイリアスファイルの設定値と同じフォーマットになります
171 /// ※次に文字列返却の関数を使うかコールバック処理の終了まで有効
172 pub get_object_item_value:
173 unsafe extern "C" fn(object: OBJECT_HANDLE, effect: LPCWSTR, item: LPCWSTR) -> LPCSTR,
174
175 /// オブジェクトの設定項目の値を文字列で設定します
176 /// object : オブジェクトのハンドル
177 /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
178 /// 同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
179 /// set_object_item_value(object, L"ぼかし:1", L"範囲", "1"); // 2個目のぼかしを対象とする
180 /// item : 対象の設定項目の名称 (エイリアスファイルのキーの名称)
181 /// value : 設定値(UTF8)
182 /// エイリアスファイルの設定値と同じフォーマットになります
183 /// 戻り値 : 設定出来た場合はtrue (対象が見つからない場合は失敗します)
184 pub set_object_item_value: unsafe extern "C" fn(
185 object: OBJECT_HANDLE,
186 effect: LPCWSTR,
187 item: LPCWSTR,
188 value: LPCSTR,
189 ) -> bool,
190
191 /// オブジェクトを移動します
192 /// object : オブジェクトのハンドル
193 /// layer : 移動先のレイヤー番号
194 /// frame : 移動先のフレーム番号
195 /// 戻り値 : 移動した場合はtrue (移動先にオブジェクトが存在する場合は失敗します)
196 pub move_object: unsafe extern "C" fn(object: OBJECT_HANDLE, layer: i32, frame: i32) -> bool,
197
198 /// オブジェクトを削除します
199 /// object : オブジェクトのハンドル
200 pub delete_object: unsafe extern "C" fn(object: OBJECT_HANDLE),
201
202 /// オブジェクト設定ウィンドウで選択されているオブジェクトのハンドルを取得します
203 /// 戻り値 : オブジェクトのハンドル (未選択の場合はnullptrを返却)
204 pub get_focus_object: unsafe extern "C" fn() -> OBJECT_HANDLE,
205
206 /// オブジェクト設定ウィンドウで選択するオブジェクトを設定します (コールバック処理の終了時に設定されます)
207 /// object : オブジェクトのハンドル
208 pub set_focus_object: unsafe extern "C" fn(object: OBJECT_HANDLE),
209
210 /// プロジェクトファイルのポインタを取得します
211 /// EDIT_HANDLE : 編集ハンドル
212 /// 戻り値 : プロジェクトファイル構造体へのポインタ ※コールバック処理の終了まで有効
213 pub get_project_file: unsafe extern "C" fn(edit: *mut EDIT_HANDLE) -> *mut PROJECT_FILE,
214
215 /// 選択中オブジェクトのハンドルを取得します
216 /// index : 選択中オブジェクトのインデックス(0〜)
217 /// 戻り値 : 指定インデックスのオブジェクトのハンドル (インデックスが範囲外の場合はnullptrを返却)
218 pub get_selected_object: unsafe extern "C" fn(index: i32) -> OBJECT_HANDLE,
219
220 /// 選択中オブジェクトの数を取得します
221 /// 戻り値 : 選択中オブジェクトの数
222 pub get_selected_object_num: unsafe extern "C" fn() -> i32,
223
224 /// マウス座標のレイヤー・フレーム位置を取得します
225 /// 最後のマウス移動のウィンドウメッセージの座標から計算します
226 /// layer : レイヤー番号の格納先
227 /// frame : フレーム番号の格納先
228 /// 戻り値 : マウス座標がレイヤー編集上の場合はtrue
229 pub get_mouse_layer_frame: unsafe extern "C" fn(layer: *mut i32, frame: *mut i32) -> bool,
230
231 /// 指定のスクリーン座標のレイヤー・フレーム位置を取得します
232 /// x,y : 対象のスクリーン座標
233 /// layer : レイヤー番号の格納先
234 /// frame : フレーム番号の格納先
235 /// 戻り値 : スクリーン座標がレイヤー編集上の場合はtrue
236 pub pos_to_layer_frame:
237 unsafe extern "C" fn(x: i32, y: i32, layer: *mut i32, frame: *mut i32) -> bool,
238
239 /// 指定のメディアファイルがサポートされているかを確認します
240 /// file : メディアファイルのパス
241 /// strict : trueの場合は実際に読み込めるかを確認します
242 /// falseの場合は拡張子が対応しているかを確認します
243 /// 戻り値 : サポートされている場合はtrue
244 pub is_support_media_file: unsafe extern "C" fn(file: LPCWSTR, strict: bool) -> bool,
245
246 /// 指定のメディアファイルの情報を取得します ※動画、音声、画像ファイル以外では取得出来ません
247 /// file : メディアファイルのパス
248 /// info : メディア情報の格納先へのポインタ
249 /// info_size : メディア情報の格納先のサイズ ※MEDIA_INFOと異なる場合はサイズ分のみ取得されます
250 /// 戻り値 : 取得出来た場合はtrue
251 pub get_media_info:
252 unsafe extern "C" fn(file: LPCWSTR, info: *mut MEDIA_INFO, info_size: i32) -> bool,
253
254 /// 指定の位置にメディアファイルからオブジェクトを作成します
255 /// file : メディアファイルのパス
256 /// layer : 作成するレイヤー番号
257 /// frame : 作成するフレーム番号
258 /// length : オブジェクトのフレーム数
259 /// フレーム数に0を指定した場合は長さや追加位置が自動調整されます
260 /// 戻り値 : 作成したオブジェクトのハンドル (失敗した場合はnullptrを返却)
261 /// 既に存在するオブジェクトに重なったり、メディアファイルに対応していない場合は失敗します
262 pub create_object_from_media_file:
263 unsafe extern "C" fn(file: LPCWSTR, layer: i32, frame: i32, length: i32) -> OBJECT_HANDLE,
264
265 /// 指定の位置にオブジェクトを作成します
266 /// effect : エフェクト名 (エイリアスファイルのeffect.nameの値)
267 /// layer : 作成するレイヤー番号
268 /// frame : 作成するフレーム番号
269 /// length : オブジェクトのフレーム数
270 /// フレーム数に0を指定した場合は長さや追加位置が自動調整されます
271 /// 戻り値 : 作成したオブジェクトのハンドル (失敗した場合はnullptrを返却)
272 /// 既に存在するオブジェクトに重なったり、指定エフェクトに対応していない場合は失敗します
273 pub create_object:
274 unsafe extern "C" fn(effect: LPCWSTR, layer: i32, frame: i32, length: i32) -> OBJECT_HANDLE,
275
276 /// 現在のレイヤー・フレーム位置を設定します ※設定出来る範囲に調整されます
277 /// layer : レイヤー番号
278 /// frame : フレーム番号
279 pub set_cursor_layer_frame: unsafe extern "C" fn(layer: i32, frame: i32),
280
281 /// レイヤー編集のレイヤー・フレームの表示開始位置を設定します ※設定出来る範囲に調整されます
282 /// layer : 表示開始レイヤー番号
283 /// frame : 表示開始フレーム番号
284 pub set_display_layer_frame: unsafe extern "C" fn(layer: i32, frame: i32),
285
286 /// フレーム範囲選択を設定します ※設定出来る範囲に調整されます
287 /// start,end : 開始終了フレーム番号
288 /// 開始終了フレームの両方に-1を指定すると選択を解除します
289 pub set_select_range: unsafe extern "C" fn(start: i32, end: i32),
290
291 /// グリッド(BPM)を設定します
292 /// tempo : テンポ
293 /// beat : 拍子
294 /// offset : 基準時間
295 pub set_grid_bpm: unsafe extern "C" fn(tempo: f32, beat: i32, offset: f32),
296
297 /// オブジェクト名を取得します
298 /// object : オブジェクトのハンドル
299 /// 戻り値 : オブジェクト名へのポインタ (標準の名前の場合はnullptrを返却)
300 /// ※オブジェクトの編集をするかコールバック処理の終了まで有効
301 pub get_object_name: unsafe extern "C" fn(object: OBJECT_HANDLE) -> LPCWSTR,
302
303 /// オブジェクト名を設定します
304 /// object : オブジェクトのハンドル
305 /// name : オブジェクト名 (nullptrか空文字を指定すると標準の名前になります)
306 pub set_object_name: unsafe extern "C" fn(object: OBJECT_HANDLE, name: LPCWSTR),
307}
308
309/// 編集ハンドル構造体
310#[repr(C)]
311pub struct EDIT_HANDLE {
312 /// プロジェクトデータの編集をする為のコールバック関数(func_proc_edit)を呼び出します
313 /// 編集情報を排他制御する為にコールバック関数内で編集処理をする形になります
314 /// コールバック関数内で編集したオブジェクトは纏めてUndoに登録されます
315 /// コールバック関数はメインスレッドから呼ばれます
316 /// func_proc_edit : 編集処理のコールバック関数
317 /// 戻り値 : trueなら成功
318 /// 編集が出来ない場合(出力中等)に失敗します
319 pub call_edit_section:
320 unsafe extern "C" fn(func_proc_edit: unsafe extern "C" fn(edit: *mut EDIT_SECTION)) -> bool,
321
322 /// call_edit_section()に引数paramを渡せるようにした関数です
323 pub call_edit_section_param: unsafe extern "C" fn(
324 param: *mut c_void,
325 func_proc_edit: unsafe extern "C" fn(param: *mut c_void, edit: *mut EDIT_SECTION),
326 ) -> bool,
327
328 /// 編集情報を取得します
329 /// 既に編集処理中(EDIT_SECTIONが引数のコールバック関数内等)の場合は利用出来ません ※デッドロックします
330 /// info : 編集情報の格納先へのポインタ
331 /// info_size : 編集情報の格納先のサイズ ※EDIT_INFOと異なる場合はサイズ分のみ取得されます
332 pub get_edit_info: unsafe extern "C" fn(info: *mut EDIT_INFO, info_size: i32),
333
334 /// ホストアプリケーションを再起動します
335 pub restart_host_app: unsafe extern "C" fn(),
336
337 /// エフェクト名の一覧をコールバック関数(func_proc_enum_effect)で取得します
338 /// param : 任意のユーザーデータのポインタ
339 /// func_proc_enum_effect : エフェクト名の取得処理のコールバック関数
340 pub enum_effect_name: unsafe extern "C" fn(
341 param: *mut c_void,
342 func_proc_enum_effect: unsafe extern "C" fn(
343 param: *mut c_void,
344 name: LPCWSTR,
345 r#type: i32,
346 flag: i32,
347 ),
348 ),
349
350 /// モジュール情報の一覧をコールバック関数(func_proc_enum_module)で取得します
351 /// param : 任意のユーザーデータのポインタ
352 /// func_proc_enum_module : モジュール情報の取得処理のコールバック関数
353 pub enum_module_info: unsafe extern "C" fn(
354 param: *mut c_void,
355 func_proc_enum_module: unsafe extern "C" fn(param: *mut c_void, info: *mut MODULE_INFO),
356 ),
357}
358
359impl EDIT_HANDLE {
360 /// エフェクト種別:フィルタ効果 ※今後追加される可能性があります
361 pub const EFFECT_TYPE_FILTER: i32 = 1;
362 /// エフェクト種別:メディア入力 ※今後追加される可能性があります
363 pub const EFFECT_TYPE_INPUT: i32 = 2;
364 /// エフェクト種別:シーンチェンジ ※今後追加される可能性があります
365 pub const EFFECT_TYPE_TRANSITION: i32 = 3;
366 /// エフェクトフラグ:画像をサポート ※今後追加される可能性があります
367 pub const EFFECT_FLAG_VIDEO: i32 = 1;
368 /// エフェクトフラグ:音声をサポート ※今後追加される可能性があります
369 pub const EFFECT_FLAG_AUDIO: i32 = 2;
370 /// エフェクトフラグ:フィルタオブジェクトをサポート ※今後追加される可能性があります
371 pub const EFFECT_FLAG_FILTER: i32 = 4;
372}
373
374/// プロジェクトファイル構造体
375/// プロジェクトファイルのロード、セーブ時のコールバック関数内で利用出来ます
376/// プロジェクトの保存データはプラグイン毎のデータ領域になります
377#[repr(C)]
378pub struct PROJECT_FILE {
379 /// プロジェクトに保存されている文字列(UTF-8)を取得します
380 /// key : キー名(UTF-8)
381 /// 戻り値 : 取得した文字列へのポインタ (未設定の場合はnullptr)
382 pub get_param_string: unsafe extern "C" fn(key: LPCSTR) -> LPCSTR,
383 /// プロジェクトに文字列(UTF-8)を保存します
384 /// key : キー名(UTF-8)
385 /// value : 保存する文字列(UTF-8)
386 pub set_param_string: unsafe extern "C" fn(key: LPCSTR, value: LPCSTR),
387 /// プロジェクトに保存されているバイナリデータを取得します
388 /// key : キー名(UTF-8)
389 /// data : 取得するデータの格納先へのポインタ
390 /// size : 取得するデータのサイズ (保存されているサイズと異なる場合は失敗します)
391 /// 戻り値 : 正しく取得出来た場合はtrue
392 pub get_param_binary: unsafe extern "C" fn(key: LPCSTR, data: *mut c_void, size: i32) -> bool,
393 /// プロジェクトにバイナリデータを保存します
394 /// key : キー名(UTF-8)
395 /// data : 保存するデータへのポインタ
396 /// size : 保存するデータのサイズ (4096バイト以下)
397 pub set_param_binary: unsafe extern "C" fn(key: LPCSTR, data: *mut c_void, size: i32),
398 /// プロジェクトに保存されているデータを全て削除します
399 pub clear_params: unsafe extern "C" fn(),
400
401 /// プロジェクトファイルのパスを取得します
402 /// 戻り値 : プロジェクトファイルパスへのポインタ (ファイルパスは未設定の場合があります)
403 /// ※コールバック処理の終了まで有効
404 pub get_project_file_path: unsafe extern "C" fn() -> LPCWSTR,
405}
406
407/// ホストアプリケーション構造体
408#[repr(C)]
409pub struct HOST_APP_TABLE {
410 /// プラグインの情報を設定する
411 /// information : プラグインの情報
412 pub set_plugin_information: unsafe extern "C" fn(information: LPCWSTR),
413
414 /// 入力プラグインを登録する
415 /// input_plugin_table : 入力プラグイン構造体
416 pub register_input_plugin: unsafe extern "C" fn(input_plugin_table: *mut INPUT_PLUGIN_TABLE),
417 /// 出力プラグインを登録する
418 /// output_plugin_table : 出力プラグイン構造体
419 pub register_output_plugin: unsafe extern "C" fn(output_plugin_table: *mut OUTPUT_PLUGIN_TABLE),
420 /// フィルタプラグインを登録する
421 /// filter_plugin_table : フィルタプラグイン構造体
422 pub register_filter_plugin: unsafe extern "C" fn(filter_plugin_table: *mut FILTER_PLUGIN_TABLE),
423 /// スクリプトモジュールを登録する
424 /// script_module_table : スクリプトモジュール構造体
425 pub register_script_module: unsafe extern "C" fn(script_module_table: *mut SCRIPT_MODULE_TABLE),
426
427 /// インポートメニューを登録する
428 /// name : インポートメニューの名称
429 /// func_proc_import : インポートメニュー選択時のコールバック関数
430 pub register_import_menu: unsafe extern "C" fn(
431 name: LPCWSTR,
432 func_proc_import: unsafe extern "C" fn(*mut EDIT_SECTION),
433 ),
434 /// エクスポートメニューを登録する
435 /// name : エクスポートメニューの名称
436 /// func_proc_export : エクスポートメニュー選択時のコールバック関数
437 pub register_export_menu: unsafe extern "C" fn(
438 name: LPCWSTR,
439 func_proc_export: unsafe extern "C" fn(*mut EDIT_SECTION),
440 ),
441
442 /// ウィンドウクライアントを登録する
443 /// name : ウィンドウの名称
444 /// hwnd : ウィンドウハンドル
445 /// ウィンドウにはWS_CHILDが追加され親ウィンドウが設定されます ※WS_POPUPは削除されます
446 pub register_window_client: unsafe extern "C" fn(name: LPCWSTR, hwnd: HWND),
447
448 /// プロジェクトデータ編集用のハンドルを取得します
449 /// 戻り値 : 編集ハンドル
450 pub create_edit_handle: unsafe extern "C" fn() -> *mut EDIT_HANDLE,
451
452 /// プロジェクトファイルをロードした直後に呼ばれる関数を登録する ※プロジェクトの初期化時にも呼ばれます
453 /// func_project_load : プロジェクトファイルのロード時のコールバック関数
454 pub register_project_load_handler:
455 unsafe extern "C" fn(func_project_load: unsafe extern "C" fn(*mut PROJECT_FILE)),
456 /// プロジェクトファイルをセーブする直前に呼ばれる関数を登録する
457 /// func_project_save : プロジェクトファイルのセーブ時のコールバック関数
458 pub register_project_save_handler:
459 unsafe extern "C" fn(func_project_save: unsafe extern "C" fn(*mut PROJECT_FILE)),
460
461 /// レイヤーメニューを登録する (レイヤー編集でオブジェクト未選択時の右クリックメニューに追加されます)
462 /// name : レイヤーメニューの名称
463 /// func_proc_layer_menu : レイヤーメニュー選択時のコールバック関数
464 pub register_layer_menu: unsafe extern "C" fn(
465 name: LPCWSTR,
466 func_proc_layer_menu: unsafe extern "C" fn(*mut EDIT_SECTION),
467 ),
468
469 /// オブジェクトメニューを登録する (レイヤー編集でオブジェクト選択時の右クリックメニューに追加されます)
470 /// name : オブジェクトメニューの名称
471 /// func_proc_object_menu : オブジェクトメニュー選択時のコールバック関数
472 pub register_object_menu: unsafe extern "C" fn(
473 name: LPCWSTR,
474 func_proc_object_menu: unsafe extern "C" fn(*mut EDIT_SECTION),
475 ),
476
477 /// 設定メニューを登録する
478 /// 設定メニューの登録後にウィンドウクライアントを登録するとシステムメニューに「設定」が追加されます
479 /// name : 設定メニューの名称
480 /// func_config : 設定メニュー選択時のコールバック関数
481 pub register_config_menu:
482 unsafe extern "C" fn(name: LPCWSTR, func_config: unsafe extern "C" fn(HWND, HINSTANCE)),
483
484 /// 編集メニューを登録する
485 /// name : 編集メニューの名称 ※名称に'\'を入れると表示を階層に出来ます
486 /// func_proc_edit_menu : 編集メニュー選択時のコールバック関数
487 pub register_edit_menu: unsafe extern "C" fn(
488 name: LPCWSTR,
489 func_proc_edit_menu: unsafe extern "C" fn(*mut EDIT_SECTION),
490 ),
491
492 /// キャッシュを破棄の操作時に呼ばれる関数を登録する
493 /// func_proc_clear_cache : キャッシュの破棄時のコールバック関数
494 pub register_clear_cache_handler:
495 unsafe extern "C" fn(func_proc_clear_cache: unsafe extern "C" fn(*mut EDIT_SECTION)),
496
497 /// シーンを変更した直後に呼ばれる関数を登録する ※シーンの設定情報が更新された時にも呼ばれます
498 /// func_proc_change_scene : シーン変更時のコールバック関数
499 pub register_change_scene_handler:
500 unsafe extern "C" fn(func_proc_change_scene: unsafe extern "C" fn(*mut EDIT_SECTION)),
501}