SDL2 で GUI 部品を使う為のソース

最新情報は、https://sirius10.net/RaspberryPi/SDL_gui/index.html をご覧ください。Web のページのほうがわかりやすいと思います。

[はじめに]
　この文章の内容及び、ダウンロードしたものは無保証です。一切の責任を作成者は負いません。自己責任で利用してください。また、サポートも一切行いません。as is でお願いします。

[SDL_gui ってなに？]
　SDL2 で　GUI 部品（ラベルやボタンなど）を使ってプログラミングするときのユーティリティーです。
　SDL で GUI を使えるようにするものは、既にあるようでです。C++ で作成しているようですが、GitHub に存在します (https://github.com/mozeal/SDL_gui)。そちらのほうが安全で機能が多いと思います。

　また、libguichan-sdl というものもあるようです。

　しかし、日本語のドキュメントが少ないため、なにが出来るのか。どう使っていくのかがわかりませんでした。作ったほうが早いと思ったので作ってしまいました。

　自前で作ってしまったので、公開してしまいます。SDL2 のみで作成しているので他のライブラリは必要ありません。その分、低機能ですが、制約はほとんど設けていないのでアイデア次第で何でもできます。

[なにができる？]
　SDL_gui.h をインクルードして、SDL_gui.c と一緒にコンパイルすることで、ボタンやチェックボックスなどを簡単に利用できるようになります。SDL2 だけを利用していますので、他のライブラリは必要ありません。ただし、基本的な機能しか実装していないのであまり期待してはいけません。
　どういったことが出来るかは、tutorial.txt をお読みください。関数の詳細については、functions.txt をお読みください。

[制限事項]

　ラベルやテキストボックスに複数行は使えません。長文の表示はできません。

　システムで IME が使えれば、テキストボックスでも日本語入力ができますが、変換中の文節変更などの表示はできません。また、カット＆ペーストも、文字列の選択もできません。

　GUI 部品の削除は個別に削除はできません。部品を全て削除することはできます。部品の非表示は出来るので、必要のない部品は非表示にしてください。

[実装されている GUI 部品]

　ラベル(LABEL)
    テキストを表示する部品です。

　ボタン(BUTTON)
    立体的な部品です。

　フラットボタン(FLATBUTTON)
    平面の部品です。

　チェックボックス(CHECKBOX)
    チェックマークがついた部品です。

　ラジオボタン(RADIOBUTTON)
    ボタンをグループにして、その中の一つを選択する部品です。

　ドロップダウンリスト(DROPDOWNLIST)
    マウスをプレスしたときにリストを表示して、その中から選ぶ部品です。

　テキストボックス(TEXTINPUT)
    1 行のテキストを入力する部品です。

[ファイル一覧]

- 01_gui_label.c
  チュートリアルのサンプルです。
- 02_gui_button.c
  チュートリアルのサンプルです。
- 03_gui_list.c
  チュートリアルのサンプルです。
- 04_gui_checkbox.c
  チュートリアルのサンプルです。
- 05_gui_radiobutton.c
  チュートリアルのサンプルです。
- 06_gui_textinput.c
  チュートリアルのサンプルです。
- 07_gui_dialog.c
  チュートリアルのサンプルです。
- 08_gui_example.c
  チュートリアルのサンプルです。
- Bomb1.bmp
  チュートリアルで使う画像ファイルです。
- Bomb2.bmp
  チュートリアルで使う画像ファイルです。
- Bomb3.bmp
  チュートリアルで使う画像ファイルです。
- SDL_gui.h
  GUI 部品を使うためのヘッダファイルです。
- SDL_gui.c
  GUI 部品の処理をするプログラムです。
- gui_test.c
  サンプルプログラムです。
- Makefile
  サンプルプログラムをコンパイルするための Makefile です。
- readme.txt
  このファイルです。
- tutrial.txt
  チュートリアルです。
- functions.txt
  関数詳細です。

[使い方]

　GUI 部品を使うプログラムは、SDL_gui.h をインクルードします。

　GUI 部品を使う前に、ウィンドウサイズと、GUI 部品へテキストを表示するときの色を parts_set_windowsize() 関数と parts_set_textcolor() 関数で設定します。

　テキストボックスを使う場合はさらに、text_buffer_allocate_parts() 関数でテキストバッファを確保します。

　GUI 部品は、add_parts() 関数で登録します。add_parts() 関数は、作成した GUI 部品の ID を返します。最初に作った GUI 部品は、ルートの部品になります。必要であればこの ID を使ってコールバック関数の登録や、テキスト表示位置の設定を行います。

　登録が終了したら、ウィンドウを描画するときに、draw_parts() 関数で GUI 部品の描画を行います。

　イベントループ内でマウスのイベント処理時に次の関数を呼び出します。

　・SDL_MOUSEMOTION
    mouse_motion_parts() 関数
  ・SDL_MOUSEBUTTONUP
    mouse_button_up_parts() 関数
  ・SDL_MOUSEBUTTONDOWN
    mouse_button_down_parts() 関数

　テキストボックスを使う場合は、更に次のイベント処理時に関数を呼び出します。

  ・SDL_TEXTINPUT
    textinput_parts() 関数
  ・SDL_TEXTEDITING
    textediting_parts() 関数
  ・SDL_KEYDOWN
    keydown_parts() 関数

　プログラム終了時に GUI データやテキストバッファを解放するには次の関数を呼び出します。

  free_parts() : 登録されている全ての GUI データを解放します。
  free_text_buffer_parts() : テキストバッファを解放します。

[免責]
　このプログラムを使ったことによる一切の責任を sirius は負いません。使用は自己責任でお願いします。

[著作権]
　本プログラムの著作権は sirius(https://sirius10.net) にありますが、本プログラムの著作権は主張いたしません。

[保証]
　無保証です。

[更新履歴]
　2021.11.10 公開
