祝 Slint 1.9リリース 

# はじめに
　Rustによる軽量GUIフレームワーク[「スリント」のアドベントカレンダー](https://qiita.com/advent-calendar/2024/slint)も残りわずかとなってきました。天気予報では雪マークが付き、強く冷え込んだ朝ですが、今日も一日がんばりましょう。
　昨日は @task_jpさんによる「[Slint のダイアルのサンプルコードから学ぶ](https://qiita.com/task_jp/items/34949faa225c17d197e6)」でした。サンプルの紹介だけにとどまらず改善してプルリクを送るまでがセットなあたりさすが@task_jpさん。見習っていかないと。

## 本日のお題
https://slint.dev/blog/slint-1.9-released

　これまでの更新頻度から時期的に被るなぁとは思っていましたが、mixi2に新設されたslintコミュニティで @task_jp さんから今日でるみたいだから記事にしては？と提案いただきました。

　時差の都合もあってか夜中の1時ごろはまだ記事でてなかったのですけどね。というわけで、カレンダー埋めようと思った朝にリリースがありましたので、今日はリリースについて触れたいと思います。

# これまでのリリース
公式ブログのアナウンス日（Blog記事）をみてみましょう

## Slint 1.0 より前
もともとSixtyFPSという社名と同じ名前で開発が行われていました。

| Date     | Version |
|:---------|:---------|
|2021/04/27| SixtyFPS v0.0.6 |
|2021/09/19| SixtyFPS v0.1.0 |
|2021/09/09| SixtyFPS v0.1.2 |
|2021/10/06| SixtyFPS v0.1.3 |
|2022/01/21| SixtyFPS v0.1.6 |
|2022/02/10| Slint 0.2.0 |
|2022/07/06| Slint 0.2.5 |
|2022/09/14| Slint 0.3.0 |
|2023/01/25| Slint 0.3.4 |

## Slint 1.0 以降

Slintになってからのリリース日（Blog公開日）です。概ね２ヶ月おきにマイナーリリースされています（パッチリリースはもう少し頻繁に行われますが）。

<table>
<tr>
  <th>リリース日</th>
  <th>バージョン</th>
  <th>概要</th>
</tr>  
<tr>
  <td>2023/04/03</td>
  <td>Slint 1.0</td>
  <td>
    1.0 リリース
  </td>  
</tr>

<tr>
  <td>2023/06/26</td>
  <td>Slint 1.1</td>
  <td>
    <ul>
      <li>新機能と機能強化の追加</li>
      <li>ロイヤリティフリーのライセンスオプションを追加</li>
    </ul>
  </td>  
</tr>
<tr>
  <td>2023/09/04</td>
  <td>Slint 1.2</td>
  <td>
    <ul>
      <li>プラットフォームAPIの改善</li>
      <li>Espressifのサポート</li>
      <li>LinuxKMSバックエンド追加</li>
      <li>その他の機能とバグ修正</li>
    </ul>  
  </td>  
</tr>
<tr>
  <td>2023/11/10</td>
  <td>Slint 1.3</td>
  <td>
    <ul>
      <li>WindowsとmacOSのネイティブスタイル追加</li>
      <li>NodeJS API追加</li>
    </ul>
  </td>  
</tr>
<tr>
  <td>2024/01/31</td>
  <td>Slint 1.4</td>
  <td>
    <ul>
      <li>新しいスタイル追加</li>
      <li>新規API追加</li>
    </ul>  
  </td>  
</tr>
<tr>
  <td>2024/03/14</td>
  <td>Slint 1.5</td>
  <td>
    <ul>
      <li>Androidプラットフォームのサポート</li>
      <li>ライブプレビュー機能の改善</li>
      <li>その他の機能強化とバグ修正</li>
    </ul>
  </td>  
</tr>
<tr>
  <td>2024/05/13</td>
  <td>Slint 1.6</td>
  <td>
    <ul>
      <li>インタラクティブなデザインモードの改善</li>
      <li>新たなPythonパッケージの提供</li>
      <li>アクセシビリティの向上</li>
    </ul>  
  </td>  
</tr>
<tr>
  <td>2024/07/18</td>
  <td>Slint 1.7</td>
  <td>
    <ul>
      <li>DatePickerPopupおよびTimePickerPopupウィジェットの追加</li>
      <li>マルチウィンドウサポートの強化</li>
      <li>ライブプレビューの再設計</li>
    </ul>    
  </td>  
</tr>
<tr>
  <td>2024/09/23</td>
  <td>Slint 1.8</td>
  <td>
    <ul>
      <li>プロパティ変更時のコールバック機能を追加</li>
      <li>TimerおよびSwipeGestureHandler要素の導入</li>
      <li>ライブプレビューとVisual Studio Code拡張機能の改善</li>
      <li>STM32組み込みボード向けのC++テンプレート追加</li>
      <li>数学関数の後置サポートとatan2の追加</li>
    </ul>  
  </td>  
</tr>

<tr>
  <td>2024/12/18</td>
  <td>Slint 1.9</td>
  <td>
    <ul>
      <li>ドキュメントの刷新</li>
      <li>ライブプレビューの強化ーエレメントインスペクター</li>
      <li>翻訳の実行ファイル埋め込み</li>
      <li>ポップアップウィンドウの改善</li>
      <li>コールバック宣言に引数名付与を可能にしました</li>
      <li>その他の機能とバグ修正</li>
    </ul>  
  </td>  
</tr>
</table>

# Release 1.9の詳細（チェンジログより）

## 一般
 - Rust最小バージョンは 1.77となります
 - XDG-App ID登録サポート　([#1332](https://github.com/slint-ui/slint/issues/1332))
 - 翻訳をバイナリにバンドルする機能の追加
 - タイマーのパニック問題修正　([#6187](https://github.com/slint-ui/slint/issues/6187)、[#6505](https://github.com/slint-ui/slint/issues/6505))
 - 古いAndroid(9.0)への対応を修正
 - Android Destoyイベント処理修正　([#6626](https://github.com/slint-ui/slint/issues/6626))
 - winit: resize無効で最大化ボタンの無効化
 - winit: Linuxでダーク・ライト配色に対応　([#4392](https://github.com/slint-ui/slint/issues/4392))

## Slint言語
 - コールバック宣言の引数名に対応
 - アニメーションに directionプロパティ追加 ([#6260](https://github.com/slint-ui/slint/issues/6260))
 - TextInput
   - 選択時のスタイル色反映されない問題を修正 ([#6326](https://github.com/slint-ui/slint/issues/6326))
   - キーイベントをインターセプトするためのコールバック追加(key-pressed, key-released)
   - 左クリック後のマウスカーソルを修正　([#6444](https://github.com/slint-ui/slint/issues/6444))
   - 左、右を押したときの選択解除の動作を改善 ([#6511](https://github.com/slint-ui/slint/issues/6511))
- TextInput/Text - font-metrixプロパティの追加 ([#6047](https://github.com/slint-ui/slint/issues/6047))
 - コンパイラパニックを引き起こし未使用 changedコールバックの修正 ([#6331](https://github.com/slint-ui/slint/issues/6331))
 - inとin-out間の双方向バインディグを非推奨に変更 ([#6400](https://github.com/slint-ui/slint/issues/6400))
 - TouchAread操作中のenabled = false設定でキャンセルイベント発生。pressed,has-hoverプロパティの適切な修正 ([#6422](https://github.com/slint-ui/slint/issues/6422))
 - 共通プロパティの追加
   -  accessible-item-selectable
   -  accessible-item-selected
   -  accessible-enabled
   -  accessible-item-index
   -  accessible-delegate-focus
- インポートのファイル名と大文字・小文字が不一致のファイルがある場合に警告 ([#4624](https://github.com/slint-ui/slint/issues/4265))  
- グローバル内のプロパティ変更コールバックをサポート ([#6599](https://github.com/slint-ui/slint/issues/6599))
- Window
  - skip-taskbarプロパティの追加([#6911](https://github.com/slint-ui/slint/issues/6911))
  - full-screenプロパティの追加([#6665](https://github.com/slint-ui/slint/issues/6665))
  - iconを大きなタスクバーアイコンとしても利用 
- min()関数およびmax()関数でrem unit(相対フォント係数)をサポート
- min()/max()/clamp() で % unit引数を修正([#7118](https://github.com/slint-ui/slint/issues/7118))
- @linear-gradient, @radial-gradient の colorプロパティ直接割り当てを警告 ([#6819](https://github.com/slint-ui/slint/issues/6819))
- SwipeGestureHandlerのしきい値と動作を修正([#6344](https://github.com/slint-ui/slint/issues/6344)、[#6542](https://github.com/slint-ui/slint/issues/6542)、[#6543](https://github.com/slint-ui/slint/issues/6543))
- PopupWindow
  - クリッピング回避のため配置を改善
  - 複数のPopupWindowの同時ポップアップをサポート([#4356](https://github.com/slint-ui/slint/issues/4356))
  - close-policyプロパティを追加し、close-on-clickを非推奨化([#6614](https://github.com/slint-ui/slint/issues/6614))
  - フォーカスを修正
- グローバル相互参照に関するバグを修正([#6984](https://github.com/slint-ui/slint/issues/6984))

## ウィジェット
- CheckBox
  - Fluent スタイルのテキストの色を修正([#6239](https://github.com/slint-ui/slint/issues/6239))
  - Fluent および Cupertino スタイルの余白を削除([#6639](https://github.com/slint-ui/slint/issues/6639))
- LineEdit
  - カーソルが範囲外に描画される問題を修正([#6243](https://github.com/slint-ui/slint/issues/6243))
- TabWidget
  - タブのオーバーフロー動作を修正([#6517](https://github.com/slint-ui/slint/issues/6517))
- SpinBox
  - horizontal-alignmentプロパティを追加
- StyleMetrics
  - layout-spacing/layout-padding利用時の非推奨を取りやめ
- Slider
  - stepプロパティの追加
- StandardListView
  - キーボードナビゲーションを改善 ([#6955](https://github.com/slint-ui/slint/issues/6955))
- ListView
  - initおよびchangedコールバックが呼び出されない問題を修正([#6836](https://github.com/slint-ui/slint/issues/6836)) 

## API
### Rust
 - slint_build::compile_with_output_path を追加（出力先を指定できるようになりました）
 - Rust で生成されたコードで PopupWindow のinitコールバックハンドラが2回呼び出される問題を修正
 - PhysicalPosition, LogicalPosition, PhysicalSize, LogicalSizeなどのシリアライス・デシリアライズのためserdeトレイルを利用([#6534](https://github.com/slint-ui/slint/issues/6534))
 - 生成されたコード内の浮動小数点数を比較でapprox_eq利用
 - バックエンド、レンダラー、レンダラー固有の機能を選択するためBackendSelector追加
 - ToSharedString追加([#6845](https://github.comhttps://github.com/slint-ui/slint/issues/6479/slint-ui/slint/issues/6845))
 - SharedStringにAsRef<Path>とAsRef<OsStr>を実装

### C++
 - ピクセルバッファアクセサー(Image::to_rgb8　, to_rgba8 , to_rgba8_premultiplied)の追加  ([#6399](https://github.com/slint-ui/slint/issues/6399))
 - SharedString::size() の追加  ([#6417](https://github.com/slint-ui/slint/issues/6417))
 - CMake - SLINT_EMBED_RESOURCESおよびSLINT_SCALE_FACTORのサポート
 - 生成された識別子の末尾に'_'を追加 ([#5613](https://github.com/slint-ui/slint/issues/5613))
 - 生成されたコードのfloat比較の改善
 - esp-idf: vsync ロックを修正
 - slint::SharedStringへto_lowercaseおよびto_uppercaseを追加([#6869](https://github.com/slint-ui/slint/issues/6869))
 - slint::Window::take_snapshot()を追加
### Node.JS
 - 列挙型をサポート
 - initTranslations機能の追加([#6504](https://github.com/slint-ui/slint/issues/6504))

## LSP・ツール
### LSP
 - 変更されたコールバックの自動補完
 - コード保管で _ を-に変換せずそのまま表示 ([#6479](https://github.com/slint-ui/slint/issues/6479))
 - @ image-url のツールチップにプレビュー画像を追加
 - importファイル名変更時のファイル再読込を修正
 - シグネチャのヘルプを実装

### ライブプレビュー
 - 新しい選択ポップアップを追加
 - エディターで「プレビューを表示」を選択でウィンドウ全面表示してフォーカスする(#196)
 - macOSではQuitをCloseに変更し、cmd+wでウィンドウを閉じるように修正
 - run_event_loopエラーが返された場合のパニックを修正し、エディターにエラーを表示
 - レイアウトにエレメントをドラッグするときに発生するパニックを修正
 - プロパティエディターで、選択したエレメントに適用できないレイアウトプロパティをフィルター
 - プロパティエディターで、負数を表示
 - プレビューの遅延更新
 - ファイルシステム上で更新された画像リソースを再読込
 - macOSでcmd+rによる再読み込みのサポート

### SlintPad
 - Monaco エディターとその他の依存関係を更新

## レンダラー
### FemoteVG
 - テクスチャ境界での偶発的なラップアラウンドによるテクスチャサンプリングのアーティファクトを修正
 - 非ゼロワインディングルール (Inter など) に依存するフォントのレンダリングを修正
### ソフトウェアレンダラー
 - char-wrapが行間で改行されない問題を修正しました
 - 部分的な描画と回転によるアーティファクトを修正
 - 分数スケール係数によるパニックを修正([#6932](https://github.com/slint-ui/slint/issues/6932))
### Skia
 - ボックスシャドウに不透明度が正しく適用されない問題を修正'([#6359](https://github.com/slint-ui/slint/issues/6359))

# 特徴的な修正について
## ドキュメントの修正
https://docs.slint.dev/latest/docs/slint/

　Change Logには入っていませんが、他の記事でも記載したとおりドキュメント構成ががっつり修正されています。今までよりスッキリして見やすくなっています。

## コールバック宣言に引数名対応
 ```qml:
 callback select-element(string, int, length, length);
 ```
　今まで、上記のようにコールバック宣言の引数は型しか書けませんでしたが、引数の意味がコードから読み取れず不便でした。今後は以下の様に引数名を記載できます。

  ```qml:
 callback select-element(file: string, offset: int, x: length, y: length);
 ```

## Live-Preview周りの強化

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58828/1878df4a-3a7b-f3f1-71bd-d8adbef1a2e3.png)

　マウスカーソルの下にあるものを階層順に、指定されたエレメント名で表示するコンテキストメニューが追加されました。フィルタ付きなので深い階層の場合でも探しやすくなっています。

 # まとめ
 　本日は Slint 1.9 がリリースされたということで、チェンジログをざっくり翻訳して、Issue番号にアクセスしやすくしておきました。個人的にはコールバック宣言の引数名入れられるのがとても嬉しいです。コンパイラには無意味な情報なのですが、いちいち引数の意味って覚えてないですからねぇ。
　明日は @task_jp さんによる「Slint にバグ報告をしてみました」です。　Slintはまだ若いGUIフレームワークなので頻繁に更新や多くの修正がありますが、利用者の要望や発見不具合の報告は非常に大事です。ぜひ参考にして改善のお手伝いをしていきたいものですね。