[C++] 18 FLTK:ドラッグ&ドロップ

[M1 Mac, Big Sur 11.6.5, FLTK 1.3.8]

一つの山場と予想されたドラッグ&ドロップですが、これについては有益なネット情報がありましたので拝借しました。

この40行のコードを書こうと思ったら今の私なら半日仕事です。とても助かりました。参考コードでauto型の存在を初めて知りました(C++11から採用)。Javaもvar型で型推論できますが、使ったことはありませんでした。

Fl_InputとセットになったFL_Box継承のBoxクラスは他のウィジェットが見えるように invisible(FL_NO_BOX)にするなど私なりに少し工夫を入れています。

ここまででappファイルのサイズはたったの942KBです。この分だと最終的には2,3MB以内に収まる感じがします。PyQt6版の100分の1です。

期待通りの爆速軽量アプリに仕上がりそうです。

<関連する関数とクラス>
class Box : Fl_Box {
  Fl_Input* input_line;
  public:
    Box(int, int, int, int, Fl_Input*);
  private:
    auto handle(int) -> int override;
};

Box::Box(int x, int y, int width, int height, Fl_Input* input) : Fl_Box(FL_NO_BOX, x, y, width, height, "") {
   this->input_line = input;
}

auto Box::handle(int event) -> int {
   switch (event) {
     case FL_DND_DRAG:
     case FL_DND_ENTER:
     case FL_DND_RELEASE:
     return 1;

     case FL_PASTE:
       input_line->value(Fl::event_text());
     return 1;

     default:
     return Fl_Box::handle(event);
  }
}

<mainクラスの一部>
input_line = new Fl_Input(50,10,220,25,"");

Box *box = new Box(0, 0, 360,220, input_line);

参考サイト

[C++] 17 FLTK:バージョン1.3.8のビルド&インストール

[M1 Mac, Big Sur 11.6.5, FLTK 1.3.8(24/2/13現在 1.3.9)]

HomebrewからApple Silicon用ビルド済みバイナリが配布されていますが、自分でビルドしたかったのでGitHubにあるバージョン1.4.0のREADME.macOS.mdを読みながら試してみました。

1.4.0ではビルドはできたもののインストールに失敗、安定版の1.3.8ではうまくいきました。

これでFLTKを自分の好きなように改変することも可能になりました。

<FLTK 1.3.8のインストール方法>
事前にCMakeなど必要なツールをインストールしておく。

1.公式サイトからバージョン1.3.8のtar.gzファイルをダウンロードする。

2.ファイルを解凍してfltkフォルダ内にディレクトリを作成し、cmakeコマンドを実行する。

mkdir build
cd build
mkdir Makefile
cd Makefile
cmake -G "Unix Makefiles" \
    -D OPTION_USE_SYSTEM_LIBJPEG=Off \
    -D OPTION_USE_SYSTEM_ZLIB=Off \
    -D OPTION_USE_SYSTEM_LIBPNG=Off \
    -D OPTION_USE_THREADS=ON \
    ../..

2024/2/13 オプション追加:
-D OPTION_USE_THREADS=ONによりマルチスレッドサポートを有効にする。Fl::lockなどが使えるようになる。

3.ビルドする。

make

4.デモアプリを起動する(省略可)。

open bin/test/demo.app

5.インストールする。[/usr/local/bin]

sudo make install