[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);

参考サイト