[M1 Mac, Big Sur 11.6.5, FLTK 1.3.8]
Objective-Cのドラッグ&ドロップが今の私にはあまりにも難解なので、FLTKではどうやって実装していたか振り返ります。かなり簡単に実装できます。
FL_Boxでファイルをドロップする領域を指定し、ドロップされたファイルの情報をFL_Boxの引数で指定したFL_Inputに渡します。単純明快です。
Objective-Cのドラッグ&ドロップについては必須ではなく努力目標にして、FLTKアプリのCMakeLists.txt作成に優先して取り組むことにします。
同じ内容の実装でもC++(FLTK)とObjective-Cでこれだけ難易度が違うと難しい方を学ぼうとする気力がなかなかわきません。
Xcodeで書けばいいのですが、xibファイルやStoryboardを扱いたくないのでモチベが上がらないです。
<該当箇所のみ>
class Box : Fl_Box {
Fl_Input* input_line2;
public:
Box(int, int, int, int, Fl_Input*);
private:
auto handle(int) -> int override;
};
Box::Box(int x, int y, int width_input, int height_input, Fl_Input* input) :
Fl_Box(FL_NO_BOX, x, y, width_input, height_input, "") {
this->input_line2 = 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_line2->value(Fl::event_text());
input_line2->textsize(12);
input_line2->textfont(FL_HELVETICA);
return 1;
default:
return Fl_Box::handle(event);
}
}
int main(int argc, char **argv) {
Box *box = new Box(0, 0, 360,220, input_line);
}