Skip to content

Commit

Permalink
Prepared document.
Browse files Browse the repository at this point in the history
+ Slight refactor.
  • Loading branch information
sigma-axis committed Jul 14, 2024
1 parent 17839f6 commit ae7bfa9
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 26 deletions.
82 changes: 80 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,18 @@

- 代わりに `Shift` を押しているときは関連トラックも連動して変化方法が設定されるようになります.

1. トラックバーの変化方法をツールチップの形で表示できます.[[詳細](#トラックバーの変化方法をツールチップで表示する機能)]

TODO: image.

パラメタや,加速・減速の設定も表示されます.

1. トラックバーの変化方法のパラメタ設定を,ホイールクリックで表示させることができます.[[詳細](#トラックバーの変化方法のパラメタ設定をホイールクリックで表示する機能)]

TODO: image.

- トラックバーの名前ボタンをホイールクリック.


## 動作要件

Expand Down Expand Up @@ -280,6 +292,25 @@

- 初期状態では OFF になっているので[設定ファイル](#easings)で有効化してください.

### トラックバーの変化方法をツールチップで表示する機能

トラックバーの名前のボタン部分にマウスカーソルを置くとツールチップが表示され,変化方法の名前や設定パラメタ,加速・減速の設定を,メニューを開かずに確認することができます.

- トラックバーの変化方法を「移動無し」にしている場合は表示されません.

- カーソルを置いてから表示されるまでの時間や,表示が自動的に消えるまでの時間などは[設定ファイル](#easings)で調整できます.

- 初期状態では OFF になっているので[設定ファイル](#easings)で有効化してください.

### トラックバーの変化方法のパラメタ設定をホイールクリックで表示する機能

トラックバーの名前ボタンをホイールクリックで,パラメタ設定ウィンドウを表示させることができます.

- 普通に左クリックしてから「設定」を選ぶ,または `Alt` + 左クリックも標準動作としてあります.それにホイールクリックも加えた形です.使いやすい入力方法を自由に選んでください.

- [設定ファイル](#easings)でこの機能の有効化・無効化を切り替えられます.


## 設定ファイルについて

テキストエディタで `reactive_dlg.ini` を編集することで挙動をカスタマイズできます.ファイル内にも説明が書いてあるためそちらもご参照ください.
Expand Down Expand Up @@ -512,9 +543,56 @@ rate_boost=10
### `[Easings]`
[関連トラックの変化方法指定時の `Shift` キーを反転する機能](#関連トラックの変化方法指定時の-shift-キーを反転する機能)の有効,無効を切り替えられます.
トラックバーの変化方法編集に関する設定を変更できます.
- `linked_track_invert_shift` で[`Shift` キーを反転する機能](#関連トラックの変化方法指定時の-shift-キーを反転する機能)を有効化・無効化できます.
- `linked_track_invert_shift` が `0` のとき無効, `1` で有効になります.初期値だと `linked_track_invert_shift=0` で無効.
`0` で無効,`1` で有効です.初期設定だと `linked_track_invert_shift=0` で無効.
- `wheel_click` で[パラメタ設定をホイールクリックで表示する機能](#トラックバーの変化方法のパラメタ設定をホイールクリックで表示する機能)を有効化・無効化できます.
`0` で無効,`1` で有効です.初期設定だと `wheel_click=1` で有効.
- `tooltip` で[ツールチップ表示](#トラックバーの変化方法をツールチップで表示する機能)を有効化・無効化できます.
`0` で無効,`1` で有効です.初期設定だと `tooltip=0` で無効.
- `tip_anim` でツールチップの表示のフェードインアニメーションを有効化・無効化できます.
`0` で無効,`1` で有効です.初期設定だと `tip_anim=1` で有効.
- `tip_delay` で,マウスがボタン上に移動してからツールチップが表示されるまでの時間を指定できます.
指定はミリ秒 ($\tfrac{1}{1000}$ 秒) 単位で,最小値は `0`, 最大値は `60000` (1 分), 初期値は `340` (3.4 秒) です.
- `tip_duration` で,マウスを動かしていなくてもツールチップが自動的に消えるまでの存続時間を指定できます.
指定はミリ秒単位で,最小値は `0`, 最大値は `60000` (1 分), 初期値は `10000` (10 秒) です.
- `tip_text_color` でツールチップのテキスト色を指定できます.
色は `0xRRGGBB` の形式で指定します.`-1` を指定するとシステムのデフォルトの色になります.初期値は `-1` でデフォルトの色.
- ダークモード化プラグインのバージョンや設定などによってはテキストが見えにくい色になることがあったため,その対策のための設定項目です.
- ダークモード化プラグインのバージョンや設定によっては反映されないことがあります.
- なるべくならダークモード化プラグインのバージョン更新や設定変更での対応を試してみてください.
- [アルティメットプラグイン](https://github.com/hebiiro/anti.aviutl.ultimate.plugin)の `r35` (記述時点での最新) だと,この設定は反映されませんが見やすいテキスト色で表示されているのを確認しています.
- 以上のツールチップに関する設定は,ツールチップ機能が無効 (`tooltip=0`) の場合無視されます.
初期設定は以下の通りです:
```ini
linked_track_invert_shift=0
wheel_click=1
tooltip=0
tip_anim=1
tip_delay=340
tip_duration=10000
tip_text_color=-1
```
- `Shift` を押しながら変化方法を選択はデフォルトの挙動 (`Shift` なしで関連トラックをまとめて変更,`Shift` ありで独立に変更).
- ホイールクリックによるパラメタ設定の表示は有効.
- ツールチップは無効.
## 謝辞
Expand Down
1 change: 1 addition & 0 deletions assets/reactive_dlg.ini
Original file line number Diff line number Diff line change
Expand Up @@ -302,5 +302,6 @@ tip_text_color=-1
; tip_text_color
; ツールチップに表示されるテキストの色を 0xRRGGBB の形式で指定します.
; -1 を指定するとシステムのデフォルトの色で表示されます.
; (ダークモード化プラグインなどによっては反映されないことがあります).
; 初期値は -1 でデフォルトの色.

30 changes: 24 additions & 6 deletions reactive_dlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,13 +115,13 @@ inline constinit struct ExEdit092 {

HWND* filter_checkboxes; // 0x14d368
HWND* filter_separators; // 0x1790d8
intptr_t* exdata_table; // 0x1e0fa8
uintptr_t* exdata_table; // 0x1e0fa8
char const* basic_animation_names; // 0x0c1f08
char const* track_script_names; // 0x0ca010
uint32_t* easing_specs_builtin; // 0x0b8390
uint8_t* easing_specs_script; // 0x231d90

void* cmp_shift_state_easing; // 0x02ca90+1
uintptr_t cmp_shift_state_easing; // 0x02ca90

// index: index of the script; zero1, zero2: zero, unknown otherwise.
void(*load_easing_spec)(int32_t index, int32_t zero1, int32_t zero2); // 0x087940;
Expand All @@ -130,7 +130,7 @@ inline constinit struct ExEdit092 {
void init_pointers()
{
auto pick_addr = [exedit_base=reinterpret_cast<uintptr_t>(fp->dll_hinst)]
<class T>(T& target, ptrdiff_t offset) { target = reinterpret_cast<T>(exedit_base + offset); };
<class T>(T& target, ptrdiff_t offset) { target = std::bit_cast<T>(exedit_base + offset); };
pick_addr(ObjectArray_ptr, 0x1e0fa4);
pick_addr(SettingDialogObjectIndex, 0x177a10);
pick_addr(hwnd_setting_dlg, 0x1539c8);
Expand All @@ -153,7 +153,7 @@ inline constinit struct ExEdit092 {
pick_addr(easing_specs_builtin, 0x0b8390);
pick_addr(easing_specs_script, 0x231d90);

pick_addr(cmp_shift_state_easing, 0x02ca90 + 1);
pick_addr(cmp_shift_state_easing, 0x02ca90);
pick_addr(load_easing_spec, 0x087940);
}
} exedit;
Expand All @@ -171,6 +171,23 @@ namespace filter_id
}


////////////////////////////////
// 文字エンコード変換.
////////////////////////////////
struct Encodes {
template<UINT codepage = CP_UTF8>
static std::wstring to_wstring(const std::string_view& src) {
if (src.length() == 0) return L"";

auto wlen = ::MultiByteToWideChar(codepage, 0, src.data(), src.length(), nullptr, 0);
std::wstring ret(wlen, L'\0');
::MultiByteToWideChar(codepage, 0, src.data(), src.length(), ret.data(), wlen);

return ret;
}
};


////////////////////////////////
// Windows API 利用の補助関数.
////////////////////////////////
Expand Down Expand Up @@ -700,7 +717,8 @@ struct FilterName : SettingDlg {

auto& cache = name_cache[name];
if (!cache.is_valid())
cache.init(exedit.filter_checkboxes[filter_index], format_anim_name(name));
cache.init(exedit.filter_checkboxes[filter_index],
format_anim_name(Encodes::to_wstring<CP_ACP>(name)));
return &cache;
}

Expand Down Expand Up @@ -1942,7 +1960,7 @@ BOOL func_init(FilterPlugin* fp)
// 0f 8c 87 00 00 00 jl
// V
// 0f 8d 87 00 00 00 jge
memory::ProtectHelper::write(exedit.cmp_shift_state_easing, byte{ 0x8d });
memory::ProtectHelper::write(exedit.cmp_shift_state_easing + 1, byte{ 0x8d });

return TRUE;
}
Expand Down
18 changes: 0 additions & 18 deletions slim_formatter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,6 @@ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR I
#include <Windows.h>


////////////////////////////////
// 文字エンコード変換.
////////////////////////////////
struct Encodes {
template<UINT codepage = CP_UTF8>
static std::wstring to_wstring(const std::string_view& src) {
if (src.length() == 0) return L"";

auto wlen = ::MultiByteToWideChar(codepage, 0, src.data(), src.length(), nullptr, 0);
std::wstring ret(wlen, L'\0');
::MultiByteToWideChar(codepage, 0, src.data(), src.length(), ret.data(), wlen);

return ret;
}
};


////////////////////////////////
// std::format() の簡易版.
////////////////////////////////
Expand Down Expand Up @@ -65,7 +48,6 @@ class slim_formatter {

return ret;
}
constexpr std::wstring operator()(char const* name) const { return (*this)(Encodes::to_wstring<CP_ACP>(name)); }
constexpr void init(std::wstring const& fmt)
{
base = fmt;
Expand Down

0 comments on commit ae7bfa9

Please sign in to comment.