[M1 Mac, Big Sur 11.6.8, clang 13.0.0, FLTK 1.3.8, NO IDE]
4月に書いた[C++] 48の記事以降、その内容が最善な方法ではないと自覚していて、ずっともやもやしていたのですが、ようやくシンプルに線を描けるようになりました。
Fl_Widgetを継承したLineクラスのdraw()関数内でx()関数、y()関数、w()関数、h()関数を使うことで解決しました。
x()ではなくgetx()だったら瞬時に意味を理解していたと思いますが、引数の有無でgetとsetを使い分けるのがFLTKの仕様ですから慣れるしかないです。
FLTKはいいツールだというのに、こういった癖の強いところでC++ユーザーに受け入れられないのではと思います。せめてLineクラスは標準Widgetとして用意しておくべきでしょう。
#include <Line.h>
Line::Line(int x,int y, int w,int h):Fl_Widget(x,y,w,h){
}
Line::~Line(){}
void Line::draw(){
fl_color(fl_rgb_color(211,207,217));
fl_line_style(0,1);
int x1 = x(), y1 = y();
int x2 = x()+ w(), y2 = y()+ h();
fl_line(x1,y1,x2,y2);
}
#pragma once
#include <FLstd.h> // 自製
#include <cppstd.h> // 自製
class Line: public Fl_Widget
{
public:
Line(int x,int y, int w, int h);
~Line();
void draw();
};
#include "Line.h"
Line *line1 = new Line(40,171,309,0);
Line *line2 = new Line(349,10,0,195);
Line *line3 = new Line(278,131,71,0);
Line *line4 = new Line(278,131,0,41);