Skip to main content

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/// 汎用プラグイン構造体
16#[repr(C)]
17pub struct COMMON_PLUGIN_TABLE {
18    /// プラグインの名前
19    pub name: LPCWSTR,
20    /// プラグインの情報
21    pub information: LPCWSTR,
22}
23
24/// オブジェクトハンドル
25pub type OBJECT_HANDLE = *mut c_void;
26
27/// エフェクトハンドル
28pub type EFFECT_HANDLE = *mut c_void;
29
30/// レイヤー・フレーム情報構造体
31/// フレーム番号、レイヤー番号が0からの番号になります ※UI表示と異なります
32#[repr(C)]
33pub struct OBJECT_LAYER_FRAME {
34    /// レイヤー番号
35    pub layer: i32,
36    /// 開始フレーム番号
37    pub start: i32,
38    /// 終了フレーム番号
39    pub end: i32,
40}
41
42/// メディア情報構造体
43#[repr(C)]
44pub struct MEDIA_INFO {
45    /// Videoトラック数 ※0ならVideo無し
46    pub video_track_num: i32,
47    /// Audioトラック数 ※0ならAudio無し
48    pub audio_track_num: i32,
49    /// 総時間 ※静止画の場合は0
50    pub total_time: f64,
51    /// 解像度
52    pub width: i32,
53    /// 解像度
54    pub height: i32,
55}
56
57/// モジュール情報構造体
58#[repr(C)]
59pub struct MODULE_INFO {
60    pub r#type: i32,
61    pub name: LPCWSTR,
62    pub information: LPCWSTR,
63}
64
65impl MODULE_INFO {
66    /// フィルタスクリプト
67    pub const TYPE_SCRIPT_FILTER: i32 = 1;
68    /// オブジェクトスクリプト
69    pub const TYPE_SCRIPT_OBJECT: i32 = 2;
70    /// カメラスクリプト
71    pub const TYPE_SCRIPT_CAMERA: i32 = 3;
72    /// トラックバースクリプト
73    pub const TYPE_SCRIPT_TRACK: i32 = 4;
74    /// スクリプトモジュール
75    pub const TYPE_SCRIPT_MODULE: i32 = 5;
76    /// 入力プラグイン
77    pub const TYPE_PLUGIN_INPUT: i32 = 6;
78    /// 出力プラグイン
79    pub const TYPE_PLUGIN_OUTPUT: i32 = 7;
80    /// フィルタプラグイン
81    pub const TYPE_PLUGIN_FILTER: i32 = 8;
82    /// 汎用プラグイン
83    pub const TYPE_PLUGIN_COMMON: i32 = 9;
84}
85
86/// トラックバー情報構造体
87#[repr(C)]
88pub struct TRACK_INFO {
89    /// トラックバーの移動モードの名称 ※移動無しの場合はnullptr
90    pub mode: LPCWSTR,
91    /// トラックバーの設定値の配列へのポインタ ※設定値が無い場合はnullptr
92    pub param: *mut f64,
93    /// トラックバーの設定値の数
94    pub param_num: i32,
95    /// トラックバーの加速度が有効か?
96    pub accelerate: bool,
97    /// トラックバーの減速度が有効か?
98    pub decelerate: bool,
99    /// トラックバーの中間点無視が有効か?
100    pub twopoint: bool,
101    /// トラックバーの時間制御が有効か?
102    pub timecontrol: bool,
103    /// 所属グループのトラックバーの数 ※グループ化されていない場合は1
104    pub group_num: i32,
105    /// 所属グループ内のインデックス
106    pub group_index: i32,
107    /// 所属グループの名称 ※グループ化されていない場合はnullptr
108    pub group_name: LPCWSTR,
109}
110
111/// パレット情報構造体
112#[repr(C)]
113pub struct PALETTE_INFO {
114    pub color: [PALETTE_INFO_COLOR; Self::PALETTE_NUM],
115}
116
117impl PALETTE_INFO {
118    pub const PALETTE_NUM: usize = 64;
119}
120
121/// パレット色情報構造体
122#[repr(C)]
123#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
124pub struct PALETTE_INFO_COLOR {
125    pub r: u8,
126    pub g: u8,
127    pub b: u8,
128    pub a: u8,
129}
130
131/// BPM情報構造体
132#[repr(C)]
133pub struct BPM_INFO {
134    /// テンポ
135    pub tempo: f32,
136    /// 拍子
137    pub beat: i32,
138    /// 開始位置(秒)
139    pub start: f64,
140    /// 拍子オフセット(秒)
141    pub offset: f32,
142}
143
144/// イベント種別
145#[repr(i32)]
146#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
147pub enum EVENT_TYPE {
148    /// オブジェクト情報の更新
149    UPDATE_OBJECT = 1,
150    /// 現在の編集フレームの移動
151    CHANGE_EDIT_FRAME = 2,
152    /// 現在の編集シーンの変更
153    CHANGE_EDIT_SCENE = 3,
154    /// 選択されているオブジェクトの変更
155    CHANGE_FOCUS_OBJECT = 4,
156}
157
158/// 編集情報構造体
159/// フレーム番号、レイヤー番号が0からの番号になります ※UI表示と異なります
160#[repr(C)]
161pub struct EDIT_INFO {
162    /// シーンの解像度
163    pub width: i32,
164    /// シーンの解像度
165    pub height: i32,
166    /// シーンのフレームレート
167    pub rate: i32,
168    /// シーンのフレームレート
169    pub scale: i32,
170    /// シーンのサンプリングレート
171    pub sample_rate: i32,
172    /// 現在のカーソルのフレーム番号
173    pub frame: i32,
174    /// 現在の選択レイヤー番号
175    pub layer: i32,
176    /// オブジェクトが存在する最大のフレーム番号
177    pub frame_max: i32,
178    /// オブジェクトが存在する最大のレイヤー番号
179    pub layer_max: i32,
180    /// レイヤー編集で表示されているフレームの開始番号
181    pub display_frame_start: i32,
182    /// レイヤー編集で表示されているレイヤーの開始番号
183    pub display_layer_start: i32,
184    /// レイヤー編集で表示されているフレーム数 ※厳密ではないです
185    pub display_frame_num: i32,
186    /// レイヤー編集で表示されているレイヤー数 ※厳密ではないです
187    pub display_layer_num: i32,
188    /// フレーム範囲選択の開始フレーム番号 ※未選択の場合は-1
189    pub select_range_start: i32,
190    /// フレーム範囲選択の終了フレーム番号 ※未選択の場合は-1
191    pub select_range_end: i32,
192    /// グリッド(BPM)のテンポ
193    pub grid_bpm_tempo: f32,
194    /// グリッド(BPM)の拍子
195    pub grid_bpm_beat: i32,
196    /// グリッド(BPM)の拍子オフセット
197    pub grid_bpm_offset: f32,
198    /// シーンのID
199    pub scene_id: i32,
200}
201
202/// 編集セクション構造体
203/// メニュー選択やプロジェクト編集のコールバック関数内で利用出来ます
204/// フレーム番号、レイヤー番号が0からの番号になります ※UI表示と異なります
205#[repr(C)]
206pub struct EDIT_SECTION {
207    /// 編集情報
208    pub info: *mut EDIT_INFO,
209
210    /// 指定の位置にオブジェクトエイリアスを作成します
211    /// alias : オブジェクトエイリアスデータ(UTF-8)へのポインタ
212    ///      オブジェクトエイリアスファイルと同じフォーマットになります
213    /// layer : 作成するレイヤー番号
214    /// frame : 作成するフレーム番号
215    /// length : オブジェクトのフレーム数 ※エイリアスデータにフレーム情報がある場合はフレーム情報から長さが設定されます
216    ///      フレーム数に0を指定した場合は長さや追加位置が自動調整されます
217    /// 戻り値 : 作成したオブジェクトのハンドル (失敗した場合はnullptrを返却)
218    ///      既に存在するオブジェクトに重なったり、エイリアスデータが不正な場合に失敗します
219    ///      複数オブジェクトのエイリアスデータの場合は先頭のオブジェクトのハンドルが返却されます ※オブジェクトは全て作成されます
220    pub create_object_from_alias:
221        unsafe extern "C" fn(alias: LPCSTR, layer: i32, frame: i32, length: i32) -> OBJECT_HANDLE,
222
223    /// 指定のフレーム番号以降にあるオブジェクトを検索します
224    /// layer : 検索対象のレイヤー番号
225    /// frame : 検索を開始するフレーム番号
226    /// 戻り値 : 検索したオブジェクトのハンドル (見つからない場合はnullptrを返却)
227    pub find_object: unsafe extern "C" fn(layer: i32, frame: i32) -> OBJECT_HANDLE,
228
229    /// オブジェクトに対象エフェクトが何個存在するかを取得します
230    /// object : オブジェクトのハンドル
231    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
232    /// 戻り値 : 対象エフェクトの数 ※存在しない場合は0
233    pub count_object_effect: unsafe extern "C" fn(object: OBJECT_HANDLE, effect: LPCWSTR) -> i32,
234
235    /// オブジェクトのレイヤー・フレーム情報を取得します
236    /// object : オブジェクトのハンドル
237    /// 戻り値 : オブジェクトのレイヤー・フレーム情報
238    pub get_object_layer_frame: unsafe extern "C" fn(object: OBJECT_HANDLE) -> OBJECT_LAYER_FRAME,
239
240    /// オブジェクトのエイリアスデータを取得します
241    /// object : オブジェクトのハンドル
242    /// 戻り値 : オブジェクトエイリアスデータ(UTF-8)へのポインタ (取得出来ない場合はnullptrを返却)
243    ///      オブジェクトエイリアスファイルと同じフォーマットになります
244    ///      ※次に文字列返却の関数を使うかコールバック処理の終了まで有効
245    pub get_object_alias: unsafe extern "C" fn(object: OBJECT_HANDLE) -> LPCSTR,
246
247    /// オブジェクトの設定項目の値を文字列で取得します
248    /// object : オブジェクトのハンドル
249    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
250    ///          同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
251    ///          get_object_item_value(object, L"ぼかし:1", L"範囲"); // 2個目のぼかしを対象とする
252    /// item  : 対象の設定項目の名称 (エイリアスファイルのキーの名称)
253    /// 戻り値 : 取得した設定値(UTF8)へのポインタ (取得出来ない場合はnullptrを返却)
254    ///      エイリアスファイルの設定値と同じフォーマットになります
255    ///      ※次に文字列返却の関数を使うかコールバック処理の終了まで有効
256    pub get_object_item_value:
257        unsafe extern "C" fn(object: OBJECT_HANDLE, effect: LPCWSTR, item: LPCWSTR) -> LPCSTR,
258
259    /// オブジェクトの設定項目の値を文字列で設定します
260    /// object : オブジェクトのハンドル
261    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
262    ///          同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
263    ///          set_object_item_value(object, L"ぼかし:1", L"範囲", "1"); // 2個目のぼかしを対象とする
264    /// item  : 対象の設定項目の名称 (エイリアスファイルのキーの名称)
265    /// value : 設定値(UTF8)
266    ///      エイリアスファイルの設定値と同じフォーマットになります
267    /// 戻り値 : 設定出来た場合はtrue (対象が見つからない場合は失敗します)
268    pub set_object_item_value: unsafe extern "C" fn(
269        object: OBJECT_HANDLE,
270        effect: LPCWSTR,
271        item: LPCWSTR,
272        value: LPCSTR,
273    ) -> bool,
274
275    /// オブジェクトを移動します
276    /// object : オブジェクトのハンドル
277    /// layer : 移動先のレイヤー番号
278    /// frame : 移動先のフレーム番号
279    /// 戻り値 : 移動した場合はtrue (移動先にオブジェクトが存在する場合は失敗します)
280    pub move_object: unsafe extern "C" fn(object: OBJECT_HANDLE, layer: i32, frame: i32) -> bool,
281
282    /// オブジェクトを削除します
283    /// object : オブジェクトのハンドル
284    pub delete_object: unsafe extern "C" fn(object: OBJECT_HANDLE),
285
286    /// オブジェクト設定ウィンドウで選択されているオブジェクトのハンドルを取得します
287    /// 戻り値 : オブジェクトのハンドル (未選択の場合はnullptrを返却)
288    pub get_focus_object: unsafe extern "C" fn() -> OBJECT_HANDLE,
289
290    /// オブジェクト設定ウィンドウで選択するオブジェクトを設定します (コールバック処理の終了時に設定されます)
291    /// object : オブジェクトのハンドル (nullptrを指定すると選択を解除します)
292    pub set_focus_object: unsafe extern "C" fn(object: OBJECT_HANDLE),
293
294    /// プロジェクトファイルのポインタを取得します
295    /// EDIT_HANDLE : 編集ハンドル
296    /// 戻り値 : プロジェクトファイル構造体へのポインタ ※コールバック処理の終了まで有効
297    pub get_project_file: unsafe extern "C" fn(edit: *mut EDIT_HANDLE) -> *mut PROJECT_FILE,
298
299    /// 選択中オブジェクトのハンドルを取得します
300    /// index : 選択中オブジェクトのインデックス(0〜)
301    /// 戻り値 : 指定インデックスのオブジェクトのハンドル (インデックスが範囲外の場合はnullptrを返却)
302    pub get_selected_object: unsafe extern "C" fn(index: i32) -> OBJECT_HANDLE,
303
304    /// 選択中オブジェクトの数を取得します
305    /// 戻り値 : 選択中オブジェクトの数
306    pub get_selected_object_num: unsafe extern "C" fn() -> i32,
307
308    /// マウス座標のレイヤー・フレーム位置を取得します
309    /// 最後のマウス移動のウィンドウメッセージの座標から計算します
310    /// layer : レイヤー番号の格納先
311    /// frame : フレーム番号の格納先
312    /// 戻り値 : マウス座標がレイヤー編集上の場合はtrue
313    pub get_mouse_layer_frame: unsafe extern "C" fn(layer: *mut i32, frame: *mut i32) -> bool,
314
315    /// 指定のスクリーン座標のレイヤー・フレーム位置を取得します
316    /// x,y   : 対象のスクリーン座標
317    /// layer : レイヤー番号の格納先
318    /// frame : フレーム番号の格納先
319    /// 戻り値 : スクリーン座標がレイヤー編集上の場合はtrue
320    pub pos_to_layer_frame:
321        unsafe extern "C" fn(x: i32, y: i32, layer: *mut i32, frame: *mut i32) -> bool,
322
323    /// 指定のメディアファイルがサポートされているかを確認します
324    /// file   : メディアファイルのパス
325    /// strict : trueの場合は実際に読み込めるかを確認します
326    ///      falseの場合は拡張子が対応しているかを確認します
327    /// 戻り値 : サポートされている場合はtrue
328    pub is_support_media_file: unsafe extern "C" fn(file: LPCWSTR, strict: bool) -> bool,
329
330    /// 指定のメディアファイルの情報を取得します ※動画、音声、画像ファイル以外では取得出来ません
331    /// file : メディアファイルのパス
332    /// info : メディア情報の格納先へのポインタ
333    /// info_size : メディア情報の格納先のサイズ ※MEDIA_INFOと異なる場合はサイズ分のみ取得されます
334    /// 戻り値 : 取得出来た場合はtrue
335    pub get_media_info:
336        unsafe extern "C" fn(file: LPCWSTR, info: *mut MEDIA_INFO, info_size: i32) -> bool,
337
338    /// 指定の位置にメディアファイルからオブジェクトを作成します
339    /// file  : メディアファイルのパス
340    /// layer : 作成するレイヤー番号
341    /// frame : 作成するフレーム番号
342    /// length : オブジェクトのフレーム数
343    ///      フレーム数に0を指定した場合は長さや追加位置が自動調整されます
344    /// 戻り値 : 作成したオブジェクトのハンドル (失敗した場合はnullptrを返却)
345    ///      既に存在するオブジェクトに重なったり、メディアファイルに対応していない場合は失敗します
346    pub create_object_from_media_file:
347        unsafe extern "C" fn(file: LPCWSTR, layer: i32, frame: i32, length: i32) -> OBJECT_HANDLE,
348
349    /// 指定の位置にオブジェクトを作成します
350    /// effect : エフェクト名 (エイリアスファイルのeffect.nameの値)
351    /// layer : 作成するレイヤー番号
352    /// frame : 作成するフレーム番号
353    /// length : オブジェクトのフレーム数
354    ///      フレーム数に0を指定した場合は長さや追加位置が自動調整されます
355    /// 戻り値 : 作成したオブジェクトのハンドル (失敗した場合はnullptrを返却)
356    ///      既に存在するオブジェクトに重なったり、指定エフェクトに対応していない場合は失敗します
357    pub create_object:
358        unsafe extern "C" fn(effect: LPCWSTR, layer: i32, frame: i32, length: i32) -> OBJECT_HANDLE,
359
360    /// 現在のレイヤー・フレーム位置を設定します ※設定出来る範囲に調整されます
361    /// layer : レイヤー番号
362    /// frame : フレーム番号
363    pub set_cursor_layer_frame: unsafe extern "C" fn(layer: i32, frame: i32),
364
365    /// レイヤー編集のレイヤー・フレームの表示開始位置を設定します ※設定出来る範囲に調整されます
366    /// layer : 表示開始レイヤー番号
367    /// frame : 表示開始フレーム番号
368    pub set_display_layer_frame: unsafe extern "C" fn(layer: i32, frame: i32),
369
370    /// フレーム範囲選択を設定します ※設定出来る範囲に調整されます
371    /// start,end : 開始終了フレーム番号
372    ///      開始終了フレームの両方に-1を指定すると選択を解除します
373    pub set_select_range: unsafe extern "C" fn(start: i32, end: i32),
374
375    /// グリッド(BPM)を設定します
376    /// tempo : テンポ
377    /// beat  : 拍子
378    /// offset : 基準時間
379    pub set_grid_bpm: unsafe extern "C" fn(tempo: f32, beat: i32, offset: f32),
380
381    /// オブジェクト名を取得します
382    /// object : オブジェクトのハンドル
383    /// 戻り値 : オブジェクト名へのポインタ (標準の名前の場合はnullptrを返却)
384    ///      ※オブジェクトの編集をするかコールバック処理の終了まで有効
385    pub get_object_name: unsafe extern "C" fn(object: OBJECT_HANDLE) -> LPCWSTR,
386
387    /// オブジェクト名を設定します
388    /// object : オブジェクトのハンドル
389    /// name : オブジェクト名 (nullptrか空文字を指定すると標準の名前になります)
390    pub set_object_name: unsafe extern "C" fn(object: OBJECT_HANDLE, name: LPCWSTR),
391
392    /// レイヤー名を取得します
393    /// layer : レイヤー番号
394    /// 戻り値 : レイヤー名へのポインタ (標準の名前の場合はnullptrを返却)
395    ///     ※レイヤーの編集をするかコールバック処理の終了まで有効
396    pub get_layer_name: unsafe extern "C" fn(layer: i32) -> LPCWSTR,
397
398    /// レイヤー名を設定します
399    /// layer : レイヤー番号
400    /// name : レイヤー名 (nullptrか空文字を指定すると標準の名前になります)
401    pub set_layer_name: unsafe extern "C" fn(layer: i32, name: LPCWSTR),
402
403    /// シーン名を取得します
404    /// 戻り値 : シーン名へのポインタ
405    ///     ※シーンの編集をするかコールバック処理の終了まで有効
406    pub get_scene_name: unsafe extern "C" fn() -> LPCWSTR,
407
408    /// シーン名を設定します ※シーンの操作は現状Undoに非対応です
409    /// name : シーン名 (nullptrや空文字の場合は変更しません)
410    pub set_scene_name: unsafe extern "C" fn(name: LPCWSTR),
411
412    /// シーンの解像度を設定します ※シーンの操作は現状Undoに非対応です
413    /// width : 横のサイズ
414    /// height : 縦のサイズ
415    pub set_scene_size: unsafe extern "C" fn(width: i32, height: i32),
416
417    /// シーンのフレームレートを設定します ※シーンの操作は現状Undoに非対応です
418    /// rate : フレームレート
419    /// scale : フレームレートのスケール
420    pub set_scene_frame_rate: unsafe extern "C" fn(rate: i32, scale: i32),
421
422    /// シーンのサンプリングレートを設定します ※シーンの操作は現状Undoに非対応です
423    /// sample_rate : サンプリングレート
424    pub set_scene_sample_rate: unsafe extern "C" fn(sample_rate: i32),
425
426    /// レイヤーの表示・非表示状態を取得します
427    /// layer : レイヤー番号
428    /// 戻り値 : レイヤーが表示状態の場合はtrue
429    pub get_layer_enable: unsafe extern "C" fn(layer: i32) -> bool,
430
431    /// レイヤーの表示・非表示状態を設定します (call_read_section利用不可)
432    /// layer : レイヤー番号
433    /// enable : 設定するレイヤーの表示状態
434    pub set_layer_enable: unsafe extern "C" fn(layer: i32, enable: bool),
435
436    /// レイヤーのロック状態を取得します
437    /// layer : レイヤー番号
438    /// 戻り値 : レイヤーがロック状態の場合はtrue
439    pub get_layer_lock: unsafe extern "C" fn(layer: i32) -> bool,
440
441    /// レイヤーのロック状態を設定します (call_read_section利用不可)
442    /// layer : レイヤー番号
443    /// lock : 設定するレイヤーのロック状態
444    pub set_layer_lock: unsafe extern "C" fn(layer: i32, lock: bool),
445
446    /// オブジェクトの区間の数を取得します
447    /// object : オブジェクトのハンドル
448    /// 戻り値 : 区間の数
449    pub get_object_section_num: unsafe extern "C" fn(object: OBJECT_HANDLE) -> i32,
450
451    /// 選択中オブジェクトの区間の位置を取得します
452    /// 戻り値 : 区間の番号 (未選択の場合は-1を返却)
453    pub get_focus_object_section: unsafe extern "C" fn() -> i32,
454
455    /// オブジェクトの区間の開始フレーム番号を取得します
456    /// 戻り値 : 区間の開始フレーム番号 (取得出来ない場合は-1を返却)
457    pub get_object_section_frame: unsafe extern "C" fn(object: OBJECT_HANDLE, section: i32) -> i32,
458
459    /// 指定フレーム位置でのオブジェクトのトラックバー項目の値を取得します
460    pub get_object_track_value: unsafe extern "C" fn(
461        object: OBJECT_HANDLE,
462        effect: LPCWSTR,
463        item: LPCWSTR,
464        frame: f64,
465        value: *mut f64,
466    ) -> bool,
467
468    /// 指定フレーム位置でのオブジェクトのチェックボックス(セクション毎含む)項目の値を取得します
469    pub get_object_check_value: unsafe extern "C" fn(
470        object: OBJECT_HANDLE,
471        effect: LPCWSTR,
472        item: LPCWSTR,
473        frame: i32,
474        value: *mut bool,
475    ) -> bool,
476
477    /// オブジェクトのトラックバー項目の情報を取得します
478    pub get_object_track_info: unsafe extern "C" fn(
479        object: OBJECT_HANDLE,
480        effect: LPCWSTR,
481        item: LPCWSTR,
482        info: *mut TRACK_INFO,
483        info_size: i32,
484    ) -> bool,
485
486    /// 現在のパレット名を取得します
487    pub get_palette_name: unsafe extern "C" fn() -> LPCWSTR,
488
489    /// 指定のパレットの情報を取得します
490    pub get_palette_info:
491        unsafe extern "C" fn(name: LPCWSTR, info: *mut PALETTE_INFO, info_size: i32) -> bool,
492
493    /// 登録されているフォントのDirectWriteのフォントのポインタを取得する
494    pub get_font: unsafe extern "C" fn(font: LPCWSTR) -> *mut c_void,
495
496    /// オブジェクトのトラックバーグループの所属アイテム名を取得します
497    pub get_object_track_group_names: unsafe extern "C" fn(
498        object: OBJECT_HANDLE,
499        effect: LPCWSTR,
500        group_name: LPCWSTR,
501        item_names: *mut LPCWSTR,
502        item_num: i32,
503    ) -> i32,
504
505    /// 新しい関数に差し替えるので廃止します
506    #[deprecated = "新しい関数に差し替えるので廃止します"]
507    pub deprecated_get_grid_bpm_list:
508        unsafe extern "C" fn(bpm_list: *mut BPM_INFO, bpm_num: i32) -> i32,
509
510    /// 新しい関数に差し替えるので廃止します
511    #[deprecated = "新しい関数に差し替えるので廃止します"]
512    pub deprecated_set_grid_bpm_list: unsafe extern "C" fn(bpm_list: *mut BPM_INFO, bpm_num: i32),
513
514    /// オブジェクトからエフェクトを検索します
515    pub find_effect: unsafe extern "C" fn(object: OBJECT_HANDLE, effect: LPCWSTR) -> EFFECT_HANDLE,
516
517    /// オブジェクトからエフェクト一覧を取得します
518    pub get_effect_list: unsafe extern "C" fn(
519        object: OBJECT_HANDLE,
520        effect_list: *mut EFFECT_HANDLE,
521        effect_num: i32,
522    ) -> i32,
523
524    /// エフェクト名を取得します
525    pub get_effect_name: unsafe extern "C" fn(effect: EFFECT_HANDLE) -> LPCWSTR,
526
527    /// エフェクトの有効・無効状態を取得します
528    pub get_effect_enable: unsafe extern "C" fn(effect: EFFECT_HANDLE) -> bool,
529
530    /// エフェクトの有効・無効状態を設定します (call_read_section利用不可)
531    pub set_effect_enable: unsafe extern "C" fn(effect: EFFECT_HANDLE, enable: bool),
532
533    /// エフェクトのロック状態を取得します
534    pub get_effect_lock: unsafe extern "C" fn(effect: EFFECT_HANDLE) -> bool,
535
536    /// エフェクトのロック状態を設定します (call_read_section利用不可)
537    pub set_effect_lock: unsafe extern "C" fn(effect: EFFECT_HANDLE, lock: bool),
538
539    /// エフェクトの設定項目の値を文字列で取得します
540    pub get_effect_item_value: unsafe extern "C" fn(effect: EFFECT_HANDLE, item: LPCWSTR) -> LPCSTR,
541
542    /// エフェクトの設定項目の値を文字列で設定します (call_read_section利用不可)
543    pub set_effect_item_value:
544        unsafe extern "C" fn(effect: EFFECT_HANDLE, item: LPCWSTR, value: LPCSTR) -> bool,
545
546    /// 指定フレーム位置でのエフェクトのトラックバー項目の値を取得します
547    pub get_effect_track_value: unsafe extern "C" fn(
548        effect: EFFECT_HANDLE,
549        item: LPCWSTR,
550        frame: f64,
551        value: *mut f64,
552    ) -> bool,
553
554    /// 指定フレーム位置でのエフェクトのチェックボックス(セクション毎含む)項目の値を取得します
555    pub get_effect_check_value: unsafe extern "C" fn(
556        effect: EFFECT_HANDLE,
557        item: LPCWSTR,
558        frame: i32,
559        value: *mut bool,
560    ) -> bool,
561
562    /// エフェクトのトラックバー項目の情報を取得します
563    pub get_effect_track_info: unsafe extern "C" fn(
564        effect: EFFECT_HANDLE,
565        item: LPCWSTR,
566        info: *mut TRACK_INFO,
567        info_size: i32,
568    ) -> bool,
569
570    /// グリッド(BPM)のBPM情報一覧を取得します
571    pub get_grid_bpm_list:
572        unsafe extern "C" fn(bpm_list: *mut BPM_INFO, bpm_num: i32, bpm_size: i32) -> i32,
573
574    /// グリッド(BPM)のBPM情報一覧を設定します (call_read_section利用不可)
575    pub set_grid_bpm_list:
576        unsafe extern "C" fn(bpm_list: *mut BPM_INFO, bpm_num: i32, bpm_size: i32),
577
578    /// オブジェクトにエフェクトを追加します (call_read_section利用不可)
579    /// エフェクトが入出力項目(図形や標準描画等)の場合は差し替えになります
580    pub create_effect:
581        unsafe extern "C" fn(object: OBJECT_HANDLE, effect: LPCWSTR) -> EFFECT_HANDLE,
582
583    /// オブジェクトからエフェクトを削除します (call_read_section利用不可)
584    pub delete_effect: unsafe extern "C" fn(object: OBJECT_HANDLE, effect: EFFECT_HANDLE) -> bool,
585
586    /// オブジェクトに中間点(区間)を追加します (call_read_section利用不可)
587    pub create_object_section: unsafe extern "C" fn(object: OBJECT_HANDLE, frame: i32) -> bool,
588
589    /// オブジェクトの中間点(区間)を削除します (call_read_section利用不可)
590    pub delete_object_section: unsafe extern "C" fn(object: OBJECT_HANDLE, section: i32) -> bool,
591
592    /// オブジェクトの区間の開始位置を移動します (call_read_section利用不可)
593    /// 移動する区間番号が区間数(最終区間+1)の場合は終了点を移動します
594    pub move_object_section:
595        unsafe extern "C" fn(object: OBJECT_HANDLE, section: i32, frame: i32) -> bool,
596
597    /// エフェクトの順序を移動します (call_read_section利用不可)
598    /// エフェクト種別がフィルタ効果の場合に順序を移動できます
599    pub move_effect:
600        unsafe extern "C" fn(object: OBJECT_HANDLE, effect: EFFECT_HANDLE, index: i32) -> i32,
601
602    /// エフェクトの汎用データ項目の値を取得します
603    pub get_effect_data_value: unsafe extern "C" fn(
604        effect: EFFECT_HANDLE,
605        item: LPCWSTR,
606        data: *mut c_void,
607        size: i32,
608    ) -> i32,
609
610    /// エフェクトの汎用データ項目の値を設定します (call_read_section利用不可)
611    pub set_effect_data_value: unsafe extern "C" fn(
612        effect: EFFECT_HANDLE,
613        item: LPCWSTR,
614        data: *mut c_void,
615        size: i32,
616    ) -> bool,
617
618    /// 編集データを編集済み状態に設定します
619    pub set_edited_state: unsafe extern "C" fn(),
620
621    /// マークされているフレームの一覧を取得します
622    pub get_mark_frame_list: unsafe extern "C" fn(frame_list: *mut i32, frame_num: i32) -> i32,
623
624    /// 指定フレームのマークのメモを取得します
625    pub get_mark_frame_memo: unsafe extern "C" fn(frame: i32) -> LPCWSTR,
626
627    /// 指定フレームをマークします (call_read_section利用不可)
628    pub set_mark_frame: unsafe extern "C" fn(frame: i32, memo: LPCWSTR),
629
630    /// 指定フレームのマークを解除します (call_read_section利用不可)
631    pub clear_mark_frame: unsafe extern "C" fn(frame: i32),
632
633    /// 指定フレームのマークを移動します (call_read_section利用不可)
634    pub move_mark_frame: unsafe extern "C" fn(frame: i32, frame_to: i32) -> bool,
635
636    /// 指定のパレットの情報を設定します (call_read_section利用不可)
637    pub set_palette_info:
638        unsafe extern "C" fn(name: LPCWSTR, info: *mut PALETTE_INFO, info_size: i32) -> bool,
639}
640
641/// 編集ハンドル構造体
642/// get_host_app_window()以外はRegisterPlugin処理内から利用出来ません
643#[repr(C)]
644pub struct EDIT_HANDLE {
645    /// プロジェクトデータの編集をする為のコールバック関数(func_proc_edit)を呼び出します
646    /// 編集情報を排他制御する為に更新ロック状態のコールバック関数内で編集処理をする形になります
647    /// コールバック関数内で編集したオブジェクトは纏めてUndoに登録されます
648    /// コールバック関数は呼び出し元のスレッドで呼ばれます
649    /// func_proc_edit : 編集処理のコールバック関数
650    /// 戻り値   : trueなら成功
651    ///        編集が出来ない場合(出力中等)に失敗します
652    pub call_edit_section:
653        unsafe extern "C" fn(func_proc_edit: unsafe extern "C" fn(edit: *mut EDIT_SECTION)) -> bool,
654
655    /// call_edit_section()に引数paramを渡せるようにした関数です
656    pub call_edit_section_param: unsafe extern "C" fn(
657        param: *mut c_void,
658        func_proc_edit: unsafe extern "C" fn(param: *mut c_void, edit: *mut EDIT_SECTION),
659    ) -> bool,
660
661    /// 編集情報を取得します
662    /// 編集情報を排他制御する為に参照ロックします。※同一スレッドで既にロック状態の場合はそのまま取得します。
663    /// info : 編集情報の格納先へのポインタ
664    /// info_size : 編集情報の格納先のサイズ ※EDIT_INFOと異なる場合はサイズ分のみ取得されます
665    pub get_edit_info: unsafe extern "C" fn(info: *mut EDIT_INFO, info_size: i32),
666
667    /// ホストアプリケーションを再起動します
668    pub restart_host_app: unsafe extern "C" fn(),
669
670    /// エフェクト名の一覧をコールバック関数(func_proc_enum_effect)で取得します
671    /// param : 任意のユーザーデータのポインタ
672    /// func_proc_enum_effect : エフェクト名の取得処理のコールバック関数
673    pub enum_effect_name: unsafe extern "C" fn(
674        param: *mut c_void,
675        func_proc_enum_effect: unsafe extern "C" fn(
676            param: *mut c_void,
677            name: LPCWSTR,
678            r#type: i32,
679            flag: i32,
680        ),
681    ),
682
683    /// モジュール情報の一覧をコールバック関数(func_proc_enum_module)で取得します
684    /// param : 任意のユーザーデータのポインタ
685    /// func_proc_enum_module : モジュール情報の取得処理のコールバック関数
686    pub enum_module_info: unsafe extern "C" fn(
687        param: *mut c_void,
688        func_proc_enum_module: unsafe extern "C" fn(param: *mut c_void, info: *mut MODULE_INFO),
689    ),
690
691    /// ホストアプリケーションのメインウィンドウのハンドルを取得します
692    pub get_host_app_window: unsafe extern "C" fn() -> HWND,
693
694    /// 編集状態を取得します
695    pub get_edit_state: unsafe extern "C" fn() -> i32,
696
697    /// プロジェクトデータを参照する為のコールバック関数(func_proc_read_section)を呼び出します
698    /// 参照中にデータが更新されないように参照ロック状態のコールバック関数内で処理をする形になります
699    /// EDIT_SECTIONの更新系の関数等は利用出来ません
700    /// コールバック関数は呼び出し元と同じスレッドで呼ばれます
701    /// func_proc_read_section : コールバック関数
702    /// 戻り値 : trueなら成功(参照が出来ない場合は失敗します)
703    pub call_read_section: unsafe extern "C" fn(
704        func_proc_read_section: unsafe extern "C" fn(edit: *mut EDIT_SECTION),
705    ) -> bool,
706
707    /// call_read_section()に引数paramを渡せるようにした関数です
708    /// param : 任意のユーザーデータのポインタ
709    pub call_read_section_param: unsafe extern "C" fn(
710        param: *mut c_void,
711        func_proc_read_section: unsafe extern "C" fn(param: *mut c_void, edit: *mut EDIT_SECTION),
712    ) -> bool,
713
714    /// エフェクトの設定項目の一覧をコールバック関数(func_proc_enum_effect_item)で取得します
715    /// effect : 対象のエフェクト名(エイリアスファイルのeffect.nameの値)
716    /// param : 任意のユーザーデータのポインタ
717    /// func_proc_enum_effect_item : エフェクトの設定項目の取得処理のコールバック関数
718    /// 戻り値 : 取得出来た場合はtrue(対象が見つからない場合は失敗します)
719    pub enum_effect_item: unsafe extern "C" fn(
720        effect: LPCWSTR,
721        param: *mut c_void,
722        func_proc_enum_effect_item: unsafe extern "C" fn(
723            param: *mut c_void,
724            name: LPCWSTR,
725            r#type: i32,
726        ),
727    ) -> bool,
728
729    /// 現在のシーンの映像のレンダリングをします
730    pub rendering_scene_video: unsafe extern "C" fn(
731        frame: i32,
732        param: *mut c_void,
733        func_proc_rendering_video: unsafe extern "C" fn(
734            param: *mut c_void,
735            frame: i32,
736            buffer: *const c_void,
737            width: i32,
738            height: i32,
739            pitch: i32,
740        ),
741    ) -> bool,
742
743    /// 現在のシーンの音声のレンダリングをします
744    pub rendering_scene_audio: unsafe extern "C" fn(
745        frame: i32,
746        param: *mut c_void,
747        func_proc_rendering_audio: unsafe extern "C" fn(
748            param: *mut c_void,
749            frame: i32,
750            buffer0: *const f32,
751            buffer1: *const f32,
752            sample_num: i32,
753        ),
754    ) -> bool,
755
756    /// レンダリング中のタスクが全て完了するまで待機します
757    pub wait_rendering_task: unsafe extern "C" fn(),
758
759    /// フォント名の一覧をコールバック関数で取得します
760    pub enum_font_name: unsafe extern "C" fn(
761        param: *mut c_void,
762        func_proc_enum_font: unsafe extern "C" fn(param: *mut c_void, name: LPCWSTR),
763    ),
764
765    /// パレット名の一覧をコールバック関数で取得します
766    pub enum_palette_name: unsafe extern "C" fn(
767        param: *mut c_void,
768        func_proc_enum_palette: unsafe extern "C" fn(param: *mut c_void, name: LPCWSTR),
769    ),
770
771    /// 指定のオブジェクトの映像のレンダリングをします
772    pub rendering_object_video: unsafe extern "C" fn(
773        object: OBJECT_HANDLE,
774        frame: i32,
775        apply_effect: bool,
776        param: *mut c_void,
777        func_proc_rendering_video: unsafe extern "C" fn(
778            param: *mut c_void,
779            frame: i32,
780            buffer: *const c_void,
781            width: i32,
782            height: i32,
783            pitch: i32,
784        ),
785    ) -> bool,
786
787    /// 指定のオブジェクトの音声のレンダリングをします
788    pub rendering_object_audio: unsafe extern "C" fn(
789        object: OBJECT_HANDLE,
790        frame: i32,
791        apply_effect: bool,
792        param: *mut c_void,
793        func_proc_rendering_audio: unsafe extern "C" fn(
794            param: *mut c_void,
795            frame: i32,
796            buffer0: *const f32,
797            buffer1: *const f32,
798            sample_num: i32,
799        ),
800    ) -> bool,
801
802    /// 指定の設定項目が所属するグループの所属アイテム名を取得します
803    /// グループ項目を直接指定することも出来ます (item_indexにはnullptrを指定します)
804    pub get_effect_item_group_names: unsafe extern "C" fn(
805        effect: LPCWSTR,
806        item: LPCWSTR,
807        item_names: *mut LPCWSTR,
808        item_num: i32,
809        item_index: *mut i32,
810    ) -> i32,
811}
812
813impl EDIT_HANDLE {
814    /// エフェクト種別:フィルタ効果 ※今後追加される可能性があります
815    pub const EFFECT_TYPE_FILTER: i32 = 1;
816    /// エフェクト種別:メディア入力 ※今後追加される可能性があります
817    pub const EFFECT_TYPE_INPUT: i32 = 2;
818    /// エフェクト種別:シーンチェンジ ※今後追加される可能性があります
819    pub const EFFECT_TYPE_TRANSITION: i32 = 3;
820    /// エフェクト種別:オブジェクト制御 ※今後追加される可能性があります
821    pub const EFFECT_TYPE_CONTROL: i32 = 4;
822    /// エフェクト種別:メディア出力 ※今後追加される可能性があります
823    pub const EFFECT_TYPE_OUTPUT: i32 = 5;
824    /// エフェクトフラグ:画像をサポート ※今後追加される可能性があります
825    pub const EFFECT_FLAG_VIDEO: i32 = 1;
826    /// エフェクトフラグ:音声をサポート ※今後追加される可能性があります
827    pub const EFFECT_FLAG_AUDIO: i32 = 2;
828    /// エフェクトフラグ:フィルタオブジェクトをサポート ※今後追加される可能性があります
829    pub const EFFECT_FLAG_FILTER: i32 = 4;
830    /// エフェクトフラグ:フィルタオブジェクトをサポート ※今後追加される可能性があります
831    pub const EFFECT_FLAG_CAMERA: i32 = 8;
832    /// 編集状態:編集中
833    pub const EDIT_STATE_EDIT: i32 = 0;
834    /// 編集状態:プレビュー再生中
835    pub const EDIT_STATE_PLAY: i32 = 1;
836    /// 編集状態:ファイル出力中
837    pub const EDIT_STATE_SAVE: i32 = 2;
838    /// 設定項目種別:整数 ※今後追加される可能性があります
839    pub const EFFECT_ITEM_TYPE_INTEGER: i32 = 1;
840    /// 設定項目種別:数値(トラックバー) ※今後追加される可能性があります
841    pub const EFFECT_ITEM_TYPE_NUMBER: i32 = 2;
842    /// 設定項目種別:チェックボックス ※今後追加される可能性があります
843    pub const EFFECT_ITEM_TYPE_CHECK: i32 = 3;
844    /// 設定項目種別:テキスト ※今後追加される可能性があります
845    pub const EFFECT_ITEM_TYPE_TEXT: i32 = 4;
846    /// 設定項目種別:文字列 ※今後追加される可能性があります
847    pub const EFFECT_ITEM_TYPE_STRING: i32 = 5;
848    /// 設定項目種別:ファイル ※今後追加される可能性があります
849    pub const EFFECT_ITEM_TYPE_FILE: i32 = 6;
850    /// 設定項目種別:色 ※今後追加される可能性があります
851    pub const EFFECT_ITEM_TYPE_COLOR: i32 = 7;
852    /// 設定項目種別:リスト選択 ※今後追加される可能性があります
853    pub const EFFECT_ITEM_TYPE_SELECT: i32 = 8;
854    /// 設定項目種別:シーン ※今後追加される可能性があります
855    pub const EFFECT_ITEM_TYPE_SCENE: i32 = 9;
856    /// 設定項目種別:レイヤー範囲 ※今後追加される可能性があります
857    pub const EFFECT_ITEM_TYPE_RANGE: i32 = 10;
858    /// 設定項目種別:リストと文字の複合 ※今後追加される可能性があります
859    pub const EFFECT_ITEM_TYPE_COMBO: i32 = 11;
860    /// 設定項目種別:マスク ※今後追加される可能性があります
861    pub const EFFECT_ITEM_TYPE_MASK: i32 = 12;
862    /// 設定項目種別:フォント ※今後追加される可能性があります
863    pub const EFFECT_ITEM_TYPE_FONT: i32 = 13;
864    /// 設定項目種別:図形 ※今後追加される可能性があります
865    pub const EFFECT_ITEM_TYPE_FIGURE: i32 = 14;
866    /// 設定項目種別:データ ※今後追加される可能性があります
867    pub const EFFECT_ITEM_TYPE_DATA: i32 = 15;
868    /// 設定項目種別:フォルダ ※今後追加される可能性があります
869    pub const EFFECT_ITEM_TYPE_FOLDER: i32 = 16;
870    /// 設定項目種別:数値(トラックバー)グループ ※今後追加される可能性があります
871    pub const EFFECT_ITEM_TYPE_NUMBER_GROUP: i32 = 17;
872    /// 設定項目種別:設定グループ(明示的なグループのみ) ※設定値無し ※今後追加される可能性があります
873    pub const EFFECT_ITEM_TYPE_GROUP: i32 = 18;
874    /// 設定項目種別:セパレーター ※設定値無し ※今後追加される可能性があります
875    pub const EFFECT_ITEM_TYPE_SEPARATOR: i32 = 19;
876}
877
878/// プロジェクトファイル構造体
879/// プロジェクトファイルのロード、セーブ時のコールバック関数内で利用出来ます
880/// プロジェクトの保存データはプラグイン毎のデータ領域になります
881#[repr(C)]
882pub struct PROJECT_FILE {
883    /// プロジェクトに保存されている文字列(UTF-8)を取得します
884    /// key  : キー名(UTF-8)
885    /// 戻り値 : 取得した文字列へのポインタ (未設定の場合はnullptr)
886    pub get_param_string: unsafe extern "C" fn(key: LPCSTR) -> LPCSTR,
887    /// プロジェクトに文字列(UTF-8)を保存します
888    /// key  : キー名(UTF-8)
889    /// value : 保存する文字列(UTF-8)
890    pub set_param_string: unsafe extern "C" fn(key: LPCSTR, value: LPCSTR),
891    /// プロジェクトに保存されているバイナリデータを取得します
892    /// key  : キー名(UTF-8)
893    /// data  : 取得するデータの格納先へのポインタ
894    /// size  : 取得するデータのサイズ (保存されているサイズと異なる場合は失敗します)
895    /// 戻り値 : 正しく取得出来た場合はtrue
896    pub get_param_binary: unsafe extern "C" fn(key: LPCSTR, data: *mut c_void, size: i32) -> bool,
897    /// プロジェクトにバイナリデータを保存します
898    /// key  : キー名(UTF-8)
899    /// data  : 保存するデータへのポインタ
900    /// size  : 保存するデータのサイズ (4096バイト以下)
901    pub set_param_binary: unsafe extern "C" fn(key: LPCSTR, data: *mut c_void, size: i32),
902    /// プロジェクトに保存されているデータを全て削除します
903    pub clear_params: unsafe extern "C" fn(),
904
905    /// プロジェクトファイルのパスを取得します
906    /// 戻り値 : プロジェクトファイルパスへのポインタ (ファイルパスは未設定の場合があります)
907    ///      ※コールバック処理の終了まで有効
908    pub get_project_file_path: unsafe extern "C" fn() -> LPCWSTR,
909}
910
911/// ホストアプリケーション構造体
912#[repr(C)]
913pub struct HOST_APP_TABLE {
914    /// プラグインの情報を設定する
915    /// information : プラグインの情報
916    #[deprecated(note = "現在はGetCommonPluginTable()を利用する方法が推奨になります")]
917    pub set_plugin_information: unsafe extern "C" fn(information: LPCWSTR),
918
919    /// 入力プラグインを登録する
920    /// input_plugin_table : 入力プラグイン構造体
921    pub register_input_plugin: unsafe extern "C" fn(input_plugin_table: *mut INPUT_PLUGIN_TABLE),
922    /// 出力プラグインを登録する
923    /// output_plugin_table : 出力プラグイン構造体
924    pub register_output_plugin: unsafe extern "C" fn(output_plugin_table: *mut OUTPUT_PLUGIN_TABLE),
925    /// フィルタプラグインを登録する
926    /// filter_plugin_table : フィルタプラグイン構造体
927    pub register_filter_plugin: unsafe extern "C" fn(filter_plugin_table: *mut FILTER_PLUGIN_TABLE),
928    /// スクリプトモジュールを登録する
929    /// script_module_table : スクリプトモジュール構造体
930    pub register_script_module: unsafe extern "C" fn(script_module_table: *mut SCRIPT_MODULE_TABLE),
931
932    /// インポートメニューを登録する
933    /// name    : インポートメニューの名称
934    /// func_proc_import : インポートメニュー選択時のコールバック関数
935    pub register_import_menu: unsafe extern "C" fn(
936        name: LPCWSTR,
937        func_proc_import: unsafe extern "C" fn(*mut EDIT_SECTION),
938    ),
939    /// エクスポートメニューを登録する
940    /// name    : エクスポートメニューの名称
941    /// func_proc_export : エクスポートメニュー選択時のコールバック関数
942    pub register_export_menu: unsafe extern "C" fn(
943        name: LPCWSTR,
944        func_proc_export: unsafe extern "C" fn(*mut EDIT_SECTION),
945    ),
946
947    /// ウィンドウクライアントを登録する
948    /// name  : ウィンドウの名称
949    /// hwnd  : ウィンドウハンドル
950    /// ウィンドウにはWS_CHILDが追加され親ウィンドウが設定されます ※WS_POPUPは削除されます
951    pub register_window_client: unsafe extern "C" fn(name: LPCWSTR, hwnd: HWND),
952
953    /// プロジェクトデータ編集用のハンドルを取得します
954    /// 戻り値 : 編集ハンドル
955    pub create_edit_handle: unsafe extern "C" fn() -> *mut EDIT_HANDLE,
956
957    /// プロジェクトファイルをロードした直後に呼ばれる関数を登録する ※プロジェクトの初期化時にも呼ばれます
958    /// func_project_load : プロジェクトファイルのロード時のコールバック関数
959    pub register_project_load_handler:
960        unsafe extern "C" fn(func_project_load: unsafe extern "C" fn(*mut PROJECT_FILE)),
961    /// プロジェクトファイルをセーブする直前に呼ばれる関数を登録する
962    /// func_project_save : プロジェクトファイルのセーブ時のコールバック関数
963    pub register_project_save_handler:
964        unsafe extern "C" fn(func_project_save: unsafe extern "C" fn(*mut PROJECT_FILE)),
965
966    /// レイヤーメニューを登録する (レイヤー編集でオブジェクト未選択時の右クリックメニューに追加されます)
967    /// name : レイヤーメニューの名称
968    /// func_proc_layer_menu : レイヤーメニュー選択時のコールバック関数
969    pub register_layer_menu: unsafe extern "C" fn(
970        name: LPCWSTR,
971        func_proc_layer_menu: unsafe extern "C" fn(*mut EDIT_SECTION),
972    ),
973
974    /// オブジェクトメニューを登録する (レイヤー編集でオブジェクト選択時の右クリックメニューに追加されます)
975    /// name : オブジェクトメニューの名称
976    /// func_proc_object_menu : オブジェクトメニュー選択時のコールバック関数
977    pub register_object_menu: unsafe extern "C" fn(
978        name: LPCWSTR,
979        func_proc_object_menu: unsafe extern "C" fn(*mut EDIT_SECTION),
980    ),
981
982    /// 設定メニューを登録する
983    /// 設定メニューの登録後にウィンドウクライアントを登録するとシステムメニューに「設定」が追加されます
984    /// name : 設定メニューの名称
985    /// func_config : 設定メニュー選択時のコールバック関数
986    pub register_config_menu:
987        unsafe extern "C" fn(name: LPCWSTR, func_config: unsafe extern "C" fn(HWND, HINSTANCE)),
988
989    /// 編集メニューを登録する
990    /// name : 編集メニューの名称 ※名称に'\'を入れると表示を階層に出来ます
991    /// func_proc_edit_menu : 編集メニュー選択時のコールバック関数
992    pub register_edit_menu: unsafe extern "C" fn(
993        name: LPCWSTR,
994        func_proc_edit_menu: unsafe extern "C" fn(*mut EDIT_SECTION),
995    ),
996
997    /// キャッシュを破棄の操作時に呼ばれる関数を登録する
998    /// func_proc_clear_cache : キャッシュの破棄時のコールバック関数
999    pub register_clear_cache_handler:
1000        unsafe extern "C" fn(func_proc_clear_cache: unsafe extern "C" fn(*mut EDIT_SECTION)),
1001
1002    /// シーンを変更した直後に呼ばれる関数を登録する ※シーンの設定情報が更新された時にも呼ばれます
1003    /// func_proc_change_scene : シーン変更時のコールバック関数
1004    pub register_change_scene_handler:
1005        unsafe extern "C" fn(func_proc_change_scene: unsafe extern "C" fn(*mut EDIT_SECTION)),
1006
1007    /// インポートメニューを登録する (ウィンドウメニューのファイルに追加されます)
1008    /// 引数paramを渡して編集セクションにしないでコールバックを呼び出します
1009    /// name : インポートメニューの名称
1010    /// param : 任意のユーザーデータのポインタ
1011    /// func_proc_import : インポートメニュー選択時のコールバック関数
1012    pub register_import_menu_param: unsafe extern "C" fn(
1013        name: LPCWSTR,
1014        param: *mut c_void,
1015        func_proc_import: unsafe extern "C" fn(param: *mut c_void),
1016    ),
1017
1018    /// エクスポートメニューを登録する (ウィンドウメニューのファイルに追加されます)
1019    /// 引数paramを渡して編集セクションにしないでコールバックを呼び出します
1020    /// name : エクスポートメニューの名称
1021    /// param : 任意のユーザーデータのポインタ
1022    /// func_proc_export : エクスポートメニュー選択時のコールバック関数
1023    pub register_export_menu_param: unsafe extern "C" fn(
1024        name: LPCWSTR,
1025        param: *mut c_void,
1026        func_proc_export: unsafe extern "C" fn(param: *mut c_void),
1027    ),
1028
1029    /// レイヤーメニューを登録する (レイヤー編集でオブジェクト未選択時の右クリックメニューに追加されます)
1030    /// 引数paramを渡して編集セクションにしないでコールバックを呼び出します
1031    /// name : レイヤーメニューの名称
1032    /// param : 任意のユーザーデータのポインタ
1033    /// func_proc_layer_menu : レイヤーメニュー選択時のコールバック関数
1034    pub register_layer_menu_param: unsafe extern "C" fn(
1035        name: LPCWSTR,
1036        param: *mut c_void,
1037        func_proc_layer_menu: unsafe extern "C" fn(param: *mut c_void),
1038    ),
1039
1040    /// オブジェクトメニューを登録する (レイヤー編集でオブジェクト選択時の右クリックメニューに追加されます)
1041    /// 引数paramを渡して編集セクションにしないでコールバックを呼び出します
1042    /// name : オブジェクトメニューの名称
1043    /// param : 任意のユーザーデータのポインタ
1044    /// func_proc_object_menu : オブジェクトメニュー選択時のコールバック関数
1045    pub register_object_menu_param: unsafe extern "C" fn(
1046        name: LPCWSTR,
1047        param: *mut c_void,
1048        func_proc_object_menu: unsafe extern "C" fn(param: *mut c_void),
1049    ),
1050
1051    /// 編集メニューを登録する
1052    /// 引数paramを渡して編集セクションにしないでコールバックを呼び出します
1053    /// name : 編集メニューの名称 ※名称に'\'を入れると表示を階層に出来ます
1054    /// param : 任意のユーザーデータのポインタ
1055    /// func_proc_edit_menu : 編集メニュー選択時のコールバック関数
1056    pub register_edit_menu_param: unsafe extern "C" fn(
1057        name: LPCWSTR,
1058        param: *mut c_void,
1059        func_proc_edit_menu: unsafe extern "C" fn(param: *mut c_void),
1060    ),
1061
1062    /// ファイルをD&Dした時に呼ばれる関数を登録する
1063    /// name : ドラッグ時のツールチップや入力プラグインの設定で表示する名称
1064    /// filefilter : D&Dに対応するファイルフィルタ
1065    /// func_proc_file_drop : ファイルをD&Dした時のコールバック関数
1066    pub register_file_drop_handler: unsafe extern "C" fn(
1067        name: LPCWSTR,
1068        filefilter: LPCWSTR,
1069        func_proc_file_drop: unsafe extern "C" fn(edit_section: *mut EDIT_SECTION, file: LPCWSTR),
1070    ),
1071
1072    /// ファイルをD&Dした時に呼ばれる関数を登録する
1073    /// 引数paramを渡して編集セクションにしないでコールバックを呼び出します
1074    /// name : ドラッグ時のツールチップや入力プラグインの設定で表示する名称
1075    /// filefilter : D&Dに対応するファイルフィルタ
1076    /// func_proc_file_drop : ファイルをD&Dした時のコールバック関数
1077    pub register_file_drop_param_handler: unsafe extern "C" fn(
1078        name: LPCWSTR,
1079        filefilter: LPCWSTR,
1080        param: *mut c_void,
1081        func_proc_file_drop: unsafe extern "C" fn(param: *mut c_void, file: LPCWSTR),
1082    ),
1083
1084    /// オブジェクト編集の設定項目メニューを登録する (オブジェクト編集の右クリックメニューに追加されます)
1085    /// name : 設定項目メニューの名称
1086    /// allow_effect_only : エフェクトのみを許可するか? ※trueの場合はitemがnullptrで呼ばれるケースを許可します
1087    /// func_proc_item_menu : 設定項目メニュー選択時のコールバック関数
1088    /// ※コールバック関数の引数はget_object_item_value()の引数と同じ形式になります
1089    pub register_object_item_menu: unsafe extern "C" fn(
1090        name: LPCWSTR,
1091        allow_effect_only: bool,
1092        func_proc_item_menu: unsafe extern "C" fn(
1093            edit: *mut EDIT_SECTION,
1094            object: OBJECT_HANDLE,
1095            effect: LPCWSTR,
1096            item: LPCWSTR,
1097        ),
1098    ),
1099
1100    /// オブジェクト編集の設定項目メニューを登録する (オブジェクト編集の右クリックメニューに追加されます)
1101    /// 引数paramを渡して編集セクションにしないでコールバックを呼び出します
1102    /// name : 設定項目メニューの名称
1103    /// allow_effect_only : エフェクトのみを許可するか? ※trueの場合はitemがnullptrで呼ばれるケースを許可します
1104    /// param : 任意のユーザーデータのポインタ
1105    /// func_proc_item_menu : 設定項目メニュー選択時のコールバック関数
1106    /// ※コールバック関数の引数はget_object_item_value()の引数と同じ形式になります
1107    pub register_object_item_menu_param: unsafe extern "C" fn(
1108        name: LPCWSTR,
1109        allow_effect_only: bool,
1110        param: *mut c_void,
1111        func_proc_item_menu: unsafe extern "C" fn(
1112            param: *mut c_void,
1113            object: OBJECT_HANDLE,
1114            effect: LPCWSTR,
1115            item: LPCWSTR,
1116        ),
1117    ),
1118
1119    /// スクリプトモジュールをモジュール名を指定して登録する
1120    /// script_module_table : スクリプトモジュール構造体
1121    /// module_name : モジュール名
1122    pub register_script_module_name:
1123        unsafe extern "C" fn(script_module_table: *mut SCRIPT_MODULE_TABLE, module_name: LPCWSTR),
1124
1125    /// フォントコレクションを登録する
1126    /// collection : フォントコレクション (IDWriteFontCollectionのポインタ)
1127    pub register_font_collection: unsafe extern "C" fn(collection: *mut std::ffi::c_void),
1128
1129    /// 指定のイベントのコールバック関数を登録する
1130    pub register_event_listener: unsafe extern "C" fn(
1131        r#type: EVENT_TYPE,
1132        param: *mut c_void,
1133        func_proc_event: unsafe extern "C" fn(param: *mut c_void),
1134    ),
1135}