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    CHANGE_EDIT_STATE = 5,
158}
159
160/// オブジェクトフラグ種別
161#[repr(i32)]
162#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
163pub enum OBJECT_FLAG_TYPE {
164    /// グループ制御対象の有効・無効
165    ENABLE_GROUP = 1,
166    /// カメラ制御対象の有効・無効
167    ENABLE_CAMERA = 2,
168    /// クリッピングオブジェクトの有効・無効
169    CLIPPING_OBJECT = 3,
170    /// 上のオブジェクトでクリッピングの有効・無効
171    CLIPPING_UPPER_OBJECT = 4,
172}
173
174#[repr(C)]
175#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
176pub struct EDIT_INFO_COLOR {
177    pub r: u8,
178    pub g: u8,
179    pub b: u8,
180    pub a: u8,
181}
182
183/// 編集情報構造体
184/// フレーム番号、レイヤー番号が0からの番号になります ※UI表示と異なります
185#[repr(C)]
186pub struct EDIT_INFO {
187    /// シーンの解像度
188    pub width: i32,
189    /// シーンの解像度
190    pub height: i32,
191    /// シーンのフレームレート
192    pub rate: i32,
193    /// シーンのフレームレート
194    pub scale: i32,
195    /// シーンのサンプリングレート
196    pub sample_rate: i32,
197    /// 現在のカーソルのフレーム番号
198    pub frame: i32,
199    /// 現在の選択レイヤー番号
200    pub layer: i32,
201    /// オブジェクトが存在する最大のフレーム番号
202    pub frame_max: i32,
203    /// オブジェクトが存在する最大のレイヤー番号
204    pub layer_max: i32,
205    /// レイヤー編集で表示されているフレームの開始番号
206    pub display_frame_start: i32,
207    /// レイヤー編集で表示されているレイヤーの開始番号
208    pub display_layer_start: i32,
209    /// レイヤー編集で表示されているフレーム数 ※厳密ではないです
210    pub display_frame_num: i32,
211    /// レイヤー編集で表示されているレイヤー数 ※厳密ではないです
212    pub display_layer_num: i32,
213    /// フレーム範囲選択の開始フレーム番号 ※未選択の場合は-1
214    pub select_range_start: i32,
215    /// フレーム範囲選択の終了フレーム番号 ※未選択の場合は-1
216    pub select_range_end: i32,
217    /// グリッド(BPM)のテンポ ※先頭のBPM情報
218    pub grid_bpm_tempo: f32,
219    /// グリッド(BPM)の拍子 ※先頭のBPM情報
220    pub grid_bpm_beat: i32,
221    /// グリッド(BPM)の拍子オフセット ※先頭のBPM情報
222    pub grid_bpm_offset: f32,
223    /// シーンのID
224    pub scene_id: i32,
225    /// シーンの背景色
226    pub background: EDIT_INFO_COLOR,
227}
228
229/// 編集セクション構造体
230/// メニュー選択やプロジェクト編集のコールバック関数内で利用出来ます
231/// フレーム番号、レイヤー番号が0からの番号になります ※UI表示と異なります
232#[repr(C)]
233pub struct EDIT_SECTION {
234    /// 編集情報 (call_read_section利用不可)
235    pub info: *mut EDIT_INFO,
236
237    /// 指定の位置にオブジェクトエイリアスを作成します (call_read_section利用不可)
238    /// alias : オブジェクトエイリアスデータ(UTF-8)へのポインタ
239    /// オブジェクトエイリアスファイル(.object)と同じフォーマットになります
240    /// layer : 作成するレイヤー番号
241    /// frame : 作成するフレーム番号
242    /// length : オブジェクトのフレーム数 ※エイリアスデータにフレーム情報がある場合はフレーム情報から長さが設定されます
243    /// フレーム数に0を指定した場合は長さや追加位置が自動調整されます
244    /// 戻り値 : 作成したオブジェクトのハンドル (失敗した場合はnullptrを返却)
245    /// 既に存在するオブジェクトに重なったり、エイリアスデータが不正な場合に失敗します
246    /// 複数オブジェクトのエイリアスデータの場合は先頭のオブジェクトのハンドルが返却されます ※オブジェクトは全て作成されます
247    pub create_object_from_alias:
248        unsafe extern "C" fn(alias: LPCSTR, layer: i32, frame: i32, length: i32) -> OBJECT_HANDLE,
249
250    /// 指定のフレーム番号以降にあるオブジェクトを検索します
251    /// ※フィルタプラグインから呼び出した場合は処理対象のシーンのオブジェクトを検索します
252    /// layer : 検索対象のレイヤー番号
253    /// frame : 検索を開始するフレーム番号
254    /// 戻り値 : 検索したオブジェクトのハンドル (見つからない場合はnullptrを返却)
255    pub find_object: unsafe extern "C" fn(layer: i32, frame: i32) -> OBJECT_HANDLE,
256
257    /// オブジェクトに対象エフェクトが何個存在するかを取得します
258    /// object : オブジェクトのハンドル
259    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
260    /// 戻り値 : 対象エフェクトの数 ※存在しない場合は0
261    pub count_object_effect: unsafe extern "C" fn(object: OBJECT_HANDLE, effect: LPCWSTR) -> i32,
262
263    /// オブジェクトのレイヤー・フレーム情報を取得します
264    /// object : オブジェクトのハンドル
265    /// 戻り値 : オブジェクトのレイヤー・フレーム情報
266    pub get_object_layer_frame: unsafe extern "C" fn(object: OBJECT_HANDLE) -> OBJECT_LAYER_FRAME,
267
268    /// オブジェクトのエイリアスデータを取得します
269    /// object : オブジェクトのハンドル
270    /// 戻り値 : オブジェクトエイリアスデータ(UTF-8)へのポインタ (取得出来ない場合はnullptrを返却)
271    /// オブジェクトエイリアスファイルと同じフォーマットになります
272    /// ※次に同一スレッドで文字列返却の関数を使うかコールバック処理の終了まで有効
273    pub get_object_alias: unsafe extern "C" fn(object: OBJECT_HANDLE) -> LPCSTR,
274
275    /// オブジェクトの設定項目の値を文字列で取得します
276    /// object : オブジェクトのハンドル
277    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
278    /// 同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
279    /// get_object_item_value(object, L"ぼかし:1", L"範囲"); // 2個目のぼかしを対象とする
280    /// item : 対象の設定項目の名称 (エイリアスファイルのキーの名称)
281    /// 戻り値 : 取得した設定値(UTF8)へのポインタ (取得出来ない場合はnullptrを返却)
282    /// エイリアスファイルの設定値と同じフォーマットになります
283    /// ※次に同一スレッドで文字列返却の関数を使うかコールバック処理の終了まで有効
284    pub get_object_item_value:
285        unsafe extern "C" fn(object: OBJECT_HANDLE, effect: LPCWSTR, item: LPCWSTR) -> LPCSTR,
286
287    /// オブジェクトの設定項目の値を文字列で設定します (call_read_section利用不可)
288    /// object : オブジェクトのハンドル
289    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
290    /// 同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
291    /// set_object_item_value(object, L"ぼかし:1", L"範囲", "1"); // 2個目のぼかしを対象とする
292    /// item : 対象の設定項目の名称 (エイリアスファイルのキーの名称)
293    /// value : 設定値(UTF8)
294    /// エイリアスファイルの設定値と同じフォーマットになります
295    /// 戻り値 : 設定出来た場合はtrue (対象が見つからない場合は失敗します)
296    pub set_object_item_value: unsafe extern "C" fn(
297        object: OBJECT_HANDLE,
298        effect: LPCWSTR,
299        item: LPCWSTR,
300        value: LPCSTR,
301    ) -> bool,
302
303    /// オブジェクトを移動します (call_read_section利用不可)
304    /// object : オブジェクトのハンドル
305    /// layer : 移動先のレイヤー番号
306    /// frame : 移動先のフレーム番号
307    /// 戻り値 : 移動した場合はtrue (移動先にオブジェクトが存在する場合は失敗します)
308    pub move_object: unsafe extern "C" fn(object: OBJECT_HANDLE, layer: i32, frame: i32) -> bool,
309
310    /// オブジェクトを削除します (call_read_section利用不可)
311    /// ※同一編集セクション内で作成したオブジェクトは削除しないようにすること
312    /// object : オブジェクトのハンドル
313    pub delete_object: unsafe extern "C" fn(object: OBJECT_HANDLE),
314
315    /// オブジェクト設定ウィンドウで選択されているオブジェクトのハンドルを取得します
316    /// 戻り値 : オブジェクトのハンドル (未選択の場合はnullptrを返却)
317    pub get_focus_object: unsafe extern "C" fn() -> OBJECT_HANDLE,
318
319    /// オブジェクト設定ウィンドウで選択するオブジェクトを設定します (call_read_section利用不可)
320    /// ※コールバック処理の終了時に設定されます
321    /// object : オブジェクトのハンドル (nullptrを指定すると選択を解除します)
322    pub set_focus_object: unsafe extern "C" fn(object: OBJECT_HANDLE),
323
324    /// プロジェクトファイルのポインタを取得します (call_read_section利用不可)
325    /// EDIT_HANDLE : 編集ハンドル
326    /// 戻り値 : プロジェクトファイル構造体へのポインタ
327    /// ※コールバック処理の終了まで有効
328    pub get_project_file: unsafe extern "C" fn(edit: *mut EDIT_HANDLE) -> *mut PROJECT_FILE,
329
330    /// 選択中オブジェクトのハンドルを取得します
331    /// index : 選択中オブジェクトのインデックス(0〜)
332    /// 戻り値 : 指定インデックスのオブジェクトのハンドル (インデックスが範囲外の場合はnullptrを返却)
333    pub get_selected_object: unsafe extern "C" fn(index: i32) -> OBJECT_HANDLE,
334
335    /// 選択中オブジェクトの数を取得します
336    /// 戻り値 : 選択中オブジェクトの数
337    pub get_selected_object_num: unsafe extern "C" fn() -> i32,
338
339    /// マウス座標のレイヤー・フレーム位置を取得します (call_read_section利用不可)
340    /// 最後のマウス移動のウィンドウメッセージの座標から計算します
341    /// ファイルD&D時のコールバック関数内で取得した場合はドロップ位置になります
342    /// layer : レイヤー番号の格納先
343    /// frame : フレーム番号の格納先
344    /// 戻り値 : マウス座標がレイヤー編集上の場合はtrue
345    pub get_mouse_layer_frame: unsafe extern "C" fn(layer: *mut i32, frame: *mut i32) -> bool,
346
347    /// 指定のスクリーン座標のレイヤー・フレーム位置を取得します (call_read_section利用不可)
348    /// x,y : 対象のスクリーン座標
349    /// layer : レイヤー番号の格納先
350    /// frame : フレーム番号の格納先
351    /// 戻り値 : スクリーン座標がレイヤー編集上の場合はtrue
352    pub pos_to_layer_frame:
353        unsafe extern "C" fn(x: i32, y: i32, layer: *mut i32, frame: *mut i32) -> bool,
354
355    /// 指定のメディアファイルがサポートされているかを確認します
356    /// file : メディアファイルのパス
357    /// strict : trueの場合は実際に読み込めるかを確認します
358    /// falseの場合は拡張子が対応しているかを確認します
359    /// 戻り値 : サポートされている場合はtrue
360    pub is_support_media_file: unsafe extern "C" fn(file: LPCWSTR, strict: bool) -> bool,
361
362    /// 指定のメディアファイルの情報を取得します ※動画、音声、画像ファイル以外では取得出来ません
363    /// file : メディアファイルのパス
364    /// info : メディア情報の格納先へのポインタ
365    /// info_size : メディア情報の格納先のサイズ ※MEDIA_INFOと異なる場合はサイズ分のみ取得されます
366    /// 戻り値 : 取得出来た場合はtrue
367    pub get_media_info:
368        unsafe extern "C" fn(file: LPCWSTR, info: *mut MEDIA_INFO, info_size: i32) -> bool,
369
370    /// 指定の位置にメディアファイルからオブジェクトを作成します (call_read_section利用不可)
371    /// file : メディアファイルのパス
372    /// layer : 作成するレイヤー番号
373    /// frame : 作成するフレーム番号
374    /// length : オブジェクトのフレーム数
375    /// フレーム数に0を指定した場合は長さや追加位置が自動調整されます
376    /// 戻り値 : 作成したオブジェクトのハンドル (失敗した場合はnullptrを返却)
377    /// 既に存在するオブジェクトに重なったり、メディアファイルに対応していない場合は失敗します
378    pub create_object_from_media_file:
379        unsafe extern "C" fn(file: LPCWSTR, layer: i32, frame: i32, length: i32) -> OBJECT_HANDLE,
380
381    /// 指定の位置にオブジェクトを作成します (call_read_section利用不可)
382    /// effect : エフェクト名 (エイリアスファイルのeffect.nameの値)
383    /// layer : 作成するレイヤー番号
384    /// frame : 作成するフレーム番号
385    /// length : オブジェクトのフレーム数
386    /// フレーム数に0を指定した場合は長さや追加位置が自動調整されます
387    /// 戻り値 : 作成したオブジェクトのハンドル (失敗した場合はnullptrを返却)
388    /// 既に存在するオブジェクトに重なったり、指定エフェクトに対応していない場合は失敗します
389    pub create_object:
390        unsafe extern "C" fn(effect: LPCWSTR, layer: i32, frame: i32, length: i32) -> OBJECT_HANDLE,
391
392    /// 現在のレイヤー・フレーム位置を設定します (call_read_section利用不可)
393    /// ※設定出来る範囲に調整されます
394    /// layer : レイヤー番号
395    /// frame : フレーム番号
396    pub set_cursor_layer_frame: unsafe extern "C" fn(layer: i32, frame: i32),
397
398    /// レイヤー編集のレイヤー・フレームの表示開始位置を設定します (call_read_section利用不可)
399    /// ※設定出来る範囲に調整されます
400    /// layer : 表示開始レイヤー番号
401    /// frame : 表示開始フレーム番号
402    pub set_display_layer_frame: unsafe extern "C" fn(layer: i32, frame: i32),
403
404    /// フレーム範囲選択を設定します (call_read_section利用不可)
405    /// ※設定出来る範囲に調整されます
406    /// start,end : 開始終了フレーム番号
407    /// 開始終了フレームの両方に-1を指定すると選択を解除します
408    pub set_select_range: unsafe extern "C" fn(start: i32, end: i32),
409
410    /// グリッド(BPM)を設定します (call_read_section利用不可)
411    /// tempo : テンポ
412    /// beat : 拍子
413    /// offset : 基準時間
414    pub set_grid_bpm: unsafe extern "C" fn(tempo: f32, beat: i32, offset: f32),
415
416    /// オブジェクト名を取得します
417    /// object : オブジェクトのハンドル
418    /// 戻り値 : オブジェクト名へのポインタ (標準の名前の場合はnullptrを返却)
419    /// ※オブジェクトの編集をするかコールバック処理の終了まで有効
420    pub get_object_name: unsafe extern "C" fn(object: OBJECT_HANDLE) -> LPCWSTR,
421
422    /// オブジェクト名を設定します (call_read_section利用不可)
423    /// object : オブジェクトのハンドル
424    /// name : オブジェクト名 (nullptrか空文字を指定すると標準の名前になります)
425    pub set_object_name: unsafe extern "C" fn(object: OBJECT_HANDLE, name: LPCWSTR),
426
427    /// レイヤー名を取得します
428    /// layer : レイヤー番号
429    /// 戻り値 : レイヤー名へのポインタ (標準の名前の場合はnullptrを返却)
430    /// ※レイヤーの編集をするかコールバック処理の終了まで有効
431    pub get_layer_name: unsafe extern "C" fn(layer: i32) -> LPCWSTR,
432
433    /// レイヤー名を設定します (call_read_section利用不可)
434    /// layer : レイヤー番号
435    /// name : レイヤー名 (nullptrか空文字を指定すると標準の名前になります)
436    pub set_layer_name: unsafe extern "C" fn(layer: i32, name: LPCWSTR),
437
438    /// シーン名を取得します
439    /// 戻り値 : シーン名へのポインタ
440    /// ※シーンの編集をするかコールバック処理の終了まで有効
441    pub get_scene_name: unsafe extern "C" fn() -> LPCWSTR,
442
443    /// シーン名を設定します (call_read_section利用不可)
444    /// ※シーンの操作は現状Undoに非対応です
445    /// name : シーン名
446    /// ※シーン名は必須になります (nullptrや空文字の場合は変更しません)
447    pub set_scene_name: unsafe extern "C" fn(name: LPCWSTR),
448
449    /// シーンの解像度を設定します (call_read_section利用不可)
450    /// ※シーンの操作は現状Undoに非対応です
451    /// width : 横のサイズ
452    /// height : 縦のサイズ
453    pub set_scene_size: unsafe extern "C" fn(width: i32, height: i32),
454
455    /// シーンのフレームレートを設定します (call_read_section利用不可)
456    /// ※シーンの操作は現状Undoに非対応です
457    /// rate : フレームレート
458    /// scale : フレームレートのスケール
459    pub set_scene_frame_rate: unsafe extern "C" fn(rate: i32, scale: i32),
460
461    /// シーンのサンプリングレートを設定します (call_read_section利用不可)
462    /// ※シーンの操作は現状Undoに非対応です
463    /// sample_rate : サンプリングレート
464    pub set_scene_sample_rate: unsafe extern "C" fn(sample_rate: i32),
465
466    /// レイヤーの表示・非表示状態を取得します
467    /// layer : レイヤー番号
468    /// 戻り値 : レイヤーが表示状態の場合はtrue
469    pub get_layer_enable: unsafe extern "C" fn(layer: i32) -> bool,
470
471    /// レイヤーの表示・非表示状態を設定します (call_read_section利用不可)
472    /// layer : レイヤー番号
473    /// enable : 設定するレイヤーの表示状態
474    pub set_layer_enable: unsafe extern "C" fn(layer: i32, enable: bool),
475
476    /// レイヤーのロック状態を取得します
477    /// layer : レイヤー番号
478    /// 戻り値 : レイヤーがロック状態の場合はtrue
479    pub get_layer_lock: unsafe extern "C" fn(layer: i32) -> bool,
480
481    /// レイヤーのロック状態を設定します (call_read_section利用不可)
482    /// layer : レイヤー番号
483    /// lock : 設定するレイヤーのロック状態
484    pub set_layer_lock: unsafe extern "C" fn(layer: i32, lock: bool),
485
486    /// オブジェクトの区間の数を取得します
487    /// object : オブジェクトのハンドル
488    /// 戻り値 : 区間の数
489    pub get_object_section_num: unsafe extern "C" fn(object: OBJECT_HANDLE) -> i32,
490
491    /// 選択中オブジェクトの区間の位置を取得します
492    /// 戻り値 : 区間の番号 (未選択の場合は-1を返却)
493    pub get_focus_object_section: unsafe extern "C" fn() -> i32,
494
495    /// オブジェクトの区間の開始フレーム番号を取得します
496    /// object : オブジェクトのハンドル
497    /// section : 区間の番号
498    /// 戻り値 : 区間の開始フレーム番号 (取得出来ない場合は-1を返却)
499    pub get_object_section_frame: unsafe extern "C" fn(object: OBJECT_HANDLE, section: i32) -> i32,
500
501    /// 指定フレーム位置でのオブジェクトのトラックバー項目の値を取得します
502    /// ※フィルタプラグインから呼び出した場合は処理対象のシーンのオブジェクトのみ取得出来ます
503    /// object : オブジェクトのハンドル
504    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
505    /// 同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
506    /// item : 対象のトラックバー項目の名称 (エイリアスファイルのキーの名称)
507    /// frame : 取得対象のフレーム番号 ※小数部でフレーム間の位置を指定出来ます
508    /// value : トラックバー項目の値の格納先へのポインタ
509    /// 戻り値 : 設定出来た場合はtrue (対象が見つからない場合は失敗します)
510    pub get_object_track_value: unsafe extern "C" fn(
511        object: OBJECT_HANDLE,
512        effect: LPCWSTR,
513        item: LPCWSTR,
514        frame: f64,
515        value: *mut f64,
516    ) -> bool,
517
518    /// 指定フレーム位置でのオブジェクトのチェックボックス(セクション毎含む)項目の値を取得します
519    /// object : オブジェクトのハンドル
520    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
521    /// 同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
522    /// item : 対象のチェックボックス項目の名称 (エイリアスファイルのキーの名称)
523    /// frame : 取得対象のフレーム番号 ※セクション毎チェックボックスの場合に利用
524    /// value : チェックボックス項目の値の格納先へのポインタ
525    /// 戻り値 : 設定出来た場合はtrue (対象が見つからない場合は失敗します)
526    pub get_object_check_value: unsafe extern "C" fn(
527        object: OBJECT_HANDLE,
528        effect: LPCWSTR,
529        item: LPCWSTR,
530        frame: i32,
531        value: *mut bool,
532    ) -> bool,
533
534    /// オブジェクトのトラックバー項目の情報を取得します
535    /// object : オブジェクトのハンドル
536    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
537    /// 同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
538    /// item : 対象のトラックバー項目の名称 (エイリアスファイルのキーの名称)
539    /// info : トラックバー情報の格納先へのポインタ
540    /// info_size : トラックバー情報の格納先のサイズ ※TRACK_INFOと異なる場合はサイズ分のみ取得されます
541    /// 戻り値 : 取得出来た場合はtrue (対象が見つからない場合は失敗します)
542    pub get_object_track_info: unsafe extern "C" fn(
543        object: OBJECT_HANDLE,
544        effect: LPCWSTR,
545        item: LPCWSTR,
546        info: *mut TRACK_INFO,
547        info_size: i32,
548    ) -> bool,
549
550    /// 現在のパレット名を取得します
551    /// ラベル付きの場合は[ラベル名.パレット名]のフォーマットになります
552    /// 戻り値 : 現在のパレット名 ※コールバック処理の終了まで有効
553    pub get_palette_name: unsafe extern "C" fn() -> LPCWSTR,
554
555    /// 指定のパレットの情報を取得します
556    /// name : パレット名
557    /// info : パレット情報の格納先へのポインタ
558    /// info_size : パレット情報の格納先のサイズ ※PALETTE_INFOと異なる場合はサイズ分のみ取得されます
559    /// 戻り値 : 取得出来た場合はtrue (対象が見つからない場合は失敗します)
560    pub get_palette_info:
561        unsafe extern "C" fn(name: LPCWSTR, info: *mut PALETTE_INFO, info_size: i32) -> bool,
562
563    /// 登録されているフォントのDirectWriteのフォントのポインタを取得する (IDWriteFontのポインタを取得します)
564    /// font : フォント名 ※アプリケーション内の登録名
565    /// 戻り値 : IDWriteFontのポインタ (指定フォントが無い場合はnullptrを返却)
566    pub get_font: unsafe extern "C" fn(font: LPCWSTR) -> *mut c_void,
567
568    /// オブジェクトのトラックバーグループの所属アイテム名を取得します
569    /// object : オブジェクトのハンドル
570    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
571    /// 同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
572    /// group_name : 対象のトラックバーグループ項目の名称 (エイリアスファイルのキーの名称)
573    /// item_names : 所属アイテム名の格納先へのポインタ
574    /// item_num : 所属アイテム名の格納先の数
575    /// 戻り値 : 取得出来た所属アイテム名の数 (指定グループが無い場合は0を返却)
576    /// item_namesがnullptrの場合は所属アイテム数を返却します
577    pub get_object_track_group_names: unsafe extern "C" fn(
578        object: OBJECT_HANDLE,
579        effect: LPCWSTR,
580        group_name: LPCWSTR,
581        item_names: *mut LPCWSTR,
582        item_num: i32,
583    ) -> i32,
584
585    /// 新しい関数に差し替えるので廃止します
586    #[deprecated = "新しい関数に差し替えるので廃止します"]
587    pub deprecated_get_grid_bpm_list:
588        unsafe extern "C" fn(bpm_list: *mut BPM_INFO, bpm_num: i32) -> i32,
589
590    /// 新しい関数に差し替えるので廃止します
591    #[deprecated = "新しい関数に差し替えるので廃止します"]
592    pub deprecated_set_grid_bpm_list: unsafe extern "C" fn(bpm_list: *mut BPM_INFO, bpm_num: i32),
593
594    /// オブジェクトからエフェクトを検索します
595    /// object : 検索対象のオブジェクトのハンドル
596    /// effect : 検索するエフェクト名 (エイリアスファイルのeffect.nameの値)
597    /// 同じエフェクトが複数ある場合は":n"のサフィックスでインデックス指定出来ます (nは0からの番号)
598    /// nullptrを指定すると先頭のエフェクトを取得します
599    /// 戻り値 : 検索したエフェクトのハンドル (見つからない場合はnullptrを返却)
600    /// ※エフェクトハンドルはエフェクトが破棄されるかコールバック処理の終了まで有効
601    pub find_effect: unsafe extern "C" fn(object: OBJECT_HANDLE, effect: LPCWSTR) -> EFFECT_HANDLE,
602
603    /// オブジェクトからエフェクト一覧を取得します
604    /// object : オブジェクトのハンドル
605    /// effect_list : エフェクトのハンドルリストの格納先へのポインタ
606    /// effect_num : エフェクトのハンドルリストの格納先の数
607    /// 戻り値 : 取得出来たエフェクトハンドルの数 (取得出来ない場合は0を返却)
608    /// effect_listがnullptrの場合は所有しているエフェクトの数を返却します
609    /// ※エフェクトハンドルはエフェクトが破棄されるかコールバック処理の終了まで有効
610    pub get_effect_list: unsafe extern "C" fn(
611        object: OBJECT_HANDLE,
612        effect_list: *mut EFFECT_HANDLE,
613        effect_num: i32,
614    ) -> i32,
615
616    /// エフェクト名を取得します
617    /// effect : エフェクトのハンドル
618    /// 戻り値 : エフェクト名へのポインタ (取得出来ない場合はnullptrを返却)
619    pub get_effect_name: unsafe extern "C" fn(effect: EFFECT_HANDLE) -> LPCWSTR,
620
621    /// エフェクトの有効・無効状態を取得します
622    /// effect : エフェクトのハンドル
623    /// 戻り値 : エフェクトが有効状態の場合はtrue
624    pub get_effect_enable: unsafe extern "C" fn(effect: EFFECT_HANDLE) -> bool,
625
626    /// エフェクトの有効・無効状態を設定します (call_read_section利用不可)
627    /// effect : エフェクトのハンドル
628    /// enable : 設定するエフェクトの有効・無効状態
629    /// ※エフェクトが出力項目(標準描画等)の場合は変更出来ません (常に有効状態)
630    pub set_effect_enable: unsafe extern "C" fn(effect: EFFECT_HANDLE, enable: bool),
631
632    /// エフェクトのロック状態を取得します
633    /// effect : エフェクトのハンドル
634    /// 戻り値 : エフェクトがロック状態の場合はtrue
635    pub get_effect_lock: unsafe extern "C" fn(effect: EFFECT_HANDLE) -> bool,
636
637    /// エフェクトのロック状態を設定します (call_read_section利用不可)
638    /// effect : エフェクトのハンドル
639    /// enable : 設定するエフェクトのロック状態
640    /// ※エフェクトが音声の場合は変更出来ません
641    /// ※エフェクトが出力項目(標準描画等)の場合は変更出来ません (入力項目に同期)
642    pub set_effect_lock: unsafe extern "C" fn(effect: EFFECT_HANDLE, lock: bool),
643
644    /// エフェクトの設定項目の値を文字列で取得します
645    /// effect : エフェクトのハンドル
646    /// item : 対象の設定項目の名称 (エイリアスファイルのキーの名称)
647    /// 戻り値 : 取得した設定値(UTF8)へのポインタ (取得出来ない場合はnullptrを返却)
648    /// エイリアスファイルの設定値と同じフォーマットになります
649    /// ※次に同一スレッドで文字列返却の関数を使うかコールバック処理の終了まで有効
650    pub get_effect_item_value: unsafe extern "C" fn(effect: EFFECT_HANDLE, item: LPCWSTR) -> LPCSTR,
651
652    /// エフェクトの設定項目の値を文字列で設定します (call_read_section利用不可)
653    /// effect : エフェクトのハンドル
654    /// item : 対象の設定項目の名称 (エイリアスファイルのキーの名称)
655    /// value : 設定値(UTF8)
656    /// エイリアスファイルの設定値と同じフォーマットになります
657    /// 戻り値 : 設定出来た場合はtrue (対象が見つからない場合は失敗します)
658    pub set_effect_item_value:
659        unsafe extern "C" fn(effect: EFFECT_HANDLE, item: LPCWSTR, value: LPCSTR) -> bool,
660
661    /// 指定フレーム位置でのエフェクトのトラックバー項目の値を取得します
662    /// ※フィルタプラグインから呼び出した場合は処理対象のシーンのオブジェクトのみ取得出来ます
663    /// effect : エフェクトのハンドル
664    /// item : 対象のトラックバー項目の名称 (エイリアスファイルのキーの名称)
665    /// frame : 取得対象のフレーム番号 ※小数部でフレーム間の位置を指定出来ます
666    /// value : トラックバー項目の値の格納先へのポインタ
667    /// 戻り値 : 設定出来た場合はtrue (対象が見つからない場合は失敗します)
668    pub get_effect_track_value: unsafe extern "C" fn(
669        effect: EFFECT_HANDLE,
670        item: LPCWSTR,
671        frame: f64,
672        value: *mut f64,
673    ) -> bool,
674
675    /// 指定フレーム位置でのエフェクトのチェックボックス(セクション毎含む)項目の値を取得します
676    /// effect : エフェクトのハンドル
677    /// item : 対象のチェックボックス項目の名称 (エイリアスファイルのキーの名称)
678    /// frame : 取得対象のフレーム番号 ※セクション毎チェックボックスの場合に利用
679    /// value : チェックボックス項目の値の格納先へのポインタ
680    /// 戻り値 : 設定出来た場合はtrue (対象が見つからない場合は失敗します)
681    pub get_effect_check_value: unsafe extern "C" fn(
682        effect: EFFECT_HANDLE,
683        item: LPCWSTR,
684        frame: i32,
685        value: *mut bool,
686    ) -> bool,
687
688    /// エフェクトのトラックバー項目の情報を取得します
689    /// effect : エフェクトのハンドル
690    /// item : 対象のトラックバー項目の名称 (エイリアスファイルのキーの名称)
691    /// info : トラックバー情報の格納先へのポインタ
692    /// info_size : トラックバー情報の格納先のサイズ ※TRACK_INFOと異なる場合はサイズ分のみ取得されます
693    /// 戻り値 : 取得出来た場合はtrue (対象が見つからない場合は失敗します)
694    pub get_effect_track_info: unsafe extern "C" fn(
695        effect: EFFECT_HANDLE,
696        item: LPCWSTR,
697        info: *mut TRACK_INFO,
698        info_size: i32,
699    ) -> bool,
700
701    /// グリッド(BPM)のBPM情報一覧を取得します
702    /// bpm_list : BPM情報リストの格納先へのポインタ
703    /// bpm_num : BPM情報リストの格納先の数
704    /// bpm_size : BPM情報構造体のサイズ ※BPM_INFOと異なる場合はサイズ分のみ取得されます
705    /// 戻り値 : 取得出来たBPM情報の数
706    /// bpm_listがnullptrの場合はグリッド(BPM)に設定されているBPM情報の数を返却します
707    pub get_grid_bpm_list:
708        unsafe extern "C" fn(bpm_list: *mut BPM_INFO, bpm_num: i32, bpm_size: i32) -> i32,
709
710    /// グリッド(BPM)のBPM情報一覧を設定します (call_read_section利用不可)
711    /// bpm_list : 設定するBPM情報リストへのポインタ
712    /// bpm_num : 設定するBPM情報リストの要素数
713    /// bpm_size : BPM情報構造体のサイズ ※BPM_INFOと異なる場合はサイズ分のみ設定されます
714    pub set_grid_bpm_list:
715        unsafe extern "C" fn(bpm_list: *mut BPM_INFO, bpm_num: i32, bpm_size: i32),
716
717    /// オブジェクトにエフェクトを追加します (call_read_section利用不可)
718    /// object : エフェクトを追加するオブジェクトのハンドル
719    /// effect : 追加するエフェクト名 (エイリアスファイルのeffect.nameの値)
720    /// : ※エフェクトが入出力項目(図形や標準描画等)の場合は差し替えになります
721    /// 戻り値 : 追加したエフェクトのハンドル (追加出来ない場合はnullptrを返却)
722    /// ※エフェクトハンドルはエフェクトが破棄されるかコールバック処理の終了まで有効
723    pub create_effect:
724        unsafe extern "C" fn(object: OBJECT_HANDLE, effect: LPCWSTR) -> EFFECT_HANDLE,
725
726    /// オブジェクトからエフェクトを削除します (call_read_section利用不可)
727    /// object : エフェクトを削除するオブジェクトのハンドル
728    /// effect : 削除するエフェクトのハンドル
729    /// 戻り値 : 削除出来た場合はtrue
730    pub delete_effect: unsafe extern "C" fn(object: OBJECT_HANDLE, effect: EFFECT_HANDLE) -> bool,
731
732    /// オブジェクトに中間点(区間)を追加します (call_read_section利用不可)
733    /// object : 中間点を追加するオブジェクトのハンドル
734    /// frame : 中間点を追加するフレーム番号
735    /// 戻り値 : 追加出来た場合はtrue
736    pub create_object_section: unsafe extern "C" fn(object: OBJECT_HANDLE, frame: i32) -> bool,
737
738    /// オブジェクトの中間点(区間)を削除します (call_read_section利用不可)
739    /// object : 中間点を削除するオブジェクトのハンドル
740    /// section : 削除する中間点の区間の番号 (開始位置が中間点の区間番号)
741    /// 戻り値 : 削除出来た場合はtrue
742    pub delete_object_section: unsafe extern "C" fn(object: OBJECT_HANDLE, section: i32) -> bool,
743
744    /// オブジェクトの区間の開始位置を移動します (call_read_section利用不可)
745    /// ※移動する区間番号(section)が区間数(最終区間+1)の場合は終了点を移動します
746    /// object : 区間を移動するオブジェクトのハンドル
747    /// section : 移動する区間の番号 (0〜区間数の値)
748    /// frame : 移動先のフレーム番号 ※区間を跨ぐ移動は出来ません
749    /// 戻り値 : 移動出来た場合はtrue
750    pub move_object_section:
751        unsafe extern "C" fn(object: OBJECT_HANDLE, section: i32, frame: i32) -> bool,
752
753    /// エフェクトの順序を移動します (call_read_section利用不可)
754    /// ※エフェクト種別がフィルタ効果の場合に順序を移動出来ます
755    /// object : エフェクトの順序を移動するオブジェクトのハンドル
756    /// effect : 順序を移動するエフェクトのハンドル
757    /// index : 移動目標の順序のインデックス
758    /// 戻り値 : 移動処理後の順序のインデックス (対象が見つからない場合は-1を返却)
759    pub move_effect:
760        unsafe extern "C" fn(object: OBJECT_HANDLE, effect: EFFECT_HANDLE, index: i32) -> i32,
761
762    /// エフェクトの汎用データ項目の値を取得します
763    /// effect : エフェクトのハンドル
764    /// item : 対象の設定項目の名称 (エイリアスファイルのキーの名称)
765    /// data : 汎用データの格納先へのポインタ
766    /// size : 汎用データの格納先のサイズ ※実際のサイズと異なる場合はサイズ分のみ取得されます
767    /// 戻り値 : 取得出来た汎用データのサイズ (取得出来ない場合は0を返却)
768    /// dataがnullptrの場合は汎用データのサイズを返却します
769    pub get_effect_data_value: unsafe extern "C" fn(
770        effect: EFFECT_HANDLE,
771        item: LPCWSTR,
772        data: *mut c_void,
773        size: i32,
774    ) -> i32,
775
776    /// エフェクトの汎用データ項目の値を設定します (call_read_section利用不可)
777    /// effect : エフェクトのハンドル
778    /// item : 対象の設定項目の名称 (エイリアスファイルのキーの名称)
779    /// data : 設定する汎用データへのポインタ
780    /// size : 設定する汎用データのサイズ
781    /// 戻り値 : 設定出来た場合はtrue (対象が見つからない場合は失敗します)
782    pub set_effect_data_value: unsafe extern "C" fn(
783        effect: EFFECT_HANDLE,
784        item: LPCWSTR,
785        data: *mut c_void,
786        size: i32,
787    ) -> bool,
788
789    /// 編集データを編集済み状態に設定する ※通常は自動的に設定されます
790    pub set_edited_state: unsafe extern "C" fn(),
791
792    /// マークされているフレームの一覧を取得します
793    /// frame_list : フレーム番号リストの格納先へのポインタ
794    /// frame_num : フレーム番号リストの格納先の数
795    /// 戻り値 : 取得出来たフレーム番号の数
796    /// frame_listがnullptrの場合はマークされているフレームの数を返却します
797    pub get_mark_frame_list: unsafe extern "C" fn(frame_list: *mut i32, frame_num: i32) -> i32,
798
799    /// 指定フレームのマークのメモを取得します
800    /// frame : マークのメモを取得するフレームの番号
801    /// 戻り値 : マークのメモへのポインタ (取得出来ない場合はnullptrを返却)
802    /// ※マークを編集するかコールバック処理の終了まで有効
803    pub get_mark_frame_memo: unsafe extern "C" fn(frame: i32) -> LPCWSTR,
804
805    /// 指定フレームをマークします (call_read_section利用不可)
806    /// 既にマークされている場合はメモを更新します
807    /// frame : マークを設定するフレームの番号
808    /// memo : マークのメモ (nullptrを指定すると空を設定します)
809    pub set_mark_frame: unsafe extern "C" fn(frame: i32, memo: LPCWSTR),
810
811    /// 指定フレームのマークを解除します (call_read_section利用不可)
812    /// frame : マークを解除するフレームの番号
813    pub clear_mark_frame: unsafe extern "C" fn(frame: i32),
814
815    /// 指定フレームのマークを移動します (call_read_section利用不可)
816    /// frame : マークを移動するフレームの番号
817    /// frame_to : マークの移動先のフレームの番号
818    /// 戻り値 : 移動定出来た場合はtrue (移動元がマーク未設定、移動先がマーク済みの場合は失敗します)
819    pub move_mark_frame: unsafe extern "C" fn(frame: i32, frame_to: i32) -> bool,
820
821    /// 指定のパレットの情報を設定します (call_read_section利用不可)
822    /// ※パレットファイルの保存をします
823    /// name : パレット名
824    /// info : パレット情報へのポインタ
825    /// info_size : パレット情報のサイズ ※PALETTE_INFOのサイズ
826    /// 戻り値 : 設定出来た場合はtrue (対象が見つからない場合は失敗します)
827    pub set_palette_info:
828        unsafe extern "C" fn(name: LPCWSTR, info: *mut PALETTE_INFO, info_size: i32) -> bool,
829
830    /// 指定のオブジェクトフラグの状態を取得します
831    /// object : フラグを取得するオブジェクトのハンドル
832    /// type : オブジェクトフラグの種別
833    /// 戻り値 : フラグが有効か? (取得出来ない場合はfalseを返却)
834    pub get_object_flag:
835        unsafe extern "C" fn(object: OBJECT_HANDLE, r#type: OBJECT_FLAG_TYPE) -> bool,
836
837    /// 指定のオブジェクトフラグの状態を設定します (call_read_section利用不可)
838    /// object : フラグを設定するオブジェクトのハンドル
839    /// type : オブジェクトフラグの種別
840    /// flag : フラグの状態
841    pub set_object_flag:
842        unsafe extern "C" fn(object: OBJECT_HANDLE, r#type: OBJECT_FLAG_TYPE, flag: bool),
843
844    /// オブジェクトIDを取得します
845    /// object : IDを取得するオブジェクトのハンドル
846    /// 戻り値 : オブジェクトID (取得出来ない場合は0を返却)
847    pub get_object_id: unsafe extern "C" fn(object: OBJECT_HANDLE) -> i64,
848
849    /// エフェクトIDを取得します
850    /// effect : IDを取得するエフェクトのハンドル
851    /// 戻り値 : エフェクトID (取得出来ない場合は0を返却)
852    pub get_effect_id: unsafe extern "C" fn(effect: EFFECT_HANDLE) -> i64,
853}
854
855/// 編集ハンドル構造体
856/// get_host_app_window()以外はRegisterPlugin処理内から利用出来ません
857#[repr(C)]
858pub struct EDIT_HANDLE {
859    /// プロジェクトデータの編集をする為のコールバック関数(func_proc_edit)を呼び出します
860    /// 編集情報を排他制御する為に更新ロック状態のコールバック関数内で編集処理をする形になります
861    /// コールバック関数内で編集したオブジェクトは纏めてUndoに登録されます
862    /// コールバック関数はメインスレッドから呼ばれます
863    /// func_proc_edit : 編集処理のコールバック関数
864    /// 戻り値 : trueなら成功
865    /// 編集が出来ない場合(出力中等)に失敗します
866    pub call_edit_section:
867        unsafe extern "C" fn(func_proc_edit: unsafe extern "C" fn(edit: *mut EDIT_SECTION)) -> bool,
868
869    /// call_edit_section()に引数paramを渡せるようにした関数です
870    /// param : 任意のユーザーデータのポインタ
871    pub call_edit_section_param: unsafe extern "C" fn(
872        param: *mut c_void,
873        func_proc_edit: unsafe extern "C" fn(param: *mut c_void, edit: *mut EDIT_SECTION),
874    ) -> bool,
875
876    /// 編集情報を取得します
877    /// 編集情報を排他制御する為に参照ロックします。※同一スレッドで既にロック状態の場合はそのまま取得します。
878    /// info : 編集情報の格納先へのポインタ
879    /// info_size : 編集情報の格納先のサイズ ※EDIT_INFOと異なる場合はサイズ分のみ取得されます
880    pub get_edit_info: unsafe extern "C" fn(info: *mut EDIT_INFO, info_size: i32),
881
882    /// ホストアプリケーションを再起動します
883    pub restart_host_app: unsafe extern "C" fn(),
884
885    /// エフェクト名の一覧をコールバック関数(func_proc_enum_effect)で取得します
886    /// param : 任意のユーザーデータのポインタ
887    /// func_proc_enum_effect : エフェクト名の取得処理のコールバック関数
888    pub enum_effect_name: unsafe extern "C" fn(
889        param: *mut c_void,
890        func_proc_enum_effect: unsafe extern "C" fn(
891            param: *mut c_void,
892            name: LPCWSTR,
893            r#type: i32,
894            flag: i32,
895        ),
896    ),
897
898    /// モジュール情報の一覧をコールバック関数(func_proc_enum_module)で取得します
899    /// param : 任意のユーザーデータのポインタ
900    /// func_proc_enum_module : モジュール情報の取得処理のコールバック関数
901    pub enum_module_info: unsafe extern "C" fn(
902        param: *mut c_void,
903        func_proc_enum_module: unsafe extern "C" fn(param: *mut c_void, info: *mut MODULE_INFO),
904    ),
905
906    /// ホストアプリケーションのメインウィンドウのハンドルを取得します
907    pub get_host_app_window: unsafe extern "C" fn() -> HWND,
908
909    /// 編集状態を取得します
910    pub get_edit_state: unsafe extern "C" fn() -> i32,
911
912    /// プロジェクトデータを参照する為のコールバック関数(func_proc_read_section)を呼び出します
913    /// 参照中にデータが更新されないように参照ロック状態のコールバック関数内で処理をする形になります
914    /// EDIT_SECTIONの更新系の関数等は利用出来ません ※EDIT_SECTIONの各項目に記載しています
915    /// コールバック関数は呼び出し元と同じスレッドで呼ばれます
916    /// func_proc_read_section : コールバック関数
917    /// 戻り値 : trueなら成功
918    /// 参照が出来ない場合(出力中等)に失敗します
919    pub call_read_section: unsafe extern "C" fn(
920        func_proc_read_section: unsafe extern "C" fn(edit: *mut EDIT_SECTION),
921    ) -> bool,
922
923    /// call_read_section()に引数paramを渡せるようにした関数です
924    /// param : 任意のユーザーデータのポインタ
925    pub call_read_section_param: unsafe extern "C" fn(
926        param: *mut c_void,
927        func_proc_read_section: unsafe extern "C" fn(param: *mut c_void, edit: *mut EDIT_SECTION),
928    ) -> bool,
929
930    /// エフェクトの設定項目の一覧をコールバック関数(func_proc_enum_effect_item)で取得します
931    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
932    /// param : 任意のユーザーデータのポインタ
933    /// func_proc_enum_effect_item : エフェクトの設定項目の取得処理のコールバック関数
934    /// 戻り値 : 取得出来た場合はtrue (対象が見つからない場合は失敗します)
935    pub enum_effect_item: unsafe extern "C" fn(
936        effect: LPCWSTR,
937        param: *mut c_void,
938        func_proc_enum_effect_item: unsafe extern "C" fn(
939            param: *mut c_void,
940            name: LPCWSTR,
941            r#type: i32,
942        ),
943    ) -> bool,
944
945    /// 現在のシーンの映像のレンダリングをします
946    /// この関数はレンダリングのタスクを追加するのみで完了します
947    /// レンダリング完了時はイベント通知スレッドからコールバック関数が呼ばれます
948    /// frame : レンダリング対象のフレーム番号
949    /// param : 任意のユーザーデータのポインタ
950    /// func_proc_rendering_video : レンダリング完了時に呼ばれるコールバック関数
951    /// buffer : レンダリングした画像データへのポインタ ※PIXEL_RGBA形式
952    /// width,height : レンダリングした画像サイズ
953    /// pitch : レンダリングした画像データの横1ラインのバイト数
954    /// 戻り値 : レンダリング要求が成功した場合はtrue (出力中等は失敗します)
955    pub rendering_scene_video: unsafe extern "C" fn(
956        frame: i32,
957        param: *mut c_void,
958        func_proc_rendering_video: unsafe extern "C" fn(
959            param: *mut c_void,
960            frame: i32,
961            buffer: *const c_void,
962            width: i32,
963            height: i32,
964            pitch: i32,
965        ),
966    ) -> bool,
967
968    /// 現在のシーンの音声のレンダリングをします
969    /// この関数はレンダリングのタスクを追加するのみで完了します
970    /// レンダリング完了時はイベント通知スレッドからコールバック関数が呼ばれます
971    /// frame : レンダリング対象のフレーム番号
972    /// param : 任意のユーザーデータのポインタ
973    /// func_proc_rendering_audio : レンダリング完了時に呼ばれるコールバック関数
974    /// buffer0 : レンダリングした音声データ(左チャンネル)へのポインタ ※PCM(float)32bit形式
975    /// buffer1 : レンダリングした音声データ(右チャンネル)へのポインタ ※PCM(float)32bit形式
976    /// sample_num : レンダリングした音声のサンプル数
977    /// 戻り値 : レンダリング要求が成功した場合はtrue (出力中等は失敗します)
978    pub rendering_scene_audio: unsafe extern "C" fn(
979        frame: i32,
980        param: *mut c_void,
981        func_proc_rendering_audio: unsafe extern "C" fn(
982            param: *mut c_void,
983            frame: i32,
984            buffer0: *const f32,
985            buffer1: *const f32,
986            sample_num: i32,
987        ),
988    ) -> bool,
989
990    /// レンダリング中のタスクが全て完了するまで待機します
991    /// ※参照ロック、編集ロック状態で呼び出すとデッドロックする可能性があります
992    pub wait_rendering_task: unsafe extern "C" fn(),
993
994    /// フォント名の一覧をコールバック関数(func_proc_enum_font)で取得します
995    /// param : 任意のユーザーデータのポインタ
996    /// func_proc_enum_font : フォント名の取得処理のコールバック関数
997    pub enum_font_name: unsafe extern "C" fn(
998        param: *mut c_void,
999        func_proc_enum_font: unsafe extern "C" fn(param: *mut c_void, name: LPCWSTR),
1000    ),
1001
1002    /// パレット名の一覧をコールバック関数(func_proc_enum_palette)で取得します
1003    /// パレット情報を排他制御する為に参照ロックします。※同一スレッドで既にロック状態の場合はそのまま取得します。
1004    /// param : 任意のユーザーデータのポインタ
1005    /// func_proc_enum_palette : パレット名の取得処理のコールバック関数
1006    pub enum_palette_name: unsafe extern "C" fn(
1007        param: *mut c_void,
1008        func_proc_enum_palette: unsafe extern "C" fn(param: *mut c_void, name: LPCWSTR),
1009    ),
1010
1011    /// 指定のオブジェクトの映像のレンダリングをします
1012    /// この関数はレンダリングのタスクを追加するのみで完了します
1013    /// レンダリング完了時はイベント通知スレッドからコールバック関数が呼ばれます
1014    /// object : レンダリング対象のオブジェクトのハンドル
1015    /// frame : レンダリング対象のフレーム番号
1016    /// apply_effect : 追加のフィルタ効果を反映するか? ※グループ制御の追加効果は反映されません
1017    /// param : 任意のユーザーデータのポインタ
1018    /// func_proc_rendering_video : レンダリング完了時に呼ばれるコールバック関数
1019    /// buffer : レンダリングした画像データへのポインタ ※PIXEL_RGBA形式
1020    /// width,height : レンダリングした画像サイズ
1021    /// pitch : レンダリングした画像データの横1ラインのバイト数
1022    /// 戻り値 : レンダリング要求が成功した場合はtrue (対象外のオブジェクトや出力中等は失敗します)
1023    pub rendering_object_video: unsafe extern "C" fn(
1024        object: OBJECT_HANDLE,
1025        frame: i32,
1026        apply_effect: bool,
1027        param: *mut c_void,
1028        func_proc_rendering_video: unsafe extern "C" fn(
1029            param: *mut c_void,
1030            frame: i32,
1031            buffer: *const c_void,
1032            width: i32,
1033            height: i32,
1034            pitch: i32,
1035        ),
1036    ) -> bool,
1037
1038    /// 指定のオブジェクトの音声のレンダリングをします
1039    /// この関数はレンダリングのタスクを追加するのみで完了します
1040    /// レンダリング完了時はイベント通知スレッドからコールバック関数が呼ばれます
1041    /// object : レンダリング対象のオブジェクトのハンドル
1042    /// frame : レンダリング対象のフレーム番号
1043    /// apply_effect : 追加のフィルタ効果を反映するか? ※グループ制御の追加効果は反映されません
1044    /// param : 任意のユーザーデータのポインタ
1045    /// func_proc_rendering_audio : レンダリング完了時に呼ばれるコールバック関数
1046    /// buffer0 : レンダリングした音声データ(左チャンネル)へのポインタ ※PCM(float)32bit形式
1047    /// buffer1 : レンダリングした音声データ(右チャンネル)へのポインタ ※PCM(float)32bit形式
1048    /// sample_num : レンダリングした音声のサンプル数
1049    /// 戻り値 : レンダリング要求が成功した場合はtrue (出力中等は失敗します)
1050    pub rendering_object_audio: unsafe extern "C" fn(
1051        object: OBJECT_HANDLE,
1052        frame: i32,
1053        apply_effect: bool,
1054        param: *mut c_void,
1055        func_proc_rendering_audio: unsafe extern "C" fn(
1056            param: *mut c_void,
1057            frame: i32,
1058            buffer0: *const f32,
1059            buffer1: *const f32,
1060            sample_num: i32,
1061        ),
1062    ) -> bool,
1063
1064    /// 指定の設定項目が所属するグループの所属アイテム名を取得します
1065    /// グループ項目を直接指定することも出来ます (item_indexにはnullptrを指定します)
1066    /// effect : 対象のエフェクト名 (エイリアスファイルのeffect.nameの値)
1067    /// item : 対象の設定項目の名称 (エイリアスファイルのキーの名称)
1068    /// item_names : グループの所属アイテム名の格納先へのポインタ
1069    /// item_num : グループの所属アイテム名の格納先の数
1070    /// item_index : 対象の設定項目のグループ内のインデックスの格納先へのポインタ (nullptrの場合は格納しません)
1071    /// 戻り値 : 取得出来た所属アイテム名の数 (グループに所属していない場合は0を返却)
1072    /// item_namesがnullptrの場合は所属アイテム数を返却します
1073    pub get_effect_item_group_names: unsafe extern "C" fn(
1074        effect: LPCWSTR,
1075        item: LPCWSTR,
1076        item_names: *mut LPCWSTR,
1077        item_num: i32,
1078        item_index: *mut i32,
1079    ) -> i32,
1080
1081    /// シーン名の一覧をコールバック関数(func_proc_enum_scene)で取得します
1082    /// シーン情報を排他制御する為に参照ロックします。※同一スレッドで既にロック状態の場合はそのまま取得します。
1083    /// param : 任意のユーザーデータのポインタ
1084    /// func_proc_enum_scene : シーン名の取得処理のコールバック関数
1085    pub enum_scene_name: unsafe extern "C" fn(
1086        param: *mut c_void,
1087        func_proc_enum_scene: unsafe extern "C" fn(param: *mut c_void, name: LPCWSTR, scene_id: i32),
1088    ),
1089
1090    /// 指定のシーンに切り替えます
1091    /// 参照ロック、編集ロック状態では利用出来ません
1092    /// scene_id : シーンのID
1093    /// 戻り値 : 成功した場合はtrue (シーンが存在しない場合や出力中等は失敗します)
1094    pub select_scene: unsafe extern "C" fn(scene_id: i32) -> bool,
1095
1096    /// シーンを作成します (作成したシーンに切り替わります)
1097    /// 参照ロック、編集ロック状態では利用出来ません
1098    /// name : シーン名
1099    /// label : シーンのラベル (nullptrか空文字を指定するとラベル無し)
1100    /// width, height : シーンの解像度
1101    /// rate, scale : シーンのフレームレート
1102    /// sample_rate : シーンのサンプリングレート
1103    /// background : シーンの背景色 (background.aが255以外の場合は透明色)
1104    /// 戻り値 : 成功した場合はtrue (出力中等は失敗します)
1105    pub create_scene: unsafe extern "C" fn(
1106        name: LPCWSTR,
1107        label: LPCWSTR,
1108        width: i32,
1109        height: i32,
1110        rate: i32,
1111        scale: i32,
1112        sample_rate: i32,
1113        background: EDIT_INFO_COLOR,
1114    ) -> bool,
1115
1116    /// プロジェクトを新規作成します
1117    /// 参照ロック、編集ロック状態では利用出来ません
1118    /// width, height : シーンの解像度
1119    /// rate, scale : シーンのフレームレート
1120    /// sample_rate : シーンのサンプリングレート
1121    /// background : シーンの背景色 (background.aが255以外の場合は透明色)
1122    /// show_confirm : 現在のプロジェクトの保存・キャンセルの確認ダイアログを表示する
1123    /// 戻り値 : 成功した場合はtrue (出力中等は失敗します)
1124    pub create_project: unsafe extern "C" fn(
1125        width: i32,
1126        height: i32,
1127        rate: i32,
1128        scale: i32,
1129        sample_rate: i32,
1130        background: EDIT_INFO_COLOR,
1131        show_confirm: bool,
1132    ) -> bool,
1133
1134    /// 指定のプロジェクトファイルを開きます
1135    /// 参照ロック、編集ロック状態では利用出来ません
1136    /// file : プロジェクトファイルのパス
1137    /// show_confirm : 現在のプロジェクトの保存・キャンセルの確認ダイアログを表示する
1138    /// 戻り値 : 成功した場合はtrue (出力中等は失敗します)
1139    pub open_project_file: unsafe extern "C" fn(file: LPCWSTR, show_confirm: bool) -> bool,
1140
1141    /// 指定のプロジェクトファイルへ保存します (自動バックアップと同じ処理で保存されます)
1142    /// 参照ロック、編集ロック状態では利用出来ません
1143    /// file : プロジェクトファイルのパス
1144    /// 戻り値 : 成功した場合はtrue (出力中等は失敗します)
1145    pub save_project_file: unsafe extern "C" fn(file: LPCWSTR) -> bool,
1146
1147    /// 現在のシーンを出力プラグインでファイル出力します
1148    /// この関数はファイル出力を開始するのみで完了します
1149    /// 参照ロック、編集ロック状態では利用出来ません
1150    /// file : 出力ファイルのパス
1151    /// output_plugin : 出力プラグイン名
1152    /// func_project_config : 出力開始時にプロジェクトのファイル出力設定を反映させるコールバック関数 (nullptrなら呼ばれません)
1153    /// ※出力プラグインのFLAG_PROJECT_CONFIGが有効の場合にfunc_save_project_config()と同じ設定をすることで反映出来ます
1154    /// 戻り値 : 成功した場合はtrue (出力中等は失敗します)
1155    pub output_file: unsafe extern "C" fn(
1156        file: LPCWSTR,
1157        output_plugin: LPCWSTR,
1158        param: *mut c_void,
1159        func_project_config: Option<
1160            unsafe extern "C" fn(param: *mut c_void, project: *mut PROJECT_FILE),
1161        >,
1162    ) -> bool,
1163}
1164
1165impl EDIT_HANDLE {
1166    /// エフェクト種別 ※今後追加される可能性があります
1167    /// フィルタ効果
1168    pub const EFFECT_TYPE_FILTER: i32 = 1;
1169    /// メディア入力
1170    pub const EFFECT_TYPE_INPUT: i32 = 2;
1171    /// シーンチェンジ
1172    pub const EFFECT_TYPE_TRANSITION: i32 = 3;
1173    /// オブジェクト制御
1174    pub const EFFECT_TYPE_CONTROL: i32 = 4;
1175    /// メディア出力
1176    /// エフェクトフラグ ※今後追加される可能性があります
1177    pub const EFFECT_TYPE_OUTPUT: i32 = 5;
1178    /// 画像をサポート
1179    pub const EFFECT_FLAG_VIDEO: i32 = 1;
1180    /// 音声をサポート
1181    pub const EFFECT_FLAG_AUDIO: i32 = 2;
1182    /// フィルタオブジェクトをサポート
1183    pub const EFFECT_FLAG_FILTER: i32 = 4;
1184    /// カメラ効果をサポート
1185    pub const EFFECT_FLAG_CAMERA: i32 = 8;
1186    /// 編集中
1187    pub const EDIT_STATE_EDIT: i32 = 0;
1188    /// プレビュー再生中
1189    pub const EDIT_STATE_PLAY: i32 = 1;
1190    /// ファイル出力中
1191    pub const EDIT_STATE_SAVE: i32 = 2;
1192    /// 設定項目種別 ※今後追加される可能性があります
1193    /// 整数
1194    pub const EFFECT_ITEM_TYPE_INTEGER: i32 = 1;
1195    /// 数値(トラックバー)
1196    pub const EFFECT_ITEM_TYPE_NUMBER: i32 = 2;
1197    /// チェックボックス
1198    pub const EFFECT_ITEM_TYPE_CHECK: i32 = 3;
1199    /// テキスト
1200    pub const EFFECT_ITEM_TYPE_TEXT: i32 = 4;
1201    /// 文字列
1202    pub const EFFECT_ITEM_TYPE_STRING: i32 = 5;
1203    /// ファイル
1204    pub const EFFECT_ITEM_TYPE_FILE: i32 = 6;
1205    /// 色
1206    pub const EFFECT_ITEM_TYPE_COLOR: i32 = 7;
1207    /// リスト選択
1208    pub const EFFECT_ITEM_TYPE_SELECT: i32 = 8;
1209    /// シーン
1210    pub const EFFECT_ITEM_TYPE_SCENE: i32 = 9;
1211    /// レイヤー範囲
1212    pub const EFFECT_ITEM_TYPE_RANGE: i32 = 10;
1213    /// リストと文字の複合
1214    pub const EFFECT_ITEM_TYPE_COMBO: i32 = 11;
1215    /// マスク
1216    pub const EFFECT_ITEM_TYPE_MASK: i32 = 12;
1217    /// フォント
1218    pub const EFFECT_ITEM_TYPE_FONT: i32 = 13;
1219    /// 図形
1220    pub const EFFECT_ITEM_TYPE_FIGURE: i32 = 14;
1221    /// データ
1222    pub const EFFECT_ITEM_TYPE_DATA: i32 = 15;
1223    /// フォルダ
1224    pub const EFFECT_ITEM_TYPE_FOLDER: i32 = 16;
1225    /// 数値(トラックバー)グループ
1226    pub const EFFECT_ITEM_TYPE_NUMBER_GROUP: i32 = 17;
1227    /// 設定グループ(明示的なグループのみ) ※設定値無し
1228    pub const EFFECT_ITEM_TYPE_GROUP: i32 = 18;
1229    /// セパレーター ※設定値無し
1230    pub const EFFECT_ITEM_TYPE_SEPARATOR: i32 = 19;
1231}
1232
1233/// プロジェクトファイル構造体
1234/// プロジェクトファイルのロード、セーブのコールバックや編集のコールバック関数内で利用出来ます
1235/// プロジェクトの保存データはプラグイン毎のデータ領域になります
1236#[repr(C)]
1237pub struct PROJECT_FILE {
1238    /// プロジェクトに保存されている文字列(UTF-8)を取得します
1239    /// key : キー名(UTF-8)
1240    /// 戻り値 : 取得した文字列へのポインタ (未設定の場合はnullptr)
1241    /// ※コールバック処理の終了まで有効
1242    pub get_param_string: unsafe extern "C" fn(key: LPCSTR) -> LPCSTR,
1243    /// プロジェクトに文字列(UTF-8)を保存します
1244    /// key : キー名(UTF-8)
1245    /// value : 保存する文字列(UTF-8)
1246    pub set_param_string: unsafe extern "C" fn(key: LPCSTR, value: LPCSTR),
1247    /// プロジェクトに保存されているバイナリデータを取得します
1248    /// key : キー名(UTF-8)
1249    /// data : 取得するデータの格納先へのポインタ
1250    /// size : 取得するデータのサイズ (保存されているサイズと異なる場合は失敗します)
1251    /// 戻り値 : 正しく取得出来た場合はtrue
1252    pub get_param_binary: unsafe extern "C" fn(key: LPCSTR, data: *mut c_void, size: i32) -> bool,
1253    /// プロジェクトにバイナリデータを保存します
1254    /// key : キー名(UTF-8)
1255    /// data : 保存するデータへのポインタ
1256    /// size : 保存するデータのサイズ (4096バイト以下)
1257    pub set_param_binary: unsafe extern "C" fn(key: LPCSTR, data: *mut c_void, size: i32),
1258    /// プロジェクトに保存されているデータを全て削除します
1259    pub clear_params: unsafe extern "C" fn(),
1260
1261    /// プロジェクトファイルのパスを取得します
1262    /// key : キー名(UTF-8)
1263    /// 戻り値 : プロジェクトファイルパスへのポインタ (ファイルパスは未設定の場合があります)
1264    /// ※コールバック処理の終了まで有効
1265    pub get_project_file_path: unsafe extern "C" fn() -> LPCWSTR,
1266}
1267
1268/// ホストアプリケーション構造体
1269#[repr(C)]
1270pub struct HOST_APP_TABLE {
1271    /// プラグインの情報を設定する
1272    /// information : プラグインの情報
1273    /// ※現在はGetCommonPluginTable()を利用する方法が推奨になります
1274    #[deprecated(note = "現在はGetCommonPluginTable()を利用する方法が推奨になります")]
1275    pub set_plugin_information: unsafe extern "C" fn(information: LPCWSTR),
1276
1277    /// 入力プラグインを登録する
1278    /// input_plugin_table : 入力プラグイン構造体
1279    pub register_input_plugin: unsafe extern "C" fn(input_plugin_table: *mut INPUT_PLUGIN_TABLE),
1280    /// 出力プラグインを登録する
1281    /// output_plugin_table : 出力プラグイン構造体
1282    pub register_output_plugin: unsafe extern "C" fn(output_plugin_table: *mut OUTPUT_PLUGIN_TABLE),
1283    /// フィルタプラグインを登録する
1284    /// filter_plugin_table : フィルタプラグイン構造体
1285    /// ※FLAG_USERDATAを利用する場合は編集リソースが破棄されてからUninitializePlugin()が呼ばれます
1286    pub register_filter_plugin: unsafe extern "C" fn(filter_plugin_table: *mut FILTER_PLUGIN_TABLE),
1287    /// スクリプトモジュールを登録する
1288    /// script_module_table : スクリプトモジュール構造体
1289    pub register_script_module: unsafe extern "C" fn(script_module_table: *mut SCRIPT_MODULE_TABLE),
1290
1291    /// インポートメニューを登録する (ウィンドウメニューのファイルに追加されます)
1292    /// name : インポートメニューの名称
1293    /// func_proc_import : インポートメニュー選択時のコールバック関数
1294    pub register_import_menu: unsafe extern "C" fn(
1295        name: LPCWSTR,
1296        func_proc_import: unsafe extern "C" fn(*mut EDIT_SECTION),
1297    ),
1298    /// エクスポートメニューを登録する (ウィンドウメニューのファイルに追加されます)
1299    /// name : エクスポートメニューの名称
1300    /// func_proc_export : エクスポートメニュー選択時のコールバック関数
1301    pub register_export_menu: unsafe extern "C" fn(
1302        name: LPCWSTR,
1303        func_proc_export: unsafe extern "C" fn(*mut EDIT_SECTION),
1304    ),
1305
1306    /// ウィンドウクライアントを登録する
1307    /// name : ウィンドウの名称
1308    /// hwnd : ウィンドウハンドル
1309    /// ウィンドウにはWS_CHILDが追加され親ウィンドウが設定されます ※WS_POPUPは削除されます
1310    pub register_window_client: unsafe extern "C" fn(name: LPCWSTR, hwnd: HWND),
1311
1312    /// プロジェクトデータ編集用のハンドルを取得します
1313    /// 戻り値 : 編集ハンドル
1314    pub create_edit_handle: unsafe extern "C" fn() -> *mut EDIT_HANDLE,
1315
1316    /// プロジェクトファイルをロードした直後に呼ばれる関数を登録する ※プロジェクトの初期化時にも呼ばれます
1317    /// func_project_load : プロジェクトファイルのロード時のコールバック関数
1318    pub register_project_load_handler:
1319        unsafe extern "C" fn(func_project_load: unsafe extern "C" fn(*mut PROJECT_FILE)),
1320    /// プロジェクトファイルをセーブする直前に呼ばれる関数を登録する
1321    /// func_project_save : プロジェクトファイルのセーブ時のコールバック関数
1322    pub register_project_save_handler:
1323        unsafe extern "C" fn(func_project_save: unsafe extern "C" fn(*mut PROJECT_FILE)),
1324
1325    /// レイヤーメニューを登録する (レイヤー編集でオブジェクト未選択時の右クリックメニューに追加されます)
1326    /// name : レイヤーメニューの名称 ※名称に'\'を入れると表示を複数階層に出来ます
1327    /// func_proc_layer_menu : レイヤーメニュー選択時のコールバック関数
1328    pub register_layer_menu: unsafe extern "C" fn(
1329        name: LPCWSTR,
1330        func_proc_layer_menu: unsafe extern "C" fn(*mut EDIT_SECTION),
1331    ),
1332
1333    /// オブジェクトメニューを登録する (レイヤー編集でオブジェクト選択時の右クリックメニューに追加されます)
1334    /// name : オブジェクトメニューの名称 ※名称に'\'を入れると表示を複数階層に出来ます
1335    /// func_proc_object_menu : オブジェクトメニュー選択時のコールバック関数
1336    pub register_object_menu: unsafe extern "C" fn(
1337        name: LPCWSTR,
1338        func_proc_object_menu: unsafe extern "C" fn(*mut EDIT_SECTION),
1339    ),
1340
1341    /// 設定メニューを登録する
1342    /// 設定メニューの登録後にウィンドウクライアントを登録するとシステムメニューに「設定」が追加されます
1343    /// name : 設定メニューの名称
1344    /// func_config : 設定メニュー選択時のコールバック関数
1345    pub register_config_menu:
1346        unsafe extern "C" fn(name: LPCWSTR, func_config: unsafe extern "C" fn(HWND, HINSTANCE)),
1347
1348    /// 編集メニューを登録する
1349    /// name : 編集メニューの名称 ※名称に'\'を入れると表示を階層に出来ます
1350    /// func_proc_edit_menu : 編集メニュー選択時のコールバック関数
1351    pub register_edit_menu: unsafe extern "C" fn(
1352        name: LPCWSTR,
1353        func_proc_edit_menu: unsafe extern "C" fn(*mut EDIT_SECTION),
1354    ),
1355
1356    /// キャッシュを破棄の操作時に呼ばれる関数を登録する
1357    /// func_proc_clear_cache : キャッシュの破棄時のコールバック関数
1358    pub register_clear_cache_handler:
1359        unsafe extern "C" fn(func_proc_clear_cache: unsafe extern "C" fn(*mut EDIT_SECTION)),
1360
1361    /// シーンを変更した直後に呼ばれる関数を登録する ※シーンの設定情報が更新された時にも呼ばれます
1362    /// func_proc_change_scene : シーン変更時のコールバック関数
1363    pub register_change_scene_handler:
1364        unsafe extern "C" fn(func_proc_change_scene: unsafe extern "C" fn(*mut EDIT_SECTION)),
1365
1366    /// インポートメニューを登録する (ウィンドウメニューのファイルに追加されます)
1367    /// 引数paramを渡して編集セクションにしないでコールバックを呼び出します
1368    /// name : インポートメニューの名称
1369    /// param : 任意のユーザーデータのポインタ
1370    /// func_proc_import : インポートメニュー選択時のコールバック関数
1371    pub register_import_menu_param: unsafe extern "C" fn(
1372        name: LPCWSTR,
1373        param: *mut c_void,
1374        func_proc_import: unsafe extern "C" fn(param: *mut c_void),
1375    ),
1376
1377    /// エクスポートメニューを登録する (ウィンドウメニューのファイルに追加されます)
1378    /// 引数paramを渡して編集セクションにしないでコールバックを呼び出します
1379    /// name : エクスポートメニューの名称
1380    /// param : 任意のユーザーデータのポインタ
1381    /// func_proc_export : エクスポートメニュー選択時のコールバック関数
1382    pub register_export_menu_param: unsafe extern "C" fn(
1383        name: LPCWSTR,
1384        param: *mut c_void,
1385        func_proc_export: unsafe extern "C" fn(param: *mut c_void),
1386    ),
1387
1388    /// レイヤーメニューを登録する (レイヤー編集でオブジェクト未選択時の右クリックメニューに追加されます)
1389    /// 引数paramを渡して編集セクションにしないでコールバックを呼び出します
1390    /// name : レイヤーメニューの名称 ※名称に'\'を入れると表示を複数階層に出来ます
1391    /// param : 任意のユーザーデータのポインタ
1392    /// func_proc_layer_menu : レイヤーメニュー選択時のコールバック関数
1393    pub register_layer_menu_param: unsafe extern "C" fn(
1394        name: LPCWSTR,
1395        param: *mut c_void,
1396        func_proc_layer_menu: unsafe extern "C" fn(param: *mut c_void),
1397    ),
1398
1399    /// オブジェクトメニューを登録する (レイヤー編集でオブジェクト選択時の右クリックメニューに追加されます)
1400    /// 引数paramを渡して編集セクションにしないでコールバックを呼び出します
1401    /// name : オブジェクトメニューの名称 ※名称に'\'を入れると表示を複数階層に出来ます
1402    /// param : 任意のユーザーデータのポインタ
1403    /// func_proc_object_menu : オブジェクトメニュー選択時のコールバック関数
1404    pub register_object_menu_param: unsafe extern "C" fn(
1405        name: LPCWSTR,
1406        param: *mut c_void,
1407        func_proc_object_menu: unsafe extern "C" fn(param: *mut c_void),
1408    ),
1409
1410    /// 編集メニューを登録する
1411    /// 引数paramを渡して編集セクションにしないでコールバックを呼び出します
1412    /// name : 編集メニューの名称 ※名称に'\'を入れると表示を階層に出来ます
1413    /// param : 任意のユーザーデータのポインタ
1414    /// func_proc_edit_menu : 編集メニュー選択時のコールバック関数
1415    pub register_edit_menu_param: unsafe extern "C" fn(
1416        name: LPCWSTR,
1417        param: *mut c_void,
1418        func_proc_edit_menu: unsafe extern "C" fn(param: *mut c_void),
1419    ),
1420
1421    /// ファイルをD&Dした時に呼ばれる関数を登録する
1422    /// name : ドラッグ時のツールチップや入力プラグインの設定で表示する名称
1423    /// filefilter : D&Dに対応するファイルフィルタ
1424    /// func_proc_file_drop : ファイルをD&Dした時のコールバック関数
1425    pub register_file_drop_handler: unsafe extern "C" fn(
1426        name: LPCWSTR,
1427        filefilter: LPCWSTR,
1428        func_proc_file_drop: unsafe extern "C" fn(edit_section: *mut EDIT_SECTION, file: LPCWSTR),
1429    ),
1430
1431    /// ファイルをD&Dした時に呼ばれる関数を登録する
1432    /// 引数paramを渡して編集セクションにしないでコールバックを呼び出します
1433    /// name : ドラッグ時のツールチップや入力プラグインの設定で表示する名称
1434    /// filefilter : D&Dに対応するファイルフィルタ
1435    /// param : 任意のユーザーデータのポインタ
1436    /// func_proc_file_drop : ファイルをD&Dした時のコールバック関数
1437    pub register_file_drop_param_handler: unsafe extern "C" fn(
1438        name: LPCWSTR,
1439        filefilter: LPCWSTR,
1440        param: *mut c_void,
1441        func_proc_file_drop: unsafe extern "C" fn(param: *mut c_void, file: LPCWSTR),
1442    ),
1443
1444    /// オブジェクト編集の設定項目メニューを登録する (オブジェクト編集の右クリックメニューに追加されます)
1445    /// name : 設定項目メニューの名称 ※名称に'\'を入れると表示を複数階層に出来ます
1446    /// allow_effect_only : エフェクトのみを許可するか? ※trueの場合はitemがnullptrで呼ばれるケースを許可します
1447    /// func_proc_item_menu : 設定項目メニュー選択時のコールバック関数
1448    /// ※コールバック関数の引数はget_object_item_value()の引数と同じ形式になります
1449    pub register_object_item_menu: unsafe extern "C" fn(
1450        name: LPCWSTR,
1451        allow_effect_only: bool,
1452        func_proc_item_menu: unsafe extern "C" fn(
1453            edit: *mut EDIT_SECTION,
1454            object: OBJECT_HANDLE,
1455            effect: LPCWSTR,
1456            item: LPCWSTR,
1457        ),
1458    ),
1459
1460    /// オブジェクト編集の設定項目メニューを登録する (オブジェクト編集の右クリックメニューに追加されます)
1461    /// 引数paramを渡して編集セクションにしないでコールバックを呼び出します
1462    /// name : 設定項目メニューの名称 ※名称に'\'を入れると表示を複数階層に出来ます
1463    /// allow_effect_only : エフェクトのみを許可するか? ※trueの場合はitemがnullptrで呼ばれるケースを許可します
1464    /// param : 任意のユーザーデータのポインタ
1465    /// func_proc_item_menu : 設定項目メニュー選択時のコールバック関数
1466    /// ※コールバック関数の引数はget_object_item_value()の引数と同じ形式になります
1467    pub register_object_item_menu_param: unsafe extern "C" fn(
1468        name: LPCWSTR,
1469        allow_effect_only: bool,
1470        param: *mut c_void,
1471        func_proc_item_menu: unsafe extern "C" fn(
1472            param: *mut c_void,
1473            object: OBJECT_HANDLE,
1474            effect: LPCWSTR,
1475            item: LPCWSTR,
1476        ),
1477    ),
1478
1479    /// スクリプトモジュールをモジュール名を指定して登録する
1480    /// script_module_table : スクリプトモジュール構造体
1481    /// module_name : モジュール名
1482    pub register_script_module_name:
1483        unsafe extern "C" fn(script_module_table: *mut SCRIPT_MODULE_TABLE, module_name: LPCWSTR),
1484
1485    /// フォントコレクションを登録する
1486    /// collection : フォントコレクション (IDWriteFontCollectionのポインタ)
1487    /// ※DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED)から作成したものが利用出来ると思います
1488    pub register_font_collection: unsafe extern "C" fn(collection: *mut std::ffi::c_void),
1489
1490    /// 指定のイベントのコールバック関数を登録する
1491    /// コールバック関数はイベント通知スレッドから呼ばれます
1492    /// イベント処理からcall_edit_section()は利用出来ません
1493    /// event : イベント種別
1494    /// func_proc_event : イベント処理のコールバック関数
1495    pub register_event_listener: unsafe extern "C" fn(
1496        r#type: EVENT_TYPE,
1497        param: *mut c_void,
1498        func_proc_event: unsafe extern "C" fn(param: *mut c_void),
1499    ),
1500}