Skip to content

v0.6.4

Choose a tag to compare

@github-actions github-actions released this 23 Aug 08:56
· 116 commits to main since this release

追加

  • ヒストリーをブランチ(分岐)付きのツリーで表示できるようにした。Undoしてから
    別の編集をしても、それまでの履歴は「⑂」の分岐として残り、クリックすればその
    未来へ戻せる(いま辿っている履歴は入れ替わりに分岐として保存されるので、
    行き来できる)。あわせて、すべてUndoした「開始状態」の行を追加した。

修正

  • クオリティ変形の回転で、線や色境界が不規則にギザついていた問題を修正。出力画素
    から元画像へ逆写像し、面積カバレッジの多数決で色を決める方式へ変更した。
    2値のまま、回転角に応じた規則的な階段状のエッジになる。
  • クオリティ変形の90度・180度・270度回転が、わずかに画素を取りこぼしていた問題を修正
    (完全に無損失になった)。
  • クオリティ変形の縮小で、細い線が消えていた問題を修正(25%縮小でも線が途切れない)。
  • クオリティ変形が258色以上の素材を無言で64色へ減色していた問題を修正。上限を4096色へ
    引き上げ、元の色のまま変形する。上限を超える場合のみ減色し、その旨をステータスに表示する。
  • クオリティ変形のプレビューが、通常プレビューより一回り太っていた問題を修正
    (ぼかし由来の膨張を廃止。両者の形状がほぼ一致するようになった)。
  • Python 3.10 でパッケージ全体が import できなかった問題を修正(3.11以降にしか
    存在しない tomllib を無条件に読み込んでいた)。新設した移植性CIジョブが検出。

変更

  • クオリティ変形を既定でONにした。
  • クオリティ変形と「すべてのコマに適用」を併用できるようにした(従来は排他で、
    クオリティON時は現在のコマだけが対象だった)。
  • クオリティ変形で色が重なった場合の優先順位を明確化(実線色が最優先、以降は暗い色順)。
    従来はRGBの辞書順という予測できない順序だった。

パフォーマンス

  • クオリティ変形のメッシュ変形を高速化(色数に比例していた処理を1回にまとめ、実測で7〜11倍)。
  • クオリティ変形の色分解を高速化(色ごとの全画素走査をやめ、実測で10〜25倍)。

内部

  • フレーム横断の一括適用を1つのランナーへ集約(frame_scope.py)。適用範囲を表す
    FrameScope と、1レイヤーを受け取って結果画像を返す純粋な op を渡すと、保持コマの
    重複除去・共有画像の扱い・進捗通知・キャンセル・Undo のまとめ上げをランナーが行う。
    機能ごとに「全コマ対応」を書き直す必要がなくなった。
  • ゴミ取り/塗り抜けと色置換(削除・統合を含む)を新ランナー経由へ移行。全コマへ
    適用しても Undo は1件(ScopedBatchUndo。レイヤーを跨げる)になり、ゴミ取りは
    実行中に中止できるようになった。中止時は部分適用を残さない。
  • 変形の再標本化を mask_transform.py(純NumPy)へ分離。ラベル画像+逆写像+
    面積カバレッジで実装し、Pillow への依存を描画経路から外した。
  • 変形品質の回帰テストを追加(階段の規則性、2値性、直角回転の無損失性、細線の連結性)。
  • canvas.py (4,225行) からタイムライン構造編集・描画ツール・自由変形ジオメトリを
    3つのMixinへ分離(canvas_timeline_ops.py / canvas_paint_tools.py /
    canvas_transform_geometry.py)。本体は1,815行。
  • color_panel.py (2,327行) を行ウィジェット群(color_panel_widgets.py)と
    5つのMixin(グループ化・選択・表示/非表示・マスク色・履歴スナップショット)へ分離。
    本体は808行。型スタブ _color_panel_members.py を新設。
    分離に伴いpyrightが未importの CheckClickArea / QGraphicsOpacityEffect を検出(実行時
    エラーになる箇所。from .common import * のためruffでは検出できなかった)。
  • main_window.py (3,385行) からUI組み立て・線画処理・入力処理を3つのMixinへ分離
    (main_window_ui_build.py / main_window_line_ops.py / main_window_input.py)。
    本体は1,048行となり、アプリ状態・キャンバス連携・ドキュメント生存期間だけが残った。
  • MainWindow.connect() を connect_signals() へ改名。PySide6ではMixin側に置いた
    connect が組み込みの QObject.connect に隠されるため(実際に分離時に発現した)。
  • 型スタブ(_main_window_members.py / _canvas_members.py)の Any を実型へ置き換え開始
    (palette / history_panel / 各タイマー / frames / undo_stack など)。
    pyright警告は149件から111件へ減少し、reportOptionalMemberAccess の緩和を撤去。
  • Undo/Redoのスタック要素を、タグ付きタプルから型付きデータクラス(undo_entries.py)へ移行。
  • Undoスタックを件数だけでなく保持画像の合計バイト数でも制限(MAX_UNDO_BYTES)。
  • 全Undo登録箇所を PaintCanvas.push_undo() に集約し、上限調整とRedo破棄の書き忘れを防止。
  • CIに移植性ジョブを追加(Python 3.10 / 3.12、および配布先であるWindowsでのテスト)。
  • ruffに bugbear (B) を追加。numpy の上限を <3 へ緩和(NumPy 2 で全テスト通過)。
  • カバレッジ下限を 35% から 37% へ引き上げ。
  • 設定ファイルを所有者のみ読み書き可(0600)で保存。